diff options
-rw-r--r-- | dpdk/Makefile | 4 | ||||
-rw-r--r-- | lib/libtle_l4p/tcp_stream.c | 6 | ||||
-rw-r--r-- | lib/libtle_l4p/tcp_tx_seg.h | 7 |
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 ? */ |