diff options
-rw-r--r-- | bgpd/ChangeLog | 7 | ||||
-rw-r--r-- | bgpd/bgp_packet.c | 7 | ||||
-rw-r--r-- | bgpd/bgp_route.c | 11 |
3 files changed, 19 insertions, 6 deletions
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog index 7603dc5d..0e81fc08 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 316c44e2..37f5afdc 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -1117,7 +1117,8 @@ bgp_collision_detect (struct peer *new, struct in_addr remote_id) 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 @@ bgp_read (struct thread *thread) 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 @@ bgp_read (struct thread *thread) { 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 1dd8b571..cf65964b 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -1688,12 +1688,17 @@ bgp_nlri_parse (struct peer *peer, struct attr *attr, struct bgp_nlri *packet) { 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; } } |