summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRenato Westphal <renato@opensourcerouting.org>2021-10-11 12:19:09 -0300
committerGitHub <noreply@github.com>2021-10-11 12:19:09 -0300
commitd7374bd3b1be5edfc20534ae5a301a0160c017bf (patch)
tree2cc7a8c56091f8010cd688748960969645b1e96e
parente2c3eaddd579bccb14822ee83af4322cf99807af (diff)
parentad7e12b0d9ccb1dfea1c3fba7d2355480bf6239b (diff)
Merge pull request #9788 from idryzhov/ospf6-clear-interface-vrf
ospf6d: add missing vrf parameter to "clear ipv6 ospf6 interface"
-rw-r--r--doc/user/ospf6d.rst5
-rw-r--r--ospf6d/ospf6_interface.c30
2 files changed, 26 insertions, 9 deletions
diff --git a/doc/user/ospf6d.rst b/doc/user/ospf6d.rst
index 093c5382cf..0b718fcdf2 100644
--- a/doc/user/ospf6d.rst
+++ b/doc/user/ospf6d.rst
@@ -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
====================================
diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c
index a3eb1445f1..9d73740819 100644
--- a/ospf6d/ospf6_interface.c
+++ b/ospf6d/ospf6_interface.c
@@ -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;