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