diff options
Diffstat (limited to 'bgpd/bgp_debug.c')
| -rw-r--r-- | bgpd/bgp_debug.c | 3064 | 
1 files changed, 1473 insertions, 1591 deletions
diff --git a/bgpd/bgp_debug.c b/bgpd/bgp_debug.c index f9e67d96ca..1e7567299c 100644 --- a/bgpd/bgp_debug.c +++ b/bgpd/bgp_debug.c @@ -78,504 +78,465 @@ struct list *bgp_debug_bestpath_prefixes = NULL;  struct list *bgp_debug_zebra_prefixes = NULL;  /* messages for BGP-4 status */ -const struct message bgp_status_msg[] =  -{ -  { Idle, "Idle" }, -  { Connect, "Connect" }, -  { Active, "Active" }, -  { OpenSent, "OpenSent" }, -  { OpenConfirm, "OpenConfirm" }, -  { Established, "Established" }, -  { Clearing,    "Clearing"    }, -  { Deleted,     "Deleted"     }, -  { 0 } -}; +const struct message bgp_status_msg[] = {{Idle, "Idle"}, +					 {Connect, "Connect"}, +					 {Active, "Active"}, +					 {OpenSent, "OpenSent"}, +					 {OpenConfirm, "OpenConfirm"}, +					 {Established, "Established"}, +					 {Clearing, "Clearing"}, +					 {Deleted, "Deleted"}, +					 {0}};  /* BGP message type string. */ -const char *bgp_type_str[] = -{ -  NULL, -  "OPEN", -  "UPDATE", -  "NOTIFICATION", -  "KEEPALIVE", -  "ROUTE-REFRESH", -  "CAPABILITY" -}; +const char *bgp_type_str[] = {NULL,	   "OPEN",      "UPDATE", +			      "NOTIFICATION", "KEEPALIVE", "ROUTE-REFRESH", +			      "CAPABILITY"};  /* message for BGP-4 Notify */ -static const struct message bgp_notify_msg[] =  -{ -  { BGP_NOTIFY_HEADER_ERR, "Message Header Error"}, -  { BGP_NOTIFY_OPEN_ERR, "OPEN Message Error"}, -  { BGP_NOTIFY_UPDATE_ERR, "UPDATE Message Error"}, -  { BGP_NOTIFY_HOLD_ERR, "Hold Timer Expired"}, -  { BGP_NOTIFY_FSM_ERR, "Neighbor Events Error"}, -  { BGP_NOTIFY_CEASE, "Cease"}, -  { BGP_NOTIFY_CAPABILITY_ERR, "CAPABILITY Message Error"}, -  { 0 } -}; - -static const struct message bgp_notify_head_msg[] =  -{ -  { BGP_NOTIFY_HEADER_NOT_SYNC, "/Connection Not Synchronized"}, -  { BGP_NOTIFY_HEADER_BAD_MESLEN, "/Bad Message Length"}, -  { BGP_NOTIFY_HEADER_BAD_MESTYPE, "/Bad Message Type"}, -  { 0 } -}; - -static const struct message bgp_notify_open_msg[] =  -{ -  { BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"}, -  { BGP_NOTIFY_OPEN_UNSUP_VERSION, "/Unsupported Version Number" }, -  { BGP_NOTIFY_OPEN_BAD_PEER_AS, "/Bad Peer AS"}, -  { BGP_NOTIFY_OPEN_BAD_BGP_IDENT, "/Bad BGP Identifier"}, -  { BGP_NOTIFY_OPEN_UNSUP_PARAM, "/Unsupported Optional Parameter"}, -  { BGP_NOTIFY_OPEN_AUTH_FAILURE, "/Authentication Failure"}, -  { BGP_NOTIFY_OPEN_UNACEP_HOLDTIME, "/Unacceptable Hold Time"},  -  { BGP_NOTIFY_OPEN_UNSUP_CAPBL, "/Unsupported Capability"}, -  { 0 } -}; - -static const struct message bgp_notify_update_msg[] =  -{ -  { BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"}, -  { BGP_NOTIFY_UPDATE_MAL_ATTR, "/Malformed Attribute List"}, -  { BGP_NOTIFY_UPDATE_UNREC_ATTR, "/Unrecognized Well-known Attribute"}, -  { BGP_NOTIFY_UPDATE_MISS_ATTR, "/Missing Well-known Attribute"}, -  { BGP_NOTIFY_UPDATE_ATTR_FLAG_ERR, "/Attribute Flags Error"}, -  { BGP_NOTIFY_UPDATE_ATTR_LENG_ERR, "/Attribute Length Error"}, -  { BGP_NOTIFY_UPDATE_INVAL_ORIGIN, "/Invalid ORIGIN Attribute"}, -  { BGP_NOTIFY_UPDATE_AS_ROUTE_LOOP, "/AS Routing Loop"}, -  { BGP_NOTIFY_UPDATE_INVAL_NEXT_HOP, "/Invalid NEXT_HOP Attribute"}, -  { BGP_NOTIFY_UPDATE_OPT_ATTR_ERR, "/Optional Attribute Error"}, -  { BGP_NOTIFY_UPDATE_INVAL_NETWORK, "/Invalid Network Field"}, -  { BGP_NOTIFY_UPDATE_MAL_AS_PATH, "/Malformed AS_PATH"}, -  { 0 } -}; - -static const struct message bgp_notify_cease_msg[] = -{ -  { BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"}, -  { BGP_NOTIFY_CEASE_MAX_PREFIX, "/Maximum Number of Prefixes Reached"}, -  { BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN, "/Administratively Shutdown"}, -  { BGP_NOTIFY_CEASE_PEER_UNCONFIG, "/Peer Unconfigured"}, -  { BGP_NOTIFY_CEASE_ADMIN_RESET, "/Administratively Reset"}, -  { BGP_NOTIFY_CEASE_CONNECT_REJECT, "/Connection Rejected"}, -  { BGP_NOTIFY_CEASE_CONFIG_CHANGE, "/Other Configuration Change"}, -  { BGP_NOTIFY_CEASE_COLLISION_RESOLUTION, "/Connection collision resolution"}, -  { BGP_NOTIFY_CEASE_OUT_OF_RESOURCE, "/Out of Resource"}, -  { 0 } -}; - -static const struct message bgp_notify_capability_msg[] =  -{ -  { BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"}, -  { BGP_NOTIFY_CAPABILITY_INVALID_ACTION, "/Invalid Action Value" }, -  { BGP_NOTIFY_CAPABILITY_INVALID_LENGTH, "/Invalid Capability Length"}, -  { BGP_NOTIFY_CAPABILITY_MALFORMED_CODE, "/Malformed Capability Value"}, -  { 0 } -}; +static const struct message bgp_notify_msg[] = { +	{BGP_NOTIFY_HEADER_ERR, "Message Header Error"}, +	{BGP_NOTIFY_OPEN_ERR, "OPEN Message Error"}, +	{BGP_NOTIFY_UPDATE_ERR, "UPDATE Message Error"}, +	{BGP_NOTIFY_HOLD_ERR, "Hold Timer Expired"}, +	{BGP_NOTIFY_FSM_ERR, "Neighbor Events Error"}, +	{BGP_NOTIFY_CEASE, "Cease"}, +	{BGP_NOTIFY_CAPABILITY_ERR, "CAPABILITY Message Error"}, +	{0}}; + +static const struct message bgp_notify_head_msg[] = { +	{BGP_NOTIFY_HEADER_NOT_SYNC, "/Connection Not Synchronized"}, +	{BGP_NOTIFY_HEADER_BAD_MESLEN, "/Bad Message Length"}, +	{BGP_NOTIFY_HEADER_BAD_MESTYPE, "/Bad Message Type"}, +	{0}}; + +static const struct message bgp_notify_open_msg[] = { +	{BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"}, +	{BGP_NOTIFY_OPEN_UNSUP_VERSION, "/Unsupported Version Number"}, +	{BGP_NOTIFY_OPEN_BAD_PEER_AS, "/Bad Peer AS"}, +	{BGP_NOTIFY_OPEN_BAD_BGP_IDENT, "/Bad BGP Identifier"}, +	{BGP_NOTIFY_OPEN_UNSUP_PARAM, "/Unsupported Optional Parameter"}, +	{BGP_NOTIFY_OPEN_AUTH_FAILURE, "/Authentication Failure"}, +	{BGP_NOTIFY_OPEN_UNACEP_HOLDTIME, "/Unacceptable Hold Time"}, +	{BGP_NOTIFY_OPEN_UNSUP_CAPBL, "/Unsupported Capability"}, +	{0}}; + +static const struct message bgp_notify_update_msg[] = { +	{BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"}, +	{BGP_NOTIFY_UPDATE_MAL_ATTR, "/Malformed Attribute List"}, +	{BGP_NOTIFY_UPDATE_UNREC_ATTR, "/Unrecognized Well-known Attribute"}, +	{BGP_NOTIFY_UPDATE_MISS_ATTR, "/Missing Well-known Attribute"}, +	{BGP_NOTIFY_UPDATE_ATTR_FLAG_ERR, "/Attribute Flags Error"}, +	{BGP_NOTIFY_UPDATE_ATTR_LENG_ERR, "/Attribute Length Error"}, +	{BGP_NOTIFY_UPDATE_INVAL_ORIGIN, "/Invalid ORIGIN Attribute"}, +	{BGP_NOTIFY_UPDATE_AS_ROUTE_LOOP, "/AS Routing Loop"}, +	{BGP_NOTIFY_UPDATE_INVAL_NEXT_HOP, "/Invalid NEXT_HOP Attribute"}, +	{BGP_NOTIFY_UPDATE_OPT_ATTR_ERR, "/Optional Attribute Error"}, +	{BGP_NOTIFY_UPDATE_INVAL_NETWORK, "/Invalid Network Field"}, +	{BGP_NOTIFY_UPDATE_MAL_AS_PATH, "/Malformed AS_PATH"}, +	{0}}; + +static const struct message bgp_notify_cease_msg[] = { +	{BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"}, +	{BGP_NOTIFY_CEASE_MAX_PREFIX, "/Maximum Number of Prefixes Reached"}, +	{BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN, "/Administratively Shutdown"}, +	{BGP_NOTIFY_CEASE_PEER_UNCONFIG, "/Peer Unconfigured"}, +	{BGP_NOTIFY_CEASE_ADMIN_RESET, "/Administratively Reset"}, +	{BGP_NOTIFY_CEASE_CONNECT_REJECT, "/Connection Rejected"}, +	{BGP_NOTIFY_CEASE_CONFIG_CHANGE, "/Other Configuration Change"}, +	{BGP_NOTIFY_CEASE_COLLISION_RESOLUTION, +	 "/Connection collision resolution"}, +	{BGP_NOTIFY_CEASE_OUT_OF_RESOURCE, "/Out of Resource"}, +	{0}}; + +static const struct message bgp_notify_capability_msg[] = { +	{BGP_NOTIFY_SUBCODE_UNSPECIFIC, "/Unspecific"}, +	{BGP_NOTIFY_CAPABILITY_INVALID_ACTION, "/Invalid Action Value"}, +	{BGP_NOTIFY_CAPABILITY_INVALID_LENGTH, "/Invalid Capability Length"}, +	{BGP_NOTIFY_CAPABILITY_MALFORMED_CODE, "/Malformed Capability Value"}, +	{0}};  /* Origin strings. */ -const char *bgp_origin_str[] = {"i","e","?"}; -const char *bgp_origin_long_str[] = {"IGP","EGP","incomplete"}; +const char *bgp_origin_str[] = {"i", "e", "?"}; +const char *bgp_origin_long_str[] = {"IGP", "EGP", "incomplete"};  /* Given a string return a pointer the corresponding peer structure */ -static struct peer * -bgp_find_peer (struct vty *vty, const char *peer_str) +static struct peer *bgp_find_peer(struct vty *vty, const char *peer_str)  { -  struct bgp *bgp = VTY_GET_CONTEXT(bgp); -  int ret; -  union sockunion su; -  struct peer *peer; - -  if (!bgp) { -      return NULL; -  } -  ret = str2sockunion (peer_str, &su); - -  /* 'swpX' string */ -  if (ret < 0) -    { -      peer = peer_lookup_by_conf_if (bgp, peer_str); - -      if (!peer) -        peer = peer_lookup_by_hostname (bgp, peer_str); - -      return peer; -    } -  else -    return peer_lookup (bgp, &su); +	struct bgp *bgp = VTY_GET_CONTEXT(bgp); +	int ret; +	union sockunion su; +	struct peer *peer; + +	if (!bgp) { +		return NULL; +	} +	ret = str2sockunion(peer_str, &su); + +	/* 'swpX' string */ +	if (ret < 0) { +		peer = peer_lookup_by_conf_if(bgp, peer_str); + +		if (!peer) +			peer = peer_lookup_by_hostname(bgp, peer_str); + +		return peer; +	} else +		return peer_lookup(bgp, &su);  } -static void -bgp_debug_list_free(struct list *list) +static void bgp_debug_list_free(struct list *list)  { -  struct bgp_debug_filter *filter; -  struct listnode *node, *nnode; +	struct bgp_debug_filter *filter; +	struct listnode *node, *nnode; -  if (list) -    for (ALL_LIST_ELEMENTS (list, node, nnode, filter)) -      { -        listnode_delete (list, filter); +	if (list) +		for (ALL_LIST_ELEMENTS(list, node, nnode, filter)) { +			listnode_delete(list, filter); -        if (filter->p) -          prefix_free(filter->p); +			if (filter->p) +				prefix_free(filter->p); -        if (filter->host) -          XFREE (MTYPE_BGP_DEBUG_STR, filter->host); +			if (filter->host) +				XFREE(MTYPE_BGP_DEBUG_STR, filter->host); -        XFREE (MTYPE_BGP_DEBUG_FILTER, filter); -      } +			XFREE(MTYPE_BGP_DEBUG_FILTER, filter); +		}  }  /* Print the desc along with a list of peers/prefixes this debug is   * enabled for */ -static void -bgp_debug_list_print (struct vty *vty, const char *desc, struct list *list) -{ -  struct bgp_debug_filter *filter; -  struct listnode *node, *nnode; -  char buf[INET6_ADDRSTRLEN]; - -  vty_out (vty, "%s", desc); - -  if (list && !list_isempty(list)) -    { -      vty_out (vty, " for"); -      for (ALL_LIST_ELEMENTS (list, node, nnode, filter)) -        { -          if (filter->host) -            vty_out (vty, " %s", filter->host); - -          if (filter->p) -            vty_out (vty, " %s/%d", -                     inet_ntop (filter->p->family, &filter->p->u.prefix, buf, INET6_ADDRSTRLEN), -                     filter->p->prefixlen); -        } -    } - -  vty_out (vty, "\n"); +static void bgp_debug_list_print(struct vty *vty, const char *desc, +				 struct list *list) +{ +	struct bgp_debug_filter *filter; +	struct listnode *node, *nnode; +	char buf[INET6_ADDRSTRLEN]; + +	vty_out(vty, "%s", desc); + +	if (list && !list_isempty(list)) { +		vty_out(vty, " for"); +		for (ALL_LIST_ELEMENTS(list, node, nnode, filter)) { +			if (filter->host) +				vty_out(vty, " %s", filter->host); + +			if (filter->p) +				vty_out(vty, " %s/%d", +					inet_ntop(filter->p->family, +						  &filter->p->u.prefix, buf, +						  INET6_ADDRSTRLEN), +					filter->p->prefixlen); +		} +	} + +	vty_out(vty, "\n");  }  /* Print the command to enable the debug for each peer/prefix this debug is   * enabled for   */ -static int -bgp_debug_list_conf_print (struct vty *vty, const char *desc, struct list *list) -{ -  struct bgp_debug_filter *filter; -  struct listnode *node, *nnode; -  char buf[INET6_ADDRSTRLEN]; -  int write = 0; - -  if (list && !list_isempty(list)) -    { -      for (ALL_LIST_ELEMENTS (list, node, nnode, filter)) -        { -          if (filter->host) -            { -              vty_out (vty, "%s %s\n", desc, filter->host); -              write++; -            } - - -          if (filter->p) -            { -              vty_out (vty, "%s %s/%d\n", desc, -                       inet_ntop (filter->p->family, &filter->p->u.prefix, buf, INET6_ADDRSTRLEN), -                       filter->p->prefixlen); -              write++; -            } -        } -    } - -    if (!write) -      { -        vty_out (vty, "%s\n", desc); -        write++; -      } - -    return write; +static int bgp_debug_list_conf_print(struct vty *vty, const char *desc, +				     struct list *list) +{ +	struct bgp_debug_filter *filter; +	struct listnode *node, *nnode; +	char buf[INET6_ADDRSTRLEN]; +	int write = 0; + +	if (list && !list_isempty(list)) { +		for (ALL_LIST_ELEMENTS(list, node, nnode, filter)) { +			if (filter->host) { +				vty_out(vty, "%s %s\n", desc, filter->host); +				write++; +			} + + +			if (filter->p) { +				vty_out(vty, "%s %s/%d\n", desc, +					inet_ntop(filter->p->family, +						  &filter->p->u.prefix, buf, +						  INET6_ADDRSTRLEN), +					filter->p->prefixlen); +				write++; +			} +		} +	} + +	if (!write) { +		vty_out(vty, "%s\n", desc); +		write++; +	} + +	return write;  } -static void -bgp_debug_list_add_entry(struct list *list, const char *host, const struct prefix *p) +static void bgp_debug_list_add_entry(struct list *list, const char *host, +				     const struct prefix *p)  { -  struct bgp_debug_filter *filter; - -  filter = XCALLOC (MTYPE_BGP_DEBUG_FILTER, sizeof (struct bgp_debug_filter)); - -  if (host) -    { -      filter->host = XSTRDUP (MTYPE_BGP_DEBUG_STR, host); -      filter->p = NULL; -    } -  else if (p) -    { -      filter->host = NULL; -      filter->p = prefix_new(); -      prefix_copy (filter->p, p); -    } - -  listnode_add(list, filter); +	struct bgp_debug_filter *filter; + +	filter = XCALLOC(MTYPE_BGP_DEBUG_FILTER, +			 sizeof(struct bgp_debug_filter)); + +	if (host) { +		filter->host = XSTRDUP(MTYPE_BGP_DEBUG_STR, host); +		filter->p = NULL; +	} else if (p) { +		filter->host = NULL; +		filter->p = prefix_new(); +		prefix_copy(filter->p, p); +	} + +	listnode_add(list, filter);  } -static int -bgp_debug_list_remove_entry(struct list *list, const char *host, struct prefix *p) -{ -  struct bgp_debug_filter *filter; -  struct listnode *node, *nnode; - -  for (ALL_LIST_ELEMENTS (list, node, nnode, filter)) -    { -      if (host && strcmp (filter->host, host) == 0) -        { -          listnode_delete (list, filter); -          XFREE (MTYPE_BGP_DEBUG_STR, filter->host); -          XFREE (MTYPE_BGP_DEBUG_FILTER, filter); -          return 1; -        } -      else if (p && filter->p->prefixlen == p->prefixlen && prefix_match(filter->p, p)) -        { -          listnode_delete (list, filter); -          prefix_free (filter->p); -          XFREE (MTYPE_BGP_DEBUG_FILTER, filter); -          return 1; -        } -    } - -  return 0; +static int bgp_debug_list_remove_entry(struct list *list, const char *host, +				       struct prefix *p) +{ +	struct bgp_debug_filter *filter; +	struct listnode *node, *nnode; + +	for (ALL_LIST_ELEMENTS(list, node, nnode, filter)) { +		if (host && strcmp(filter->host, host) == 0) { +			listnode_delete(list, filter); +			XFREE(MTYPE_BGP_DEBUG_STR, filter->host); +			XFREE(MTYPE_BGP_DEBUG_FILTER, filter); +			return 1; +		} else if (p && filter->p->prefixlen == p->prefixlen +			   && prefix_match(filter->p, p)) { +			listnode_delete(list, filter); +			prefix_free(filter->p); +			XFREE(MTYPE_BGP_DEBUG_FILTER, filter); +			return 1; +		} +	} + +	return 0;  } -static int -bgp_debug_list_has_entry(struct list *list, const char *host, const struct prefix *p) -{ -  struct bgp_debug_filter *filter; -  struct listnode *node, *nnode; - -  for (ALL_LIST_ELEMENTS (list, node, nnode, filter)) -    { -      if (host) -        { -          if (strcmp (filter->host, host) == 0) -            { -              return 1; -            } -        } -      else if (p) -        { -          if (filter->p->prefixlen == p->prefixlen && prefix_match(filter->p, p)) -            { -              return 1; -            } -        } -    } - -  return 0; +static int bgp_debug_list_has_entry(struct list *list, const char *host, +				    const struct prefix *p) +{ +	struct bgp_debug_filter *filter; +	struct listnode *node, *nnode; + +	for (ALL_LIST_ELEMENTS(list, node, nnode, filter)) { +		if (host) { +			if (strcmp(filter->host, host) == 0) { +				return 1; +			} +		} else if (p) { +			if (filter->p->prefixlen == p->prefixlen +			    && prefix_match(filter->p, p)) { +				return 1; +			} +		} +	} + +	return 0;  } -int -bgp_debug_peer_updout_enabled(char *host) +int bgp_debug_peer_updout_enabled(char *host)  { -  return (bgp_debug_list_has_entry(bgp_debug_update_out_peers, host, NULL)); +	return (bgp_debug_list_has_entry(bgp_debug_update_out_peers, host, +					 NULL));  }  /* Dump attribute. */ -int -bgp_dump_attr (struct attr *attr, char *buf, size_t size) +int bgp_dump_attr(struct attr *attr, char *buf, size_t size)  { -  char addrbuf[BUFSIZ]; - -  if (! attr) -    return 0; - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP))) -    snprintf (buf, size, "nexthop %s", inet_ntoa (attr->nexthop)); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_ORIGIN))) -    snprintf (buf + strlen (buf), size - strlen (buf), ", origin %s", -	      bgp_origin_str[attr->origin]); - -  /* Add MP case. */ -  if (attr->mp_nexthop_len == BGP_ATTR_NHLEN_IPV6_GLOBAL -      || attr->mp_nexthop_len == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) -    snprintf (buf + strlen (buf), size - strlen (buf), ", mp_nexthop %s", -              inet_ntop (AF_INET6, &attr->mp_nexthop_global, -                         addrbuf, BUFSIZ)); - -  if (attr->mp_nexthop_len == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) -    snprintf (buf + strlen (buf), size - strlen (buf), "(%s)", -              inet_ntop (AF_INET6, &attr->mp_nexthop_local, -                         addrbuf, BUFSIZ)); - -  if (attr->mp_nexthop_len == BGP_ATTR_NHLEN_IPV4) -    snprintf (buf, size, "nexthop %s", inet_ntoa (attr->nexthop)); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_LOCAL_PREF))) -    snprintf (buf + strlen (buf), size - strlen (buf), ", localpref %u", -	      attr->local_pref); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_MULTI_EXIT_DISC))) -    snprintf (buf + strlen (buf), size - strlen (buf), ", metric %u", -	      attr->med); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_COMMUNITIES))) -    snprintf (buf + strlen (buf), size - strlen (buf), ", community %s", -	      community_str (attr->community)); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_EXT_COMMUNITIES))) -    snprintf (buf + strlen (buf), size - strlen (buf), ", extcommunity %s", -	      ecommunity_str (attr->ecommunity)); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_ATOMIC_AGGREGATE))) -    snprintf (buf + strlen (buf), size - strlen (buf), ", atomic-aggregate"); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_AGGREGATOR))) -    snprintf (buf + strlen (buf), size - strlen (buf), ", aggregated by %u %s", -	      attr->aggregator_as, -	      inet_ntoa (attr->aggregator_addr)); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_ORIGINATOR_ID))) -    snprintf (buf + strlen (buf), size - strlen (buf), ", originator %s", -	      inet_ntoa (attr->originator_id)); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_CLUSTER_LIST))) -    { -      int i; - -      snprintf (buf + strlen (buf), size - strlen (buf), ", clusterlist"); -      for (i = 0; i < attr->cluster->length / 4; i++) -	snprintf (buf + strlen (buf), size - strlen (buf), " %s", -		  inet_ntoa (attr->cluster->list[i])); -    } - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_AS_PATH))) -    snprintf (buf + strlen (buf), size - strlen (buf), ", path %s", -	      aspath_print (attr->aspath)); - -  if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_PREFIX_SID))) -    { -      if (attr->label_index != BGP_INVALID_LABEL_INDEX) -        snprintf (buf + strlen (buf), size - strlen (buf), ", label-index %u", -              attr->label_index); -    } - -  if (strlen (buf) > 1) -    return 1; -  else -    return 0; -} +	char addrbuf[BUFSIZ]; -const char * -bgp_notify_code_str (char code) -{ -  return lookup_msg (bgp_notify_msg, code, "Unrecognized Error Code"); +	if (!attr) +		return 0; + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_NEXT_HOP))) +		snprintf(buf, size, "nexthop %s", inet_ntoa(attr->nexthop)); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_ORIGIN))) +		snprintf(buf + strlen(buf), size - strlen(buf), ", origin %s", +			 bgp_origin_str[attr->origin]); + +	/* Add MP case. */ +	if (attr->mp_nexthop_len == BGP_ATTR_NHLEN_IPV6_GLOBAL +	    || attr->mp_nexthop_len == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) +		snprintf(buf + strlen(buf), size - strlen(buf), +			 ", mp_nexthop %s", +			 inet_ntop(AF_INET6, &attr->mp_nexthop_global, addrbuf, +				   BUFSIZ)); + +	if (attr->mp_nexthop_len == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) +		snprintf(buf + strlen(buf), size - strlen(buf), "(%s)", +			 inet_ntop(AF_INET6, &attr->mp_nexthop_local, addrbuf, +				   BUFSIZ)); + +	if (attr->mp_nexthop_len == BGP_ATTR_NHLEN_IPV4) +		snprintf(buf, size, "nexthop %s", inet_ntoa(attr->nexthop)); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_LOCAL_PREF))) +		snprintf(buf + strlen(buf), size - strlen(buf), +			 ", localpref %u", attr->local_pref); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MULTI_EXIT_DISC))) +		snprintf(buf + strlen(buf), size - strlen(buf), ", metric %u", +			 attr->med); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_COMMUNITIES))) +		snprintf(buf + strlen(buf), size - strlen(buf), +			 ", community %s", community_str(attr->community)); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_EXT_COMMUNITIES))) +		snprintf(buf + strlen(buf), size - strlen(buf), +			 ", extcommunity %s", ecommunity_str(attr->ecommunity)); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_ATOMIC_AGGREGATE))) +		snprintf(buf + strlen(buf), size - strlen(buf), +			 ", atomic-aggregate"); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_AGGREGATOR))) +		snprintf(buf + strlen(buf), size - strlen(buf), +			 ", aggregated by %u %s", attr->aggregator_as, +			 inet_ntoa(attr->aggregator_addr)); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_ORIGINATOR_ID))) +		snprintf(buf + strlen(buf), size - strlen(buf), +			 ", originator %s", inet_ntoa(attr->originator_id)); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_CLUSTER_LIST))) { +		int i; + +		snprintf(buf + strlen(buf), size - strlen(buf), +			 ", clusterlist"); +		for (i = 0; i < attr->cluster->length / 4; i++) +			snprintf(buf + strlen(buf), size - strlen(buf), " %s", +				 inet_ntoa(attr->cluster->list[i])); +	} + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_AS_PATH))) +		snprintf(buf + strlen(buf), size - strlen(buf), ", path %s", +			 aspath_print(attr->aspath)); + +	if (CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_PREFIX_SID))) { +		if (attr->label_index != BGP_INVALID_LABEL_INDEX) +			snprintf(buf + strlen(buf), size - strlen(buf), +				 ", label-index %u", attr->label_index); +	} + +	if (strlen(buf) > 1) +		return 1; +	else +		return 0;  } -const char * -bgp_notify_subcode_str (char code, char subcode) +const char *bgp_notify_code_str(char code)  { +	return lookup_msg(bgp_notify_msg, code, "Unrecognized Error Code"); +} -  switch (code) -    { -    case BGP_NOTIFY_HEADER_ERR: -      return lookup_msg (bgp_notify_head_msg, subcode, -                         "Unrecognized Error Subcode"); -    case BGP_NOTIFY_OPEN_ERR: -      return lookup_msg (bgp_notify_open_msg, subcode, -                         "Unrecognized Error Subcode"); -    case BGP_NOTIFY_UPDATE_ERR: -      return lookup_msg (bgp_notify_update_msg, subcode, -                         "Unrecognized Error Subcode"); -    case BGP_NOTIFY_HOLD_ERR: -      break; -    case BGP_NOTIFY_FSM_ERR: -      break; -    case BGP_NOTIFY_CEASE: -      return lookup_msg (bgp_notify_cease_msg, subcode, -                         "Unrecognized Error Subcode"); -    case BGP_NOTIFY_CAPABILITY_ERR: -      return lookup_msg (bgp_notify_capability_msg, subcode, -                         "Unrecognized Error Subcode"); -    } -  return ""; +const char *bgp_notify_subcode_str(char code, char subcode) +{ + +	switch (code) { +	case BGP_NOTIFY_HEADER_ERR: +		return lookup_msg(bgp_notify_head_msg, subcode, +				  "Unrecognized Error Subcode"); +	case BGP_NOTIFY_OPEN_ERR: +		return lookup_msg(bgp_notify_open_msg, subcode, +				  "Unrecognized Error Subcode"); +	case BGP_NOTIFY_UPDATE_ERR: +		return lookup_msg(bgp_notify_update_msg, subcode, +				  "Unrecognized Error Subcode"); +	case BGP_NOTIFY_HOLD_ERR: +		break; +	case BGP_NOTIFY_FSM_ERR: +		break; +	case BGP_NOTIFY_CEASE: +		return lookup_msg(bgp_notify_cease_msg, subcode, +				  "Unrecognized Error Subcode"); +	case BGP_NOTIFY_CAPABILITY_ERR: +		return lookup_msg(bgp_notify_capability_msg, subcode, +				  "Unrecognized Error Subcode"); +	} +	return "";  }  /* extract notify admin reason if correctly present */ -const char * -bgp_notify_admin_message(char *buf, size_t bufsz, u_char *data, size_t datalen) +const char *bgp_notify_admin_message(char *buf, size_t bufsz, u_char *data, +				     size_t datalen)  { -  if (!data || datalen < 1) -    return NULL; +	if (!data || datalen < 1) +		return NULL; -  u_char len = data[0]; -  if (len > 128 -      || len > datalen - 1) -    return NULL; +	u_char len = data[0]; +	if (len > 128 || len > datalen - 1) +		return NULL; -  return zlog_sanitize(buf, bufsz, data + 1, len); +	return zlog_sanitize(buf, bufsz, data + 1, len);  }  /* dump notify packet */ -void -bgp_notify_print(struct peer *peer, struct bgp_notify *bgp_notify, -                 const char *direct) -{ -  const char *subcode_str; -  const char *code_str; -  const char *msg_str = NULL; -  char msg_buf[1024]; - -  if (BGP_DEBUG (neighbor_events, NEIGHBOR_EVENTS) || bgp_flag_check (peer->bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES)) -    { -      code_str = bgp_notify_code_str(bgp_notify->code); -      subcode_str = bgp_notify_subcode_str(bgp_notify->code, bgp_notify->subcode); - -      if (bgp_notify->code == BGP_NOTIFY_CEASE -          && (bgp_notify->subcode == BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN -              || bgp_notify->subcode == BGP_NOTIFY_CEASE_ADMIN_RESET)) -        { -          msg_str = bgp_notify_admin_message(msg_buf, sizeof(msg_buf), -                                             bgp_notify->raw_data, bgp_notify->length); -        } - -      if (msg_str) -        { -          zlog_info ("%%NOTIFICATION: %s neighbor %s %d/%d (%s%s) \"%s\"", -                     strcmp (direct, "received") == 0 ? "received from" : "sent to", -                     peer->host, bgp_notify->code, bgp_notify->subcode, -                     code_str, subcode_str, msg_str); -        } -      else -        { -          msg_str = bgp_notify->data ? bgp_notify->data : ""; -          zlog_info ("%%NOTIFICATION: %s neighbor %s %d/%d (%s%s) %d bytes %s", -                     strcmp (direct, "received") == 0 ? "received from" : "sent to", -                     peer->host, bgp_notify->code, bgp_notify->subcode, -                     code_str, subcode_str, bgp_notify->length, msg_str); -        } -    } +void bgp_notify_print(struct peer *peer, struct bgp_notify *bgp_notify, +		      const char *direct) +{ +	const char *subcode_str; +	const char *code_str; +	const char *msg_str = NULL; +	char msg_buf[1024]; + +	if (BGP_DEBUG(neighbor_events, NEIGHBOR_EVENTS) +	    || bgp_flag_check(peer->bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES)) { +		code_str = bgp_notify_code_str(bgp_notify->code); +		subcode_str = bgp_notify_subcode_str(bgp_notify->code, +						     bgp_notify->subcode); + +		if (bgp_notify->code == BGP_NOTIFY_CEASE +		    && (bgp_notify->subcode == BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN +			|| bgp_notify->subcode +				   == BGP_NOTIFY_CEASE_ADMIN_RESET)) { +			msg_str = bgp_notify_admin_message( +				msg_buf, sizeof(msg_buf), bgp_notify->raw_data, +				bgp_notify->length); +		} + +		if (msg_str) { +			zlog_info( +				"%%NOTIFICATION: %s neighbor %s %d/%d (%s%s) \"%s\"", +				strcmp(direct, "received") == 0 +					? "received from" +					: "sent to", +				peer->host, bgp_notify->code, +				bgp_notify->subcode, code_str, subcode_str, +				msg_str); +		} else { +			msg_str = bgp_notify->data ? bgp_notify->data : ""; +			zlog_info( +				"%%NOTIFICATION: %s neighbor %s %d/%d (%s%s) %d bytes %s", +				strcmp(direct, "received") == 0 +					? "received from" +					: "sent to", +				peer->host, bgp_notify->code, +				bgp_notify->subcode, code_str, subcode_str, +				bgp_notify->length, msg_str); +		} +	}  } -static void -bgp_debug_clear_updgrp_update_dbg(struct bgp *bgp) +static void bgp_debug_clear_updgrp_update_dbg(struct bgp *bgp)  { -  if (!bgp) -    bgp = bgp_get_default(); -  update_group_walk (bgp, update_group_clear_update_dbg, NULL); +	if (!bgp) +		bgp = bgp_get_default(); +	update_group_walk(bgp, update_group_clear_update_dbg, NULL);  }  /* Debug option setting interface. */  unsigned long bgp_debug_option = 0; -int   -debug (unsigned int option) +int debug(unsigned int option)  { -  return bgp_debug_option & option;  +	return bgp_debug_option & option;  }  DEFUN (debug_bgp_as4, @@ -585,14 +546,13 @@ DEFUN (debug_bgp_as4,         BGP_STR         "BGP AS4 actions\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (as4, AS4); -  else -    { -      TERM_DEBUG_ON (as4, AS4); -      vty_out (vty, "BGP as4 debugging is on\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(as4, AS4); +	else { +		TERM_DEBUG_ON(as4, AS4); +		vty_out(vty, "BGP as4 debugging is on\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_as4, @@ -603,14 +563,13 @@ DEFUN (no_debug_bgp_as4,         BGP_STR         "BGP AS4 actions\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_OFF (as4, AS4); -  else -    { -      TERM_DEBUG_OFF (as4, AS4); -      vty_out (vty, "BGP as4 debugging is off\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_OFF(as4, AS4); +	else { +		TERM_DEBUG_OFF(as4, AS4); +		vty_out(vty, "BGP as4 debugging is off\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (debug_bgp_as4_segment, @@ -621,14 +580,13 @@ DEFUN (debug_bgp_as4_segment,         "BGP AS4 actions\n"         "BGP AS4 aspath segment handling\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (as4, AS4_SEGMENT); -  else -    { -      TERM_DEBUG_ON (as4, AS4_SEGMENT); -      vty_out (vty, "BGP as4 segment debugging is on\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(as4, AS4_SEGMENT); +	else { +		TERM_DEBUG_ON(as4, AS4_SEGMENT); +		vty_out(vty, "BGP as4 segment debugging is on\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_as4_segment, @@ -640,14 +598,13 @@ DEFUN (no_debug_bgp_as4_segment,         "BGP AS4 actions\n"         "BGP AS4 aspath segment handling\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_OFF (as4, AS4_SEGMENT); -  else -    { -      TERM_DEBUG_OFF (as4, AS4_SEGMENT); -      vty_out (vty, "BGP as4 segment debugging is off\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_OFF(as4, AS4_SEGMENT); +	else { +		TERM_DEBUG_OFF(as4, AS4_SEGMENT); +		vty_out(vty, "BGP as4 segment debugging is off\n"); +	} +	return CMD_SUCCESS;  }  /* debug bgp neighbor_events */ @@ -658,16 +615,15 @@ DEFUN (debug_bgp_neighbor_events,         BGP_STR         "BGP Neighbor Events\n")  { -  bgp_debug_list_free(bgp_debug_neighbor_events_peers); - -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (neighbor_events, NEIGHBOR_EVENTS); -  else -    { -      TERM_DEBUG_ON (neighbor_events, NEIGHBOR_EVENTS); -      vty_out (vty, "BGP neighbor-events debugging is on\n"); -    } -  return CMD_SUCCESS; +	bgp_debug_list_free(bgp_debug_neighbor_events_peers); + +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(neighbor_events, NEIGHBOR_EVENTS); +	else { +		TERM_DEBUG_ON(neighbor_events, NEIGHBOR_EVENTS); +		vty_out(vty, "BGP neighbor-events debugging is on\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (debug_bgp_neighbor_events_peer, @@ -680,29 +636,30 @@ DEFUN (debug_bgp_neighbor_events_peer,         "BGP IPv6 neighbor to debug\n"         "BGP neighbor on interface to debug\n")  { -  int idx_peer = 3; -  const char *host = argv[idx_peer]->arg; - -  if (!bgp_debug_neighbor_events_peers) -    bgp_debug_neighbor_events_peers = list_new (); - -  if (bgp_debug_list_has_entry(bgp_debug_neighbor_events_peers, host, NULL)) -    { -      vty_out (vty, "BGP neighbor-events debugging is already enabled for %s\n", -                 host); -      return CMD_SUCCESS; -    } - -  bgp_debug_list_add_entry(bgp_debug_neighbor_events_peers, host, NULL); - -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (neighbor_events, NEIGHBOR_EVENTS); -  else -    { -      TERM_DEBUG_ON (neighbor_events, NEIGHBOR_EVENTS); -      vty_out (vty, "BGP neighbor-events debugging is on for %s\n", host); -    } -  return CMD_SUCCESS; +	int idx_peer = 3; +	const char *host = argv[idx_peer]->arg; + +	if (!bgp_debug_neighbor_events_peers) +		bgp_debug_neighbor_events_peers = list_new(); + +	if (bgp_debug_list_has_entry(bgp_debug_neighbor_events_peers, host, +				     NULL)) { +		vty_out(vty, +			"BGP neighbor-events debugging is already enabled for %s\n", +			host); +		return CMD_SUCCESS; +	} + +	bgp_debug_list_add_entry(bgp_debug_neighbor_events_peers, host, NULL); + +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(neighbor_events, NEIGHBOR_EVENTS); +	else { +		TERM_DEBUG_ON(neighbor_events, NEIGHBOR_EVENTS); +		vty_out(vty, "BGP neighbor-events debugging is on for %s\n", +			host); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_neighbor_events, @@ -713,16 +670,15 @@ DEFUN (no_debug_bgp_neighbor_events,         BGP_STR         "Neighbor Events\n")  { -  bgp_debug_list_free(bgp_debug_neighbor_events_peers); - -  if (vty->node == CONFIG_NODE) -    DEBUG_OFF (neighbor_events, NEIGHBOR_EVENTS); -  else -    { -      TERM_DEBUG_OFF (neighbor_events, NEIGHBOR_EVENTS); -      vty_out (vty, "BGP neighbor-events debugging is off\n"); -    } -  return CMD_SUCCESS; +	bgp_debug_list_free(bgp_debug_neighbor_events_peers); + +	if (vty->node == CONFIG_NODE) +		DEBUG_OFF(neighbor_events, NEIGHBOR_EVENTS); +	else { +		TERM_DEBUG_OFF(neighbor_events, NEIGHBOR_EVENTS); +		vty_out(vty, "BGP neighbor-events debugging is off\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_neighbor_events_peer, @@ -736,30 +692,33 @@ DEFUN (no_debug_bgp_neighbor_events_peer,         "BGP IPv6 neighbor to debug\n"         "BGP neighbor on interface to debug\n")  { -  int idx_peer = 4; -  int found_peer = 0; -  const char *host = argv[idx_peer]->arg; - -  if (bgp_debug_neighbor_events_peers && !list_isempty(bgp_debug_neighbor_events_peers)) -    { -      found_peer = bgp_debug_list_remove_entry(bgp_debug_neighbor_events_peers, host, NULL); - -      if (list_isempty(bgp_debug_neighbor_events_peers)) -        { -          if (vty->node == CONFIG_NODE) -            DEBUG_OFF (neighbor_events, NEIGHBOR_EVENTS); -          else -            TERM_DEBUG_OFF (neighbor_events, NEIGHBOR_EVENTS); -        } -    } - -  if (found_peer) -    vty_out (vty, "BGP neighbor-events debugging is off for %s\n", host); -  else -    vty_out (vty, "BGP neighbor-events debugging was not enabled for %s\n", -               host); - -  return CMD_SUCCESS; +	int idx_peer = 4; +	int found_peer = 0; +	const char *host = argv[idx_peer]->arg; + +	if (bgp_debug_neighbor_events_peers +	    && !list_isempty(bgp_debug_neighbor_events_peers)) { +		found_peer = bgp_debug_list_remove_entry( +			bgp_debug_neighbor_events_peers, host, NULL); + +		if (list_isempty(bgp_debug_neighbor_events_peers)) { +			if (vty->node == CONFIG_NODE) +				DEBUG_OFF(neighbor_events, NEIGHBOR_EVENTS); +			else +				TERM_DEBUG_OFF(neighbor_events, +					       NEIGHBOR_EVENTS); +		} +	} + +	if (found_peer) +		vty_out(vty, "BGP neighbor-events debugging is off for %s\n", +			host); +	else +		vty_out(vty, +			"BGP neighbor-events debugging was not enabled for %s\n", +			host); + +	return CMD_SUCCESS;  }  /* debug bgp nht */ @@ -770,14 +729,13 @@ DEFUN (debug_bgp_nht,         BGP_STR         "BGP nexthop tracking events\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (nht, NHT); -  else -    { -      TERM_DEBUG_ON (nht, NHT); -      vty_out (vty, "BGP nexthop tracking debugging is on\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(nht, NHT); +	else { +		TERM_DEBUG_ON(nht, NHT); +		vty_out(vty, "BGP nexthop tracking debugging is on\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_nht, @@ -788,14 +746,13 @@ DEFUN (no_debug_bgp_nht,         BGP_STR         "BGP nexthop tracking events\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_OFF (nht, NHT); -  else -    { -      TERM_DEBUG_OFF (nht, NHT); -      vty_out (vty, "BGP nexthop tracking debugging is off\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_OFF(nht, NHT); +	else { +		TERM_DEBUG_OFF(nht, NHT); +		vty_out(vty, "BGP nexthop tracking debugging is off\n"); +	} +	return CMD_SUCCESS;  }  /* debug bgp keepalives */ @@ -806,16 +763,15 @@ DEFUN (debug_bgp_keepalive,         BGP_STR         "BGP keepalives\n")  { -  bgp_debug_list_free(bgp_debug_keepalive_peers); - -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (keepalive, KEEPALIVE); -  else -    { -      TERM_DEBUG_ON (keepalive, KEEPALIVE); -      vty_out (vty, "BGP keepalives debugging is on\n"); -    } -  return CMD_SUCCESS; +	bgp_debug_list_free(bgp_debug_keepalive_peers); + +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(keepalive, KEEPALIVE); +	else { +		TERM_DEBUG_ON(keepalive, KEEPALIVE); +		vty_out(vty, "BGP keepalives debugging is on\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (debug_bgp_keepalive_peer, @@ -828,29 +784,28 @@ DEFUN (debug_bgp_keepalive_peer,         "BGP IPv6 neighbor to debug\n"         "BGP neighbor on interface to debug\n")  { -  int idx_peer = 3; -  const char *host = argv[idx_peer]->arg; - -  if (!bgp_debug_keepalive_peers) -    bgp_debug_keepalive_peers = list_new (); - -  if (bgp_debug_list_has_entry(bgp_debug_keepalive_peers, host, NULL)) -    { -      vty_out (vty, "BGP keepalive debugging is already enabled for %s\n", -                 host); -      return CMD_SUCCESS; -    } - -  bgp_debug_list_add_entry(bgp_debug_keepalive_peers, host, NULL); - -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (keepalive, KEEPALIVE); -  else -    { -      TERM_DEBUG_ON (keepalive, KEEPALIVE); -      vty_out (vty, "BGP keepalives debugging is on for %s\n", host); -    } -  return CMD_SUCCESS; +	int idx_peer = 3; +	const char *host = argv[idx_peer]->arg; + +	if (!bgp_debug_keepalive_peers) +		bgp_debug_keepalive_peers = list_new(); + +	if (bgp_debug_list_has_entry(bgp_debug_keepalive_peers, host, NULL)) { +		vty_out(vty, +			"BGP keepalive debugging is already enabled for %s\n", +			host); +		return CMD_SUCCESS; +	} + +	bgp_debug_list_add_entry(bgp_debug_keepalive_peers, host, NULL); + +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(keepalive, KEEPALIVE); +	else { +		TERM_DEBUG_ON(keepalive, KEEPALIVE); +		vty_out(vty, "BGP keepalives debugging is on for %s\n", host); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_keepalive, @@ -861,16 +816,15 @@ DEFUN (no_debug_bgp_keepalive,         BGP_STR         "BGP keepalives\n")  { -  bgp_debug_list_free(bgp_debug_keepalive_peers); - -  if (vty->node == CONFIG_NODE) -    DEBUG_OFF (keepalive, KEEPALIVE); -  else -    { -      TERM_DEBUG_OFF (keepalive, KEEPALIVE); -      vty_out (vty, "BGP keepalives debugging is off\n"); -    } -  return CMD_SUCCESS; +	bgp_debug_list_free(bgp_debug_keepalive_peers); + +	if (vty->node == CONFIG_NODE) +		DEBUG_OFF(keepalive, KEEPALIVE); +	else { +		TERM_DEBUG_OFF(keepalive, KEEPALIVE); +		vty_out(vty, "BGP keepalives debugging is off\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_keepalive_peer, @@ -884,29 +838,31 @@ DEFUN (no_debug_bgp_keepalive_peer,         "BGP IPv6 neighbor to debug\n"         "BGP neighbor on interface to debug\n")  { -  int idx_peer = 4; -  int found_peer = 0; -  const char *host = argv[idx_peer]->arg; - -  if (bgp_debug_keepalive_peers && !list_isempty(bgp_debug_keepalive_peers)) -    { -      found_peer = bgp_debug_list_remove_entry(bgp_debug_keepalive_peers, host, NULL); - -      if (list_isempty(bgp_debug_keepalive_peers)) -        { -          if (vty->node == CONFIG_NODE) -            DEBUG_OFF (keepalive, KEEPALIVE); -          else -            TERM_DEBUG_OFF (keepalive, KEEPALIVE); -        } -    } - -  if (found_peer) -    vty_out (vty, "BGP keepalives debugging is off for %s\n", host); -  else -    vty_out (vty, "BGP keepalives debugging was not enabled for %s\n", host); - -  return CMD_SUCCESS; +	int idx_peer = 4; +	int found_peer = 0; +	const char *host = argv[idx_peer]->arg; + +	if (bgp_debug_keepalive_peers +	    && !list_isempty(bgp_debug_keepalive_peers)) { +		found_peer = bgp_debug_list_remove_entry( +			bgp_debug_keepalive_peers, host, NULL); + +		if (list_isempty(bgp_debug_keepalive_peers)) { +			if (vty->node == CONFIG_NODE) +				DEBUG_OFF(keepalive, KEEPALIVE); +			else +				TERM_DEBUG_OFF(keepalive, KEEPALIVE); +		} +	} + +	if (found_peer) +		vty_out(vty, "BGP keepalives debugging is off for %s\n", host); +	else +		vty_out(vty, +			"BGP keepalives debugging was not enabled for %s\n", +			host); + +	return CMD_SUCCESS;  }  #ifndef VTYSH_EXTRACT_PL @@ -922,30 +878,29 @@ DEFPY (debug_bgp_bestpath_prefix,         "BGP bestpath\n"         "IPv4 prefix\n"         "IPv6 prefix\n") -  { -  if (!bgp_debug_bestpath_prefixes) -    bgp_debug_bestpath_prefixes = list_new (); - -  if (bgp_debug_list_has_entry(bgp_debug_bestpath_prefixes, NULL, bestpath)) -    { -      vty_out (vty, "BGP bestpath debugging is already enabled for %s\n", bestpath_str); -      return CMD_SUCCESS; -    } - -  bgp_debug_list_add_entry(bgp_debug_bestpath_prefixes, NULL, bestpath); - -  if (vty->node == CONFIG_NODE) -    { -      DEBUG_ON (bestpath, BESTPATH); -    } -  else -    { -      TERM_DEBUG_ON (bestpath, BESTPATH); -      vty_out (vty, "BGP bestpath debugging is on for %s\n", bestpath_str); -    } - -  return CMD_SUCCESS; +	if (!bgp_debug_bestpath_prefixes) +		bgp_debug_bestpath_prefixes = list_new(); + +	if (bgp_debug_list_has_entry(bgp_debug_bestpath_prefixes, NULL, +				     bestpath)) { +		vty_out(vty, +			"BGP bestpath debugging is already enabled for %s\n", +			bestpath_str); +		return CMD_SUCCESS; +	} + +	bgp_debug_list_add_entry(bgp_debug_bestpath_prefixes, NULL, bestpath); + +	if (vty->node == CONFIG_NODE) { +		DEBUG_ON(bestpath, BESTPATH); +	} else { +		TERM_DEBUG_ON(bestpath, BESTPATH); +		vty_out(vty, "BGP bestpath debugging is on for %s\n", +			bestpath_str); +	} + +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_bestpath_prefix, @@ -957,48 +912,44 @@ DEFUN (no_debug_bgp_bestpath_prefix,         "BGP bestpath\n"         "IPv4 prefix\n"         "IPv6 prefix\n") -  { -  int idx_ipv4_ipv6_prefixlen = 4; -  struct prefix *argv_p; -  int found_prefix = 0; -  int ret; - -  argv_p = prefix_new(); -  ret = str2prefix (argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); -  if (!ret) -    { -      prefix_free(argv_p); -      vty_out (vty, "%% Malformed Prefix\n"); -      return CMD_WARNING_CONFIG_FAILED; -    } - -  if (bgp_debug_bestpath_prefixes && !list_isempty(bgp_debug_bestpath_prefixes)) -    { -      found_prefix = bgp_debug_list_remove_entry(bgp_debug_bestpath_prefixes, NULL, argv_p); - -      if (list_isempty(bgp_debug_bestpath_prefixes)) -        { -          if (vty->node == CONFIG_NODE) -            { -              DEBUG_OFF (bestpath, BESTPATH); -            } -          else -            { -              TERM_DEBUG_OFF (bestpath, BESTPATH); -              vty_out (vty, "BGP bestpath debugging (per prefix) is off\n"); -            } -        } -    } - -  if (found_prefix) -    vty_out (vty, "BGP bestpath debugging is off for %s\n", -               argv[idx_ipv4_ipv6_prefixlen]->arg); -  else -    vty_out (vty, "BGP bestpath debugging was not enabled for %s\n", -               argv[idx_ipv4_ipv6_prefixlen]->arg); - -  return CMD_SUCCESS; +	int idx_ipv4_ipv6_prefixlen = 4; +	struct prefix *argv_p; +	int found_prefix = 0; +	int ret; + +	argv_p = prefix_new(); +	ret = str2prefix(argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); +	if (!ret) { +		prefix_free(argv_p); +		vty_out(vty, "%% Malformed Prefix\n"); +		return CMD_WARNING_CONFIG_FAILED; +	} + +	if (bgp_debug_bestpath_prefixes +	    && !list_isempty(bgp_debug_bestpath_prefixes)) { +		found_prefix = bgp_debug_list_remove_entry( +			bgp_debug_bestpath_prefixes, NULL, argv_p); + +		if (list_isempty(bgp_debug_bestpath_prefixes)) { +			if (vty->node == CONFIG_NODE) { +				DEBUG_OFF(bestpath, BESTPATH); +			} else { +				TERM_DEBUG_OFF(bestpath, BESTPATH); +				vty_out(vty, +					"BGP bestpath debugging (per prefix) is off\n"); +			} +		} +	} + +	if (found_prefix) +		vty_out(vty, "BGP bestpath debugging is off for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); +	else +		vty_out(vty, "BGP bestpath debugging was not enabled for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); + +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_bestpath, @@ -1009,16 +960,15 @@ DEFUN (no_debug_bgp_bestpath,         BGP_STR         "BGP bestpath\n")  { -  bgp_debug_list_free(bgp_debug_bestpath_prefixes); - -  if (vty->node == CONFIG_NODE) -    DEBUG_OFF (bestpath, BESTPATH); -  else -    { -      TERM_DEBUG_OFF (bestpath, BESTPATH); -      vty_out (vty, "BGP bestpath debugging is off\n"); -    } -  return CMD_SUCCESS; +	bgp_debug_list_free(bgp_debug_bestpath_prefixes); + +	if (vty->node == CONFIG_NODE) +		DEBUG_OFF(bestpath, BESTPATH); +	else { +		TERM_DEBUG_OFF(bestpath, BESTPATH); +		vty_out(vty, "BGP bestpath debugging is off\n"); +	} +	return CMD_SUCCESS;  }  /* debug bgp updates */ @@ -1029,22 +979,19 @@ DEFUN (debug_bgp_update,         BGP_STR         "BGP updates\n")  { -  bgp_debug_list_free(bgp_debug_update_in_peers); -  bgp_debug_list_free(bgp_debug_update_out_peers); -  bgp_debug_list_free(bgp_debug_update_prefixes); - -  if (vty->node == CONFIG_NODE) -    { -      DEBUG_ON (update, UPDATE_IN); -      DEBUG_ON (update, UPDATE_OUT); -    } -  else -    { -      TERM_DEBUG_ON (update, UPDATE_IN); -      TERM_DEBUG_ON (update, UPDATE_OUT); -      vty_out (vty, "BGP updates debugging is on\n"); -    } -  return CMD_SUCCESS; +	bgp_debug_list_free(bgp_debug_update_in_peers); +	bgp_debug_list_free(bgp_debug_update_out_peers); +	bgp_debug_list_free(bgp_debug_update_prefixes); + +	if (vty->node == CONFIG_NODE) { +		DEBUG_ON(update, UPDATE_IN); +		DEBUG_ON(update, UPDATE_OUT); +	} else { +		TERM_DEBUG_ON(update, UPDATE_IN); +		TERM_DEBUG_ON(update, UPDATE_OUT); +		vty_out(vty, "BGP updates debugging is on\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (debug_bgp_update_direct, @@ -1056,34 +1003,29 @@ DEFUN (debug_bgp_update_direct,         "Inbound updates\n"         "Outbound updates\n")  { -  int idx_in_out = 3; - -  if (strncmp ("i", argv[idx_in_out]->arg, 1) == 0) -    bgp_debug_list_free(bgp_debug_update_in_peers); -  else -    bgp_debug_list_free(bgp_debug_update_out_peers); - -  if (vty->node == CONFIG_NODE) -    { -      if (strncmp ("i", argv[idx_in_out]->arg, 1) == 0) -        DEBUG_ON (update, UPDATE_IN); -      else -        DEBUG_ON (update, UPDATE_OUT); -    } -  else -    { -      if (strncmp ("i", argv[idx_in_out]->arg, 1) == 0) -	{ -	  TERM_DEBUG_ON (update, UPDATE_IN); -	  vty_out (vty, "BGP updates debugging is on (inbound)\n"); -	} -      else -	{ -	  TERM_DEBUG_ON (update, UPDATE_OUT); -	  vty_out (vty, "BGP updates debugging is on (outbound)\n"); -	} -    } -  return CMD_SUCCESS; +	int idx_in_out = 3; + +	if (strncmp("i", argv[idx_in_out]->arg, 1) == 0) +		bgp_debug_list_free(bgp_debug_update_in_peers); +	else +		bgp_debug_list_free(bgp_debug_update_out_peers); + +	if (vty->node == CONFIG_NODE) { +		if (strncmp("i", argv[idx_in_out]->arg, 1) == 0) +			DEBUG_ON(update, UPDATE_IN); +		else +			DEBUG_ON(update, UPDATE_OUT); +	} else { +		if (strncmp("i", argv[idx_in_out]->arg, 1) == 0) { +			TERM_DEBUG_ON(update, UPDATE_IN); +			vty_out(vty, "BGP updates debugging is on (inbound)\n"); +		} else { +			TERM_DEBUG_ON(update, UPDATE_OUT); +			vty_out(vty, +				"BGP updates debugging is on (outbound)\n"); +		} +	} +	return CMD_SUCCESS;  }  DEFUN (debug_bgp_update_direct_peer, @@ -1098,92 +1040,87 @@ DEFUN (debug_bgp_update_direct_peer,         "BGP IPv6 neighbor to debug\n"         "BGP neighbor on interface to debug\n")  { -  int idx_in_out = 3; -  int idx_peer = 4; -  const char *host = argv[idx_peer]->arg; -  int inbound; - -  if (!bgp_debug_update_in_peers) -    bgp_debug_update_in_peers = list_new (); - -  if (!bgp_debug_update_out_peers) -    bgp_debug_update_out_peers = list_new (); - -  if (strncmp ("i", argv[idx_in_out]->arg, 1) == 0) -    inbound = 1; -  else -    inbound = 0; - -  if (inbound) -    { -      if (bgp_debug_list_has_entry(bgp_debug_update_in_peers, host, NULL)) -        { -          vty_out (vty, "BGP inbound update debugging is already enabled for %s\n", -                     host); -          return CMD_SUCCESS; -        } -    } - -  else -    { -      if (bgp_debug_list_has_entry(bgp_debug_update_out_peers, host, NULL)) -        { -          vty_out (vty, "BGP outbound update debugging is already enabled for %s\n", -                     host); -          return CMD_SUCCESS; -        } -    } - -  if (inbound) -    bgp_debug_list_add_entry(bgp_debug_update_in_peers, host, NULL); -  else -    { -      struct peer *peer; -      struct peer_af *paf; -      int afidx; - -      bgp_debug_list_add_entry(bgp_debug_update_out_peers, host, NULL); -      peer = bgp_find_peer (vty, host); - -      if (peer) -        { -          for (afidx = BGP_AF_START; afidx < BGP_AF_MAX; afidx++) -            { -              paf = peer->peer_af_array[afidx]; -              if (paf != NULL) -                { -                  if (PAF_SUBGRP (paf)) -                    { -                      UPDGRP_PEER_DBG_EN(PAF_SUBGRP(paf)->update_group); -                    } -                } -            } -        } -    } - -  if (vty->node == CONFIG_NODE) -    { -      if (inbound) -	DEBUG_ON (update, UPDATE_IN); -      else -	DEBUG_ON (update, UPDATE_OUT); -    } -  else -    { -      if (inbound) -	{ -	  TERM_DEBUG_ON (update, UPDATE_IN); -	  vty_out (vty, "BGP updates debugging is on (inbound) for %s\n", -                     argv[idx_peer]->arg); -	} -      else -	{ -	  TERM_DEBUG_ON (update, UPDATE_OUT); -	  vty_out (vty, "BGP updates debugging is on (outbound) for %s\n", -                     argv[idx_peer]->arg); -	} -    } -  return CMD_SUCCESS; +	int idx_in_out = 3; +	int idx_peer = 4; +	const char *host = argv[idx_peer]->arg; +	int inbound; + +	if (!bgp_debug_update_in_peers) +		bgp_debug_update_in_peers = list_new(); + +	if (!bgp_debug_update_out_peers) +		bgp_debug_update_out_peers = list_new(); + +	if (strncmp("i", argv[idx_in_out]->arg, 1) == 0) +		inbound = 1; +	else +		inbound = 0; + +	if (inbound) { +		if (bgp_debug_list_has_entry(bgp_debug_update_in_peers, host, +					     NULL)) { +			vty_out(vty, +				"BGP inbound update debugging is already enabled for %s\n", +				host); +			return CMD_SUCCESS; +		} +	} + +	else { +		if (bgp_debug_list_has_entry(bgp_debug_update_out_peers, host, +					     NULL)) { +			vty_out(vty, +				"BGP outbound update debugging is already enabled for %s\n", +				host); +			return CMD_SUCCESS; +		} +	} + +	if (inbound) +		bgp_debug_list_add_entry(bgp_debug_update_in_peers, host, NULL); +	else { +		struct peer *peer; +		struct peer_af *paf; +		int afidx; + +		bgp_debug_list_add_entry(bgp_debug_update_out_peers, host, +					 NULL); +		peer = bgp_find_peer(vty, host); + +		if (peer) { +			for (afidx = BGP_AF_START; afidx < BGP_AF_MAX; +			     afidx++) { +				paf = peer->peer_af_array[afidx]; +				if (paf != NULL) { +					if (PAF_SUBGRP(paf)) { +						UPDGRP_PEER_DBG_EN( +							PAF_SUBGRP(paf) +								->update_group); +					} +				} +			} +		} +	} + +	if (vty->node == CONFIG_NODE) { +		if (inbound) +			DEBUG_ON(update, UPDATE_IN); +		else +			DEBUG_ON(update, UPDATE_OUT); +	} else { +		if (inbound) { +			TERM_DEBUG_ON(update, UPDATE_IN); +			vty_out(vty, +				"BGP updates debugging is on (inbound) for %s\n", +				argv[idx_peer]->arg); +		} else { +			TERM_DEBUG_ON(update, UPDATE_OUT); +			vty_out(vty, +				"BGP updates debugging is on (outbound) for %s\n", +				argv[idx_peer]->arg); +		} +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_update_direct, @@ -1196,37 +1133,30 @@ DEFUN (no_debug_bgp_update_direct,         "Inbound updates\n"         "Outbound updates\n")  { -  int idx_in_out = 4; -  if (strncmp ("i", argv[idx_in_out]->arg, 1) == 0) -    { -      bgp_debug_list_free(bgp_debug_update_in_peers); - -      if (vty->node == CONFIG_NODE) -        { -          DEBUG_OFF (update, UPDATE_IN); -        } -      else -        { -          TERM_DEBUG_OFF (update, UPDATE_IN); -          vty_out (vty, "BGP updates debugging is off (inbound)\n"); -        } -    } -  else -    { -      bgp_debug_list_free(bgp_debug_update_out_peers); - -      if (vty->node == CONFIG_NODE) -        { -          DEBUG_OFF (update, UPDATE_OUT); -        } -      else -        { -          TERM_DEBUG_OFF (update, UPDATE_OUT); -          vty_out (vty, "BGP updates debugging is off (outbound)\n"); -        } -    } - -  return CMD_SUCCESS; +	int idx_in_out = 4; +	if (strncmp("i", argv[idx_in_out]->arg, 1) == 0) { +		bgp_debug_list_free(bgp_debug_update_in_peers); + +		if (vty->node == CONFIG_NODE) { +			DEBUG_OFF(update, UPDATE_IN); +		} else { +			TERM_DEBUG_OFF(update, UPDATE_IN); +			vty_out(vty, +				"BGP updates debugging is off (inbound)\n"); +		} +	} else { +		bgp_debug_list_free(bgp_debug_update_out_peers); + +		if (vty->node == CONFIG_NODE) { +			DEBUG_OFF(update, UPDATE_OUT); +		} else { +			TERM_DEBUG_OFF(update, UPDATE_OUT); +			vty_out(vty, +				"BGP updates debugging is off (outbound)\n"); +		} +	} + +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_update_direct_peer, @@ -1242,86 +1172,87 @@ DEFUN (no_debug_bgp_update_direct_peer,         "BGP IPv6 neighbor to debug\n"         "BGP neighbor on interface to debug\n")  { -  int idx_in_out = 4; -  int idx_peer = 5; -  int inbound; -  int found_peer = 0; -  const char *host = argv[idx_peer]->arg; - -  if (strncmp ("i", argv[idx_in_out]->arg, 1) == 0) -    inbound = 1; -  else -    inbound = 0; - -  if (inbound && bgp_debug_update_in_peers && -      !list_isempty(bgp_debug_update_in_peers)) -    { -      found_peer = bgp_debug_list_remove_entry(bgp_debug_update_in_peers, host, NULL); - -      if (list_isempty(bgp_debug_update_in_peers)) -        { -          if (vty->node == CONFIG_NODE) -            DEBUG_OFF (update, UPDATE_IN); -          else -            { -              TERM_DEBUG_OFF (update, UPDATE_IN); -              vty_out (vty, "BGP updates debugging (inbound) is off\n"); -            } -        } -    } - -  if (!inbound && bgp_debug_update_out_peers && -      !list_isempty(bgp_debug_update_out_peers)) -    { -      found_peer = bgp_debug_list_remove_entry(bgp_debug_update_out_peers, host, NULL); - -      if (list_isempty(bgp_debug_update_out_peers)) -        { -          if (vty->node == CONFIG_NODE) -            DEBUG_OFF (update, UPDATE_OUT); -          else -            { -              TERM_DEBUG_OFF (update, UPDATE_OUT); -              vty_out (vty, "BGP updates debugging (outbound) is off\n"); -            } -        } - -      struct peer *peer; -      struct peer_af *paf; -      int afidx; -      peer = bgp_find_peer (vty, host); - -      if (peer) -        { -          for (afidx = BGP_AF_START; afidx < BGP_AF_MAX; afidx++) -            { -              paf = peer->peer_af_array[afidx]; -              if (paf != NULL) -                { -                  if (PAF_SUBGRP (paf)) -                    { -                      UPDGRP_PEER_DBG_DIS(PAF_SUBGRP(paf)->update_group); -                    } -                } -            } -        } -    } - -  if (found_peer) -    if (inbound) -      vty_out (vty, "BGP updates debugging (inbound) is off for %s\n", host); -    else -      vty_out (vty, "BGP updates debugging (outbound) is off for %s\n", -                 host); -  else -    if (inbound) -      vty_out (vty, "BGP updates debugging (inbound) was not enabled for %s\n", -                 host); -    else -      vty_out (vty, "BGP updates debugging (outbound) was not enabled for %s\n", -                 host); - -  return CMD_SUCCESS; +	int idx_in_out = 4; +	int idx_peer = 5; +	int inbound; +	int found_peer = 0; +	const char *host = argv[idx_peer]->arg; + +	if (strncmp("i", argv[idx_in_out]->arg, 1) == 0) +		inbound = 1; +	else +		inbound = 0; + +	if (inbound && bgp_debug_update_in_peers +	    && !list_isempty(bgp_debug_update_in_peers)) { +		found_peer = bgp_debug_list_remove_entry( +			bgp_debug_update_in_peers, host, NULL); + +		if (list_isempty(bgp_debug_update_in_peers)) { +			if (vty->node == CONFIG_NODE) +				DEBUG_OFF(update, UPDATE_IN); +			else { +				TERM_DEBUG_OFF(update, UPDATE_IN); +				vty_out(vty, +					"BGP updates debugging (inbound) is off\n"); +			} +		} +	} + +	if (!inbound && bgp_debug_update_out_peers +	    && !list_isempty(bgp_debug_update_out_peers)) { +		found_peer = bgp_debug_list_remove_entry( +			bgp_debug_update_out_peers, host, NULL); + +		if (list_isempty(bgp_debug_update_out_peers)) { +			if (vty->node == CONFIG_NODE) +				DEBUG_OFF(update, UPDATE_OUT); +			else { +				TERM_DEBUG_OFF(update, UPDATE_OUT); +				vty_out(vty, +					"BGP updates debugging (outbound) is off\n"); +			} +		} + +		struct peer *peer; +		struct peer_af *paf; +		int afidx; +		peer = bgp_find_peer(vty, host); + +		if (peer) { +			for (afidx = BGP_AF_START; afidx < BGP_AF_MAX; +			     afidx++) { +				paf = peer->peer_af_array[afidx]; +				if (paf != NULL) { +					if (PAF_SUBGRP(paf)) { +						UPDGRP_PEER_DBG_DIS( +							PAF_SUBGRP(paf) +								->update_group); +					} +				} +			} +		} +	} + +	if (found_peer) +		if (inbound) +			vty_out(vty, +				"BGP updates debugging (inbound) is off for %s\n", +				host); +		else +			vty_out(vty, +				"BGP updates debugging (outbound) is off for %s\n", +				host); +	else if (inbound) +		vty_out(vty, +			"BGP updates debugging (inbound) was not enabled for %s\n", +			host); +	else +		vty_out(vty, +			"BGP updates debugging (outbound) was not enabled for %s\n", +			host); + +	return CMD_SUCCESS;  }  DEFUN (debug_bgp_update_prefix, @@ -1333,46 +1264,41 @@ DEFUN (debug_bgp_update_prefix,         "Specify a prefix to debug\n"         "IPv4 prefix\n"         "IPv6 prefix\n") -  { -  int idx_ipv4_ipv6_prefixlen = 4; -  struct prefix *argv_p; -  int ret; - -  argv_p = prefix_new(); -  ret = str2prefix (argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); -  if (!ret) -    { -      prefix_free(argv_p); -      vty_out (vty, "%% Malformed Prefix\n"); -      return CMD_WARNING_CONFIG_FAILED; -    } - - -  if (!bgp_debug_update_prefixes) -    bgp_debug_update_prefixes = list_new (); - -  if (bgp_debug_list_has_entry(bgp_debug_update_prefixes, NULL, argv_p)) -    { -      vty_out (vty, "BGP updates debugging is already enabled for %s\n", -                 argv[idx_ipv4_ipv6_prefixlen]->arg); -      return CMD_SUCCESS; -    } - -  bgp_debug_list_add_entry(bgp_debug_update_prefixes, NULL, argv_p); - -  if (vty->node == CONFIG_NODE) -    { -      DEBUG_ON (update, UPDATE_PREFIX); -    } -  else -    { -      TERM_DEBUG_ON (update, UPDATE_PREFIX); -      vty_out (vty, "BGP updates debugging is on for %s\n", -                 argv[idx_ipv4_ipv6_prefixlen]->arg); -    } - -  return CMD_SUCCESS; +	int idx_ipv4_ipv6_prefixlen = 4; +	struct prefix *argv_p; +	int ret; + +	argv_p = prefix_new(); +	ret = str2prefix(argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); +	if (!ret) { +		prefix_free(argv_p); +		vty_out(vty, "%% Malformed Prefix\n"); +		return CMD_WARNING_CONFIG_FAILED; +	} + + +	if (!bgp_debug_update_prefixes) +		bgp_debug_update_prefixes = list_new(); + +	if (bgp_debug_list_has_entry(bgp_debug_update_prefixes, NULL, argv_p)) { +		vty_out(vty, +			"BGP updates debugging is already enabled for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); +		return CMD_SUCCESS; +	} + +	bgp_debug_list_add_entry(bgp_debug_update_prefixes, NULL, argv_p); + +	if (vty->node == CONFIG_NODE) { +		DEBUG_ON(update, UPDATE_PREFIX); +	} else { +		TERM_DEBUG_ON(update, UPDATE_PREFIX); +		vty_out(vty, "BGP updates debugging is on for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); +	} + +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_update_prefix, @@ -1385,48 +1311,44 @@ DEFUN (no_debug_bgp_update_prefix,         "Specify a prefix to debug\n"         "IPv4 prefix\n"         "IPv6 prefix\n") -  { -  int idx_ipv4_ipv6_prefixlen = 5; -  struct prefix *argv_p; -  int found_prefix = 0; -  int ret; - -  argv_p = prefix_new(); -  ret = str2prefix (argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); -  if (!ret) -    { -      prefix_free(argv_p); -      vty_out (vty, "%% Malformed Prefix\n"); -      return CMD_WARNING_CONFIG_FAILED; -    } - -  if (bgp_debug_update_prefixes && !list_isempty(bgp_debug_update_prefixes)) -    { -      found_prefix = bgp_debug_list_remove_entry(bgp_debug_update_prefixes, NULL, argv_p); - -      if (list_isempty(bgp_debug_update_prefixes)) -        { -          if (vty->node == CONFIG_NODE) -            { -              DEBUG_OFF (update, UPDATE_PREFIX); -            } -          else -            { -              TERM_DEBUG_OFF (update, UPDATE_PREFIX); -              vty_out (vty, "BGP updates debugging (per prefix) is off\n"); -            } -        } -    } - -  if (found_prefix) -    vty_out (vty, "BGP updates debugging is off for %s\n", -               argv[idx_ipv4_ipv6_prefixlen]->arg); -  else -    vty_out (vty, "BGP updates debugging was not enabled for %s\n", -               argv[idx_ipv4_ipv6_prefixlen]->arg); - -  return CMD_SUCCESS; +	int idx_ipv4_ipv6_prefixlen = 5; +	struct prefix *argv_p; +	int found_prefix = 0; +	int ret; + +	argv_p = prefix_new(); +	ret = str2prefix(argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); +	if (!ret) { +		prefix_free(argv_p); +		vty_out(vty, "%% Malformed Prefix\n"); +		return CMD_WARNING_CONFIG_FAILED; +	} + +	if (bgp_debug_update_prefixes +	    && !list_isempty(bgp_debug_update_prefixes)) { +		found_prefix = bgp_debug_list_remove_entry( +			bgp_debug_update_prefixes, NULL, argv_p); + +		if (list_isempty(bgp_debug_update_prefixes)) { +			if (vty->node == CONFIG_NODE) { +				DEBUG_OFF(update, UPDATE_PREFIX); +			} else { +				TERM_DEBUG_OFF(update, UPDATE_PREFIX); +				vty_out(vty, +					"BGP updates debugging (per prefix) is off\n"); +			} +		} +	} + +	if (found_prefix) +		vty_out(vty, "BGP updates debugging is off for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); +	else +		vty_out(vty, "BGP updates debugging was not enabled for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); + +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_update, @@ -1437,27 +1359,24 @@ DEFUN (no_debug_bgp_update,         BGP_STR         "BGP updates\n")  { -  VTY_DECLVAR_CONTEXT(bgp, bgp); -  bgp_debug_list_free(bgp_debug_update_in_peers); -  bgp_debug_list_free(bgp_debug_update_out_peers); -  bgp_debug_list_free(bgp_debug_update_prefixes); - -  bgp_debug_clear_updgrp_update_dbg(bgp); - -  if (vty->node == CONFIG_NODE) -    { -      DEBUG_OFF (update, UPDATE_IN); -      DEBUG_OFF (update, UPDATE_OUT); -      DEBUG_OFF (update, UPDATE_PREFIX); -    } -  else -    { -      TERM_DEBUG_OFF (update, UPDATE_IN); -      TERM_DEBUG_OFF (update, UPDATE_OUT); -      TERM_DEBUG_OFF (update, UPDATE_PREFIX); -      vty_out (vty, "BGP updates debugging is off\n"); -    } -  return CMD_SUCCESS; +	VTY_DECLVAR_CONTEXT(bgp, bgp); +	bgp_debug_list_free(bgp_debug_update_in_peers); +	bgp_debug_list_free(bgp_debug_update_out_peers); +	bgp_debug_list_free(bgp_debug_update_prefixes); + +	bgp_debug_clear_updgrp_update_dbg(bgp); + +	if (vty->node == CONFIG_NODE) { +		DEBUG_OFF(update, UPDATE_IN); +		DEBUG_OFF(update, UPDATE_OUT); +		DEBUG_OFF(update, UPDATE_PREFIX); +	} else { +		TERM_DEBUG_OFF(update, UPDATE_IN); +		TERM_DEBUG_OFF(update, UPDATE_OUT); +		TERM_DEBUG_OFF(update, UPDATE_PREFIX); +		vty_out(vty, "BGP updates debugging is off\n"); +	} +	return CMD_SUCCESS;  }  /* debug bgp zebra */ @@ -1468,14 +1387,13 @@ DEFUN (debug_bgp_zebra,         BGP_STR         "BGP Zebra messages\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (zebra, ZEBRA); -  else -    { -      TERM_DEBUG_ON (zebra, ZEBRA); -      vty_out (vty, "BGP zebra debugging is on\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(zebra, ZEBRA); +	else { +		TERM_DEBUG_ON(zebra, ZEBRA); +		vty_out(vty, "BGP zebra debugging is on\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (debug_bgp_zebra_prefix, @@ -1487,43 +1405,39 @@ DEFUN (debug_bgp_zebra_prefix,         "Specify a prefix to debug\n"         "IPv4 prefix\n"         "IPv6 prefix\n") -  { -  int idx_ipv4_ipv6_prefixlen = 4; -  struct prefix *argv_p; -  int ret; - -  argv_p = prefix_new(); -  ret = str2prefix (argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); -  if (!ret) -    { -      prefix_free(argv_p); -      vty_out (vty, "%% Malformed Prefix\n"); -      return CMD_WARNING_CONFIG_FAILED; -    } - -  if (!bgp_debug_zebra_prefixes) -    bgp_debug_zebra_prefixes = list_new(); - -  if (bgp_debug_list_has_entry(bgp_debug_zebra_prefixes, NULL, argv_p)) -    { -      vty_out (vty, "BGP zebra debugging is already enabled for %s\n", -                 argv[idx_ipv4_ipv6_prefixlen]->arg); -      return CMD_SUCCESS; -    } - -  bgp_debug_list_add_entry(bgp_debug_zebra_prefixes, NULL, argv_p); - -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (zebra, ZEBRA); -  else -    { -      TERM_DEBUG_ON (zebra, ZEBRA); -      vty_out (vty, "BGP zebra debugging is on for %s\n", -                 argv[idx_ipv4_ipv6_prefixlen]->arg); -    } - -  return CMD_SUCCESS; +	int idx_ipv4_ipv6_prefixlen = 4; +	struct prefix *argv_p; +	int ret; + +	argv_p = prefix_new(); +	ret = str2prefix(argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); +	if (!ret) { +		prefix_free(argv_p); +		vty_out(vty, "%% Malformed Prefix\n"); +		return CMD_WARNING_CONFIG_FAILED; +	} + +	if (!bgp_debug_zebra_prefixes) +		bgp_debug_zebra_prefixes = list_new(); + +	if (bgp_debug_list_has_entry(bgp_debug_zebra_prefixes, NULL, argv_p)) { +		vty_out(vty, "BGP zebra debugging is already enabled for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); +		return CMD_SUCCESS; +	} + +	bgp_debug_list_add_entry(bgp_debug_zebra_prefixes, NULL, argv_p); + +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(zebra, ZEBRA); +	else { +		TERM_DEBUG_ON(zebra, ZEBRA); +		vty_out(vty, "BGP zebra debugging is on for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); +	} + +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_zebra, @@ -1534,16 +1448,15 @@ DEFUN (no_debug_bgp_zebra,         BGP_STR         "BGP Zebra messages\n")  { -  bgp_debug_list_free(bgp_debug_zebra_prefixes); - -  if (vty->node == CONFIG_NODE) -    DEBUG_OFF (zebra, ZEBRA); -  else -    { -      TERM_DEBUG_OFF (zebra, ZEBRA); -      vty_out (vty, "BGP zebra debugging is off\n"); -    } -  return CMD_SUCCESS; +	bgp_debug_list_free(bgp_debug_zebra_prefixes); + +	if (vty->node == CONFIG_NODE) +		DEBUG_OFF(zebra, ZEBRA); +	else { +		TERM_DEBUG_OFF(zebra, ZEBRA); +		vty_out(vty, "BGP zebra debugging is off\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_zebra_prefix, @@ -1556,46 +1469,43 @@ DEFUN (no_debug_bgp_zebra_prefix,         "Specify a prefix to debug\n"         "IPv4 prefix\n"         "IPv6 prefix\n") -  { -  int idx_ipv4_ipv6_prefixlen = 5; -  struct prefix *argv_p; -  int found_prefix = 0; -  int ret; - -  argv_p = prefix_new(); -  ret = str2prefix (argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); -  if (!ret) -    { -      prefix_free(argv_p); -      vty_out (vty, "%% Malformed Prefix\n"); -      return CMD_WARNING_CONFIG_FAILED; -    } - -  if (bgp_debug_zebra_prefixes && !list_isempty(bgp_debug_zebra_prefixes)) -    { -      found_prefix = bgp_debug_list_remove_entry(bgp_debug_zebra_prefixes, NULL, argv_p); - -      if (list_isempty(bgp_debug_zebra_prefixes)) -        { -          if (vty->node == CONFIG_NODE) -            DEBUG_OFF (zebra, ZEBRA); -          else -            { -              TERM_DEBUG_OFF (zebra, ZEBRA); -              vty_out (vty, "BGP zebra debugging is off\n"); -            } -        } -    } - -  if (found_prefix) -    vty_out (vty, "BGP zebra debugging is off for %s\n", -               argv[idx_ipv4_ipv6_prefixlen]->arg); -  else -    vty_out (vty, "BGP zebra debugging was not enabled for %s\n", -               argv[idx_ipv4_ipv6_prefixlen]->arg); - -  return CMD_SUCCESS; +	int idx_ipv4_ipv6_prefixlen = 5; +	struct prefix *argv_p; +	int found_prefix = 0; +	int ret; + +	argv_p = prefix_new(); +	ret = str2prefix(argv[idx_ipv4_ipv6_prefixlen]->arg, argv_p); +	if (!ret) { +		prefix_free(argv_p); +		vty_out(vty, "%% Malformed Prefix\n"); +		return CMD_WARNING_CONFIG_FAILED; +	} + +	if (bgp_debug_zebra_prefixes +	    && !list_isempty(bgp_debug_zebra_prefixes)) { +		found_prefix = bgp_debug_list_remove_entry( +			bgp_debug_zebra_prefixes, NULL, argv_p); + +		if (list_isempty(bgp_debug_zebra_prefixes)) { +			if (vty->node == CONFIG_NODE) +				DEBUG_OFF(zebra, ZEBRA); +			else { +				TERM_DEBUG_OFF(zebra, ZEBRA); +				vty_out(vty, "BGP zebra debugging is off\n"); +			} +		} +	} + +	if (found_prefix) +		vty_out(vty, "BGP zebra debugging is off for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); +	else +		vty_out(vty, "BGP zebra debugging was not enabled for %s\n", +			argv[idx_ipv4_ipv6_prefixlen]->arg); + +	return CMD_SUCCESS;  }  DEFUN (debug_bgp_allow_martians, @@ -1605,14 +1515,13 @@ DEFUN (debug_bgp_allow_martians,         BGP_STR         "BGP allow martian next hops\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (allow_martians, ALLOW_MARTIANS); -  else -    { -      TERM_DEBUG_ON (allow_martians, ALLOW_MARTIANS); -      vty_out (vty, "BGP allow_martian next hop debugging is on\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(allow_martians, ALLOW_MARTIANS); +	else { +		TERM_DEBUG_ON(allow_martians, ALLOW_MARTIANS); +		vty_out(vty, "BGP allow_martian next hop debugging is on\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_allow_martians, @@ -1623,14 +1532,13 @@ DEFUN (no_debug_bgp_allow_martians,         BGP_STR         "BGP allow martian next hops\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_OFF (allow_martians, ALLOW_MARTIANS); -  else -    { -      TERM_DEBUG_OFF (allow_martians, ALLOW_MARTIANS); -      vty_out (vty, "BGP allow martian next hop debugging is off\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_OFF(allow_martians, ALLOW_MARTIANS); +	else { +		TERM_DEBUG_OFF(allow_martians, ALLOW_MARTIANS); +		vty_out(vty, "BGP allow martian next hop debugging is off\n"); +	} +	return CMD_SUCCESS;  } @@ -1642,14 +1550,13 @@ DEFUN (debug_bgp_update_groups,         BGP_STR         "BGP update-groups\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_ON (update_groups, UPDATE_GROUPS); -  else -    { -      TERM_DEBUG_ON (update_groups, UPDATE_GROUPS); -      vty_out (vty, "BGP update-groups debugging is on\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_ON(update_groups, UPDATE_GROUPS); +	else { +		TERM_DEBUG_ON(update_groups, UPDATE_GROUPS); +		vty_out(vty, "BGP update-groups debugging is on\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp_update_groups, @@ -1660,14 +1567,13 @@ DEFUN (no_debug_bgp_update_groups,         BGP_STR         "BGP update-groups\n")  { -  if (vty->node == CONFIG_NODE) -    DEBUG_OFF (update_groups, UPDATE_GROUPS); -  else -    { -      TERM_DEBUG_OFF (update_groups, UPDATE_GROUPS); -      vty_out (vty, "BGP update-groups debugging is off\n"); -    } -  return CMD_SUCCESS; +	if (vty->node == CONFIG_NODE) +		DEBUG_OFF(update_groups, UPDATE_GROUPS); +	else { +		TERM_DEBUG_OFF(update_groups, UPDATE_GROUPS); +		vty_out(vty, "BGP update-groups debugging is off\n"); +	} +	return CMD_SUCCESS;  }  DEFUN (no_debug_bgp, @@ -1677,30 +1583,30 @@ DEFUN (no_debug_bgp,         DEBUG_STR         BGP_STR)  { -  VTY_DECLVAR_CONTEXT(bgp, bgp); -  bgp_debug_list_free(bgp_debug_neighbor_events_peers); -  bgp_debug_list_free(bgp_debug_keepalive_peers); -  bgp_debug_list_free(bgp_debug_update_in_peers); -  bgp_debug_list_free(bgp_debug_update_out_peers); -  bgp_debug_list_free(bgp_debug_update_prefixes); -  bgp_debug_list_free(bgp_debug_bestpath_prefixes); -  bgp_debug_list_free(bgp_debug_zebra_prefixes); - -  bgp_debug_clear_updgrp_update_dbg(bgp); - -  TERM_DEBUG_OFF (keepalive, KEEPALIVE); -  TERM_DEBUG_OFF (update, UPDATE_IN); -  TERM_DEBUG_OFF (update, UPDATE_OUT); -  TERM_DEBUG_OFF (update, UPDATE_PREFIX); -  TERM_DEBUG_OFF (bestpath, BESTPATH); -  TERM_DEBUG_OFF (as4, AS4); -  TERM_DEBUG_OFF (as4, AS4_SEGMENT); -  TERM_DEBUG_OFF (neighbor_events, NEIGHBOR_EVENTS); -  TERM_DEBUG_OFF (zebra, ZEBRA); -  TERM_DEBUG_OFF (allow_martians, ALLOW_MARTIANS); -  vty_out (vty, "All possible debugging has been turned off\n"); -       -  return CMD_SUCCESS; +	VTY_DECLVAR_CONTEXT(bgp, bgp); +	bgp_debug_list_free(bgp_debug_neighbor_events_peers); +	bgp_debug_list_free(bgp_debug_keepalive_peers); +	bgp_debug_list_free(bgp_debug_update_in_peers); +	bgp_debug_list_free(bgp_debug_update_out_peers); +	bgp_debug_list_free(bgp_debug_update_prefixes); +	bgp_debug_list_free(bgp_debug_bestpath_prefixes); +	bgp_debug_list_free(bgp_debug_zebra_prefixes); + +	bgp_debug_clear_updgrp_update_dbg(bgp); + +	TERM_DEBUG_OFF(keepalive, KEEPALIVE); +	TERM_DEBUG_OFF(update, UPDATE_IN); +	TERM_DEBUG_OFF(update, UPDATE_OUT); +	TERM_DEBUG_OFF(update, UPDATE_PREFIX); +	TERM_DEBUG_OFF(bestpath, BESTPATH); +	TERM_DEBUG_OFF(as4, AS4); +	TERM_DEBUG_OFF(as4, AS4_SEGMENT); +	TERM_DEBUG_OFF(neighbor_events, NEIGHBOR_EVENTS); +	TERM_DEBUG_OFF(zebra, ZEBRA); +	TERM_DEBUG_OFF(allow_martians, ALLOW_MARTIANS); +	vty_out(vty, "All possible debugging has been turned off\n"); + +	return CMD_SUCCESS;  }  DEFUN (show_debugging_bgp, @@ -1710,486 +1616,462 @@ DEFUN (show_debugging_bgp,         DEBUG_STR         BGP_STR)  { -  vty_out (vty, "BGP debugging status:\n"); +	vty_out(vty, "BGP debugging status:\n"); -  if (BGP_DEBUG (as4, AS4)) -    vty_out (vty, "  BGP as4 debugging is on\n"); +	if (BGP_DEBUG(as4, AS4)) +		vty_out(vty, "  BGP as4 debugging is on\n"); -  if (BGP_DEBUG (as4, AS4_SEGMENT)) -    vty_out (vty, "  BGP as4 aspath segment debugging is on\n"); +	if (BGP_DEBUG(as4, AS4_SEGMENT)) +		vty_out(vty, "  BGP as4 aspath segment debugging is on\n"); -  if (BGP_DEBUG (bestpath, BESTPATH)) -    bgp_debug_list_print (vty, "  BGP bestpath debugging is on", -                          bgp_debug_bestpath_prefixes); +	if (BGP_DEBUG(bestpath, BESTPATH)) +		bgp_debug_list_print(vty, "  BGP bestpath debugging is on", +				     bgp_debug_bestpath_prefixes); -  if (BGP_DEBUG (keepalive, KEEPALIVE)) -    bgp_debug_list_print (vty, "  BGP keepalives debugging is on", -                          bgp_debug_keepalive_peers); +	if (BGP_DEBUG(keepalive, KEEPALIVE)) +		bgp_debug_list_print(vty, "  BGP keepalives debugging is on", +				     bgp_debug_keepalive_peers); -  if (BGP_DEBUG (neighbor_events, NEIGHBOR_EVENTS)) -    bgp_debug_list_print (vty, "  BGP neighbor-events debugging is on", -                          bgp_debug_neighbor_events_peers); +	if (BGP_DEBUG(neighbor_events, NEIGHBOR_EVENTS)) +		bgp_debug_list_print(vty, +				     "  BGP neighbor-events debugging is on", +				     bgp_debug_neighbor_events_peers); -  if (BGP_DEBUG (nht, NHT)) -    vty_out (vty, "  BGP next-hop tracking debugging is on\n"); +	if (BGP_DEBUG(nht, NHT)) +		vty_out(vty, "  BGP next-hop tracking debugging is on\n"); -  if (BGP_DEBUG (update_groups, UPDATE_GROUPS)) -    vty_out (vty, "  BGP update-groups debugging is on\n"); +	if (BGP_DEBUG(update_groups, UPDATE_GROUPS)) +		vty_out(vty, "  BGP update-groups debugging is on\n"); -  if (BGP_DEBUG (update, UPDATE_PREFIX)) -    bgp_debug_list_print (vty, "  BGP updates debugging is on", -                          bgp_debug_update_prefixes); +	if (BGP_DEBUG(update, UPDATE_PREFIX)) +		bgp_debug_list_print(vty, "  BGP updates debugging is on", +				     bgp_debug_update_prefixes); -  if (BGP_DEBUG (update, UPDATE_IN)) -    bgp_debug_list_print (vty, "  BGP updates debugging is on (inbound)", -                          bgp_debug_update_in_peers); +	if (BGP_DEBUG(update, UPDATE_IN)) +		bgp_debug_list_print(vty, +				     "  BGP updates debugging is on (inbound)", +				     bgp_debug_update_in_peers); -  if (BGP_DEBUG (update, UPDATE_OUT)) -    bgp_debug_list_print (vty, "  BGP updates debugging is on (outbound)", -                          bgp_debug_update_out_peers); +	if (BGP_DEBUG(update, UPDATE_OUT)) +		bgp_debug_list_print(vty, +				     "  BGP updates debugging is on (outbound)", +				     bgp_debug_update_out_peers); -  if (BGP_DEBUG (zebra, ZEBRA)) -    bgp_debug_list_print (vty, "  BGP zebra debugging is on", -                          bgp_debug_zebra_prefixes); +	if (BGP_DEBUG(zebra, ZEBRA)) +		bgp_debug_list_print(vty, "  BGP zebra debugging is on", +				     bgp_debug_zebra_prefixes); -  if (BGP_DEBUG (allow_martians, ALLOW_MARTIANS)) -    vty_out (vty, "  BGP allow martian next hop debugging is on\n"); -  vty_out (vty, "\n"); -  return CMD_SUCCESS; +	if (BGP_DEBUG(allow_martians, ALLOW_MARTIANS)) +		vty_out(vty, "  BGP allow martian next hop debugging is on\n"); +	vty_out(vty, "\n"); +	return CMD_SUCCESS;  }  /* return count of number of debug flags set */ -int  -bgp_debug_count(void)  +int bgp_debug_count(void)  { -  int ret = 0; -  if (BGP_DEBUG (as4, AS4)) -    ret++; +	int ret = 0; +	if (BGP_DEBUG(as4, AS4)) +		ret++; -  if (BGP_DEBUG (as4, AS4_SEGMENT)) -    ret++; +	if (BGP_DEBUG(as4, AS4_SEGMENT)) +		ret++; -  if (BGP_DEBUG (bestpath, BESTPATH)) -    ret++; +	if (BGP_DEBUG(bestpath, BESTPATH)) +		ret++; -  if (BGP_DEBUG (keepalive, KEEPALIVE)) -    ret++; +	if (BGP_DEBUG(keepalive, KEEPALIVE)) +		ret++; -  if (BGP_DEBUG (neighbor_events, NEIGHBOR_EVENTS)) -    ret++; +	if (BGP_DEBUG(neighbor_events, NEIGHBOR_EVENTS)) +		ret++; -  if (BGP_DEBUG (nht, NHT)) -    ret++; +	if (BGP_DEBUG(nht, NHT)) +		ret++; -  if (BGP_DEBUG (update_groups, UPDATE_GROUPS)) -    ret++; +	if (BGP_DEBUG(update_groups, UPDATE_GROUPS)) +		ret++; -  if (BGP_DEBUG (update, UPDATE_PREFIX)) -    ret++; +	if (BGP_DEBUG(update, UPDATE_PREFIX)) +		ret++; -  if (BGP_DEBUG (update, UPDATE_IN)) -    ret++; +	if (BGP_DEBUG(update, UPDATE_IN)) +		ret++; -  if (BGP_DEBUG (update, UPDATE_OUT)) -    ret++; +	if (BGP_DEBUG(update, UPDATE_OUT)) +		ret++; -  if (BGP_DEBUG (zebra, ZEBRA)) -    ret++; +	if (BGP_DEBUG(zebra, ZEBRA)) +		ret++; -  if (BGP_DEBUG (allow_martians, ALLOW_MARTIANS)) -    ret++; +	if (BGP_DEBUG(allow_martians, ALLOW_MARTIANS)) +		ret++; -  return ret; +	return ret;  } -static int -bgp_config_write_debug (struct vty *vty) +static int bgp_config_write_debug(struct vty *vty)  { -  int write = 0; - -  if (CONF_BGP_DEBUG (as4, AS4)) -    { -      vty_out (vty, "debug bgp as4\n"); -      write++; -    } - -  if (CONF_BGP_DEBUG (as4, AS4_SEGMENT)) -    { -      vty_out (vty, "debug bgp as4 segment\n"); -      write++; -    } - -  if (CONF_BGP_DEBUG (bestpath, BESTPATH)) -    { -      write += bgp_debug_list_conf_print (vty, "debug bgp bestpath", -                                          bgp_debug_bestpath_prefixes); -    } - -  if (CONF_BGP_DEBUG (keepalive, KEEPALIVE)) -    { -      write += bgp_debug_list_conf_print (vty, "debug bgp keepalives", -                                          bgp_debug_keepalive_peers); -    } - -  if (CONF_BGP_DEBUG (neighbor_events, NEIGHBOR_EVENTS)) -    { -      write += bgp_debug_list_conf_print (vty, "debug bgp neighbor-events", -                                          bgp_debug_neighbor_events_peers); -    } - -  if (CONF_BGP_DEBUG (nht, NHT)) -    { -      vty_out (vty, "debug bgp nht\n"); -      write++; -    } - -  if (CONF_BGP_DEBUG (update_groups, UPDATE_GROUPS)) -    { -      vty_out (vty, "debug bgp update-groups\n"); -      write++; -    } - -  if (CONF_BGP_DEBUG (update, UPDATE_PREFIX)) -    { -      write += bgp_debug_list_conf_print (vty, "debug bgp updates prefix", -                                          bgp_debug_update_prefixes); -    } - -  if (CONF_BGP_DEBUG (update, UPDATE_IN)) -    { -      write += bgp_debug_list_conf_print (vty, "debug bgp updates in", -                                          bgp_debug_update_in_peers); -    } - -  if (CONF_BGP_DEBUG (update, UPDATE_OUT)) -    { -      write += bgp_debug_list_conf_print (vty, "debug bgp updates out", -                                          bgp_debug_update_out_peers); -    } - -  if (CONF_BGP_DEBUG (zebra, ZEBRA)) -    { -      if (!bgp_debug_zebra_prefixes || list_isempty(bgp_debug_zebra_prefixes)) -        { -          vty_out (vty, "debug bgp zebra\n"); -          write++; -        } -      else -        { -          write += bgp_debug_list_conf_print (vty, "debug bgp zebra prefix", -                                              bgp_debug_zebra_prefixes); -        } -    } - -  if (CONF_BGP_DEBUG (allow_martians, ALLOW_MARTIANS)) -    { -      vty_out (vty, "debug bgp allow-martians\n"); -      write++; -    } - -  return write; -} +	int write = 0; -static struct cmd_node debug_node = -{ -  DEBUG_NODE, -  "", -  1 -}; +	if (CONF_BGP_DEBUG(as4, AS4)) { +		vty_out(vty, "debug bgp as4\n"); +		write++; +	} -void -bgp_debug_init (void) -{ -  install_node (&debug_node, bgp_config_write_debug); - -  install_element (ENABLE_NODE, &show_debugging_bgp_cmd); - -  install_element (ENABLE_NODE, &debug_bgp_as4_cmd); -  install_element (CONFIG_NODE, &debug_bgp_as4_cmd); -  install_element (ENABLE_NODE, &debug_bgp_as4_segment_cmd); -  install_element (CONFIG_NODE, &debug_bgp_as4_segment_cmd); - -  install_element (ENABLE_NODE, &debug_bgp_neighbor_events_cmd); -  install_element (CONFIG_NODE, &debug_bgp_neighbor_events_cmd); -  install_element (ENABLE_NODE, &debug_bgp_nht_cmd); -  install_element (CONFIG_NODE, &debug_bgp_nht_cmd); -  install_element (ENABLE_NODE, &debug_bgp_keepalive_cmd); -  install_element (CONFIG_NODE, &debug_bgp_keepalive_cmd); -  install_element (ENABLE_NODE, &debug_bgp_update_cmd); -  install_element (CONFIG_NODE, &debug_bgp_update_cmd); -  install_element (ENABLE_NODE, &debug_bgp_zebra_cmd); -  install_element (CONFIG_NODE, &debug_bgp_zebra_cmd); -  install_element (ENABLE_NODE, &debug_bgp_allow_martians_cmd); -  install_element (CONFIG_NODE, &debug_bgp_allow_martians_cmd); -  install_element (ENABLE_NODE, &debug_bgp_update_groups_cmd); -  install_element (CONFIG_NODE, &debug_bgp_update_groups_cmd); -  install_element (ENABLE_NODE, &debug_bgp_bestpath_prefix_cmd); -  install_element (CONFIG_NODE, &debug_bgp_bestpath_prefix_cmd); - -  /* debug bgp updates (in|out) */ -  install_element (ENABLE_NODE, &debug_bgp_update_direct_cmd); -  install_element (CONFIG_NODE, &debug_bgp_update_direct_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_update_direct_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_update_direct_cmd); - -  /* debug bgp updates (in|out) A.B.C.D */ -  install_element (ENABLE_NODE, &debug_bgp_update_direct_peer_cmd); -  install_element (CONFIG_NODE, &debug_bgp_update_direct_peer_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_update_direct_peer_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_update_direct_peer_cmd); - -  /* debug bgp updates prefix A.B.C.D/M */ -  install_element (ENABLE_NODE, &debug_bgp_update_prefix_cmd); -  install_element (CONFIG_NODE, &debug_bgp_update_prefix_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_update_prefix_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_update_prefix_cmd); - -  /* debug bgp zebra prefix A.B.C.D/M */ -  install_element (ENABLE_NODE, &debug_bgp_zebra_prefix_cmd); -  install_element (CONFIG_NODE, &debug_bgp_zebra_prefix_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_zebra_prefix_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_zebra_prefix_cmd); - -  install_element (ENABLE_NODE, &no_debug_bgp_as4_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_as4_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_as4_segment_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_as4_segment_cmd); - -  /* debug bgp neighbor-events A.B.C.D */ -  install_element (ENABLE_NODE, &debug_bgp_neighbor_events_peer_cmd); -  install_element (CONFIG_NODE, &debug_bgp_neighbor_events_peer_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_neighbor_events_peer_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_neighbor_events_peer_cmd); - -  /* debug bgp keepalive A.B.C.D */ -  install_element (ENABLE_NODE, &debug_bgp_keepalive_peer_cmd); -  install_element (CONFIG_NODE, &debug_bgp_keepalive_peer_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_keepalive_peer_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_keepalive_peer_cmd); - -  install_element (ENABLE_NODE, &no_debug_bgp_neighbor_events_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_neighbor_events_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_nht_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_nht_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_keepalive_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_keepalive_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_update_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_update_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_zebra_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_zebra_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_allow_martians_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_allow_martians_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_update_groups_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_update_groups_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_bestpath_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_bestpath_cmd); -  install_element (ENABLE_NODE, &no_debug_bgp_bestpath_prefix_cmd); -  install_element (CONFIG_NODE, &no_debug_bgp_bestpath_prefix_cmd); -} +	if (CONF_BGP_DEBUG(as4, AS4_SEGMENT)) { +		vty_out(vty, "debug bgp as4 segment\n"); +		write++; +	} -/* Return true if this prefix is on the per_prefix_list of prefixes to debug - * for BGP_DEBUG_TYPE - */ -static int -bgp_debug_per_prefix (struct prefix *p, unsigned long term_bgp_debug_type, -                      unsigned int BGP_DEBUG_TYPE, struct list *per_prefix_list) -{ -  struct bgp_debug_filter *filter; -  struct listnode *node, *nnode; +	if (CONF_BGP_DEBUG(bestpath, BESTPATH)) { +		write += bgp_debug_list_conf_print(vty, "debug bgp bestpath", +						   bgp_debug_bestpath_prefixes); +	} + +	if (CONF_BGP_DEBUG(keepalive, KEEPALIVE)) { +		write += bgp_debug_list_conf_print(vty, "debug bgp keepalives", +						   bgp_debug_keepalive_peers); +	} + +	if (CONF_BGP_DEBUG(neighbor_events, NEIGHBOR_EVENTS)) { +		write += bgp_debug_list_conf_print( +			vty, "debug bgp neighbor-events", +			bgp_debug_neighbor_events_peers); +	} + +	if (CONF_BGP_DEBUG(nht, NHT)) { +		vty_out(vty, "debug bgp nht\n"); +		write++; +	} + +	if (CONF_BGP_DEBUG(update_groups, UPDATE_GROUPS)) { +		vty_out(vty, "debug bgp update-groups\n"); +		write++; +	} + +	if (CONF_BGP_DEBUG(update, UPDATE_PREFIX)) { +		write += bgp_debug_list_conf_print(vty, +						   "debug bgp updates prefix", +						   bgp_debug_update_prefixes); +	} + +	if (CONF_BGP_DEBUG(update, UPDATE_IN)) { +		write += bgp_debug_list_conf_print(vty, "debug bgp updates in", +						   bgp_debug_update_in_peers); +	} + +	if (CONF_BGP_DEBUG(update, UPDATE_OUT)) { +		write += bgp_debug_list_conf_print(vty, "debug bgp updates out", +						   bgp_debug_update_out_peers); +	} -  if (term_bgp_debug_type & BGP_DEBUG_TYPE) -    { -      /* We are debugging all prefixes so return true */ -      if (!per_prefix_list || list_isempty(per_prefix_list)) -        return 1; +	if (CONF_BGP_DEBUG(zebra, ZEBRA)) { +		if (!bgp_debug_zebra_prefixes +		    || list_isempty(bgp_debug_zebra_prefixes)) { +			vty_out(vty, "debug bgp zebra\n"); +			write++; +		} else { +			write += bgp_debug_list_conf_print( +				vty, "debug bgp zebra prefix", +				bgp_debug_zebra_prefixes); +		} +	} -      else -        { -          if (!p) -            return 0; +	if (CONF_BGP_DEBUG(allow_martians, ALLOW_MARTIANS)) { +		vty_out(vty, "debug bgp allow-martians\n"); +		write++; +	} -          for (ALL_LIST_ELEMENTS (per_prefix_list, node, nnode, filter)) -            if (filter->p->prefixlen == p->prefixlen && prefix_match(filter->p, p)) -              return 1; +	return write; +} -          return 0; -        } -    } +static struct cmd_node debug_node = {DEBUG_NODE, "", 1}; + +void bgp_debug_init(void) +{ +	install_node(&debug_node, bgp_config_write_debug); + +	install_element(ENABLE_NODE, &show_debugging_bgp_cmd); + +	install_element(ENABLE_NODE, &debug_bgp_as4_cmd); +	install_element(CONFIG_NODE, &debug_bgp_as4_cmd); +	install_element(ENABLE_NODE, &debug_bgp_as4_segment_cmd); +	install_element(CONFIG_NODE, &debug_bgp_as4_segment_cmd); + +	install_element(ENABLE_NODE, &debug_bgp_neighbor_events_cmd); +	install_element(CONFIG_NODE, &debug_bgp_neighbor_events_cmd); +	install_element(ENABLE_NODE, &debug_bgp_nht_cmd); +	install_element(CONFIG_NODE, &debug_bgp_nht_cmd); +	install_element(ENABLE_NODE, &debug_bgp_keepalive_cmd); +	install_element(CONFIG_NODE, &debug_bgp_keepalive_cmd); +	install_element(ENABLE_NODE, &debug_bgp_update_cmd); +	install_element(CONFIG_NODE, &debug_bgp_update_cmd); +	install_element(ENABLE_NODE, &debug_bgp_zebra_cmd); +	install_element(CONFIG_NODE, &debug_bgp_zebra_cmd); +	install_element(ENABLE_NODE, &debug_bgp_allow_martians_cmd); +	install_element(CONFIG_NODE, &debug_bgp_allow_martians_cmd); +	install_element(ENABLE_NODE, &debug_bgp_update_groups_cmd); +	install_element(CONFIG_NODE, &debug_bgp_update_groups_cmd); +	install_element(ENABLE_NODE, &debug_bgp_bestpath_prefix_cmd); +	install_element(CONFIG_NODE, &debug_bgp_bestpath_prefix_cmd); + +	/* debug bgp updates (in|out) */ +	install_element(ENABLE_NODE, &debug_bgp_update_direct_cmd); +	install_element(CONFIG_NODE, &debug_bgp_update_direct_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_update_direct_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_update_direct_cmd); + +	/* debug bgp updates (in|out) A.B.C.D */ +	install_element(ENABLE_NODE, &debug_bgp_update_direct_peer_cmd); +	install_element(CONFIG_NODE, &debug_bgp_update_direct_peer_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_update_direct_peer_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_update_direct_peer_cmd); + +	/* debug bgp updates prefix A.B.C.D/M */ +	install_element(ENABLE_NODE, &debug_bgp_update_prefix_cmd); +	install_element(CONFIG_NODE, &debug_bgp_update_prefix_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_update_prefix_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_update_prefix_cmd); + +	/* debug bgp zebra prefix A.B.C.D/M */ +	install_element(ENABLE_NODE, &debug_bgp_zebra_prefix_cmd); +	install_element(CONFIG_NODE, &debug_bgp_zebra_prefix_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_zebra_prefix_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_zebra_prefix_cmd); + +	install_element(ENABLE_NODE, &no_debug_bgp_as4_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_as4_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_as4_segment_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_as4_segment_cmd); + +	/* debug bgp neighbor-events A.B.C.D */ +	install_element(ENABLE_NODE, &debug_bgp_neighbor_events_peer_cmd); +	install_element(CONFIG_NODE, &debug_bgp_neighbor_events_peer_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_neighbor_events_peer_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_neighbor_events_peer_cmd); + +	/* debug bgp keepalive A.B.C.D */ +	install_element(ENABLE_NODE, &debug_bgp_keepalive_peer_cmd); +	install_element(CONFIG_NODE, &debug_bgp_keepalive_peer_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_keepalive_peer_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_keepalive_peer_cmd); + +	install_element(ENABLE_NODE, &no_debug_bgp_neighbor_events_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_neighbor_events_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_nht_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_nht_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_keepalive_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_keepalive_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_update_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_update_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_zebra_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_zebra_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_allow_martians_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_allow_martians_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_update_groups_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_update_groups_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_bestpath_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_bestpath_cmd); +	install_element(ENABLE_NODE, &no_debug_bgp_bestpath_prefix_cmd); +	install_element(CONFIG_NODE, &no_debug_bgp_bestpath_prefix_cmd); +} -  return 0; +/* Return true if this prefix is on the per_prefix_list of prefixes to debug + * for BGP_DEBUG_TYPE + */ +static int bgp_debug_per_prefix(struct prefix *p, +				unsigned long term_bgp_debug_type, +				unsigned int BGP_DEBUG_TYPE, +				struct list *per_prefix_list) +{ +	struct bgp_debug_filter *filter; +	struct listnode *node, *nnode; + +	if (term_bgp_debug_type & BGP_DEBUG_TYPE) { +		/* We are debugging all prefixes so return true */ +		if (!per_prefix_list || list_isempty(per_prefix_list)) +			return 1; + +		else { +			if (!p) +				return 0; + +			for (ALL_LIST_ELEMENTS(per_prefix_list, node, nnode, +					       filter)) +				if (filter->p->prefixlen == p->prefixlen +				    && prefix_match(filter->p, p)) +					return 1; + +			return 0; +		} +	} + +	return 0;  }  /* Return true if this peer is on the per_peer_list of peers to debug   * for BGP_DEBUG_TYPE   */ -static int -bgp_debug_per_peer(char *host, unsigned long term_bgp_debug_type, -                   unsigned int BGP_DEBUG_TYPE, struct list *per_peer_list) +static int bgp_debug_per_peer(char *host, unsigned long term_bgp_debug_type, +			      unsigned int BGP_DEBUG_TYPE, +			      struct list *per_peer_list)  { -  struct bgp_debug_filter *filter; -  struct listnode *node, *nnode; +	struct bgp_debug_filter *filter; +	struct listnode *node, *nnode; -  if (term_bgp_debug_type & BGP_DEBUG_TYPE) -    { -      /* We are debugging all peers so return true */ -      if (!per_peer_list || list_isempty(per_peer_list)) -        return 1; +	if (term_bgp_debug_type & BGP_DEBUG_TYPE) { +		/* We are debugging all peers so return true */ +		if (!per_peer_list || list_isempty(per_peer_list)) +			return 1; -      else -        { -          if (!host) -            return 0; +		else { +			if (!host) +				return 0; -          for (ALL_LIST_ELEMENTS (per_peer_list, node, nnode, filter)) -            if (strcmp (filter->host, host) == 0) -              return 1; +			for (ALL_LIST_ELEMENTS(per_peer_list, node, nnode, +					       filter)) +				if (strcmp(filter->host, host) == 0) +					return 1; -          return 0; -        } -    } +			return 0; +		} +	} -  return 0; +	return 0;  } -int -bgp_debug_neighbor_events (struct peer *peer) +int bgp_debug_neighbor_events(struct peer *peer)  { -  char *host = NULL; +	char *host = NULL; -  if (peer) -    host = peer->host; +	if (peer) +		host = peer->host; -  return bgp_debug_per_peer (host, -                             term_bgp_debug_neighbor_events, -                             BGP_DEBUG_NEIGHBOR_EVENTS, -                             bgp_debug_neighbor_events_peers); +	return bgp_debug_per_peer(host, term_bgp_debug_neighbor_events, +				  BGP_DEBUG_NEIGHBOR_EVENTS, +				  bgp_debug_neighbor_events_peers);  } -int -bgp_debug_keepalive (struct peer *peer) +int bgp_debug_keepalive(struct peer *peer)  { -  char *host = NULL; +	char *host = NULL; -  if (peer) -    host = peer->host; +	if (peer) +		host = peer->host; -  return bgp_debug_per_peer (host, -                             term_bgp_debug_keepalive, -                             BGP_DEBUG_KEEPALIVE, -                             bgp_debug_keepalive_peers); +	return bgp_debug_per_peer(host, term_bgp_debug_keepalive, +				  BGP_DEBUG_KEEPALIVE, +				  bgp_debug_keepalive_peers);  } -int -bgp_debug_update (struct peer *peer, struct prefix *p, -                  struct update_group *updgrp, unsigned int inbound) +int bgp_debug_update(struct peer *peer, struct prefix *p, +		     struct update_group *updgrp, unsigned int inbound)  { -  char *host = NULL; - -  if (peer) -    host = peer->host; - -  if (inbound) -    { -      if (bgp_debug_per_peer (host, term_bgp_debug_update, BGP_DEBUG_UPDATE_IN, -                              bgp_debug_update_in_peers)) -        return 1; -    } - -  /* outbound */ -  else -    { -      if (bgp_debug_per_peer (host, term_bgp_debug_update, -                              BGP_DEBUG_UPDATE_OUT, -                              bgp_debug_update_out_peers)) -        return 1; - -      /* Check if update debugging implicitly enabled for the group. */ -      if (updgrp && UPDGRP_DBG_ON(updgrp)) -        return 1; -    } - - -  if (BGP_DEBUG (update, UPDATE_PREFIX)) -    { -      if (bgp_debug_per_prefix (p, term_bgp_debug_update, -                                BGP_DEBUG_UPDATE_PREFIX, -                                bgp_debug_update_prefixes)) -        return 1; -    } - -  return 0; +	char *host = NULL; + +	if (peer) +		host = peer->host; + +	if (inbound) { +		if (bgp_debug_per_peer(host, term_bgp_debug_update, +				       BGP_DEBUG_UPDATE_IN, +				       bgp_debug_update_in_peers)) +			return 1; +	} + +	/* outbound */ +	else { +		if (bgp_debug_per_peer(host, term_bgp_debug_update, +				       BGP_DEBUG_UPDATE_OUT, +				       bgp_debug_update_out_peers)) +			return 1; + +		/* Check if update debugging implicitly enabled for the group. +		 */ +		if (updgrp && UPDGRP_DBG_ON(updgrp)) +			return 1; +	} + + +	if (BGP_DEBUG(update, UPDATE_PREFIX)) { +		if (bgp_debug_per_prefix(p, term_bgp_debug_update, +					 BGP_DEBUG_UPDATE_PREFIX, +					 bgp_debug_update_prefixes)) +			return 1; +	} + +	return 0;  } -int -bgp_debug_bestpath (struct prefix *p) +int bgp_debug_bestpath(struct prefix *p)  { -  if (BGP_DEBUG (bestpath, BESTPATH)) -    { -      if (bgp_debug_per_prefix (p, term_bgp_debug_bestpath, -                                BGP_DEBUG_BESTPATH, -                                bgp_debug_bestpath_prefixes)) -        return 1; -    } - -  return 0; +	if (BGP_DEBUG(bestpath, BESTPATH)) { +		if (bgp_debug_per_prefix(p, term_bgp_debug_bestpath, +					 BGP_DEBUG_BESTPATH, +					 bgp_debug_bestpath_prefixes)) +			return 1; +	} + +	return 0;  } -int -bgp_debug_zebra (struct prefix *p) +int bgp_debug_zebra(struct prefix *p)  { -  if (BGP_DEBUG (zebra, ZEBRA)) -    { -      if (bgp_debug_per_prefix (p, term_bgp_debug_zebra, BGP_DEBUG_ZEBRA, -                                bgp_debug_zebra_prefixes)) -        return 1; -    } - -  return 0; +	if (BGP_DEBUG(zebra, ZEBRA)) { +		if (bgp_debug_per_prefix(p, term_bgp_debug_zebra, +					 BGP_DEBUG_ZEBRA, +					 bgp_debug_zebra_prefixes)) +			return 1; +	} + +	return 0;  } -const char * -bgp_debug_rdpfxpath2str (afi_t afi, safi_t safi, -                         struct prefix_rd *prd, union prefixconstptr pu, -                         mpls_label_t *label, int addpath_valid, -                         u_int32_t addpath_id, char *str, int size) -{ -  char rd_buf[RD_ADDRSTRLEN]; -  char pfx_buf[PREFIX_STRLEN]; -  char tag_buf[30]; -  /* ' with addpath ID '          17 -   * max strlen of uint32       + 10 -   * +/- (just in case)         +  1 -   * null terminator            +  1 -   * ============================ 29 */ -  char pathid_buf[30]; - -  if (size < BGP_PRD_PATH_STRLEN) -    return NULL; - -  /* Note: Path-id is created by default, but only included in update sometimes. */ -  pathid_buf[0] = '\0'; -  if (addpath_valid) -    snprintf(pathid_buf, sizeof(pathid_buf), " with addpath ID %u", addpath_id); - -  tag_buf[0] = '\0'; -  if (bgp_labeled_safi (safi) && label) -    { -      u_int32_t label_value; - -      label_value = decode_label (label); -      sprintf (tag_buf, " label %u", label_value); -    } - -  if (prd) -    snprintf (str, size, "RD %s %s%s%s", -              prefix_rd2str(prd, rd_buf, sizeof (rd_buf)), -              prefix2str (pu, pfx_buf, sizeof (pfx_buf)), -              tag_buf, pathid_buf); -  else -    snprintf (str, size, "%s%s%s", -              prefix2str (pu, pfx_buf, sizeof (pfx_buf)), -              tag_buf, pathid_buf); - -  return str; +const char *bgp_debug_rdpfxpath2str(afi_t afi, safi_t safi, +				    struct prefix_rd *prd, +				    union prefixconstptr pu, +				    mpls_label_t *label, int addpath_valid, +				    u_int32_t addpath_id, char *str, int size) +{ +	char rd_buf[RD_ADDRSTRLEN]; +	char pfx_buf[PREFIX_STRLEN]; +	char tag_buf[30]; +	/* ' with addpath ID '          17 +	 * max strlen of uint32       + 10 +	 * +/- (just in case)         +  1 +	 * null terminator            +  1 +	 * ============================ 29 */ +	char pathid_buf[30]; + +	if (size < BGP_PRD_PATH_STRLEN) +		return NULL; + +	/* Note: Path-id is created by default, but only included in update +	 * sometimes. */ +	pathid_buf[0] = '\0'; +	if (addpath_valid) +		snprintf(pathid_buf, sizeof(pathid_buf), " with addpath ID %u", +			 addpath_id); + +	tag_buf[0] = '\0'; +	if (bgp_labeled_safi(safi) && label) { +		u_int32_t label_value; + +		label_value = decode_label(label); +		sprintf(tag_buf, " label %u", label_value); +	} + +	if (prd) +		snprintf(str, size, "RD %s %s%s%s", +			 prefix_rd2str(prd, rd_buf, sizeof(rd_buf)), +			 prefix2str(pu, pfx_buf, sizeof(pfx_buf)), tag_buf, +			 pathid_buf); +	else +		snprintf(str, size, "%s%s%s", +			 prefix2str(pu, pfx_buf, sizeof(pfx_buf)), tag_buf, +			 pathid_buf); + +	return str;  }  | 
