Use the packed helper structures to avoid alignment issues.
Signed-off-by: Stuart Haslam <[email protected]>
---
.../include/odp_classification_inlines.h | 29 ++++++++++++++++------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/platform/linux-generic/include/odp_classification_inlines.h
b/platform/linux-generic/include/odp_classification_inlines.h
index 560104e..a093211 100644
--- a/platform/linux-generic/include/odp_classification_inlines.h
+++ b/platform/linux-generic/include/odp_classification_inlines.h
@@ -21,6 +21,7 @@ extern "C" {
#include <odp/debug.h>
#include <odp/helper/eth.h>
#include <odp/helper/ip.h>
+#include <odp/helper/ipsec.h>
#include <odp/helper/udp.h>
#include <odp/helper/tcp.h>
@@ -185,24 +186,36 @@ static inline int verify_pmr_vlan_id_x(uint8_t *pkt_addr
ODP_UNUSED,
ODP_UNIMPLEMENTED();
return 0;
}
-static inline int verify_pmr_ipsec_spi(uint8_t *pkt_addr ODP_UNUSED,
- odp_packet_hdr_t *pkt_hdr ODP_UNUSED,
- pmr_term_value_t *term_value ODP_UNUSED)
+
+static inline int verify_pmr_ipsec_spi(uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
{
- uint32_t *spi;
+ uint32_t spi;
if (!pkt_hdr->input_flags.ipsec)
return 0;
- spi = (uint32_t *)(pkt_addr + pkt_hdr->l4_offset);
- if (pkt_hdr->l4_protocol == ODPH_IPPROTO_AH)
- spi++;
+ pkt_addr += pkt_hdr->l4_offset;
- if (term_value->val == (odp_be_to_cpu_32(*spi) & term_value->mask))
+ if (pkt_hdr->l4_protocol == ODPH_IPPROTO_AH) {
+ odph_ahhdr_t *ahhdr = (odph_ahhdr_t *)pkt_addr;
+
+ spi = odp_be_to_cpu_32(ahhdr->spi);
+ } else if (pkt_hdr->l4_protocol == ODPH_IPPROTO_ESP) {
+ odph_esphdr_t *esphdr = (odph_esphdr_t *)pkt_addr;
+
+ spi = odp_be_to_cpu_32(esphdr->spi);
+ } else {
+ return 0;
+ }
+
+ if (term_value->val == (spi & term_value->mask))
return 1;
return 0;
}
+
static inline int verify_pmr_ld_vni(uint8_t *pkt_addr ODP_UNUSED,
odp_packet_hdr_t *pkt_hdr ODP_UNUSED,
pmr_term_value_t *term_value ODP_UNUSED)
--
2.1.1
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp