Merge pull request #6700 from deastoe/ospf6-interface-decimal-area

This commit is contained in:
David Lamparter 2020-07-21 13:42:59 +02:00 committed by GitHub
commit a5d68ac07a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 34 deletions

View File

@ -20,8 +20,11 @@ OSPF6 router
Set router's Router-ID. Set router's Router-ID.
.. index:: interface IFNAME area AREA .. index:: interface IFNAME area (0-4294967295)
.. clicmd:: interface IFNAME area AREA .. clicmd:: interface IFNAME area (0-4294967295)
.. index:: interface IFNAME area A.B.C.D
.. clicmd:: interface IFNAME area A.B.C.D
Bind interface to specified area, and start sending OSPF packets. `area` can Bind interface to specified area, and start sending OSPF packets. `area` can
be specified as 0. be specified as 0.

View File

@ -379,22 +379,6 @@ void ospf6_area_show(struct vty *vty, struct ospf6_area *oa)
vty_out(vty, "SPF has not been run\n"); vty_out(vty, "SPF has not been run\n");
} }
#define OSPF6_CMD_AREA_GET(str, oa) \
{ \
char *ep; \
uint32_t area_id = htonl(strtoul(str, &ep, 10)); \
if (*ep && inet_pton(AF_INET, str, &area_id) != 1) { \
vty_out(vty, "Malformed Area-ID: %s\n", str); \
return CMD_SUCCESS; \
} \
int format = !*ep ? OSPF6_AREA_FMT_DECIMAL \
: OSPF6_AREA_FMT_DOTTEDQUAD; \
oa = ospf6_area_lookup(area_id, ospf6); \
if (oa == NULL) \
oa = ospf6_area_create(area_id, ospf6, format); \
}
DEFUN (area_range, DEFUN (area_range,
area_range_cmd, area_range_cmd,
"area <A.B.C.D|(0-4294967295)> range X:X::X:X/M [<advertise|not-advertise|cost (0-16777215)>]", "area <A.B.C.D|(0-4294967295)> range X:X::X:X/M [<advertise|not-advertise|cost (0-16777215)>]",

View File

@ -117,6 +117,21 @@ struct ospf6_area {
#define IS_AREA_TRANSIT(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_TRANSIT)) #define IS_AREA_TRANSIT(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_TRANSIT))
#define IS_AREA_STUB(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_STUB)) #define IS_AREA_STUB(oa) (CHECK_FLAG ((oa)->flag, OSPF6_AREA_STUB))
#define OSPF6_CMD_AREA_GET(str, oa) \
{ \
char *ep; \
uint32_t area_id = htonl(strtoul(str, &ep, 10)); \
if (*ep && inet_pton(AF_INET, str, &area_id) != 1) { \
vty_out(vty, "Malformed Area-ID: %s\n", str); \
return CMD_SUCCESS; \
} \
int format = !*ep ? OSPF6_AREA_FMT_DECIMAL \
: OSPF6_AREA_FMT_DOTTEDQUAD; \
oa = ospf6_area_lookup(area_id, ospf6); \
if (oa == NULL) \
oa = ospf6_area_create(area_id, ospf6, format); \
}
/* prototypes */ /* prototypes */
extern int ospf6_area_cmp(void *va, void *vb); extern int ospf6_area_cmp(void *va, void *vb);

View File

@ -642,11 +642,12 @@ DEFUN (no_ospf6_distance_source,
DEFUN (ospf6_interface_area, DEFUN (ospf6_interface_area,
ospf6_interface_area_cmd, ospf6_interface_area_cmd,
"interface IFNAME area A.B.C.D", "interface IFNAME area <A.B.C.D|(0-4294967295)>",
"Enable routing on an IPv6 interface\n" "Enable routing on an IPv6 interface\n"
IFNAME_STR IFNAME_STR
"Specify the OSPF6 area ID\n" "Specify the OSPF6 area ID\n"
"OSPF6 area ID in IPv4 address notation\n" "OSPF6 area ID in IPv4 address notation\n"
"OSPF6 area ID in decimal notation\n"
) )
{ {
VTY_DECLVAR_CONTEXT(ospf6, o); VTY_DECLVAR_CONTEXT(ospf6, o);
@ -655,7 +656,6 @@ DEFUN (ospf6_interface_area,
struct ospf6_area *oa; struct ospf6_area *oa;
struct ospf6_interface *oi; struct ospf6_interface *oi;
struct interface *ifp; struct interface *ifp;
uint32_t area_id;
/* find/create ospf6 interface */ /* find/create ospf6 interface */
ifp = if_get_by_name(argv[idx_ifname]->arg, VRF_DEFAULT); ifp = if_get_by_name(argv[idx_ifname]->arg, VRF_DEFAULT);
@ -669,15 +669,7 @@ DEFUN (ospf6_interface_area,
} }
/* parse Area-ID */ /* parse Area-ID */
if (inet_pton(AF_INET, argv[idx_ipv4]->arg, &area_id) != 1) { OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, oa);
vty_out(vty, "Invalid Area-ID: %s\n", argv[idx_ipv4]->arg);
return CMD_SUCCESS;
}
/* find/create ospf6 area */
oa = ospf6_area_lookup(area_id, o);
if (oa == NULL)
oa = ospf6_area_create(area_id, o, OSPF6_AREA_FMT_DOTTEDQUAD);
/* attach interface to area */ /* attach interface to area */
listnode_add(oa->if_list, oi); /* sort ?? */ listnode_add(oa->if_list, oi); /* sort ?? */
@ -701,12 +693,13 @@ DEFUN (ospf6_interface_area,
DEFUN (no_ospf6_interface_area, DEFUN (no_ospf6_interface_area,
no_ospf6_interface_area_cmd, no_ospf6_interface_area_cmd,
"no interface IFNAME area A.B.C.D", "no interface IFNAME area <A.B.C.D|(0-4294967295)>",
NO_STR NO_STR
"Disable routing on an IPv6 interface\n" "Disable routing on an IPv6 interface\n"
IFNAME_STR IFNAME_STR
"Specify the OSPF6 area ID\n" "Specify the OSPF6 area ID\n"
"OSPF6 area ID in IPv4 address notation\n" "OSPF6 area ID in IPv4 address notation\n"
"OSPF6 area ID in decimal notation\n"
) )
{ {
int idx_ifname = 2; int idx_ifname = 2;
@ -729,10 +722,8 @@ DEFUN (no_ospf6_interface_area,
} }
/* parse Area-ID */ /* parse Area-ID */
if (inet_pton(AF_INET, argv[idx_ipv4]->arg, &area_id) != 1) { if (inet_pton(AF_INET, argv[idx_ipv4]->arg, &area_id) != 1)
vty_out(vty, "Invalid Area-ID: %s\n", argv[idx_ipv4]->arg); area_id = htonl(strtoul(argv[idx_ipv4]->arg, NULL, 10));
return CMD_SUCCESS;
}
/* Verify Area */ /* Verify Area */
if (oi->area == NULL) { if (oi->area == NULL) {