]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospf6d: add missing vrf parameter to "clear ipv6 ospf6 interface" 9788/head
authorIgor Ryzhov <iryzhov@nfware.com>
Fri, 8 Oct 2021 18:36:14 +0000 (21:36 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Fri, 8 Oct 2021 23:54:10 +0000 (02:54 +0300)
Currently, it's not possible to run this command in any VRF other than default.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
doc/user/ospf6d.rst
ospf6d/ospf6_interface.c

index 093c5382cfa07ecd514757546127efcde86c326e..0b718fcdf232e2a1efcae938cc3ef927e835c6c6 100644 (file)
@@ -85,6 +85,11 @@ OSPF6 router
    change to take effect, user can use this cli instead of restarting the
    ospf6d daemon.
 
+.. clicmd:: clear ipv6 ospf6 [vrf NAME] interface [IFNAME]
+
+   This command restarts the interface state machine for all interfaces in the
+   VRF or only for the specific interface if ``IFNAME`` is specified.
+
 ASBR Summarisation Support in OSPFv3
 ====================================
 
index a3eb1445f187a0d6b564835db23124fbfcf6fb6a..9d73740819a4fac95be488f9b3ddf2e8614c5945 100644 (file)
@@ -2739,27 +2739,39 @@ void ospf6_interface_clear(struct interface *ifp)
 /* Clear interface */
 DEFUN (clear_ipv6_ospf6_interface,
        clear_ipv6_ospf6_interface_cmd,
-       "clear ipv6 ospf6 interface [IFNAME]",
+       "clear ipv6 ospf6 [vrf NAME] interface [IFNAME]",
        CLEAR_STR
        IP6_STR
        OSPF6_STR
+       VRF_CMD_HELP_STR
        INTERFACE_STR
        IFNAME_STR
        )
 {
-       struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
+       struct vrf *vrf;
+       int idx_vrf = 3;
        int idx_ifname = 4;
        struct interface *ifp;
+       const char *vrf_name;
 
-       if (argc == 4) /* Clear all the ospfv3 interfaces. */
-       {
+       if (argv_find(argv, argc, "vrf", &idx_vrf))
+               vrf_name = argv[idx_vrf + 1]->arg;
+       else
+               vrf_name = VRF_DEFAULT_NAME;
+       vrf = vrf_lookup_by_name(vrf_name);
+       if (!vrf) {
+               vty_out(vty, "%% VRF %s not found\n", vrf_name);
+               return CMD_WARNING;
+       }
+
+       if (!argv_find(argv, argc, "IFNAME", &idx_ifname)) {
+               /* Clear all the ospfv3 interfaces. */
                FOR_ALL_INTERFACES (vrf, ifp)
                        ospf6_interface_clear(ifp);
-       } else /* Interface name is specified. */
-       {
-               if ((ifp = if_lookup_by_name(argv[idx_ifname]->arg,
-                                            VRF_DEFAULT))
-                   == NULL) {
+       } else {
+               /* Interface name is specified. */
+               ifp = if_lookup_by_name_vrf(argv[idx_ifname]->arg, vrf);
+               if (!ifp) {
                        vty_out(vty, "No such Interface: %s\n",
                                argv[idx_ifname]->arg);
                        return CMD_WARNING;