diff options
| author | Daniel Walton <dwalton@cumulusnetworks.com> | 2015-09-15 19:14:06 -0700 |
|---|---|---|
| committer | Daniel Walton <dwalton@cumulusnetworks.com> | 2015-09-15 19:14:06 -0700 |
| commit | 3a8c7ba1ec02bd2560ebcf4b961a13d2b3e611bd (patch) | |
| tree | 51c3fa999f500aa3eaae328ef7d82d2daacd1bdc /bgpd/bgp_debug.c | |
| parent | ef7f176df3a26d07d5c968ed36c7b74c4ec4a180 (diff) | |
BGP: Display the right reason code for session reset
Ticket: CM-7439
Reviewed By: Donald Sharp
Testing Done:
If a session was reset due to a NOTIFICATION the "show ip bgp
neighbor" output would not display details on what the
notification actually was. This patch changes that. Example:
superm-redxp-05# show ip bgp neighbors 20.1.2.2
BGP neighbor is 20.1.2.2, remote AS 21, local AS 10, external link
[snip]
Last reset 01:05:07, due to NOTIFICATION sent (OPEN Message Error/Bad Peer AS)
Diffstat (limited to 'bgpd/bgp_debug.c')
| -rw-r--r-- | bgpd/bgp_debug.c | 68 |
1 files changed, 38 insertions, 30 deletions
diff --git a/bgpd/bgp_debug.c b/bgpd/bgp_debug.c index fee86d0fcf..48b4ba30d9 100644 --- a/bgpd/bgp_debug.c +++ b/bgpd/bgp_debug.c @@ -451,52 +451,60 @@ bgp_dump_attr (struct peer *peer, struct attr *attr, char *buf, size_t size) return 0; } -/* dump notify packet */ -void -bgp_notify_print(struct peer *peer, struct bgp_notify *bgp_notify, - const char *direct) +const char * +bgp_notify_code_str (char code) { - const char *subcode_str; - const char *code_str; + return LOOKUP_DEF (bgp_notify_msg, code, "Unrecognized Error Code"); +} - subcode_str = ""; - code_str = LOOKUP_DEF (bgp_notify_msg, bgp_notify->code, - "Unrecognized Error Code"); +const char * +bgp_notify_subcode_str (char code, char subcode) +{ - switch (bgp_notify->code) + switch (code) { case BGP_NOTIFY_HEADER_ERR: - subcode_str = LOOKUP_DEF (bgp_notify_head_msg, bgp_notify->subcode, - "Unrecognized Error Subcode"); - break; + return LOOKUP_DEF (bgp_notify_head_msg, subcode, + "Unrecognized Error Subcode"); case BGP_NOTIFY_OPEN_ERR: - subcode_str = LOOKUP_DEF (bgp_notify_open_msg, bgp_notify->subcode, - "Unrecognized Error Subcode"); - break; + return LOOKUP_DEF (bgp_notify_open_msg, subcode, + "Unrecognized Error Subcode"); case BGP_NOTIFY_UPDATE_ERR: - subcode_str = LOOKUP_DEF (bgp_notify_update_msg, bgp_notify->subcode, - "Unrecognized Error Subcode"); - break; + return LOOKUP_DEF (bgp_notify_update_msg, subcode, + "Unrecognized Error Subcode"); case BGP_NOTIFY_HOLD_ERR: break; case BGP_NOTIFY_FSM_ERR: break; case BGP_NOTIFY_CEASE: - subcode_str = LOOKUP_DEF (bgp_notify_cease_msg, bgp_notify->subcode, - "Unrecognized Error Subcode"); - break; + return LOOKUP_DEF (bgp_notify_cease_msg, subcode, + "Unrecognized Error Subcode"); case BGP_NOTIFY_CAPABILITY_ERR: - subcode_str = LOOKUP_DEF (bgp_notify_capability_msg, bgp_notify->subcode, - "Unrecognized Error Subcode"); - break; + return LOOKUP_DEF (bgp_notify_capability_msg, subcode, + "Unrecognized Error Subcode"); } + return ""; +} + +/* 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; if (BGP_DEBUG (neighbor_events, NEIGHBOR_EVENTS) || bgp_flag_check (peer->bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES)) - 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, - bgp_notify->data ? bgp_notify->data : ""); + { + code_str = bgp_notify_code_str(bgp_notify->code); + subcode_str = bgp_notify_subcode_str(bgp_notify->code, bgp_notify->subcode); + + 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, + bgp_notify->data ? bgp_notify->data : ""); + } } static void |
