blob: 880fd01f274a8fbe5fa1f99b351d9eef517f1bcb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/* Copyright (c) 2015-2018, Linaro Limited
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/**
* @file
*
* ODP packet descriptor
*/
#ifndef ODP_PACKET_INLINE_TYPES_H_
#define ODP_PACKET_INLINE_TYPES_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
/** @internal Packet field accessor */
#define _odp_pkt_get(pkt, cast, field) \
(*(cast *)(uintptr_t)((uint8_t *)pkt + _odp_packet_inline.field))
/** @internal Packet header field offsets for inline functions */
typedef struct _odp_packet_inline_offset_t {
/** @internal field offset */
uint16_t data;
/** @internal field offset */
uint16_t seg_len;
/** @internal field offset */
uint16_t frame_len;
/** @internal field offset */
uint16_t headroom;
/** @internal field offset */
uint16_t tailroom;
/** @internal field offset */
uint16_t pool;
/** @internal field offset */
uint16_t input;
/** @internal field offset */
uint16_t segcount;
/** @internal field offset */
uint16_t user_ptr;
/** @internal field offset */
uint16_t user_area;
/** @internal field offset */
uint16_t l2_offset;
/** @internal field offset */
uint16_t l3_offset;
/** @internal field offset */
uint16_t l4_offset;
/** @internal field offset */
uint16_t flow_hash;
/** @internal field offset */
uint16_t timestamp;
/** @internal field offset */
uint16_t input_flags;
} _odp_packet_inline_offset_t;
/** @internal Packet input & protocol flags */
typedef union {
/** All input flags */
uint64_t all;
/** Individual input flags */
struct {
uint64_t dst_queue:1; /**< Dst queue present */
uint64_t flow_hash:1; /**< Flow hash present */
uint64_t timestamp:1; /**< Timestamp present */
uint64_t l2:1; /**< known L2 protocol present */
uint64_t l3:1; /**< known L3 protocol present */
uint64_t l4:1; /**< known L4 protocol present */
uint64_t eth:1; /**< Ethernet */
uint64_t eth_bcast:1; /**< Ethernet broadcast */
uint64_t eth_mcast:1; /**< Ethernet multicast */
uint64_t jumbo:1; /**< Jumbo frame */
uint64_t vlan:1; /**< VLAN hdr found */
uint64_t vlan_qinq:1; /**< Stacked VLAN found, QinQ */
uint64_t snap:1; /**< SNAP */
uint64_t arp:1; /**< ARP */
uint64_t ipv4:1; /**< IPv4 */
uint64_t ipv6:1; /**< IPv6 */
uint64_t ip_bcast:1; /**< IP broadcast */
uint64_t ip_mcast:1; /**< IP multicast */
uint64_t ipfrag:1; /**< IP fragment */
uint64_t ipopt:1; /**< IP optional headers */
uint64_t ipsec:1; /**< IPSec packet. Required by the
odp_packet_has_ipsec_set() func. */
uint64_t ipsec_ah:1; /**< IPSec authentication header */
uint64_t ipsec_esp:1; /**< IPSec encapsulating security
payload */
uint64_t udp:1; /**< UDP */
uint64_t tcp:1; /**< TCP */
uint64_t sctp:1; /**< SCTP */
uint64_t icmp:1; /**< ICMP */
uint64_t color:2; /**< Packet color for traffic mgmt */
uint64_t nodrop:1; /**< Drop eligibility status */
uint64_t l3_chksum_done:1; /**< L3 checksum validation done */
uint64_t l4_chksum_done:1; /**< L4 checksum validation done */
uint64_t ipsec_udp:1; /**< UDP-encapsulated IPsec packet */
};
} _odp_packet_input_flags_t;
#ifdef __cplusplus
}
#endif
#endif
|