diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2009-04-23 14:44:02 +0200 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2009-04-23 14:44:02 +0200 |
commit | f307842ad85396f8186fa049d551b6cde9925484 (patch) | |
tree | 1b2e614e599705f811506358c06e84f604b42318 /proto/bgp | |
parent | 8f0c887a52fb19cee14725f66d435cebf2010390 (diff) | |
download | bird-f307842ad85396f8186fa049d551b6cde9925484.tar bird-f307842ad85396f8186fa049d551b6cde9925484.zip |
Fixes BGPv6 bug - mandatory attributes weren't validated;
Diffstat (limited to 'proto/bgp')
-rw-r--r-- | proto/bgp/attrs.c | 7 |
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: |