summaryrefslogtreecommitdiffstats
path: root/lib/vrf.h
diff options
context:
space:
mode:
authorFeng Lu <lu.feng@6wind.com>2015-05-22 11:39:56 +0200
committerDavid Lamparter <equinox@opensourcerouting.org>2015-06-02 06:58:12 +0200
commit41f44a23e86a65a5cad7e5e8cafd7e935f153232 (patch)
tree1fcffa568b188ae66e5f18df09f6960522dfe564 /lib/vrf.h
parent395828eea809e8b2b8c5824d3639cefedd7aa9f0 (diff)
downloadquagga-41f44a23e86a65a5cad7e5e8cafd7e935f153232.tar.bz2
quagga-41f44a23e86a65a5cad7e5e8cafd7e935f153232.tar.xz
lib, zebra: move "struct vrf" to be a lib module
Previously "struct vrf" is defined locally in zebra. Now it is moved to be a lib module. This is the first step to support multi-VRF in quagga. The implementation is splitted into small patches for the purpose of easy review. * lib: "struct vrf" with basic members is defined in vrf.c. The member "void *info" is for user data. Some basic functions are defined in vrf.c for adding/deleting/ looking up a VRF, scanning the VRF table and initializing the VRF module. The type "vrf_id_t" is defined specificly for VRF ID. * zebra: The previous "struct vrf" is re-defined as "struct zebra_vrf"; and previous "vrf" variables are renamed to "zvrf". The previous "struct vrf" related functions are removed from zbera_rib.c. New functions are defined to maintain the new "struct zebra_vrf". The names vrf_xxx are reserved for the functions in VRF module. So: - the previous vrf_table() are renamed to zebra_vrf_table(); - the previous vrf_static_table() are renamed to zebra_vrf_static_table(). The main logic is not changed. BTW: Add a statement to zebra_snmp.c telling that the SNMP is running only for the MIBs in the default VRF. Signed-off-by: Feng Lu <lu.feng@6wind.com> Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Acked-by: Vincent JARDIN <vincent.jardin@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'lib/vrf.h')
-rw-r--r--lib/vrf.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/vrf.h b/lib/vrf.h
new file mode 100644
index 00000000..7e050994
--- /dev/null
+++ b/lib/vrf.h
@@ -0,0 +1,96 @@
+/*
+ * VRF related header.
+ * Copyright (C) 2014 6WIND S.A.
+ *
+ * This file is part of GNU Zebra.
+ *
+ * GNU Zebra is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2, or (at your
+ * option) any later version.
+ *
+ * GNU Zebra is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Zebra; see the file COPYING. If not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _ZEBRA_VRF_H
+#define _ZEBRA_VRF_H
+
+/* The default VRF ID */
+#define VRF_DEFAULT 0
+
+/*
+ * VRF hooks
+ */
+
+#define VRF_NEW_HOOK 0 /* a new VRF is just created */
+#define VRF_DELETE_HOOK 1 /* a VRF is to be deleted */
+
+/*
+ * Add a specific hook to VRF module.
+ * @param1: hook type
+ * @param2: the callback function
+ * - param 1: the VRF ID
+ * - param 2: the address of the user data pointer (the user data
+ * can be stored in or freed from there)
+ */
+extern void vrf_add_hook (int, int (*)(vrf_id_t, void **));
+
+/*
+ * VRF iteration
+ */
+
+typedef void * vrf_iter_t;
+#define VRF_ITER_INVALID NULL /* invalid value of the iterator */
+
+/*
+ * VRF iteration utilities. Example for the usage:
+ *
+ * vrf_iter_t iter = vrf_first();
+ * for (; iter != VRF_ITER_INVALID; iter = vrf_next (iter))
+ *
+ * or
+ *
+ * vrf_iter_t iter = vrf_iterator (<a given VRF ID>);
+ * for (; iter != VRF_ITER_INVALID; iter = vrf_next (iter))
+ */
+
+/* Return the iterator of the first VRF. */
+extern vrf_iter_t vrf_first (void);
+/* Return the next VRF iterator to the given iterator. */
+extern vrf_iter_t vrf_next (vrf_iter_t);
+/* Return the VRF iterator of the given VRF ID. If it does not exist,
+ * the iterator of the next existing VRF is returned. */
+extern vrf_iter_t vrf_iterator (vrf_id_t);
+
+/*
+ * VRF iterator to properties
+ */
+extern vrf_id_t vrf_iter2id (vrf_iter_t);
+extern void *vrf_iter2info (vrf_iter_t);
+
+/*
+ * Utilities to obtain the user data
+ */
+
+/* Get the data pointer of the specified VRF. If not found, create one. */
+extern void *vrf_info_get (vrf_id_t);
+/* Look up the data pointer of the specified VRF. */
+extern void *vrf_info_lookup (vrf_id_t);
+
+/*
+ * VRF initializer/destructor
+ */
+/* Please add hooks before calling vrf_init(). */
+extern void vrf_init (void);
+extern void vrf_terminate (void);
+
+#endif /*_ZEBRA_VRF_H*/
+