]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: fix evpn type-5 implicit withdraw processing 3879/head
authorChirag Shah <chirag@cumulusnetworks.com>
Mon, 25 Feb 2019 18:07:05 +0000 (10:07 -0800)
committerChirag Shah <chirag@cumulusnetworks.com>
Tue, 26 Feb 2019 22:23:14 +0000 (14:23 -0800)
Withdraw flag is not sufficient to call bgp_update vs. bgp_withdraw()
processing for a given BGP evpn update message.

When a bgp update needs to be treated as an implicit withdraw
(e.g., due to malformed attribute), the code wasn't handling
things properly.

Rearranging attribute pass field to type-5 route processing and aligning
similar to done for other routes (type2/type-3).

Ticket:CM-24003
Reviewed By:CCR-8330
Testing Done:

Singed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
bgpd/bgp_evpn.c

index 1471bd9829a50719b564d1526113edb78330119d..ce688c8d1ad775ae5a173365106522daee8747cd 100644 (file)
@@ -3935,7 +3935,7 @@ static int process_type4_route(struct peer *peer, afi_t afi, safi_t safi,
  */
 static int process_type5_route(struct peer *peer, afi_t afi, safi_t safi,
                               struct attr *attr, uint8_t *pfx, int psize,
-                              uint32_t addpath_id, int withdraw)
+                              uint32_t addpath_id)
 {
        struct prefix_rd prd;
        struct prefix_evpn p;
@@ -4021,7 +4021,7 @@ static int process_type5_route(struct peer *peer, afi_t afi, safi_t safi,
         */
 
        /* Process the route. */
-       if (!withdraw)
+       if (attr)
                ret = bgp_update(peer, (struct prefix *)&p, addpath_id, attr,
                                 afi, safi, ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL,
                                 &prd, &label, 1, 0, &evpn);
@@ -4873,8 +4873,9 @@ int bgp_nlri_parse_evpn(struct peer *peer, struct attr *attr,
                        break;
 
                case BGP_EVPN_IP_PREFIX_ROUTE:
-                       if (process_type5_route(peer, afi, safi, attr, pnt,
-                                               psize, addpath_id, withdraw)) {
+                       if (process_type5_route(peer, afi, safi,
+                                               withdraw ? NULL : attr, pnt,
+                                               psize, addpath_id)) {
                                flog_err(
                                        EC_BGP_PKT_PROCESS,
                                        "%u:%s - Error in processing EVPN type-5 NLRI size %d",