File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / lib / vrf.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Nov 2 10:09:10 2016 UTC (7 years, 11 months ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, HEAD
quagga 1.0.20160315

    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>