examples/l3fwd: fix size of destination port ids
[dpdk.git] / examples / l3fwd / l3fwd_em_hlm_sse.h
index 7faf04a..5001c72 100644 (file)
@@ -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]);