[bgpd] bug #419: partial aspath-limit incorrectly causes session reset

2008-06-01 jfletche@gmail.com

	* bgp_attr.c: (bgp_attr_aspathlimit) fix silly bug in flags check
	  that was causing BGP to drop sessions if it received a
	  aspath-limit with partial set. Fixes bug #419.
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog
index 7f94565..4630ab9 100644
--- a/bgpd/ChangeLog
+++ b/bgpd/ChangeLog
@@ -1,4 +1,11 @@
+2008-06-01 jfletche@gmail.com 
+
+	* bgp_attr.c: (bgp_attr_aspathlimit) fix silly bug in flags check
+	  that was causing BGP to drop sessions if it received a
+	  aspath-limit with partial set. Fixes bug #419.
+
 2008-04-10 Denis Ovsienko
+
 	* bgp_aspath.[ch]: (aspath_filter_exclude) New function allows
 	  filtering out arbitrary ASns from AS_PATH attribute.
 	* bgp_aspath.[ch]: (aspath_print_vty) Accept suffix to let calling
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index 26f62f5..9e7ccca 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -695,7 +695,8 @@
   
   total = length + (CHECK_FLAG (flag, BGP_ATTR_FLAG_EXTLEN) ? 4 : 3);
   
-  if (flag != (BGP_ATTR_FLAG_TRANS|BGP_ATTR_FLAG_OPTIONAL))
+  if (!CHECK_FLAG(flag, BGP_ATTR_FLAG_TRANS)
+       || !CHECK_FLAG(flag, BGP_ATTR_FLAG_OPTIONAL))
     {
       zlog (peer->log, LOG_ERR, 
 	    "AS-Pathlimit attribute flag isn't transitive %d", flag);
@@ -804,7 +805,7 @@
       || ! CHECK_FLAG (flag, BGP_ATTR_FLAG_TRANS))
     {
       zlog (peer->log, LOG_ERR, 
-	    "Origin attribute flag isn't transitive %d", flag);
+	    "As-Path attribute flag isn't transitive %d", flag);
       bgp_notify_send_with_data (peer, 
 				 BGP_NOTIFY_UPDATE_ERR, 
 				 BGP_NOTIFY_UPDATE_ATTR_FLAG_ERR,