summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/netinet/tcp_lro.h
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/netinet/tcp_lro.h')
-rw-r--r--freebsd/sys/netinet/tcp_lro.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/freebsd/sys/netinet/tcp_lro.h b/freebsd/sys/netinet/tcp_lro.h
index 855f4ee4..1c6d2dd5 100644
--- a/freebsd/sys/netinet/tcp_lro.h
+++ b/freebsd/sys/netinet/tcp_lro.h
@@ -45,6 +45,8 @@ struct lro_entry {
LIST_ENTRY(lro_entry) hash_next;
struct mbuf *m_head;
struct mbuf *m_tail;
+ struct mbuf *m_last_mbuf;
+ struct mbuf *m_prev_last;
union {
struct ip *ip4;
struct ip6_hdr *ip6;
@@ -67,10 +69,22 @@ struct lro_entry {
uint32_t ack_seq; /* tcp_seq */
uint32_t tsval;
uint32_t tsecr;
+ uint32_t tcp_tot_p_len; /* TCP payload length of chain */
uint16_t window;
uint16_t timestamp; /* flag, not a TCP hdr field. */
+ uint16_t need_wakeup;
+ uint16_t mbuf_cnt; /* Count of mbufs collected see note */
+ uint16_t mbuf_appended;
struct timeval mtime;
};
+/*
+ * Note: The mbuf_cnt field tracks our number of mbufs added to the m_next
+ * list. Each mbuf counted can have data and of course it will
+ * have an ack as well (by defintion any inbound tcp segment will
+ * have an ack value. We use this count to tell us how many ACK's
+ * are present for our ack-count threshold. If we exceed that or
+ * the data threshold we will wake up the endpoint.
+ */
LIST_HEAD(lro_head, lro_entry);
#define le_ip4 leip.ip4
@@ -115,6 +129,8 @@ void tcp_lro_flush(struct lro_ctrl *, struct lro_entry *);
void tcp_lro_flush_all(struct lro_ctrl *);
int tcp_lro_rx(struct lro_ctrl *, struct mbuf *, uint32_t);
void tcp_lro_queue_mbuf(struct lro_ctrl *, struct mbuf *);
+void tcp_lro_reg_mbufq(void);
+void tcp_lro_dereg_mbufq(void);
#define TCP_LRO_NO_ENTRIES -2
#define TCP_LRO_CANNOT -1