Signed-off-by: Pascal Mazon <pascal.ma...@6wind.com> --- drivers/net/tap/rte_eth_tap.c | 6 ++++++ drivers/net/tap/rte_eth_tap.h | 1 + 2 files changed, 7 insertions(+)
diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 69fa282ca176..17496501e6ba 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -340,14 +340,19 @@ pmd_tx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) struct tx_queue *txq = queue; uint16_t num_tx = 0; unsigned long num_tx_bytes = 0; + uint32_t max_size; int i, n; if (unlikely(nb_pkts == 0)) return 0; + max_size = *txq->mtu + (ETHER_HDR_LEN + ETHER_CRC_LEN + 4); for (i = 0; i < nb_pkts; i++) { /* copy the tx frame data */ mbuf = bufs[num_tx]; + /* stats.errs will be incremented */ + if (rte_pktmbuf_pkt_len(mbuf) > max_size) + break; n = write(txq->fd, rte_pktmbuf_mtod(mbuf, void *), rte_pktmbuf_pkt_len(mbuf)); @@ -707,6 +712,7 @@ tap_setup_queue(struct rte_eth_dev *dev, rx->fd = fd; tx->fd = fd; + tx->mtu = &dev->data->mtu; return fd; } diff --git a/drivers/net/tap/rte_eth_tap.h b/drivers/net/tap/rte_eth_tap.h index 1ad6ad88796a..9546411bd790 100644 --- a/drivers/net/tap/rte_eth_tap.h +++ b/drivers/net/tap/rte_eth_tap.h @@ -60,6 +60,7 @@ struct rx_queue { struct tx_queue { int fd; + uint16_t *mtu; /* Pointer to MTU from dev_data */ struct pkt_stats stats; /* Stats for this TX queue */ }; -- 2.8.0.rc0