X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=bgpd%2Fbgp_flowspec.c;h=9554638735f163f68ec77a537806259d400c517a;hb=f94ed830df98218447f00b97f856de811bfcc4a2;hp=6695596c6f6b372906f7ffecceb7b0a7ae5fad89;hpb=ea454ba398edbe831ae47273e35551fd135bf81c;p=mirror_frr.git diff --git a/bgpd/bgp_flowspec.c b/bgpd/bgp_flowspec.c index 6695596c6..955463873 100644 --- a/bgpd/bgp_flowspec.c +++ b/bgpd/bgp_flowspec.c @@ -18,9 +18,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "math.h" - #include +#include + #include "prefix.h" #include "lib_errors.h" @@ -104,16 +104,15 @@ int bgp_nlri_parse_flowspec(struct peer *peer, struct attr *attr, safi = packet->safi; if (afi == AFI_IP6) { - flog_err(LIB_ERR_DEVELOPMENT, - "BGP flowspec IPv6 not supported"); - return -1; + flog_err(EC_LIB_DEVELOPMENT, "BGP flowspec IPv6 not supported"); + return BGP_NLRI_PARSE_ERROR_FLOWSPEC_IPV6_NOT_SUPPORTED; } if (packet->length >= FLOWSPEC_NLRI_SIZELIMIT) { - flog_err(BGP_ERR_FLOWSPEC_PACKET, - "BGP flowspec nlri length maximum reached (%u)", - packet->length); - return -1; + flog_err(EC_BGP_FLOWSPEC_PACKET, + "BGP flowspec nlri length maximum reached (%u)", + packet->length); + return BGP_NLRI_PARSE_ERROR_FLOWSPEC_NLRI_SIZELIMIT; } for (; pnt < lim; pnt += psize) { @@ -122,21 +121,23 @@ int bgp_nlri_parse_flowspec(struct peer *peer, struct attr *attr, /* All FlowSpec NLRI begin with length. */ if (pnt + 1 > lim) - return -1; + return BGP_NLRI_PARSE_ERROR_PACKET_OVERFLOW; psize = *pnt++; /* When packet overflow occur return immediately. */ if (pnt + psize > lim) { - flog_err(BGP_ERR_FLOWSPEC_PACKET, - "Flowspec NLRI length inconsistent ( size %u seen)", - psize); - return -1; + flog_err( + EC_BGP_FLOWSPEC_PACKET, + "Flowspec NLRI length inconsistent ( size %u seen)", + psize); + return BGP_NLRI_PARSE_ERROR_PACKET_OVERFLOW; } if (bgp_fs_nlri_validate(pnt, psize) < 0) { - flog_err(BGP_ERR_FLOWSPEC_PACKET, - "Bad flowspec format or NLRI options not supported"); - return -1; + flog_err( + EC_BGP_FLOWSPEC_PACKET, + "Bad flowspec format or NLRI options not supported"); + return BGP_NLRI_PARSE_ERROR_FLOWSPEC_BAD_FORMAT; } p.family = AF_FLOWSPEC; p.prefixlen = 0; @@ -148,7 +149,7 @@ int bgp_nlri_parse_flowspec(struct peer *peer, struct attr *attr, if (BGP_DEBUG(flowspec, FLOWSPEC)) { char return_string[BGP_FLOWSPEC_NLRI_STRING_MAX]; - char local_string[BGP_FLOWSPEC_NLRI_STRING_MAX * 2]; + char local_string[BGP_FLOWSPEC_NLRI_STRING_MAX*2+16]; char ec_string[BGP_FLOWSPEC_NLRI_STRING_MAX]; char *s = NULL; @@ -188,11 +189,11 @@ int bgp_nlri_parse_flowspec(struct peer *peer, struct attr *attr, ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL, NULL, NULL, 0, NULL); if (ret) { - flog_err(BGP_ERR_FLOWSPEC_INSTALLATION, - "Flowspec NLRI failed to be %s.", - attr ? "added" : "withdrawn"); - return -1; + flog_err(EC_BGP_FLOWSPEC_INSTALLATION, + "Flowspec NLRI failed to be %s.", + attr ? "added" : "withdrawn"); + return BGP_NLRI_PARSE_ERROR; } } - return 0; + return BGP_NLRI_PARSE_OK; }