]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/qlnx/qlnxe/ecore_tcp_ip.h
MFV r358511,r358532:
[FreeBSD/FreeBSD.git] / sys / dev / qlnx / qlnxe / ecore_tcp_ip.h
1 /*
2  * Copyright (c) 2018-2019 Cavium, Inc.
3  * All rights reserved.
4  *
5  *  Redistribution and use in source and binary forms, with or without
6  *  modification, are permitted provided that the following conditions
7  *  are met:
8  *
9  *  1. Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer.
11  *  2. Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  *
15  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25  *  POSSIBILITY OF SUCH DAMAGE.
26  *
27  * $FreeBSD$
28  */
29
30 #ifndef __ECORE_TCP_IP_H
31 #define __ECORE_TCP_IP_H
32
33 #define VLAN_VID_MASK   0x0fff /* VLAN Identifier */
34 #define ETH_P_8021Q     0x8100          /* 802.1Q VLAN Extended Header  */
35 #define ETH_P_8021AD    0x88A8          /* 802.1ad Service VLAN         */
36 #define ETH_P_IPV6      0x86DD          /* IPv6 over bluebook           */
37 #define ETH_P_IP        0x0800          /* Internet Protocol packet     */
38 #define ETH_HLEN        14              /* Total octets in header.       */
39 #define VLAN_HLEN       4               /* additional bytes required by VLAN */
40 #define MAX_VLAN_PRIO   7       /* Max vlan priority value in 801.1Q tag */
41
42 #define MAX_DSCP                63 /* Max DSCP value in IP header */
43 #define IPPROTO_TCP     6
44
45 #ifndef htonl
46 #define htonl(val) OSAL_CPU_TO_BE32(val)
47 #endif
48
49 #ifndef ntohl
50 #define ntohl(val) OSAL_BE32_TO_CPU(val)
51 #endif
52
53 #ifndef htons
54 #define htons(val) OSAL_CPU_TO_BE16(val)
55 #endif
56
57 #ifndef ntohs
58 #define ntohs(val) OSAL_BE16_TO_CPU(val)
59 #endif
60
61
62 struct ecore_ethhdr {
63         unsigned char   h_dest[ETH_ALEN];       /* destination eth addr */
64         unsigned char   h_source[ETH_ALEN];     /* source ether addr    */
65         u16             h_proto;                /* packet type ID field */
66 };
67
68 struct ecore_iphdr {
69         u8      ihl:4,
70                 version:4;
71         u8      tos;
72         u16     tot_len;
73         u16     id;
74         u16     frag_off;
75         u8      ttl;
76         u8      protocol;
77         u16     check;
78         u32     saddr;
79         u32     daddr;
80         /*The options start here. */
81 };
82
83 struct ecore_vlan_ethhdr {
84         unsigned char   h_dest[ETH_ALEN];
85         unsigned char   h_source[ETH_ALEN];
86         u16             h_vlan_proto;
87         u16             h_vlan_TCI;
88         u16             h_vlan_encapsulated_proto;
89 };
90
91 struct ecore_in6_addr {
92         union {
93                 u8              u6_addr8[16];
94                 u16             u6_addr16[8];
95                 u32             u6_addr32[4];
96         } in6_u;
97 };
98
99 struct ecore_ipv6hdr {
100         u8                      priority:4,
101                                 version:4;
102         u8                      flow_lbl[3];
103
104         u16                     payload_len;
105         u8                      nexthdr;
106         u8                      hop_limit;
107
108         struct  ecore_in6_addr  saddr;
109         struct  ecore_in6_addr  daddr;
110 };
111
112 struct ecore_tcphdr {
113         u16     source;
114         u16     dest;
115         u32     seq;
116         u32     ack_seq;
117         u16     res1:4,
118                 doff:4,
119                 fin:1,
120                 syn:1,
121                 rst:1,
122                 psh:1,
123                 ack:1,
124                 urg:1,
125                 ece:1,
126                 cwr:1;
127         u16     window;
128         u16     check;
129         u16     urg_ptr;
130 };
131
132 enum {
133         INET_ECN_NOT_ECT = 0,
134         INET_ECN_ECT_1 = 1,
135         INET_ECN_ECT_0 = 2,
136         INET_ECN_CE = 3,
137         INET_ECN_MASK = 3,
138 };
139
140 #endif