summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_session.c
diff options
context:
space:
mode:
authorChris Hall <GMCH@hestia.halldom.com>2010-01-31 18:41:22 +0000
committerChris Hall <GMCH@hestia.halldom.com>2010-01-31 18:41:22 +0000
commit64b08a2d2ec89e5464d7489f239a5b23a7a0c17b (patch)
treea95f5c4c449735a51dcfb49c880e7a8c023cb9cf /bgpd/bgp_session.c
parentabf662dd4bf9d688826378677f14f4b20d07d107 (diff)
downloadquagga-64b08a2d2ec89e5464d7489f239a5b23a7a0c17b.tar.bz2
quagga-64b08a2d2ec89e5464d7489f239a5b23a7a0c17b.tar.xz
Testing and fixing round.
modified: bgpd/bgp_msg_read.c -- fix to accept updates when sEstablished ! modified: bgpd/bgp_packet.c -- modified XON/XOFF handling modified: bgpd/bgp_peer.c -- fix event handling to discard events when sLimping. modified: bgpd/bgp_route.c -- announce routes when sEstablished modified: bgpd/bgp_session.c -- add XOFF test free stream in update_receive when mqb_destroy modified: bgpd/bgp_session.h -- add XOFF threshold & XOFF test modified: bgpd/bgpd.c -- PRO TEM reenable in bgp_clear for max-prefix handling modified: lib/log.c -- fix zlog_backtrace modified: lib/mqueue.c -- dasserts for mqb_free_count
Diffstat (limited to 'bgpd/bgp_session.c')
-rw-r--r--bgpd/bgp_session.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/bgpd/bgp_session.c b/bgpd/bgp_session.c
index 936857c0..56d6c7f8 100644
--- a/bgpd/bgp_session.c
+++ b/bgpd/bgp_session.c
@@ -595,6 +595,22 @@ bgp_session_do_update_send(mqueue_block mqb, mqb_flag_t flag)
} ;
/*------------------------------------------------------------------------------
+ * Peering Engine: are we in XOFF state ?
+ */
+extern int
+bgp_session_is_XOFF(bgp_peer peer)
+{
+ int result = 0;
+ bgp_session session = peer->session;
+
+ BGP_SESSION_LOCK(session) ; /*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
+ result = session->flow_control > BGP_XOFF_THRESHOLD ;
+ BGP_SESSION_UNLOCK(session) ; /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
+
+ return result;
+} ;
+
+/*------------------------------------------------------------------------------
* Peering Engine: are we in XON state ?
*/
extern int
@@ -805,17 +821,19 @@ bgp_session_update_recv(bgp_session session, struct stream* buf, bgp_size_t size
static void
bgp_session_do_update_recv(mqueue_block mqb, mqb_flag_t flag)
{
+ bgp_session session = mqb_get_arg0(mqb) ;
+ struct bgp_session_update_args* args = mqb_get_args(mqb) ;
if (flag == mqb_action)
{
- bgp_session session = mqb_get_arg0(mqb) ;
bgp_peer peer = session->peer;
- struct bgp_session_update_args* args = mqb_get_args(mqb) ;
stream_free(peer->ibuf);
peer->ibuf = args->buf;
bgp_update_receive (peer, args->size);
}
+ else
+ stream_free(args->buf) ;
mqb_free(mqb) ;
}
@@ -892,6 +910,7 @@ bgp_session_do_XON(mqueue_block mqb, mqb_flag_t flag)
mqb_free(mqb) ;
}
+
/*==============================================================================
* Peering Engine: send set ttl message to BGP Engine
*