X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fl3fwd%2Fl3fwd_em_hlm_sse.h;h=5001c724c9bc126f3cb3ce8bfe7f29b0d135c0e9;hb=8353a36a9b4b0766d4f3433fa6ad8fd41cb60bbc;hp=7faf04ab0a4aefba58ea173999b8dd3652403799;hpb=52c97adc1f0f30d2642cd158ed95142655fd4227;p=dpdk.git diff --git a/examples/l3fwd/l3fwd_em_hlm_sse.h b/examples/l3fwd/l3fwd_em_hlm_sse.h index 7faf04ab0a..5001c724c9 100644 --- a/examples/l3fwd/l3fwd_em_hlm_sse.h +++ b/examples/l3fwd/l3fwd_em_hlm_sse.h @@ -38,7 +38,7 @@ static inline __attribute__((always_inline)) void em_get_dst_port_ipv4x8(struct lcore_conf *qconf, struct rte_mbuf *m[8], - uint8_t portid, uint32_t dst_port[8]) + uint8_t portid, uint16_t dst_port[8]) { int32_t ret[8]; union ipv4_5tuple_host key[8]; @@ -162,7 +162,7 @@ get_ipv6_5tuple(struct rte_mbuf *m0, __m128i mask0, static inline __attribute__((always_inline)) void em_get_dst_port_ipv6x8(struct lcore_conf *qconf, struct rte_mbuf *m[8], - uint8_t portid, uint32_t dst_port[8]) + uint8_t portid, uint16_t dst_port[8]) { int32_t ret[8]; union ipv6_5tuple_host key[8]; @@ -239,8 +239,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; - if (RTE_ETH_IS_IPV4_HDR(pkt->packet_type)) { + tcp_or_udp = pkt->packet_type & (RTE_PTYPE_L4_TCP | RTE_PTYPE_L4_UDP); + l3_ptypes = pkt->packet_type & RTE_PTYPE_L3_MASK; + + if (tcp_or_udp && (l3_ptypes == RTE_PTYPE_L3_IPV4)) { /* Handle IPv4 headers.*/ ipv4_hdr = rte_pktmbuf_mtod_offset(pkt, struct ipv4_hdr *, @@ -255,7 +260,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 *, @@ -284,7 +289,7 @@ l3fwd_em_send_packets(int nb_rx, struct rte_mbuf **pkts_burst, uint8_t portid, struct lcore_conf *qconf) { int32_t j; - uint32_t dst_port[MAX_PKT_BURST]; + uint16_t dst_port[MAX_PKT_BURST]; /* * Send nb_rx - nb_rx%8 packets @@ -304,11 +309,15 @@ l3fwd_em_send_packets(int nb_rx, struct rte_mbuf **pkts_burst, pkts_burst[j+6]->packet_type & pkts_burst[j+7]->packet_type; - if (pkt_type & RTE_PTYPE_L3_IPV4) { + uint32_t l3_type = pkt_type & RTE_PTYPE_L3_MASK; + uint32_t tcp_or_udp = pkt_type & + (RTE_PTYPE_L4_TCP | RTE_PTYPE_L4_UDP); + + if (tcp_or_udp && (l3_type == RTE_PTYPE_L3_IPV4)) { em_get_dst_port_ipv4x8(qconf, &pkts_burst[j], portid, &dst_port[j]); - } else if (pkt_type & RTE_PTYPE_L3_IPV6) { + } else if (tcp_or_udp && (l3_type == RTE_PTYPE_L3_IPV6)) { em_get_dst_port_ipv6x8(qconf, &pkts_burst[j], portid, &dst_port[j]);