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
)
48 socket
= rip_create_socket();
50 return NB_ERR_RESOURCE
;
51 resource
->fd
= socket
;
54 socket
= resource
->fd
;
58 socket
= resource
->fd
;
66 static int ripd_instance_delete(enum nb_event event
,
67 const struct lyd_node
*dnode
)
69 if (event
!= NB_EV_APPLY
)
78 * XPath: /frr-ripd:ripd/instance/allow-ecmp
80 static int ripd_instance_allow_ecmp_modify(enum nb_event event
,
81 const struct lyd_node
*dnode
,
82 union nb_resource
*resource
)
84 if (event
!= NB_EV_APPLY
)
87 rip
->ecmp
= yang_dnode_get_bool(dnode
, NULL
);
95 * XPath: /frr-ripd:ripd/instance/default-information-originate
98 ripd_instance_default_information_originate_modify(enum nb_event event
,
99 const struct lyd_node
*dnode
,
100 union nb_resource
*resource
)
102 bool default_information
;
103 struct prefix_ipv4 p
;
105 if (event
!= NB_EV_APPLY
)
108 default_information
= yang_dnode_get_bool(dnode
, NULL
);
110 memset(&p
, 0, sizeof(struct prefix_ipv4
));
112 if (default_information
) {
115 memset(&nh
, 0, sizeof(nh
));
116 nh
.type
= NEXTHOP_TYPE_IPV4
;
117 rip_redistribute_add(ZEBRA_ROUTE_RIP
, RIP_ROUTE_DEFAULT
, &p
,
120 rip_redistribute_delete(ZEBRA_ROUTE_RIP
, RIP_ROUTE_DEFAULT
, &p
,
128 * XPath: /frr-ripd:ripd/instance/default-metric
130 static int ripd_instance_default_metric_modify(enum nb_event event
,
131 const struct lyd_node
*dnode
,
132 union nb_resource
*resource
)
134 if (event
!= NB_EV_APPLY
)
137 rip
->default_metric
= yang_dnode_get_uint8(dnode
, NULL
);
138 /* rip_update_default_metric (); */
144 * XPath: /frr-ripd:ripd/instance/distance/default
146 static int ripd_instance_distance_default_modify(enum nb_event event
,
147 const struct lyd_node
*dnode
,
148 union nb_resource
*resource
)
150 if (event
!= NB_EV_APPLY
)
153 rip
->distance
= yang_dnode_get_uint8(dnode
, NULL
);
159 * XPath: /frr-ripd:ripd/instance/distance/source
161 static int ripd_instance_distance_source_create(enum nb_event event
,
162 const struct lyd_node
*dnode
,
163 union nb_resource
*resource
)
165 struct prefix_ipv4 prefix
;
166 struct route_node
*rn
;
168 if (event
!= NB_EV_APPLY
)
171 yang_dnode_get_ipv4p(&prefix
, dnode
, "./prefix");
173 /* Get RIP distance node. */
174 rn
= route_node_get(rip_distance_table
, (struct prefix
*)&prefix
);
175 rn
->info
= rip_distance_new();
176 yang_dnode_set_entry(dnode
, rn
);
181 static int ripd_instance_distance_source_delete(enum nb_event event
,
182 const struct lyd_node
*dnode
)
184 struct route_node
*rn
;
185 struct rip_distance
*rdistance
;
187 if (event
!= NB_EV_APPLY
)
190 rn
= yang_dnode_get_entry(dnode
);
191 rdistance
= rn
->info
;
192 if (rdistance
->access_list
)
193 free(rdistance
->access_list
);
194 rip_distance_free(rdistance
);
197 route_unlock_node(rn
);
203 * XPath: /frr-ripd:ripd/instance/distance/source/distance
206 ripd_instance_distance_source_distance_modify(enum nb_event event
,
207 const struct lyd_node
*dnode
,
208 union nb_resource
*resource
)
210 struct route_node
*rn
;
212 struct rip_distance
*rdistance
;
214 if (event
!= NB_EV_APPLY
)
217 /* Set distance value. */
218 rn
= yang_dnode_get_entry(dnode
);
219 distance
= yang_dnode_get_uint8(dnode
, NULL
);
220 rdistance
= rn
->info
;
221 rdistance
->distance
= distance
;
227 * XPath: /frr-ripd:ripd/instance/distance/source/access-list
230 ripd_instance_distance_source_access_list_modify(enum nb_event event
,
231 const struct lyd_node
*dnode
,
232 union nb_resource
*resource
)
234 const char *acl_name
;
235 struct route_node
*rn
;
236 struct rip_distance
*rdistance
;
238 if (event
!= NB_EV_APPLY
)
241 acl_name
= yang_dnode_get_string(dnode
, NULL
);
243 /* Set access-list */
244 rn
= yang_dnode_get_entry(dnode
);
245 rdistance
= rn
->info
;
246 if (rdistance
->access_list
)
247 free(rdistance
->access_list
);
248 rdistance
->access_list
= strdup(acl_name
);
254 ripd_instance_distance_source_access_list_delete(enum nb_event event
,
255 const struct lyd_node
*dnode
)
257 struct route_node
*rn
;
258 struct rip_distance
*rdistance
;
260 if (event
!= NB_EV_APPLY
)
263 /* Reset access-list configuration. */
264 rn
= yang_dnode_get_entry(dnode
);
265 rdistance
= rn
->info
;
266 free(rdistance
->access_list
);
267 rdistance
->access_list
= NULL
;
273 * XPath: /frr-ripd:ripd/instance/explicit-neighbor
275 static int ripd_instance_explicit_neighbor_create(enum nb_event event
,
276 const struct lyd_node
*dnode
,
277 union nb_resource
*resource
)
279 /* TODO: implement me. */
283 static int ripd_instance_explicit_neighbor_delete(enum nb_event event
,
284 const struct lyd_node
*dnode
)
286 /* TODO: implement me. */
291 * XPath: /frr-ripd:ripd/instance/network
293 static int ripd_instance_network_create(enum nb_event event
,
294 const struct lyd_node
*dnode
,
295 union nb_resource
*resource
)
297 /* TODO: implement me. */
301 static int ripd_instance_network_delete(enum nb_event event
,
302 const struct lyd_node
*dnode
)
304 /* TODO: implement me. */
309 * XPath: /frr-ripd:ripd/instance/interface
311 static int ripd_instance_interface_create(enum nb_event event
,
312 const struct lyd_node
*dnode
,
313 union nb_resource
*resource
)
315 /* TODO: implement me. */
319 static int ripd_instance_interface_delete(enum nb_event event
,
320 const struct lyd_node
*dnode
)
322 /* TODO: implement me. */
327 * XPath: /frr-ripd:ripd/instance/offset-list
329 static int ripd_instance_offset_list_create(enum nb_event event
,
330 const struct lyd_node
*dnode
,
331 union nb_resource
*resource
)
333 /* TODO: implement me. */
337 static int ripd_instance_offset_list_delete(enum nb_event event
,
338 const struct lyd_node
*dnode
)
340 /* TODO: implement me. */
345 * XPath: /frr-ripd:ripd/instance/offset-list/access-list
348 ripd_instance_offset_list_access_list_modify(enum nb_event event
,
349 const struct lyd_node
*dnode
,
350 union nb_resource
*resource
)
352 /* TODO: implement me. */
357 * XPath: /frr-ripd:ripd/instance/offset-list/metric
359 static int ripd_instance_offset_list_metric_modify(enum nb_event event
,
360 const struct lyd_node
*dnode
,
361 union nb_resource
*resource
)
363 /* TODO: implement me. */
368 * XPath: /frr-ripd:ripd/instance/passive-default
370 static int ripd_instance_passive_default_modify(enum nb_event event
,
371 const struct lyd_node
*dnode
,
372 union nb_resource
*resource
)
374 /* TODO: implement me. */
379 * XPath: /frr-ripd:ripd/instance/passive-interface
381 static int ripd_instance_passive_interface_create(enum nb_event event
,
382 const struct lyd_node
*dnode
,
383 union nb_resource
*resource
)
385 /* TODO: implement me. */
389 static int ripd_instance_passive_interface_delete(enum nb_event event
,
390 const struct lyd_node
*dnode
)
392 /* TODO: implement me. */
397 * XPath: /frr-ripd:ripd/instance/non-passive-interface
400 ripd_instance_non_passive_interface_create(enum nb_event event
,
401 const struct lyd_node
*dnode
,
402 union nb_resource
*resource
)
404 /* TODO: implement me. */
409 ripd_instance_non_passive_interface_delete(enum nb_event event
,
410 const struct lyd_node
*dnode
)
412 /* TODO: implement me. */
417 * XPath: /frr-ripd:ripd/instance/redistribute
419 static int ripd_instance_redistribute_create(enum nb_event event
,
420 const struct lyd_node
*dnode
,
421 union nb_resource
*resource
)
423 /* TODO: implement me. */
427 static int ripd_instance_redistribute_delete(enum nb_event event
,
428 const struct lyd_node
*dnode
)
430 /* TODO: implement me. */
435 * XPath: /frr-ripd:ripd/instance/redistribute/route-map
438 ripd_instance_redistribute_route_map_modify(enum nb_event event
,
439 const struct lyd_node
*dnode
,
440 union nb_resource
*resource
)
442 /* TODO: implement me. */
447 ripd_instance_redistribute_route_map_delete(enum nb_event event
,
448 const struct lyd_node
*dnode
)
450 /* TODO: implement me. */
455 * XPath: /frr-ripd:ripd/instance/redistribute/metric
458 ripd_instance_redistribute_metric_modify(enum nb_event event
,
459 const struct lyd_node
*dnode
,
460 union nb_resource
*resource
)
462 /* TODO: implement me. */
467 ripd_instance_redistribute_metric_delete(enum nb_event event
,
468 const struct lyd_node
*dnode
)
470 /* TODO: implement me. */
475 * XPath: /frr-ripd:ripd/instance/static-route
477 static int ripd_instance_static_route_create(enum nb_event event
,
478 const struct lyd_node
*dnode
,
479 union nb_resource
*resource
)
481 /* TODO: implement me. */
485 static int ripd_instance_static_route_delete(enum nb_event event
,
486 const struct lyd_node
*dnode
)
488 /* TODO: implement me. */
493 * XPath: /frr-ripd:ripd/instance/timers/flush-interval
496 ripd_instance_timers_flush_interval_modify(enum nb_event event
,
497 const struct lyd_node
*dnode
,
498 union nb_resource
*resource
)
500 /* TODO: implement me. */
505 * XPath: /frr-ripd:ripd/instance/timers/holddown-interval
508 ripd_instance_timers_holddown_interval_modify(enum nb_event event
,
509 const struct lyd_node
*dnode
,
510 union nb_resource
*resource
)
512 /* TODO: implement me. */
517 * XPath: /frr-ripd:ripd/instance/timers/update-interval
520 ripd_instance_timers_update_interval_modify(enum nb_event event
,
521 const struct lyd_node
*dnode
,
522 union nb_resource
*resource
)
524 /* TODO: implement me. */
529 * XPath: /frr-ripd:ripd/instance/version/receive
531 static int ripd_instance_version_receive_modify(enum nb_event event
,
532 const struct lyd_node
*dnode
,
533 union nb_resource
*resource
)
535 /* TODO: implement me. */
540 * XPath: /frr-ripd:ripd/instance/version/send
542 static int ripd_instance_version_send_modify(enum nb_event event
,
543 const struct lyd_node
*dnode
,
544 union nb_resource
*resource
)
546 /* TODO: implement me. */
551 * XPath: /frr-interface:lib/interface/frr-ripd:rip/split-horizon
553 static int lib_interface_rip_split_horizon_modify(enum nb_event event
,
554 const struct lyd_node
*dnode
,
555 union nb_resource
*resource
)
557 /* TODO: implement me. */
562 * XPath: /frr-interface:lib/interface/frr-ripd:rip/v2-broadcast
564 static int lib_interface_rip_v2_broadcast_modify(enum nb_event event
,
565 const struct lyd_node
*dnode
,
566 union nb_resource
*resource
)
568 /* TODO: implement me. */
573 * XPath: /frr-interface:lib/interface/frr-ripd:rip/version-receive
576 lib_interface_rip_version_receive_modify(enum nb_event event
,
577 const struct lyd_node
*dnode
,
578 union nb_resource
*resource
)
580 /* TODO: implement me. */
585 * XPath: /frr-interface:lib/interface/frr-ripd:rip/version-send
587 static int lib_interface_rip_version_send_modify(enum nb_event event
,
588 const struct lyd_node
*dnode
,
589 union nb_resource
*resource
)
591 /* TODO: implement me. */
596 * XPath: /frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/mode
598 static int lib_interface_rip_authentication_scheme_mode_modify(
599 enum nb_event event
, const struct lyd_node
*dnode
,
600 union nb_resource
*resource
)
602 /* TODO: implement me. */
608 * /frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/md5-auth-length
610 static int lib_interface_rip_authentication_scheme_md5_auth_length_modify(
611 enum nb_event event
, const struct lyd_node
*dnode
,
612 union nb_resource
*resource
)
614 /* TODO: implement me. */
618 static int lib_interface_rip_authentication_scheme_md5_auth_length_delete(
619 enum nb_event event
, const struct lyd_node
*dnode
)
621 /* TODO: implement me. */
626 * XPath: /frr-interface:lib/interface/frr-ripd:rip/authentication-password
629 lib_interface_rip_authentication_password_modify(enum nb_event event
,
630 const struct lyd_node
*dnode
,
631 union nb_resource
*resource
)
633 /* TODO: implement me. */
638 lib_interface_rip_authentication_password_delete(enum nb_event event
,
639 const struct lyd_node
*dnode
)
641 /* TODO: implement me. */
646 * XPath: /frr-interface:lib/interface/frr-ripd:rip/authentication-key-chain
649 lib_interface_rip_authentication_key_chain_modify(enum nb_event event
,
650 const struct lyd_node
*dnode
,
651 union nb_resource
*resource
)
653 /* TODO: implement me. */
658 lib_interface_rip_authentication_key_chain_delete(enum nb_event event
,
659 const struct lyd_node
*dnode
)
661 /* TODO: implement me. */
666 * XPath: /frr-ripd:ripd/state/neighbors/neighbor
669 ripd_state_neighbors_neighbor_get_next(const char *xpath
,
670 const void *list_entry
)
672 /* TODO: implement me. */
676 static int ripd_state_neighbors_neighbor_get_keys(const void *list_entry
,
677 struct yang_list_keys
*keys
)
679 /* TODO: implement me. */
684 ripd_state_neighbors_neighbor_lookup_entry(const struct yang_list_keys
*keys
)
686 /* TODO: implement me. */
691 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/address
693 static struct yang_data
*
694 ripd_state_neighbors_neighbor_address_get_elem(const char *xpath
,
695 const void *list_entry
)
697 /* TODO: implement me. */
702 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/last-update
704 static struct yang_data
*
705 ripd_state_neighbors_neighbor_last_update_get_elem(const char *xpath
,
706 const void *list_entry
)
708 /* TODO: implement me. */
713 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/bad-packets-rcvd
715 static struct yang_data
*
716 ripd_state_neighbors_neighbor_bad_packets_rcvd_get_elem(const char *xpath
,
717 const void *list_entry
)
719 /* TODO: implement me. */
724 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/bad-routes-rcvd
726 static struct yang_data
*
727 ripd_state_neighbors_neighbor_bad_routes_rcvd_get_elem(const char *xpath
,
728 const void *list_entry
)
730 /* TODO: implement me. */
735 * XPath: /frr-ripd:ripd/state/routes/route
737 static const void *ripd_state_routes_route_get_next(const char *xpath
,
738 const void *list_entry
)
740 /* TODO: implement me. */
744 static int ripd_state_routes_route_get_keys(const void *list_entry
,
745 struct yang_list_keys
*keys
)
747 /* TODO: implement me. */
752 ripd_state_routes_route_lookup_entry(const struct yang_list_keys
*keys
)
754 /* TODO: implement me. */
759 * XPath: /frr-ripd:ripd/state/routes/route/prefix
761 static struct yang_data
*
762 ripd_state_routes_route_prefix_get_elem(const char *xpath
,
763 const void *list_entry
)
765 /* TODO: implement me. */
770 * XPath: /frr-ripd:ripd/state/routes/route/next-hop
772 static struct yang_data
*
773 ripd_state_routes_route_next_hop_get_elem(const char *xpath
,
774 const void *list_entry
)
776 /* TODO: implement me. */
781 * XPath: /frr-ripd:ripd/state/routes/route/interface
783 static struct yang_data
*
784 ripd_state_routes_route_interface_get_elem(const char *xpath
,
785 const void *list_entry
)
787 /* TODO: implement me. */
792 * XPath: /frr-ripd:ripd/state/routes/route/metric
794 static struct yang_data
*
795 ripd_state_routes_route_metric_get_elem(const char *xpath
,
796 const void *list_entry
)
798 /* TODO: implement me. */
803 * XPath: /frr-ripd:clear-rip-route
805 static int clear_rip_route_rpc(const char *xpath
, const struct list
*input
,
808 /* TODO: implement me. */
812 /* clang-format off */
813 const struct frr_yang_module_info frr_ripd_info
= {
817 .xpath
= "/frr-ripd:ripd/instance",
818 .cbs
.create
= ripd_instance_create
,
819 .cbs
.delete = ripd_instance_delete
,
820 .cbs
.cli_show
= cli_show_router_rip
,
823 .xpath
= "/frr-ripd:ripd/instance/allow-ecmp",
824 .cbs
.modify
= ripd_instance_allow_ecmp_modify
,
825 .cbs
.cli_show
= cli_show_rip_allow_ecmp
,
828 .xpath
= "/frr-ripd:ripd/instance/default-information-originate",
829 .cbs
.modify
= ripd_instance_default_information_originate_modify
,
830 .cbs
.cli_show
= cli_show_rip_default_information_originate
,
833 .xpath
= "/frr-ripd:ripd/instance/default-metric",
834 .cbs
.modify
= ripd_instance_default_metric_modify
,
835 .cbs
.cli_show
= cli_show_rip_default_metric
,
838 .xpath
= "/frr-ripd:ripd/instance/distance/default",
839 .cbs
.modify
= ripd_instance_distance_default_modify
,
840 .cbs
.cli_show
= cli_show_rip_distance
,
843 .xpath
= "/frr-ripd:ripd/instance/distance/source",
844 .cbs
.create
= ripd_instance_distance_source_create
,
845 .cbs
.delete = ripd_instance_distance_source_delete
,
846 .cbs
.cli_show
= cli_show_rip_distance_source
,
849 .xpath
= "/frr-ripd:ripd/instance/distance/source/distance",
850 .cbs
.modify
= ripd_instance_distance_source_distance_modify
,
853 .xpath
= "/frr-ripd:ripd/instance/distance/source/access-list",
854 .cbs
.modify
= ripd_instance_distance_source_access_list_modify
,
855 .cbs
.delete = ripd_instance_distance_source_access_list_delete
,
858 .xpath
= "/frr-ripd:ripd/instance/explicit-neighbor",
859 .cbs
.create
= ripd_instance_explicit_neighbor_create
,
860 .cbs
.delete = ripd_instance_explicit_neighbor_delete
,
863 .xpath
= "/frr-ripd:ripd/instance/network",
864 .cbs
.create
= ripd_instance_network_create
,
865 .cbs
.delete = ripd_instance_network_delete
,
868 .xpath
= "/frr-ripd:ripd/instance/interface",
869 .cbs
.create
= ripd_instance_interface_create
,
870 .cbs
.delete = ripd_instance_interface_delete
,
873 .xpath
= "/frr-ripd:ripd/instance/offset-list",
874 .cbs
.create
= ripd_instance_offset_list_create
,
875 .cbs
.delete = ripd_instance_offset_list_delete
,
878 .xpath
= "/frr-ripd:ripd/instance/offset-list/access-list",
879 .cbs
.modify
= ripd_instance_offset_list_access_list_modify
,
882 .xpath
= "/frr-ripd:ripd/instance/offset-list/metric",
883 .cbs
.modify
= ripd_instance_offset_list_metric_modify
,
886 .xpath
= "/frr-ripd:ripd/instance/passive-default",
887 .cbs
.modify
= ripd_instance_passive_default_modify
,
890 .xpath
= "/frr-ripd:ripd/instance/passive-interface",
891 .cbs
.create
= ripd_instance_passive_interface_create
,
892 .cbs
.delete = ripd_instance_passive_interface_delete
,
895 .xpath
= "/frr-ripd:ripd/instance/non-passive-interface",
896 .cbs
.create
= ripd_instance_non_passive_interface_create
,
897 .cbs
.delete = ripd_instance_non_passive_interface_delete
,
900 .xpath
= "/frr-ripd:ripd/instance/redistribute",
901 .cbs
.create
= ripd_instance_redistribute_create
,
902 .cbs
.delete = ripd_instance_redistribute_delete
,
905 .xpath
= "/frr-ripd:ripd/instance/redistribute/route-map",
906 .cbs
.modify
= ripd_instance_redistribute_route_map_modify
,
907 .cbs
.delete = ripd_instance_redistribute_route_map_delete
,
910 .xpath
= "/frr-ripd:ripd/instance/redistribute/metric",
911 .cbs
.modify
= ripd_instance_redistribute_metric_modify
,
912 .cbs
.delete = ripd_instance_redistribute_metric_delete
,
915 .xpath
= "/frr-ripd:ripd/instance/static-route",
916 .cbs
.create
= ripd_instance_static_route_create
,
917 .cbs
.delete = ripd_instance_static_route_delete
,
920 .xpath
= "/frr-ripd:ripd/instance/timers/flush-interval",
921 .cbs
.modify
= ripd_instance_timers_flush_interval_modify
,
924 .xpath
= "/frr-ripd:ripd/instance/timers/holddown-interval",
925 .cbs
.modify
= ripd_instance_timers_holddown_interval_modify
,
928 .xpath
= "/frr-ripd:ripd/instance/timers/update-interval",
929 .cbs
.modify
= ripd_instance_timers_update_interval_modify
,
932 .xpath
= "/frr-ripd:ripd/instance/version/receive",
933 .cbs
.modify
= ripd_instance_version_receive_modify
,
936 .xpath
= "/frr-ripd:ripd/instance/version/send",
937 .cbs
.modify
= ripd_instance_version_send_modify
,
940 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/split-horizon",
941 .cbs
.modify
= lib_interface_rip_split_horizon_modify
,
944 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/v2-broadcast",
945 .cbs
.modify
= lib_interface_rip_v2_broadcast_modify
,
948 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/version-receive",
949 .cbs
.modify
= lib_interface_rip_version_receive_modify
,
952 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/version-send",
953 .cbs
.modify
= lib_interface_rip_version_send_modify
,
956 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/mode",
957 .cbs
.modify
= lib_interface_rip_authentication_scheme_mode_modify
,
960 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/md5-auth-length",
961 .cbs
.modify
= lib_interface_rip_authentication_scheme_md5_auth_length_modify
,
962 .cbs
.delete = lib_interface_rip_authentication_scheme_md5_auth_length_delete
,
965 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/authentication-password",
966 .cbs
.modify
= lib_interface_rip_authentication_password_modify
,
967 .cbs
.delete = lib_interface_rip_authentication_password_delete
,
970 .xpath
= "/frr-interface:lib/interface/frr-ripd:rip/authentication-key-chain",
971 .cbs
.modify
= lib_interface_rip_authentication_key_chain_modify
,
972 .cbs
.delete = lib_interface_rip_authentication_key_chain_delete
,
975 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor",
976 .cbs
.get_next
= ripd_state_neighbors_neighbor_get_next
,
977 .cbs
.get_keys
= ripd_state_neighbors_neighbor_get_keys
,
978 .cbs
.lookup_entry
= ripd_state_neighbors_neighbor_lookup_entry
,
981 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor/address",
982 .cbs
.get_elem
= ripd_state_neighbors_neighbor_address_get_elem
,
985 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor/last-update",
986 .cbs
.get_elem
= ripd_state_neighbors_neighbor_last_update_get_elem
,
989 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor/bad-packets-rcvd",
990 .cbs
.get_elem
= ripd_state_neighbors_neighbor_bad_packets_rcvd_get_elem
,
993 .xpath
= "/frr-ripd:ripd/state/neighbors/neighbor/bad-routes-rcvd",
994 .cbs
.get_elem
= ripd_state_neighbors_neighbor_bad_routes_rcvd_get_elem
,
997 .xpath
= "/frr-ripd:ripd/state/routes/route",
998 .cbs
.get_next
= ripd_state_routes_route_get_next
,
999 .cbs
.get_keys
= ripd_state_routes_route_get_keys
,
1000 .cbs
.lookup_entry
= ripd_state_routes_route_lookup_entry
,
1003 .xpath
= "/frr-ripd:ripd/state/routes/route/prefix",
1004 .cbs
.get_elem
= ripd_state_routes_route_prefix_get_elem
,
1007 .xpath
= "/frr-ripd:ripd/state/routes/route/next-hop",
1008 .cbs
.get_elem
= ripd_state_routes_route_next_hop_get_elem
,
1011 .xpath
= "/frr-ripd:ripd/state/routes/route/interface",
1012 .cbs
.get_elem
= ripd_state_routes_route_interface_get_elem
,
1015 .xpath
= "/frr-ripd:ripd/state/routes/route/metric",
1016 .cbs
.get_elem
= ripd_state_routes_route_metric_get_elem
,
1019 .xpath
= "/frr-ripd:clear-rip-route",
1020 .cbs
.rpc
= clear_rip_route_rpc
,