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.
This commit is contained in:
Maria Jan Matejka 2019-06-11 09:35:25 +00:00 committed by Maria Matejka
parent bb57d9171f
commit 9dac814ee8

View file

@ -2789,15 +2789,18 @@ bgp_schedule_packet(struct bgp_conn *conn, struct bgp_channel *c, int type)
if ((conn->sk->tpos == conn->sk->tbuf) && !ev_active(conn->tx_ev)) if ((conn->sk->tpos == conn->sk->tbuf) && !ev_active(conn->tx_ev))
ev_schedule(conn->tx_ev); ev_schedule(conn->tx_ev);
} }
void void
bgp_kick_tx(void *vconn) bgp_kick_tx(void *vconn)
{ {
struct bgp_conn *conn = vconn; struct bgp_conn *conn = vconn;
DBG("BGP: kicking TX\n"); 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 void
@ -2806,8 +2809,12 @@ bgp_tx(sock *sk)
struct bgp_conn *conn = sk->data; struct bgp_conn *conn = sk->data;
DBG("BGP: TX hook\n"); 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);
} }