]>
Commit | Line | Data |
---|---|---|
b72ede27 FL |
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 | ||
8736158a FL |
26 | #include "linklist.h" |
27 | ||
b72ede27 FL |
28 | /* The default VRF ID */ |
29 | #define VRF_DEFAULT 0 | |
30 | ||
8736158a FL |
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 | ||
b72ede27 FL |
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 */ | |
e5bf3e1e FL |
47 | #define VRF_ENABLE_HOOK 2 /* a VRF is ready to use */ |
48 | #define VRF_DISABLE_HOOK 3 /* a VRF is to be unusable */ | |
b72ede27 FL |
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); | |
8736158a | 92 | extern struct list *vrf_iter2iflist (vrf_iter_t); |
b72ede27 FL |
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 | ||
8736158a FL |
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 | ||
7076bb2f FL |
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 | ||
b72ede27 FL |
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 | ||
e5bf3e1e FL |
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 | ||
b72ede27 FL |
139 | #endif /*_ZEBRA_VRF_H*/ |
140 |