mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 14:17:20 +00:00
Merge pull request #6700 from deastoe/ospf6-interface-decimal-area
This commit is contained in:
commit
a5d68ac07a
@ -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.
|
||||||
|
@ -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)>]",
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user