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:
parent
bb57d9171f
commit
9dac814ee8
1 changed files with 10 additions and 3 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue