summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2009-04-23 14:44:02 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2009-04-23 14:44:02 +0200
commitf307842ad85396f8186fa049d551b6cde9925484 (patch)
tree1b2e614e599705f811506358c06e84f604b42318
parent8f0c887a52fb19cee14725f66d435cebf2010390 (diff)
downloadbird-f307842ad85396f8186fa049d551b6cde9925484.tar
bird-f307842ad85396f8186fa049d551b6cde9925484.zip
Fixes BGPv6 bug - mandatory attributes weren't validated;
-rw-r--r--proto/bgp/attrs.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c
index 57dce14..a015c2b 100644
--- a/proto/bgp/attrs.c
+++ b/proto/bgp/attrs.c
@@ -1355,11 +1355,11 @@ bgp_decode_attrs(struct bgp_conn *conn, byte *attr, unsigned int len, struct lin
}
#ifdef IPV6
- if (seen[BA_MP_REACH_NLRI / 8] & (1 << (BA_MP_REACH_NLRI % 8)))
+ /* If we received MP_REACH_NLRI we should check mandatory attributes */
+ if (bgp->mp_reach_len != 0)
mandatory = 1;
#endif
-
/* If there is no (reachability) NLRI, we should exit now */
if (! mandatory)
return a;
@@ -1374,7 +1374,7 @@ bgp_decode_attrs(struct bgp_conn *conn, byte *attr, unsigned int len, struct lin
return NULL;
}
}
-
+
/* When receiving attributes from non-AS4-aware BGP speaker,
* we have to reconstruct 4B AS_PATH and AGGREGATOR attributes
*/
@@ -1396,6 +1396,7 @@ bgp_decode_attrs(struct bgp_conn *conn, byte *attr, unsigned int len, struct lin
/* If there's no local preference, define one */
if (!(seen[0] & (1 << BA_LOCAL_PREF)))
bgp_attach_attr(&a->eattrs, pool, BA_LOCAL_PREF, 0);
+
return a;
loop: