diff options
Diffstat (limited to 'ospf6d/ospf6_top.c')
| -rw-r--r-- | ospf6d/ospf6_top.c | 49 |
1 files changed, 37 insertions, 12 deletions
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c index 33b5dd1960..97b3bc096b 100644 --- a/ospf6d/ospf6_top.c +++ b/ospf6d/ospf6_top.c @@ -410,6 +410,8 @@ static struct ospf6 *ospf6_create(const char *name) struct ospf6 *ospf6_instance_create(const char *name) { struct ospf6 *ospf6; + struct vrf *vrf; + struct interface *ifp; ospf6 = ospf6_create(name); if (DFLT_OSPF6_LOG_ADJACENCY_CHANGES) @@ -417,6 +419,13 @@ struct ospf6 *ospf6_instance_create(const char *name) if (ospf6->router_id == 0) ospf6_router_id_update(ospf6); ospf6_add(ospf6); + if (ospf6->vrf_id != VRF_UNKNOWN) { + vrf = vrf_lookup_by_id(ospf6->vrf_id); + FOR_ALL_INTERFACES (vrf, ifp) { + if (ifp->info) + ospf6_interface_start(ifp->info); + } + } if (ospf6->fd < 0) return ospf6; @@ -867,7 +876,7 @@ DEFUN (no_ospf6_distance_ospf6, return CMD_SUCCESS; } -DEFUN (ospf6_interface_area, +DEFUN_HIDDEN (ospf6_interface_area, ospf6_interface_area_cmd, "interface IFNAME area <A.B.C.D|(0-4294967295)>", "Enable routing on an IPv6 interface\n" @@ -885,6 +894,13 @@ DEFUN (ospf6_interface_area, struct interface *ifp; vrf_id_t vrf_id = VRF_DEFAULT; int ipv6_count = 0; + uint32_t area_id; + int format; + + vty_out(vty, + "This command is deprecated, because it is not VRF-aware.\n"); + vty_out(vty, + "Please, use \"ipv6 ospf6 area\" on an interface instead.\n"); if (ospf6->vrf_id != VRF_UNKNOWN) vrf_id = ospf6->vrf_id; @@ -917,8 +933,17 @@ DEFUN (ospf6_interface_area, return CMD_WARNING_CONFIG_FAILED; } - /* parse Area-ID */ - OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, oa, ospf6); + if (str2area_id(argv[idx_ipv4]->arg, &area_id, &format)) { + vty_out(vty, "Malformed Area-ID: %s\n", argv[idx_ipv4]->arg); + return CMD_WARNING_CONFIG_FAILED; + } + + oi->area_id = area_id; + oi->area_id_format = format; + + oa = ospf6_area_lookup(area_id, ospf6); + if (oa == NULL) + oa = ospf6_area_create(area_id, ospf6, format); /* attach interface to area */ listnode_add(oa->if_list, oi); /* sort ?? */ @@ -942,7 +967,7 @@ DEFUN (ospf6_interface_area, return CMD_SUCCESS; } -DEFUN (no_ospf6_interface_area, +DEFUN_HIDDEN (no_ospf6_interface_area, no_ospf6_interface_area_cmd, "no interface IFNAME area <A.B.C.D|(0-4294967295)>", NO_STR @@ -962,6 +987,11 @@ DEFUN (no_ospf6_interface_area, uint32_t area_id; vrf_id_t vrf_id = VRF_DEFAULT; + vty_out(vty, + "This command is deprecated, because it is not VRF-aware.\n"); + vty_out(vty, + "Please, use \"no ipv6 ospf6 area\" on an interface instead.\n"); + if (ospf6->vrf_id != VRF_UNKNOWN) vrf_id = ospf6->vrf_id; @@ -1008,6 +1038,9 @@ DEFUN (no_ospf6_interface_area, ospf6_abr_disable_area(oa); } + oi->area_id = 0; + oi->area_id_format = OSPF6_AREA_FMT_UNSET; + return CMD_SUCCESS; } @@ -1585,9 +1618,6 @@ static int ospf6_distance_config_write(struct vty *vty, struct ospf6 *ospf6) /* OSPF configuration write function. */ static int config_write_ospf6(struct vty *vty) { - struct listnode *j, *k; - struct ospf6_area *oa; - struct ospf6_interface *oi; struct ospf6 *ospf6; struct listnode *node, *nnode; @@ -1638,11 +1668,6 @@ static int config_write_ospf6(struct vty *vty) ospf6_distance_config_write(vty, ospf6); ospf6_distribute_config_write(vty, ospf6); - for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, j, oa)) { - for (ALL_LIST_ELEMENTS_RO(oa->if_list, k, oi)) - vty_out(vty, " interface %s area %s\n", - oi->interface->name, oa->name); - } vty_out(vty, "!\n"); } return 0; |
