History log of /tldk/lib/libtle_l4p/tcp_rxtx.c
Revision Date Author Comments
# 71ba97fe 11-Mar-2020 Mariusz Drost <mariuszx.drost@intel.com>

l4p/tcp: Reset wscale when timestamp is not set

wscale value calculation and handling is tightly coupled with timestamp
value. When timestamp sending is off on the other end of the connection,
wscale is being wrongly calculated, which leads to traffic being stuck.
To overcome that issue, wscale value needs to be reset during handshake
when timestamps are off. It results with slower connection, but traffic
is sustained.

Here are ofo/lost segment test script results, which were run with and
without timestamps set.

Test Protocol File Status Time Time
timestmaps on timestamps off
Reorder 4 ipv4 8MB [OK] 1m12.594s 0m58.419s
Reorder 9 ipv4 8MB [OK] 0m27.260s 0m31.142s
Reorder 4 ipv4 8MB [OK] 0m58.093s 1m34.772s
Reorder 9 ipv4 8MB [OK] 0m28.798s 0m34.016s
Loss 0 ipv4 8MB [OK] 0m0.047s 0m0.046s
Loss 20 ipv4 8MB [OK] 2m34.807s 2m20.491s
Loss 0 ipv4 8MB [OK] 0m0.047s 0m0.047s
Loss 20 ipv4 8MB [OK] 0m57.360s 2m15.736s
Reorder 4 ipv6 8MB [OK] 1m0.237s 0m46.347s
Reorder 9 ipv6 8MB [OK] 0m25.977s 0m32.035s
Reorder 4 ipv6 8MB [OK] 0m53.248s 0m50.953s
Reorder 9 ipv6 8MB [OK] 0m26.501s 0m29.248s
Loss 0 ipv6 8MB [OK] 0m0.044s 0m0.042s
Loss 20 ipv6 8MB [OK] 1m0.388s 2m14.005s
Loss 0 ipv6 8MB [OK] 0m0.045s 0m0.042s
Loss 20 ipv6 8MB [OK] 0m58.344s 2m1.191s

Signed-off-by: Mariusz Drost <mariuszx.drost@intel.com>
Change-Id: Id89823409e5e6a87722689d0c2322de7ef0f6cf9


# b8f1ef2b 04-Nov-2019 Konstantin Ananyev <konstantin.ananyev@intel.com>

v6: make TCP stream alloc/free to use memtank API

Introduce two extra parameters for TCP context creation:
struct {
uint32_t min;
/**< min number of free streams (grow threshold). */
uint32_t max;
/**< max number of free streams (shrink threshold). */
} free_streams;

By default these params are equal to max_streams value
(avoid dynamic allocation and preserve current beahviour).

grow() is invoked from accept() FE call to refill streams tank for BE.
shrink() is invoked from close() FE call.

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Change-Id: I7af6a76d64813ee4a535323e27ffbfd75037fc92


# e4380f48 02-Jul-2019 Jielong Zhou <jielong.zjl@antfin.com>

l4p/tcp: fix removing overlapped data

rte_pktmbuf_adj and rte_pktmbuf_trim don't support removing data more than
one segment. We reimplemented these funtions to support removing multiple
segments.

Change-Id: I3e2d48310595ecae0acef0674ea2c78fa1068c5b
Signed-off-by: Jielong Zhou <jielong.zjl@antfin.com>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>


# c5f8f7f0 14-Jun-2019 Jianfeng Tan <henry.tjf@antfin.com>

l4p: refactor rx checksum check

For rx checksum check, we put HW and SW ways into one function, with
some code clean up.
As now we do have CKSUM_UNKNOWN, no need to have dev->rx.ol_flags
at all.

Change-Id: Ied77e63e1ec6f5569d16d4ba666fcc968479197d
Signed-off-by: Jianfeng Tan <henry.tjf@antfin.com>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>


# deb5f499 14-Jun-2019 Jianfeng Tan <henry.tjf@antfin.com>

l4p/tcp: few fixes for sending RST packet logic

- for RST on RTO use SND.NXT instead of SND.UNA
- for RST on invalid SEQSEG.ACK in SYN-SENT state:
- use SEG.ACK
- don't terminate the connection

Change-Id: I9943f6fdfb89493af4b0437c5a81af34c450c630
Signed-off-by: Jielong Zhou <jielong.zjl@antfin.com>
Signed-off-by: Jianfeng Tan <henry.tjf@antfin.com>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>


# c2497d18 14-Jun-2019 Jianfeng Tan <henry.tjf@antfin.com>

l4p/tcp: few fixes for sending RST packet logic

- for RST on RTO use SND.NXT instead of SND.UNA
- for RST on invalid SEQSEG.ACK in SYN-SENT state:
- use SEG.ACK
- don't terminate the connection

Change-Id: I9943f6fdfb89493af4b0437c5a81af34c450c630
Signed-off-by: Jielong Zhou <jielong.zjl@antfin.com>
Signed-off-by: Jianfeng Tan <henry.tjf@antfin.com>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>


# 5740a1da 17-Dec-2018 Jielong Zhou <jielong.zjl@antfin.com>

l4p/tcp: fix seq calculation in partial ack

Change-Id: I46fc0eb7f32dfafd22527c7711520cd3a1a0f48a
Signed-off-by: Jielong Zhou <jielong.zjl@antfin.com>


# 0852bebf 07-Jan-2019 Jielong Zhou <jielong.zjl@antfin.com>

l4p/tcp: fix dropping sequential packet

When grouping sequential rx packets, some packet may be dropped incorrectly
because of total length of packets are larger than receive window size
which is out of date.

We do not drop the packet, but check it again with updated receive window
size.

Change-Id: I656864a5f029850da5148b07279a34f22081a342
Signed-off-by: Jielong Zhou <jielong.zjl@antfin.com>


# c1b4951c 01-Nov-2017 Konstantin Ananyev <konstantin.ananyev@intel.com>

tle_tcp: return ENODATA for unprocessed/unused packets that belong to existing stream.

Change-Id: I3109b843178cc8576ebaa6eae6c3f75081067feb
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>


# 7e18fa1b 26-Jul-2017 Konstantin Ananyev <konstantin.ananyev@intel.com>

- Introduce tle_tcp_stream_readv() and tle_tcp_stream_writev().
- Introduce flags for tle_ctx_param.
- Introduce TLE_CTX_FLAG_ST - indicates that given ctx will be used
by single thread only.
- Introduce new parameters for tcp context:
timewait - allows user to configure max timeout in TCP_TIMEWAIT state.
icw - allows user to specify desired initial congestion window
for new connections.
-Few optimisations:
cache tx.ol_flags inside tle destination.
calcualte and cache inside ctx cycles_to_ms shift value.
reorder restoring SYN opts and filling TCB a bit.

Change-Id: Ie05087783b3b7f1e4ce99d3555bc5bd098f83fe0
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>


# 2c33ba7b 11-Jun-2017 Konstantin Ananyev <konstantin.ananyev@intel.com>

libtle_l4p: fix at termination tcp stream not always cleanup it's send queue.

Change-Id: I8ab713c98712fafe2550a6954224ebc741cf9029
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>


# e49446d6 05-Jun-2017 Konstantin Ananyev <konstantin.ananyev@intel.com>

tle_tcp_proces: fix the issue when strem can sit in the txs queue forever.

Change-Id: I313f048fc0888d661f8b0e34af6256afc516670a
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>


# fbba0a3b 11-May-2017 Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>

Added rte_ring wrapper functions to support dpdk-17.05 and older version

Change-Id: I5cfcff8be275ab2a2fb4ad6a62777a8cb88f425b
Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>


# 36d90e3a 03-May-2017 Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>

two fixes. - allow conditional jumbo frame based on rx_max_pkt_len - fix mss size for rx_synack

Change-Id: I47b7775445bc4ba647f9da9edafc4b255082e926
Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>


# 9fa82a63 07-Apr-2017 Reshma Pattan <reshma.pattan@intel.com>

* Add siphash file for calculating the sequence number.
* l4fwd app changed to include new command line parameters
hash and secret key for hash calculation.
* Changed l4fwd library to integrate siphash support for
calculating the sequence number.

Change-Id: I29c60836c8b17a118d76b619fd79398fac200f67
Signed-off-by: Reshma Pattan <reshma.pattan@intel.com>


# 9af556f2 27-Mar-2017 Konstantin Ananyev <konstantin.ananyev@intel.com>

tcp: fix RCV.WND set incorreclty when peer doesn't support WSCALE option

Change-Id: I911fdeeb25bc1112cd38eaa96c34f47a7bf49060
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>


# c4c44906 03-Mar-2017 Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>

implement sw segmentation for tcp

Change-Id: Ibe3ac4b401ea9c7680ab5d3e8c73557d95402ff2
Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>


# 21e7392f 03-Mar-2017 Konstantin Ananyev <konstantin.ananyev@intel.com>

Rewrite accept() code-path and make l4fwd not to close() on FIN immediatelly.

Changes in public API:
- removes tle_tcp_stream_synreqs() and tle_tcp_reject()
- adds tle_tcp_stream_update_cfg
Allocates and fills new stream when final ACK for 3-way handshake
is received.

Changes in l4fwd sample application:
prevents l4fwd to call close() on error event immediately:
first try to recv/send remaining data.

Change-Id: I8c5b9d365353084083731a4ce582197a8268688f
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>


# aa97dd1c 21-Feb-2017 Konstantin Ananyev <konstantin.ananyev@intel.com>

Introduce first version of TCP code.

Supported functionality:
- open/close
- listen/accept/connect
- send/recv
In order to achieve that libtle_udp library was
reworked into libtle_l4p library that supports
both TCP and UDP protocols.
New libtle_timer library was introduced
(thanks to Cisco guys and Dave Barach <dbarach@cisco.com>
for sharing their timer code with us).
Sample application was also reworked significantly
to support both TCP and UDP traffic handling.
New UT were introduced.

Change-Id: I806b05011f521e89b58db403cfdd484a37beb775
Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>
Signed-off-by: Karol Latecki <karolx.latecki@intel.com>
Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>