X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fl3fwd%2Fl3fwd_em_sse.h;h=c0a9725a6dfa6e8972c692a5875fce2f8ef36206;hb=6cd6d65b7baa9fb87bb18dccb09d6bb1e552c38f;hp=4c6d14f49f06231d6f9267171bdfd00f4dcaacd2;hpb=94c54b4158d56fb169b136d9adcc24b3b64dc4b0;p=dpdk.git diff --git a/examples/l3fwd/l3fwd_em_sse.h b/examples/l3fwd/l3fwd_em_sse.h index 4c6d14f49f..c0a9725a6d 100644 --- a/examples/l3fwd/l3fwd_em_sse.h +++ b/examples/l3fwd/l3fwd_em_sse.h @@ -34,6 +34,15 @@ #ifndef __L3FWD_EM_SSE_H__ #define __L3FWD_EM_SSE_H__ +/** + * @file + * This is an optional implementation of packet classification in Exact-Match + * path using sequential packet classification method. + * While hash lookup multi seems to provide better performance, it's disabled + * by default and can be enabled with NO_HASH_LOOKUP_MULTI global define in + * compilation time. + */ + #include "l3fwd_sse.h" static inline __attribute__((always_inline)) uint16_t @@ -43,8 +52,13 @@ em_get_dst_port(const struct lcore_conf *qconf, struct rte_mbuf *pkt, uint8_t next_hop; struct ipv4_hdr *ipv4_hdr; struct ipv6_hdr *ipv6_hdr; + uint32_t tcp_or_udp; + uint32_t l3_ptypes; + + tcp_or_udp = pkt->packet_type & (RTE_PTYPE_L4_TCP | RTE_PTYPE_L4_UDP); + l3_ptypes = pkt->packet_type & RTE_PTYPE_L3_MASK; - if (RTE_ETH_IS_IPV4_HDR(pkt->packet_type)) { + if (tcp_or_udp && (l3_ptypes == RTE_PTYPE_L3_IPV4)) { /* Handle IPv4 headers.*/ ipv4_hdr = rte_pktmbuf_mtod_offset(pkt, struct ipv4_hdr *, @@ -59,7 +73,7 @@ em_get_dst_port(const struct lcore_conf *qconf, struct rte_mbuf *pkt, return next_hop; - } else if (RTE_ETH_IS_IPV6_HDR(pkt->packet_type)) { + } else if (tcp_or_udp && (l3_ptypes == RTE_PTYPE_L3_IPV6)) { /* Handle IPv6 headers.*/ ipv6_hdr = rte_pktmbuf_mtod_offset(pkt, struct ipv6_hdr *,