diff mbox series

[API-NEXT,v1,2/5] linux-gen: packet: clean up error and output flags

Message ID 1515772811-30441-3-git-send-email-odpbot@yandex.ru
State New
Headers show
Series [API-NEXT,v1,1/5] linux-gen: packet: single user ptr field | expand

Commit Message

Github ODP bot Jan. 12, 2018, 4 p.m. UTC
From: Petri Savolainen <petri.savolainen@linaro.org>


Removed three unused error flags. Combined error and output
flags into a single uint32_t. This saves four bytes and init
of those bytes. There's still room for 12 flags in this word.
Later on, these and input flags could be also combined.

Moved the combined flag structure to packet types header,
so that it can be accessed from inlined packet code. Also
found away to hide these internal structures from doxygen.
There's no need to add dummy doxygen documentation anymore.

Signed-off-by: Petri Savolainen <petri.savolainen@linaro.org>

---
/** Email created from pull request 388 (psavol:next-user-ptr-init)
 ** https://github.com/Linaro/odp/pull/388
 ** Patch: https://github.com/Linaro/odp/pull/388.patch
 ** Base sha: 6303c7d0e98fafe0f14c8c4dd9989b3b7633ebf4
 ** Merge commit sha: 9eaabe631329dd5cc41960f7cfb5592d60ff0499
 **/
 .../include/odp/api/plat/packet_types.h            | 141 +++++++++++++--------
 .../linux-generic/include/odp_packet_internal.h    |  57 +--------
 platform/linux-generic/odp_classification.c        |   2 +-
 platform/linux-generic/odp_crypto.c                |   2 +-
 platform/linux-generic/odp_ipsec.c                 |   4 +-
 platform/linux-generic/odp_packet.c                |  40 +++---
 platform/linux-generic/odp_packet_flags.c          |  14 +-
 platform/linux-generic/pktio/dpdk.c                |  24 ++--
 8 files changed, 131 insertions(+), 153 deletions(-)
diff mbox series

Patch

diff --git a/platform/linux-generic/include/odp/api/plat/packet_types.h b/platform/linux-generic/include/odp/api/plat/packet_types.h
index 98e5c4f03..14810e585 100644
--- a/platform/linux-generic/include/odp/api/plat/packet_types.h
+++ b/platform/linux-generic/include/odp/api/plat/packet_types.h
@@ -67,101 +67,130 @@  typedef enum {
 
 #endif
 
-/** @internal Packet field accessor */
+/** @cond _ODP_HIDE_FROM_DOXYGEN_ */
+
+/* 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 */
+/* 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 */
+/* Packet input & protocol flags */
 typedef union {
-	/** All input flags */
+	/* All input flags */
 	uint64_t all;
 
-	/** Individual input flags */
+	/* Individual input flags */
 	struct {
-		uint64_t dst_queue:1; /**< Dst queue present */
+		uint64_t dst_queue:1; /* Dst queue present */
 
-		uint64_t flow_hash:1; /**< Flow hash present */
-		uint64_t timestamp:1; /**< Timestamp 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 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 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 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 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
+		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
+		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 tcpopt:1;    /**< TCP options present */
-		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 */
+		uint64_t udp:1;       /* UDP */
+		uint64_t tcp:1;       /* TCP */
+		uint64_t tcpopt:1;    /* TCP options present */
+		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;
 
+/*
+ * Additional packet flags
+ */
+typedef union {
+	/* All flags */
+	uint32_t all_flags;
+
+	struct {
+		uint32_t reserved1:     12;
+
+	/*
+	 * Packet output flags
+	 */
+		uint32_t l3_chksum_set:  1; /* L3 chksum bit is valid */
+		uint32_t l3_chksum:      1; /* L3 chksum override */
+		uint32_t l4_chksum_set:  1; /* L4 chksum bit is valid */
+		uint32_t l4_chksum:      1; /* L4 chksum override  */
+		uint32_t shaper_len_adj: 8; /* Adjustment for traffic mgr */
+
+	/*
+	 * Error flags
+	 */
+		uint32_t snap_len_err:   1; /* Snap length error */
+		uint32_t ip_err:         1; /* IP error */
+		uint32_t l3_chksum_err:  1; /* L3 checksum error */
+		uint32_t tcp_err:        1; /* TCP error */
+		uint32_t udp_err:        1; /* UDP error */
+		uint32_t l4_chksum_err:  1; /* L4 checksum error */
+		uint32_t ipsec_err:      1; /* IPsec error */
+		uint32_t crypto_err:     1; /* Crypto packet operation error */
+	};
+
+	/* Flag groups */
+	struct {
+		uint32_t reserved2:     12;
+		uint32_t other:         12; /* All other flags */
+		uint32_t error:          8; /* All error flags */
+	} all;
+
+} _odp_packet_flags_t;
+
+/** @endcond */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/platform/linux-generic/include/odp_packet_internal.h b/platform/linux-generic/include/odp_packet_internal.h
index 346c2dc6f..a5304373d 100644
--- a/platform/linux-generic/include/odp_packet_internal.h
+++ b/platform/linux-generic/include/odp_packet_internal.h
@@ -32,65 +32,21 @@  extern "C" {
 /** Minimum segment length expected by packet_parse_common() */
 #define PACKET_PARSE_SEG_LEN 96
 
-
 ODP_STATIC_ASSERT(sizeof(_odp_packet_input_flags_t) == sizeof(uint64_t),
 		  "INPUT_FLAGS_SIZE_ERROR");
 
-/**
- * Packet error flags
- */
-typedef union {
-	/* All error flags */
-	uint32_t all;
-
-	struct {
-		/* Bitfield flags for each detected error */
-		uint32_t app_error:1; /**< Error bit for application use */
-		uint32_t frame_len:1; /**< Frame length error */
-		uint32_t snap_len:1;  /**< Snap length error */
-		uint32_t l2_chksum:1; /**< L2 checksum error, checks TBD */
-		uint32_t ip_err:1;    /**< IP error,  checks TBD */
-		uint32_t l3_chksum:1; /**< L3 checksum error */
-		uint32_t tcp_err:1;   /**< TCP error, checks TBD */
-		uint32_t udp_err:1;   /**< UDP error, checks TBD */
-		uint32_t l4_chksum:1; /**< L4 checksum error */
-		uint32_t ipsec_err:1; /**< IPsec error */
-		uint32_t crypto_err:1; /**< Crypto packet operation error */
-	};
-} error_flags_t;
-
-ODP_STATIC_ASSERT(sizeof(error_flags_t) == sizeof(uint32_t),
+ODP_STATIC_ASSERT(sizeof(_odp_packet_flags_t) == sizeof(uint32_t),
 		  "ERROR_FLAGS_SIZE_ERROR");
 
-/**
- * Packet output flags
- */
-typedef union {
-	/* All output flags */
-	uint32_t all;
-
-	struct {
-		/** adjustment for traffic mgr */
-		uint32_t shaper_len_adj:8;
-
-		/* Bitfield flags for each output option */
-		uint32_t l3_chksum_set:1; /**< L3 chksum bit is valid */
-		uint32_t l3_chksum:1;     /**< L3 chksum override */
-		uint32_t l4_chksum_set:1; /**< L3 chksum bit is valid */
-		uint32_t l4_chksum:1;     /**< L4 chksum override  */
-	};
-} output_flags_t;
-
-ODP_STATIC_ASSERT(sizeof(output_flags_t) == sizeof(uint32_t),
-		  "OUTPUT_FLAGS_SIZE_ERROR");
-
 /**
  * Packet parser metadata
  */
 typedef struct {
+	/* Packet input flags */
 	_odp_packet_input_flags_t  input_flags;
-	error_flags_t  error_flags;
-	output_flags_t output_flags;
+
+	/* Other flags */
+	_odp_packet_flags_t        flags;
 
 	 /* offset to L2 hdr, e.g. Eth */
 	uint16_t l2_offset;
@@ -231,8 +187,7 @@  static inline void packet_init(odp_packet_hdr_t *pkt_hdr, uint32_t len)
 	}
 
 	pkt_hdr->p.input_flags.all  = 0;
-	pkt_hdr->p.output_flags.all = 0;
-	pkt_hdr->p.error_flags.all  = 0;
+	pkt_hdr->p.flags.all_flags  = 0;
 
 	pkt_hdr->p.l2_offset = 0;
 	pkt_hdr->p.l3_offset = ODP_PACKET_OFFSET_INVALID;
diff --git a/platform/linux-generic/odp_classification.c b/platform/linux-generic/odp_classification.c
index 276430923..ade1a29a4 100644
--- a/platform/linux-generic/odp_classification.c
+++ b/platform/linux-generic/odp_classification.c
@@ -923,7 +923,7 @@  static inline cos_t *cls_select_cos(pktio_entry_t *entry,
 	default_cos = cls->default_cos;
 
 	/* Return error cos for error packet */
-	if (pkt_hdr->p.error_flags.all)
+	if (pkt_hdr->p.flags.all.error)
 		return cls->error_cos;
 	/* Calls all the PMRs attached at the PKTIO level*/
 	for (i = 0; i < odp_atomic_load_u32(&default_cos->s.num_rule); i++) {
diff --git a/platform/linux-generic/odp_crypto.c b/platform/linux-generic/odp_crypto.c
index 2038aa46b..e6975a602 100644
--- a/platform/linux-generic/odp_crypto.c
+++ b/platform/linux-generic/odp_crypto.c
@@ -1364,7 +1364,7 @@  int odp_crypto_int(odp_packet_t pkt_in,
 		(rc_auth == ODP_CRYPTO_ALG_ERR_NONE);
 
 	pkt_hdr = odp_packet_hdr(out_pkt);
-	pkt_hdr->p.error_flags.crypto_err = !op_result->ok;
+	pkt_hdr->p.flags.crypto_err = !op_result->ok;
 
 	/* Synchronous, simply return results */
 	*pkt_out = out_pkt;
diff --git a/platform/linux-generic/odp_ipsec.c b/platform/linux-generic/odp_ipsec.c
index b023d308d..abade913f 100644
--- a/platform/linux-generic/odp_ipsec.c
+++ b/platform/linux-generic/odp_ipsec.c
@@ -828,7 +828,7 @@  static ipsec_sa_t *ipsec_in_single(odp_packet_t pkt,
 
 err:
 	pkt_hdr = odp_packet_hdr(pkt);
-	pkt_hdr->p.error_flags.ipsec_err = 1;
+	pkt_hdr->p.flags.ipsec_err = 1;
 
 	*pkt_out = pkt;
 
@@ -1404,7 +1404,7 @@  static ipsec_sa_t *ipsec_out_single(odp_packet_t pkt,
 err:
 	pkt_hdr = odp_packet_hdr(pkt);
 
-	pkt_hdr->p.error_flags.ipsec_err = 1;
+	pkt_hdr->p.flags.ipsec_err = 1;
 
 	*pkt_out = pkt;
 	return ipsec_sa;
diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c
index 2a977f064..ada5dca47 100644
--- a/platform/linux-generic/odp_packet.c
+++ b/platform/linux-generic/odp_packet.c
@@ -338,9 +338,8 @@  void *_odp_packet_map(void *pkt_ptr, uint32_t offset, uint32_t *seg_len,
 void packet_parse_reset(odp_packet_hdr_t *pkt_hdr)
 {
 	/* Reset parser metadata before new parse */
-	pkt_hdr->p.error_flags.all  = 0;
 	pkt_hdr->p.input_flags.all  = 0;
-	pkt_hdr->p.output_flags.all = 0;
+	pkt_hdr->p.flags.all.error  = 0;
 	pkt_hdr->p.l2_offset        = ODP_PACKET_OFFSET_INVALID;
 	pkt_hdr->p.l3_offset        = ODP_PACKET_OFFSET_INVALID;
 	pkt_hdr->p.l4_offset        = ODP_PACKET_OFFSET_INVALID;
@@ -1309,16 +1308,16 @@  void odp_packet_l3_chksum_insert(odp_packet_t pkt, int insert)
 {
 	odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
 
-	pkt_hdr->p.output_flags.l3_chksum_set = 1;
-	pkt_hdr->p.output_flags.l3_chksum = insert;
+	pkt_hdr->p.flags.l3_chksum_set = 1;
+	pkt_hdr->p.flags.l3_chksum = insert;
 }
 
 void odp_packet_l4_chksum_insert(odp_packet_t pkt, int insert)
 {
 	odp_packet_hdr_t *pkt_hdr = packet_hdr(pkt);
 
-	pkt_hdr->p.output_flags.l4_chksum_set = 1;
-	pkt_hdr->p.output_flags.l4_chksum = insert;
+	pkt_hdr->p.flags.l4_chksum_set = 1;
+	pkt_hdr->p.flags.l4_chksum = insert;
 }
 
 odp_packet_chksum_status_t odp_packet_l3_chksum_status(odp_packet_t pkt)
@@ -1328,7 +1327,7 @@  odp_packet_chksum_status_t odp_packet_l3_chksum_status(odp_packet_t pkt)
 	if (!pkt_hdr->p.input_flags.l3_chksum_done)
 		return ODP_PACKET_CHKSUM_UNKNOWN;
 
-	if (pkt_hdr->p.error_flags.l3_chksum)
+	if (pkt_hdr->p.flags.l3_chksum_err)
 		return ODP_PACKET_CHKSUM_BAD;
 
 	return ODP_PACKET_CHKSUM_OK;
@@ -1341,7 +1340,7 @@  odp_packet_chksum_status_t odp_packet_l4_chksum_status(odp_packet_t pkt)
 	if (!pkt_hdr->p.input_flags.l4_chksum_done)
 		return ODP_PACKET_CHKSUM_UNKNOWN;
 
-	if (pkt_hdr->p.error_flags.l4_chksum)
+	if (pkt_hdr->p.flags.l4_chksum_err)
 		return ODP_PACKET_CHKSUM_BAD;
 
 	return ODP_PACKET_CHKSUM_OK;
@@ -1783,11 +1782,8 @@  void odp_packet_print(odp_packet_t pkt)
 	len += odp_buffer_snprint(&str[len], n - len, buf);
 	len += snprintf(&str[len], n - len, "  input_flags  0x%" PRIx64 "\n",
 			hdr->p.input_flags.all);
-	len += snprintf(&str[len], n - len, "  error_flags  0x%" PRIx32 "\n",
-			hdr->p.error_flags.all);
-	len += snprintf(&str[len], n - len,
-			"  output_flags 0x%" PRIx32 "\n",
-			hdr->p.output_flags.all);
+	len += snprintf(&str[len], n - len, "  flags  0x%" PRIx32 "\n",
+			hdr->p.flags.all_flags);
 	len += snprintf(&str[len], n - len,
 			"  l2_offset    %" PRIu32 "\n", hdr->p.l2_offset);
 	len += snprintf(&str[len], n - len,
@@ -1989,7 +1985,7 @@  static inline uint16_t parse_eth(packet_parser_t *prs, const uint8_t **parseptr,
 	if (ethtype < _ODP_ETH_LEN_MAX) {
 		prs->input_flags.snap = 1;
 		if (ethtype > frame_len - *offset) {
-			prs->error_flags.snap_len = 1;
+			prs->flags.snap_len_err = 1;
 			return 0;
 		}
 		ethtype = odp_be_to_cpu_16(*((const uint16_t *)(uintptr_t)
@@ -2036,7 +2032,7 @@  static inline uint8_t parse_ipv4(packet_parser_t *prs, const uint8_t **parseptr,
 	if (odp_unlikely(ihl < _ODP_IPV4HDR_IHL_MIN) ||
 	    odp_unlikely(ver != 4) ||
 	    (l3_len > frame_len - *offset)) {
-		prs->error_flags.ip_err = 1;
+		prs->flags.ip_err = 1;
 		return 0;
 	}
 
@@ -2078,7 +2074,7 @@  static inline uint8_t parse_ipv6(packet_parser_t *prs, const uint8_t **parseptr,
 	/* Basic sanity checks on IPv6 header */
 	if ((odp_be_to_cpu_32(ipv6->ver_tc_flow) >> 28) != 6 ||
 	    l3_len > frame_len - *offset) {
-		prs->error_flags.ip_err = 1;
+		prs->flags.ip_err = 1;
 		return 0;
 	}
 
@@ -2107,7 +2103,7 @@  static inline uint8_t parse_ipv6(packet_parser_t *prs, const uint8_t **parseptr,
 
 		if (*offset >= prs->l3_offset +
 		    odp_be_to_cpu_16(ipv6->payload_len)) {
-			prs->error_flags.ip_err = 1;
+			prs->flags.ip_err = 1;
 			return 0;
 		}
 
@@ -2134,7 +2130,7 @@  static inline void parse_tcp(packet_parser_t *prs,
 	const _odp_tcphdr_t *tcp = (const _odp_tcphdr_t *)*parseptr;
 
 	if (tcp->hl < sizeof(_odp_tcphdr_t) / sizeof(uint32_t))
-		prs->error_flags.tcp_err = 1;
+		prs->flags.tcp_err = 1;
 	else if ((uint32_t)tcp->hl * 4 > sizeof(_odp_tcphdr_t))
 		prs->input_flags.tcpopt = 1;
 
@@ -2153,7 +2149,7 @@  static inline void parse_udp(packet_parser_t *prs,
 	uint32_t udplen = odp_be_to_cpu_16(udp->length);
 
 	if (odp_unlikely(udplen < sizeof(_odp_udphdr_t)))
-		prs->error_flags.udp_err = 1;
+		prs->flags.udp_err = 1;
 
 	if (odp_cpu_to_be_16(_ODP_UDP_IPSEC_PORT) == udp->dst_port &&
 	    udplen > 4) {
@@ -2182,7 +2178,7 @@  int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr,
 	prs->l3_offset = offset;
 
 	if (layer <= ODP_PROTO_LAYER_L2)
-		return prs->error_flags.all != 0;
+		return prs->flags.all.error != 0;
 
 	/* Set l3 flag only for known ethtypes */
 	prs->input_flags.l3 = 1;
@@ -2213,7 +2209,7 @@  int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr,
 	}
 
 	if (layer == ODP_PROTO_LAYER_L3)
-		return prs->error_flags.all != 0;
+		return prs->flags.all.error != 0;
 
 	/* Set l4 flag only for known ip_proto */
 	prs->input_flags.l4 = 1;
@@ -2264,7 +2260,7 @@  int packet_parse_common_l3_l4(packet_parser_t *prs, const uint8_t *parseptr,
 		break;
 	}
 
-	return prs->error_flags.all != 0;
+	return prs->flags.all.error != 0;
 }
 
 /**
diff --git a/platform/linux-generic/odp_packet_flags.c b/platform/linux-generic/odp_packet_flags.c
index 2e26ad601..bda85a8c6 100644
--- a/platform/linux-generic/odp_packet_flags.c
+++ b/platform/linux-generic/odp_packet_flags.c
@@ -24,7 +24,7 @@  int odp_packet_has_error(odp_packet_t pkt)
 {
 	odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
 
-	return pkt_hdr->p.error_flags.all != 0;
+	return pkt_hdr->p.flags.all.error != 0;
 }
 
 /* Get Input Flags */
@@ -34,9 +34,7 @@  int odp_packet_has_l2_error(odp_packet_t pkt)
 	odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
 	/* L2 parsing is always done by default and hence
 	no additional check is required */
-	return pkt_hdr->p.error_flags.frame_len
-		| pkt_hdr->p.error_flags.snap_len
-		| pkt_hdr->p.error_flags.l2_chksum;
+	return pkt_hdr->p.flags.snap_len_err;
 }
 
 int odp_packet_has_l3(odp_packet_t pkt)
@@ -48,7 +46,7 @@  int odp_packet_has_l3_error(odp_packet_t pkt)
 {
 	odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
 
-	return pkt_hdr->p.error_flags.ip_err;
+	return pkt_hdr->p.flags.ip_err;
 }
 
 int odp_packet_has_l4(odp_packet_t pkt)
@@ -60,7 +58,7 @@  int odp_packet_has_l4_error(odp_packet_t pkt)
 {
 	odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
 
-	return pkt_hdr->p.error_flags.tcp_err | pkt_hdr->p.error_flags.udp_err;
+	return pkt_hdr->p.flags.tcp_err | pkt_hdr->p.flags.udp_err;
 }
 
 int odp_packet_has_eth_bcast(odp_packet_t pkt)
@@ -169,14 +167,14 @@  void odp_packet_drop_eligible_set(odp_packet_t pkt, odp_bool_t drop)
 
 int8_t odp_packet_shaper_len_adjust(odp_packet_t pkt)
 {
-	retflag(pkt, output_flags.shaper_len_adj);
+	retflag(pkt, flags.shaper_len_adj);
 }
 
 void odp_packet_shaper_len_adjust_set(odp_packet_t pkt, int8_t adj)
 {
 	odp_packet_hdr_t *pkt_hdr = odp_packet_hdr(pkt);
 
-	pkt_hdr->p.output_flags.shaper_len_adj = adj;
+	pkt_hdr->p.flags.shaper_len_adj = adj;
 }
 
 /* Set Input Flags */
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c
index 54fd0bdef..177c9ec01 100644
--- a/platform/linux-generic/pktio/dpdk.c
+++ b/platform/linux-generic/pktio/dpdk.c
@@ -380,8 +380,8 @@  static inline int pkt_set_ol_rx(odp_pktin_config_opt_t *pktin_cfg,
 				return -1;
 
 			pkt_hdr->p.input_flags.l3_chksum_done = 1;
-			pkt_hdr->p.error_flags.ip_err = 1;
-			pkt_hdr->p.error_flags.l3_chksum = 1;
+			pkt_hdr->p.flags.ip_err = 1;
+			pkt_hdr->p.flags.l3_chksum_err = 1;
 		}
 	}
 
@@ -396,8 +396,8 @@  static inline int pkt_set_ol_rx(odp_pktin_config_opt_t *pktin_cfg,
 				return -1;
 
 			pkt_hdr->p.input_flags.l4_chksum_done = 1;
-			pkt_hdr->p.error_flags.udp_err = 1;
-			pkt_hdr->p.error_flags.l4_chksum = 1;
+			pkt_hdr->p.flags.udp_err = 1;
+			pkt_hdr->p.flags.l4_chksum_err = 1;
 		}
 	} else if (pktin_cfg->bit.tcp_chksum &&
 		   HAS_L4_PROTO(mbuf, RTE_PTYPE_L4_TCP)) {
@@ -410,8 +410,8 @@  static inline int pkt_set_ol_rx(odp_pktin_config_opt_t *pktin_cfg,
 				return -1;
 
 			pkt_hdr->p.input_flags.l4_chksum_done = 1;
-			pkt_hdr->p.error_flags.tcp_err = 1;
-			pkt_hdr->p.error_flags.l4_chksum = 1;
+			pkt_hdr->p.flags.tcp_err = 1;
+			pkt_hdr->p.flags.l4_chksum_err = 1;
 		}
 	}
 
@@ -572,18 +572,18 @@  static inline void pkt_set_ol_tx(odp_pktout_config_opt_t *pktout_cfg,
 	ipv4_chksum_pkt = OL_TX_CHKSUM_PKT(pktout_cfg->bit.ipv4_chksum,
 					   pktout_capa->bit.ipv4_chksum,
 					   l3_proto_v4,
-					   pkt_p->output_flags.l3_chksum_set,
-					   pkt_p->output_flags.l3_chksum);
+					   pkt_p->flags.l3_chksum_set,
+					   pkt_p->flags.l3_chksum);
 	udp_chksum_pkt =  OL_TX_CHKSUM_PKT(pktout_cfg->bit.udp_chksum,
 					   pktout_capa->bit.udp_chksum,
 					   (l4_proto == _ODP_IPPROTO_UDP),
-					   pkt_p->output_flags.l4_chksum_set,
-					   pkt_p->output_flags.l4_chksum);
+					   pkt_p->flags.l4_chksum_set,
+					   pkt_p->flags.l4_chksum);
 	tcp_chksum_pkt =  OL_TX_CHKSUM_PKT(pktout_cfg->bit.tcp_chksum,
 					   pktout_capa->bit.tcp_chksum,
 					   (l4_proto == _ODP_IPPROTO_TCP),
-					   pkt_p->output_flags.l4_chksum_set,
-					   pkt_p->output_flags.l4_chksum);
+					   pkt_p->flags.l4_chksum_set,
+					   pkt_p->flags.l4_chksum);
 
 	if (!ipv4_chksum_pkt && !udp_chksum_pkt && !tcp_chksum_pkt)
 		return;