On Thu, 10 Oct 2019 18:34:30 +0100 Flavia Musatescu <flavia.musate...@intel.com> wrote:
> When sendto call fails and ENOBUFS error is being set some of the > packets are actually successfully transmitted. There is no available > count of those packets, so in order to make the statistics more > accurate, all the previously enqueued packets will be considered > successful, even though this is not entirely correct. > > Before: > testpmd Tx statistics: > TX-packets: 7529062 TX-errors: 3702150 TX-bytes: 451743720 > pktgen Rx statistics: > Total Rx Pkts: 10700700 > > After: > testpmd TX statistics: > TX-packets: 11510625 TX-errors: 0 TX-bytes: 690637500 > pktgen Rx statistics: > Total Rx Pkts: 10974307 > > Fixes: 74b7fc0a0ff1 ("net/af_packet: fix packet bytes counting") > Cc: ciwil...@brocade.com > Cc: sta...@dpdk.org > > Signed-off-by: Flavia Musatescu <flavia.musate...@intel.com> > > --- > v2: > * Changed the comment > --- > drivers/net/af_packet/rte_eth_af_packet.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/af_packet/rte_eth_af_packet.c > b/drivers/net/af_packet/rte_eth_af_packet.c > index 6df09f2..df281bf 100644 > --- a/drivers/net/af_packet/rte_eth_af_packet.c > +++ b/drivers/net/af_packet/rte_eth_af_packet.c > @@ -244,8 +244,12 @@ eth_af_packet_tx(void *queue, struct rte_mbuf **bufs, > uint16_t nb_pkts) > } > > /* kick-off transmits */ > - if (sendto(pkt_q->sockfd, NULL, 0, MSG_DONTWAIT, NULL, 0) == -1) { > - /* error sending -- no packets transmitted */ > + if (sendto(pkt_q->sockfd, NULL, 0, MSG_DONTWAIT, NULL, 0) == -1 && > + errno != ENOBUFS) { > + /* > + * In case of a ENOBUFS error all of the enqueued packets will > + * be considered successful even though only some are sent. > + */ > num_tx = 0; > num_tx_bytes = 0; > } What about EINTR or EAGAIN?