Unfortunately, the attribute present bits for MP_REACH and MP_UNREACH
which 1a211cb ("bgpd: one more fix"...) tests for are never set in their
corresponding attribute parsing functions.

Reported-by: Martin Winter <[email protected]>
Fixes: 1a211cb "bgpd: one more fix for tightening of check for missing 
well-known attributes"
Cc: Paul Jakma <[email protected]>
Signed-off-by: David Lamparter <[email protected]>
---
One more for good measure... again, will merge this quickly.
(IPv6 BGP is completely broken without this)
---
 bgpd/bgp_attr.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index 5e213db..be316da 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -1591,6 +1591,8 @@ bgp_mp_reach_parse (struct bgp_attr_parser_args *args,
 
   stream_forward_getp (s, nlri_len);
 
+  attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_MP_REACH_NLRI);
+
   return BGP_ATTR_PARSE_PROCEED;
 #undef LEN_LEFT
 }
@@ -1606,6 +1608,7 @@ bgp_mp_unreach_parse (struct bgp_attr_parser_args *args,
   u_int16_t withdraw_len;
   int ret;
   struct peer *const peer = args->peer;  
+  struct attr *const attr = args->attr;
   const bgp_size_t length = args->length;
 
   s = peer->ibuf;
@@ -1633,6 +1636,8 @@ bgp_mp_unreach_parse (struct bgp_attr_parser_args *args,
 
   stream_forward_getp (s, withdraw_len);
 
+  attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_MP_UNREACH_NLRI);
+
   return BGP_ATTR_PARSE_PROCEED;
 }
 
-- 
1.8.5.5


_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to