/* * Copyright (c) 2018-2019 Cavium, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * $FreeBSD$ */ #ifndef __ECORE_TCP_IP_H #define __ECORE_TCP_IP_H #define VLAN_VID_MASK 0x0fff /* VLAN Identifier */ #define ETH_P_8021Q 0x8100 /* 802.1Q VLAN Extended Header */ #define ETH_P_8021AD 0x88A8 /* 802.1ad Service VLAN */ #define ETH_P_IPV6 0x86DD /* IPv6 over bluebook */ #define ETH_P_IP 0x0800 /* Internet Protocol packet */ #define ETH_HLEN 14 /* Total octets in header. */ #define VLAN_HLEN 4 /* additional bytes required by VLAN */ #define MAX_VLAN_PRIO 7 /* Max vlan priority value in 801.1Q tag */ #define MAX_DSCP 63 /* Max DSCP value in IP header */ #define IPPROTO_TCP 6 #ifndef htonl #define htonl(val) OSAL_CPU_TO_BE32(val) #endif #ifndef ntohl #define ntohl(val) OSAL_BE32_TO_CPU(val) #endif #ifndef htons #define htons(val) OSAL_CPU_TO_BE16(val) #endif #ifndef ntohs #define ntohs(val) OSAL_BE16_TO_CPU(val) #endif struct ecore_ethhdr { unsigned char h_dest[ETH_ALEN]; /* destination eth addr */ unsigned char h_source[ETH_ALEN]; /* source ether addr */ u16 h_proto; /* packet type ID field */ }; struct ecore_iphdr { u8 ihl:4, version:4; u8 tos; u16 tot_len; u16 id; u16 frag_off; u8 ttl; u8 protocol; u16 check; u32 saddr; u32 daddr; /*The options start here. */ }; struct ecore_vlan_ethhdr { unsigned char h_dest[ETH_ALEN]; unsigned char h_source[ETH_ALEN]; u16 h_vlan_proto; u16 h_vlan_TCI; u16 h_vlan_encapsulated_proto; }; struct ecore_in6_addr { union { u8 u6_addr8[16]; u16 u6_addr16[8]; u32 u6_addr32[4]; } in6_u; }; struct ecore_ipv6hdr { u8 priority:4, version:4; u8 flow_lbl[3]; u16 payload_len; u8 nexthdr; u8 hop_limit; struct ecore_in6_addr saddr; struct ecore_in6_addr daddr; }; struct ecore_tcphdr { u16 source; u16 dest; u32 seq; u32 ack_seq; u16 res1:4, doff:4, fin:1, syn:1, rst:1, psh:1, ack:1, urg:1, ece:1, cwr:1; u16 window; u16 check; u16 urg_ptr; }; enum { INET_ECN_NOT_ECT = 0, INET_ECN_ECT_1 = 1, INET_ECN_ECT_0 = 2, INET_ECN_CE = 3, INET_ECN_MASK = 3, }; #endif