Remove unnecessary struct odp_packet_hdr_t members l3_protocol and l4_protocol to reduce struct size.
l4_protocol was only used by IPsec and is now replaced by two new input flags ipsec_ah and ipsec_esp. Signed-off-by: Matias Elo <[email protected]> --- platform/linux-generic/include/odp_classification_inlines.h | 7 ++----- platform/linux-generic/include/odp_packet_internal.h | 10 +++++----- platform/linux-generic/odp_packet.c | 9 +++++---- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/platform/linux-generic/include/odp_classification_inlines.h b/platform/linux-generic/include/odp_classification_inlines.h index b8b04ce..08300f5 100644 --- a/platform/linux-generic/include/odp_classification_inlines.h +++ b/platform/linux-generic/include/odp_classification_inlines.h @@ -217,16 +217,13 @@ static inline int verify_pmr_ipsec_spi(const uint8_t *pkt_addr, { uint32_t spi; - if (!pkt_hdr->input_flags.ipsec) - return 0; - pkt_addr += pkt_hdr->l4_offset; - if (pkt_hdr->l4_protocol == ODPH_IPPROTO_AH) { + if (pkt_hdr->input_flags.ipsec_ah) { const odph_ahhdr_t *ahhdr = (const odph_ahhdr_t *)pkt_addr; spi = odp_be_to_cpu_32(ahhdr->spi); - } else if (pkt_hdr->l4_protocol == ODPH_IPPROTO_ESP) { + } else if (pkt_hdr->input_flags.ipsec_esp) { const odph_esphdr_t *esphdr = (const odph_esphdr_t *)pkt_addr; spi = odp_be_to_cpu_32(esphdr->spi); diff --git a/platform/linux-generic/include/odp_packet_internal.h b/platform/linux-generic/include/odp_packet_internal.h index 93a92a0..508adf8 100644 --- a/platform/linux-generic/include/odp_packet_internal.h +++ b/platform/linux-generic/include/odp_packet_internal.h @@ -64,8 +64,12 @@ typedef union { uint32_t ip_mcast:1; /**< IP multicast */ uint32_t ipfrag:1; /**< IP fragment */ uint32_t ipopt:1; /**< IP optional headers */ - uint32_t ipsec:1; /**< IPSec decryption may be needed */ + uint32_t ipsec:1; /**< IPSec packet. Required by the + odp_packet_has_ipsec_set() func. */ + uint32_t ipsec_ah:1; /**< IPSec authentication header */ + uint32_t ipsec_esp:1; /**< IPSec encapsulating security + payload */ uint32_t udp:1; /**< UDP */ uint32_t tcp:1; /**< TCP */ uint32_t tcpopt:1; /**< TCP options present */ @@ -141,9 +145,7 @@ typedef struct { uint32_t vlan_s_tag; /**< Parsed 1st VLAN header (S-TAG) */ uint32_t vlan_c_tag; /**< Parsed 2nd VLAN header (C-TAG) */ - uint32_t l3_protocol; /**< Parsed L3 protocol */ uint32_t l3_len; /**< Layer 3 length */ - uint32_t l4_protocol; /**< Parsed L4 protocol */ uint32_t l4_len; /**< Layer 4 length */ uint32_t frame_len; @@ -184,9 +186,7 @@ static inline void copy_packet_parser_metadata(odp_packet_hdr_t *src_hdr, dst_hdr->vlan_s_tag = src_hdr->vlan_s_tag; dst_hdr->vlan_c_tag = src_hdr->vlan_c_tag; - dst_hdr->l3_protocol = src_hdr->l3_protocol; dst_hdr->l3_len = src_hdr->l3_len; - dst_hdr->l4_protocol = src_hdr->l4_protocol; dst_hdr->l4_len = src_hdr->l4_len; } diff --git a/platform/linux-generic/odp_packet.c b/platform/linux-generic/odp_packet.c index b002492..8681c08 100644 --- a/platform/linux-generic/odp_packet.c +++ b/platform/linux-generic/odp_packet.c @@ -44,8 +44,6 @@ void packet_parse_reset(odp_packet_hdr_t *pkt_hdr) pkt_hdr->payload_offset = ODP_PACKET_OFFSET_INVALID; pkt_hdr->vlan_s_tag = 0; pkt_hdr->vlan_c_tag = 0; - pkt_hdr->l3_protocol = 0; - pkt_hdr->l4_protocol = 0; } /** @@ -1242,7 +1240,6 @@ int _odp_parse_common(odp_packet_hdr_t *pkt_hdr, const uint8_t *ptr) /* Set l3_offset+flag only for known ethtypes */ pkt_hdr->input_flags.l3 = 1; pkt_hdr->l3_offset = offset; - pkt_hdr->l3_protocol = ethtype; /* Parse Layer 3 headers */ switch (ethtype) { @@ -1270,7 +1267,6 @@ int _odp_parse_common(odp_packet_hdr_t *pkt_hdr, const uint8_t *ptr) /* Set l4_offset+flag only for known ip_proto */ pkt_hdr->input_flags.l4 = 1; pkt_hdr->l4_offset = offset; - pkt_hdr->l4_protocol = ip_proto; /* Parse Layer 4 headers */ switch (ip_proto) { @@ -1289,8 +1285,13 @@ int _odp_parse_common(odp_packet_hdr_t *pkt_hdr, const uint8_t *ptr) break; case ODPH_IPPROTO_AH: + pkt_hdr->input_flags.ipsec = 1; + pkt_hdr->input_flags.ipsec_ah = 1; + break; + case ODPH_IPPROTO_ESP: pkt_hdr->input_flags.ipsec = 1; + pkt_hdr->input_flags.ipsec_esp = 1; break; default: -- 1.9.1 _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
