diff options
Diffstat (limited to 'ospf6d/ospf6_area.h')
| -rw-r--r-- | ospf6d/ospf6_area.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/ospf6d/ospf6_area.h b/ospf6d/ospf6_area.h index 5648b1dfec..f6287660d6 100644 --- a/ospf6d/ospf6_area.h +++ b/ospf6d/ospf6_area.h @@ -28,7 +28,7 @@ struct ospf6_area { struct ospf6 *ospf6; /* Area-ID */ - uint32_t area_id; + in_addr_t area_id; #define OSPF6_AREA_FMT_DOTTEDQUAD 1 #define OSPF6_AREA_FMT_DECIMAL 2 @@ -117,6 +117,21 @@ struct ospf6_area { #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 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 */ extern int ospf6_area_cmp(void *va, void *vb); |
