diff options
Diffstat (limited to 'include/odp/api/spec/packet_flags.h')
-rw-r--r-- | include/odp/api/spec/packet_flags.h | 288 |
1 files changed, 183 insertions, 105 deletions
diff --git a/include/odp/api/spec/packet_flags.h b/include/odp/api/spec/packet_flags.h index 377b75ba0..3bbd8f331 100644 --- a/include/odp/api/spec/packet_flags.h +++ b/include/odp/api/spec/packet_flags.h @@ -1,18 +1,16 @@ -/* Copyright (c) 2014, Linaro Limited - * All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2014-2018 Linaro Limited + * Copyright (c) 2023 Nokia */ - /** * @file * * ODP packet flags */ -#ifndef ODP_API_PACKET_FLAGS_H_ -#define ODP_API_PACKET_FLAGS_H_ +#ifndef ODP_API_SPEC_PACKET_FLAGS_H_ +#define ODP_API_SPEC_PACKET_FLAGS_H_ #include <odp/visibility_begin.h> #ifdef __cplusplus @@ -20,90 +18,124 @@ extern "C" { #endif #include <odp/api/std_types.h> -#include <odp/api/packet.h> +#include <odp/api/packet_types.h> /** @addtogroup odp_packet - * Boolean operations on a packet. + * @par Operations on packet metadata flags + * + * If user sets multiple conflicting packet metadata flags + * using odp_packet_has_XX_set() functions, only the last set flag value is + * guaranteed to hold. The values of other conflicting flags are implementation + * specific. The conflicting flag combinations are defined in function + * documentations. * @{ */ /** - * Check for packet errors + * Check for all parse errors in packet * - * Checks all error flags at once. + * Check if packet parsing has found any errors in the packet. The level of + * error checking depends on the parse configuration (e.g. included layers and + * checksums). Protocol layer functions (e.g. odp_packet_has_l3()) indicate + * which layers have been checked, and layer error functions + * (e.g. odp_packet_has_l3_error()) which layers have errors. * - * @param pkt Packet handle - * @retval non-zero packet has errors - * @retval 0 packet has no errors + * If packet subtype is ODP_EVENT_PACKET_IPSEC, odp_packet_has_error() would + * indicate parsing errors after IPSEC processing. IPSEC errors/warnings need + * to be checked using odp_ipsec_result(). + * + * @param pkt Packet handle + * + * @retval non-zero Packet has errors + * @retval 0 No errors were found */ int odp_packet_has_error(odp_packet_t pkt); /** - * Check for packet L2 errors + * Check for errors in layer 2 * - * check for all L2 errors + * When layer 2 is included in the parse configuration, check if any errors were + * found in layer 2 of the packet. * - * @param pkt Packet handle - * @retval non-zero packet has L2 errors - * @retval 0 packet has no L2 error + * @param pkt Packet handle + * + * @retval non-zero Packet has errors in layer 2 + * @retval 0 No errors were found in layer 2 */ int odp_packet_has_l2_error(odp_packet_t pkt); /** - * Check for L2 header, e.g. ethernet + * Check for errors in layer 3 * - * @param pkt Packet handle - * @retval non-zero if packet contains a valid & known L2 header - * @retval 0 if packet does not contain a valid & known L2 header + * When layer 3 is included in the parse configuration, check if any errors were + * found in layer 3 of the packet. + * + * @param pkt Packet handle + * + * @retval non-zero Packet has errors in layer 3 + * @retval 0 No errors found in layer 3 */ -int odp_packet_has_l2(odp_packet_t pkt); +int odp_packet_has_l3_error(odp_packet_t pkt); /** - * Check for packet L3 errors + * Check for errors in layer 4 * - * check for all L3 errors + * When layer 4 is included in the parse configuration, check if any errors were + * found in layer 4 of the packet. * - * @param pkt Packet handle - * @retval non-zero packet has L3 errors - * @retval 0 packet has no L3 error + * @param pkt Packet handle + * + * @retval non-zero Packet has errors in layer 4 + * @retval 0 No errors were found in layer 4 */ -int odp_packet_has_l3_error(odp_packet_t pkt); +int odp_packet_has_l4_error(odp_packet_t pkt); /** - * Check for L3 header, e.g. IPv4, IPv6 + * Check for layer 2 protocols * - * @param pkt Packet handle - * @retval non-zero if packet contains a valid & known L3 header - * @retval 0 if packet does not contain a valid & known L3 header + * When layer 2 is included in the parse configuration, check if packet parsing + * has found and checked a layer 2 protocol (e.g. Ethernet) in the packet. + * + * @param pkt Packet handle + * + * @retval non-zero A layer 2 protocol header was found and checked + * @retval 0 No layer 2 protocol was found */ -int odp_packet_has_l3(odp_packet_t pkt); +int odp_packet_has_l2(odp_packet_t pkt); /** - * Check for packet L4 errors + * Check for layer 3 protocols * - * check for all L4 errors + * When layer 3 is included in the parse configuration, check if packet parsing + * has found and checked a layer 3 protocol (e.g. IPv4, IPv6) in the packet. * - * @param pkt Packet handle - * @retval non-zero packet has L4 errors - * @retval 0 packet has no L4 error + * @param pkt Packet handle + * + * @retval non-zero A layer 3 protocol header was found and checked + * @retval 0 No layer 3 protocol was found */ -int odp_packet_has_l4_error(odp_packet_t pkt); +int odp_packet_has_l3(odp_packet_t pkt); /** - * Check for L4 header, e.g. UDP, TCP, SCTP (also ICMP) + * Check for layer 4 protocols * - * @param pkt Packet handle - * @retval non-zero if packet contains a valid & known L4 header - * @retval 0 if packet does not contain a valid & known L4 header + * When layer 4 is included in the parse configuration, check if packet parsing + * has found and checked a layer 4 protocol (e.g. UDP, TCP, SCTP) in the packet. + * + * @param pkt Packet handle + * + * @retval non-zero A layer 4 protocol header was found and checked + * @retval 0 No layer 4 protocol was found */ int odp_packet_has_l4(odp_packet_t pkt); /** * Check for Ethernet header * - * @param pkt Packet handle - * @retval non-zero if packet contains a valid eth header - * @retval 0 if packet does not contain a valid eth header + * @param pkt Packet handle + * + * @retval non-zero Packet contains an Ethernet header + * @retval 0 Packet does not contain an Ethernet header */ int odp_packet_has_eth(odp_packet_t pkt); @@ -113,9 +145,10 @@ int odp_packet_has_eth(odp_packet_t pkt); * ODP recognizes the destination MAC address FF:FF:FF:FF:FF:FF as * a broadcast address. All others are considered non-broadcast. * - * @param pkt Packet handle - * @retval non-zero if Ethernet destination address is the broadcast address - * @retval 0 if Ethernet destination address is not the broadcast address + * @param pkt Packet handle + * + * @retval non-zero Ethernet destination address is the broadcast address + * @retval 0 Ethernet destination address is not the broadcast address */ int odp_packet_has_eth_bcast(odp_packet_t pkt); @@ -124,63 +157,74 @@ int odp_packet_has_eth_bcast(odp_packet_t pkt); * * ODP recognizes the destination MAC address as multicast if bit 7 is 1. * - * @param pkt Packet handle - * @retval non-zero if Ethernet destination address is a multicast address - * @retval 0 if Ethernet destination address is not a multicast address + * @param pkt Packet handle + * + * @retval non-zero Ethernet destination address is a multicast address + * @retval 0 Ethernet destination address is not a multicast address */ int odp_packet_has_eth_mcast(odp_packet_t pkt); /** * Check for jumbo frame * - * @param pkt Packet handle - * @retval non-zero if packet contains a jumbo frame - * @retval 0 if packet does not contain a jumbo frame + * @param pkt Packet handle + * + * @retval non-zero Packet is a jumbo frame + * @retval 0 Packet is not a jumbo frame */ int odp_packet_has_jumbo(odp_packet_t pkt); /** * Check for VLAN * - * @param pkt Packet handle - * @retval non-zero if packet contains a VLAN header - * @retval 0 if packet does not contain a VLAN header + * Check if packet contains normal or QinQ VLAN header. + * + * @param pkt Packet handle + * + * @retval non-zero Packet contains a VLAN header + * @retval 0 Packet does not contain a VLAN header */ int odp_packet_has_vlan(odp_packet_t pkt); /** * Check for VLAN QinQ (stacked VLAN) * - * @param pkt Packet handle - * @retval non-zero if packet contains a VLAN QinQ header - * @retval 0 if packet does not contain a VLAN QinQ header + * Check if packet contains QinQ VLAN header. + * + * @param pkt Packet handle + * + * @retval non-zero Packet contains a VLAN QinQ header + * @retval 0 Packet does not contain a VLAN QinQ header */ int odp_packet_has_vlan_qinq(odp_packet_t pkt); /** * Check for ARP * - * @param pkt Packet handle - * @retval non-zero if packet contains an ARP message - * @retval 0 if packet does not contain an ARP message + * @param pkt Packet handle + * + * @retval non-zero Packet contains an ARP message + * @retval 0 Packet does not contain an ARP message */ int odp_packet_has_arp(odp_packet_t pkt); /** * Check for IPv4 * - * @param pkt Packet handle - * @retval non-zero if packet contains an IPv4 header - * @retval 0 if packet does not contain an IPv4 header + * @param pkt Packet handle + * + * @retval non-zero Packet contains an IPv4 header + * @retval 0 Packet does not contain an IPv4 header */ int odp_packet_has_ipv4(odp_packet_t pkt); /** * Check for IPv6 * - * @param pkt Packet handle - * @retval non-zero if packet contains an IPv6 header - * @retval 0 if packet does not contain an IPv6 header + * @param pkt Packet handle + * + * @retval non-zero Packet contains an IPv6 header + * @retval 0 Packet does not contain an IPv6 header */ int odp_packet_has_ipv6(odp_packet_t pkt); @@ -192,9 +236,10 @@ int odp_packet_has_ipv6(odp_packet_t pkt); * * For IPv6, no destination addresses are recognized as broadcast addresses. * - * @param pkt Packet handle - * @retval non-zero if IP destination address is a broadcast address - * @retval 0 if IP destination address is not a broadcast address + * @param pkt Packet handle + * + * @retval non-zero IP destination address is a broadcast address + * @retval 0 IP destination address is not a broadcast address */ int odp_packet_has_ip_bcast(odp_packet_t pkt); @@ -207,91 +252,100 @@ int odp_packet_has_ip_bcast(odp_packet_t pkt); * For IPv6 ODP recognizes destination IP addresses with prefixes FF00:: * through FFFF:: as multicast addresses. * - * @param pkt Packet handle - * @retval non-zero if IP destination address is a multicast address - * @retval 0 if IP destination address is not a multicast address + * @param pkt Packet handle + * + * @retval non-zero IP destination address is a multicast address + * @retval 0 IP destination address is not a multicast address */ int odp_packet_has_ip_mcast(odp_packet_t pkt); /** * Check for IP fragment * - * @param pkt Packet handle - * @retval non-zero if packet is an IP fragment - * @retval 0 if packet is not an IP fragment + * @param pkt Packet handle + * + * @retval non-zero Packet is an IP fragment + * @retval 0 Packet is not an IP fragment */ int odp_packet_has_ipfrag(odp_packet_t pkt); /** * Check for IP options * - * @param pkt Packet handle - * @retval non-zero if packet contains IP options - * @retval 0 if packet does not contain IP options + * @param pkt Packet handle + * + * @retval non-zero Packet contains IP options + * @retval 0 Packet does not contain IP options */ int odp_packet_has_ipopt(odp_packet_t pkt); /** * Check for IPSec * - * @param pkt Packet handle - * @retval non-zero if packet requires IPSec processing - * @retval 0 if packet does not require IPSec processing + * @param pkt Packet handle + * + * @retval non-zero Packet requires IPSec processing + * @retval 0 Packet does not require IPSec processing */ int odp_packet_has_ipsec(odp_packet_t pkt); /** * Check for UDP * - * @param pkt Packet handle - * @retval non-zero if packet contains a UDP header - * @retval 0 if packet does not contain a UDP header + * @param pkt Packet handle + * + * @retval non-zero Packet contains a UDP header + * @retval 0 Packet does not contain a UDP header */ int odp_packet_has_udp(odp_packet_t pkt); /** * Check for TCP * - * @param pkt Packet handle - * @retval non-zero if packet contains a TCP header - * @retval 0 if packet does not contain a TCP header + * @param pkt Packet handle + * + * @retval non-zero Packet contains a TCP header + * @retval 0 Packet does not contain a TCP header */ int odp_packet_has_tcp(odp_packet_t pkt); /** * Check for SCTP * - * @param pkt Packet handle - * @retval non-zero if packet contains a SCTP header - * @retval 0 if packet does not contain a SCTP header + * @param pkt Packet handle + * + * @retval non-zero Packet contains a SCTP header + * @retval 0 Packet does not contain a SCTP header */ int odp_packet_has_sctp(odp_packet_t pkt); /** * Check for ICMP * - * @param pkt Packet handle - * @retval non-zero if packet contains an ICMP header - * @retval 0 if packet does not contain an ICMP header + * @param pkt Packet handle + * + * @retval non-zero Packet contains an ICMP header + * @retval 0 Packet does not contain an ICMP header */ int odp_packet_has_icmp(odp_packet_t pkt); /** * Check for packet flow hash * - * @param pkt Packet handle - * @retval non-zero if packet contains a hash value - * @retval 0 if packet does not contain a hash value + * @param pkt Packet handle + * + * @retval non-zero Packet contains a hash value + * @retval 0 Packet does not contain a hash value */ int odp_packet_has_flow_hash(odp_packet_t pkt); /** * Check for packet timestamp * - * @param pkt Packet handle + * @param pkt Packet handle * - * @retval non-zero if packet contains a timestamp value - * @retval 0 if packet does not contain a timestamp value + * @retval non-zero Packet contains a timestamp value + * @retval 0 Packet does not contain a timestamp value * * @see odp_packet_has_ts_clr() */ @@ -356,6 +410,9 @@ void odp_packet_has_jumbo_set(odp_packet_t pkt, int val); /** * Set flag for VLAN * + * Set when packet contains normal VLAN header. Only one VLAN flag + * (VLAN/VLAN QinQ) can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -364,6 +421,9 @@ void odp_packet_has_vlan_set(odp_packet_t pkt, int val); /** * Set flag for VLAN QinQ (stacked VLAN) * + * Set when packet contains QinQ VLAN header. Only one VLAN flag + * (VLAN/VLAN QinQ) can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -372,6 +432,8 @@ void odp_packet_has_vlan_qinq_set(odp_packet_t pkt, int val); /** * Set flag for ARP * + * Only one of ARP/IPv4/IPv6 flags can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -380,6 +442,8 @@ void odp_packet_has_arp_set(odp_packet_t pkt, int val); /** * Set flag for IPv4 * + * Only one of ARP/IPv4/IPv6 flags can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -388,6 +452,8 @@ void odp_packet_has_ipv4_set(odp_packet_t pkt, int val); /** * Set flag for IPv6 * + * Only one of ARP/IPv4/IPv6 flags can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -396,6 +462,8 @@ void odp_packet_has_ipv6_set(odp_packet_t pkt, int val); /** * Set flag for IP broadcast address * + * Only one of IP broadcast/multicast flags can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -404,6 +472,8 @@ void odp_packet_has_ip_bcast_set(odp_packet_t pkt, int val); /** * Set flag for IP multicast address * + * Only one of IP broadcast/multicast flags can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -436,6 +506,8 @@ void odp_packet_has_ipsec_set(odp_packet_t pkt, int val); /** * Set flag for UDP * + * Only one of TCP/UDP/SCTP/ICMP flags can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -444,6 +516,8 @@ void odp_packet_has_udp_set(odp_packet_t pkt, int val); /** * Set flag for TCP * + * Only one of TCP/UDP/SCTP/ICMP flags can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -452,6 +526,8 @@ void odp_packet_has_tcp_set(odp_packet_t pkt, int val); /** * Set flag for SCTP * + * Only one of TCP/UDP/SCTP/ICMP flags can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ @@ -460,6 +536,8 @@ void odp_packet_has_sctp_set(odp_packet_t pkt, int val); /** * Set flag for ICMP * + * Only one of TCP/UDP/SCTP/ICMP flags can be set simultaneously. + * * @param pkt Packet handle * @param val Value */ |