]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: make bgp_nlri_parse_encap conform with other nlri_parse funcs
authorPaul Jakma <paul.jakma@hpe.com>
Fri, 5 Feb 2016 14:57:17 +0000 (14:57 +0000)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 26 Oct 2016 13:36:08 +0000 (09:36 -0400)
* bgp_encap.{c,h} (bgp_nlri_parse_encap) afi is already in the NLRI argument.
  update or withdraw is signalled by attr being non-NULL or NULL.

* bgp_packet.c: (update_receive) fixup to match, and also make the attr
  argument conform with NLRI_ATTR_ARG for correct error handling on
  optional, transitive, partial, attributes.

bgpd/bgp_encap.c
bgpd/bgp_encap.h
bgpd/bgp_packet.c

index c60b592133933ddeb9486f5d9156cfa7222394fe..533a30697536adb9e1e41098fea136f543725ca5 100644 (file)
@@ -85,14 +85,13 @@ ecom2prd(struct ecommunity *ecom, struct prefix_rd *prd)
 
 int
 bgp_nlri_parse_encap(
-    afi_t              afi,
     struct peer                *peer,
-    struct attr                *attr,          /* Need even for withdraw */
-    struct bgp_nlri    *packet,
-    int                        withdraw)       /* 0=update, !0 = withdraw */
+    struct attr                *attr,
+    struct bgp_nlri    *packet)
 {
   u_char *pnt;
   u_char *lim;
+  afi_t afi = packet->afi;
   struct prefix p;
   int psize = 0;
   int prefixlen;
@@ -186,7 +185,7 @@ bgp_nlri_parse_encap(
            inet_ntop (p.family, &p.u.prefix, buf, BUFSIZ),
            p.prefixlen);
 
-      if (!withdraw) {
+      if (attr) {
        bgp_update (peer, &p, 0, attr, afi, SAFI_ENCAP,
                    ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL, &prd, NULL, 0);
 #if ENABLE_BGP_VNC
index 6f43b7b3b1133349fe7f90b746886e3313e06a6b..7442c73c47aadbc255473ba4de1098c834307f5f 100644 (file)
 #define _QUAGGA_BGP_ENCAP_H
 
 extern void bgp_encap_init (void);
-extern int bgp_nlri_parse_encap (
-    afi_t,
-    struct peer *,
-    struct attr *,
-    struct bgp_nlri *,
-    int withdraw);
+extern int bgp_nlri_parse_encap (struct peer *, struct attr *, struct bgp_nlri *);
 
 #include "bgp_encap_types.h"
 #endif /* _QUAGGA_BGP_ENCAP_H */
index 6811513448fd4d95cad9d918211cf77ae07ff16a..53d72a037c5ce647f40ab7fe0afebe7ff9ee22d2 100644 (file)
@@ -1705,12 +1705,12 @@ bgp_update_receive (struct peer *peer, bgp_size_t size)
       if (mp_update.length
          && mp_update.afi == AFI_IP
          && mp_update.safi == SAFI_ENCAP)
-       bgp_nlri_parse_encap (mp_update.afi, peer, &attr, &mp_update, 0);
+       bgp_nlri_parse_encap (peer, NLRI_ATTR_ARG, &mp_update);
 
       if (mp_withdraw.length
          && mp_withdraw.afi == AFI_IP
          && mp_withdraw.safi == SAFI_ENCAP)
-       bgp_nlri_parse_encap (mp_withdraw.afi, peer, &attr, &mp_withdraw, 1);
+       bgp_nlri_parse_encap (peer, NULL, &mp_withdraw);
 
       if (! withdraw_len
          && mp_withdraw.afi == AFI_IP
@@ -1734,12 +1734,12 @@ bgp_update_receive (struct peer *peer, bgp_size_t size)
       if (mp_update.length 
          && mp_update.afi == AFI_IP6 
          && mp_update.safi == SAFI_ENCAP)
-       bgp_nlri_parse_encap (mp_update.afi, peer, &attr, &mp_update, 0);
+       bgp_nlri_parse_encap (peer, NLRI_ATTR_ARG, &mp_update);
 
       if (mp_withdraw.length 
          && mp_withdraw.afi == AFI_IP6
          && mp_withdraw.safi == SAFI_ENCAP)
-       bgp_nlri_parse_encap (mp_withdraw.afi, peer, &attr, &mp_withdraw, 1);
+       bgp_nlri_parse_encap (peer, NULL, &mp_withdraw);
 
       if (! withdraw_len
          && mp_withdraw.afi == AFI_IP6