]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Unset only aggregator flag when AGGREGATOR_AS is 0
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Fri, 5 Feb 2021 14:47:55 +0000 (16:47 +0200)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Fri, 5 Feb 2021 14:50:33 +0000 (16:50 +0200)
Avoid mangling packet size which is expected to be the same as received.

Stream pointer advancing is necessary to avoid changing the packet and
reseting BGP sessions.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
bgpd/bgp_attr.c

index 8a75c686bbe8c142acbe706979c051c6547980b9..f5e54267d48478203362a543c831358ec65d3ef2 100644 (file)
@@ -1697,18 +1697,16 @@ static int bgp_attr_aggregator(struct bgp_attr_parser_args *args)
        else
                aggregator_as = stream_getw(peer->curr);
 
+       attr->aggregator_as = aggregator_as;
+       attr->aggregator_addr.s_addr = stream_get_ipv4(peer->curr);
+
        /* Codification of AS 0 Processing */
-       if (aggregator_as == BGP_AS_ZERO) {
+       if (aggregator_as == BGP_AS_ZERO)
                flog_err(EC_BGP_ATTR_LEN,
                         "%s: AGGREGATOR AS number is 0 for aspath: %s",
                         peer->host, aspath_print(attr->aspath));
-       } else {
-               attr->aggregator_as = aggregator_as;
-               attr->aggregator_addr.s_addr = stream_get_ipv4(peer->curr);
-
-               /* Set atomic aggregate flag. */
+       else
                attr->flag |= ATTR_FLAG_BIT(BGP_ATTR_AGGREGATOR);
-       }
 
        return BGP_ATTR_PARSE_PROCEED;
 }
@@ -1733,17 +1731,16 @@ bgp_attr_as4_aggregator(struct bgp_attr_parser_args *args,
 
        aggregator_as = stream_getl(peer->curr);
 
+       *as4_aggregator_as = aggregator_as;
+       as4_aggregator_addr->s_addr = stream_get_ipv4(peer->curr);
+
        /* Codification of AS 0 Processing */
-       if (aggregator_as == BGP_AS_ZERO) {
+       if (aggregator_as == BGP_AS_ZERO)
                flog_err(EC_BGP_ATTR_LEN,
                         "%s: AS4_AGGREGATOR AS number is 0 for aspath: %s",
                         peer->host, aspath_print(attr->aspath));
-       } else {
-               *as4_aggregator_as = aggregator_as;
-               as4_aggregator_addr->s_addr = stream_get_ipv4(peer->curr);
-
+       else
                attr->flag |= ATTR_FLAG_BIT(BGP_ATTR_AS4_AGGREGATOR);
-       }
 
        return BGP_ATTR_PARSE_PROCEED;
 }