summaryrefslogtreecommitdiff
path: root/bgpd
diff options
context:
space:
mode:
authorPaul Jakma <paul.jakma@sun.com>2006-10-15 23:39:59 +0000
committerPaul Jakma <paul.jakma@sun.com>2006-10-15 23:39:59 +0000
commitdcdf399fbc7420d3edc230c9646f720825fcecda (patch)
treed4712072c844fff67e49e44fc9503d0b11f8062f /bgpd
parent876b8be0ab24721e8f94d47dde022563f76db992 (diff)
[bgpd] Bug #302 fixes. ClearingCompleted event gets flushed, leaving peers stuck in Clearing.
2006-10-14 Paul Jakma <paul.jakma@sun.com> * bgp_fsm.h: Remove BGP_EVENT_FLUSH_ADD, dangerous and not needed. * bgp_fsm.c: (bgp_stop) Move BGP_EVENT_FLUSH to the top of the of the function, otherwise it could flush a ClearingCompleted event, bug #302. * bgp_packet.c: Replace all BGP_EVENT_FLUSH_ADD with BGP_EVENT_ADD, fixing bug #302.
Diffstat (limited to 'bgpd')
-rw-r--r--bgpd/ChangeLog10
-rw-r--r--bgpd/bgp_fsm.c6
-rw-r--r--bgpd/bgp_fsm.h6
-rw-r--r--bgpd/bgp_packet.c8
4 files changed, 17 insertions, 13 deletions
diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog
index 2294f89a..c33562da 100644
--- a/bgpd/ChangeLog
+++ b/bgpd/ChangeLog
@@ -1,3 +1,13 @@
+2006-10-14 Paul Jakma <paul.jakma@sun.com>
+
+ * bgp_fsm.h: Remove BGP_EVENT_FLUSH_ADD, dangerous and not
+ needed.
+ * bgp_fsm.c: (bgp_stop) Move BGP_EVENT_FLUSH to the top of the
+ of the function, otherwise it could flush a ClearingCompleted
+ event, bug #302.
+ * bgp_packet.c: Replace all BGP_EVENT_FLUSH_ADD with
+ BGP_EVENT_ADD, fixing bug #302.
+
2006-09-19 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgpd.c: (peer_uptime) Fix printf format/arg mismatch in
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index cc2b2c3a..ef8dfea4 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -428,6 +428,9 @@ bgp_stop (struct peer *peer)
safi_t safi;
char orf_name[BUFSIZ];
+ /* Delete all existing events of the peer */
+ BGP_EVENT_FLUSH (peer);
+
/* Increment Dropped count. */
if (peer->status == Established)
{
@@ -499,9 +502,6 @@ bgp_stop (struct peer *peer)
BGP_TIMER_OFF (peer->t_asorig);
BGP_TIMER_OFF (peer->t_routeadv);
- /* Delete all existing events of the peer */
- BGP_EVENT_FLUSH (peer);
-
/* Stream reset. */
peer->packet_size = 0;
diff --git a/bgpd/bgp_fsm.h b/bgpd/bgp_fsm.h
index c51bed37..a749f8ea 100644
--- a/bgpd/bgp_fsm.h
+++ b/bgpd/bgp_fsm.h
@@ -71,12 +71,6 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
thread_cancel_event (master, (P)); \
} while (0)
-#define BGP_EVENT_FLUSH_ADD(P,E) \
- do { \
- BGP_EVENT_FLUSH(P); \
- BGP_EVENT_ADD(P,E); \
- } while (0)
-
/* Prototypes. */
extern int bgp_event (struct thread *);
extern int bgp_stop (struct peer *peer);
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index da59d329..cf6d00f1 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -637,7 +637,7 @@ bgp_write (struct thread *thread)
if (write_errno == EWOULDBLOCK || write_errno == EAGAIN)
break;
- BGP_EVENT_FLUSH_ADD (peer, TCP_fatal_error);
+ BGP_EVENT_ADD (peer, TCP_fatal_error);
return 0;
}
if (num != writenum)
@@ -672,7 +672,7 @@ bgp_write (struct thread *thread)
peer->v_start = (60 * 2);
/* Flush any existing events */
- BGP_EVENT_FLUSH_ADD (peer, BGP_Stop);
+ BGP_EVENT_ADD (peer, BGP_Stop);
return 0;
case BGP_MSG_KEEPALIVE:
peer->keepalive_out++;
@@ -717,7 +717,7 @@ bgp_write_notify (struct peer *peer)
ret = writen (peer->fd, STREAM_DATA (s), stream_get_endp (s));
if (ret <= 0)
{
- BGP_EVENT_FLUSH_ADD (peer, TCP_fatal_error);
+ BGP_EVENT_ADD (peer, TCP_fatal_error);
return 0;
}
@@ -737,7 +737,7 @@ bgp_write_notify (struct peer *peer)
if (peer->v_start >= (60 * 2))
peer->v_start = (60 * 2);
- BGP_EVENT_FLUSH_ADD (peer, BGP_Stop);
+ BGP_EVENT_ADD (peer, BGP_Stop);
return 0;
}