From: Renato Westphal Date: Thu, 29 Nov 2018 12:56:09 +0000 (-0200) Subject: ripngd: retrofit the 'route' command to the new northbound model X-Git-Tag: frr-7.1-dev~95^2~10 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=521d1b1283f50b15bd5dd6b57c7d22f2078058b9;p=matthieu%2Ffrr.git ripngd: retrofit the 'route' command to the new northbound model Trivial conversion. Remove the ripng->route routing table and associated code because this variable was used only to show the running configuration. Signed-off-by: Renato Westphal --- diff --git a/ripngd/ripng_cli.c b/ripngd/ripng_cli.c index f7c4514d04..876c537aff 100644 --- a/ripngd/ripng_cli.c +++ b/ripngd/ripng_cli.c @@ -312,6 +312,28 @@ void cli_show_ripng_redistribute(struct vty *vty, struct lyd_node *dnode, vty_out(vty, "\n"); } +/* + * XPath: /frr-ripngd:ripngd/instance/static-route + */ +DEFPY (ripng_route, + ripng_route_cmd, + "[no] route X:X::X:X/M", + NO_STR + "Static route setup\n" + "Set static RIPng route announcement\n") +{ + nb_cli_enqueue_change(vty, "./static-route", + no ? NB_OP_DELETE : NB_OP_CREATE, route_str); + + return nb_cli_apply_changes(vty, NULL); +} + +void cli_show_ripng_route(struct vty *vty, struct lyd_node *dnode, + bool show_defaults) +{ + vty_out(vty, " route %s\n", yang_dnode_get_string(dnode, NULL)); +} + void ripng_cli_init(void) { install_element(CONFIG_NODE, &router_ripng_cmd); @@ -326,4 +348,5 @@ void ripng_cli_init(void) install_element(RIPNG_NODE, &ripng_offset_list_cmd); install_element(RIPNG_NODE, &ripng_passive_interface_cmd); install_element(RIPNG_NODE, &ripng_redistribute_cmd); + install_element(RIPNG_NODE, &ripng_route_cmd); } diff --git a/ripngd/ripng_cli.h b/ripngd/ripng_cli.h index dd782423f3..def7f2f6f5 100644 --- a/ripngd/ripng_cli.h +++ b/ripngd/ripng_cli.h @@ -44,5 +44,7 @@ extern void cli_show_ripng_passive_interface(struct vty *vty, bool show_defaults); extern void cli_show_ripng_redistribute(struct vty *vty, struct lyd_node *dnode, bool show_defaults); +extern void cli_show_ripng_route(struct vty *vty, struct lyd_node *dnode, + bool show_defaults); #endif /* _FRR_RIPNG_CLI_H_ */ diff --git a/ripngd/ripng_northbound.c b/ripngd/ripng_northbound.c index 5c83b0990b..07e000c7e2 100644 --- a/ripngd/ripng_northbound.c +++ b/ripngd/ripng_northbound.c @@ -445,14 +445,33 @@ static int ripngd_instance_static_route_create(enum nb_event event, const struct lyd_node *dnode, union nb_resource *resource) { - /* TODO: implement me. */ + struct prefix_ipv6 p; + + if (event != NB_EV_APPLY) + return NB_OK; + + yang_dnode_get_ipv6p(&p, dnode, NULL); + apply_mask_ipv6(&p); + + ripng_redistribute_add(ZEBRA_ROUTE_RIPNG, RIPNG_ROUTE_STATIC, &p, 0, + NULL, 0); + return NB_OK; } static int ripngd_instance_static_route_delete(enum nb_event event, const struct lyd_node *dnode) { - /* TODO: implement me. */ + struct prefix_ipv6 p; + + if (event != NB_EV_APPLY) + return NB_OK; + + yang_dnode_get_ipv6p(&p, dnode, NULL); + apply_mask_ipv6(&p); + + ripng_redistribute_delete(ZEBRA_ROUTE_RIPNG, RIPNG_ROUTE_STATIC, &p, 0); + return NB_OK; } @@ -752,6 +771,7 @@ const struct frr_yang_module_info frr_ripngd_info = { .xpath = "/frr-ripngd:ripngd/instance/static-route", .cbs.create = ripngd_instance_static_route_create, .cbs.delete = ripngd_instance_static_route_delete, + .cbs.cli_show = cli_show_ripng_route, }, { .xpath = "/frr-ripngd:ripngd/instance/aggregate-address", diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c index 7cb18c5f68..77e8491154 100644 --- a/ripngd/ripngd.c +++ b/ripngd/ripngd.c @@ -1805,7 +1805,6 @@ int ripng_create(int socket) /* Initialize RIPng routig table. */ ripng->table = agg_table_init(); - ripng->route = agg_table_init(); ripng->aggregate = agg_table_init(); /* Make socket. */ @@ -2157,74 +2156,6 @@ DEFUN (clear_ipv6_rip, return CMD_SUCCESS; } -DEFUN (ripng_route, - ripng_route_cmd, - "route IPV6ADDR", - "Static route setup\n" - "Set static RIPng route announcement\n") -{ - int idx_ipv6addr = 1; - int ret; - struct prefix_ipv6 p; - struct agg_node *rp; - - ret = str2prefix_ipv6(argv[idx_ipv6addr]->arg, - (struct prefix_ipv6 *)&p); - if (ret <= 0) { - vty_out(vty, "Malformed address\n"); - return CMD_WARNING_CONFIG_FAILED; - } - apply_mask_ipv6(&p); - - rp = agg_node_get(ripng->route, (struct prefix *)&p); - if (rp->info) { - vty_out(vty, "There is already same static route.\n"); - agg_unlock_node(rp); - return CMD_WARNING; - } - rp->info = (void *)1; - - ripng_redistribute_add(ZEBRA_ROUTE_RIPNG, RIPNG_ROUTE_STATIC, &p, 0, - NULL, 0); - - return CMD_SUCCESS; -} - -DEFUN (no_ripng_route, - no_ripng_route_cmd, - "no route IPV6ADDR", - NO_STR - "Static route setup\n" - "Delete static RIPng route announcement\n") -{ - int idx_ipv6addr = 2; - int ret; - struct prefix_ipv6 p; - struct agg_node *rp; - - ret = str2prefix_ipv6(argv[idx_ipv6addr]->arg, - (struct prefix_ipv6 *)&p); - if (ret <= 0) { - vty_out(vty, "Malformed address\n"); - return CMD_WARNING_CONFIG_FAILED; - } - apply_mask_ipv6(&p); - - rp = agg_node_lookup(ripng->route, (struct prefix *)&p); - if (!rp) { - vty_out(vty, "Can't find static route.\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - ripng_redistribute_delete(ZEBRA_ROUTE_RIPNG, RIPNG_ROUTE_STATIC, &p, 0); - agg_unlock_node(rp); - - rp->info = NULL; - agg_unlock_node(rp); - - return CMD_SUCCESS; -} - DEFUN (ripng_aggregate_address, ripng_aggregate_address_cmd, "aggregate-address X:X::X:X/M", @@ -2530,14 +2461,6 @@ static int ripng_config_write(struct vty *vty) inet6_ntoa(rp->p.u.prefix6), rp->p.prefixlen); - /* RIPng static routes. */ - for (rp = agg_route_top(ripng->route); rp; - rp = agg_route_next(rp)) - if (rp->info != NULL) - vty_out(vty, " route %s/%d\n", - inet6_ntoa(rp->p.u.prefix6), - rp->p.prefixlen); - /* RIPng timers configuration. */ if (ripng->update_time != RIPNG_UPDATE_TIMER_DEFAULT || ripng->timeout_time != RIPNG_TIMEOUT_TIMER_DEFAULT @@ -2706,14 +2629,6 @@ void ripng_clean() ripng->sock = -1; } - /* Static RIPng route configuration. */ - for (rp = agg_route_top(ripng->route); rp; - rp = agg_route_next(rp)) - if (rp->info) { - rp->info = NULL; - agg_unlock_node(rp); - } - /* RIPng aggregated prefixes */ for (rp = agg_route_top(ripng->aggregate); rp; rp = agg_route_next(rp)) @@ -2727,7 +2642,6 @@ void ripng_clean() free(ripng->route_map[i].name); XFREE(MTYPE_ROUTE_TABLE, ripng->table); - XFREE(MTYPE_ROUTE_TABLE, ripng->route); XFREE(MTYPE_ROUTE_TABLE, ripng->aggregate); stream_free(ripng->ibuf); @@ -2841,8 +2755,6 @@ void ripng_init() install_element(ENABLE_NODE, &clear_ipv6_rip_cmd); install_default(RIPNG_NODE); - install_element(RIPNG_NODE, &ripng_route_cmd); - install_element(RIPNG_NODE, &no_ripng_route_cmd); install_element(RIPNG_NODE, &ripng_aggregate_address_cmd); install_element(RIPNG_NODE, &no_ripng_aggregate_address_cmd); diff --git a/ripngd/ripngd.h b/ripngd/ripngd.h index f18c9758e9..82aba1f753 100644 --- a/ripngd/ripngd.h +++ b/ripngd/ripngd.h @@ -111,9 +111,6 @@ struct ripng { /* RIPng routing information base. */ struct agg_table *table; - /* RIPng only static route information. */ - struct agg_table *route; - /* RIPng aggregate route information. */ struct agg_table *aggregate;