2 * Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro <kunihiro@zebra.org>
3 * Copyright (C) 2018 NetDEF, Inc.
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 * You should have received a copy of the GNU General Public License along
17 * with this program; see the file COPYING; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
29 #include "northbound.h"
32 #include "ripd/ripd.h"
33 #include "ripd/rip_cli.h"
36 * XPath: /frr-ripd:ripd/instance
38 static int ripd_instance_create(enum nb_event event
,
39 const struct lyd_node
*dnode
,
40 union nb_resource
*resource
)
42 /* TODO: implement me. */
46 static int ripd_instance_delete(enum nb_event event
,
47 const struct lyd_node
*dnode
)
49 /* TODO: implement me. */
54 * XPath: /frr-ripd:ripd/instance/allow-ecmp
56 static int ripd_instance_allow_ecmp_modify(enum nb_event event
,
57 const struct lyd_node
*dnode
,
58 union nb_resource
*resource
)
60 /* TODO: implement me. */
65 * XPath: /frr-ripd:ripd/instance/default-information-originate
68 ripd_instance_default_information_originate_modify(enum nb_event event
,
69 const struct lyd_node
*dnode
,
70 union nb_resource
*resource
)
72 /* TODO: implement me. */
77 * XPath: /frr-ripd:ripd/instance/default-metric
79 static int ripd_instance_default_metric_modify(enum nb_event event
,
80 const struct lyd_node
*dnode
,
81 union nb_resource
*resource
)
83 /* TODO: implement me. */
88 * XPath: /frr-ripd:ripd/instance/distance/default
90 static int ripd_instance_distance_default_modify(enum nb_event event
,
91 const struct lyd_node
*dnode
,
92 union nb_resource
*resource
)
94 /* TODO: implement me. */
99 * XPath: /frr-ripd:ripd/instance/distance/source
101 static int ripd_instance_distance_source_create(enum nb_event event
,
102 const struct lyd_node
*dnode
,
103 union nb_resource
*resource
)
105 /* TODO: implement me. */
109 static int ripd_instance_distance_source_delete(enum nb_event event
,
110 const struct lyd_node
*dnode
)
112 /* TODO: implement me. */
117 * XPath: /frr-ripd:ripd/instance/distance/source/distance
120 ripd_instance_distance_source_distance_modify(enum nb_event event
,
121 const struct lyd_node
*dnode
,
122 union nb_resource
*resource
)
124 /* TODO: implement me. */
129 * XPath: /frr-ripd:ripd/instance/distance/source/access-list
132 ripd_instance_distance_source_access_list_modify(enum nb_event event
,
133 const struct lyd_node
*dnode
,
134 union nb_resource
*resource
)
136 /* TODO: implement me. */
141 ripd_instance_distance_source_access_list_delete(enum nb_event event
,
142 const struct lyd_node
*dnode
)
144 /* TODO: implement me. */
149 * XPath: /frr-ripd:ripd/instance/explicit-neighbor
151 static int ripd_instance_explicit_neighbor_create(enum nb_event event
,
152 const struct lyd_node
*dnode
,
153 union nb_resource
*resource
)
155 /* TODO: implement me. */
159 static int ripd_instance_explicit_neighbor_delete(enum nb_event event
,
160 const struct lyd_node
*dnode
)
162 /* TODO: implement me. */
167 * XPath: /frr-ripd:ripd/instance/network
169 static int ripd_instance_network_create(enum nb_event event
,
170 const struct lyd_node
*dnode
,
171 union nb_resource
*resource
)
173 /* TODO: implement me. */
177 static int ripd_instance_network_delete(enum nb_event event
,
178 const struct lyd_node
*dnode
)
180 /* TODO: implement me. */
185 * XPath: /frr-ripd:ripd/instance/interface
187 static int ripd_instance_interface_create(enum nb_event event
,
188 const struct lyd_node
*dnode
,
189 union nb_resource
*resource
)
191 /* TODO: implement me. */
195 static int ripd_instance_interface_delete(enum nb_event event
,
196 const struct lyd_node
*dnode
)
198 /* TODO: implement me. */
203 * XPath: /frr-ripd:ripd/instance/offset-list
205 static int ripd_instance_offset_list_create(enum nb_event event
,
206 const struct lyd_node
*dnode
,
207 union nb_resource
*resource
)
209 /* TODO: implement me. */
213 static int ripd_instance_offset_list_delete(enum nb_event event
,
214 const struct lyd_node
*dnode
)
216 /* TODO: implement me. */
221 * XPath: /frr-ripd:ripd/instance/offset-list/access-list
224 ripd_instance_offset_list_access_list_modify(enum nb_event event
,
225 const struct lyd_node
*dnode
,
226 union nb_resource
*resource
)
228 /* TODO: implement me. */
233 * XPath: /frr-ripd:ripd/instance/offset-list/metric
235 static int ripd_instance_offset_list_metric_modify(enum nb_event event
,
236 const struct lyd_node
*dnode
,
237 union nb_resource
*resource
)
239 /* TODO: implement me. */
244 * XPath: /frr-ripd:ripd/instance/passive-default
246 static int ripd_instance_passive_default_modify(enum nb_event event
,
247 const struct lyd_node
*dnode
,
248 union nb_resource
*resource
)
250 /* TODO: implement me. */
255 * XPath: /frr-ripd:ripd/instance/passive-interface
257 static int ripd_instance_passive_interface_create(enum nb_event event
,
258 const struct lyd_node
*dnode
,
259 union nb_resource
*resource
)
261 /* TODO: implement me. */
265 static int ripd_instance_passive_interface_delete(enum nb_event event
,
266 const struct lyd_node
*dnode
)
268 /* TODO: implement me. */
273 * XPath: /frr-ripd:ripd/instance/non-passive-interface
276 ripd_instance_non_passive_interface_create(enum nb_event event
,
277 const struct lyd_node
*dnode
,
278 union nb_resource
*resource
)
280 /* TODO: implement me. */
285 ripd_instance_non_passive_interface_delete(enum nb_event event
,
286 const struct lyd_node
*dnode
)
288 /* TODO: implement me. */
293 * XPath: /frr-ripd:ripd/instance/redistribute
295 static int ripd_instance_redistribute_create(enum nb_event event
,
296 const struct lyd_node
*dnode
,
297 union nb_resource
*resource
)
299 /* TODO: implement me. */
303 static int ripd_instance_redistribute_delete(enum nb_event event
,
304 const struct lyd_node
*dnode
)
306 /* TODO: implement me. */
311 * XPath: /frr-ripd:ripd/instance/redistribute/route-map
314 ripd_instance_redistribute_route_map_modify(enum nb_event event
,
315 const struct lyd_node
*dnode
,
316 union nb_resource
*resource
)
318 /* TODO: implement me. */
323 ripd_instance_redistribute_route_map_delete(enum nb_event event
,
324 const struct lyd_node
*dnode
)
326 /* TODO: implement me. */
331 * XPath: /frr-ripd:ripd/instance/redistribute/metric
334 ripd_instance_redistribute_metric_modify(enum nb_event event
,
335 const struct lyd_node
*dnode
,
336 union nb_resource
*resource
)
338 /* TODO: implement me. */
343 ripd_instance_redistribute_metric_delete(enum nb_event event
,
344 const struct lyd_node
*dnode
)
346 /* TODO: implement me. */
351 * XPath: /frr-ripd:ripd/instance/static-route
353 static int ripd_instance_static_route_create(enum nb_event event
,
354 const struct lyd_node
*dnode
,
355 union nb_resource
*resource
)
357 /* TODO: implement me. */
361 static int ripd_instance_static_route_delete(enum nb_event event
,
362 const struct lyd_node
*dnode
)
364 /* TODO: implement me. */
369 * XPath: /frr-ripd:ripd/instance/timers/flush-interval
372 ripd_instance_timers_flush_interval_modify(enum nb_event event
,
373 const struct lyd_node
*dnode
,
374 union nb_resource
*resource
)
376 /* TODO: implement me. */
381 * XPath: /frr-ripd:ripd/instance/timers/holddown-interval
384 ripd_instance_timers_holddown_interval_modify(enum nb_event event
,
385 const struct lyd_node
*dnode
,
386 union nb_resource
*resource
)
388 /* TODO: implement me. */
393 * XPath: /frr-ripd:ripd/instance/timers/update-interval
396 ripd_instance_timers_update_interval_modify(enum nb_event event
,
397 const struct lyd_node
*dnode
,
398 union nb_resource
*resource
)
400 /* TODO: implement me. */
405 * XPath: /frr-ripd:ripd/instance/version/receive
407 static int ripd_instance_version_receive_modify(enum nb_event event
,
408 const struct lyd_node
*dnode
,
409 union nb_resource
*resource
)
411 /* TODO: implement me. */
416 * XPath: /frr-ripd:ripd/instance/version/send
418 static int ripd_instance_version_send_modify(enum nb_event event
,
419 const struct lyd_node
*dnode
,
420 union nb_resource
*resource
)
422 /* TODO: implement me. */
427 * XPath: /frr-interface:lib/interface/frr-ripd:rip/split-horizon
429 static int lib_interface_rip_split_horizon_modify(enum nb_event event
,
430 const struct lyd_node
*dnode
,
431 union nb_resource
*resource
)
433 /* TODO: implement me. */
438 * XPath: /frr-interface:lib/interface/frr-ripd:rip/v2-broadcast
440 static int lib_interface_rip_v2_broadcast_modify(enum nb_event event
,
441 const struct lyd_node
*dnode
,
442 union nb_resource
*resource
)
444 /* TODO: implement me. */
449 * XPath: /frr-interface:lib/interface/frr-ripd:rip/version-receive
452 lib_interface_rip_version_receive_modify(enum nb_event event
,
453 const struct lyd_node
*dnode
,
454 union nb_resource
*resource
)
456 /* TODO: implement me. */
461 * XPath: /frr-interface:lib/interface/frr-ripd:rip/version-send
463 static int lib_interface_rip_version_send_modify(enum nb_event event
,
464 const struct lyd_node
*dnode
,
465 union nb_resource
*resource
)
467 /* TODO: implement me. */
472 * XPath: /frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/mode
474 static int lib_interface_rip_authentication_scheme_mode_modify(
475 enum nb_event event
, const struct lyd_node
*dnode
,
476 union nb_resource
*resource
)
478 /* TODO: implement me. */
484 * /frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/md5-auth-length
486 static int lib_interface_rip_authentication_scheme_md5_auth_length_modify(
487 enum nb_event event
, const struct lyd_node
*dnode
,
488 union nb_resource
*resource
)
490 /* TODO: implement me. */
494 static int lib_interface_rip_authentication_scheme_md5_auth_length_delete(
495 enum nb_event event
, const struct lyd_node
*dnode
)
497 /* TODO: implement me. */
502 * XPath: /frr-interface:lib/interface/frr-ripd:rip/authentication-password
505 lib_interface_rip_authentication_password_modify(enum nb_event event
,
506 const struct lyd_node
*dnode
,
507 union nb_resource
*resource
)
509 /* TODO: implement me. */
514 lib_interface_rip_authentication_password_delete(enum nb_event event
,
515 const struct lyd_node
*dnode
)
517 /* TODO: implement me. */
522 * XPath: /frr-interface:lib/interface/frr-ripd:rip/authentication-key-chain
525 lib_interface_rip_authentication_key_chain_modify(enum nb_event event
,
526 const struct lyd_node
*dnode
,
527 union nb_resource
*resource
)
529 /* TODO: implement me. */
534 lib_interface_rip_authentication_key_chain_delete(enum nb_event event
,
535 const struct lyd_node
*dnode
)
537 /* TODO: implement me. */
542 * XPath: /frr-ripd:ripd/state/neighbors/neighbor
545 ripd_state_neighbors_neighbor_get_next(const char *xpath
,
546 const void *list_entry
)
548 /* TODO: implement me. */
552 static int ripd_state_neighbors_neighbor_get_keys(const void *list_entry
,
553 struct yang_list_keys
*keys
)
555 /* TODO: implement me. */
560 ripd_state_neighbors_neighbor_lookup_entry(const struct yang_list_keys
*keys
)
562 /* TODO: implement me. */
567 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/address
569 static struct yang_data
*
570 ripd_state_neighbors_neighbor_address_get_elem(const char *xpath
,
571 const void *list_entry
)
573 /* TODO: implement me. */
578 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/last-update
580 static struct yang_data
*
581 ripd_state_neighbors_neighbor_last_update_get_elem(const char *xpath
,
582 const void *list_entry
)
584 /* TODO: implement me. */
589 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/bad-packets-rcvd
591 static struct yang_data
*
592 ripd_state_neighbors_neighbor_bad_packets_rcvd_get_elem(const char *xpath
,
593 const void *list_entry
)
595 /* TODO: implement me. */
600 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/bad-routes-rcvd
602 static struct yang_data
*
603 ripd_state_neighbors_neighbor_bad_routes_rcvd_get_elem(const char *xpath
,
604 const void *list_entry
)
606 /* TODO: implement me. */
611 * XPath: /frr-ripd:ripd/state/routes/route
613 static const void *ripd_state_routes_route_get_next(const char *xpath
,
614 const void *list_entry
)
616 /* TODO: implement me. */
620 static int ripd_state_routes_route_get_keys(const void *list_entry
,
621 struct yang_list_keys
*keys
)
623 /* TODO: implement me. */
628 ripd_state_routes_route_lookup_entry(const struct yang_list_keys
*keys
)
630 /* TODO: implement me. */
635 * XPath: /frr-ripd:ripd/state/routes/route/prefix
637 static struct yang_data
*
638 ripd_state_routes_route_prefix_get_elem(const char *xpath
,
639 const void *list_entry
)
641 /* TODO: implement me. */
646 * XPath: /frr-ripd:ripd/state/routes/route/next-hop
648 static struct yang_data
*
649 ripd_state_routes_route_next_hop_get_elem(const char *xpath
,
650 const void *list_entry
)
652 /* TODO: implement me. */
657 * XPath: /frr-ripd:ripd/state/routes/route/interface
659 static struct yang_data
*
660 ripd_state_routes_route_interface_get_elem(const char *xpath
,
661 const void *list_entry
)
663 /* TODO: implement me. */
668 * XPath: /frr-ripd:ripd/state/routes/route/metric
670 static struct yang_data
*
671 ripd_state_routes_route_metric_get_elem(const char *xpath
,
672 const void *list_entry
)
674 /* TODO: implement me. */
679 * XPath: /frr-ripd:clear-rip-route
681 static int clear_rip_route_rpc(const char *xpath
, const struct list
*input
,
684 /* TODO: implement me. */
688 /* clang-format off */
689 const struct frr_yang_module_info frr_ripd_info
= {
693 .xpath
= "/frr-ripd:ripd/instance",
694 .cbs
.create
= ripd_instance_create
,
695 .cbs
.delete = ripd_instance_delete
,
698 .xpath
= "/frr-ripd:ripd/instance/allow-ecmp",
699 .cbs
.modify
= ripd_instance_allow_ecmp_modify
,
702 .xpath
= "/frr-ripd:ripd/instance/default-information-originate",
703 .cbs
.modify
= ripd_instance_default_information_originate_modify
,
706 .xpath
= "/frr-ripd:ripd/instance/default-metric",
707 .cbs
.modify
= ripd_instance_default_metric_modify
,
710 .xpath
= "/frr-ripd:ripd/instance/distance/default",
711 .cbs
.modify
= ripd_instance_distance_default_modify
,
714 .xpath
= "/frr-ripd:ripd/instance/distance/source",
715 .cbs
.create
= ripd_instance_distance_source_create
,
716 .cbs
.delete = ripd_instance_distance_source_delete
,
719 .xpath
= "/frr-ripd:ripd/instance/distance/source/distance",
720 .cbs
.modify
= ripd_instance_distance_source_distance_modify
,
723 .xpath
= "/frr-ripd:ripd/instance/distance/source/access-list",
724 .cbs
.modify
= ripd_instance_distance_source_access_list_modify
,
725 .cbs
.delete = ripd_instance_distance_source_access_list_delete
,
728 .xpath
= "/frr-ripd:ripd/instance/explicit-neighbor",
729 .cbs
.create
= ripd_instance_explicit_neighbor_create
,
730 .cbs
.delete = ripd_instance_explicit_neighbor_delete
,
733 .xpath
= "/frr-ripd:ripd/instance/network",
734 .cbs
.create
= ripd_instance_network_create
,
735 .cbs
.delete = ripd_instance_network_delete
,
738 .xpath
= "/frr-ripd:ripd/instance/interface",
739 .cbs
.create
= ripd_instance_interface_create
,
740 .cbs
.delete = ripd_instance_interface_delete
,
743 .xpath
= "/frr-ripd:ripd/instance/offset-list",
744 .cbs
.create
= ripd_instance_offset_list_create
,
745 .cbs
.delete = ripd_instance_offset_list_delete
,
748 .xpath
= "/frr-ripd:ripd/instance/offset-list/access-list",
749 .cbs
.modify
= ripd_instance_offset_list_access_list_modify
,
752 .xpath
= "/frr-ripd:ripd/instance/offset-list/metric",
753 .cbs
.modify
= ripd_instance_offset_list_metric_modify
,
756 .xpath
= "/frr-ripd:ripd/instance/passive-default",
757 .cbs
.modify
= ripd_instance_passive_default_modify
,
760 .xpath
= "/frr-ripd:ripd/instance/passive-interface",
761 .cbs
.create
= ripd_instance_passive_interface_create
,
762 .cbs
.delete = ripd_instance_passive_interface_delete
,
765 .xpath
= "/frr-ripd:ripd/instance/non-passive-interface",
766 .cbs
.create
= ripd_instance_non_passive_interface_create
,
767 .cbs
.delete = ripd_instance_non_passive_interface_delete
,
770 .xpath
= "/frr-ripd:ripd/instance/redistribute",
771 .cbs
.create
= ripd_instance_redistribute_create
,
772 .cbs
.delete = ripd_instance_redistribute_delete
,
775 .xpath
= "/frr-ripd:ripd/instance/redistribute/route-map",
776 .cbs
.modify
= ripd_instance_redistribute_route_map_modify
,
777 .cbs
.delete = ripd_instance_redistribute_route_map_delete
,
780 .xpath
= "/frr-ripd:ripd/instance/redistribute/metric",
781 .cbs
.modify
= ripd_instance_redistribute_metric_modify
,
782 .cbs
.delete = ripd_instance_redistribute_metric_delete
,
785 .xpath
= "/frr-ripd:ripd/instance/static-route",
786 .cbs
.create
= ripd_instance_static_route_create
,
787 .cbs
.delete = ripd_instance_static_route_delete
,
790 .xpath
= "/frr-ripd:ripd/instance/timers/flush-interval",
791 .cbs
.modify
= ripd_instance_timers_flush_interval_modify
,
794 .xpath
= "/frr-ripd:ripd/instance/timers/holddown-interval",
795 .cbs
.modify
= ripd_instance_timers_holddown_interval_modify
,
798 .xpath
= "/frr-ripd:ripd/instance/timers/update-interval",
799 .cbs
.modify
= ripd_instance_timers_update_interval_modify
,
802 .xpath
= "/frr-ripd:ripd/instance/version/receive",
803 .cbs
.modify
= ripd_instance_version_receive_modify
,
806 .xpath
= "/frr-ripd:ripd/instance/version/send",
807 .cbs
.modify
= ripd_instance_version_send_modify
,
810 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/split-horizon",
811 .cbs
.modify
= lib_interface_rip_split_horizon_modify
,
814 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/v2-broadcast",
815 .cbs
.modify
= lib_interface_rip_v2_broadcast_modify
,
818 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/version-receive",
819 .cbs
.modify
= lib_interface_rip_version_receive_modify
,
822 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/version-send",
823 .cbs
.modify
= lib_interface_rip_version_send_modify
,
826 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/mode",
827 .cbs
.modify
= lib_interface_rip_authentication_scheme_mode_modify
,
830 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/md5-auth-length",
831 .cbs
.modify
= lib_interface_rip_authentication_scheme_md5_auth_length_modify
,
832 .cbs
.delete = lib_interface_rip_authentication_scheme_md5_auth_length_delete
,
835 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/authentication-password",
836 .cbs
.modify
= lib_interface_rip_authentication_password_modify
,
837 .cbs
.delete = lib_interface_rip_authentication_password_delete
,
840 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/authentication-key-chain",
841 .cbs
.modify
= lib_interface_rip_authentication_key_chain_modify
,
842 .cbs
.delete = lib_interface_rip_authentication_key_chain_delete
,
845 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor",
846 .cbs
.get_next
= ripd_state_neighbors_neighbor_get_next
,
847 .cbs
.get_keys
= ripd_state_neighbors_neighbor_get_keys
,
848 .cbs
.lookup_entry
= ripd_state_neighbors_neighbor_lookup_entry
,
851 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor/address",
852 .cbs
.get_elem
= ripd_state_neighbors_neighbor_address_get_elem
,
855 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor/last-update",
856 .cbs
.get_elem
= ripd_state_neighbors_neighbor_last_update_get_elem
,
859 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor/bad-packets-rcvd",
860 .cbs
.get_elem
= ripd_state_neighbors_neighbor_bad_packets_rcvd_get_elem
,
863 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor/bad-routes-rcvd",
864 .cbs
.get_elem
= ripd_state_neighbors_neighbor_bad_routes_rcvd_get_elem
,
867 .xpath
= "/frr-ripd:ripd/state/routes/route",
868 .cbs
.get_next
= ripd_state_routes_route_get_next
,
869 .cbs
.get_keys
= ripd_state_routes_route_get_keys
,
870 .cbs
.lookup_entry
= ripd_state_routes_route_lookup_entry
,
873 .xpath
= "/frr-ripd:ripd/state/routes/route/prefix",
874 .cbs
.get_elem
= ripd_state_routes_route_prefix_get_elem
,
877 .xpath
= "/frr-ripd:ripd/state/routes/route/next-hop",
878 .cbs
.get_elem
= ripd_state_routes_route_next_hop_get_elem
,
881 .xpath
= "/frr-ripd:ripd/state/routes/route/interface",
882 .cbs
.get_elem
= ripd_state_routes_route_interface_get_elem
,
885 .xpath
= "/frr-ripd:ripd/state/routes/route/metric",
886 .cbs
.get_elem
= ripd_state_routes_route_metric_get_elem
,
889 .xpath
= "/frr-ripd:clear-rip-route",
890 .cbs
.rpc
= clear_rip_route_rpc
,