aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/linux-generic/Makefile.am1
-rw-r--r--platform/linux-generic/include/odp_classification_inlines.h385
-rw-r--r--platform/linux-generic/odp_classification.c355
-rw-r--r--platform/linux-generic/pktio/netmap.c1
-rw-r--r--platform/linux-generic/pktio/socket_mmap.c1
5 files changed, 351 insertions, 392 deletions
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index 9f24bc829..0d4d905f9 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -90,7 +90,6 @@ noinst_HEADERS = \
include/odp_bitset.h \
include/odp_buffer_internal.h \
include/odp_classification_datamodel.h \
- include/odp_classification_inlines.h \
include/odp_classification_internal.h \
include/odp_config_internal.h \
include/odp_debug_internal.h \
diff --git a/platform/linux-generic/include/odp_classification_inlines.h b/platform/linux-generic/include/odp_classification_inlines.h
deleted file mode 100644
index 36fffc1dc..000000000
--- a/platform/linux-generic/include/odp_classification_inlines.h
+++ /dev/null
@@ -1,385 +0,0 @@
-/* Copyright (c) 2014-2018, Linaro Limited
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-/**
- * @file
- *
- * ODP Classification Inlines
- * Classification Inlines Functions
- */
-#ifndef __ODP_CLASSIFICATION_INLINES_H_
-#define __ODP_CLASSIFICATION_INLINES_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <odp/api/debug.h>
-#include <odp/api/byteorder.h>
-#include <odp/api/plat/byteorder_inlines.h>
-#include <protocols/eth.h>
-#include <protocols/ip.h>
-#include <protocols/ipsec.h>
-#include <protocols/udp.h>
-#include <protocols/tcp.h>
-#include <odp_packet_internal.h>
-#include <stdio.h>
-#include <inttypes.h>
-
-/* PMR term value verification function
-These functions verify the given PMR term value with the value in the packet
-These following functions return 1 on success and 0 on failure
-*/
-
-static inline int verify_pmr_packet_len(odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- if (term_value->match.value == (packet_len(pkt_hdr) &
- term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_ip_proto(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- const _odp_ipv4hdr_t *ip;
- uint8_t proto;
-
- if (!pkt_hdr->p.input_flags.ipv4)
- return 0;
- ip = (const _odp_ipv4hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
- proto = ip->proto;
- if (term_value->match.value == (proto & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_ipv4_saddr(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- const _odp_ipv4hdr_t *ip;
- uint32_t ipaddr;
-
- if (!pkt_hdr->p.input_flags.ipv4)
- return 0;
- ip = (const _odp_ipv4hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
- ipaddr = odp_be_to_cpu_32(ip->src_addr);
- if (term_value->match.value == (ipaddr & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_ipv4_daddr(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- const _odp_ipv4hdr_t *ip;
- uint32_t ipaddr;
-
- if (!pkt_hdr->p.input_flags.ipv4)
- return 0;
- ip = (const _odp_ipv4hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
- ipaddr = odp_be_to_cpu_32(ip->dst_addr);
- if (term_value->match.value == (ipaddr & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_tcp_sport(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- uint16_t sport;
- const _odp_tcphdr_t *tcp;
-
- if (!pkt_hdr->p.input_flags.tcp)
- return 0;
- tcp = (const _odp_tcphdr_t *)(pkt_addr + pkt_hdr->p.l4_offset);
- sport = odp_be_to_cpu_16(tcp->src_port);
- if (term_value->match.value == (sport & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_tcp_dport(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- uint16_t dport;
- const _odp_tcphdr_t *tcp;
-
- if (!pkt_hdr->p.input_flags.tcp)
- return 0;
- tcp = (const _odp_tcphdr_t *)(pkt_addr + pkt_hdr->p.l4_offset);
- dport = odp_be_to_cpu_16(tcp->dst_port);
- if (term_value->match.value == (dport & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_udp_dport(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- uint16_t dport;
- const _odp_udphdr_t *udp;
-
- if (!pkt_hdr->p.input_flags.udp)
- return 0;
- udp = (const _odp_udphdr_t *)(pkt_addr + pkt_hdr->p.l4_offset);
- dport = odp_be_to_cpu_16(udp->dst_port);
- if (term_value->match.value == (dport & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_udp_sport(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- uint16_t sport;
- const _odp_udphdr_t *udp;
-
- if (!pkt_hdr->p.input_flags.udp)
- return 0;
- udp = (const _odp_udphdr_t *)(pkt_addr + pkt_hdr->p.l4_offset);
- sport = odp_be_to_cpu_16(udp->src_port);
- if (term_value->match.value == (sport & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_dmac(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- uint64_t dmac = 0;
- uint64_t dmac_be = 0;
- const _odp_ethhdr_t *eth;
-
- if (!packet_hdr_has_eth(pkt_hdr))
- return 0;
-
- eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
- memcpy(&dmac_be, eth->dst.addr, _ODP_ETHADDR_LEN);
- dmac = odp_be_to_cpu_64(dmac_be);
- /* since we are converting a 48 bit ethernet address from BE to cpu
- format using odp_be_to_cpu_64() the last 16 bits needs to be right
- shifted */
- if (dmac_be != dmac)
- dmac = dmac >> (64 - (_ODP_ETHADDR_LEN * 8));
-
- if (term_value->match.value == (dmac & term_value->match.mask))
- return 1;
- return 0;
-}
-
-static inline int verify_pmr_ipv6_saddr(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- const _odp_ipv6hdr_t *ipv6;
- uint64_t addr[2];
-
- if (!packet_hdr_has_ipv6(pkt_hdr))
- return 0;
-
- ipv6 = (const _odp_ipv6hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
-
- addr[0] = ipv6->src_addr.u64[0];
- addr[1] = ipv6->src_addr.u64[1];
-
- /* 128 bit address is processed as two 64 bit value
- * for bitwise AND operation */
- addr[0] = addr[0] & term_value->match_ipv6.mask.u64[0];
- addr[1] = addr[1] & term_value->match_ipv6.mask.u64[1];
-
- if (!memcmp(addr, term_value->match_ipv6.addr.u8, _ODP_IPV6ADDR_LEN))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_ipv6_daddr(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- const _odp_ipv6hdr_t *ipv6;
- uint64_t addr[2];
-
- if (!packet_hdr_has_ipv6(pkt_hdr))
- return 0;
- ipv6 = (const _odp_ipv6hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
- addr[0] = ipv6->dst_addr.u64[0];
- addr[1] = ipv6->dst_addr.u64[1];
-
- /* 128 bit address is processed as two 64 bit value
- * for bitwise AND operation */
- addr[0] = addr[0] & term_value->match_ipv6.mask.u64[0];
- addr[1] = addr[1] & term_value->match_ipv6.mask.u64[1];
-
- if (!memcmp(addr, term_value->match_ipv6.addr.u8, _ODP_IPV6ADDR_LEN))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_vlan_id_0(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- const _odp_ethhdr_t *eth;
- const _odp_vlanhdr_t *vlan;
- uint16_t tci;
- uint16_t vlan_id;
-
- if (!pkt_hdr->p.input_flags.vlan_qinq)
- return 0;
-
- eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
- vlan = (const _odp_vlanhdr_t *)(eth + 1);
- tci = odp_be_to_cpu_16(vlan->tci);
- vlan_id = tci & 0x0fff;
-
- if (term_value->match.value == (vlan_id & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_vlan_id_x(const uint8_t *pkt_addr ODP_UNUSED,
- odp_packet_hdr_t *pkt_hdr ODP_UNUSED,
- pmr_term_value_t *term_value ODP_UNUSED)
-{
- const _odp_ethhdr_t *eth;
- const _odp_vlanhdr_t *vlan;
- uint16_t tci;
- uint16_t vlan_id;
-
- if (!pkt_hdr->p.input_flags.vlan_qinq)
- return 0;
-
- eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
- vlan = (const _odp_vlanhdr_t *)(eth + 1);
- vlan++;
- tci = odp_be_to_cpu_16(vlan->tci);
- vlan_id = tci & 0x0fff;
-
- if (term_value->match.value == (vlan_id & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_ipsec_spi(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- uint32_t spi;
-
- pkt_addr += pkt_hdr->p.l4_offset;
-
- if (pkt_hdr->p.input_flags.ipsec_ah) {
- const _odp_ahhdr_t *ahhdr = (const _odp_ahhdr_t *)pkt_addr;
-
- spi = odp_be_to_cpu_32(ahhdr->spi);
- } else if (pkt_hdr->p.input_flags.ipsec_esp) {
- const _odp_esphdr_t *esphdr = (const _odp_esphdr_t *)pkt_addr;
-
- spi = odp_be_to_cpu_32(esphdr->spi);
- } else {
- return 0;
- }
-
- if (term_value->match.value == (spi & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_ld_vni(const uint8_t *pkt_addr ODP_UNUSED,
- odp_packet_hdr_t *pkt_hdr ODP_UNUSED,
- pmr_term_value_t *term_value ODP_UNUSED)
-{
- ODP_UNIMPLEMENTED();
- return 0;
-}
-
-static inline int verify_pmr_custom_frame(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- uint64_t val = 0;
- uint32_t offset = term_value->offset;
- uint32_t val_sz = term_value->val_sz;
-
- ODP_ASSERT(val_sz <= CLS_PMR_TERM_BYTES_MAX);
-
- if (packet_len(pkt_hdr) <= offset + val_sz)
- return 0;
-
- memcpy(&val, pkt_addr + offset, val_sz);
- if (term_value->match.value == (val & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_eth_type_0(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- const _odp_ethhdr_t *eth;
- uint16_t ethtype;
-
- if (!pkt_hdr->p.input_flags.vlan_qinq)
- return 0;
-
- eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
- ethtype = odp_be_to_cpu_16(eth->type);
-
- if (term_value->match.value == (ethtype & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-static inline int verify_pmr_eth_type_x(const uint8_t *pkt_addr,
- odp_packet_hdr_t *pkt_hdr,
- pmr_term_value_t *term_value)
-{
- const _odp_ethhdr_t *eth;
- uint16_t ethtype;
- const _odp_vlanhdr_t *vlan;
-
- if (!pkt_hdr->p.input_flags.vlan_qinq)
- return 0;
-
- eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
- vlan = (const _odp_vlanhdr_t *)(eth + 1);
- ethtype = odp_be_to_cpu_16(vlan->type);
-
- if (term_value->match.value == (ethtype & term_value->match.mask))
- return 1;
-
- return 0;
-}
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/platform/linux-generic/odp_classification.c b/platform/linux-generic/odp_classification.c
index b3d91b3fe..6f4b02c2f 100644
--- a/platform/linux-generic/odp_classification.c
+++ b/platform/linux-generic/odp_classification.c
@@ -15,12 +15,14 @@
#include <odp/api/packet_io.h>
#include <odp_packet_io_internal.h>
#include <odp_classification_datamodel.h>
-#include <odp_classification_inlines.h>
#include <odp_classification_internal.h>
#include <odp/api/shared_memory.h>
-#include <protocols/thash.h>
#include <protocols/eth.h>
#include <protocols/ip.h>
+#include <protocols/ipsec.h>
+#include <protocols/udp.h>
+#include <protocols/tcp.h>
+#include <protocols/thash.h>
#include <string.h>
#include <errno.h>
#include <stdbool.h>
@@ -727,12 +729,357 @@ odp_pool_t odp_cls_cos_pool(odp_cos_t cos_id)
return cos->s.pool;
}
+static inline int verify_pmr_packet_len(odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ if (term_value->match.value == (packet_len(pkt_hdr) &
+ term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_ip_proto(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ const _odp_ipv4hdr_t *ip;
+ uint8_t proto;
+
+ if (!pkt_hdr->p.input_flags.ipv4)
+ return 0;
+ ip = (const _odp_ipv4hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
+ proto = ip->proto;
+ if (term_value->match.value == (proto & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_ipv4_saddr(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ const _odp_ipv4hdr_t *ip;
+ uint32_t ipaddr;
+
+ if (!pkt_hdr->p.input_flags.ipv4)
+ return 0;
+ ip = (const _odp_ipv4hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
+ ipaddr = odp_be_to_cpu_32(ip->src_addr);
+ if (term_value->match.value == (ipaddr & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_ipv4_daddr(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ const _odp_ipv4hdr_t *ip;
+ uint32_t ipaddr;
+
+ if (!pkt_hdr->p.input_flags.ipv4)
+ return 0;
+ ip = (const _odp_ipv4hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
+ ipaddr = odp_be_to_cpu_32(ip->dst_addr);
+ if (term_value->match.value == (ipaddr & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_tcp_sport(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ uint16_t sport;
+ const _odp_tcphdr_t *tcp;
+
+ if (!pkt_hdr->p.input_flags.tcp)
+ return 0;
+ tcp = (const _odp_tcphdr_t *)(pkt_addr + pkt_hdr->p.l4_offset);
+ sport = odp_be_to_cpu_16(tcp->src_port);
+ if (term_value->match.value == (sport & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_tcp_dport(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ uint16_t dport;
+ const _odp_tcphdr_t *tcp;
+
+ if (!pkt_hdr->p.input_flags.tcp)
+ return 0;
+ tcp = (const _odp_tcphdr_t *)(pkt_addr + pkt_hdr->p.l4_offset);
+ dport = odp_be_to_cpu_16(tcp->dst_port);
+ if (term_value->match.value == (dport & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_udp_dport(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ uint16_t dport;
+ const _odp_udphdr_t *udp;
+
+ if (!pkt_hdr->p.input_flags.udp)
+ return 0;
+ udp = (const _odp_udphdr_t *)(pkt_addr + pkt_hdr->p.l4_offset);
+ dport = odp_be_to_cpu_16(udp->dst_port);
+ if (term_value->match.value == (dport & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_udp_sport(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ uint16_t sport;
+ const _odp_udphdr_t *udp;
+
+ if (!pkt_hdr->p.input_flags.udp)
+ return 0;
+ udp = (const _odp_udphdr_t *)(pkt_addr + pkt_hdr->p.l4_offset);
+ sport = odp_be_to_cpu_16(udp->src_port);
+ if (term_value->match.value == (sport & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_dmac(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ uint64_t dmac = 0;
+ uint64_t dmac_be = 0;
+ const _odp_ethhdr_t *eth;
+
+ if (!packet_hdr_has_eth(pkt_hdr))
+ return 0;
+
+ eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
+ memcpy(&dmac_be, eth->dst.addr, _ODP_ETHADDR_LEN);
+ dmac = odp_be_to_cpu_64(dmac_be);
+ /* since we are converting a 48 bit ethernet address from BE to cpu
+ format using odp_be_to_cpu_64() the last 16 bits needs to be right
+ shifted */
+ if (dmac_be != dmac)
+ dmac = dmac >> (64 - (_ODP_ETHADDR_LEN * 8));
+
+ if (term_value->match.value == (dmac & term_value->match.mask))
+ return 1;
+ return 0;
+}
+
+static inline int verify_pmr_ipv6_saddr(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ const _odp_ipv6hdr_t *ipv6;
+ uint64_t addr[2];
+
+ if (!packet_hdr_has_ipv6(pkt_hdr))
+ return 0;
+
+ ipv6 = (const _odp_ipv6hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
+
+ addr[0] = ipv6->src_addr.u64[0];
+ addr[1] = ipv6->src_addr.u64[1];
+
+ /* 128 bit address is processed as two 64 bit value
+ * for bitwise AND operation */
+ addr[0] = addr[0] & term_value->match_ipv6.mask.u64[0];
+ addr[1] = addr[1] & term_value->match_ipv6.mask.u64[1];
+
+ if (!memcmp(addr, term_value->match_ipv6.addr.u8, _ODP_IPV6ADDR_LEN))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_ipv6_daddr(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ const _odp_ipv6hdr_t *ipv6;
+ uint64_t addr[2];
+
+ if (!packet_hdr_has_ipv6(pkt_hdr))
+ return 0;
+ ipv6 = (const _odp_ipv6hdr_t *)(pkt_addr + pkt_hdr->p.l3_offset);
+ addr[0] = ipv6->dst_addr.u64[0];
+ addr[1] = ipv6->dst_addr.u64[1];
+
+ /* 128 bit address is processed as two 64 bit value
+ * for bitwise AND operation */
+ addr[0] = addr[0] & term_value->match_ipv6.mask.u64[0];
+ addr[1] = addr[1] & term_value->match_ipv6.mask.u64[1];
+
+ if (!memcmp(addr, term_value->match_ipv6.addr.u8, _ODP_IPV6ADDR_LEN))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_vlan_id_0(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ const _odp_ethhdr_t *eth;
+ const _odp_vlanhdr_t *vlan;
+ uint16_t tci;
+ uint16_t vlan_id;
+
+ if (!pkt_hdr->p.input_flags.vlan_qinq)
+ return 0;
+
+ eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
+ vlan = (const _odp_vlanhdr_t *)(eth + 1);
+ tci = odp_be_to_cpu_16(vlan->tci);
+ vlan_id = tci & 0x0fff;
+
+ if (term_value->match.value == (vlan_id & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_vlan_id_x(const uint8_t *pkt_addr ODP_UNUSED,
+ odp_packet_hdr_t *pkt_hdr ODP_UNUSED,
+ pmr_term_value_t *term_value ODP_UNUSED)
+{
+ const _odp_ethhdr_t *eth;
+ const _odp_vlanhdr_t *vlan;
+ uint16_t tci;
+ uint16_t vlan_id;
+
+ if (!pkt_hdr->p.input_flags.vlan_qinq)
+ return 0;
+
+ eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
+ vlan = (const _odp_vlanhdr_t *)(eth + 1);
+ vlan++;
+ tci = odp_be_to_cpu_16(vlan->tci);
+ vlan_id = tci & 0x0fff;
+
+ if (term_value->match.value == (vlan_id & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_ipsec_spi(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ uint32_t spi;
+
+ pkt_addr += pkt_hdr->p.l4_offset;
+
+ if (pkt_hdr->p.input_flags.ipsec_ah) {
+ const _odp_ahhdr_t *ahhdr = (const _odp_ahhdr_t *)pkt_addr;
+
+ spi = odp_be_to_cpu_32(ahhdr->spi);
+ } else if (pkt_hdr->p.input_flags.ipsec_esp) {
+ const _odp_esphdr_t *esphdr = (const _odp_esphdr_t *)pkt_addr;
+
+ spi = odp_be_to_cpu_32(esphdr->spi);
+ } else {
+ return 0;
+ }
+
+ if (term_value->match.value == (spi & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_ld_vni(const uint8_t *pkt_addr ODP_UNUSED,
+ odp_packet_hdr_t *pkt_hdr ODP_UNUSED,
+ pmr_term_value_t *term_value ODP_UNUSED)
+{
+ ODP_UNIMPLEMENTED();
+ return 0;
+}
+
+static inline int verify_pmr_custom_frame(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ uint64_t val = 0;
+ uint32_t offset = term_value->offset;
+ uint32_t val_sz = term_value->val_sz;
+
+ ODP_ASSERT(val_sz <= CLS_PMR_TERM_BYTES_MAX);
+
+ if (packet_len(pkt_hdr) <= offset + val_sz)
+ return 0;
+
+ memcpy(&val, pkt_addr + offset, val_sz);
+ if (term_value->match.value == (val & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_eth_type_0(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ const _odp_ethhdr_t *eth;
+ uint16_t ethtype;
+
+ if (!pkt_hdr->p.input_flags.vlan_qinq)
+ return 0;
+
+ eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
+ ethtype = odp_be_to_cpu_16(eth->type);
+
+ if (term_value->match.value == (ethtype & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
+static inline int verify_pmr_eth_type_x(const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr,
+ pmr_term_value_t *term_value)
+{
+ const _odp_ethhdr_t *eth;
+ uint16_t ethtype;
+ const _odp_vlanhdr_t *vlan;
+
+ if (!pkt_hdr->p.input_flags.vlan_qinq)
+ return 0;
+
+ eth = (const _odp_ethhdr_t *)(pkt_addr + pkt_hdr->p.l2_offset);
+ vlan = (const _odp_vlanhdr_t *)(eth + 1);
+ ethtype = odp_be_to_cpu_16(vlan->type);
+
+ if (term_value->match.value == (ethtype & term_value->match.mask))
+ return 1;
+
+ return 0;
+}
+
/*
* This function goes through each PMR_TERM value in pmr_t structure and calls
* verification function for each term.Returns 1 if PMR matches or 0 otherwise.
*/
-static
-int verify_pmr(pmr_t *pmr, const uint8_t *pkt_addr, odp_packet_hdr_t *pkt_hdr)
+static int verify_pmr(pmr_t *pmr, const uint8_t *pkt_addr,
+ odp_packet_hdr_t *pkt_hdr)
{
int pmr_failure = 0;
int num_pmr;
diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c
index 230a9a76b..313ebd5ec 100644
--- a/platform/linux-generic/pktio/netmap.c
+++ b/platform/linux-generic/pktio/netmap.c
@@ -31,7 +31,6 @@
#include <linux/ethtool.h>
#include <linux/sockios.h>
#include <odp_classification_datamodel.h>
-#include <odp_classification_inlines.h>
#include <odp_classification_internal.h>
#include <odp_libconfig_internal.h>
diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c
index 17bebe9a0..6ae0e295f 100644
--- a/platform/linux-generic/pktio/socket_mmap.c
+++ b/platform/linux-generic/pktio/socket_mmap.c
@@ -34,7 +34,6 @@
#include <odp_debug_internal.h>
#include <odp_errno_define.h>
#include <odp_classification_datamodel.h>
-#include <odp_classification_inlines.h>
#include <odp_classification_internal.h>
#include <odp/api/hints.h>
#include <odp_global_data.h>