tcp_tlro.h revision 291184
1/*- 2 * Copyright (c) 2015 Mellanox Technologies. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS `AS IS' AND 14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16 * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23 * SUCH DAMAGE. 24 * 25 * $FreeBSD: stable/10/sys/dev/mlx5/mlx5_en/tcp_tlro.h 291184 2015-11-23 09:32:32Z hselasky $ 26 */ 27 28#ifndef _TCP_TLRO_H_ 29#define _TCP_TLRO_H_ 30 31#define TLRO_MAX_HEADER 64 /* bytes */ 32 33struct ip; 34struct ip6_hdr; 35struct tcphdr; 36 37struct tlro_mbuf_data { 38 union { 39#ifdef INET 40 struct ip *v4; 41#endif 42#ifdef INET6 43 struct ip6_hdr *v6; 44#endif 45 } ip; 46 struct tcphdr *tcp; 47 struct mbuf *head; 48 struct mbuf **pprev; 49 int last_tick; 50 int sequence; 51 int data_len; 52 int data_off; 53 int ip_hdrlen; 54 int ip_len; 55 uint32_t tcp_ts; 56 uint32_t tcp_ts_reply; 57 uint16_t tcp_len; 58 uint8_t ip_version; 59 uint8_t buf_length; /* in 32-bit words */ 60 uint64_t buf[TLRO_MAX_HEADER / 8]; 61} __aligned(256); 62 63struct tlro_mbuf_ptr { 64 struct tlro_mbuf_data *data; 65}; 66 67/* NB: This is part of driver structs */ 68struct tlro_ctrl { 69 struct ifnet *ifp; 70 struct tlro_mbuf_ptr *mbuf; 71 uint64_t lro_queued; 72 uint64_t lro_flushed; 73 uint32_t max; 74 uint32_t curr; 75 int sequence; 76}; 77 78int tcp_tlro_init(struct tlro_ctrl *, struct ifnet *, int); 79void tcp_tlro_free(struct tlro_ctrl *); 80void tcp_tlro_flush(struct tlro_ctrl *, int); 81void tcp_tlro_rx(struct tlro_ctrl *, struct mbuf *); 82 83#endif /* _TCP_TLRO_H_ */ 84