Annotation of embedaddon/quagga/lib/vrf.h, revision 1.1
1.1 ! misho 1: /*
! 2: * VRF related header.
! 3: * Copyright (C) 2014 6WIND S.A.
! 4: *
! 5: * This file is part of GNU Zebra.
! 6: *
! 7: * GNU Zebra is free software; you can redistribute it and/or modify
! 8: * it under the terms of the GNU General Public License as published
! 9: * by the Free Software Foundation; either version 2, or (at your
! 10: * option) any later version.
! 11: *
! 12: * GNU Zebra is distributed in the hope that it will be useful, but
! 13: * WITHOUT ANY WARRANTY; without even the implied warranty of
! 14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 15: * General Public License for more details.
! 16: *
! 17: * You should have received a copy of the GNU General Public License
! 18: * along with GNU Zebra; see the file COPYING. If not, write to the
! 19: * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
! 20: * Boston, MA 02111-1307, USA.
! 21: */
! 22:
! 23: #ifndef _ZEBRA_VRF_H
! 24: #define _ZEBRA_VRF_H
! 25:
! 26: #include "linklist.h"
! 27:
! 28: /* The default VRF ID */
! 29: #define VRF_DEFAULT 0
! 30:
! 31: /*
! 32: * The command strings
! 33: */
! 34:
! 35: #define VRF_CMD_STR "vrf <0-65535>"
! 36: #define VRF_CMD_HELP_STR "Specify the VRF\nThe VRF ID\n"
! 37:
! 38: #define VRF_ALL_CMD_STR "vrf all"
! 39: #define VRF_ALL_CMD_HELP_STR "Specify the VRF\nAll VRFs\n"
! 40:
! 41: /*
! 42: * VRF hooks
! 43: */
! 44:
! 45: #define VRF_NEW_HOOK 0 /* a new VRF is just created */
! 46: #define VRF_DELETE_HOOK 1 /* a VRF is to be deleted */
! 47: #define VRF_ENABLE_HOOK 2 /* a VRF is ready to use */
! 48: #define VRF_DISABLE_HOOK 3 /* a VRF is to be unusable */
! 49:
! 50: /*
! 51: * Add a specific hook to VRF module.
! 52: * @param1: hook type
! 53: * @param2: the callback function
! 54: * - param 1: the VRF ID
! 55: * - param 2: the address of the user data pointer (the user data
! 56: * can be stored in or freed from there)
! 57: */
! 58: extern void vrf_add_hook (int, int (*)(vrf_id_t, void **));
! 59:
! 60: /*
! 61: * VRF iteration
! 62: */
! 63:
! 64: typedef void * vrf_iter_t;
! 65: #define VRF_ITER_INVALID NULL /* invalid value of the iterator */
! 66:
! 67: /*
! 68: * VRF iteration utilities. Example for the usage:
! 69: *
! 70: * vrf_iter_t iter = vrf_first();
! 71: * for (; iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 72: *
! 73: * or
! 74: *
! 75: * vrf_iter_t iter = vrf_iterator (<a given VRF ID>);
! 76: * for (; iter != VRF_ITER_INVALID; iter = vrf_next (iter))
! 77: */
! 78:
! 79: /* Return the iterator of the first VRF. */
! 80: extern vrf_iter_t vrf_first (void);
! 81: /* Return the next VRF iterator to the given iterator. */
! 82: extern vrf_iter_t vrf_next (vrf_iter_t);
! 83: /* Return the VRF iterator of the given VRF ID. If it does not exist,
! 84: * the iterator of the next existing VRF is returned. */
! 85: extern vrf_iter_t vrf_iterator (vrf_id_t);
! 86:
! 87: /*
! 88: * VRF iterator to properties
! 89: */
! 90: extern vrf_id_t vrf_iter2id (vrf_iter_t);
! 91: extern void *vrf_iter2info (vrf_iter_t);
! 92: extern struct list *vrf_iter2iflist (vrf_iter_t);
! 93:
! 94: /*
! 95: * Utilities to obtain the user data
! 96: */
! 97:
! 98: /* Get the data pointer of the specified VRF. If not found, create one. */
! 99: extern void *vrf_info_get (vrf_id_t);
! 100: /* Look up the data pointer of the specified VRF. */
! 101: extern void *vrf_info_lookup (vrf_id_t);
! 102:
! 103: /*
! 104: * Utilities to obtain the interface list
! 105: */
! 106:
! 107: /* Look up the interface list of the specified VRF. */
! 108: extern struct list *vrf_iflist (vrf_id_t);
! 109: /* Get the interface list of the specified VRF. Create one if not find. */
! 110: extern struct list *vrf_iflist_get (vrf_id_t);
! 111:
! 112: /*
! 113: * VRF bit-map: maintaining flags, one bit per VRF ID
! 114: */
! 115:
! 116: typedef void * vrf_bitmap_t;
! 117: #define VRF_BITMAP_NULL NULL
! 118:
! 119: extern vrf_bitmap_t vrf_bitmap_init (void);
! 120: extern void vrf_bitmap_free (vrf_bitmap_t);
! 121: extern void vrf_bitmap_set (vrf_bitmap_t, vrf_id_t);
! 122: extern void vrf_bitmap_unset (vrf_bitmap_t, vrf_id_t);
! 123: extern int vrf_bitmap_check (vrf_bitmap_t, vrf_id_t);
! 124:
! 125: /*
! 126: * VRF initializer/destructor
! 127: */
! 128: /* Please add hooks before calling vrf_init(). */
! 129: extern void vrf_init (void);
! 130: extern void vrf_terminate (void);
! 131:
! 132: /*
! 133: * VRF utilities
! 134: */
! 135:
! 136: /* Create a socket serving for the given VRF */
! 137: extern int vrf_socket (int, int, int, vrf_id_t);
! 138:
! 139: #endif /*_ZEBRA_VRF_H*/
! 140:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>