1/***********************license start*************** 2 * Copyright (c) 2003-2010 Cavium Inc. (support@cavium.com). All rights 3 * reserved. 4 * 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: 9 * 10 * * Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * * Redistributions in binary form must reproduce the above 14 * copyright notice, this list of conditions and the following 15 * disclaimer in the documentation and/or other materials provided 16 * with the distribution. 17 18 * * Neither the name of Cavium Inc. nor the names of 19 * its contributors may be used to endorse or promote products 20 * derived from this software without specific prior written 21 * permission. 22 23 * This Software, including technical data, may be subject to U.S. export control 24 * laws, including the U.S. Export Administration Act and its associated 25 * regulations, and may be subject to export or import regulations in other 26 * countries. 27 28 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 29 * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR 30 * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO 31 * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR 32 * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM 33 * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE, 34 * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF 35 * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR 36 * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR 37 * PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 38 ***********************license end**************************************/ 39 40 41 42 43 44 45 46/** 47 * @file 48 * 49 * Cavium Inc. Internet Protocol (IP) 50 * 51 * Definitions for the Internet Protocol (IP) support. 52 * 53 * <hr>$Revision: 70030 $<hr> 54 * 55 */ 56 57#ifndef __CVMIP_H__ 58#define __CVMIP_H__ 59 60 61/* 62 * IP protocol values (1 byte) 63 * 64 */ 65#define CVMIP_PROTO_ICMP 1 /* Internet Control Message Protocol */ 66#define CVMIP_PROTO_TCP 6 /* Transmission Control Protocol */ 67#define CVMIP_PROTO_UDP 17 /* User Datagram Protocol */ 68#define CVMIP_PROTO_ESP 50 /* Encapsulated Security Payload */ 69#define CVMIP_PROTO_AH 51 /* Authentication Header */ 70 71 72/** 73 * network packet header definitions 74 * (originally from octane_hw.h) 75 * 76 */ 77 78/** 79 * UDP Packet header 80 */ 81typedef struct { 82 union { 83 int32_t s32 ; 84 uint32_t u32 ; 85 struct { 86 uint16_t src_prt ; 87 uint16_t dst_prt ; 88 } s; 89 } prts; 90 uint16_t len ; 91 uint16_t chksum ; 92} cvmip_udp_hdr_t; 93 94/** 95 * TCP Packet header 96 */ 97typedef struct { 98 uint16_t src_prt ; 99 uint16_t dst_prt ; 100 uint32_t seq ; 101 uint32_t ack_seq ; 102 uint32_t hlen :4; 103 uint32_t rsvd :6; 104 uint32_t urg :1; 105 uint32_t ack :1; 106 uint32_t psh :1; 107 uint32_t rst :1; 108 uint32_t syn :1; 109 uint32_t fin :1; 110 uint16_t win_sz ; 111 uint16_t chksum ; 112 uint16_t urg_ptr ; 113 uint32_t junk ; 114} cvmip_tcp_hdr_t; 115 116/** 117 * L4 Packet header 118 */ 119typedef union { 120 cvmip_udp_hdr_t udphdr; 121 cvmip_tcp_hdr_t tcphdr; 122 struct { 123 union { 124 int32_t s32 ; 125 uint32_t u32 ; 126 struct { 127 uint16_t src_prt; 128 uint16_t dst_prt; 129 } s; 130 } prts; 131 uint16_t len ; 132 uint16_t chksum ; 133 char dat[48] ; // 48 for IPv6 with no extension hdrs, 64 for IPv4 without options 134 } udp; 135 struct { 136 uint16_t src_prt ; 137 uint16_t dst_prt ; 138 uint32_t seq ; 139 uint32_t ack_seq ; 140 uint32_t hlen :4; 141 uint32_t rsvd :6; 142 uint32_t urg :1; 143 uint32_t ack :1; 144 uint32_t psh :1; 145 uint32_t rst :1; 146 uint32_t syn :1; 147 uint32_t fin :1; 148 uint16_t win_sz ; 149 uint16_t chksum ; 150 uint16_t urg_ptr ; 151 char dat[36] ; // 36 for IPv6 with no extension hdrs, 52 for IPv6 without options 152 } tcp; 153} cvmip_l4_info_t; 154 155/** 156 * Special struct to add a pad to IPv4 header 157 */ 158typedef struct { 159 uint32_t pad; 160 161 uint32_t version : 4; 162 uint32_t hl : 4; 163 uint8_t tos ; 164 uint16_t len ; 165 166 uint16_t id ; 167 uint32_t mbz : 1; 168 uint32_t df : 1; 169 uint32_t mf : 1; 170 uint32_t off :13; 171 172 uint8_t ttl ; 173 uint8_t protocol; 174 uint16_t chksum ; 175 176 union { 177 uint64_t u64; 178 struct { 179 uint32_t src; 180 uint32_t dst; 181 } s; 182 } src_dst; 183} cvmip_ipv4_hdr_t; 184 185/** 186 * IPv6 Packet header 187 */ 188typedef struct { 189 190 uint32_t version : 4; 191 uint32_t v6class : 8; 192 uint32_t flow :20; 193 194 uint16_t len ; // includes extension headers plus payload (add 40 to be equiv to v4 len field) 195 uint8_t next_hdr; // equivalent to the v4 protocol field 196 uint8_t hop_lim ; // equivalent to the v4 TTL field 197 198 union { 199 uint64_t u64[4]; 200 struct { 201 uint64_t src[2]; 202 uint64_t dst[2]; 203 } s; 204 } src_dst; 205 206} cvmip_ipv6_hdr_t; 207 208 209#endif /* __CVMIP_H__ */ 210