2004-07-09 Sowmini Varadhan <sowmini.varadhan@sun.com>

        * bgp_packet.c: (bgp_collision_detect) Send NOTIFY on new socket
          if that is connection we're closing.
          (bgp_read) invalid marker check applies to KEEPALIVE too.
        * bgp_route.c: Ignore multicast NRLI, dont send NOTIFY.
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog
index 7603dc5..0e81fc0 100644
--- a/bgpd/ChangeLog
+++ b/bgpd/ChangeLog
@@ -1,3 +1,10 @@
+2004-07-09 Sowmini Varadhan <sowmini.varadhan@sun.com>
+
+	* bgp_packet.c: (bgp_collision_detect) Send NOTIFY on new socket
+	  if that is connection we're closing.
+	  (bgp_read) invalid marker check applies to KEEPALIVE too.
+	* bgp_route.c: Ignore multicast NRLI, dont send NOTIFY.
+	
 2004-06-04 Paul Jakma <paul@dishone.st>
 
 	* type mismatch fixes
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 316c44e..37f5afd 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -1117,7 +1117,8 @@
 		 OpenConfirm state). */
 
 	      if (new->fd >= 0)
-		bgp_notify_send (peer, BGP_NOTIFY_CEASE, BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
+		bgp_notify_send (new, BGP_NOTIFY_CEASE, 
+			         BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
 	      return -1;
 	    }
 	}
@@ -2147,7 +2148,7 @@
 		   peer->host, type, size - BGP_HEADER_SIZE);
 
       /* Marker check */
-      if (type == BGP_MSG_OPEN
+      if (((type == BGP_MSG_OPEN) || (type == BGP_MSG_KEEPALIVE))
 	  && ! bgp_marker_all_one (peer->ibuf, BGP_MARKER_SIZE))
 	{
 	  bgp_notify_send (peer,
@@ -2219,7 +2220,7 @@
     {
     case BGP_MSG_OPEN:
       peer->open_in++;
-      bgp_open_receive (peer, size);
+      bgp_open_receive (peer, size); /* XXX return value ignored! */
       break;
     case BGP_MSG_UPDATE:
       peer->readtime = time(NULL);    /* Last read timer reset */
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 1dd8b57..cf65964 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -1688,12 +1688,17 @@
 	{
 	  if (IN_CLASSD (ntohl (p.u.prefix4.s_addr)))
 	    {
+	     /* 
+ 	      * From draft-ietf-idr-bgp4-22, Section 6.3: 
+	      * If a BGP router receives an UPDATE message with a
+	      * semantically incorrect NLRI field, in which a prefix is
+	      * semantically incorrect (eg. an unexpected multicast IP
+	      * address), it should ignore the prefix.
+	      */
 	      zlog (peer->log, LOG_ERR, 
 		    "IPv4 unicast NLRI is multicast address %s",
 		    inet_ntoa (p.u.prefix4));
-	      bgp_notify_send (peer, 
-			       BGP_NOTIFY_UPDATE_ERR, 
-			       BGP_NOTIFY_UPDATE_INVAL_NETWORK);
+
 	      return -1;
 	    }
 	}