]> git.proxmox.com Git - mirror_frr.git/blob - zebra/zebra_nb.c
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / zebra / zebra_nb.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Copyright (C) 2020 Cumulus Networks, Inc.
4 * Chirag Shah
5 */
6
7 #include <zebra.h>
8 #include "interface.h"
9 #include "northbound.h"
10 #include "libfrr.h"
11 #include "zebra_nb.h"
12
13 /* clang-format off */
14 const struct frr_yang_module_info frr_zebra_info = {
15 .name = "frr-zebra",
16 .nodes = {
17 {
18 .xpath = "/frr-zebra:zebra/mcast-rpf-lookup",
19 .cbs = {
20 .modify = zebra_mcast_rpf_lookup_modify,
21 }
22 },
23 {
24 .xpath = "/frr-zebra:zebra/ip-forwarding",
25 .cbs = {
26 .modify = zebra_ip_forwarding_modify,
27 .destroy = zebra_ip_forwarding_destroy,
28 }
29 },
30 {
31 .xpath = "/frr-zebra:zebra/ipv6-forwarding",
32 .cbs = {
33 .modify = zebra_ipv6_forwarding_modify,
34 .destroy = zebra_ipv6_forwarding_destroy,
35 }
36 },
37 {
38 .xpath = "/frr-zebra:zebra/workqueue-hold-timer",
39 .cbs = {
40 .modify = zebra_workqueue_hold_timer_modify,
41 }
42 },
43 {
44 .xpath = "/frr-zebra:zebra/zapi-packets",
45 .cbs = {
46 .modify = zebra_zapi_packets_modify,
47 }
48 },
49 {
50 .xpath = "/frr-zebra:zebra/import-kernel-table/table-id",
51 .cbs = {
52 .modify = zebra_import_kernel_table_table_id_modify,
53 .destroy = zebra_import_kernel_table_table_id_destroy,
54 }
55 },
56 {
57 .xpath = "/frr-zebra:zebra/import-kernel-table/distance",
58 .cbs = {
59 .modify = zebra_import_kernel_table_distance_modify,
60 }
61 },
62 {
63 .xpath = "/frr-zebra:zebra/import-kernel-table/route-map",
64 .cbs = {
65 .modify = zebra_import_kernel_table_route_map_modify,
66 .destroy = zebra_import_kernel_table_route_map_destroy,
67 }
68 },
69 {
70 .xpath = "/frr-zebra:zebra/allow-external-route-update",
71 .cbs = {
72 .create = zebra_allow_external_route_update_create,
73 .destroy = zebra_allow_external_route_update_destroy,
74 }
75 },
76 {
77 .xpath = "/frr-zebra:zebra/dplane-queue-limit",
78 .cbs = {
79 .modify = zebra_dplane_queue_limit_modify,
80 }
81 },
82 {
83 .xpath = "/frr-zebra:zebra/debugs/debug-events",
84 .cbs = {
85 .modify = zebra_debugs_debug_events_modify,
86 .destroy = zebra_debugs_debug_events_destroy,
87 }
88 },
89 {
90 .xpath = "/frr-zebra:zebra/debugs/debug-zapi-send",
91 .cbs = {
92 .modify = zebra_debugs_debug_zapi_send_modify,
93 .destroy = zebra_debugs_debug_zapi_send_destroy,
94 }
95 },
96 {
97 .xpath = "/frr-zebra:zebra/debugs/debug-zapi-recv",
98 .cbs = {
99 .modify = zebra_debugs_debug_zapi_recv_modify,
100 .destroy = zebra_debugs_debug_zapi_recv_destroy,
101 }
102 },
103 {
104 .xpath = "/frr-zebra:zebra/debugs/debug-zapi-detail",
105 .cbs = {
106 .modify = zebra_debugs_debug_zapi_detail_modify,
107 .destroy = zebra_debugs_debug_zapi_detail_destroy,
108 }
109 },
110 {
111 .xpath = "/frr-zebra:zebra/debugs/debug-kernel",
112 .cbs = {
113 .modify = zebra_debugs_debug_kernel_modify,
114 .destroy = zebra_debugs_debug_kernel_destroy,
115 }
116 },
117 {
118 .xpath = "/frr-zebra:zebra/debugs/debug-kernel-msg-send",
119 .cbs = {
120 .modify = zebra_debugs_debug_kernel_msg_send_modify,
121 .destroy = zebra_debugs_debug_kernel_msg_send_destroy,
122 }
123 },
124 {
125 .xpath = "/frr-zebra:zebra/debugs/debug-kernel-msg-recv",
126 .cbs = {
127 .modify = zebra_debugs_debug_kernel_msg_recv_modify,
128 .destroy = zebra_debugs_debug_kernel_msg_recv_destroy,
129 }
130 },
131 {
132 .xpath = "/frr-zebra:zebra/debugs/debug-rib",
133 .cbs = {
134 .modify = zebra_debugs_debug_rib_modify,
135 .destroy = zebra_debugs_debug_rib_destroy,
136 }
137 },
138 {
139 .xpath = "/frr-zebra:zebra/debugs/debug-rib-detail",
140 .cbs = {
141 .modify = zebra_debugs_debug_rib_detail_modify,
142 .destroy = zebra_debugs_debug_rib_detail_destroy,
143 }
144 },
145 {
146 .xpath = "/frr-zebra:zebra/debugs/debug-fpm",
147 .cbs = {
148 .modify = zebra_debugs_debug_fpm_modify,
149 .destroy = zebra_debugs_debug_fpm_destroy,
150 }
151 },
152 {
153 .xpath = "/frr-zebra:zebra/debugs/debug-nht",
154 .cbs = {
155 .modify = zebra_debugs_debug_nht_modify,
156 .destroy = zebra_debugs_debug_nht_destroy,
157 }
158 },
159 {
160 .xpath = "/frr-zebra:zebra/debugs/debug-nht-detail",
161 .cbs = {
162 .modify = zebra_debugs_debug_nht_detail_modify,
163 .destroy = zebra_debugs_debug_nht_detail_destroy,
164 }
165 },
166 {
167 .xpath = "/frr-zebra:zebra/debugs/debug-mpls",
168 .cbs = {
169 .modify = zebra_debugs_debug_mpls_modify,
170 .destroy = zebra_debugs_debug_mpls_destroy,
171 }
172 },
173 {
174 .xpath = "/frr-zebra:zebra/debugs/debug-vxlan",
175 .cbs = {
176 .modify = zebra_debugs_debug_vxlan_modify,
177 .destroy = zebra_debugs_debug_vxlan_destroy,
178 }
179 },
180 {
181 .xpath = "/frr-zebra:zebra/debugs/debug-pw",
182 .cbs = {
183 .modify = zebra_debugs_debug_pw_modify,
184 .destroy = zebra_debugs_debug_pw_destroy,
185 }
186 },
187 {
188 .xpath = "/frr-zebra:zebra/debugs/debug-dplane",
189 .cbs = {
190 .modify = zebra_debugs_debug_dplane_modify,
191 .destroy = zebra_debugs_debug_dplane_destroy,
192 }
193 },
194 {
195 .xpath = "/frr-zebra:zebra/debugs/debug-dplane-detail",
196 .cbs = {
197 .modify = zebra_debugs_debug_dplane_detail_modify,
198 .destroy = zebra_debugs_debug_dplane_detail_destroy,
199 }
200 },
201 {
202 .xpath = "/frr-zebra:zebra/debugs/debug-mlag",
203 .cbs = {
204 .modify = zebra_debugs_debug_mlag_modify,
205 .destroy = zebra_debugs_debug_mlag_destroy,
206 }
207 },
208 {
209 .xpath = "/frr-zebra:get-route-information",
210 .cbs = {
211 .rpc = get_route_information_rpc,
212 }
213 },
214 {
215 .xpath = "/frr-zebra:get-v6-mroute-info",
216 .cbs = {
217 .rpc = get_v6_mroute_info_rpc,
218 }
219 },
220 {
221 .xpath = "/frr-zebra:get-vrf-info",
222 .cbs = {
223 .rpc = get_vrf_info_rpc,
224 }
225 },
226 {
227 .xpath = "/frr-zebra:get-vrf-vni-info",
228 .cbs = {
229 .rpc = get_vrf_vni_info_rpc,
230 }
231 },
232 {
233 .xpath = "/frr-zebra:get-evpn-info",
234 .cbs = {
235 .rpc = get_evpn_info_rpc,
236 }
237 },
238 {
239 .xpath = "/frr-zebra:get-vni-info",
240 .cbs = {
241 .rpc = get_vni_info_rpc,
242 }
243 },
244 {
245 .xpath = "/frr-zebra:get-evpn-vni-rmac",
246 .cbs = {
247 .rpc = get_evpn_vni_rmac_rpc,
248 }
249 },
250 {
251 .xpath = "/frr-zebra:get-evpn-vni-nexthops",
252 .cbs = {
253 .rpc = get_evpn_vni_nexthops_rpc,
254 }
255 },
256 {
257 .xpath = "/frr-zebra:clear-evpn-dup-addr",
258 .cbs = {
259 .rpc = clear_evpn_dup_addr_rpc,
260 }
261 },
262 {
263 .xpath = "/frr-zebra:get-evpn-macs",
264 .cbs = {
265 .rpc = get_evpn_macs_rpc,
266 }
267 },
268 {
269 .xpath = "/frr-zebra:get-evpn-arp-cache",
270 .cbs = {
271 .rpc = get_evpn_arp_cache_rpc,
272 }
273 },
274 {
275 .xpath = "/frr-zebra:get-pbr-ipset",
276 .cbs = {
277 .rpc = get_pbr_ipset_rpc,
278 }
279 },
280 {
281 .xpath = "/frr-zebra:get-pbr-iptable",
282 .cbs = {
283 .rpc = get_pbr_iptable_rpc,
284 }
285 },
286 {
287 .xpath = "/frr-zebra:get-debugs",
288 .cbs = {
289 .rpc = get_debugs_rpc,
290 }
291 },
292 {
293 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ip-addrs",
294 .cbs = {
295 .create = lib_interface_zebra_ip_addrs_create,
296 .destroy = lib_interface_zebra_ip_addrs_destroy,
297 }
298 },
299 {
300 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ip-addrs/label",
301 .cbs = {
302 .modify = lib_interface_zebra_ip_addrs_label_modify,
303 .destroy = lib_interface_zebra_ip_addrs_label_destroy,
304 }
305 },
306 {
307 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/ip-addrs/ip4-peer",
308 .cbs = {
309 .modify = lib_interface_zebra_ip_addrs_ip4_peer_modify,
310 .destroy = lib_interface_zebra_ip_addrs_ip4_peer_destroy,
311 }
312 },
313 {
314 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/multicast",
315 .cbs = {
316 .modify = lib_interface_zebra_multicast_modify,
317 .destroy = lib_interface_zebra_multicast_destroy,
318 }
319 },
320 {
321 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-detect",
322 .cbs = {
323 .modify = lib_interface_zebra_link_detect_modify,
324 .destroy = lib_interface_zebra_link_detect_destroy,
325 }
326 },
327 {
328 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/shutdown",
329 .cbs = {
330 .modify = lib_interface_zebra_shutdown_modify,
331 .destroy = lib_interface_zebra_shutdown_destroy,
332 }
333 },
334 {
335 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/bandwidth",
336 .cbs = {
337 .modify = lib_interface_zebra_bandwidth_modify,
338 .destroy = lib_interface_zebra_bandwidth_destroy,
339 }
340 },
341 {
342 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/bandwidth",
343 .cbs = {
344 .modify = lib_interface_zebra_bandwidth_modify,
345 .destroy = lib_interface_zebra_bandwidth_destroy,
346 }
347 },
348 {
349 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/legacy-admin-group",
350 .cbs = {
351 .modify = lib_interface_zebra_legacy_admin_group_modify,
352 .destroy = lib_interface_zebra_legacy_admin_group_destroy,
353 .cli_show = cli_show_legacy_admin_group,
354 },
355 },
356 {
357 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities",
358 .cbs = {
359 .cli_show = cli_show_affinity,
360 },
361 },
362 {
363 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities/affinity",
364 .cbs = {
365 .create = lib_interface_zebra_affinity_create,
366 .destroy = lib_interface_zebra_affinity_destroy,
367 },
368 },
369 {
370 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinity-mode",
371 .cbs = {
372 .modify = lib_interface_zebra_affinity_mode_modify,
373 .cli_show = cli_show_affinity_mode,
374 },
375 },
376 {
377 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/up-count",
378 .cbs = {
379 .get_elem = lib_interface_zebra_state_up_count_get_elem,
380 }
381 },
382 {
383 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/down-count",
384 .cbs = {
385 .get_elem = lib_interface_zebra_state_down_count_get_elem,
386 }
387 },
388 {
389 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/zif-type",
390 .cbs = {
391 .get_elem = lib_interface_zebra_state_zif_type_get_elem,
392 }
393 },
394 {
395 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/ptm-status",
396 .cbs = {
397 .get_elem = lib_interface_zebra_state_ptm_status_get_elem,
398 }
399 },
400 {
401 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/vlan-id",
402 .cbs = {
403 .get_elem = lib_interface_zebra_state_vlan_id_get_elem,
404 }
405 },
406 {
407 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/vni-id",
408 .cbs = {
409 .get_elem = lib_interface_zebra_state_vni_id_get_elem,
410 }
411 },
412 {
413 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/remote-vtep",
414 .cbs = {
415 .get_elem = lib_interface_zebra_state_remote_vtep_get_elem,
416 }
417 },
418 {
419 .xpath = "/frr-interface:lib/interface/frr-zebra:zebra/state/mcast-group",
420 .cbs = {
421 .get_elem = lib_interface_zebra_state_mcast_group_get_elem,
422 }
423 },
424 {
425 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib",
426 .cbs = {
427 .get_next = lib_vrf_zebra_ribs_rib_get_next,
428 .get_keys = lib_vrf_zebra_ribs_rib_get_keys,
429 .lookup_entry = lib_vrf_zebra_ribs_rib_lookup_entry,
430 }
431 },
432 {
433 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/afi-safi-name",
434 .cbs = {
435 .get_elem = lib_vrf_zebra_ribs_rib_afi_safi_name_get_elem,
436 }
437 },
438 {
439 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/table-id",
440 .cbs = {
441 .get_elem = lib_vrf_zebra_ribs_rib_table_id_get_elem,
442 }
443 },
444 {
445 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route",
446 .cbs = {
447 .get_next = lib_vrf_zebra_ribs_rib_route_get_next,
448 .get_keys = lib_vrf_zebra_ribs_rib_route_get_keys,
449 .lookup_entry = lib_vrf_zebra_ribs_rib_route_lookup_entry,
450 }
451 },
452 {
453 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/prefix",
454 .cbs = {
455 .get_elem = lib_vrf_zebra_ribs_rib_route_prefix_get_elem,
456 }
457 },
458 {
459 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry",
460 .cbs = {
461 .get_next = lib_vrf_zebra_ribs_rib_route_route_entry_get_next,
462 .get_keys = lib_vrf_zebra_ribs_rib_route_route_entry_get_keys,
463 .lookup_entry = lib_vrf_zebra_ribs_rib_route_route_entry_lookup_entry,
464 }
465 },
466 {
467 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/protocol",
468 .cbs = {
469 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_protocol_get_elem,
470 }
471 },
472 {
473 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/instance",
474 .cbs = {
475 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_instance_get_elem,
476 }
477 },
478 {
479 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/distance",
480 .cbs = {
481 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_distance_get_elem,
482 }
483 },
484 {
485 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/metric",
486 .cbs = {
487 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_metric_get_elem,
488 }
489 },
490 {
491 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/tag",
492 .cbs = {
493 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_tag_get_elem,
494 }
495 },
496 {
497 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/selected",
498 .cbs = {
499 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_selected_get_elem,
500 }
501 },
502 {
503 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/installed",
504 .cbs = {
505 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_installed_get_elem,
506 }
507 },
508 {
509 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/failed",
510 .cbs = {
511 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_failed_get_elem,
512 }
513 },
514 {
515 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/queued",
516 .cbs = {
517 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_queued_get_elem,
518 }
519 },
520 {
521 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-flags",
522 .cbs = {
523 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_internal_flags_get_elem,
524 }
525 },
526 {
527 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-status",
528 .cbs = {
529 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_internal_status_get_elem,
530 }
531 },
532 {
533 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/uptime",
534 .cbs = {
535 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_uptime_get_elem,
536 }
537 },
538 {
539 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/id",
540 .cbs = {
541 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_id_get_elem,
542 }
543 },
544 {
545 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop",
546 .cbs = {
547 .get_next = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_get_next,
548 .get_keys = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_get_keys,
549 .lookup_entry = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_lookup_entry,
550 }
551 },
552 {
553 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/nh-type",
554 .cbs = {
555 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_nh_type_get_elem,
556 }
557 },
558 {
559 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/vrf",
560 .cbs = {
561 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_vrf_get_elem,
562 }
563 },
564 {
565 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/gateway",
566 .cbs = {
567 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_gateway_get_elem,
568 }
569 },
570 {
571 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/interface",
572 .cbs = {
573 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_interface_get_elem,
574 }
575 },
576 {
577 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/bh-type",
578 .cbs = {
579 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_bh_type_get_elem,
580 }
581 },
582 {
583 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/onlink",
584 .cbs = {
585 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_onlink_get_elem,
586 }
587 },
588 {
589 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/srte-color",
590 .cbs = {
591 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_color_get_elem,
592 }
593 },
594 {
595 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry",
596 .cbs = {
597 .get_next = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_get_next,
598 .get_keys = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_get_keys,
599 .lookup_entry = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_lookup_entry,
600 }
601 },
602 {
603 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/id",
604 .cbs = {
605 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_id_get_elem,
606 }
607 },
608 {
609 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/label",
610 .cbs = {
611 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_label_get_elem,
612 }
613 },
614 {
615 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/ttl",
616 .cbs = {
617 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_ttl_get_elem,
618 }
619 },
620 {
621 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/traffic-class",
622 .cbs = {
623 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_traffic_class_get_elem,
624 }
625 },
626 {
627 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/duplicate",
628 .cbs = {
629 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_duplicate_get_elem,
630 }
631 },
632 {
633 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/recursive",
634 .cbs = {
635 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_recursive_get_elem,
636 }
637 },
638 {
639 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/active",
640 .cbs = {
641 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_active_get_elem,
642 }
643 },
644 {
645 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/fib",
646 .cbs = {
647 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_fib_get_elem,
648 }
649 },
650 {
651 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/weight",
652 .cbs = {
653 .get_elem = lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_weight_get_elem,
654 }
655 },
656 {
657 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/l3vni-id",
658 .cbs = {
659 .modify = lib_vrf_zebra_l3vni_id_modify,
660 .destroy = lib_vrf_zebra_l3vni_id_destroy,
661 }
662 },
663 {
664 .xpath = "/frr-vrf:lib/vrf/frr-zebra:zebra/prefix-only",
665 .cbs = {
666 .modify = lib_vrf_zebra_prefix_only_modify,
667 }
668 },
669 {
670 .xpath = NULL,
671 },
672 }
673 };