aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dpdk/Makefile4
-rw-r--r--lib/libtle_l4p/tcp_stream.c6
-rw-r--r--lib/libtle_l4p/tcp_tx_seg.h7
3 files changed, 12 insertions, 5 deletions
diff --git a/dpdk/Makefile b/dpdk/Makefile
index ddb4287..15204fa 100644
--- a/dpdk/Makefile
+++ b/dpdk/Makefile
@@ -155,9 +155,7 @@ $(B)/.config.ok: $(B)/.patch.ok $(B)/custom-config
.PHONY: config
config: $(B)/.config.ok
-$(B)/.build.ok: $(DPDK_SOURCE_FILES)
- @if [ ! -e $(B)/.config.ok ] ; then echo 'Please run "make config" \
- first' && false ; fi
+$(B)/.build.ok: $(DPDK_SOURCE_FILES) $(B)/.config.ok
@make $(DPDK_MAKE_ARGS) install
@cp $(I)/.config $(B)/.config
@touch $@
diff --git a/lib/libtle_l4p/tcp_stream.c b/lib/libtle_l4p/tcp_stream.c
index 4e9ddb7..676521b 100644
--- a/lib/libtle_l4p/tcp_stream.c
+++ b/lib/libtle_l4p/tcp_stream.c
@@ -506,6 +506,12 @@ tle_tcp_stream_listen(struct tle_stream *ts)
if (ts == NULL || s->s.type >= TLE_VNUM)
return -EINVAL;
+ /* app may listen for multiple times to change backlog,
+ * we will just return success for such cases.
+ */
+ if (s->tcb.state == TCP_ST_LISTEN)
+ return 0;
+
/* mark stream as not closable. */
if (tcp_stream_try_acquire(s) > 0) {
rc = rte_atomic16_cmpset(&s->tcb.state, TCP_ST_CLOSED,
diff --git a/lib/libtle_l4p/tcp_tx_seg.h b/lib/libtle_l4p/tcp_tx_seg.h
index a8d2425..ac2b13b 100644
--- a/lib/libtle_l4p/tcp_tx_seg.h
+++ b/lib/libtle_l4p/tcp_tx_seg.h
@@ -27,6 +27,7 @@ tcp_segmentation(struct rte_mbuf *mbin, struct rte_mbuf *mbout[], uint16_t num,
struct rte_mbuf *in_seg = NULL;
uint32_t nbseg, in_seg_data_pos;
uint32_t more_in_segs;
+ uint16_t bytes_left;
in_seg = mbin;
in_seg_data_pos = 0;
@@ -48,6 +49,7 @@ tcp_segmentation(struct rte_mbuf *mbin, struct rte_mbuf *mbout[], uint16_t num,
return -ENOMEM;
}
+ bytes_left = mss;
out_seg_prev = out_pkt;
more_out_segs = 1;
while (more_out_segs && more_in_segs) {
@@ -66,7 +68,7 @@ tcp_segmentation(struct rte_mbuf *mbin, struct rte_mbuf *mbout[], uint16_t num,
/* Prepare indirect buffer */
rte_pktmbuf_attach(out_seg, in_seg);
- len = mss;
+ len = bytes_left;
if (len > (in_seg->data_len - in_seg_data_pos))
len = in_seg->data_len - in_seg_data_pos;
@@ -75,9 +77,10 @@ tcp_segmentation(struct rte_mbuf *mbin, struct rte_mbuf *mbout[], uint16_t num,
out_pkt->pkt_len = (uint16_t)(len + out_pkt->pkt_len);
out_pkt->nb_segs += 1;
in_seg_data_pos += len;
+ bytes_left -= len;
/* Current output packet (i.e. fragment) done ? */
- if (out_pkt->pkt_len >= mss)
+ if (bytes_left == 0)
more_out_segs = 0;
/* Current input segment done ? */