2 * Copyright (C) 1998 Kunihiro Ishiguro
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
30 #include "northbound.h"
33 #include "ripngd/ripngd.h"
34 #include "ripngd/ripng_cli.h"
37 * XPath: /frr-ripngd:ripngd/instance
39 static int ripngd_instance_create(enum nb_event event
,
40 const struct lyd_node
*dnode
,
41 union nb_resource
*resource
)
43 /* TODO: implement me. */
47 static int ripngd_instance_delete(enum nb_event event
,
48 const struct lyd_node
*dnode
)
50 /* TODO: implement me. */
55 * XPath: /frr-ripngd:ripngd/instance/allow-ecmp
57 static int ripngd_instance_allow_ecmp_modify(enum nb_event event
,
58 const struct lyd_node
*dnode
,
59 union nb_resource
*resource
)
61 /* TODO: implement me. */
66 * XPath: /frr-ripngd:ripngd/instance/default-information-originate
68 static int ripngd_instance_default_information_originate_modify(
69 enum nb_event event
, const struct lyd_node
*dnode
,
70 union nb_resource
*resource
)
72 /* TODO: implement me. */
77 * XPath: /frr-ripngd:ripngd/instance/default-metric
79 static int ripngd_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-ripngd:ripngd/instance/network
90 static int ripngd_instance_network_create(enum nb_event event
,
91 const struct lyd_node
*dnode
,
92 union nb_resource
*resource
)
94 /* TODO: implement me. */
98 static int ripngd_instance_network_delete(enum nb_event event
,
99 const struct lyd_node
*dnode
)
101 /* TODO: implement me. */
106 * XPath: /frr-ripngd:ripngd/instance/interface
108 static int ripngd_instance_interface_create(enum nb_event event
,
109 const struct lyd_node
*dnode
,
110 union nb_resource
*resource
)
112 /* TODO: implement me. */
116 static int ripngd_instance_interface_delete(enum nb_event event
,
117 const struct lyd_node
*dnode
)
119 /* TODO: implement me. */
124 * XPath: /frr-ripngd:ripngd/instance/offset-list
126 static int ripngd_instance_offset_list_create(enum nb_event event
,
127 const struct lyd_node
*dnode
,
128 union nb_resource
*resource
)
130 /* TODO: implement me. */
134 static int ripngd_instance_offset_list_delete(enum nb_event event
,
135 const struct lyd_node
*dnode
)
137 /* TODO: implement me. */
142 * XPath: /frr-ripngd:ripngd/instance/offset-list/access-list
145 ripngd_instance_offset_list_access_list_modify(enum nb_event event
,
146 const struct lyd_node
*dnode
,
147 union nb_resource
*resource
)
149 /* TODO: implement me. */
154 * XPath: /frr-ripngd:ripngd/instance/offset-list/metric
157 ripngd_instance_offset_list_metric_modify(enum nb_event event
,
158 const struct lyd_node
*dnode
,
159 union nb_resource
*resource
)
161 /* TODO: implement me. */
166 * XPath: /frr-ripngd:ripngd/instance/passive-interface
169 ripngd_instance_passive_interface_create(enum nb_event event
,
170 const struct lyd_node
*dnode
,
171 union nb_resource
*resource
)
173 /* TODO: implement me. */
178 ripngd_instance_passive_interface_delete(enum nb_event event
,
179 const struct lyd_node
*dnode
)
181 /* TODO: implement me. */
186 * XPath: /frr-ripngd:ripngd/instance/redistribute
188 static int ripngd_instance_redistribute_create(enum nb_event event
,
189 const struct lyd_node
*dnode
,
190 union nb_resource
*resource
)
192 /* TODO: implement me. */
196 static int ripngd_instance_redistribute_delete(enum nb_event event
,
197 const struct lyd_node
*dnode
)
199 /* TODO: implement me. */
204 * XPath: /frr-ripngd:ripngd/instance/redistribute/route-map
207 ripngd_instance_redistribute_route_map_modify(enum nb_event event
,
208 const struct lyd_node
*dnode
,
209 union nb_resource
*resource
)
211 /* TODO: implement me. */
216 ripngd_instance_redistribute_route_map_delete(enum nb_event event
,
217 const struct lyd_node
*dnode
)
219 /* TODO: implement me. */
224 * XPath: /frr-ripngd:ripngd/instance/redistribute/metric
227 ripngd_instance_redistribute_metric_modify(enum nb_event event
,
228 const struct lyd_node
*dnode
,
229 union nb_resource
*resource
)
231 /* TODO: implement me. */
236 ripngd_instance_redistribute_metric_delete(enum nb_event event
,
237 const struct lyd_node
*dnode
)
239 /* TODO: implement me. */
244 * XPath: /frr-ripngd:ripngd/instance/static-route
246 static int ripngd_instance_static_route_create(enum nb_event event
,
247 const struct lyd_node
*dnode
,
248 union nb_resource
*resource
)
250 /* TODO: implement me. */
254 static int ripngd_instance_static_route_delete(enum nb_event event
,
255 const struct lyd_node
*dnode
)
257 /* TODO: implement me. */
262 * XPath: /frr-ripngd:ripngd/instance/aggregate-address
265 ripngd_instance_aggregate_address_create(enum nb_event event
,
266 const struct lyd_node
*dnode
,
267 union nb_resource
*resource
)
269 /* TODO: implement me. */
274 ripngd_instance_aggregate_address_delete(enum nb_event event
,
275 const struct lyd_node
*dnode
)
277 /* TODO: implement me. */
282 * XPath: /frr-ripngd:ripngd/instance/timers/flush-interval
285 ripngd_instance_timers_flush_interval_modify(enum nb_event event
,
286 const struct lyd_node
*dnode
,
287 union nb_resource
*resource
)
289 /* TODO: implement me. */
294 * XPath: /frr-ripngd:ripngd/instance/timers/holddown-interval
297 ripngd_instance_timers_holddown_interval_modify(enum nb_event event
,
298 const struct lyd_node
*dnode
,
299 union nb_resource
*resource
)
301 /* TODO: implement me. */
306 * XPath: /frr-ripngd:ripngd/instance/timers/update-interval
309 ripngd_instance_timers_update_interval_modify(enum nb_event event
,
310 const struct lyd_node
*dnode
,
311 union nb_resource
*resource
)
313 /* TODO: implement me. */
318 * XPath: /frr-ripngd:ripngd/state/neighbors/neighbor
321 ripngd_state_neighbors_neighbor_get_next(const void *parent_list_entry
,
322 const void *list_entry
)
324 /* TODO: implement me. */
328 static int ripngd_state_neighbors_neighbor_get_keys(const void *list_entry
,
329 struct yang_list_keys
*keys
)
331 /* TODO: implement me. */
336 ripngd_state_neighbors_neighbor_lookup_entry(const void *parent_list_entry
,
337 const struct yang_list_keys
*keys
)
339 /* TODO: implement me. */
344 * XPath: /frr-ripngd:ripngd/state/neighbors/neighbor/address
346 static struct yang_data
*
347 ripngd_state_neighbors_neighbor_address_get_elem(const char *xpath
,
348 const void *list_entry
)
350 /* TODO: implement me. */
355 * XPath: /frr-ripngd:ripngd/state/neighbors/neighbor/last-update
357 static struct yang_data
*
358 ripngd_state_neighbors_neighbor_last_update_get_elem(const char *xpath
,
359 const void *list_entry
)
361 /* TODO: implement me. */
366 * XPath: /frr-ripngd:ripngd/state/neighbors/neighbor/bad-packets-rcvd
368 static struct yang_data
*
369 ripngd_state_neighbors_neighbor_bad_packets_rcvd_get_elem(
370 const char *xpath
, const void *list_entry
)
372 /* TODO: implement me. */
377 * XPath: /frr-ripngd:ripngd/state/neighbors/neighbor/bad-routes-rcvd
379 static struct yang_data
*
380 ripngd_state_neighbors_neighbor_bad_routes_rcvd_get_elem(const char *xpath
,
381 const void *list_entry
)
383 /* TODO: implement me. */
388 * XPath: /frr-ripngd:ripngd/state/routes/route
391 ripngd_state_routes_route_get_next(const void *parent_list_entry
,
392 const void *list_entry
)
394 /* TODO: implement me. */
398 static int ripngd_state_routes_route_get_keys(const void *list_entry
,
399 struct yang_list_keys
*keys
)
401 /* TODO: implement me. */
406 ripngd_state_routes_route_lookup_entry(const void *parent_list_entry
,
407 const struct yang_list_keys
*keys
)
409 /* TODO: implement me. */
414 * XPath: /frr-ripngd:ripngd/state/routes/route/prefix
416 static struct yang_data
*
417 ripngd_state_routes_route_prefix_get_elem(const char *xpath
,
418 const void *list_entry
)
420 /* TODO: implement me. */
425 * XPath: /frr-ripngd:ripngd/state/routes/route/next-hop
427 static struct yang_data
*
428 ripngd_state_routes_route_next_hop_get_elem(const char *xpath
,
429 const void *list_entry
)
431 /* TODO: implement me. */
436 * XPath: /frr-ripngd:ripngd/state/routes/route/interface
438 static struct yang_data
*
439 ripngd_state_routes_route_interface_get_elem(const char *xpath
,
440 const void *list_entry
)
442 /* TODO: implement me. */
447 * XPath: /frr-ripngd:ripngd/state/routes/route/metric
449 static struct yang_data
*
450 ripngd_state_routes_route_metric_get_elem(const char *xpath
,
451 const void *list_entry
)
453 /* TODO: implement me. */
458 * XPath: /frr-ripngd:clear-ripng-route
460 static int clear_ripng_route_rpc(const char *xpath
, const struct list
*input
,
463 /* TODO: implement me. */
468 * XPath: /frr-interface:lib/interface/frr-ripngd:ripng/split-horizon
471 lib_interface_ripng_split_horizon_modify(enum nb_event event
,
472 const struct lyd_node
*dnode
,
473 union nb_resource
*resource
)
475 /* TODO: implement me. */
479 /* clang-format off */
480 const struct frr_yang_module_info frr_ripngd_info
= {
481 .name
= "frr-ripngd",
484 .xpath
= "/frr-ripngd:ripngd/instance",
485 .cbs
.create
= ripngd_instance_create
,
486 .cbs
.delete = ripngd_instance_delete
,
489 .xpath
= "/frr-ripngd:ripngd/instance/allow-ecmp",
490 .cbs
.modify
= ripngd_instance_allow_ecmp_modify
,
493 .xpath
= "/frr-ripngd:ripngd/instance/default-information-originate",
494 .cbs
.modify
= ripngd_instance_default_information_originate_modify
,
497 .xpath
= "/frr-ripngd:ripngd/instance/default-metric",
498 .cbs
.modify
= ripngd_instance_default_metric_modify
,
501 .xpath
= "/frr-ripngd:ripngd/instance/network",
502 .cbs
.create
= ripngd_instance_network_create
,
503 .cbs
.delete = ripngd_instance_network_delete
,
506 .xpath
= "/frr-ripngd:ripngd/instance/interface",
507 .cbs
.create
= ripngd_instance_interface_create
,
508 .cbs
.delete = ripngd_instance_interface_delete
,
511 .xpath
= "/frr-ripngd:ripngd/instance/offset-list",
512 .cbs
.create
= ripngd_instance_offset_list_create
,
513 .cbs
.delete = ripngd_instance_offset_list_delete
,
516 .xpath
= "/frr-ripngd:ripngd/instance/offset-list/access-list",
517 .cbs
.modify
= ripngd_instance_offset_list_access_list_modify
,
520 .xpath
= "/frr-ripngd:ripngd/instance/offset-list/metric",
521 .cbs
.modify
= ripngd_instance_offset_list_metric_modify
,
524 .xpath
= "/frr-ripngd:ripngd/instance/passive-interface",
525 .cbs
.create
= ripngd_instance_passive_interface_create
,
526 .cbs
.delete = ripngd_instance_passive_interface_delete
,
529 .xpath
= "/frr-ripngd:ripngd/instance/redistribute",
530 .cbs
.create
= ripngd_instance_redistribute_create
,
531 .cbs
.delete = ripngd_instance_redistribute_delete
,
534 .xpath
= "/frr-ripngd:ripngd/instance/redistribute/route-map",
535 .cbs
.modify
= ripngd_instance_redistribute_route_map_modify
,
536 .cbs
.delete = ripngd_instance_redistribute_route_map_delete
,
539 .xpath
= "/frr-ripngd:ripngd/instance/redistribute/metric",
540 .cbs
.modify
= ripngd_instance_redistribute_metric_modify
,
541 .cbs
.delete = ripngd_instance_redistribute_metric_delete
,
544 .xpath
= "/frr-ripngd:ripngd/instance/static-route",
545 .cbs
.create
= ripngd_instance_static_route_create
,
546 .cbs
.delete = ripngd_instance_static_route_delete
,
549 .xpath
= "/frr-ripngd:ripngd/instance/aggregate-address",
550 .cbs
.create
= ripngd_instance_aggregate_address_create
,
551 .cbs
.delete = ripngd_instance_aggregate_address_delete
,
554 .xpath
= "/frr-ripngd:ripngd/instance/timers/flush-interval",
555 .cbs
.modify
= ripngd_instance_timers_flush_interval_modify
,
558 .xpath
= "/frr-ripngd:ripngd/instance/timers/holddown-interval",
559 .cbs
.modify
= ripngd_instance_timers_holddown_interval_modify
,
562 .xpath
= "/frr-ripngd:ripngd/instance/timers/update-interval",
563 .cbs
.modify
= ripngd_instance_timers_update_interval_modify
,
566 .xpath
= "/frr-ripngd:ripngd/state/neighbors/neighbor",
567 .cbs
.get_next
= ripngd_state_neighbors_neighbor_get_next
,
568 .cbs
.get_keys
= ripngd_state_neighbors_neighbor_get_keys
,
569 .cbs
.lookup_entry
= ripngd_state_neighbors_neighbor_lookup_entry
,
572 .xpath
= "/frr-ripngd:ripngd/state/neighbors/neighbor/address",
573 .cbs
.get_elem
= ripngd_state_neighbors_neighbor_address_get_elem
,
576 .xpath
= "/frr-ripngd:ripngd/state/neighbors/neighbor/last-update",
577 .cbs
.get_elem
= ripngd_state_neighbors_neighbor_last_update_get_elem
,
580 .xpath
= "/frr-ripngd:ripngd/state/neighbors/neighbor/bad-packets-rcvd",
581 .cbs
.get_elem
= ripngd_state_neighbors_neighbor_bad_packets_rcvd_get_elem
,
584 .xpath
= "/frr-ripngd:ripngd/state/neighbors/neighbor/bad-routes-rcvd",
585 .cbs
.get_elem
= ripngd_state_neighbors_neighbor_bad_routes_rcvd_get_elem
,
588 .xpath
= "/frr-ripngd:ripngd/state/routes/route",
589 .cbs
.get_next
= ripngd_state_routes_route_get_next
,
590 .cbs
.get_keys
= ripngd_state_routes_route_get_keys
,
591 .cbs
.lookup_entry
= ripngd_state_routes_route_lookup_entry
,
594 .xpath
= "/frr-ripngd:ripngd/state/routes/route/prefix",
595 .cbs
.get_elem
= ripngd_state_routes_route_prefix_get_elem
,
598 .xpath
= "/frr-ripngd:ripngd/state/routes/route/next-hop",
599 .cbs
.get_elem
= ripngd_state_routes_route_next_hop_get_elem
,
602 .xpath
= "/frr-ripngd:ripngd/state/routes/route/interface",
603 .cbs
.get_elem
= ripngd_state_routes_route_interface_get_elem
,
606 .xpath
= "/frr-ripngd:ripngd/state/routes/route/metric",
607 .cbs
.get_elem
= ripngd_state_routes_route_metric_get_elem
,
610 .xpath
= "/frr-ripngd:clear-ripng-route",
611 .cbs
.rpc
= clear_ripng_route_rpc
,
614 .xpath
= "/frr-interface:lib/interface/frr-ripngd:ripng/split-horizon",
615 .cbs
.modify
= lib_interface_ripng_split_horizon_modify
,