pktdescr_ext8.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_ext8.h Source File
pktdescr_ext8.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 Ext8 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_EXT8_H__
41 #define __PKT_DESCR_EXT8_H__
42 
43 // Ensure that the following is packed.
44 #pragma pack(push, 1)
45 
46 // Extended descriptor 8 RX
47 #define _NT_DESCR_EXT8_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 l3UnmatchedFragFeed:8; /* 07:00 - feed where unmatched fragments are stored */ \
67  uint32_t Reserved1:4; /* 11:08 - Reserved */ \
68  uint32_t l3UnmatchedFragFlag:1; /* 12 - L3 Unmatched fragment flag - requires IPF */ \
69  uint32_t l3LastFragment:1; /* 13 - L3 Last Fragment flag */ \
70  uint32_t Reserved2:3; /* 16:14 - Reserved */ \
71  uint32_t decodeError:1; /* 17 - Decode error in Frame. Was "prot. small" */ \
72  uint32_t frameLarge:1; /* 18 - Large frame */ \
73  uint32_t frameSmall:1; /* 19 - Small frame */ \
74  uint32_t ipv6FragmentHeader:1; /* 20 - IPv6 fragment header present */ \
75  uint32_t ipv6RoutingHeader:1; /* 21 - IPv6 routing header present */ \
76  uint32_t l4ProtocolNumber:8; /* 29:22 - Layer 4 protocol number */ \
77  uint32_t l3Fragmented:1; /* 30 - L3 fragmented frame */ \
78  uint32_t l3FirstFragment:1; /* 31 - L3 First fragment */ \
79  /* 32bit Word3. */ \
80  uint32_t color:6; /* 05:00 - Color */ \
81  uint32_t Reserved3:1; /* 06 - Reserved */ \
82  uint32_t l5Offset:9; /* 15:07 - Offset to layer 5 */ \
83  uint32_t l4Offset:9; /* 24:16 - Offset to layer 4 */ \
84  uint32_t l3Offset:7; /* 31:25 - Offset to layer 3 */
85 
86 /* Extended descriptor 8 TX */
87 #define _NT_DESCR_EXT8_TX_FIELDS \
88  /* 32bit Word0. */ \
89  uint32_t Unused0:32; /* 31:00 - Unused */ \
90  /* 32bit Word1. */ \
91  uint32_t Unused1:6; /* 05:00 - Unused */ \
92  uint32_t l4FrameType:4; /* 09:06 - Layer4 frame type */ \
93  uint32_t l3FrameType:3; /* 12:10 - Layer3 type */ \
94  uint32_t l2FrameType:2; /* 14:13 - Layer2 type */ \
95  uint32_t l4Size:4; /* 18:15 - Layer4 header length (in units of 32 bits) */ \
96  uint32_t l3Size:7; /* 25:19 - Layer3 header length (in units of 32 bits) */ \
97  uint32_t mplsCount:3; /* 28:26 - Number of MPLS shim labels present */ \
98  uint32_t vlanCount:2; /* 30:29 - Number of VLANs present */ \
99  uint32_t islPresent:1; /* 31 - ISL encapsulation present */ \
100  /* 32bit Word2. */ \
101  uint32_t Unused2:14; /* 13:00 - Unused */ \
102  uint32_t txTsInject:1; /* 14 - Inject TX time stamp */ \
103  uint32_t calcUDPTCPChecksum:1; /* 15 - Recalculate the UDP/TCP checksum */ \
104  uint32_t calcIPChecksum:1; /* 16 - Recalculate the IP checksum */ \
105  uint32_t Unused3:15; /* 31:17 - Unused */ \
106  /* 32bit Word3. */ \
107  uint32_t Unused4:7; /* 06:00 - Unused */ \
108  uint32_t txTsInjectOffset:9; /* 15:07 - 15:07 - TX time stamp inject offset */ \
109  uint32_t Unused5:16; /* 31:16 - Unused */
110 
111 typedef struct NtExt8DescrRx_s {
112  _NT_DESCR_STD0_FIELDS
113  _NT_DESCR_EXT8_RX_FIELDS
114 } NtExt8DescrRx_t; // descrLength = 32 /*256 bits*/
115 
116 typedef struct NtExt8DescrTx_s {
117  _NT_DESCR_STD0_FIELDS
118  _NT_DESCR_EXT8_TX_FIELDS
119 } NtExt8DescrTx_t; // descrLength = 32 /*256 bits*/
120 
121 typedef union {
122  NtExt8DescrRx_t rx;
123  NtExt8DescrTx_t tx;
124 } NtExt8Descr_t;
125 
126 // Disable 1-byte packing
127 #pragma pack(pop)
128 
129 #define _NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_) ((NtExt8Descr_t*)(_hNetBuf_)->hHdr)
130 
131 // RX
132 #define _NT_NET_GET_PKT_HASH_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.hash)
133 #define _NT_NET_GET_PKT_HASH_TYPE_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.hashType)
134 #define _NT_NET_GET_PKT_HASH_VALID_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.hashValid)
135 #define _NT_NET_GET_PKT_JUMBO_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.jumbo)
136 #define _NT_NET_GET_PKT_BROADCAST_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.broadcastDest)
137 #define _NT_NET_GET_PKT_L4_PORT_TYPE_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l4PortType)
138 #define _NT_NET_GET_PKT_L4_FRAME_TYPE_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l4FrameType)
139 #define _NT_NET_GET_PKT_L3_FRAME_TYPE_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l3FrameType)
140 #define _NT_NET_GET_PKT_L2_FRAME_TYPE_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l2FrameType)
141 #define _NT_NET_GET_PKT_L4_LENGTH_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l4Size)
142 #define _NT_NET_GET_PKT_L3_LENGTH_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l3Size)
143 #define _NT_NET_GET_PKT_MPLS_COUNT_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.mplsCount)
144 #define _NT_NET_GET_PKT_VLAN_COUNT_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.vlanCount)
145 #define _NT_NET_GET_PKT_ISL_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.islPresent)
146 #define _NT_NET_GET_PKT_DECODE_ERROR_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.decodeError)
147 #define _NT_NET_GET_PKT_FRAME_LARGE_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.frameLarge)
148 #define _NT_NET_GET_PKT_FRAME_SMALL_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.frameSmall)
149 #define _NT_NET_GET_PKT_IPV6_FR_HEADER_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.ipv6FragmentHeader)
150 #define _NT_NET_GET_PKT_IPV6_RT_HEADER_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.ipv6RoutingHeader)
151 #define _NT_NET_GET_PKT_L4_PROTOCOL_NUM_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l4ProtocolNumber)
152 #define _NT_NET_GET_PKT_L3_FRAGMENTED_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l3Fragmented)
153 #define _NT_NET_GET_PKT_L3_FIRST_FRAG_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l3FirstFragment)
154 #define _NT_NET_GET_PKT_COLOR_EXT8(_hNetBuf_) ((_hNetBuf_)->colorMap[_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.color])
155 #define _NT_NET_GET_PKT_L5_OFFSET_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l5Offset)
156 #define _NT_NET_GET_PKT_L4_OFFSET_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l4Offset)
157 #define _NT_NET_GET_PKT_L3_OFFSET_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l3Offset)
158 
159 // Introduced in descriptor 8
160 #define _NT_NET_GET_PKT_IPF_UNMATCHED_STREAMID_EXT8(_hNetBuf_) \
161  ((_hNetBuf_)->streamInfo[(_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l3UnmatchedFragFeed<<_FEED2STREAM_SHL_)+(_hNetBuf_)->adapterNo])
162 #define _NT_NET_GET_PKT_IPF_UNMATCHED_FLAG_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l3UnmatchedFragFlag)
163 #define _NT_NET_GET_PKT_IPF_LAST_FRAGMENT_EXT8(_hNetBuf_) (_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->rx.l3LastFragment)
164 
165 // TX
166 #define _NT_NET_SET_PKT_INJECT_TIMESTAMP_EXT8(_hNetBuf_, _offset_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.txTsInject=1; \
167  _NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.txTsInjectOffset=(_offset_);}while(0)
168 #define _NT_NET_SET_PKT_ISL_EXT8(_hNetBuf_, _bval_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.islPresent=(_bval_);}while(0)
169 #define _NT_NET_SET_PKT_VLAN_COUNT_EXT8(_hNetBuf_, _count_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.vlanCount=(_count_);}while(0)
170 #define _NT_NET_SET_PKT_MPLS_COUNT_EXT8(_hNetBuf_, _count_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.mplsCount=(_count_);}while(0)
171 #define _NT_NET_SET_PKT_L2_FRAME_TYPE_EXT8(_hNetBuf_, _type_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.l2FrameType=(_type_);}while(0)
172 #define _NT_NET_SET_PKT_L3_FRAME_TYPE_EXT8(_hNetBuf_, _type_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.l3FrameType=(_type_);}while(0)
173 #define _NT_NET_SET_PKT_L4_FRAME_TYPE_EXT8(_hNetBuf_, _type_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.l4FrameType=(_type_);}while(0)
174 #define _NT_NET_SET_PKT_L3_LENGTH_EXT8(_hNetBuf_, _u32len_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.l3Size=(_u32len_);}while(0)
175 #define _NT_NET_SET_PKT_L4_LENGTH_EXT8(_hNetBuf_, _u32len_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.l4Size=(_u32len_);}while(0)
176 #define _NT_NET_SET_PKT_CALC_L3_CHECKSUM_EXT8(_hNetBuf_, _bval_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.calcIPChecksum=(_bval_);}while(0)
177 #define _NT_NET_SET_PKT_CALC_L4_CHECKSUM_EXT8(_hNetBuf_, _bval_) do{_NT_NET_GET_PKT_DESCR_PTR_EXT8(_hNetBuf_)->tx.calcUDPTCPChecksum=(_bval_);}while(0)
178 
179 #endif /* __PKT_DESCR_EXT8_H__ */
180 
181 #endif // DOXYGEN_INTERNAL_ONLY