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