From: Maria Jan Matejka Date: Tue, 11 Jun 2019 09:35:25 +0000 (+0000) Subject: BGP: split tx explicitly X-Git-Tag: v1.6.7~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e989b901fca6efe2e43c7cfeb5286cc8e4f2ab76;p=thirdparty%2Fbird.git BGP: split tx explicitly If BGP has too many data to send and BIRD is slower than the link, TX is always possible until all data is sent. This patch limits maximum number of generated BGP messages in one iteration of TX hook. --- diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c index 2248b9f95..665a22c12 100644 --- a/proto/bgp/packets.c +++ b/proto/bgp/packets.c @@ -784,8 +784,12 @@ bgp_kick_tx(void *vconn) struct bgp_conn *conn = vconn; DBG("BGP: kicking TX\n"); - while (bgp_fire_tx(conn) > 0) + uint max = 1024; + while (--max && (bgp_fire_tx(conn) > 0)) ; + + if (!max && !ev_active(conn->tx_ev)) + ev_schedule(conn->tx_ev); } void @@ -794,8 +798,12 @@ bgp_tx(sock *sk) struct bgp_conn *conn = sk->data; DBG("BGP: TX hook\n"); - while (bgp_fire_tx(conn) > 0) + uint max = 1024; + while (--max && (bgp_fire_tx(conn) > 0)) ; + + if (!max && !ev_active(conn->tx_ev)) + ev_schedule(conn->tx_ev); } /* Capatibility negotiation as per RFC 2842 */