]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospfd: remember format for ospf area id 591/head
authorQuentin Young <qlyoung@cumulusnetworks.com>
Fri, 19 May 2017 18:38:02 +0000 (18:38 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Fri, 19 May 2017 18:40:18 +0000 (18:40 +0000)
If the user enters a decimal, display a decimal.
If the user enters a dotted quad, display a dotted quad.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
ospfd/ospf_abr.c
ospfd/ospf_interface.c
ospfd/ospf_interface.h
ospfd/ospf_vty.c
ospfd/ospf_vty.h
ospfd/ospfd.c
ospfd/ospfd.h

index a54170e04800497b8ef846e9dbbd8c1397fedc47..aa4909314ab01124a228fb40dbee9a6caaa8b698 100644 (file)
@@ -197,9 +197,8 @@ ospf_area_range_set (struct ospf *ospf, struct in_addr area_id,
 {
   struct ospf_area *area;
   struct ospf_area_range *range;
-  int ret = OSPF_AREA_ID_FORMAT_ADDRESS;
 
-  area = ospf_area_get (ospf, area_id, ret);
+  area = ospf_area_get (ospf, area_id);
   if (area == NULL)
     return 0;
 
@@ -233,9 +232,8 @@ ospf_area_range_cost_set (struct ospf *ospf, struct in_addr area_id,
 {
   struct ospf_area *area;
   struct ospf_area_range *range;
-  int ret = OSPF_AREA_ID_FORMAT_ADDRESS;
 
-  area = ospf_area_get (ospf, area_id, ret);
+  area = ospf_area_get (ospf, area_id);
   if (area == NULL)
     return 0;
 
@@ -282,9 +280,8 @@ ospf_area_range_substitute_set (struct ospf *ospf, struct in_addr area_id,
 {
   struct ospf_area *area;
   struct ospf_area_range *range;
-  int ret = OSPF_AREA_ID_FORMAT_ADDRESS;
 
-  area = ospf_area_get (ospf, area_id, ret);
+  area = ospf_area_get (ospf, area_id);
   range = ospf_area_range_lookup (area, p);
 
   if (range != NULL)
index aeb12a59fa2770cc932dbf465ccfe47c6accb6a7..137df16a0511301329f07e85b74b35c806492262 100644 (file)
@@ -795,7 +795,7 @@ ospf_vl_data_new (struct ospf_area *area, struct in_addr vl_peer)
 
   vl_data->vl_peer.s_addr = vl_peer.s_addr;
   vl_data->vl_area_id = area->area_id;
-  vl_data->format = area->format;
+  vl_data->vl_area_id_fmt = area->area_id_fmt;
 
   return vl_data;
 }
@@ -869,7 +869,7 @@ ospf_vl_new (struct ospf *ospf, struct ospf_vl_data *vl_data)
     zlog_debug ("ospf_vl_new(): set if->name to %s", vi->name);
 
   area_id.s_addr = 0;
-  area = ospf_area_get (ospf, area_id, OSPF_AREA_ID_FORMAT_ADDRESS);
+  area = ospf_area_get (ospf, area_id);
   voi->area = area;
 
   if (IS_DEBUG_OSPF_EVENT)
index 39202f777a5cf5d30f1db4a19a5fc9ca2f043390..c5e6594926c8cb15745b2d179d2f2062e0388e99 100644 (file)
@@ -104,12 +104,12 @@ struct ospf_interface;
 
 struct ospf_vl_data
 {
-  struct in_addr    vl_peer;      /* Router-ID of the peer for VLs. */
-  struct in_addr    vl_area_id;           /* Transit area for this VL. */
-  int format;                      /* area ID format */
-  struct ospf_interface *vl_oi;           /* Interface data structure for the VL. */
-  struct vertex_nexthop nexthop;   /* Nexthop router and oi to use */
-  struct in_addr    peer_addr;    /* Address used to reach the peer. */
+  struct in_addr    vl_peer;      /* Router-ID of the peer */
+  struct in_addr    vl_area_id;   /* Transit area */
+  int vl_area_id_fmt;             /* Area ID format */
+  struct ospf_interface *vl_oi;   /* Interface data structure */
+  struct vertex_nexthop nexthop;  /* Nexthop router and oi to use */
+  struct in_addr    peer_addr;    /* Address used to reach the peer */
   u_char flags;
 };
 
index f409aa8bb41674e0b749f210ada09796cc6e252c..caf1b0c6683d84af71e5feb941eae5064870a26f 100644 (file)
@@ -67,36 +67,29 @@ static const char *ospf_network_type_str[] =
 
 /* Utility functions. */
 int
-ospf_str2area_id (const char *str, struct in_addr *area_id, int *format)
+str2area_id (const char *str, struct in_addr *area_id, int *area_id_fmt)
 {
-  char *endptr = NULL;
-  unsigned long ret;
+  char *ep;
 
-  /* match "A.B.C.D". */
-  if (strchr (str, '.') != NULL)
-    {
-      ret = inet_aton (str, area_id);
-      if (!ret)
-        return -1;
-      *format = OSPF_AREA_ID_FORMAT_ADDRESS;
-    }
-  /* match "<0-4294967295>". */
-  else
-    {
-      if (*str == '-')
-        return -1;
-      errno = 0;
-      ret = strtoul (str, &endptr, 10);
-      if (*endptr != '\0' || errno || ret > UINT32_MAX)
-        return -1;
+  area_id->s_addr = htonl (strtoul (str, &ep, 10));
+  if (*ep && !inet_aton (str, area_id))
+    return -1;
 
-      area_id->s_addr = htonl (ret);
-      *format = OSPF_AREA_ID_FORMAT_DECIMAL;
-    }
+  *area_id_fmt = *ep ? OSPF_AREA_ID_FMT_DOTTEDQUAD : OSPF_AREA_ID_FMT_DECIMAL;
 
   return 0;
 }
 
+void
+area_id2str (char *buf, int length, struct in_addr *area_id, int area_id_fmt)
+{
+  memset (buf, 0, length);
+
+  if (area_id_fmt == OSPF_AREA_ID_FMT_DOTTEDQUAD)
+    strncpy (buf, inet_ntoa (*area_id), length);
+  else
+    sprintf (buf, "%lu", (unsigned long) ntohl (area_id->s_addr));
+}
 
 static int
 str2metric (const char *str, int *metric)
@@ -534,7 +527,7 @@ DEFUN (ospf_network_area,
   VTY_GET_IPV4_PREFIX ("network prefix", p, argv[idx_ipv4_prefixlen]->arg);
   VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
 
-  ret = ospf_network_set (ospf, &p, area_id);
+  ret = ospf_network_set (ospf, &p, area_id, format);
   if (ret == 0)
     {
       vty_out (vty, "There is already same network statement.%s", VTY_NEWLINE);
@@ -641,6 +634,7 @@ DEFUN (ospf_area_range_cost,
   VTY_GET_IPV4_PREFIX ("area range", p, argv[idx_ipv4_prefixlen]->arg);
 
   ospf_area_range_set (ospf, area_id, &p, OSPF_AREA_RANGE_ADVERTISE);
+  ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
 
   VTY_GET_INTEGER ("range cost", cost, argv[idx_cost]->arg);
   ospf_area_range_cost_set (ospf, area_id, &p, cost);
@@ -669,6 +663,7 @@ DEFUN (ospf_area_range_not_advertise,
   VTY_GET_IPV4_PREFIX ("area range", p, argv[idx_ipv4_prefixlen]->arg);
 
   ospf_area_range_set (ospf, area_id, &p, 0);
+  ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
 
   return CMD_SUCCESS;
 }
@@ -728,6 +723,7 @@ DEFUN (ospf_area_range_substitute,
   VTY_GET_IPV4_PREFIX ("substituted network prefix", s, argv[idx_ipv4_prefixlen_2]->arg);
 
   ospf_area_range_substitute_set (ospf, area_id, &p, &s);
+  ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
 
   return CMD_SUCCESS;
 }
@@ -782,7 +778,7 @@ DEFUN (no_ospf_area_range_substitute,
 struct ospf_vl_config_data {
   struct vty *vty;             /* vty stuff */
   struct in_addr area_id;      /* area ID from command line */
-  int format;                  /* command line area ID format */
+  int area_id_fmt;             /* command line area ID format */
   struct in_addr vl_peer;      /* command line vl_peer */
   int auth_type;               /* Authehntication type, if given */
   char *auth_key;              /* simple password if present */
@@ -821,11 +817,12 @@ ospf_find_vl_data (struct ospf *ospf, struct ospf_vl_config_data *vl_config)
                VTY_NEWLINE);
       return NULL;
     }
-  area = ospf_area_get (ospf, area_id, vl_config->format);
+  area = ospf_area_get (ospf, area_id);
+  ospf_area_display_format_set (ospf, area, vl_config->area_id_fmt);
 
   if (area->external_routing != OSPF_AREA_DEFAULT)
     {
-      if (vl_config->format == OSPF_AREA_ID_FORMAT_ADDRESS)
+      if (vl_config->area_id_fmt == OSPF_AREA_ID_FMT_DOTTEDQUAD)
        vty_out (vty, "Area %s is %s%s",
                 inet_ntoa (area_id),
                 area->external_routing == OSPF_AREA_NSSA?"nssa":"stub",
@@ -1037,7 +1034,8 @@ DEFUN (ospf_area_vlink,
   ospf_vl_config_data_init(&vl_config, vty);
 
   /* Read off first 2 parameters and check them */
-  ret = ospf_str2area_id (argv[idx_ipv4_number]->arg, &vl_config.area_id, &vl_config.format);
+  ret = str2area_id (argv[idx_ipv4_number]->arg, &vl_config.area_id,
+                          &vl_config.area_id_fmt);
   if (ret < 0)
     {
       vty_out (vty, "OSPF area ID is invalid%s", VTY_NEWLINE);
@@ -1155,7 +1153,7 @@ DEFUN (ospf_area_vlink_intervals,
   char *area_id   = argv[1]->arg;
   char *router_id = argv[3]->arg;
 
-  ret = ospf_str2area_id (area_id, &vl_config.area_id, &vl_config.format);
+  ret = str2area_id (area_id, &vl_config.area_id, &vl_config.area_id_fmt);
   if (ret < 0)
     {
       vty_out (vty, "OSPF area ID is invalid%s", VTY_NEWLINE);
@@ -1210,7 +1208,7 @@ DEFUN (no_ospf_area_vlink,
 
   ospf_vl_config_data_init(&vl_config, vty);
 
-  ret = ospf_str2area_id (argv[idx_ipv4_number]->arg, &vl_config.area_id, &format);
+  ret = str2area_id (argv[idx_ipv4_number]->arg, &vl_config.area_id, &format);
   if (ret < 0)
     {
       vty_out (vty, "OSPF area ID is invalid%s", VTY_NEWLINE);
@@ -1319,7 +1317,7 @@ DEFUN (no_ospf_area_vlink_intervals,
   char *area_id   = argv[2]->arg;
   char *router_id = argv[4]->arg;
 
-  ret = ospf_str2area_id (area_id, &vl_config.area_id, &vl_config.format);
+  ret = str2area_id (area_id, &vl_config.area_id, &vl_config.area_id_fmt);
   if (ret < 0)
     {
       vty_out (vty, "OSPF area ID is invalid%s", VTY_NEWLINE);
@@ -1371,7 +1369,8 @@ DEFUN (ospf_area_shortcut,
 
   VTY_GET_OSPF_AREA_ID_NO_BB ("shortcut", area_id, format, argv[idx_ipv4_number]->arg);
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
+  ospf_area_display_format_set (ospf, area, format);
 
   if (strncmp (argv[idx_enable_disable]->arg, "de", 2) == 0)
     mode = OSPF_SHORTCUT_DEFAULT;
@@ -1437,6 +1436,7 @@ DEFUN (ospf_area_stub,
   VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[idx_ipv4_number]->arg);
 
   ret = ospf_area_stub_set (ospf, area_id);
+  ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
   if (ret == 0)
     {
       vty_out (vty, "First deconfigure all virtual link through this area%s",
@@ -1466,6 +1466,7 @@ DEFUN (ospf_area_stub_no_summary,
   VTY_GET_OSPF_AREA_ID_NO_BB ("stub", area_id, format, argv[idx_ipv4_number]->arg);
 
   ret = ospf_area_stub_set (ospf, area_id);
+  ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
   if (ret == 0)
     {
       vty_out (vty, "%% Area cannot be stub as it contains a virtual link%s",
@@ -1532,6 +1533,7 @@ ospf_area_nssa_cmd_handler (struct vty *vty, int argc, struct cmd_token **argv,
   VTY_GET_OSPF_AREA_ID_NO_BB ("NSSA", area_id, format, argv[1]->arg);
 
   ret = ospf_area_nssa_set (ospf, area_id);
+  ospf_area_display_format_set (ospf, ospf_area_get (ospf, area_id), format);
   if (ret == 0)
     {
       vty_out (vty, "%% Area cannot be nssa as it contains a virtual link%s",
@@ -1669,7 +1671,8 @@ DEFUN (ospf_area_default_cost,
   VTY_GET_OSPF_AREA_ID_NO_BB ("default-cost", area_id, format, argv[idx_ipv4_number]->arg);
   VTY_GET_INTEGER_RANGE ("stub default cost", cost, argv[idx_number]->arg, 0, 16777215);
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
+  ospf_area_display_format_set (ospf, area, format);
 
   if (area->external_routing == OSPF_AREA_DEFAULT)
     {
@@ -1756,7 +1759,8 @@ DEFUN (ospf_area_export_list,
 
   VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
+  ospf_area_display_format_set (ospf, area, format);
   ospf_area_export_list_set (ospf, area, argv[3]->arg);
 
   return CMD_SUCCESS;
@@ -1807,7 +1811,8 @@ DEFUN (ospf_area_import_list,
 
   VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
+  ospf_area_display_format_set (ospf, area, format);
   ospf_area_import_list_set (ospf, area, argv[3]->arg);
 
   return CMD_SUCCESS;
@@ -1863,7 +1868,8 @@ DEFUN (ospf_area_filter_list,
 
   VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
+  ospf_area_display_format_set (ospf, area, format);
   plist = prefix_list_lookup (AFI_IP, argv[idx_word]->arg);
   if (strncmp (argv[idx_in_out]->arg, "in", 2) == 0)
     {
@@ -1963,7 +1969,8 @@ DEFUN (ospf_area_authentication_message_digest,
 
   VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
+  ospf_area_display_format_set (ospf, area, format);
   area->auth_type = OSPF_AUTH_CRYPTOGRAPHIC;
 
   return CMD_SUCCESS;
@@ -1985,7 +1992,8 @@ DEFUN (ospf_area_authentication,
 
   VTY_GET_OSPF_AREA_ID (area_id, format, argv[idx_ipv4_number]->arg);
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
+  ospf_area_display_format_set (ospf, area, format);
   area->auth_type = OSPF_AUTH_SIMPLE;
 
   return CMD_SUCCESS;
@@ -7003,7 +7011,7 @@ DEFUN (ip_ospf_area,
       return CMD_SUCCESS;
     }
 
-  ret = ospf_str2area_id (areaid, &area_id, &format);
+  ret = str2area_id (areaid, &area_id, &format);
   if (ret < 0)
     {
       vty_out (vty, "Please specify area by A.B.C.D|<0-4294967295>%s",
@@ -8165,19 +8173,6 @@ const char *ospf_shortcut_mode_str[] =
   "disable"
 };
 
-
-static void
-area_id2str (char *buf, int length, struct ospf_area *area)
-{
-  memset (buf, 0, length);
-
-  if (area->format == OSPF_AREA_ID_FORMAT_ADDRESS)
-    strncpy (buf, inet_ntoa (area->area_id), length);
-  else
-    sprintf (buf, "%lu", (unsigned long) ntohl (area->area_id.s_addr));
-}
-
-
 const char *ospf_int_type_str[] = 
 {
   "unknown",           /* should never be used. */
@@ -8424,7 +8419,7 @@ config_write_network_area (struct vty *vty, struct ospf *ospf)
        memset (buf, 0, INET_ADDRSTRLEN);
 
        /* Create Area ID string by specified Area ID format. */
-       if (n->format == OSPF_AREA_ID_FORMAT_ADDRESS)
+       if (n->area_id_fmt == OSPF_AREA_ID_FMT_DOTTEDQUAD)
          strncpy ((char *) buf, inet_ntoa (n->area_id), INET_ADDRSTRLEN);
        else
          sprintf ((char *) buf, "%lu", 
@@ -8451,7 +8446,8 @@ config_write_ospf_area (struct vty *vty, struct ospf *ospf)
     {
       struct route_node *rn1;
 
-      area_id2str ((char *) buf, INET_ADDRSTRLEN, area);
+      area_id2str ((char *) buf, INET_ADDRSTRLEN, &area->area_id,
+                   area->area_id_fmt);
 
       if (area->auth_type != OSPF_AUTH_NULL)
        {
@@ -8570,7 +8566,7 @@ config_write_virtual_link (struct vty *vty, struct ospf *ospf)
 {
   struct listnode *node;
   struct ospf_vl_data *vl_data;
-  u_char buf[INET_ADDRSTRLEN];
+  char buf[INET_ADDRSTRLEN];
 
   /* Virtual-Link print */
   for (ALL_LIST_ELEMENTS_RO (ospf->vlinks, node, vl_data))
@@ -8582,12 +8578,8 @@ config_write_virtual_link (struct vty *vty, struct ospf *ospf)
       if (vl_data != NULL)
        {
          memset (buf, 0, INET_ADDRSTRLEN);
-         
-         if (vl_data->format == OSPF_AREA_ID_FORMAT_ADDRESS)
-           strncpy ((char *) buf, inet_ntoa (vl_data->vl_area_id), INET_ADDRSTRLEN);
-         else
-           sprintf ((char *) buf, "%lu", 
-                    (unsigned long int) ntohl (vl_data->vl_area_id.s_addr));
+
+          area_id2str (buf, sizeof(buf), &vl_data->vl_area_id, vl_data->vl_area_id_fmt);
          oi = vl_data->vl_oi;
 
          /* timers */
index 429ac318f7ad9aea5a1992a7c7557fdcd5951e87..cf6b322ac7b6fee87ac214d92dde3200c866c3c6 100644 (file)
@@ -26,7 +26,7 @@
 #define VTY_GET_OSPF_AREA_ID(V,F,STR)                                         \
 {                                                                             \
   int retv;                                                                   \
-  retv = ospf_str2area_id ((STR), &(V), &(F));                                \
+  retv = str2area_id ((STR), &(V), &(F));                                     \
   if (retv < 0)                                                               \
     {                                                                         \
       vty_out (vty, "%% Invalid OSPF area ID%s", VTY_NEWLINE);                \
@@ -37,7 +37,7 @@
 #define VTY_GET_OSPF_AREA_ID_NO_BB(NAME,V,F,STR)                              \
 {                                                                             \
   int retv;                                                                   \
-  retv = ospf_str2area_id ((STR), &(V), &(F));                                \
+  retv = str2area_id ((STR), &(V), &(F));                                     \
   if (retv < 0)                                                               \
     {                                                                         \
       vty_out (vty, "%% Invalid OSPF area ID%s", VTY_NEWLINE);                \
@@ -54,6 +54,7 @@
 extern void ospf_vty_init (void);
 extern void ospf_vty_show_init (void);
 extern void ospf_vty_clear_init (void);
-extern int ospf_str2area_id (const char *, struct in_addr *, int *);
+extern int str2area_id (const char *, struct in_addr *, int *);
+extern void area_id2str (char *, int, struct in_addr *, int);
 
 #endif /* _QUAGGA_OSPF_VTY_H */
index 30b1e9622f1c1480015ac268f0ac00be704ca34a..af68d1d35f211531df7d9f0ae7d1be7f29342a3f 100644 (file)
@@ -717,6 +717,7 @@ ospf_area_new (struct ospf *ospf, struct in_addr area_id)
   new->ospf = ospf;
 
   new->area_id = area_id;
+  new->area_id_fmt = OSPF_AREA_ID_FMT_DOTTEDQUAD;
 
   new->external_routing = OSPF_AREA_DEFAULT;
   new->default_cost = 1;
@@ -809,7 +810,7 @@ ospf_area_check_free (struct ospf *ospf, struct in_addr area_id)
 }
 
 struct ospf_area *
-ospf_area_get (struct ospf *ospf, struct in_addr area_id, int format)
+ospf_area_get (struct ospf *ospf, struct in_addr area_id)
 {
   struct ospf_area *area;
   
@@ -817,7 +818,6 @@ ospf_area_get (struct ospf *ospf, struct in_addr area_id, int format)
   if (!area)
     {
       area = ospf_area_new (ospf, area_id);
-      area->format = format;
       listnode_add_sort (ospf->areas, area);
       ospf_check_abr_status (ospf);  
       if (ospf->stub_router_admin_set == OSPF_STUB_ROUTER_ADMINISTRATIVE_SET)
@@ -920,13 +920,13 @@ static void update_redistributed(struct ospf *ospf, int add_to_ospf)
 
 /* Config network statement related functions. */
 static struct ospf_network *
-ospf_network_new (struct in_addr area_id, int format)
+ospf_network_new (struct in_addr area_id)
 {
   struct ospf_network *new;
   new = XCALLOC (MTYPE_OSPF_NETWORK, sizeof (struct ospf_network));
 
   new->area_id = area_id;
-  new->format = format;
+  new->area_id_fmt = OSPF_AREA_ID_FMT_DOTTEDQUAD;
   
   return new;
 }
@@ -941,12 +941,11 @@ ospf_network_free (struct ospf *ospf, struct ospf_network *network)
 
 int
 ospf_network_set (struct ospf *ospf, struct prefix_ipv4 *p,
-                 struct in_addr area_id)
+                 struct in_addr area_id, int df)
 {
   struct ospf_network *network;
   struct ospf_area *area;
   struct route_node *rn;
-  int ret = OSPF_AREA_ID_FORMAT_ADDRESS;
 
   rn = route_node_get (ospf->networks, (struct prefix *)p);
   if (rn->info)
@@ -956,8 +955,10 @@ ospf_network_set (struct ospf *ospf, struct prefix_ipv4 *p,
       return 0;
     }
 
-  rn->info = network = ospf_network_new (area_id, ret);
-  area = ospf_area_get (ospf, area_id, ret);
+  rn->info = network = ospf_network_new (area_id);
+  network->area_id_fmt = df;
+  area = ospf_area_get (ospf, area_id);
+  ospf_area_display_format_set (ospf, area, df);
 
   /* Run network config now. */
   ospf_network_run ((struct prefix *)p, area);
@@ -1037,7 +1038,6 @@ ospf_interface_set (struct interface *ifp, struct in_addr area_id)
   struct ospf *ospf;
   struct ospf_if_params *params;
   struct ospf_interface *oi;
-  int ret = OSPF_AREA_ID_FORMAT_ADDRESS;
 
   if ((ospf = ospf_lookup ()) == NULL)
     return 1; /* Ospf not ready yet */
@@ -1047,7 +1047,7 @@ ospf_interface_set (struct interface *ifp, struct in_addr area_id)
   SET_IF_PARAM (params, if_area);
   params->if_area = area_id;
 
-  area = ospf_area_get (ospf, area_id, ret);
+  area = ospf_area_get (ospf, area_id);
 
   for (ALL_LIST_ELEMENTS_RO (ifp->connected, cnode, co))
     {
@@ -1235,7 +1235,7 @@ ospf_if_update (struct ospf *ospf, struct interface *ifp)
     if (rn->info != NULL)
       {
         network = (struct ospf_network *) rn->info;
-        area = ospf_area_get (ospf, network->area_id, network->format);
+        area = ospf_area_get (ospf, network->area_id);
         ospf_network_run_interface (&rn->p, area, ifp);
       }
 
@@ -1368,13 +1368,20 @@ ospf_area_vlink_count (struct ospf *ospf, struct ospf_area *area)
   return count;
 }
 
+int
+ospf_area_display_format_set (struct ospf *ospf, struct ospf_area *area, int df)
+{
+  area->area_id_fmt = df;
+
+  return 1;
+}
+
 int
 ospf_area_stub_set (struct ospf *ospf, struct in_addr area_id)
 {
   struct ospf_area *area;
-  int format = OSPF_AREA_ID_FORMAT_ADDRESS;
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
   if (ospf_area_vlink_count (ospf, area))
     return 0;
 
@@ -1405,9 +1412,8 @@ int
 ospf_area_no_summary_set (struct ospf *ospf, struct in_addr area_id)
 {
   struct ospf_area *area;
-  int format = OSPF_AREA_ID_FORMAT_ADDRESS;
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
   area->no_summary = 1;
 
   return 1;
@@ -1432,9 +1438,8 @@ int
 ospf_area_nssa_set (struct ospf *ospf, struct in_addr area_id)
 {
   struct ospf_area *area;
-  int format = OSPF_AREA_ID_FORMAT_ADDRESS;
 
-  area = ospf_area_get (ospf, area_id, format);
+  area = ospf_area_get (ospf, area_id);
   if (ospf_area_vlink_count (ospf, area))
     return 0;
 
index 9198d5c6203918a15cdae46af54ad3d8b69ba3ba..787a77bf969032dd4d7f9f096839284035bacb6d 100644 (file)
@@ -322,9 +322,9 @@ struct ospf_area
   struct in_addr area_id;
 
   /* Area ID format. */
-  char format;
-#define OSPF_AREA_ID_FORMAT_ADDRESS         1
-#define OSPF_AREA_ID_FORMAT_DECIMAL         2
+  int area_id_fmt;
+#define OSPF_AREA_ID_FMT_DOTTEDQUAD     1
+#define OSPF_AREA_ID_FMT_DECIMAL        2
 
   /* Address range. */
   struct list *address_range;
@@ -431,7 +431,7 @@ struct ospf_network
 {
   /* Area ID. */
   struct in_addr area_id;
-  int format;
+  int area_id_fmt;
 };
 
 /* OSPF NBMA neighbor structure. */
@@ -525,9 +525,11 @@ extern struct ospf *ospf_get_instance (u_short);
 extern void ospf_finish (struct ospf *);
 extern void ospf_router_id_update (struct ospf *ospf);
 extern int ospf_network_set (struct ospf *, struct prefix_ipv4 *,
-                            struct in_addr);
+                            struct in_addr, int);
 extern int ospf_network_unset (struct ospf *, struct prefix_ipv4 *,
                               struct in_addr);
+extern int ospf_area_display_format_set (struct ospf *, struct ospf_area *area,
+                                         int df);
 extern int ospf_area_stub_set (struct ospf *, struct in_addr);
 extern int ospf_area_stub_unset (struct ospf *, struct in_addr);
 extern int ospf_area_no_summary_set (struct ospf *, struct in_addr);
@@ -566,7 +568,7 @@ extern struct ospf_nbr_nbma *ospf_nbr_nbma_lookup_next (struct ospf *,
                                                        int);
 extern int ospf_oi_count (struct interface *);
 
-extern struct ospf_area *ospf_area_get (struct ospf *, struct in_addr, int);
+extern struct ospf_area *ospf_area_get (struct ospf *, struct in_addr);
 extern void ospf_area_check_free (struct ospf *, struct in_addr);
 extern struct ospf_area *ospf_area_lookup_by_area_id (struct ospf *,
                                                      struct in_addr);