summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaria Jan Matejka <mq@jmq.cz>2019-06-11 09:35:25 +0000
committerMaria Jan Matejka <mq@jmq.cz>2019-06-11 09:39:00 +0000
commite989b901fca6efe2e43c7cfeb5286cc8e4f2ab76 (patch)
tree802b96ccf3dd69677a0666c06e0c1169f157059c
parent5648f07e4d4825181dd70f116c79aaa52f0b0c96 (diff)
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.
-rw-r--r--proto/bgp/packets.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c
index 2248b9f9..665a22c1 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 */