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