++(ipv4_hdr->hdr_checksum);
#endif
/* dst addr */
- *(uint64_t *)ð_hdr->d_addr = dest_eth_addr[dst_port];
+ *(uint64_t *)ð_hdr->dst_addr = dest_eth_addr[dst_port];
/* src addr */
rte_ether_addr_copy(&ports_eth_addr[dst_port],
- ð_hdr->s_addr);
+ ð_hdr->src_addr);
return dst_port;
}
dst_port = portid;
/* dst addr */
- *(uint64_t *)ð_hdr->d_addr = dest_eth_addr[dst_port];
+ *(uint64_t *)ð_hdr->dst_addr = dest_eth_addr[dst_port];
/* src addr */
rte_ether_addr_copy(&ports_eth_addr[dst_port],
- ð_hdr->s_addr);
+ ð_hdr->src_addr);
return dst_port;
}
l3fwd_em_simple_process(events[j]->mbuf, qconf);
}
+static inline void
+l3fwd_em_no_opt_process_event_vector(struct rte_event_vector *vec,
+ struct lcore_conf *qconf)
+{
+ struct rte_mbuf **mbufs = vec->mbufs;
+ int32_t i;
+
+ /* Prefetch first packets */
+ for (i = 0; i < PREFETCH_OFFSET && i < vec->nb_elem; i++)
+ rte_prefetch0(rte_pktmbuf_mtod(mbufs[i], void *));
+
+ /* Process first packet to init vector attributes */
+ l3fwd_em_simple_process(mbufs[0], qconf);
+ if (vec->attr_valid) {
+ if (mbufs[0]->port != BAD_PORT)
+ vec->port = mbufs[0]->port;
+ else
+ vec->attr_valid = 0;
+ }
+
+ /*
+ * Prefetch and forward already prefetched packets.
+ */
+ for (i = 1; i < (vec->nb_elem - PREFETCH_OFFSET); i++) {
+ rte_prefetch0(
+ rte_pktmbuf_mtod(mbufs[i + PREFETCH_OFFSET], void *));
+ l3fwd_em_simple_process(mbufs[i], qconf);
+ event_vector_attr_validate(vec, mbufs[i]);
+ }
+
+ /* Forward remaining prefetched packets */
+ for (; i < vec->nb_elem; i++) {
+ l3fwd_em_simple_process(mbufs[i], qconf);
+ event_vector_attr_validate(vec, mbufs[i]);
+ }
+}
+
#endif /* __L3FWD_EM_H__ */