]>
Commit | Line | Data |
---|---|---|
ce45ffe7 CS |
1 | /* |
2 | * Copyright (C) 2020 Cumulus Networks, Inc. | |
3 | * Chirag Shah | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify it | |
6 | * under the terms of the GNU General Public License as published by the Free | |
7 | * Software Foundation; either version 2 of the License, or (at your option) | |
8 | * any later version. | |
9 | * | |
10 | * This program is distributed in the hope that it will be useful, but WITHOUT | |
11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
13 | * more details. | |
14 | * | |
15 | * You should have received a copy of the GNU General Public License along | |
16 | * with this program; see the file COPYING; if not, write to the Free Software | |
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
18 | */ | |
19 | ||
20 | #include <zebra.h> | |
21 | #include "northbound.h" | |
22 | #include "libfrr.h" | |
23 | #include "zebra_nb.h" | |
09268680 | 24 | #include "zebra/interface.h" |
9d86e091 | 25 | #include "zebra/zebra_router.h" |
ce45ffe7 | 26 | |
b00f3e4b CS |
27 | /* |
28 | * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/up-count | |
29 | */ | |
30 | struct yang_data * | |
60ee8be1 | 31 | lib_interface_zebra_state_up_count_get_elem(struct nb_cb_get_elem_args *args) |
b00f3e4b | 32 | { |
60ee8be1 | 33 | const struct interface *ifp = args->list_entry; |
09268680 CS |
34 | struct zebra_if *zebra_if; |
35 | ||
36 | zebra_if = ifp->info; | |
37 | ||
60ee8be1 | 38 | return yang_data_new_uint16(args->xpath, zebra_if->up_count); |
b00f3e4b CS |
39 | } |
40 | ||
41 | /* | |
42 | * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/down-count | |
43 | */ | |
44 | struct yang_data * | |
60ee8be1 | 45 | lib_interface_zebra_state_down_count_get_elem(struct nb_cb_get_elem_args *args) |
b00f3e4b | 46 | { |
60ee8be1 | 47 | const struct interface *ifp = args->list_entry; |
09268680 CS |
48 | struct zebra_if *zebra_if; |
49 | ||
50 | zebra_if = ifp->info; | |
51 | ||
60ee8be1 | 52 | return yang_data_new_uint16(args->xpath, zebra_if->down_count); |
b00f3e4b CS |
53 | } |
54 | ||
55 | /* | |
56 | * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/zif-type | |
57 | */ | |
58 | struct yang_data * | |
60ee8be1 | 59 | lib_interface_zebra_state_zif_type_get_elem(struct nb_cb_get_elem_args *args) |
b00f3e4b CS |
60 | { |
61 | /* TODO: implement me. */ | |
62 | return NULL; | |
63 | } | |
64 | ||
65 | /* | |
66 | * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/ptm-status | |
67 | */ | |
68 | struct yang_data * | |
60ee8be1 | 69 | lib_interface_zebra_state_ptm_status_get_elem(struct nb_cb_get_elem_args *args) |
b00f3e4b CS |
70 | { |
71 | /* TODO: implement me. */ | |
72 | return NULL; | |
73 | } | |
74 | ||
75 | /* | |
76 | * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/vlan-id | |
77 | */ | |
78 | struct yang_data * | |
60ee8be1 | 79 | lib_interface_zebra_state_vlan_id_get_elem(struct nb_cb_get_elem_args *args) |
b00f3e4b | 80 | { |
60ee8be1 | 81 | const struct interface *ifp = args->list_entry; |
09268680 CS |
82 | struct zebra_if *zebra_if; |
83 | struct zebra_l2info_vlan *vlan_info; | |
84 | ||
85 | if (!IS_ZEBRA_IF_VLAN(ifp)) | |
86 | return NULL; | |
87 | ||
88 | zebra_if = ifp->info; | |
89 | vlan_info = &zebra_if->l2info.vl; | |
90 | ||
60ee8be1 | 91 | return yang_data_new_uint16(args->xpath, vlan_info->vid); |
b00f3e4b CS |
92 | } |
93 | ||
94 | /* | |
95 | * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/vni-id | |
96 | */ | |
97 | struct yang_data * | |
60ee8be1 | 98 | lib_interface_zebra_state_vni_id_get_elem(struct nb_cb_get_elem_args *args) |
b00f3e4b | 99 | { |
60ee8be1 | 100 | const struct interface *ifp = args->list_entry; |
09268680 CS |
101 | struct zebra_if *zebra_if; |
102 | struct zebra_l2info_vxlan *vxlan_info; | |
103 | ||
104 | if (!IS_ZEBRA_IF_VXLAN(ifp)) | |
105 | return NULL; | |
106 | ||
107 | zebra_if = ifp->info; | |
108 | vxlan_info = &zebra_if->l2info.vxl; | |
109 | ||
60ee8be1 | 110 | return yang_data_new_uint32(args->xpath, vxlan_info->vni); |
b00f3e4b CS |
111 | } |
112 | ||
113 | /* | |
114 | * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/remote-vtep | |
115 | */ | |
116 | struct yang_data * | |
60ee8be1 | 117 | lib_interface_zebra_state_remote_vtep_get_elem(struct nb_cb_get_elem_args *args) |
b00f3e4b | 118 | { |
60ee8be1 | 119 | const struct interface *ifp = args->list_entry; |
09268680 CS |
120 | struct zebra_if *zebra_if; |
121 | struct zebra_l2info_vxlan *vxlan_info; | |
122 | ||
123 | if (!IS_ZEBRA_IF_VXLAN(ifp)) | |
124 | return NULL; | |
125 | ||
126 | zebra_if = ifp->info; | |
127 | vxlan_info = &zebra_if->l2info.vxl; | |
128 | ||
60ee8be1 | 129 | return yang_data_new_ipv4(args->xpath, &vxlan_info->vtep_ip); |
b00f3e4b CS |
130 | } |
131 | ||
132 | /* | |
133 | * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/mcast-group | |
134 | */ | |
135 | struct yang_data * | |
60ee8be1 | 136 | lib_interface_zebra_state_mcast_group_get_elem(struct nb_cb_get_elem_args *args) |
b00f3e4b | 137 | { |
60ee8be1 | 138 | const struct interface *ifp = args->list_entry; |
09268680 CS |
139 | struct zebra_if *zebra_if; |
140 | struct zebra_l2info_vxlan *vxlan_info; | |
141 | ||
142 | if (!IS_ZEBRA_IF_VXLAN(ifp)) | |
143 | return NULL; | |
144 | ||
145 | zebra_if = ifp->info; | |
146 | vxlan_info = &zebra_if->l2info.vxl; | |
147 | ||
60ee8be1 | 148 | return yang_data_new_ipv4(args->xpath, &vxlan_info->mcast_grp); |
b00f3e4b CS |
149 | } |
150 | ||
56a88b9e | 151 | const void *lib_vrf_zebra_ribs_rib_get_next(struct nb_cb_get_next_args *args) |
ce45ffe7 | 152 | { |
56a88b9e | 153 | struct vrf *vrf = (struct vrf *)args->parent_list_entry; |
9d86e091 | 154 | struct zebra_router_table *zrt = |
56a88b9e | 155 | (struct zebra_router_table *)args->list_entry; |
9d86e091 CS |
156 | |
157 | struct zebra_vrf *zvrf; | |
158 | afi_t afi; | |
159 | safi_t safi; | |
160 | ||
161 | zvrf = zebra_vrf_lookup_by_id(vrf->vrf_id); | |
162 | ||
56a88b9e | 163 | if (args->list_entry == NULL) { |
9d86e091 CS |
164 | afi = AFI_IP; |
165 | safi = SAFI_UNICAST; | |
166 | ||
167 | zrt = zebra_router_find_zrt(zvrf, zvrf->table_id, afi, safi); | |
168 | if (zrt == NULL) | |
169 | return NULL; | |
170 | } else { | |
171 | zrt = RB_NEXT(zebra_router_table_head, zrt); | |
172 | /* vrf_id/ns_id do not match, only walk for the given VRF */ | |
173 | while (zrt && zrt->ns_id != zvrf->zns->ns_id) | |
174 | zrt = RB_NEXT(zebra_router_table_head, zrt); | |
175 | } | |
176 | ||
177 | return zrt; | |
ce45ffe7 CS |
178 | } |
179 | ||
56a88b9e | 180 | int lib_vrf_zebra_ribs_rib_get_keys(struct nb_cb_get_keys_args *args) |
ce45ffe7 | 181 | { |
56a88b9e | 182 | const struct zebra_router_table *zrt = args->list_entry; |
9d86e091 | 183 | |
56a88b9e | 184 | args->keys->num = 2; |
9d86e091 | 185 | |
56a88b9e | 186 | snprintf(args->keys->key[0], sizeof(args->keys->key[0]), "%s", |
9d86e091 CS |
187 | "frr-zebra:ipv4-unicast"); |
188 | /* TODO: implement key[0], afi-safi identityref */ | |
56a88b9e CS |
189 | snprintf(args->keys->key[1], sizeof(args->keys->key[1]), "%" PRIu32, |
190 | zrt->tableid); | |
9d86e091 | 191 | |
ce45ffe7 CS |
192 | return NB_OK; |
193 | } | |
194 | ||
56a88b9e CS |
195 | const void * |
196 | lib_vrf_zebra_ribs_rib_lookup_entry(struct nb_cb_lookup_entry_args *args) | |
ce45ffe7 | 197 | { |
56a88b9e | 198 | struct vrf *vrf = (struct vrf *)args->parent_list_entry; |
9d86e091 CS |
199 | struct zebra_vrf *zvrf; |
200 | afi_t afi = AFI_IP; | |
201 | safi_t safi = SAFI_UNICAST; | |
202 | ||
203 | zvrf = zebra_vrf_lookup_by_id(vrf->vrf_id); | |
204 | ||
205 | return zebra_router_find_zrt(zvrf, zvrf->table_id, afi, safi); | |
ce45ffe7 CS |
206 | } |
207 | ||
208 | /* | |
56a88b9e | 209 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route |
ce45ffe7 | 210 | */ |
56a88b9e CS |
211 | const void * |
212 | lib_vrf_zebra_ribs_rib_route_get_next(struct nb_cb_get_next_args *args) | |
ce45ffe7 | 213 | { |
56a88b9e CS |
214 | const struct zebra_router_table *zrt = args->parent_list_entry; |
215 | const struct route_node *rn = args->list_entry; | |
9d86e091 | 216 | |
56a88b9e | 217 | if (args->list_entry == NULL) |
9d86e091 CS |
218 | rn = route_top(zrt->table); |
219 | else | |
220 | rn = srcdest_route_next((struct route_node *)rn); | |
221 | ||
222 | return rn; | |
ce45ffe7 CS |
223 | } |
224 | ||
56a88b9e | 225 | int lib_vrf_zebra_ribs_rib_route_get_keys(struct nb_cb_get_keys_args *args) |
ce45ffe7 | 226 | { |
56a88b9e | 227 | const struct route_node *rn = args->list_entry; |
9d86e091 | 228 | |
56a88b9e CS |
229 | args->keys->num = 1; |
230 | prefix2str(&rn->p, args->keys->key[0], sizeof(args->keys->key[0])); | |
9d86e091 | 231 | |
ce45ffe7 CS |
232 | return NB_OK; |
233 | } | |
234 | ||
235 | const void * | |
56a88b9e | 236 | lib_vrf_zebra_ribs_rib_route_lookup_entry(struct nb_cb_lookup_entry_args *args) |
ce45ffe7 | 237 | { |
56a88b9e | 238 | const struct zebra_router_table *zrt = args->parent_list_entry; |
9d86e091 CS |
239 | struct prefix p; |
240 | struct route_node *rn; | |
241 | ||
56a88b9e | 242 | yang_str2prefix(args->keys->key[0], &p); |
9d86e091 CS |
243 | |
244 | rn = route_node_lookup(zrt->table, &p); | |
245 | ||
246 | if (!rn) | |
247 | return NULL; | |
248 | ||
249 | route_unlock_node(rn); | |
250 | ||
251 | return rn; | |
ce45ffe7 CS |
252 | } |
253 | ||
254 | /* | |
56a88b9e | 255 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/prefix |
ce45ffe7 | 256 | */ |
60ee8be1 | 257 | struct yang_data * |
56a88b9e | 258 | lib_vrf_zebra_ribs_rib_route_prefix_get_elem(struct nb_cb_get_elem_args *args) |
ce45ffe7 | 259 | { |
56a88b9e | 260 | const struct route_node *rn = args->list_entry; |
9d86e091 | 261 | |
56a88b9e | 262 | return yang_data_new_prefix(args->xpath, &rn->p); |
ce45ffe7 CS |
263 | } |
264 | ||
265 | /* | |
56a88b9e | 266 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry |
ce45ffe7 | 267 | */ |
56a88b9e CS |
268 | const void *lib_vrf_zebra_ribs_rib_route_route_entry_get_next( |
269 | struct nb_cb_get_next_args *args) | |
ed5abdb2 | 270 | { |
9d86e091 CS |
271 | struct route_entry *re = NULL; |
272 | ||
273 | return re; | |
ed5abdb2 CS |
274 | } |
275 | ||
56a88b9e | 276 | int lib_vrf_zebra_ribs_rib_route_route_entry_get_keys( |
60ee8be1 | 277 | struct nb_cb_get_keys_args *args) |
ed5abdb2 CS |
278 | { |
279 | /* TODO: implement me. */ | |
280 | return NB_OK; | |
281 | } | |
282 | ||
56a88b9e | 283 | const void *lib_vrf_zebra_ribs_rib_route_route_entry_lookup_entry( |
60ee8be1 | 284 | struct nb_cb_lookup_entry_args *args) |
ce45ffe7 CS |
285 | { |
286 | /* TODO: implement me. */ | |
287 | return NULL; | |
288 | } | |
289 | ||
290 | /* | |
56a88b9e | 291 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/protocol |
ce45ffe7 | 292 | */ |
56a88b9e | 293 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_protocol_get_elem( |
60ee8be1 | 294 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
295 | { |
296 | /* TODO: implement me. */ | |
297 | return NULL; | |
298 | } | |
299 | ||
300 | /* | |
56a88b9e | 301 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/instance |
ce45ffe7 | 302 | */ |
56a88b9e | 303 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_instance_get_elem( |
60ee8be1 | 304 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
305 | { |
306 | /* TODO: implement me. */ | |
307 | return NULL; | |
308 | } | |
309 | ||
310 | /* | |
56a88b9e | 311 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/distance |
ce45ffe7 | 312 | */ |
56a88b9e | 313 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_distance_get_elem( |
60ee8be1 | 314 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
315 | { |
316 | /* TODO: implement me. */ | |
317 | return NULL; | |
318 | } | |
319 | ||
320 | /* | |
56a88b9e | 321 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/metric |
ce45ffe7 | 322 | */ |
56a88b9e | 323 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_metric_get_elem( |
60ee8be1 | 324 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
325 | { |
326 | /* TODO: implement me. */ | |
327 | return NULL; | |
328 | } | |
329 | ||
330 | /* | |
56a88b9e | 331 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/tag |
ce45ffe7 | 332 | */ |
56a88b9e | 333 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_tag_get_elem( |
60ee8be1 | 334 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
335 | { |
336 | /* TODO: implement me. */ | |
337 | return NULL; | |
338 | } | |
339 | ||
340 | /* | |
56a88b9e | 341 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/selected |
ce45ffe7 | 342 | */ |
56a88b9e | 343 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_selected_get_elem( |
60ee8be1 | 344 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
345 | { |
346 | /* TODO: implement me. */ | |
347 | return NULL; | |
348 | } | |
349 | ||
350 | /* | |
56a88b9e | 351 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/installed |
ce45ffe7 | 352 | */ |
56a88b9e | 353 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_installed_get_elem( |
60ee8be1 | 354 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
355 | { |
356 | /* TODO: implement me. */ | |
357 | return NULL; | |
358 | } | |
359 | ||
360 | /* | |
56a88b9e | 361 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/failed |
ce45ffe7 | 362 | */ |
56a88b9e | 363 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_failed_get_elem( |
60ee8be1 | 364 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
365 | { |
366 | /* TODO: implement me. */ | |
367 | return NULL; | |
368 | } | |
369 | ||
370 | /* | |
56a88b9e | 371 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/queued |
ce45ffe7 | 372 | */ |
56a88b9e | 373 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_queued_get_elem( |
60ee8be1 | 374 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
375 | { |
376 | /* TODO: implement me. */ | |
377 | return NULL; | |
378 | } | |
379 | ||
380 | /* | |
56a88b9e CS |
381 | * XPath: |
382 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-flags | |
ce45ffe7 | 383 | */ |
56a88b9e CS |
384 | struct yang_data * |
385 | lib_vrf_zebra_ribs_rib_route_route_entry_internal_flags_get_elem( | |
60ee8be1 | 386 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
387 | { |
388 | /* TODO: implement me. */ | |
389 | return NULL; | |
390 | } | |
391 | ||
392 | /* | |
56a88b9e CS |
393 | * XPath: |
394 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-status | |
ce45ffe7 | 395 | */ |
56a88b9e CS |
396 | struct yang_data * |
397 | lib_vrf_zebra_ribs_rib_route_route_entry_internal_status_get_elem( | |
60ee8be1 | 398 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
399 | { |
400 | /* TODO: implement me. */ | |
401 | return NULL; | |
402 | } | |
403 | ||
404 | /* | |
56a88b9e | 405 | * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/uptime |
ce45ffe7 | 406 | */ |
56a88b9e | 407 | struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_uptime_get_elem( |
60ee8be1 | 408 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
409 | { |
410 | /* TODO: implement me. */ | |
411 | return NULL; | |
412 | } | |
413 | ||
414 | /* | |
56a88b9e CS |
415 | * XPath: |
416 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group | |
ce45ffe7 | 417 | */ |
56a88b9e | 418 | const void *lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_get_next( |
60ee8be1 | 419 | struct nb_cb_get_next_args *args) |
ce45ffe7 CS |
420 | { |
421 | /* TODO: implement me. */ | |
422 | return NULL; | |
423 | } | |
424 | ||
56a88b9e | 425 | int lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_get_keys( |
60ee8be1 | 426 | struct nb_cb_get_keys_args *args) |
ce45ffe7 CS |
427 | { |
428 | /* TODO: implement me. */ | |
429 | return NB_OK; | |
430 | } | |
431 | ||
56a88b9e | 432 | const void *lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_lookup_entry( |
60ee8be1 | 433 | struct nb_cb_lookup_entry_args *args) |
ce45ffe7 CS |
434 | { |
435 | /* TODO: implement me. */ | |
436 | return NULL; | |
437 | } | |
438 | ||
439 | /* | |
ed5abdb2 | 440 | * XPath: |
56a88b9e | 441 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/name |
ce45ffe7 CS |
442 | */ |
443 | struct yang_data * | |
56a88b9e | 444 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_name_get_elem( |
60ee8be1 | 445 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
446 | { |
447 | /* TODO: implement me. */ | |
448 | return NULL; | |
449 | } | |
450 | ||
451 | /* | |
452 | * XPath: | |
56a88b9e | 453 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop |
ce45ffe7 | 454 | */ |
ed5abdb2 | 455 | const void * |
56a88b9e | 456 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_get_next( |
60ee8be1 | 457 | struct nb_cb_get_next_args *args) |
ce45ffe7 CS |
458 | { |
459 | /* TODO: implement me. */ | |
460 | return NULL; | |
461 | } | |
462 | ||
56a88b9e | 463 | int lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_get_keys( |
60ee8be1 | 464 | struct nb_cb_get_keys_args *args) |
ce45ffe7 CS |
465 | { |
466 | /* TODO: implement me. */ | |
467 | return NB_OK; | |
468 | } | |
469 | ||
470 | const void * | |
56a88b9e | 471 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_lookup_entry( |
60ee8be1 | 472 | struct nb_cb_lookup_entry_args *args) |
ce45ffe7 CS |
473 | { |
474 | /* TODO: implement me. */ | |
475 | return NULL; | |
476 | } | |
477 | ||
478 | /* | |
479 | * XPath: | |
56a88b9e | 480 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/nh-type |
ce45ffe7 CS |
481 | */ |
482 | struct yang_data * | |
56a88b9e | 483 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_nh_type_get_elem( |
60ee8be1 | 484 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
485 | { |
486 | /* TODO: implement me. */ | |
487 | return NULL; | |
488 | } | |
489 | ||
490 | /* | |
491 | * XPath: | |
56a88b9e | 492 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/vrf |
ce45ffe7 CS |
493 | */ |
494 | struct yang_data * | |
56a88b9e | 495 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_vrf_get_elem( |
60ee8be1 | 496 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
497 | { |
498 | /* TODO: implement me. */ | |
499 | return NULL; | |
500 | } | |
501 | ||
502 | /* | |
503 | * XPath: | |
56a88b9e | 504 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/gateway |
ce45ffe7 CS |
505 | */ |
506 | struct yang_data * | |
56a88b9e | 507 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_gateway_get_elem( |
60ee8be1 | 508 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
509 | { |
510 | /* TODO: implement me. */ | |
511 | return NULL; | |
512 | } | |
513 | ||
514 | /* | |
515 | * XPath: | |
56a88b9e | 516 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/interface |
ce45ffe7 CS |
517 | */ |
518 | struct yang_data * | |
56a88b9e | 519 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_interface_get_elem( |
60ee8be1 | 520 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
521 | { |
522 | /* TODO: implement me. */ | |
523 | return NULL; | |
524 | } | |
525 | ||
526 | /* | |
527 | * XPath: | |
56a88b9e | 528 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/bh-type |
ce45ffe7 CS |
529 | */ |
530 | struct yang_data * | |
56a88b9e | 531 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_bh_type_get_elem( |
60ee8be1 | 532 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
533 | { |
534 | /* TODO: implement me. */ | |
535 | return NULL; | |
536 | } | |
537 | ||
538 | /* | |
539 | * XPath: | |
56a88b9e | 540 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/onlink |
ce45ffe7 CS |
541 | */ |
542 | struct yang_data * | |
56a88b9e | 543 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_onlink_get_elem( |
60ee8be1 | 544 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
545 | { |
546 | /* TODO: implement me. */ | |
547 | return NULL; | |
548 | } | |
549 | ||
550 | /* | |
551 | * XPath: | |
56a88b9e | 552 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry |
ce45ffe7 CS |
553 | */ |
554 | const void * | |
56a88b9e | 555 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_get_next( |
60ee8be1 | 556 | struct nb_cb_get_next_args *args) |
ce45ffe7 CS |
557 | { |
558 | /* TODO: implement me. */ | |
559 | return NULL; | |
560 | } | |
561 | ||
56a88b9e | 562 | int lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_get_keys( |
60ee8be1 | 563 | struct nb_cb_get_keys_args *args) |
ce45ffe7 CS |
564 | { |
565 | /* TODO: implement me. */ | |
566 | return NB_OK; | |
567 | } | |
568 | ||
569 | const void * | |
56a88b9e | 570 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_lookup_entry( |
60ee8be1 | 571 | struct nb_cb_lookup_entry_args *args) |
ce45ffe7 CS |
572 | { |
573 | /* TODO: implement me. */ | |
574 | return NULL; | |
575 | } | |
576 | ||
577 | /* | |
578 | * XPath: | |
56a88b9e | 579 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/id |
ce45ffe7 CS |
580 | */ |
581 | struct yang_data * | |
56a88b9e | 582 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_id_get_elem( |
60ee8be1 | 583 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
584 | { |
585 | /* TODO: implement me. */ | |
586 | return NULL; | |
587 | } | |
588 | ||
589 | /* | |
590 | * XPath: | |
56a88b9e | 591 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/label |
ce45ffe7 CS |
592 | */ |
593 | struct yang_data * | |
56a88b9e | 594 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_label_get_elem( |
60ee8be1 | 595 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
596 | { |
597 | /* TODO: implement me. */ | |
598 | return NULL; | |
599 | } | |
600 | ||
601 | /* | |
602 | * XPath: | |
56a88b9e | 603 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/ttl |
ce45ffe7 CS |
604 | */ |
605 | struct yang_data * | |
56a88b9e | 606 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_ttl_get_elem( |
60ee8be1 | 607 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
608 | { |
609 | /* TODO: implement me. */ | |
610 | return NULL; | |
611 | } | |
612 | ||
613 | /* | |
614 | * XPath: | |
56a88b9e | 615 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/traffic-class |
ce45ffe7 CS |
616 | */ |
617 | struct yang_data * | |
56a88b9e | 618 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_traffic_class_get_elem( |
60ee8be1 | 619 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
620 | { |
621 | /* TODO: implement me. */ | |
622 | return NULL; | |
623 | } | |
624 | ||
625 | /* | |
626 | * XPath: | |
56a88b9e | 627 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/duplicate |
ce45ffe7 CS |
628 | */ |
629 | struct yang_data * | |
56a88b9e | 630 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_duplicate_get_elem( |
60ee8be1 | 631 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
632 | { |
633 | /* TODO: implement me. */ | |
634 | return NULL; | |
635 | } | |
636 | ||
637 | /* | |
638 | * XPath: | |
56a88b9e | 639 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/recursive |
ce45ffe7 CS |
640 | */ |
641 | struct yang_data * | |
56a88b9e | 642 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_recursive_get_elem( |
60ee8be1 | 643 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
644 | { |
645 | /* TODO: implement me. */ | |
646 | return NULL; | |
647 | } | |
648 | ||
649 | /* | |
650 | * XPath: | |
56a88b9e | 651 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/active |
ce45ffe7 CS |
652 | */ |
653 | struct yang_data * | |
56a88b9e | 654 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_active_get_elem( |
60ee8be1 | 655 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
656 | { |
657 | /* TODO: implement me. */ | |
658 | return NULL; | |
659 | } | |
660 | ||
661 | /* | |
662 | * XPath: | |
56a88b9e | 663 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/fib |
ce45ffe7 CS |
664 | */ |
665 | struct yang_data * | |
56a88b9e | 666 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_fib_get_elem( |
60ee8be1 | 667 | struct nb_cb_get_elem_args *args) |
ce45ffe7 CS |
668 | { |
669 | /* TODO: implement me. */ | |
670 | return NULL; | |
671 | } | |
7225e61c CS |
672 | |
673 | /* | |
674 | * XPath: | |
56a88b9e | 675 | * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/weight |
7225e61c CS |
676 | */ |
677 | struct yang_data * | |
56a88b9e | 678 | lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_weight_get_elem( |
60ee8be1 | 679 | struct nb_cb_get_elem_args *args) |
7225e61c CS |
680 | { |
681 | /* TODO: implement me. */ | |
682 | return NULL; | |
683 | } |