]> git.proxmox.com Git - mirror_frr.git/blob - ripd/rip_northbound.c
yang, ripd: add 'frr-ripd.yang' and associated stub callbacks
[mirror_frr.git] / ripd / rip_northbound.c
1 /*
2 * Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro <kunihiro@zebra.org>
3 * Copyright (C) 2018 NetDEF, Inc.
4 * Renato Westphal
5 *
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)
9 * any later version.
10 *
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
14 * more details.
15 *
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
19 */
20
21 #include <zebra.h>
22
23 #include "if.h"
24 #include "vrf.h"
25 #include "log.h"
26 #include "prefix.h"
27 #include "table.h"
28 #include "command.h"
29 #include "northbound.h"
30 #include "libfrr.h"
31
32 #include "ripd/ripd.h"
33 #include "ripd/rip_cli.h"
34
35 /*
36 * XPath: /frr-ripd:ripd/instance
37 */
38 static int ripd_instance_create(enum nb_event event,
39 const struct lyd_node *dnode,
40 union nb_resource *resource)
41 {
42 /* TODO: implement me. */
43 return NB_OK;
44 }
45
46 static int ripd_instance_delete(enum nb_event event,
47 const struct lyd_node *dnode)
48 {
49 /* TODO: implement me. */
50 return NB_OK;
51 }
52
53 /*
54 * XPath: /frr-ripd:ripd/instance/allow-ecmp
55 */
56 static int ripd_instance_allow_ecmp_modify(enum nb_event event,
57 const struct lyd_node *dnode,
58 union nb_resource *resource)
59 {
60 /* TODO: implement me. */
61 return NB_OK;
62 }
63
64 /*
65 * XPath: /frr-ripd:ripd/instance/default-information-originate
66 */
67 static int
68 ripd_instance_default_information_originate_modify(enum nb_event event,
69 const struct lyd_node *dnode,
70 union nb_resource *resource)
71 {
72 /* TODO: implement me. */
73 return NB_OK;
74 }
75
76 /*
77 * XPath: /frr-ripd:ripd/instance/default-metric
78 */
79 static int ripd_instance_default_metric_modify(enum nb_event event,
80 const struct lyd_node *dnode,
81 union nb_resource *resource)
82 {
83 /* TODO: implement me. */
84 return NB_OK;
85 }
86
87 /*
88 * XPath: /frr-ripd:ripd/instance/distance/default
89 */
90 static int ripd_instance_distance_default_modify(enum nb_event event,
91 const struct lyd_node *dnode,
92 union nb_resource *resource)
93 {
94 /* TODO: implement me. */
95 return NB_OK;
96 }
97
98 /*
99 * XPath: /frr-ripd:ripd/instance/distance/source
100 */
101 static int ripd_instance_distance_source_create(enum nb_event event,
102 const struct lyd_node *dnode,
103 union nb_resource *resource)
104 {
105 /* TODO: implement me. */
106 return NB_OK;
107 }
108
109 static int ripd_instance_distance_source_delete(enum nb_event event,
110 const struct lyd_node *dnode)
111 {
112 /* TODO: implement me. */
113 return NB_OK;
114 }
115
116 /*
117 * XPath: /frr-ripd:ripd/instance/distance/source/distance
118 */
119 static int
120 ripd_instance_distance_source_distance_modify(enum nb_event event,
121 const struct lyd_node *dnode,
122 union nb_resource *resource)
123 {
124 /* TODO: implement me. */
125 return NB_OK;
126 }
127
128 /*
129 * XPath: /frr-ripd:ripd/instance/distance/source/access-list
130 */
131 static int
132 ripd_instance_distance_source_access_list_modify(enum nb_event event,
133 const struct lyd_node *dnode,
134 union nb_resource *resource)
135 {
136 /* TODO: implement me. */
137 return NB_OK;
138 }
139
140 static int
141 ripd_instance_distance_source_access_list_delete(enum nb_event event,
142 const struct lyd_node *dnode)
143 {
144 /* TODO: implement me. */
145 return NB_OK;
146 }
147
148 /*
149 * XPath: /frr-ripd:ripd/instance/explicit-neighbor
150 */
151 static int ripd_instance_explicit_neighbor_create(enum nb_event event,
152 const struct lyd_node *dnode,
153 union nb_resource *resource)
154 {
155 /* TODO: implement me. */
156 return NB_OK;
157 }
158
159 static int ripd_instance_explicit_neighbor_delete(enum nb_event event,
160 const struct lyd_node *dnode)
161 {
162 /* TODO: implement me. */
163 return NB_OK;
164 }
165
166 /*
167 * XPath: /frr-ripd:ripd/instance/network
168 */
169 static int ripd_instance_network_create(enum nb_event event,
170 const struct lyd_node *dnode,
171 union nb_resource *resource)
172 {
173 /* TODO: implement me. */
174 return NB_OK;
175 }
176
177 static int ripd_instance_network_delete(enum nb_event event,
178 const struct lyd_node *dnode)
179 {
180 /* TODO: implement me. */
181 return NB_OK;
182 }
183
184 /*
185 * XPath: /frr-ripd:ripd/instance/interface
186 */
187 static int ripd_instance_interface_create(enum nb_event event,
188 const struct lyd_node *dnode,
189 union nb_resource *resource)
190 {
191 /* TODO: implement me. */
192 return NB_OK;
193 }
194
195 static int ripd_instance_interface_delete(enum nb_event event,
196 const struct lyd_node *dnode)
197 {
198 /* TODO: implement me. */
199 return NB_OK;
200 }
201
202 /*
203 * XPath: /frr-ripd:ripd/instance/offset-list
204 */
205 static int ripd_instance_offset_list_create(enum nb_event event,
206 const struct lyd_node *dnode,
207 union nb_resource *resource)
208 {
209 /* TODO: implement me. */
210 return NB_OK;
211 }
212
213 static int ripd_instance_offset_list_delete(enum nb_event event,
214 const struct lyd_node *dnode)
215 {
216 /* TODO: implement me. */
217 return NB_OK;
218 }
219
220 /*
221 * XPath: /frr-ripd:ripd/instance/offset-list/access-list
222 */
223 static int
224 ripd_instance_offset_list_access_list_modify(enum nb_event event,
225 const struct lyd_node *dnode,
226 union nb_resource *resource)
227 {
228 /* TODO: implement me. */
229 return NB_OK;
230 }
231
232 /*
233 * XPath: /frr-ripd:ripd/instance/offset-list/metric
234 */
235 static int ripd_instance_offset_list_metric_modify(enum nb_event event,
236 const struct lyd_node *dnode,
237 union nb_resource *resource)
238 {
239 /* TODO: implement me. */
240 return NB_OK;
241 }
242
243 /*
244 * XPath: /frr-ripd:ripd/instance/passive-default
245 */
246 static int ripd_instance_passive_default_modify(enum nb_event event,
247 const struct lyd_node *dnode,
248 union nb_resource *resource)
249 {
250 /* TODO: implement me. */
251 return NB_OK;
252 }
253
254 /*
255 * XPath: /frr-ripd:ripd/instance/passive-interface
256 */
257 static int ripd_instance_passive_interface_create(enum nb_event event,
258 const struct lyd_node *dnode,
259 union nb_resource *resource)
260 {
261 /* TODO: implement me. */
262 return NB_OK;
263 }
264
265 static int ripd_instance_passive_interface_delete(enum nb_event event,
266 const struct lyd_node *dnode)
267 {
268 /* TODO: implement me. */
269 return NB_OK;
270 }
271
272 /*
273 * XPath: /frr-ripd:ripd/instance/non-passive-interface
274 */
275 static int
276 ripd_instance_non_passive_interface_create(enum nb_event event,
277 const struct lyd_node *dnode,
278 union nb_resource *resource)
279 {
280 /* TODO: implement me. */
281 return NB_OK;
282 }
283
284 static int
285 ripd_instance_non_passive_interface_delete(enum nb_event event,
286 const struct lyd_node *dnode)
287 {
288 /* TODO: implement me. */
289 return NB_OK;
290 }
291
292 /*
293 * XPath: /frr-ripd:ripd/instance/redistribute
294 */
295 static int ripd_instance_redistribute_create(enum nb_event event,
296 const struct lyd_node *dnode,
297 union nb_resource *resource)
298 {
299 /* TODO: implement me. */
300 return NB_OK;
301 }
302
303 static int ripd_instance_redistribute_delete(enum nb_event event,
304 const struct lyd_node *dnode)
305 {
306 /* TODO: implement me. */
307 return NB_OK;
308 }
309
310 /*
311 * XPath: /frr-ripd:ripd/instance/redistribute/route-map
312 */
313 static int
314 ripd_instance_redistribute_route_map_modify(enum nb_event event,
315 const struct lyd_node *dnode,
316 union nb_resource *resource)
317 {
318 /* TODO: implement me. */
319 return NB_OK;
320 }
321
322 static int
323 ripd_instance_redistribute_route_map_delete(enum nb_event event,
324 const struct lyd_node *dnode)
325 {
326 /* TODO: implement me. */
327 return NB_OK;
328 }
329
330 /*
331 * XPath: /frr-ripd:ripd/instance/redistribute/metric
332 */
333 static int
334 ripd_instance_redistribute_metric_modify(enum nb_event event,
335 const struct lyd_node *dnode,
336 union nb_resource *resource)
337 {
338 /* TODO: implement me. */
339 return NB_OK;
340 }
341
342 static int
343 ripd_instance_redistribute_metric_delete(enum nb_event event,
344 const struct lyd_node *dnode)
345 {
346 /* TODO: implement me. */
347 return NB_OK;
348 }
349
350 /*
351 * XPath: /frr-ripd:ripd/instance/static-route
352 */
353 static int ripd_instance_static_route_create(enum nb_event event,
354 const struct lyd_node *dnode,
355 union nb_resource *resource)
356 {
357 /* TODO: implement me. */
358 return NB_OK;
359 }
360
361 static int ripd_instance_static_route_delete(enum nb_event event,
362 const struct lyd_node *dnode)
363 {
364 /* TODO: implement me. */
365 return NB_OK;
366 }
367
368 /*
369 * XPath: /frr-ripd:ripd/instance/timers/flush-interval
370 */
371 static int
372 ripd_instance_timers_flush_interval_modify(enum nb_event event,
373 const struct lyd_node *dnode,
374 union nb_resource *resource)
375 {
376 /* TODO: implement me. */
377 return NB_OK;
378 }
379
380 /*
381 * XPath: /frr-ripd:ripd/instance/timers/holddown-interval
382 */
383 static int
384 ripd_instance_timers_holddown_interval_modify(enum nb_event event,
385 const struct lyd_node *dnode,
386 union nb_resource *resource)
387 {
388 /* TODO: implement me. */
389 return NB_OK;
390 }
391
392 /*
393 * XPath: /frr-ripd:ripd/instance/timers/update-interval
394 */
395 static int
396 ripd_instance_timers_update_interval_modify(enum nb_event event,
397 const struct lyd_node *dnode,
398 union nb_resource *resource)
399 {
400 /* TODO: implement me. */
401 return NB_OK;
402 }
403
404 /*
405 * XPath: /frr-ripd:ripd/instance/version/receive
406 */
407 static int ripd_instance_version_receive_modify(enum nb_event event,
408 const struct lyd_node *dnode,
409 union nb_resource *resource)
410 {
411 /* TODO: implement me. */
412 return NB_OK;
413 }
414
415 /*
416 * XPath: /frr-ripd:ripd/instance/version/send
417 */
418 static int ripd_instance_version_send_modify(enum nb_event event,
419 const struct lyd_node *dnode,
420 union nb_resource *resource)
421 {
422 /* TODO: implement me. */
423 return NB_OK;
424 }
425
426 /*
427 * XPath: /frr-interface:lib/interface/frr-ripd:rip/split-horizon
428 */
429 static int lib_interface_rip_split_horizon_modify(enum nb_event event,
430 const struct lyd_node *dnode,
431 union nb_resource *resource)
432 {
433 /* TODO: implement me. */
434 return NB_OK;
435 }
436
437 /*
438 * XPath: /frr-interface:lib/interface/frr-ripd:rip/v2-broadcast
439 */
440 static int lib_interface_rip_v2_broadcast_modify(enum nb_event event,
441 const struct lyd_node *dnode,
442 union nb_resource *resource)
443 {
444 /* TODO: implement me. */
445 return NB_OK;
446 }
447
448 /*
449 * XPath: /frr-interface:lib/interface/frr-ripd:rip/version-receive
450 */
451 static int
452 lib_interface_rip_version_receive_modify(enum nb_event event,
453 const struct lyd_node *dnode,
454 union nb_resource *resource)
455 {
456 /* TODO: implement me. */
457 return NB_OK;
458 }
459
460 /*
461 * XPath: /frr-interface:lib/interface/frr-ripd:rip/version-send
462 */
463 static int lib_interface_rip_version_send_modify(enum nb_event event,
464 const struct lyd_node *dnode,
465 union nb_resource *resource)
466 {
467 /* TODO: implement me. */
468 return NB_OK;
469 }
470
471 /*
472 * XPath: /frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/mode
473 */
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)
477 {
478 /* TODO: implement me. */
479 return NB_OK;
480 }
481
482 /*
483 * XPath:
484 * /frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/md5-auth-length
485 */
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)
489 {
490 /* TODO: implement me. */
491 return NB_OK;
492 }
493
494 static int lib_interface_rip_authentication_scheme_md5_auth_length_delete(
495 enum nb_event event, const struct lyd_node *dnode)
496 {
497 /* TODO: implement me. */
498 return NB_OK;
499 }
500
501 /*
502 * XPath: /frr-interface:lib/interface/frr-ripd:rip/authentication-password
503 */
504 static int
505 lib_interface_rip_authentication_password_modify(enum nb_event event,
506 const struct lyd_node *dnode,
507 union nb_resource *resource)
508 {
509 /* TODO: implement me. */
510 return NB_OK;
511 }
512
513 static int
514 lib_interface_rip_authentication_password_delete(enum nb_event event,
515 const struct lyd_node *dnode)
516 {
517 /* TODO: implement me. */
518 return NB_OK;
519 }
520
521 /*
522 * XPath: /frr-interface:lib/interface/frr-ripd:rip/authentication-key-chain
523 */
524 static int
525 lib_interface_rip_authentication_key_chain_modify(enum nb_event event,
526 const struct lyd_node *dnode,
527 union nb_resource *resource)
528 {
529 /* TODO: implement me. */
530 return NB_OK;
531 }
532
533 static int
534 lib_interface_rip_authentication_key_chain_delete(enum nb_event event,
535 const struct lyd_node *dnode)
536 {
537 /* TODO: implement me. */
538 return NB_OK;
539 }
540
541 /*
542 * XPath: /frr-ripd:ripd/state/neighbors/neighbor
543 */
544 static const void *
545 ripd_state_neighbors_neighbor_get_next(const char *xpath,
546 const void *list_entry)
547 {
548 /* TODO: implement me. */
549 return NULL;
550 }
551
552 static int ripd_state_neighbors_neighbor_get_keys(const void *list_entry,
553 struct yang_list_keys *keys)
554 {
555 /* TODO: implement me. */
556 return NB_OK;
557 }
558
559 static const void *
560 ripd_state_neighbors_neighbor_lookup_entry(const struct yang_list_keys *keys)
561 {
562 /* TODO: implement me. */
563 return NULL;
564 }
565
566 /*
567 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/address
568 */
569 static struct yang_data *
570 ripd_state_neighbors_neighbor_address_get_elem(const char *xpath,
571 const void *list_entry)
572 {
573 /* TODO: implement me. */
574 return NULL;
575 }
576
577 /*
578 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/last-update
579 */
580 static struct yang_data *
581 ripd_state_neighbors_neighbor_last_update_get_elem(const char *xpath,
582 const void *list_entry)
583 {
584 /* TODO: implement me. */
585 return NULL;
586 }
587
588 /*
589 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/bad-packets-rcvd
590 */
591 static struct yang_data *
592 ripd_state_neighbors_neighbor_bad_packets_rcvd_get_elem(const char *xpath,
593 const void *list_entry)
594 {
595 /* TODO: implement me. */
596 return NULL;
597 }
598
599 /*
600 * XPath: /frr-ripd:ripd/state/neighbors/neighbor/bad-routes-rcvd
601 */
602 static struct yang_data *
603 ripd_state_neighbors_neighbor_bad_routes_rcvd_get_elem(const char *xpath,
604 const void *list_entry)
605 {
606 /* TODO: implement me. */
607 return NULL;
608 }
609
610 /*
611 * XPath: /frr-ripd:ripd/state/routes/route
612 */
613 static const void *ripd_state_routes_route_get_next(const char *xpath,
614 const void *list_entry)
615 {
616 /* TODO: implement me. */
617 return NULL;
618 }
619
620 static int ripd_state_routes_route_get_keys(const void *list_entry,
621 struct yang_list_keys *keys)
622 {
623 /* TODO: implement me. */
624 return NB_OK;
625 }
626
627 static const void *
628 ripd_state_routes_route_lookup_entry(const struct yang_list_keys *keys)
629 {
630 /* TODO: implement me. */
631 return NULL;
632 }
633
634 /*
635 * XPath: /frr-ripd:ripd/state/routes/route/prefix
636 */
637 static struct yang_data *
638 ripd_state_routes_route_prefix_get_elem(const char *xpath,
639 const void *list_entry)
640 {
641 /* TODO: implement me. */
642 return NULL;
643 }
644
645 /*
646 * XPath: /frr-ripd:ripd/state/routes/route/next-hop
647 */
648 static struct yang_data *
649 ripd_state_routes_route_next_hop_get_elem(const char *xpath,
650 const void *list_entry)
651 {
652 /* TODO: implement me. */
653 return NULL;
654 }
655
656 /*
657 * XPath: /frr-ripd:ripd/state/routes/route/interface
658 */
659 static struct yang_data *
660 ripd_state_routes_route_interface_get_elem(const char *xpath,
661 const void *list_entry)
662 {
663 /* TODO: implement me. */
664 return NULL;
665 }
666
667 /*
668 * XPath: /frr-ripd:ripd/state/routes/route/metric
669 */
670 static struct yang_data *
671 ripd_state_routes_route_metric_get_elem(const char *xpath,
672 const void *list_entry)
673 {
674 /* TODO: implement me. */
675 return NULL;
676 }
677
678 /*
679 * XPath: /frr-ripd:clear-rip-route
680 */
681 static int clear_rip_route_rpc(const char *xpath, const struct list *input,
682 struct list *output)
683 {
684 /* TODO: implement me. */
685 return NB_OK;
686 }
687
688 /* clang-format off */
689 const struct frr_yang_module_info frr_ripd_info = {
690 .name = "frr-ripd",
691 .nodes = {
692 {
693 .xpath = "/frr-ripd:ripd/instance",
694 .cbs.create = ripd_instance_create,
695 .cbs.delete = ripd_instance_delete,
696 },
697 {
698 .xpath = "/frr-ripd:ripd/instance/allow-ecmp",
699 .cbs.modify = ripd_instance_allow_ecmp_modify,
700 },
701 {
702 .xpath = "/frr-ripd:ripd/instance/default-information-originate",
703 .cbs.modify = ripd_instance_default_information_originate_modify,
704 },
705 {
706 .xpath = "/frr-ripd:ripd/instance/default-metric",
707 .cbs.modify = ripd_instance_default_metric_modify,
708 },
709 {
710 .xpath = "/frr-ripd:ripd/instance/distance/default",
711 .cbs.modify = ripd_instance_distance_default_modify,
712 },
713 {
714 .xpath = "/frr-ripd:ripd/instance/distance/source",
715 .cbs.create = ripd_instance_distance_source_create,
716 .cbs.delete = ripd_instance_distance_source_delete,
717 },
718 {
719 .xpath = "/frr-ripd:ripd/instance/distance/source/distance",
720 .cbs.modify = ripd_instance_distance_source_distance_modify,
721 },
722 {
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,
726 },
727 {
728 .xpath = "/frr-ripd:ripd/instance/explicit-neighbor",
729 .cbs.create = ripd_instance_explicit_neighbor_create,
730 .cbs.delete = ripd_instance_explicit_neighbor_delete,
731 },
732 {
733 .xpath = "/frr-ripd:ripd/instance/network",
734 .cbs.create = ripd_instance_network_create,
735 .cbs.delete = ripd_instance_network_delete,
736 },
737 {
738 .xpath = "/frr-ripd:ripd/instance/interface",
739 .cbs.create = ripd_instance_interface_create,
740 .cbs.delete = ripd_instance_interface_delete,
741 },
742 {
743 .xpath = "/frr-ripd:ripd/instance/offset-list",
744 .cbs.create = ripd_instance_offset_list_create,
745 .cbs.delete = ripd_instance_offset_list_delete,
746 },
747 {
748 .xpath = "/frr-ripd:ripd/instance/offset-list/access-list",
749 .cbs.modify = ripd_instance_offset_list_access_list_modify,
750 },
751 {
752 .xpath = "/frr-ripd:ripd/instance/offset-list/metric",
753 .cbs.modify = ripd_instance_offset_list_metric_modify,
754 },
755 {
756 .xpath = "/frr-ripd:ripd/instance/passive-default",
757 .cbs.modify = ripd_instance_passive_default_modify,
758 },
759 {
760 .xpath = "/frr-ripd:ripd/instance/passive-interface",
761 .cbs.create = ripd_instance_passive_interface_create,
762 .cbs.delete = ripd_instance_passive_interface_delete,
763 },
764 {
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,
768 },
769 {
770 .xpath = "/frr-ripd:ripd/instance/redistribute",
771 .cbs.create = ripd_instance_redistribute_create,
772 .cbs.delete = ripd_instance_redistribute_delete,
773 },
774 {
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,
778 },
779 {
780 .xpath = "/frr-ripd:ripd/instance/redistribute/metric",
781 .cbs.modify = ripd_instance_redistribute_metric_modify,
782 .cbs.delete = ripd_instance_redistribute_metric_delete,
783 },
784 {
785 .xpath = "/frr-ripd:ripd/instance/static-route",
786 .cbs.create = ripd_instance_static_route_create,
787 .cbs.delete = ripd_instance_static_route_delete,
788 },
789 {
790 .xpath = "/frr-ripd:ripd/instance/timers/flush-interval",
791 .cbs.modify = ripd_instance_timers_flush_interval_modify,
792 },
793 {
794 .xpath = "/frr-ripd:ripd/instance/timers/holddown-interval",
795 .cbs.modify = ripd_instance_timers_holddown_interval_modify,
796 },
797 {
798 .xpath = "/frr-ripd:ripd/instance/timers/update-interval",
799 .cbs.modify = ripd_instance_timers_update_interval_modify,
800 },
801 {
802 .xpath = "/frr-ripd:ripd/instance/version/receive",
803 .cbs.modify = ripd_instance_version_receive_modify,
804 },
805 {
806 .xpath = "/frr-ripd:ripd/instance/version/send",
807 .cbs.modify = ripd_instance_version_send_modify,
808 },
809 {
810 .xpath = "/frr-interface:lib/interface/frr-ripd:rip/split-horizon",
811 .cbs.modify = lib_interface_rip_split_horizon_modify,
812 },
813 {
814 .xpath = "/frr-interface:lib/interface/frr-ripd:rip/v2-broadcast",
815 .cbs.modify = lib_interface_rip_v2_broadcast_modify,
816 },
817 {
818 .xpath = "/frr-interface:lib/interface/frr-ripd:rip/version-receive",
819 .cbs.modify = lib_interface_rip_version_receive_modify,
820 },
821 {
822 .xpath = "/frr-interface:lib/interface/frr-ripd:rip/version-send",
823 .cbs.modify = lib_interface_rip_version_send_modify,
824 },
825 {
826 .xpath = "/frr-interface:lib/interface/frr-ripd:rip/authentication-scheme/mode",
827 .cbs.modify = lib_interface_rip_authentication_scheme_mode_modify,
828 },
829 {
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,
833 },
834 {
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,
838 },
839 {
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,
843 },
844 {
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,
849 },
850 {
851 .xpath = "/frr-ripd:ripd/state/neighbors/neighbor/address",
852 .cbs.get_elem = ripd_state_neighbors_neighbor_address_get_elem,
853 },
854 {
855 .xpath = "/frr-ripd:ripd/state/neighbors/neighbor/last-update",
856 .cbs.get_elem = ripd_state_neighbors_neighbor_last_update_get_elem,
857 },
858 {
859 .xpath = "/frr-ripd:ripd/state/neighbors/neighbor/bad-packets-rcvd",
860 .cbs.get_elem = ripd_state_neighbors_neighbor_bad_packets_rcvd_get_elem,
861 },
862 {
863 .xpath = "/frr-ripd:ripd/state/neighbors/neighbor/bad-routes-rcvd",
864 .cbs.get_elem = ripd_state_neighbors_neighbor_bad_routes_rcvd_get_elem,
865 },
866 {
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,
871 },
872 {
873 .xpath = "/frr-ripd:ripd/state/routes/route/prefix",
874 .cbs.get_elem = ripd_state_routes_route_prefix_get_elem,
875 },
876 {
877 .xpath = "/frr-ripd:ripd/state/routes/route/next-hop",
878 .cbs.get_elem = ripd_state_routes_route_next_hop_get_elem,
879 },
880 {
881 .xpath = "/frr-ripd:ripd/state/routes/route/interface",
882 .cbs.get_elem = ripd_state_routes_route_interface_get_elem,
883 },
884 {
885 .xpath = "/frr-ripd:ripd/state/routes/route/metric",
886 .cbs.get_elem = ripd_state_routes_route_metric_get_elem,
887 },
888 {
889 .xpath = "/frr-ripd:clear-rip-route",
890 .cbs.rpc = clear_rip_route_rpc,
891 },
892 {
893 .xpath = NULL,
894 },
895 }
896 };