aboutsummaryrefslogtreecommitdiffstats
path: root/examples/l4fwd/tcp.h
diff options
context:
space:
mode:
Diffstat (limited to 'examples/l4fwd/tcp.h')
-rw-r--r--examples/l4fwd/tcp.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/examples/l4fwd/tcp.h b/examples/l4fwd/tcp.h
index e4aadb5..701de9b 100644
--- a/examples/l4fwd/tcp.h
+++ b/examples/l4fwd/tcp.h
@@ -199,6 +199,9 @@ netfe_lcore_init_tcp(const struct netfe_lcore_prm *prm)
} else if (prm->stream[i].op == TXONLY) {
fes->txlen = prm->stream[i].txlen;
fes->raddr = prm->stream[i].sprm.remote_addr;
+ } else if (prm->stream[i].op == RXTX) {
+ fes->txlen = prm->stream[i].txlen;
+ fes->rxlen = prm->stream[i].rxlen;
}
if (becfg.server == 1) {
@@ -348,6 +351,7 @@ netfe_new_conn_tcp(struct netfe_lcore *fe, uint32_t lcore,
ts->proto = fes->proto;
ts->family = fes->family;
ts->txlen = fes->txlen;
+ ts->rxlen = fes->rxlen;
tle_event_active(ts->erev, TLE_SEV_DOWN);
if (fes->op == TXONLY || fes->op == FWD) {
@@ -516,7 +520,12 @@ netfe_rxtx_process_tcp(__rte_unused uint32_t lcore, struct netfe_stream *fes)
if (k == 0)
return 0;
- if (n == RTE_DIM(fes->pbuf.pkt)) {
+ /* Mark stream for reading if:
+ * ECHO: Buffer full
+ * RXTX: All outbound packets successfully dispatched
+ */
+ if ((fes->op == ECHO && n == RTE_DIM(fes->pbuf.pkt)) ||
+ (fes->op == RXTX && n - k == 0)) {
/* mark stream as readable */
tle_event_active(fes->rxev, TLE_SEV_UP);
fes->stat.rxev[TLE_SEV_UP]++;
@@ -608,12 +617,14 @@ netfe_lcore_tcp(void)
rc = 0;
- if (fs[j]->op == RXTX)
+ if (fs[j]->op == ECHO)
rc = netfe_rxtx_process_tcp(lcore, fs[j]);
else if (fs[j]->op == FWD)
rc = netfe_fwd_tcp(lcore, fs[j]);
else if (fs[j]->op == TXONLY)
rc = netfe_tx_process_tcp(lcore, fs[j]);
+ else if (fs[j]->op == RXTX)
+ rc = netfe_rxtx_process_tcp(lcore, fs[j]);
/* we are ok to close the stream */
if (rc == 0 && fs[j]->posterr != 0)