diff options
Diffstat (limited to 'ospfd/ospf_vty.c')
| -rw-r--r-- | ospfd/ospf_vty.c | 240 | 
1 files changed, 110 insertions, 130 deletions
| diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index c0e1f6ce..55b33150 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -2319,6 +2319,7 @@ DEFUN (ospf_auto_cost_reference_bandwidth,    struct ospf *ospf = vty->index;    u_int32_t refbw;    struct listnode *node; +  struct interface *ifp;    refbw = strtol (argv[0], NULL, 10);    if (refbw < 1 || refbw > 4294967) @@ -2335,8 +2336,8 @@ DEFUN (ospf_auto_cost_reference_bandwidth,    vty_out (vty, "%% OSPF: Reference bandwidth is changed.%s", VTY_NEWLINE);    vty_out (vty, "        Please ensure reference bandwidth is consistent across all routers%s", VTY_NEWLINE); -  for (node = listhead (om->iflist); node; nextnode (node)) -    ospf_if_recalculate_output_cost (getdata (node)); +  for (ALL_LIST_ELEMENTS_RO (om->iflist, node, ifp)) +    ospf_if_recalculate_output_cost (ifp);    return CMD_SUCCESS;  } @@ -2349,7 +2350,8 @@ DEFUN (no_ospf_auto_cost_reference_bandwidth,         "Use reference bandwidth method to assign OSPF cost\n")  {    struct ospf *ospf = vty->index; -  struct listnode *node; +  struct listnode *node, *nnode; +  struct interface *ifp;    if (ospf->ref_bandwidth == OSPF_DEFAULT_REF_BANDWIDTH)      return CMD_SUCCESS; @@ -2358,8 +2360,8 @@ DEFUN (no_ospf_auto_cost_reference_bandwidth,    vty_out (vty, "%% OSPF: Reference bandwidth is changed.%s", VTY_NEWLINE);    vty_out (vty, "        Please ensure reference bandwidth is consistent across all routers%s", VTY_NEWLINE); -  for (node = listhead (om->iflist); node; nextnode (node)) -    ospf_if_recalculate_output_cost (getdata (node)); +  for (ALL_LIST_ELEMENTS (om->iflist, node, nnode, ifp)) +    ospf_if_recalculate_output_cost (ifp);    return CMD_SUCCESS;  } @@ -2499,7 +2501,7 @@ DEFUN (show_ip_ospf,         IP_STR         "OSPF information\n")  { -  struct listnode *node; +  struct listnode *node, *nnode;    struct ospf_area * area;    struct ospf *ospf; @@ -2562,9 +2564,8 @@ DEFUN (show_ip_ospf,             listcount (ospf->areas), VTY_NEWLINE, VTY_NEWLINE);    /* Show each area status. */ -  for (node = listhead (ospf->areas); node; nextnode (node)) -    if ((area = getdata (node)) != NULL) -      show_ip_ospf_area (vty, area); +  for (ALL_LIST_ELEMENTS (ospf->areas, node, nnode, area)) +    show_ip_ospf_area (vty, area);    return CMD_SUCCESS;  } @@ -2708,8 +2709,8 @@ DEFUN (show_ip_ospf_interface,    /* Show All Interfaces. */    if (argc == 0) -    for (node = listhead (iflist); node; nextnode (node)) -      show_ip_ospf_interface_sub (vty, ospf, node->data); +    for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp)) +      show_ip_ospf_interface_sub (vty, ospf, ifp);    /* Interface name is specified. */    else      { @@ -2764,6 +2765,7 @@ DEFUN (show_ip_ospf_neighbor,         "Neighbor list\n")  {    struct ospf *ospf; +  struct ospf_interface *oi;    struct listnode *node;    ospf = ospf_lookup (); @@ -2778,8 +2780,8 @@ DEFUN (show_ip_ospf_neighbor,             "Time   Address         Interface           RXmtL "             "RqstL DBsmL%s", VTY_NEWLINE, VTY_NEWLINE); -  for (node = listhead (ospf->oiflist); node; nextnode (node)) -    show_ip_ospf_neighbor_sub (vty, getdata (node)); +  for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi)) +    show_ip_ospf_neighbor_sub (vty, oi);    return CMD_SUCCESS;  } @@ -2795,6 +2797,7 @@ DEFUN (show_ip_ospf_neighbor_all,  {    struct ospf *ospf = vty->index;    struct listnode *node; +  struct ospf_interface *oi;    if (ospf == NULL)      { @@ -2807,20 +2810,16 @@ DEFUN (show_ip_ospf_neighbor_all,             "Time   Address         Interface           RXmtL "             "RqstL DBsmL%s", VTY_NEWLINE, VTY_NEWLINE); -  for (node = listhead (ospf->oiflist); node; nextnode (node)) +  for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))      { -      struct ospf_interface *oi = getdata (node);        struct listnode *nbr_node; +      struct ospf_nbr_nbma *nbr_nbma;        show_ip_ospf_neighbor_sub (vty, oi);      /* print Down neighbor status */ -    for (nbr_node = listhead (oi->nbr_nbma); nbr_node; nextnode (nbr_node)) +    for (ALL_LIST_ELEMENTS_RO (oi->nbr_nbma, nbr_node, nbr_nbma))        { -	struct ospf_nbr_nbma *nbr_nbma; - -	nbr_nbma = getdata (nbr_node); -  	if (nbr_nbma->nbr == NULL  	    || nbr_nbma->nbr->state == NSM_Down)  	  { @@ -2980,6 +2979,7 @@ DEFUN (show_ip_ospf_neighbor_id,    struct ospf *ospf;    struct listnode *node;    struct ospf_neighbor *nbr; +  struct ospf_interface *oi;    struct in_addr router_id;    int ret; @@ -2997,16 +2997,12 @@ DEFUN (show_ip_ospf_neighbor_id,        return CMD_SUCCESS;      } -  for (node = listhead (ospf->oiflist); node; nextnode (node)) -    { -      struct ospf_interface *oi = getdata (node); - -      if ((nbr = ospf_nbr_lookup_by_routerid (oi->nbrs, &router_id))) -	{ -	  show_ip_ospf_neighbor_detail_sub (vty, oi, nbr); -	  return CMD_SUCCESS; -	} -    } +  for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi)) +    if ((nbr = ospf_nbr_lookup_by_routerid (oi->nbrs, &router_id))) +      { +        show_ip_ospf_neighbor_detail_sub (vty, oi, nbr); +        return CMD_SUCCESS; +      }    /* Nothing to show. */    return CMD_SUCCESS; @@ -3022,6 +3018,7 @@ DEFUN (show_ip_ospf_neighbor_detail,         "detail of all neighbors\n")  {    struct ospf *ospf; +  struct ospf_interface *oi;    struct listnode *node;    ospf = ospf_lookup (); @@ -3031,9 +3028,8 @@ DEFUN (show_ip_ospf_neighbor_detail,        return CMD_SUCCESS;      } -  for (node = listhead (ospf->oiflist); node; nextnode (node)) +  for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))      { -      struct ospf_interface *oi = getdata (node);        struct route_node *rn;        struct ospf_neighbor *nbr; @@ -3059,6 +3055,7 @@ DEFUN (show_ip_ospf_neighbor_detail_all,  {    struct ospf *ospf;    struct listnode *node; +  struct ospf_interface *oi;    ospf = ospf_lookup ();    if (ospf == NULL) @@ -3067,11 +3064,11 @@ DEFUN (show_ip_ospf_neighbor_detail_all,        return CMD_SUCCESS;      } -  for (node = listhead (ospf->oiflist); node; nextnode (node)) +  for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi))      { -      struct ospf_interface *oi = getdata (node);        struct route_node *rn;        struct ospf_neighbor *nbr; +      struct ospf_nbr_nbma *nbr_nbma;        for (rn = route_top (oi->nbrs); rn; rn = route_next (rn))  	if ((nbr = rn->info)) @@ -3083,13 +3080,10 @@ DEFUN (show_ip_ospf_neighbor_detail_all,  	{  	  struct listnode *nd; -	  for (nd = listhead (oi->nbr_nbma); nd; nextnode (nd)) -	    { -	      struct ospf_nbr_nbma *nbr_nbma = getdata (nd); -	      if (nbr_nbma->nbr == NULL -		  || nbr_nbma->nbr->state == NSM_Down) -		show_ip_ospf_nbr_nbma_detail_sub (vty, oi, nbr_nbma); -	    } +	  for (ALL_LIST_ELEMENTS_RO (oi->nbr_nbma, nd, nbr_nbma)) +            if (nbr_nbma->nbr == NULL +                || nbr_nbma->nbr->state == NSM_Down) +              show_ip_ospf_nbr_nbma_detail_sub (vty, oi, nbr_nbma);  	}      } @@ -3609,7 +3603,8 @@ show_lsa_detail (struct vty *vty, struct ospf *ospf, int type,  		 struct in_addr *id, struct in_addr *adv_router)  {    struct listnode *node; - +  struct ospf_area *area; +      switch (type)      {      case OSPF_AS_EXTERNAL_LSA: @@ -3622,9 +3617,8 @@ show_lsa_detail (struct vty *vty, struct ospf *ospf, int type,        show_lsa_detail_proc (vty, AS_LSDB (ospf, type), id, adv_router);        break;      default: -      for (node = listhead (ospf->areas); node; nextnode (node)) +      for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))          { -          struct ospf_area *area = node->data;            vty_out (vty, "%s                %s (Area %s)%s%s",                     VTY_NEWLINE, show_database_desc[type],                     ospf_area_desc_string (area), VTY_NEWLINE, VTY_NEWLINE); @@ -3658,6 +3652,7 @@ show_lsa_detail_adv_router (struct vty *vty, struct ospf *ospf, int type,  			    struct in_addr *adv_router)  {    struct listnode *node; +  struct ospf_area *area;    switch (type)      { @@ -3672,9 +3667,8 @@ show_lsa_detail_adv_router (struct vty *vty, struct ospf *ospf, int type,                                         adv_router);        break;      default: -      for (node = listhead (ospf->areas); node; nextnode (node)) +      for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))          { -          struct ospf_area *area = node->data;            vty_out (vty, "%s                %s (Area %s)%s%s",                     VTY_NEWLINE, show_database_desc[type],                     ospf_area_desc_string (area), VTY_NEWLINE, VTY_NEWLINE); @@ -3690,12 +3684,12 @@ show_ip_ospf_database_summary (struct vty *vty, struct ospf *ospf, int self)  {    struct ospf_lsa *lsa;    struct route_node *rn; +  struct ospf_area *area;    struct listnode *node;    int type; -  for (node = listhead (ospf->areas); node; nextnode (node)) +  for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))      { -      struct ospf_area *area = node->data;        for (type = OSPF_MIN_LSA; type < OSPF_MAX_LSA; type++)  	{  	  switch (type) @@ -3765,17 +3759,16 @@ show_ip_ospf_database_maxage (struct vty *vty, struct ospf *ospf)    vty_out (vty, "%s                MaxAge Link States:%s%s",             VTY_NEWLINE, VTY_NEWLINE, VTY_NEWLINE); -  for (node = listhead (ospf->maxage_lsa); node; nextnode (node)) -    if ((lsa = node->data) != NULL) -      { -	vty_out (vty, "Link type: %d%s", lsa->data->type, VTY_NEWLINE); -	vty_out (vty, "Link State ID: %s%s", -		 inet_ntoa (lsa->data->id), VTY_NEWLINE); -	vty_out (vty, "Advertising Router: %s%s", -		 inet_ntoa (lsa->data->adv_router), VTY_NEWLINE); -	vty_out (vty, "LSA lock count: %d%s", lsa->lock, VTY_NEWLINE); -	vty_out (vty, "%s", VTY_NEWLINE); -      } +  for (ALL_LIST_ELEMENTS_RO (ospf->maxage_lsa, node, lsa)) +    { +      vty_out (vty, "Link type: %d%s", lsa->data->type, VTY_NEWLINE); +      vty_out (vty, "Link State ID: %s%s", +               inet_ntoa (lsa->data->id), VTY_NEWLINE); +      vty_out (vty, "Advertising Router: %s%s", +               inet_ntoa (lsa->data->adv_router), VTY_NEWLINE); +      vty_out (vty, "LSA lock count: %d%s", lsa->lock, VTY_NEWLINE); +      vty_out (vty, "%s", VTY_NEWLINE); +    }  }  #define OSPF_LSA_TYPE_NSSA_DESC      "NSSA external link state\n" @@ -6509,7 +6502,7 @@ show_ip_ospf_route_network (struct vty *vty, struct route_table *rt)  {    struct route_node *rn;    struct ospf_route *or; -  struct listnode *pnode; +  struct listnode *pnode, *pnnode;    struct ospf_path *path;    vty_out (vty, "============ OSPF network routing table ============%s", @@ -6540,7 +6533,7 @@ show_ip_ospf_route_network (struct vty *vty, struct route_table *rt)  	  }          if (or->type == OSPF_DESTINATION_NETWORK) -          LIST_LOOP (or->paths, path, pnode) +          for (ALL_LIST_ELEMENTS (or->paths, pnode, pnnode, path))              {                if (path->oi != NULL)                  { @@ -6562,7 +6555,8 @@ show_ip_ospf_route_router (struct vty *vty, struct route_table *rtrs)  {    struct route_node *rn;    struct ospf_route *or; -  struct listnode *pn, *nn; +  struct listnode *pnode; +  struct listnode *node;    struct ospf_path *path;    vty_out (vty, "============ OSPF router routing table =============%s", @@ -6574,33 +6568,32 @@ show_ip_ospf_route_router (struct vty *vty, struct route_table *rtrs)  	vty_out (vty, "R    %-15s    ", inet_ntoa (rn->p.u.prefix4)); -	for (nn = listhead ((struct list *) rn->info); nn; nextnode (nn)) -	  if ((or = getdata (nn)) != NULL) -	    { -	      if (flag++) -            vty_out (vty, "%24s", ""); - -	      /* Show path. */ -	      vty_out (vty, "%s [%d] area: %s", -		       (or->path_type == OSPF_PATH_INTER_AREA ? "IA" : "  "), -		       or->cost, inet_ntoa (or->u.std.area_id)); -	      /* Show flags. */ -	      vty_out (vty, "%s%s%s", -		       (or->u.std.flags & ROUTER_LSA_BORDER ? ", ABR" : ""), -		       (or->u.std.flags & ROUTER_LSA_EXTERNAL ? ", ASBR" : ""), -		       VTY_NEWLINE); -		     -		    LIST_LOOP (or->paths, path, pn) -		      { -		        if (path->nexthop.s_addr == 0) -		          vty_out (vty, "%24s   directly attached to %s%s", -		                   "", path->oi->ifp->name, VTY_NEWLINE); -		        else -		          vty_out (vty, "%24s   via %s, %s%s", "", -		                   inet_ntoa (path->nexthop), path->oi->ifp->name, -		                              VTY_NEWLINE); -		      } -	    } +	for (ALL_LIST_ELEMENTS_RO ((struct list *)rn->info, node, or)) +          { +            if (flag++) +          vty_out (vty, "%24s", ""); + +            /* Show path. */ +            vty_out (vty, "%s [%d] area: %s", +                     (or->path_type == OSPF_PATH_INTER_AREA ? "IA" : "  "), +                     or->cost, inet_ntoa (or->u.std.area_id)); +            /* Show flags. */ +            vty_out (vty, "%s%s%s", +                     (or->u.std.flags & ROUTER_LSA_BORDER ? ", ABR" : ""), +                     (or->u.std.flags & ROUTER_LSA_EXTERNAL ? ", ASBR" : ""), +                     VTY_NEWLINE); +                   +                  for (ALL_LIST_ELEMENTS_RO (or->paths, pnode, path)) +                    { +                      if (path->nexthop.s_addr == 0) +                        vty_out (vty, "%24s   directly attached to %s%s", +                                 "", path->oi->ifp->name, VTY_NEWLINE); +                      else +                        vty_out (vty, "%24s   via %s, %s%s", "", +                                 inet_ntoa (path->nexthop), path->oi->ifp->name, +                                            VTY_NEWLINE); +                    } +          }        }    vty_out (vty, "%s", VTY_NEWLINE);  } @@ -6610,7 +6603,7 @@ show_ip_ospf_route_external (struct vty *vty, struct route_table *rt)  {    struct route_node *rn;    struct ospf_route *er; -  struct listnode *pnode; +  struct listnode *pnode, *pnnode;    struct ospf_path *path;    vty_out (vty, "============ OSPF external routing table ===========%s", @@ -6634,7 +6627,7 @@ show_ip_ospf_route_external (struct vty *vty, struct route_table *rt)  	    break;  	  } -        LIST_LOOP (er->paths, path, pnode) +        for (ALL_LIST_ELEMENTS (er->paths, pnode, pnnode, path))            {              if (path->oi != NULL)                { @@ -6770,10 +6763,8 @@ config_write_interface (struct vty *vty)    struct route_node *rn = NULL;    struct ospf_if_params *params; -  for (n1 = listhead (iflist); n1; nextnode (n1)) +  for (ALL_LIST_ELEMENTS_RO (iflist, n1, ifp))      { -      ifp = getdata (n1); -        if (memcmp (ifp->name, "VLINK", 5) == 0)  	continue; @@ -6849,9 +6840,8 @@ config_write_interface (struct vty *vty)  	  }  	/* Cryptographic Authentication Key print. */ -	for (n2 = listhead (params->auth_crypt); n2; nextnode (n2)) +	for (ALL_LIST_ELEMENTS_RO (params->auth_crypt, n2, ck))  	  { -	    ck = getdata (n2);  	    vty_out (vty, " ip ospf message-digest-key %d md5 %s",  		     ck->key_id, ck->auth_key);  	    if (params != IF_DEF_PARAMS (ifp)) @@ -6977,12 +6967,12 @@ int  config_write_ospf_area (struct vty *vty, struct ospf *ospf)  {    struct listnode *node; +  struct ospf_area *area;    u_char buf[INET_ADDRSTRLEN];    /* Area configuration print. */ -  for (node = listhead (ospf->areas); node; nextnode (node)) +  for (ALL_LIST_ELEMENTS_RO (ospf->areas, node, area))      { -      struct ospf_area *area = getdata (node);        struct route_node *rn1;        area_id2str ((char *) buf, INET_ADDRSTRLEN, area); @@ -7103,14 +7093,14 @@ int  config_write_virtual_link (struct vty *vty, struct ospf *ospf)  {    struct listnode *node; +  struct ospf_vl_data *vl_data;    u_char buf[INET_ADDRSTRLEN];    /* Virtual-Link print */ -  for (node = listhead (ospf->vlinks); node; nextnode (node)) +  for (ALL_LIST_ELEMENTS_RO (ospf->vlinks, node, vl_data))      {        struct listnode *n2;        struct crypt_key *ck; -      struct ospf_vl_data *vl_data = getdata (node);        struct ospf_interface *oi;        if (vl_data != NULL) @@ -7148,14 +7138,13 @@ config_write_virtual_link (struct vty *vty, struct ospf *ospf)  		     IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_simple,  		     VTY_NEWLINE);  	  /* md5 keys */ -	  for (n2 = listhead (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_crypt); n2; nextnode (n2)) -	    { -	      ck = getdata (n2); -	      vty_out (vty, " area %s virtual-link %s message-digest-key %d md5 %s%s", -		       buf, -		       inet_ntoa (vl_data->vl_peer), -		       ck->key_id, ck->auth_key, VTY_NEWLINE); -	    } +	  for (ALL_LIST_ELEMENTS_RO (IF_DEF_PARAMS (vl_data->vl_oi->ifp)->auth_crypt, +                                     n2, ck)) +            vty_out (vty, " area %s virtual-link %s" +                     " message-digest-key %d md5 %s%s", +                     buf, +                     inet_ntoa (vl_data->vl_peer), +                     ck->key_id, ck->auth_key, VTY_NEWLINE);  	}      } @@ -7281,6 +7270,8 @@ int  ospf_config_write (struct vty *vty)  {    struct ospf *ospf; +  struct interface *ifp; +  struct ospf_interface *oi;    struct listnode *node;    int write = 0; @@ -7329,28 +7320,17 @@ ospf_config_write (struct vty *vty)        config_write_ospf_redistribute (vty, ospf);        /* passive-interface print. */ -      for (node = listhead (om->iflist); node; nextnode (node)) -        { -          struct interface *ifp = getdata (node); - -	  if (!ifp) -	    continue; -	  if (IF_DEF_PARAMS (ifp)->passive_interface == OSPF_IF_PASSIVE) -	    vty_out (vty, " passive-interface %s%s", -		     ifp->name, VTY_NEWLINE); -        } - -      for (node = listhead (ospf->oiflist); node; nextnode (node)) -        { -          struct ospf_interface *oi = getdata (node); - -	  if (OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface) && -	      oi->params->passive_interface == OSPF_IF_PASSIVE) -      vty_out (vty, " passive-interface %s %s%s", -               oi->ifp->name, -               inet_ntoa (oi->address->u.prefix4), VTY_NEWLINE); -        } - +      for (ALL_LIST_ELEMENTS_RO (om->iflist, node, ifp)) +        if (IF_DEF_PARAMS (ifp)->passive_interface == OSPF_IF_PASSIVE) +          vty_out (vty, " passive-interface %s%s", +                   ifp->name, VTY_NEWLINE); + +      for (ALL_LIST_ELEMENTS_RO (ospf->oiflist, node, oi)) +        if (OSPF_IF_PARAM_CONFIGURED (oi->params, passive_interface) && +            oi->params->passive_interface == OSPF_IF_PASSIVE) +          vty_out (vty, " passive-interface %s %s%s", +                   oi->ifp->name, +                   inet_ntoa (oi->address->u.prefix4), VTY_NEWLINE);        /* Network area print. */        config_write_network_area (vty, ospf); | 
