cvmip.h revision 210284
1210284Sjmallett/***********************license start*************** 2232812Sjmallett * Copyright (c) 2003-2008 Cavium Networks (support@cavium.com). All rights 3215990Sjmallett * reserved. 4210284Sjmallett * 5210284Sjmallett * 6215990Sjmallett * Redistribution and use in source and binary forms, with or without 7215990Sjmallett * modification, are permitted provided that the following conditions are 8215990Sjmallett * met: 9210284Sjmallett * 10215990Sjmallett * * Redistributions of source code must retain the above copyright 11215990Sjmallett * notice, this list of conditions and the following disclaimer. 12210284Sjmallett * 13215990Sjmallett * * Redistributions in binary form must reproduce the above 14215990Sjmallett * copyright notice, this list of conditions and the following 15215990Sjmallett * disclaimer in the documentation and/or other materials provided 16215990Sjmallett * with the distribution. 17215990Sjmallett * 18232812Sjmallett * * Neither the name of Cavium Networks nor the names of 19215990Sjmallett * its contributors may be used to endorse or promote products 20215990Sjmallett * derived from this software without specific prior written 21215990Sjmallett * permission. 22215990Sjmallett * 23215990Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 24215990Sjmallett * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS 25215990Sjmallett * OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH 26215990Sjmallett * RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY 27215990Sjmallett * REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT 28215990Sjmallett * DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES 29232812Sjmallett * OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR 30215990Sjmallett * PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET 31215990Sjmallett * POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT 32215990Sjmallett * OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 33215990Sjmallett * 34215990Sjmallett * 35215990Sjmallett * For any questions regarding licensing please contact marketing@caviumnetworks.com 36215990Sjmallett * 37215990Sjmallett ***********************license end**************************************/ 38210284Sjmallett 39210284Sjmallett 40210284Sjmallett 41210284Sjmallett 42210284Sjmallett 43210284Sjmallett 44210284Sjmallett/** 45215990Sjmallett * @file 46210284Sjmallett * 47210284Sjmallett * Cavium Networks Internet Protocol (IP) 48210284Sjmallett * 49210284Sjmallett * Definitions for the Internet Protocol (IP) support. 50210284Sjmallett * 51210284Sjmallett * <hr>$Revision: 41586 $<hr> 52232812Sjmallett * 53210284Sjmallett */ 54232812Sjmallett 55232812Sjmallett#ifndef __CVMIP_H__ 56232812Sjmallett#define __CVMIP_H__ 57232812Sjmallett 58232812Sjmallett 59232812Sjmallett/* 60232812Sjmallett * IP protocol values (1 byte) 61232812Sjmallett * 62232812Sjmallett */ 63232812Sjmallett#define CVMIP_PROTO_ICMP 1 /* Internet Control Message Protocol */ 64232812Sjmallett#define CVMIP_PROTO_TCP 6 /* Transmission Control Protocol */ 65232812Sjmallett#define CVMIP_PROTO_UDP 17 /* User Datagram Protocol */ 66232812Sjmallett#define CVMIP_PROTO_ESP 50 /* Encapsulated Security Payload */ 67232812Sjmallett#define CVMIP_PROTO_AH 51 /* Authentication Header */ 68243587Sjmallett 69210284Sjmallett 70210284Sjmallett/** 71243587Sjmallett * network packet header definitions 72210284Sjmallett * (originally from octane_hw.h) 73210284Sjmallett * 74210284Sjmallett */ 75232812Sjmallett 76232812Sjmallett/** 77210284Sjmallett * UDP Packet header 78210284Sjmallett */ 79210284Sjmalletttypedef struct { 80210284Sjmallett union { 81210284Sjmallett int32_t s32 ; 82210284Sjmallett uint32_t u32 ; 83210284Sjmallett struct { 84210284Sjmallett uint16_t src_prt ; 85210284Sjmallett uint16_t dst_prt ; 86210284Sjmallett } s; 87215990Sjmallett } prts; 88210284Sjmallett uint16_t len ; 89210284Sjmallett uint16_t chksum ; 90210284Sjmallett} cvmip_udp_hdr_t; 91210284Sjmallett 92210284Sjmallett/** 93210284Sjmallett * TCP Packet header 94215990Sjmallett */ 95215990Sjmalletttypedef struct { 96210284Sjmallett uint16_t src_prt ; 97210284Sjmallett uint16_t dst_prt ; 98210284Sjmallett uint32_t seq ; 99210284Sjmallett uint32_t ack_seq ; 100210284Sjmallett uint32_t hlen :4; 101210284Sjmallett uint32_t rsvd :6; 102210284Sjmallett uint32_t urg :1; 103210284Sjmallett uint32_t ack :1; 104210284Sjmallett uint32_t psh :1; 105210284Sjmallett uint32_t rst :1; 106210284Sjmallett uint32_t syn :1; 107210284Sjmallett uint32_t fin :1; 108210284Sjmallett uint16_t win_sz ; 109210284Sjmallett uint16_t chksum ; 110210284Sjmallett uint16_t urg_ptr ; 111210284Sjmallett uint32_t junk ; 112210284Sjmallett} cvmip_tcp_hdr_t; 113210284Sjmallett 114210284Sjmallett/** 115210284Sjmallett * L4 Packet header 116210284Sjmallett */ 117215990Sjmalletttypedef union { 118215990Sjmallett cvmip_udp_hdr_t udphdr; 119215990Sjmallett cvmip_tcp_hdr_t tcphdr; 120215990Sjmallett struct { 121215990Sjmallett union { 122210284Sjmallett int32_t s32 ; 123215990Sjmallett uint32_t u32 ; 124215990Sjmallett struct { 125215990Sjmallett uint16_t src_prt; 126215990Sjmallett uint16_t dst_prt; 127215990Sjmallett } s; 128215990Sjmallett } prts; 129215990Sjmallett uint16_t len ; 130215990Sjmallett uint16_t chksum ; 131215990Sjmallett char dat[48] ; // 48 for IPv6 with no extension hdrs, 64 for IPv4 without options 132210284Sjmallett } udp; 133210284Sjmallett struct { 134215990Sjmallett uint16_t src_prt ; 135210284Sjmallett uint16_t dst_prt ; 136215990Sjmallett uint32_t seq ; 137210284Sjmallett uint32_t ack_seq ; 138215990Sjmallett uint32_t hlen :4; 139210284Sjmallett uint32_t rsvd :6; 140210284Sjmallett uint32_t urg :1; 141210284Sjmallett uint32_t ack :1; 142215990Sjmallett uint32_t psh :1; 143210284Sjmallett uint32_t rst :1; 144210284Sjmallett uint32_t syn :1; 145210284Sjmallett uint32_t fin :1; 146210284Sjmallett uint16_t win_sz ; 147210284Sjmallett uint16_t chksum ; 148210284Sjmallett uint16_t urg_ptr ; 149210284Sjmallett char dat[36] ; // 36 for IPv6 with no extension hdrs, 52 for IPv6 without options 150210284Sjmallett } tcp; 151210284Sjmallett} cvmip_l4_info_t; 152210284Sjmallett 153210284Sjmallett/** 154210284Sjmallett * Special struct to add a pad to IPv4 header 155210284Sjmallett */ 156210284Sjmalletttypedef struct { 157210284Sjmallett uint32_t pad; 158210284Sjmallett 159210284Sjmallett uint32_t version : 4; 160210284Sjmallett uint32_t hl : 4; 161210284Sjmallett uint8_t tos ; 162210284Sjmallett uint16_t len ; 163210284Sjmallett 164210284Sjmallett uint16_t id ; 165210284Sjmallett uint32_t mbz : 1; 166210284Sjmallett uint32_t df : 1; 167210284Sjmallett uint32_t mf : 1; 168210284Sjmallett uint32_t off :13; 169210284Sjmallett 170210284Sjmallett uint8_t ttl ; 171215990Sjmallett uint8_t protocol; 172215990Sjmallett uint16_t chksum ; 173215990Sjmallett 174232812Sjmallett union { 175215990Sjmallett uint64_t u64; 176215990Sjmallett struct { 177215990Sjmallett uint32_t src; 178215990Sjmallett uint32_t dst; 179215990Sjmallett } s; 180215990Sjmallett } src_dst; 181215990Sjmallett} cvmip_ipv4_hdr_t; 182215990Sjmallett 183215990Sjmallett/** 184215990Sjmallett * IPv6 Packet header 185215990Sjmallett */ 186215990Sjmalletttypedef struct { 187215990Sjmallett 188215990Sjmallett uint32_t version : 4; 189215990Sjmallett uint32_t v6class : 8; 190215990Sjmallett uint32_t flow :20; 191215990Sjmallett 192215990Sjmallett uint16_t len ; // includes extension headers plus payload (add 40 to be equiv to v4 len field) 193215990Sjmallett uint8_t next_hdr; // equivalent to the v4 protocol field 194232812Sjmallett uint8_t hop_lim ; // equivalent to the v4 TTL field 195215990Sjmallett 196215990Sjmallett union { 197215990Sjmallett uint64_t u64[4]; 198215990Sjmallett struct { 199232812Sjmallett uint64_t src[2]; 200232812Sjmallett uint64_t dst[2]; 201232812Sjmallett } s; 202232812Sjmallett } src_dst; 203232812Sjmallett 204215990Sjmallett} cvmip_ipv6_hdr_t; 205215990Sjmallett 206215990Sjmallett 207215990Sjmallett#endif /* __CVMIP_H__ */ 208210284Sjmallett