pktdescr_ext7.h Source File

Reference Documentation

Platform
Intel® PAC
Napatech SmartNIC
Content Type
Reference Information
Capture Software Version
Link™ Capture Software 12.10
Napatech Software Suite: include/ntapi/pktdescr_ext7.h Source File
pktdescr_ext7.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (C) 2023 Napatech A/S.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Napatech A/S nor the
14  * names of its contributors may be used to endorse or promote products
15  * derived from this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL NAPATECH A/S BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  *
29 
30  */
31 
32 /**
33  * @file
34  * This source file contains the Ext7 packet descriptor.\n
35  * It is <b>not</b> to be used directly but via the @ref PacketMacros.
36  */
37 
38 #ifndef DOXYGEN_INTERNAL_ONLY
39 
40 #ifndef __PKT_DESCR_EXT7_H__
41 #define __PKT_DESCR_EXT7_H__
42 
43 // Ensure that the following is packed.
44 #pragma pack(push, 1)
45 
46 // Extended descriptor 7 RX
47 #define _NT_DESCR_EXT7_RX_FIELDS \
48  /* 32bit Word0. */ \
49  uint32_t hash:24; /* 23:00 - Hash value */ \
50  uint32_t hashType:5; /* 28:24 - Hash type */ \
51  uint32_t Reserved0:2; /* 30:29 - Reserved */ \
52  uint32_t hashValid:1; /* 31 - Hash valid */ \
53  /* 32bit Word1. */ \
54  uint32_t jumbo:1; /* 00 - Jumbo frame */ \
55  uint32_t broadcastDest:1; /* 01 - Destination MAC address is broadcast */ \
56  uint32_t l4PortType:4; /* 05:02 - Layer4 port type */ \
57  uint32_t l4FrameType:4; /* 09:06 - Layer4 frame type */ \
58  uint32_t l3FrameType:3; /* 12:10 - Layer3 type */ \
59  uint32_t l2FrameType:2; /* 14:13 - Layer2 type */ \
60  uint32_t l4Size:4; /* 18:15 - Layer4 header length (in units of 32 bits) */ \
61  uint32_t l3Size:7; /* 25:19 - Layer3 header length (in units of 32 bits) */ \
62  uint32_t mplsCount:3; /* 28:26 - Number of MPLS shim labels present */ \
63  uint32_t vlanCount:2; /* 30:29 - Number of VLANs present */ \
64  uint32_t islPresent:1; /* 31 - ISL encapsulation present */ \
65  /* 32bit Word2. */ \
66  uint32_t Reserved1:14; /* 13:00 - Reserved */ \
67  uint32_t Reserved2:3; /* 16:14 - Reserved */ \
68  uint32_t decodeError:1; /* 17 - Decode error in Frame. Was "prot. small" */ \
69  uint32_t frameLarge:1; /* 18 - Large frame */ \
70  uint32_t frameSmall:1; /* 19 - Small frame */ \
71  uint32_t ipv6FragmentHeader:1; /* 20 - IPv6 fragment header present */ \
72  uint32_t ipv6RoutingHeader:1; /* 21 - IPv6 routing header present */ \
73  uint32_t l4ProtocolNumber:8; /* 29:22 - Layer 4 protocol number */ \
74  uint32_t l3Fragmented:1; /* 30 - L3 fragmented frame */ \
75  uint32_t l3FirstFragment:1; /* 31 - L3 First fragment */ \
76  /* 32bit Word3. */ \
77  uint32_t color:6; /* 05:00 - Color */ \
78  uint32_t Reserved3:1; /* 06 - Reserved */ \
79  uint32_t l5Offset:9; /* 15:07 - Offset to layer 5 */ \
80  uint32_t l4Offset:9; /* 24:16 - Offset to layer 4 */ \
81  uint32_t l3Offset:7; /* 31:25 - Offset to layer 3 */
82 
83 /* Extended descriptor 7 TX */
84 #define _NT_DESCR_EXT7_TX_FIELDS \
85  /* 32bit Word0. */ \
86  uint32_t Unused0:32; /* 31:00 - Unused */ \
87  /* 32bit Word1. */ \
88  uint32_t Unused1:6; /* 05:00 - Unused */ \
89  uint32_t l4FrameType:4; /* 09:06 - Layer4 frame type */ \
90  uint32_t l3FrameType:3; /* 12:10 - Layer3 type */ \
91  uint32_t l2FrameType:2; /* 14:13 - Layer2 type */ \
92  uint32_t l4Size:4; /* 18:15 - Layer4 header length (in units of 32 bits) */ \
93  uint32_t l3Size:7; /* 25:19 - Layer3 header length (in units of 32 bits) */ \
94  uint32_t mplsCount:3; /* 28:26 - Number of MPLS shim labels present */ \
95  uint32_t vlanCount:2; /* 30:29 - Number of VLANs present */ \
96  uint32_t islPresent:1; /* 31 - ISL encapsulation present */ \
97  /* 32bit Word2. */ \
98  uint32_t Unused2:14; /* 13:00 - Unused */ \
99  uint32_t txTsInject:1; /* 14 - Inject TX time stamp */ \
100  uint32_t calcUDPTCPChecksum:1; /* 15 - Recalculate the UDP/TCP checksum */ \
101  uint32_t calcIPChecksum:1; /* 16 - Recalculate the IP checksum */ \
102  uint32_t Unused3:15; /* 31:17 - Unused */ \
103  /* 32bit Word3. */ \
104  uint32_t Unused4:7; /* 06:00 - Unused */ \
105  uint32_t txTsInjectOffset:9; /* 15:07 - 15:07 - TX time stamp inject offset */ \
106  uint32_t Unused5:16; /* 31:16 - Unused */
107 
108 typedef struct NtExt7DescrRx_s {
109  _NT_DESCR_STD0_FIELDS
110  _NT_DESCR_EXT7_RX_FIELDS
111 } NtExt7DescrRx_t; // descrLength = 32 /*256 bits*/
112 
113 typedef struct NtExt7DescrTx_s {
114  _NT_DESCR_STD0_FIELDS
115  _NT_DESCR_EXT7_TX_FIELDS
116 } NtExt7DescrTx_t; // descrLength = 32 /*256 bits*/
117 
118 typedef union {
119  NtExt7DescrRx_t rx;
120  NtExt7DescrTx_t tx;
121 } NtExt7Descr_t;
122 
123 // Disable 1-byte packing
124 #pragma pack(pop)
125 
126 #define _NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_) ((NtExt7Descr_t*)(_hNetBuf_)->hHdr)
127 
128 // RX
129 #define _NT_NET_GET_PKT_HASH_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.hash)
130 #define _NT_NET_GET_PKT_HASH_TYPE_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.hashType)
131 #define _NT_NET_GET_PKT_HASH_VALID_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.hashValid)
132 #define _NT_NET_GET_PKT_JUMBO_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.jumbo)
133 #define _NT_NET_GET_PKT_BROADCAST_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.broadcastDest)
134 #define _NT_NET_GET_PKT_L4_PORT_TYPE_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l4PortType)
135 #define _NT_NET_GET_PKT_L4_FRAME_TYPE_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l4FrameType)
136 #define _NT_NET_GET_PKT_L3_FRAME_TYPE_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l3FrameType)
137 #define _NT_NET_GET_PKT_L2_FRAME_TYPE_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l2FrameType)
138 #define _NT_NET_GET_PKT_L4_LENGTH_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l4Size)
139 #define _NT_NET_GET_PKT_L3_LENGTH_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l3Size)
140 #define _NT_NET_GET_PKT_MPLS_COUNT_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.mplsCount)
141 #define _NT_NET_GET_PKT_VLAN_COUNT_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.vlanCount)
142 #define _NT_NET_GET_PKT_ISL_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.islPresent)
143 #define _NT_NET_GET_PKT_DECODE_ERROR_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.decodeError)
144 #define _NT_NET_GET_PKT_FRAME_LARGE_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.frameLarge)
145 #define _NT_NET_GET_PKT_FRAME_SMALL_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.frameSmall)
146 #define _NT_NET_GET_PKT_IPV6_FR_HEADER_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.ipv6FragmentHeader)
147 #define _NT_NET_GET_PKT_IPV6_RT_HEADER_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.ipv6RoutingHeader)
148 #define _NT_NET_GET_PKT_L4_PROTOCOL_NUM_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l4ProtocolNumber)
149 #define _NT_NET_GET_PKT_L3_FRAGMENTED_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l3Fragmented)
150 #define _NT_NET_GET_PKT_L3_FIRST_FRAG_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l3FirstFragment)
151 #define _NT_NET_GET_PKT_COLOR_EXT7(_hNetBuf_) ((_hNetBuf_)->colorMap[_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.color])
152 #define _NT_NET_GET_PKT_L5_OFFSET_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l5Offset)
153 #define _NT_NET_GET_PKT_L4_OFFSET_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l4Offset)
154 #define _NT_NET_GET_PKT_L3_OFFSET_EXT7(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->rx.l3Offset)
155 
156 // TX
157 #define _NT_NET_SET_PKT_INJECT_TIMESTAMP_EXT7(_hNetBuf_, _offset_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.txTsInject=1; \
158  _NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.txTsInjectOffset=(_offset_);}while(0)
159 #define _NT_NET_SET_PKT_ISL_EXT7(_hNetBuf_, _bval_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.islPresent=(_bval_);}while(0)
160 #define _NT_NET_SET_PKT_VLAN_COUNT_EXT7(_hNetBuf_, _count_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.vlanCount=(_count_);}while(0)
161 #define _NT_NET_SET_PKT_MPLS_COUNT_EXT7(_hNetBuf_, _count_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.mplsCount=(_count_);}while(0)
162 #define _NT_NET_SET_PKT_L2_FRAME_TYPE_EXT7(_hNetBuf_, _type_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.l2FrameType=(_type_);}while(0)
163 #define _NT_NET_SET_PKT_L3_FRAME_TYPE_EXT7(_hNetBuf_, _type_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.l3FrameType=(_type_);}while(0)
164 #define _NT_NET_SET_PKT_L4_FRAME_TYPE_EXT7(_hNetBuf_, _type_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.l4FrameType=(_type_);}while(0)
165 #define _NT_NET_SET_PKT_L3_LENGTH_EXT7(_hNetBuf_, _u32len_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.l3Size=(_u32len_);}while(0)
166 #define _NT_NET_SET_PKT_L4_LENGTH_EXT7(_hNetBuf_, _u32len_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.l4Size=(_u32len_);}while(0)
167 #define _NT_NET_SET_PKT_CALC_L3_CHECKSUM_EXT7(_hNetBuf_, _bval_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.calcIPChecksum=(_bval_);}while(0)
168 #define _NT_NET_SET_PKT_CALC_L4_CHECKSUM_EXT7(_hNetBuf_, _bval_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT7(_hNetBuf_)->tx.calcUDPTCPChecksum=(_bval_);}while(0)
169 
170 #endif /* __PKT_DESCR_EXT7_H__ */
171 
172 #endif // DOXYGEN_INTERNAL_ONLY