diff options
author | Florin Coras <fcoras@cisco.com> | 2017-04-26 00:08:42 -0700 |
---|---|---|
committer | Florin Coras <fcoras@cisco.com> | 2017-05-01 10:41:44 -0700 |
commit | c28764fd356632763614ea579f678d8f55eca4c7 (patch) | |
tree | 2c46999bc9474a5604f057812e6c25a821621b2c /src/vnet/session | |
parent | 63c7e14f2e62caa1246349cfe341a93176ec4a43 (diff) |
TCP ooo reception fixes
- Improve svm fifo handling of out-of-order segments
- Ensure tsval_recent is updated only if rcv_las falls withing the
segments's sequence space
- Avoid directly dropping old ACKs
- Improve debugging
Change-Id: I88dbe2394a0ad7eb389a4cc12d013a13733953aa
Signed-off-by: Florin Coras <fcoras@cisco.com>
Diffstat (limited to 'src/vnet/session')
-rw-r--r-- | src/vnet/session/session.c | 15 | ||||
-rw-r--r-- | src/vnet/session/session.h | 7 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index d17c93f8f69..e92bb440601 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -609,6 +609,21 @@ session_manager_flush_enqueue_events (u32 thread_index) return errors; } +/** + * Init fifo tail and head pointers + * + * Useful if transport uses absolute offsets for tracking ooo segments. + */ +void +stream_session_init_fifos_pointers (transport_connection_t * tc, + u32 rx_pointer, u32 tx_pointer) +{ + stream_session_t *s; + s = stream_session_get (tc->s_index, tc->thread_index); + svm_fifo_init_pointers (s->server_rx_fifo, rx_pointer); + svm_fifo_init_pointers (s->server_tx_fifo, tx_pointer); +} + void stream_session_connect_notify (transport_connection_t * tc, u8 sst, u8 is_fail) diff --git a/src/vnet/session/session.h b/src/vnet/session/session.h index 8cd72f3577a..f41a8a96eb5 100644 --- a/src/vnet/session/session.h +++ b/src/vnet/session/session.h @@ -352,9 +352,10 @@ stream_session_peek_bytes (transport_connection_t * tc, u8 * buffer, u32 offset, u32 max_bytes); u32 stream_session_dequeue_drop (transport_connection_t * tc, u32 max_bytes); -void -stream_session_connect_notify (transport_connection_t * tc, u8 sst, - u8 is_fail); +void stream_session_connect_notify (transport_connection_t * tc, u8 sst, + u8 is_fail); +void stream_session_init_fifos_pointers (transport_connection_t * tc, + u32 rx_pointer, u32 tx_pointer); void stream_session_accept_notify (transport_connection_t * tc); void stream_session_disconnect_notify (transport_connection_t * tc); |