X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fsession_node.c;h=f023a95c98c68cb4e42d1f3a3a6443994be1ca39;hb=9f86d225ab4f3dccbf61383a75d6af7d321a204e;hp=30eca1e65773c347eeff4e6ad1e614d0551233f9;hpb=ed8db52539a8d8239a9a43bea53328d25eb47f0d;p=vpp.git diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c index 30eca1e6577..f023a95c98c 100644 --- a/src/vnet/session/session_node.c +++ b/src/vnet/session/session_node.c @@ -872,7 +872,8 @@ session_tx_fifo_read_and_snd_i (session_worker_t * wrk, { u32 n_custom_tx; ctx->s->flags &= ~SESSION_F_CUSTOM_TX; - n_custom_tx = ctx->transport_vft->custom_tx (ctx->tc, max_burst); + ctx->sp.max_burst_size = max_burst; + n_custom_tx = ctx->transport_vft->custom_tx (ctx->tc, &ctx->sp); *n_tx_packets += n_custom_tx; if (PREDICT_FALSE (ctx->s->session_state >= SESSION_STATE_TRANSPORT_CLOSED)) @@ -1068,8 +1069,9 @@ session_tx_fifo_dequeue_internal (session_worker_t * wrk, vlib_node_runtime_t * node, session_evt_elt_t * elt, int *n_tx_packets) { + transport_send_params_t *sp = &wrk->ctx.sp; session_t *s = wrk->ctx.s; - u32 n_packets, max_pkts; + u32 n_packets; if (PREDICT_FALSE (s->session_state >= SESSION_STATE_TRANSPORT_CLOSED)) return 0; @@ -1077,18 +1079,17 @@ session_tx_fifo_dequeue_internal (session_worker_t * wrk, /* Clear custom-tx flag used to request reschedule for tx */ s->flags &= ~SESSION_F_CUSTOM_TX; - max_pkts = clib_min (VLIB_FRAME_SIZE - *n_tx_packets, - TRANSPORT_PACER_MAX_BURST_PKTS); - n_packets = transport_custom_tx (session_get_transport_proto (s), s, - max_pkts); - *n_tx_packets -= n_packets; + sp->max_burst_size = clib_min (VLIB_FRAME_SIZE - *n_tx_packets, + TRANSPORT_PACER_MAX_BURST_PKTS); - if (svm_fifo_max_dequeue_cons (s->tx_fifo) - || (s->flags & SESSION_F_CUSTOM_TX)) + n_packets = transport_custom_tx (session_get_transport_proto (s), s, sp); + *n_tx_packets += n_packets; + + if (s->flags & SESSION_F_CUSTOM_TX) { session_evt_add_old (wrk, elt); } - else + else if (!(sp->flags & TRANSPORT_SND_F_DESCHED)) { svm_fifo_unset_event (s->tx_fifo); if (svm_fifo_max_dequeue_cons (s->tx_fifo))