aboutsummaryrefslogtreecommitdiff
path: root/include/odp/api/abi-default/packet.h
blob: 712f83ef619ff04d74b92c485f596462cb43e269 (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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/* Copyright (c) 2017-2018, Linaro Limited
 * All rights reserved.
 *
 * SPDX-License-Identifier:     BSD-3-Clause
 */

#ifndef ODP_ABI_PACKET_H_
#define ODP_ABI_PACKET_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

/** @internal Dummy type for strong typing */
typedef struct { char dummy; /**< @internal Dummy */ } _odp_abi_packet_t;

/** @internal Dummy  type for strong typing */
typedef struct { char dummy; /**< *internal Dummy */ } _odp_abi_packet_seg_t;

/** @internal Dummy type for strong typing */
typedef struct { char dummy; /**< *internal Dummy */ } _odp_abi_packet_vector_t;

/** @internal Dummy type for strong typing */
typedef struct { char dummy; /**< *internal Dummy */ } _odp_abi_packet_tx_compl_t;

/** @ingroup odp_packet
 *  @{
 */

typedef _odp_abi_packet_t *odp_packet_t;
typedef _odp_abi_packet_seg_t *odp_packet_seg_t;
typedef _odp_abi_packet_vector_t *odp_packet_vector_t;
typedef _odp_abi_packet_tx_compl_t *odp_packet_tx_compl_t;

#define ODP_PACKET_INVALID        ((odp_packet_t)0)
#define ODP_PACKET_SEG_INVALID    ((odp_packet_seg_t)0)
#define ODP_PACKET_OFFSET_INVALID 0xffff
#define ODP_PACKET_VECTOR_INVALID   ((odp_packet_vector_t)0)
#define ODP_PACKET_TX_COMPL_INVALID ((odp_packet_tx_compl_t)0)

typedef uint8_t odp_proto_l2_type_t;

#define ODP_PROTO_L2_TYPE_NONE   0
#define ODP_PROTO_L2_TYPE_ETH    1

typedef uint8_t odp_proto_l3_type_t;

#define ODP_PROTO_L3_TYPE_NONE   0
#define ODP_PROTO_L3_TYPE_ARP    1
#define ODP_PROTO_L3_TYPE_RARP   2
#define ODP_PROTO_L3_TYPE_MPLS   3
#define ODP_PROTO_L3_TYPE_IPV4   4
#define ODP_PROTO_L3_TYPE_IPV6   6

typedef uint8_t odp_proto_l4_type_t;

/* Numbers from IANA Assigned Internet Protocol Numbers list */
#define ODP_PROTO_L4_TYPE_NONE      0
#define ODP_PROTO_L4_TYPE_ICMPV4    1
#define ODP_PROTO_L4_TYPE_IGMP      2
#define ODP_PROTO_L4_TYPE_IPV4      4
#define ODP_PROTO_L4_TYPE_TCP       6
#define ODP_PROTO_L4_TYPE_UDP       17
#define ODP_PROTO_L4_TYPE_IPV6      41
#define ODP_PROTO_L4_TYPE_GRE       47
#define ODP_PROTO_L4_TYPE_ESP       50
#define ODP_PROTO_L4_TYPE_AH        51
#define ODP_PROTO_L4_TYPE_ICMPV6    58
#define ODP_PROTO_L4_TYPE_NO_NEXT   59
#define ODP_PROTO_L4_TYPE_IPCOMP    108
#define ODP_PROTO_L4_TYPE_SCTP      132
#define ODP_PROTO_L4_TYPE_ROHC      142

typedef enum {
	ODP_PACKET_GREEN = 0,
	ODP_PACKET_YELLOW = 1,
	ODP_PACKET_RED = 2,
	ODP_PACKET_ALL_COLORS = 3,
} odp_packet_color_t;

typedef enum {
	ODP_PACKET_CHKSUM_UNKNOWN = 0,
	ODP_PACKET_CHKSUM_BAD,
	ODP_PACKET_CHKSUM_OK
} odp_packet_chksum_status_t;

/** Parse result flags */
typedef struct odp_packet_parse_result_flag_t {
	/** Flags union */
	union {
		/** All flags as a 64 bit word */
		uint64_t all;

		/** Flags as a bitfield struct */
		struct {
			/** @see odp_packet_has_error() */
			uint64_t has_error    : 1;
			/** @see odp_packet_has_l2_error() */
			uint64_t has_l2_error : 1;
			/** @see odp_packet_has_l3_error() */
			uint64_t has_l3_error : 1;
			/** @see odp_packet_has_l4_error() */
			uint64_t has_l4_error : 1;
			/** @see odp_packet_has_l2() */
			uint64_t has_l2 : 1;
			/** @see odp_packet_has_l3() */
			uint64_t has_l3 : 1;
			/** @see odp_packet_has_l4() */
			uint64_t has_l4 : 1;
			/** @see odp_packet_has_eth() */
			uint64_t has_eth : 1;
			/** @see odp_packet_has_eth_bcast() */
			uint64_t has_eth_bcast : 1;
			/** @see odp_packet_has_eth_mcast() */
			uint64_t has_eth_mcast : 1;
			/** @see odp_packet_has_jumbo() */
			uint64_t has_jumbo : 1;
			/** @see odp_packet_has_vlan() */
			uint64_t has_vlan : 1;
			/** @see odp_packet_has_vlan_qinq() */
			uint64_t has_vlan_qinq : 1;
			/** @see odp_packet_has_arp() */
			uint64_t has_arp : 1;
			/** @see odp_packet_has_ipv4() */
			uint64_t has_ipv4 : 1;
			/** @see odp_packet_has_ipv6() */
			uint64_t has_ipv6 : 1;
			/** @see odp_packet_has_ip_bcast() */
			uint64_t has_ip_bcast : 1;
			/** @see odp_packet_has_ip_mcast() */
			uint64_t has_ip_mcast : 1;
			/** @see odp_packet_has_ipfrag() */
			uint64_t has_ipfrag : 1;
			/** @see odp_packet_has_ipopt() */
			uint64_t has_ipopt : 1;
			/** @see odp_packet_has_ipsec() */
			uint64_t has_ipsec : 1;
			/** @see odp_packet_has_udp() */
			uint64_t has_udp : 1;
			/** @see odp_packet_has_tcp() */
			uint64_t has_tcp : 1;
			/** @see odp_packet_has_sctp() */
			uint64_t has_sctp : 1;
			/** @see odp_packet_has_icmp() */
			uint64_t has_icmp : 1;
		};
	};

} odp_packet_parse_result_flag_t;

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif