2 * Copyright (C) 2020 Cumulus Networks, Inc.
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)
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
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
21 #include "northbound.h"
25 /* clang-format off */
26 const struct frr_yang_module_info frr_zebra_info
= {
30 .xpath
= "/frr-zebra:zebra/mcast-rpf-lookup",
32 .modify
= zebra_mcast_rpf_lookup_modify
,
36 .xpath
= "/frr-zebra:zebra/ip-forwarding",
38 .modify
= zebra_ip_forwarding_modify
,
39 .destroy
= zebra_ip_forwarding_destroy
,
43 .xpath
= "/frr-zebra:zebra/ipv6-forwarding",
45 .modify
= zebra_ipv6_forwarding_modify
,
46 .destroy
= zebra_ipv6_forwarding_destroy
,
50 .xpath
= "/frr-zebra:zebra/workqueue-hold-timer",
52 .modify
= zebra_workqueue_hold_timer_modify
,
56 .xpath
= "/frr-zebra:zebra/zapi-packets",
58 .modify
= zebra_zapi_packets_modify
,
62 .xpath
= "/frr-zebra:zebra/import-kernel-table/table-id",
64 .modify
= zebra_import_kernel_table_table_id_modify
,
65 .destroy
= zebra_import_kernel_table_table_id_destroy
,
69 .xpath
= "/frr-zebra:zebra/import-kernel-table/distance",
71 .modify
= zebra_import_kernel_table_distance_modify
,
75 .xpath
= "/frr-zebra:zebra/import-kernel-table/route-map",
77 .modify
= zebra_import_kernel_table_route_map_modify
,
78 .destroy
= zebra_import_kernel_table_route_map_destroy
,
82 .xpath
= "/frr-zebra:zebra/allow-external-route-update",
84 .create
= zebra_allow_external_route_update_create
,
85 .destroy
= zebra_allow_external_route_update_destroy
,
89 .xpath
= "/frr-zebra:zebra/dplane-queue-limit",
91 .modify
= zebra_dplane_queue_limit_modify
,
95 .xpath
= "/frr-zebra:zebra/debugs/debug-events",
97 .modify
= zebra_debugs_debug_events_modify
,
98 .destroy
= zebra_debugs_debug_events_destroy
,
102 .xpath
= "/frr-zebra:zebra/debugs/debug-zapi-send",
104 .modify
= zebra_debugs_debug_zapi_send_modify
,
105 .destroy
= zebra_debugs_debug_zapi_send_destroy
,
109 .xpath
= "/frr-zebra:zebra/debugs/debug-zapi-recv",
111 .modify
= zebra_debugs_debug_zapi_recv_modify
,
112 .destroy
= zebra_debugs_debug_zapi_recv_destroy
,
116 .xpath
= "/frr-zebra:zebra/debugs/debug-zapi-detail",
118 .modify
= zebra_debugs_debug_zapi_detail_modify
,
119 .destroy
= zebra_debugs_debug_zapi_detail_destroy
,
123 .xpath
= "/frr-zebra:zebra/debugs/debug-kernel",
125 .modify
= zebra_debugs_debug_kernel_modify
,
126 .destroy
= zebra_debugs_debug_kernel_destroy
,
130 .xpath
= "/frr-zebra:zebra/debugs/debug-kernel-msg-send",
132 .modify
= zebra_debugs_debug_kernel_msg_send_modify
,
133 .destroy
= zebra_debugs_debug_kernel_msg_send_destroy
,
137 .xpath
= "/frr-zebra:zebra/debugs/debug-kernel-msg-recv",
139 .modify
= zebra_debugs_debug_kernel_msg_recv_modify
,
140 .destroy
= zebra_debugs_debug_kernel_msg_recv_destroy
,
144 .xpath
= "/frr-zebra:zebra/debugs/debug-rib",
146 .modify
= zebra_debugs_debug_rib_modify
,
147 .destroy
= zebra_debugs_debug_rib_destroy
,
151 .xpath
= "/frr-zebra:zebra/debugs/debug-rib-detail",
153 .modify
= zebra_debugs_debug_rib_detail_modify
,
154 .destroy
= zebra_debugs_debug_rib_detail_destroy
,
158 .xpath
= "/frr-zebra:zebra/debugs/debug-fpm",
160 .modify
= zebra_debugs_debug_fpm_modify
,
161 .destroy
= zebra_debugs_debug_fpm_destroy
,
165 .xpath
= "/frr-zebra:zebra/debugs/debug-nht",
167 .modify
= zebra_debugs_debug_nht_modify
,
168 .destroy
= zebra_debugs_debug_nht_destroy
,
172 .xpath
= "/frr-zebra:zebra/debugs/debug-nht-detail",
174 .modify
= zebra_debugs_debug_nht_detail_modify
,
175 .destroy
= zebra_debugs_debug_nht_detail_destroy
,
179 .xpath
= "/frr-zebra:zebra/debugs/debug-mpls",
181 .modify
= zebra_debugs_debug_mpls_modify
,
182 .destroy
= zebra_debugs_debug_mpls_destroy
,
186 .xpath
= "/frr-zebra:zebra/debugs/debug-vxlan",
188 .modify
= zebra_debugs_debug_vxlan_modify
,
189 .destroy
= zebra_debugs_debug_vxlan_destroy
,
193 .xpath
= "/frr-zebra:zebra/debugs/debug-pw",
195 .modify
= zebra_debugs_debug_pw_modify
,
196 .destroy
= zebra_debugs_debug_pw_destroy
,
200 .xpath
= "/frr-zebra:zebra/debugs/debug-dplane",
202 .modify
= zebra_debugs_debug_dplane_modify
,
203 .destroy
= zebra_debugs_debug_dplane_destroy
,
207 .xpath
= "/frr-zebra:zebra/debugs/debug-dplane-detail",
209 .modify
= zebra_debugs_debug_dplane_detail_modify
,
210 .destroy
= zebra_debugs_debug_dplane_detail_destroy
,
214 .xpath
= "/frr-zebra:zebra/debugs/debug-mlag",
216 .modify
= zebra_debugs_debug_mlag_modify
,
217 .destroy
= zebra_debugs_debug_mlag_destroy
,
221 .xpath
= "/frr-zebra:get-route-information",
223 .rpc
= get_route_information_rpc
,
227 .xpath
= "/frr-zebra:get-v6-mroute-info",
229 .rpc
= get_v6_mroute_info_rpc
,
233 .xpath
= "/frr-zebra:get-vrf-info",
235 .rpc
= get_vrf_info_rpc
,
239 .xpath
= "/frr-zebra:get-vrf-vni-info",
241 .rpc
= get_vrf_vni_info_rpc
,
245 .xpath
= "/frr-zebra:get-evpn-info",
247 .rpc
= get_evpn_info_rpc
,
251 .xpath
= "/frr-zebra:get-vni-info",
253 .rpc
= get_vni_info_rpc
,
257 .xpath
= "/frr-zebra:get-evpn-vni-rmac",
259 .rpc
= get_evpn_vni_rmac_rpc
,
263 .xpath
= "/frr-zebra:get-evpn-vni-nexthops",
265 .rpc
= get_evpn_vni_nexthops_rpc
,
269 .xpath
= "/frr-zebra:clear-evpn-dup-addr",
271 .rpc
= clear_evpn_dup_addr_rpc
,
275 .xpath
= "/frr-zebra:get-evpn-macs",
277 .rpc
= get_evpn_macs_rpc
,
281 .xpath
= "/frr-zebra:get-evpn-arp-cache",
283 .rpc
= get_evpn_arp_cache_rpc
,
287 .xpath
= "/frr-zebra:get-pbr-ipset",
289 .rpc
= get_pbr_ipset_rpc
,
293 .xpath
= "/frr-zebra:get-pbr-iptable",
295 .rpc
= get_pbr_iptable_rpc
,
299 .xpath
= "/frr-zebra:get-debugs",
301 .rpc
= get_debugs_rpc
,
305 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/ip-addrs",
307 .create
= lib_interface_zebra_ip_addrs_create
,
308 .destroy
= lib_interface_zebra_ip_addrs_destroy
,
312 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/ip-addrs/label",
314 .modify
= lib_interface_zebra_ip_addrs_label_modify
,
315 .destroy
= lib_interface_zebra_ip_addrs_label_destroy
,
319 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/ip-addrs/ip4-peer",
321 .modify
= lib_interface_zebra_ip_addrs_ip4_peer_modify
,
322 .destroy
= lib_interface_zebra_ip_addrs_ip4_peer_destroy
,
326 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/multicast",
328 .modify
= lib_interface_zebra_multicast_modify
,
329 .destroy
= lib_interface_zebra_multicast_destroy
,
333 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/link-detect",
335 .modify
= lib_interface_zebra_link_detect_modify
,
336 .destroy
= lib_interface_zebra_link_detect_destroy
,
340 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/shutdown",
342 .modify
= lib_interface_zebra_shutdown_modify
,
343 .destroy
= lib_interface_zebra_shutdown_destroy
,
347 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/bandwidth",
349 .modify
= lib_interface_zebra_bandwidth_modify
,
350 .destroy
= lib_interface_zebra_bandwidth_destroy
,
354 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/up-count",
356 .get_elem
= lib_interface_zebra_state_up_count_get_elem
,
360 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/down-count",
362 .get_elem
= lib_interface_zebra_state_down_count_get_elem
,
366 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/zif-type",
368 .get_elem
= lib_interface_zebra_state_zif_type_get_elem
,
372 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/ptm-status",
374 .get_elem
= lib_interface_zebra_state_ptm_status_get_elem
,
378 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/vlan-id",
380 .get_elem
= lib_interface_zebra_state_vlan_id_get_elem
,
384 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/vni-id",
386 .get_elem
= lib_interface_zebra_state_vni_id_get_elem
,
390 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/remote-vtep",
392 .get_elem
= lib_interface_zebra_state_remote_vtep_get_elem
,
396 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/mcast-group",
398 .get_elem
= lib_interface_zebra_state_mcast_group_get_elem
,
402 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib",
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
,
410 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/afi-safi-name",
412 .get_elem
= lib_vrf_zebra_ribs_rib_afi_safi_name_get_elem
,
416 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/table-id",
418 .get_elem
= lib_vrf_zebra_ribs_rib_table_id_get_elem
,
422 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route",
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
,
430 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/prefix",
432 .get_elem
= lib_vrf_zebra_ribs_rib_route_prefix_get_elem
,
436 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry",
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
,
444 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/protocol",
446 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_protocol_get_elem
,
450 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/instance",
452 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_instance_get_elem
,
456 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/distance",
458 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_distance_get_elem
,
462 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/metric",
464 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_metric_get_elem
,
468 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/tag",
470 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_tag_get_elem
,
474 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/selected",
476 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_selected_get_elem
,
480 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/installed",
482 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_installed_get_elem
,
486 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/failed",
488 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_failed_get_elem
,
492 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/queued",
494 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_queued_get_elem
,
498 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-flags",
500 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_internal_flags_get_elem
,
504 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-status",
506 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_internal_status_get_elem
,
510 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/uptime",
512 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_uptime_get_elem
,
516 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/id",
518 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_id_get_elem
,
522 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop",
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
,
530 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/nh-type",
532 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_nh_type_get_elem
,
536 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/vrf",
538 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_vrf_get_elem
,
542 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/gateway",
544 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_gateway_get_elem
,
548 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/interface",
550 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_interface_get_elem
,
554 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/bh-type",
556 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_bh_type_get_elem
,
560 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/onlink",
562 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_onlink_get_elem
,
566 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/srte-color",
568 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_color_get_elem
,
572 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry",
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
,
580 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/id",
582 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_id_get_elem
,
586 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/label",
588 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_label_get_elem
,
592 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/ttl",
594 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_ttl_get_elem
,
598 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/traffic-class",
600 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_traffic_class_get_elem
,
604 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/duplicate",
606 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_duplicate_get_elem
,
610 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/recursive",
612 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_recursive_get_elem
,
616 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/active",
618 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_active_get_elem
,
622 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/fib",
624 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_fib_get_elem
,
628 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/weight",
630 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_weight_get_elem
,
634 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/l3vni-id",
636 .modify
= lib_vrf_zebra_l3vni_id_modify
,
637 .destroy
= lib_vrf_zebra_l3vni_id_destroy
,
641 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/prefix-only",
643 .modify
= lib_vrf_zebra_prefix_only_modify
,
647 .xpath
= "/frr-route-map:lib/route-map/entry/match-condition/frr-zebra:ipv4-prefix-length",
649 .modify
= lib_route_map_entry_match_condition_ipv4_prefix_length_modify
,
650 .destroy
= lib_route_map_entry_match_condition_ipv4_prefix_length_destroy
,
654 .xpath
= "/frr-route-map:lib/route-map/entry/match-condition/frr-zebra:ipv6-prefix-length",
656 .modify
= lib_route_map_entry_match_condition_ipv6_prefix_length_modify
,
657 .destroy
= lib_route_map_entry_match_condition_ipv6_prefix_length_destroy
,
661 .xpath
= "/frr-route-map:lib/route-map/entry/match-condition/frr-zebra:source-protocol",
663 .modify
= lib_route_map_entry_match_condition_source_protocol_modify
,
664 .destroy
= lib_route_map_entry_match_condition_source_protocol_destroy
,
668 .xpath
= "/frr-route-map:lib/route-map/entry/match-condition/frr-zebra:source-instance",
670 .modify
= lib_route_map_entry_match_condition_source_instance_modify
,
671 .destroy
= lib_route_map_entry_match_condition_source_instance_destroy
,
675 .xpath
= "/frr-route-map:lib/route-map/entry/set-action/frr-zebra:source-v4",
677 .modify
= lib_route_map_entry_set_action_source_v4_modify
,
678 .destroy
= lib_route_map_entry_set_action_source_v4_destroy
,
682 .xpath
= "/frr-route-map:lib/route-map/entry/set-action/frr-zebra:source-v6",
684 .modify
= lib_route_map_entry_set_action_source_v6_modify
,
685 .destroy
= lib_route_map_entry_set_action_source_v6_destroy
,