]> git.puffer.fish Git - mirror/frr.git/commitdiff
[bgpd] bug #210: Enable crucial VPNv4 code which was disabled
authorPaul Jakma <paul.jakma@sun.com>
Thu, 4 May 2006 07:52:12 +0000 (07:52 +0000)
committerPaul Jakma <paul.jakma@sun.com>
Thu, 4 May 2006 07:52:12 +0000 (07:52 +0000)
2006-05-04 Paul Jakma <paul.jakma@sun.com>

* (general) VPNv4 fixes. Certain VPNv4 code was not enabled.
  See bug #210.
* bgp_attr.{c,h}: (bgp_packet_{withdraw,attribute}) Tag should be
  u_char really.
* bgp_packet.c: (bgp_{update,withdraw}_packet) Enable some
  VPNv4 code which inexplicably was ifdef'd out. comments from
  a tester on IRC suggest this fixes bug #210.

bgpd/ChangeLog
bgpd/bgp_attr.c
bgpd/bgp_attr.h
bgpd/bgp_packet.c

index 2a442f2725c87bf587ac64a61af26ecfe99646ad..a0ba520c7a9413d6764b17acbb4092443b3a00d3 100644 (file)
@@ -1,3 +1,13 @@
+2006-05-04 Paul Jakma <paul.jakma@sun.com>
+
+       * (general) VPNv4 fixes. Certain VPNv4 code was not enabled.
+         See bug #210.
+       * bgp_attr.{c,h}: (bgp_packet_{withdraw,attribute}) Tag should be
+         u_char really.
+       * bgp_packet.c: (bgp_{update,withdraw}_packet) Enable some
+         VPNv4 code which inexplicably was ifdef'd out. comments from
+         a tester on IRC suggest this fixes bug #210.
+
 2006-03-30 Paul Jakma <paul.jakma@sun.com>
 
        * bgp_community.c: (community_gettoken) Unknown token should
index 27ddab11186f4fcda323a01c4ca3ed252d88cdbe..e9dde0fdb19bf405f958d13a0142fcef65d87bd2 100644 (file)
@@ -1350,7 +1350,7 @@ bgp_size_t
 bgp_packet_attribute (struct bgp *bgp, struct peer *peer,
                      struct stream *s, struct attr *attr, struct prefix *p,
                      afi_t afi, safi_t safi, struct peer *from,
-                     struct prefix_rd *prd, char *tag)
+                     struct prefix_rd *prd, u_char *tag)
 {
   size_t cp;
   unsigned int aspath_data_size;
@@ -1703,7 +1703,7 @@ bgp_packet_attribute (struct bgp *bgp, struct peer *peer,
 bgp_size_t
 bgp_packet_withdraw (struct peer *peer, struct stream *s, struct prefix *p,
                     afi_t afi, safi_t safi, struct prefix_rd *prd,
-                    char *tag)
+                    u_char *tag)
 {
   unsigned long cp;
   unsigned long attrlen_pnt;
index a018256fd18806c65e35cd485e7f180a1b94682b..777869ceb001c24c297228ae739a87cc923dbb48 100644 (file)
@@ -123,10 +123,10 @@ extern struct attr *bgp_attr_aggregate_intern (struct bgp *, u_char,
 extern bgp_size_t bgp_packet_attribute (struct bgp *bgp, struct peer *, 
                                  struct stream *, struct attr *, 
                                  struct prefix *, afi_t, safi_t, 
-                                 struct peer *, struct prefix_rd *, char *);
+                                 struct peer *, struct prefix_rd *, u_char *);
 extern bgp_size_t bgp_packet_withdraw (struct peer *peer, struct stream *s, 
                                 struct prefix *p, afi_t, safi_t, 
-                                struct prefix_rd *, char *);
+                                struct prefix_rd *, u_char *);
 extern void bgp_dump_routes_attr (struct stream *, struct attr *,
                                  struct prefix *);
 extern unsigned int attrhash_key_make (struct attr *);
index 07c3cbb19e38e78216dea0c822aa4993646c4cc0..8b024a1c0fd14c1350457cce07c6d18cc0cacacd 100644 (file)
@@ -150,8 +150,6 @@ bgp_update_packet (struct peer *peer, afi_t afi, safi_t safi)
   bgp_size_t total_attr_len = 0;
   unsigned long pos;
   char buf[BUFSIZ];
-  struct prefix_rd *prd = NULL;
-  char *tag = NULL;
 
   s = peer->work;
   stream_reset (s);
@@ -165,12 +163,6 @@ bgp_update_packet (struct peer *peer, afi_t afi, safi_t safi)
       adj = adv->adj;
       if (adv->binfo)
         binfo = adv->binfo;
-#ifdef MPLS_VPN
-      if (rn)
-        prd = (struct prefix_rd *) &rn->prn->p;
-      if (binfo)
-        tag = binfo->tag;
-#endif /* MPLS_VPN */
 
       /* When remaining space can't include NLRI and it's length.  */
       if (rn && STREAM_REMAIN (s) <= BGP_NLRI_LENGTH + PSIZE (rn->p.prefixlen))
@@ -179,6 +171,14 @@ bgp_update_packet (struct peer *peer, afi_t afi, safi_t safi)
       /* If packet is empty, set attribute. */
       if (stream_empty (s))
        {
+         struct prefix_rd *prd = NULL;
+         u_char *tag = NULL;
+         
+         if (rn->prn)
+           prd = (struct prefix_rd *) &rn->prn->p;
+          if (binfo)
+            tag = binfo->tag;
+          
          bgp_packet_set_marker (s, BGP_MSG_UPDATE);
          stream_putw (s, 0);           
          pos = stream_get_endp (s);
@@ -282,7 +282,6 @@ bgp_withdraw_packet (struct peer *peer, afi_t afi, safi_t safi)
   bgp_size_t unfeasible_len;
   bgp_size_t total_attr_len;
   char buf[BUFSIZ];
-  struct prefix_rd *prd = NULL;
 
   s = peer->work;
   stream_reset (s);
@@ -291,9 +290,6 @@ bgp_withdraw_packet (struct peer *peer, afi_t afi, safi_t safi)
     {
       adj = adv->adj;
       rn = adv->rn;
-#ifdef MPLS_VPN
-      prd = (struct prefix_rd *) &rn->prn->p;
-#endif /* MPLS_VPN */
 
       if (STREAM_REMAIN (s) 
          < (BGP_NLRI_LENGTH + BGP_TOTAL_ATTR_LEN + PSIZE (rn->p.prefixlen)))
@@ -309,6 +305,10 @@ bgp_withdraw_packet (struct peer *peer, afi_t afi, safi_t safi)
        stream_put_prefix (s, &rn->p);
       else
        {
+         struct prefix_rd *prd = NULL;
+         
+         if (rn->prn)
+           prd = (struct prefix_rd *) &rn->prn->p;
          pos = stream_get_endp (s);
          stream_putw (s, 0);
          total_attr_len