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 "interface.h"
22 #include "northbound.h"
26 /* clang-format off */
27 const struct frr_yang_module_info frr_zebra_info
= {
31 .xpath
= "/frr-zebra:zebra/mcast-rpf-lookup",
33 .modify
= zebra_mcast_rpf_lookup_modify
,
37 .xpath
= "/frr-zebra:zebra/ip-forwarding",
39 .modify
= zebra_ip_forwarding_modify
,
40 .destroy
= zebra_ip_forwarding_destroy
,
44 .xpath
= "/frr-zebra:zebra/ipv6-forwarding",
46 .modify
= zebra_ipv6_forwarding_modify
,
47 .destroy
= zebra_ipv6_forwarding_destroy
,
51 .xpath
= "/frr-zebra:zebra/workqueue-hold-timer",
53 .modify
= zebra_workqueue_hold_timer_modify
,
57 .xpath
= "/frr-zebra:zebra/zapi-packets",
59 .modify
= zebra_zapi_packets_modify
,
63 .xpath
= "/frr-zebra:zebra/import-kernel-table/table-id",
65 .modify
= zebra_import_kernel_table_table_id_modify
,
66 .destroy
= zebra_import_kernel_table_table_id_destroy
,
70 .xpath
= "/frr-zebra:zebra/import-kernel-table/distance",
72 .modify
= zebra_import_kernel_table_distance_modify
,
76 .xpath
= "/frr-zebra:zebra/import-kernel-table/route-map",
78 .modify
= zebra_import_kernel_table_route_map_modify
,
79 .destroy
= zebra_import_kernel_table_route_map_destroy
,
83 .xpath
= "/frr-zebra:zebra/allow-external-route-update",
85 .create
= zebra_allow_external_route_update_create
,
86 .destroy
= zebra_allow_external_route_update_destroy
,
90 .xpath
= "/frr-zebra:zebra/dplane-queue-limit",
92 .modify
= zebra_dplane_queue_limit_modify
,
96 .xpath
= "/frr-zebra:zebra/debugs/debug-events",
98 .modify
= zebra_debugs_debug_events_modify
,
99 .destroy
= zebra_debugs_debug_events_destroy
,
103 .xpath
= "/frr-zebra:zebra/debugs/debug-zapi-send",
105 .modify
= zebra_debugs_debug_zapi_send_modify
,
106 .destroy
= zebra_debugs_debug_zapi_send_destroy
,
110 .xpath
= "/frr-zebra:zebra/debugs/debug-zapi-recv",
112 .modify
= zebra_debugs_debug_zapi_recv_modify
,
113 .destroy
= zebra_debugs_debug_zapi_recv_destroy
,
117 .xpath
= "/frr-zebra:zebra/debugs/debug-zapi-detail",
119 .modify
= zebra_debugs_debug_zapi_detail_modify
,
120 .destroy
= zebra_debugs_debug_zapi_detail_destroy
,
124 .xpath
= "/frr-zebra:zebra/debugs/debug-kernel",
126 .modify
= zebra_debugs_debug_kernel_modify
,
127 .destroy
= zebra_debugs_debug_kernel_destroy
,
131 .xpath
= "/frr-zebra:zebra/debugs/debug-kernel-msg-send",
133 .modify
= zebra_debugs_debug_kernel_msg_send_modify
,
134 .destroy
= zebra_debugs_debug_kernel_msg_send_destroy
,
138 .xpath
= "/frr-zebra:zebra/debugs/debug-kernel-msg-recv",
140 .modify
= zebra_debugs_debug_kernel_msg_recv_modify
,
141 .destroy
= zebra_debugs_debug_kernel_msg_recv_destroy
,
145 .xpath
= "/frr-zebra:zebra/debugs/debug-rib",
147 .modify
= zebra_debugs_debug_rib_modify
,
148 .destroy
= zebra_debugs_debug_rib_destroy
,
152 .xpath
= "/frr-zebra:zebra/debugs/debug-rib-detail",
154 .modify
= zebra_debugs_debug_rib_detail_modify
,
155 .destroy
= zebra_debugs_debug_rib_detail_destroy
,
159 .xpath
= "/frr-zebra:zebra/debugs/debug-fpm",
161 .modify
= zebra_debugs_debug_fpm_modify
,
162 .destroy
= zebra_debugs_debug_fpm_destroy
,
166 .xpath
= "/frr-zebra:zebra/debugs/debug-nht",
168 .modify
= zebra_debugs_debug_nht_modify
,
169 .destroy
= zebra_debugs_debug_nht_destroy
,
173 .xpath
= "/frr-zebra:zebra/debugs/debug-nht-detail",
175 .modify
= zebra_debugs_debug_nht_detail_modify
,
176 .destroy
= zebra_debugs_debug_nht_detail_destroy
,
180 .xpath
= "/frr-zebra:zebra/debugs/debug-mpls",
182 .modify
= zebra_debugs_debug_mpls_modify
,
183 .destroy
= zebra_debugs_debug_mpls_destroy
,
187 .xpath
= "/frr-zebra:zebra/debugs/debug-vxlan",
189 .modify
= zebra_debugs_debug_vxlan_modify
,
190 .destroy
= zebra_debugs_debug_vxlan_destroy
,
194 .xpath
= "/frr-zebra:zebra/debugs/debug-pw",
196 .modify
= zebra_debugs_debug_pw_modify
,
197 .destroy
= zebra_debugs_debug_pw_destroy
,
201 .xpath
= "/frr-zebra:zebra/debugs/debug-dplane",
203 .modify
= zebra_debugs_debug_dplane_modify
,
204 .destroy
= zebra_debugs_debug_dplane_destroy
,
208 .xpath
= "/frr-zebra:zebra/debugs/debug-dplane-detail",
210 .modify
= zebra_debugs_debug_dplane_detail_modify
,
211 .destroy
= zebra_debugs_debug_dplane_detail_destroy
,
215 .xpath
= "/frr-zebra:zebra/debugs/debug-mlag",
217 .modify
= zebra_debugs_debug_mlag_modify
,
218 .destroy
= zebra_debugs_debug_mlag_destroy
,
222 .xpath
= "/frr-zebra:get-route-information",
224 .rpc
= get_route_information_rpc
,
228 .xpath
= "/frr-zebra:get-v6-mroute-info",
230 .rpc
= get_v6_mroute_info_rpc
,
234 .xpath
= "/frr-zebra:get-vrf-info",
236 .rpc
= get_vrf_info_rpc
,
240 .xpath
= "/frr-zebra:get-vrf-vni-info",
242 .rpc
= get_vrf_vni_info_rpc
,
246 .xpath
= "/frr-zebra:get-evpn-info",
248 .rpc
= get_evpn_info_rpc
,
252 .xpath
= "/frr-zebra:get-vni-info",
254 .rpc
= get_vni_info_rpc
,
258 .xpath
= "/frr-zebra:get-evpn-vni-rmac",
260 .rpc
= get_evpn_vni_rmac_rpc
,
264 .xpath
= "/frr-zebra:get-evpn-vni-nexthops",
266 .rpc
= get_evpn_vni_nexthops_rpc
,
270 .xpath
= "/frr-zebra:clear-evpn-dup-addr",
272 .rpc
= clear_evpn_dup_addr_rpc
,
276 .xpath
= "/frr-zebra:get-evpn-macs",
278 .rpc
= get_evpn_macs_rpc
,
282 .xpath
= "/frr-zebra:get-evpn-arp-cache",
284 .rpc
= get_evpn_arp_cache_rpc
,
288 .xpath
= "/frr-zebra:get-pbr-ipset",
290 .rpc
= get_pbr_ipset_rpc
,
294 .xpath
= "/frr-zebra:get-pbr-iptable",
296 .rpc
= get_pbr_iptable_rpc
,
300 .xpath
= "/frr-zebra:get-debugs",
302 .rpc
= get_debugs_rpc
,
306 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/ip-addrs",
308 .create
= lib_interface_zebra_ip_addrs_create
,
309 .destroy
= lib_interface_zebra_ip_addrs_destroy
,
313 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/ip-addrs/label",
315 .modify
= lib_interface_zebra_ip_addrs_label_modify
,
316 .destroy
= lib_interface_zebra_ip_addrs_label_destroy
,
320 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/ip-addrs/ip4-peer",
322 .modify
= lib_interface_zebra_ip_addrs_ip4_peer_modify
,
323 .destroy
= lib_interface_zebra_ip_addrs_ip4_peer_destroy
,
327 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/multicast",
329 .modify
= lib_interface_zebra_multicast_modify
,
330 .destroy
= lib_interface_zebra_multicast_destroy
,
334 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/link-detect",
336 .modify
= lib_interface_zebra_link_detect_modify
,
337 .destroy
= lib_interface_zebra_link_detect_destroy
,
341 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/shutdown",
343 .modify
= lib_interface_zebra_shutdown_modify
,
344 .destroy
= lib_interface_zebra_shutdown_destroy
,
348 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/bandwidth",
350 .modify
= lib_interface_zebra_bandwidth_modify
,
351 .destroy
= lib_interface_zebra_bandwidth_destroy
,
355 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/bandwidth",
357 .modify
= lib_interface_zebra_bandwidth_modify
,
358 .destroy
= lib_interface_zebra_bandwidth_destroy
,
362 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/link-params/legacy-admin-group",
364 .modify
= lib_interface_zebra_legacy_admin_group_modify
,
365 .destroy
= lib_interface_zebra_legacy_admin_group_destroy
,
366 .cli_show
= cli_show_legacy_admin_group
,
370 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities",
372 .cli_show
= cli_show_affinity
,
376 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities/affinity",
378 .create
= lib_interface_zebra_affinity_create
,
379 .destroy
= lib_interface_zebra_affinity_destroy
,
383 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinity-mode",
385 .modify
= lib_interface_zebra_affinity_mode_modify
,
386 .cli_show
= cli_show_affinity_mode
,
390 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/up-count",
392 .get_elem
= lib_interface_zebra_state_up_count_get_elem
,
396 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/down-count",
398 .get_elem
= lib_interface_zebra_state_down_count_get_elem
,
402 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/zif-type",
404 .get_elem
= lib_interface_zebra_state_zif_type_get_elem
,
408 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/ptm-status",
410 .get_elem
= lib_interface_zebra_state_ptm_status_get_elem
,
414 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/vlan-id",
416 .get_elem
= lib_interface_zebra_state_vlan_id_get_elem
,
420 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/vni-id",
422 .get_elem
= lib_interface_zebra_state_vni_id_get_elem
,
426 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/remote-vtep",
428 .get_elem
= lib_interface_zebra_state_remote_vtep_get_elem
,
432 .xpath
= "/frr-interface:lib/interface/frr-zebra:zebra/state/mcast-group",
434 .get_elem
= lib_interface_zebra_state_mcast_group_get_elem
,
438 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib",
440 .get_next
= lib_vrf_zebra_ribs_rib_get_next
,
441 .get_keys
= lib_vrf_zebra_ribs_rib_get_keys
,
442 .lookup_entry
= lib_vrf_zebra_ribs_rib_lookup_entry
,
446 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/afi-safi-name",
448 .get_elem
= lib_vrf_zebra_ribs_rib_afi_safi_name_get_elem
,
452 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/table-id",
454 .get_elem
= lib_vrf_zebra_ribs_rib_table_id_get_elem
,
458 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route",
460 .get_next
= lib_vrf_zebra_ribs_rib_route_get_next
,
461 .get_keys
= lib_vrf_zebra_ribs_rib_route_get_keys
,
462 .lookup_entry
= lib_vrf_zebra_ribs_rib_route_lookup_entry
,
466 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/prefix",
468 .get_elem
= lib_vrf_zebra_ribs_rib_route_prefix_get_elem
,
472 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry",
474 .get_next
= lib_vrf_zebra_ribs_rib_route_route_entry_get_next
,
475 .get_keys
= lib_vrf_zebra_ribs_rib_route_route_entry_get_keys
,
476 .lookup_entry
= lib_vrf_zebra_ribs_rib_route_route_entry_lookup_entry
,
480 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/protocol",
482 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_protocol_get_elem
,
486 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/instance",
488 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_instance_get_elem
,
492 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/distance",
494 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_distance_get_elem
,
498 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/metric",
500 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_metric_get_elem
,
504 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/tag",
506 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_tag_get_elem
,
510 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/selected",
512 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_selected_get_elem
,
516 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/installed",
518 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_installed_get_elem
,
522 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/failed",
524 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_failed_get_elem
,
528 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/queued",
530 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_queued_get_elem
,
534 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-flags",
536 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_internal_flags_get_elem
,
540 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-status",
542 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_internal_status_get_elem
,
546 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/uptime",
548 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_uptime_get_elem
,
552 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/id",
554 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_id_get_elem
,
558 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop",
560 .get_next
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_get_next
,
561 .get_keys
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_get_keys
,
562 .lookup_entry
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_lookup_entry
,
566 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/nh-type",
568 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_nh_type_get_elem
,
572 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/vrf",
574 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_vrf_get_elem
,
578 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/gateway",
580 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_gateway_get_elem
,
584 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/interface",
586 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_interface_get_elem
,
590 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/bh-type",
592 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_bh_type_get_elem
,
596 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/onlink",
598 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_onlink_get_elem
,
602 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/srte-color",
604 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_color_get_elem
,
608 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry",
610 .get_next
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_get_next
,
611 .get_keys
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_get_keys
,
612 .lookup_entry
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_lookup_entry
,
616 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/id",
618 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_id_get_elem
,
622 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/label",
624 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_label_get_elem
,
628 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/ttl",
630 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_ttl_get_elem
,
634 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/mpls-label-stack/entry/traffic-class",
636 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_mpls_label_stack_entry_traffic_class_get_elem
,
640 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/duplicate",
642 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_duplicate_get_elem
,
646 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/recursive",
648 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_recursive_get_elem
,
652 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/active",
654 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_active_get_elem
,
658 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/fib",
660 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_fib_get_elem
,
664 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/nexthop/weight",
666 .get_elem
= lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_nexthop_weight_get_elem
,
670 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/l3vni-id",
672 .modify
= lib_vrf_zebra_l3vni_id_modify
,
673 .destroy
= lib_vrf_zebra_l3vni_id_destroy
,
677 .xpath
= "/frr-vrf:lib/vrf/frr-zebra:zebra/prefix-only",
679 .modify
= lib_vrf_zebra_prefix_only_modify
,