net/tap: do not send packets larger than MTU
Signed-off-by: Pascal Mazon <pascal.mazon@6wind.com> Acked-by: Keith Wiles <keith.wiles@intel.com>
This commit is contained in:
parent
2d5a4b62ff
commit
5025409c04
@ -305,14 +305,19 @@ pmd_tx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
|
|||||||
struct tx_queue *txq = queue;
|
struct tx_queue *txq = queue;
|
||||||
uint16_t num_tx = 0;
|
uint16_t num_tx = 0;
|
||||||
unsigned long num_tx_bytes = 0;
|
unsigned long num_tx_bytes = 0;
|
||||||
|
uint32_t max_size;
|
||||||
int i, n;
|
int i, n;
|
||||||
|
|
||||||
if (unlikely(nb_pkts == 0))
|
if (unlikely(nb_pkts == 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
max_size = *txq->mtu + (ETHER_HDR_LEN + ETHER_CRC_LEN + 4);
|
||||||
for (i = 0; i < nb_pkts; i++) {
|
for (i = 0; i < nb_pkts; i++) {
|
||||||
/* copy the tx frame data */
|
/* copy the tx frame data */
|
||||||
mbuf = bufs[num_tx];
|
mbuf = bufs[num_tx];
|
||||||
|
/* stats.errs will be incremented */
|
||||||
|
if (rte_pktmbuf_pkt_len(mbuf) > max_size)
|
||||||
|
break;
|
||||||
n = write(txq->fd,
|
n = write(txq->fd,
|
||||||
rte_pktmbuf_mtod(mbuf, void *),
|
rte_pktmbuf_mtod(mbuf, void *),
|
||||||
rte_pktmbuf_pkt_len(mbuf));
|
rte_pktmbuf_pkt_len(mbuf));
|
||||||
@ -646,6 +651,7 @@ tap_setup_queue(struct rte_eth_dev *dev,
|
|||||||
|
|
||||||
rx->fd = fd;
|
rx->fd = fd;
|
||||||
tx->fd = fd;
|
tx->fd = fd;
|
||||||
|
tx->mtu = &dev->data->mtu;
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
@ -60,6 +60,7 @@ struct rx_queue {
|
|||||||
|
|
||||||
struct tx_queue {
|
struct tx_queue {
|
||||||
int fd;
|
int fd;
|
||||||
|
uint16_t *mtu; /* Pointer to MTU from dev_data */
|
||||||
struct pkt_stats stats; /* Stats for this TX queue */
|
struct pkt_stats stats; /* Stats for this TX queue */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user