From 065eaa36290decd582bd299855bbc86a890b07c2 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 16 Aug 2018 09:29:23 -0400 Subject: [PATCH] bgpd: Convert bgp_open.c to use flog_warn Signed-off-by: Donald Sharp --- bgpd/bgp_errors.c | 24 ++++++++++++++++++++++++ bgpd/bgp_errors.h | 4 ++++ bgpd/bgp_open.c | 33 ++++++++++++++++++++++----------- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/bgpd/bgp_errors.c b/bgpd/bgp_errors.c index 70cdf53bd4..6a0b0a9ee9 100644 --- a/bgpd/bgp_errors.c +++ b/bgpd/bgp_errors.c @@ -157,6 +157,30 @@ static struct log_ref ferr_bgp_warn[] = { .description = "BGP has attempted to send data to zebra but has been unable to do so", .suggestion = "Gather log data, open an Issue and restart FRR" }, + { + .code = BGP_WARN_CAPABILITY_INVALID_LENGTH, + .title = "BGP has received a capability with an invalid length", + .description = "BGP has received a capability from it's peer who's size is wrong", + .suggestion = "Gather log files from here and from peer and open an Issue", + }, + { + .code = BGP_WARN_CAPABILITY_INVALID_DATA, + .title = "BGP has received capability data with invalid information", + .description = "BGP has noticed that during processing of capability information that data was wrong", + .suggestion = "Gather log files from here and from peer and open an Issue", + }, + { + .code = BGP_WARN_CAPABILITY_VENDOR, + .title = "BGP has recieved capability data specific to a particular vendor", + .description = "BGP has received a capability that is vendor specific and as such we have no knowledge of how to use this capability in FRR", + .suggestion = "On peer turn off this feature" + }, + { + .code = BGP_WARN_CAPABILITY_UNKNOWN, + .title = "BGP has received capability data for a unknown capability", + .description = "BGP has received a capability that it does not know how to decode. This may be due to a new feature that has not been coded into FRR or it may be a bug in the remote peer", + .suggestion = "Gather log files from here and from peer and open an Issue", + }, { .code = END_FERR, } diff --git a/bgpd/bgp_errors.h b/bgpd/bgp_errors.h index 6accd44230..4de04f760e 100644 --- a/bgpd/bgp_errors.h +++ b/bgpd/bgp_errors.h @@ -94,6 +94,10 @@ enum bgp_log_refs { BGP_WARN_EVPN_ESI, BGP_WARN_INVALID_LABEL_STACK, BGP_WARN_ZEBRA_SEND, + BGP_WARN_CAPABILITY_INVALID_LENGTH, + BGP_WARN_CAPABILITY_INVALID_DATA, + BGP_WARN_CAPABILITY_VENDOR, + BGP_WARN_CAPABILITY_UNKNOWN, }; extern void bgp_error_init(void); diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c index 5bdee5f512..2a32f02f42 100644 --- a/bgpd/bgp_open.c +++ b/bgpd/bgp_open.c @@ -254,7 +254,8 @@ static int bgp_capability_mp(struct peer *peer, struct capability_header *hdr) /* Verify length is 4 */ if (hdr->length != 4) { - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_INVALID_LENGTH, "MP Cap: Received invalid length %d, non-multiple of 4", hdr->length); return -1; @@ -449,7 +450,8 @@ static int bgp_capability_restart(struct peer *peer, /* Verify length is a multiple of 4 */ if ((caphdr->length - 2) % 4) { - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_INVALID_LENGTH, "Restart Cap: Received invalid length %d, non-multiple of 4", caphdr->length); return -1; @@ -546,7 +548,8 @@ static int bgp_capability_addpath(struct peer *peer, /* Verify length is a multiple of 4 */ if (hdr->length % 4) { - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_INVALID_LENGTH, "Add Path: Received invalid length %d, non-multiple of 4", hdr->length); return -1; @@ -604,7 +607,8 @@ static int bgp_capability_enhe(struct peer *peer, struct capability_header *hdr) /* Verify length is a multiple of 4 */ if (hdr->length % 6) { - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_INVALID_LENGTH, "Extended NH: Received invalid length %d, non-multiple of 6", hdr->length); return -1; @@ -646,7 +650,8 @@ static int bgp_capability_enhe(struct peer *peer, struct capability_header *hdr) if (afi != AFI_IP || nh_afi != AFI_IP6 || !(safi == SAFI_UNICAST || safi == SAFI_LABELED_UNICAST)) { - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_INVALID_DATA, "%s Unexpected afi/safi/next-hop afi: %u/%u/%u " "in Extended Next-hop capability, ignoring", peer->host, pkt_afi, pkt_safi, pkt_nh_afi); @@ -677,7 +682,8 @@ static int bgp_capability_hostname(struct peer *peer, len = stream_getc(s); if (stream_get_getp(s) + len > end) { - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_INVALID_DATA, "%s: Received malformed hostname capability from peer %s", __FUNCTION__, peer->host); return -1; @@ -707,7 +713,8 @@ static int bgp_capability_hostname(struct peer *peer, } if (stream_get_getp(s) + 1 > end) { - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_INVALID_DATA, "%s: Received invalid domain name len (hostname capability) from peer %s", __FUNCTION__, peer->host); return -1; @@ -715,7 +722,8 @@ static int bgp_capability_hostname(struct peer *peer, len = stream_getc(s); if (stream_get_getp(s) + len > end) { - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_INVALID_DATA, "%s: Received runt domain name (hostname capability) from peer %s", __FUNCTION__, peer->host); return -1; @@ -952,10 +960,12 @@ static int bgp_capability_parse(struct peer *peer, size_t length, specific capabilities. It seems reasonable for now... */ - zlog_warn("%s Vendor specific capability %d", + flog_warn(BGP_WARN_CAPABILITY_VENDOR, + "%s Vendor specific capability %d", peer->host, caphdr.code); } else { - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_UNKNOWN, "%s unrecognized capability code: %d - ignored", peer->host, caphdr.code); memcpy(*error, sp, caphdr.length + 2); @@ -970,7 +980,8 @@ static int bgp_capability_parse(struct peer *peer, size_t length, } if (stream_get_getp(s) != (start + caphdr.length)) { if (stream_get_getp(s) > (start + caphdr.length)) - zlog_warn( + flog_warn( + BGP_WARN_CAPABILITY_INVALID_LENGTH, "%s Cap-parser for %s read past cap-length, %u!", peer->host, lookup_msg(capcode_str, caphdr.code, -- 2.39.5