From 7e18fa1bf263822c46d7431a911b41d6377d5f69 Mon Sep 17 00:00:00 2001 From: Konstantin Ananyev Date: Thu, 27 Jul 2017 12:00:57 +0100 Subject: - 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 Signed-off-by: Mohammad Abdul Awal --- lib/libtle_l4p/tcp_rxq.h | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'lib/libtle_l4p/tcp_rxq.h') diff --git a/lib/libtle_l4p/tcp_rxq.h b/lib/libtle_l4p/tcp_rxq.h index bddc28e..01f34fa 100644 --- a/lib/libtle_l4p/tcp_rxq.h +++ b/lib/libtle_l4p/tcp_rxq.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Intel Corporation. + * Copyright (c) 2016-2017 Intel Corporation. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -22,6 +22,11 @@ extern "C" { #endif +struct rxq_objs { + struct rte_mbuf **mb; + uint32_t num; +}; + static inline uint32_t rx_ofo_enqueue(struct tle_tcp_stream *s, union seqlen *sl, struct rte_mbuf *mb[], uint32_t num) @@ -142,6 +147,41 @@ rx_data_enqueue(struct tle_tcp_stream *s, uint32_t seq, uint32_t len, return t; } +static inline uint32_t +tcp_rxq_get_objs(struct tle_tcp_stream *s, struct rxq_objs obj[2]) +{ + struct rte_ring *r; + uint32_t n, head, sz; + + r = s->rx.q; + + n = _rte_ring_mcs_dequeue_start(r, UINT32_MAX); + if (n == 0) + return 0; + + sz = _rte_ring_get_size(r); + head = (r->cons.head - n) & _rte_ring_get_mask(r); + + obj[0].mb = (struct rte_mbuf **)(_rte_ring_get_data(r) + head); + obj[1].mb = (struct rte_mbuf **)_rte_ring_get_data(r); + + if (head + n <= sz) { + obj[0].num = n; + obj[1].num = 0; + return 1; + } else { + obj[0].num = sz - head; + obj[1].num = n + head - sz; + return 2; + } +} + +static inline void +tcp_rxq_consume(struct tle_tcp_stream *s, uint32_t num) +{ + _rte_ring_mcs_dequeue_finish(s->rx.q, num); +} + #ifdef __cplusplus } #endif -- cgit 1.2.3-korg