1210284Sjmallett/***********************license start***************
2232812Sjmallett * Copyright (c) 2003-2010  Cavium Inc. (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 Inc. 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 * This Software, including technical data, may be subject to U.S. export  control
24215990Sjmallett * laws, including the U.S. Export Administration Act and its  associated
25215990Sjmallett * regulations, and may be subject to export or import  regulations in other
26215990Sjmallett * countries.
27215990Sjmallett
28215990Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
29232812Sjmallett * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
30215990Sjmallett * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
31215990Sjmallett * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
32215990Sjmallett * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
33215990Sjmallett * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
34215990Sjmallett * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
35215990Sjmallett * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
36215990Sjmallett * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK ARISING OUT OF USE OR
37215990Sjmallett * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
38210284Sjmallett ***********************license end**************************************/
39210284Sjmallett
40210284Sjmallett
41210284Sjmallett
42210284Sjmallett
43210284Sjmallett
44210284Sjmallett
45215990Sjmallett
46210284Sjmallett/**
47210284Sjmallett * @file
48210284Sjmallett *
49232812Sjmallett * Cavium Inc. Internet Protocol (IP)
50210284Sjmallett *
51210284Sjmallett * Definitions for the Internet Protocol (IP) support.
52210284Sjmallett *
53232812Sjmallett * <hr>$Revision: 70030 $<hr>
54210284Sjmallett *
55210284Sjmallett */
56210284Sjmallett
57210284Sjmallett#ifndef __CVMIP_H__
58210284Sjmallett#define __CVMIP_H__
59210284Sjmallett
60210284Sjmallett
61210284Sjmallett/*
62210284Sjmallett * IP protocol values (1 byte)
63210284Sjmallett *
64210284Sjmallett */
65210284Sjmallett#define  CVMIP_PROTO_ICMP  1    /* Internet Control Message Protocol */
66210284Sjmallett#define  CVMIP_PROTO_TCP   6    /* Transmission Control Protocol */
67210284Sjmallett#define  CVMIP_PROTO_UDP  17    /* User Datagram Protocol */
68210284Sjmallett#define  CVMIP_PROTO_ESP  50    /* Encapsulated Security Payload */
69210284Sjmallett#define  CVMIP_PROTO_AH   51    /* Authentication Header */
70210284Sjmallett
71210284Sjmallett
72210284Sjmallett/**
73210284Sjmallett * network packet header definitions
74210284Sjmallett * (originally from octane_hw.h)
75210284Sjmallett *
76210284Sjmallett */
77210284Sjmallett
78210284Sjmallett/**
79210284Sjmallett * UDP Packet header
80210284Sjmallett */
81210284Sjmalletttypedef struct {
82210284Sjmallett   union {
83210284Sjmallett      int32_t           s32     ;
84210284Sjmallett      uint32_t          u32     ;
85210284Sjmallett      struct {
86210284Sjmallett         uint16_t        src_prt ;
87210284Sjmallett         uint16_t        dst_prt ;
88210284Sjmallett      } s;
89210284Sjmallett   } prts;
90210284Sjmallett   uint16_t            len     ;
91210284Sjmallett   uint16_t            chksum  ;
92210284Sjmallett} cvmip_udp_hdr_t;
93210284Sjmallett
94210284Sjmallett/**
95210284Sjmallett * TCP Packet header
96210284Sjmallett */
97210284Sjmalletttypedef struct {
98210284Sjmallett   uint16_t            src_prt ;
99210284Sjmallett   uint16_t            dst_prt ;
100210284Sjmallett   uint32_t            seq     ;
101210284Sjmallett   uint32_t            ack_seq ;
102210284Sjmallett   uint32_t            hlen    :4;
103210284Sjmallett   uint32_t            rsvd    :6;
104210284Sjmallett   uint32_t            urg     :1;
105210284Sjmallett   uint32_t            ack     :1;
106210284Sjmallett   uint32_t            psh     :1;
107210284Sjmallett   uint32_t            rst     :1;
108210284Sjmallett   uint32_t            syn     :1;
109210284Sjmallett   uint32_t            fin     :1;
110210284Sjmallett   uint16_t            win_sz  ;
111210284Sjmallett   uint16_t            chksum  ;
112210284Sjmallett   uint16_t            urg_ptr ;
113210284Sjmallett   uint32_t            junk    ;
114210284Sjmallett} cvmip_tcp_hdr_t;
115210284Sjmallett
116210284Sjmallett/**
117210284Sjmallett * L4 Packet header
118210284Sjmallett */
119210284Sjmalletttypedef union {
120210284Sjmallett   cvmip_udp_hdr_t udphdr;
121210284Sjmallett   cvmip_tcp_hdr_t tcphdr;
122210284Sjmallett   struct {
123210284Sjmallett      union {
124210284Sjmallett         int32_t           s32    ;
125210284Sjmallett         uint32_t          u32    ;
126210284Sjmallett         struct {
127210284Sjmallett            uint16_t        src_prt;
128210284Sjmallett            uint16_t        dst_prt;
129210284Sjmallett         } s;
130210284Sjmallett      } prts;
131210284Sjmallett      uint16_t            len     ;
132210284Sjmallett      uint16_t            chksum  ;
133210284Sjmallett      char              dat[48] ; // 48 for IPv6 with no extension hdrs, 64 for IPv4 without options
134210284Sjmallett   } udp;
135210284Sjmallett   struct {
136210284Sjmallett      uint16_t            src_prt ;
137210284Sjmallett      uint16_t            dst_prt ;
138210284Sjmallett      uint32_t            seq     ;
139210284Sjmallett      uint32_t            ack_seq ;
140210284Sjmallett      uint32_t            hlen    :4;
141210284Sjmallett      uint32_t            rsvd    :6;
142210284Sjmallett      uint32_t            urg     :1;
143210284Sjmallett      uint32_t            ack     :1;
144210284Sjmallett      uint32_t            psh     :1;
145210284Sjmallett      uint32_t            rst     :1;
146210284Sjmallett      uint32_t            syn     :1;
147210284Sjmallett      uint32_t            fin     :1;
148210284Sjmallett      uint16_t            win_sz  ;
149210284Sjmallett      uint16_t            chksum  ;
150210284Sjmallett      uint16_t            urg_ptr ;
151210284Sjmallett      char              dat[36] ; // 36 for IPv6 with no extension hdrs, 52 for IPv6 without options
152210284Sjmallett   } tcp;
153210284Sjmallett} cvmip_l4_info_t;
154210284Sjmallett
155210284Sjmallett/**
156210284Sjmallett * Special struct to add a pad to IPv4 header
157210284Sjmallett */
158210284Sjmalletttypedef struct {
159210284Sjmallett   uint32_t            pad;
160210284Sjmallett
161210284Sjmallett   uint32_t            version : 4;
162210284Sjmallett   uint32_t            hl      : 4;
163210284Sjmallett   uint8_t             tos     ;
164210284Sjmallett   uint16_t            len     ;
165210284Sjmallett
166210284Sjmallett   uint16_t            id      ;
167210284Sjmallett   uint32_t            mbz     : 1;
168210284Sjmallett   uint32_t            df      : 1;
169210284Sjmallett   uint32_t            mf      : 1;
170210284Sjmallett   uint32_t            off     :13;
171210284Sjmallett
172210284Sjmallett   uint8_t             ttl     ;
173210284Sjmallett   uint8_t             protocol;
174210284Sjmallett   uint16_t            chksum  ;
175210284Sjmallett
176210284Sjmallett   union {
177210284Sjmallett      uint64_t          u64;
178210284Sjmallett      struct {
179210284Sjmallett         uint32_t        src;
180210284Sjmallett         uint32_t        dst;
181210284Sjmallett      } s;
182210284Sjmallett   } src_dst;
183210284Sjmallett} cvmip_ipv4_hdr_t;
184210284Sjmallett
185210284Sjmallett/**
186210284Sjmallett * IPv6 Packet header
187210284Sjmallett */
188210284Sjmalletttypedef struct {
189210284Sjmallett
190210284Sjmallett   uint32_t            version : 4;
191210284Sjmallett   uint32_t            v6class : 8;
192210284Sjmallett   uint32_t            flow    :20;
193210284Sjmallett
194210284Sjmallett   uint16_t            len     ;    // includes extension headers plus payload (add 40 to be equiv to v4 len field)
195210284Sjmallett   uint8_t             next_hdr;    // equivalent to the v4 protocol field
196210284Sjmallett   uint8_t             hop_lim ;    // equivalent to the v4 TTL field
197210284Sjmallett
198210284Sjmallett   union {
199210284Sjmallett      uint64_t          u64[4];
200210284Sjmallett      struct {
201210284Sjmallett         uint64_t        src[2];
202210284Sjmallett         uint64_t        dst[2];
203210284Sjmallett      } s;
204210284Sjmallett   } src_dst;
205210284Sjmallett
206210284Sjmallett} cvmip_ipv6_hdr_t;
207210284Sjmallett
208210284Sjmallett
209210284Sjmallett#endif /* __CVMIP_H__ */
210