bgpd: one more fix for tightening of check for missing well-known attributes
* bgp_attr.c: (bgp_attr_check) The check for missing NEXT_HOP has the right
spirit, but wrong where it counts, on the logic. It wouldn't catch a
missing NEXT_HOP on a v4-only UPDATE. It would though have incorrectly
flagged next-hop as missing on multi-protocol-only UPDATEs.
Caught by Martin Winter with a test-suite.
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index da17e82..5e213db 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -1761,8 +1761,8 @@
/* RFC 2858 makes Next-Hop optional/ignored, if MP_REACH_NLRI is present and
* NLRI is empty. We can't easily check NLRI empty here though.
*/
- if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_MP_REACH_NLRI))
- && !CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP)))
+ if (!CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP))
+ && !CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_MP_REACH_NLRI)))
type = BGP_ATTR_NEXT_HOP;
if (peer->sort == BGP_PEER_IBGP