]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ripngd: retrofit the 'route' command to the new northbound model
authorRenato Westphal <renato@opensourcerouting.org>
Thu, 29 Nov 2018 12:56:09 +0000 (10:56 -0200)
committerRenato Westphal <renato@opensourcerouting.org>
Mon, 3 Dec 2018 15:47:58 +0000 (13:47 -0200)
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 <renato@opensourcerouting.org>
ripngd/ripng_cli.c
ripngd/ripng_cli.h
ripngd/ripng_northbound.c
ripngd/ripngd.c
ripngd/ripngd.h

index f7c4514d046e221278121e3f09377bb747328475..876c537aff64ad7e1f7c9736fe70db941a8db211 100644 (file)
@@ -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);
 }
index dd782423f38ed1df3b27ec1e00976849fd2c124d..def7f2f6f5724b4a055879392a51d0d253395c59 100644 (file)
@@ -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_ */
index 5c83b0990bc16bad0e927348f9b51bd56b79a9c0..07e000c7e223b05816bb20fa4f97835224115a3e 100644 (file)
@@ -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",
index 7cb18c5f68340f1620fae7b95c4350556a0f485f..77e84911545d9341e0db8b82c1e3aadcab71c837 100644 (file)
@@ -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);
 
index f18c9758e9807987764e8235eed6aa9ba4ca27c1..82aba1f7533ca00a2cf7a93a851be2d6a6799296 100644 (file)
@@ -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;