vlan: adds drops accounting
Subsystems (2)
PATCH 1/1 vlan: adds drops accounting
Its hard to tell if vlans are dropping frames, since every frame given to vlan_???_start_xmit() functions is accounted as fully transmitted by lower device.
We can test dev_queue_xmit() return values to properly account for dropped frames.
--- net/8021q/vlan_dev.c | 29 ++++++++++++++++++++++------- 1 files changed, 22 insertions(+), 7 deletions(-)
net/8021q/vlan_dev.c +22 -7
@@ -294,6 +294,8 @@ static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,int i =skb_get_queue_mapping (skb);struct netdev_queue *txq =netdev_get_tx_queue (dev, i);struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data); +unsigned int len; +int ret;/* Handle non-VLAN frames if they are sent to us, for example by DHCP. *
@@ -319,11 +321,17 @@ static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,vlan_dev_info (dev)->cnt_inc_headroom_on_tx++; } - txq->tx_packets++; - txq->tx_bytes += skb->len; skb->dev =vlan_dev_info (dev)->real_dev; -dev_queue_xmit (skb); + len = skb->len; + ret =dev_queue_xmit (skb); + +if (likely (ret ==NET_XMIT_SUCCESS )) { + txq->tx_packets++; + txq->tx_bytes += len; + }else + txq->tx_dropped++; +return NETDEV_TX_OK ; }
@@ -333,16 +341,23 @@ static netdev_tx_t vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb,int i =skb_get_queue_mapping (skb);struct netdev_queue *txq =netdev_get_tx_queue (dev, i);u16 vlan_tci; +unsigned int len; +int ret; vlan_tci =vlan_dev_info (dev)->vlan_id; vlan_tci |=vlan_dev_get_egress_qos_mask (dev, skb); skb =__vlan_hwaccel_put_tag (skb, vlan_tci); - txq->tx_packets++; - txq->tx_bytes += skb->len; - skb->dev =vlan_dev_info (dev)->real_dev; -dev_queue_xmit (skb); + len = skb->len; + ret =dev_queue_xmit (skb); + +if (likely (ret ==NET_XMIT_SUCCESS )) { + txq->tx_packets++; + txq->tx_bytes += len; + }else + txq->tx_dropped++; +return NETDEV_TX_OK ; }
From: Eric Dumazet <[email protected]>
Date: Thu, 03 Sep 2009 12:39:16 +0200
Quoted 8 lines
Its hard to tell if vlans are dropping frames, since every frame given to vlan_???_start_xmit() functions is accounted as fully transmitted by lower device.
We can test
dev_queue_xmit()return values to properly account for dropped frames.Signed-off-by Eric Dumazet <[email protected]>
Applied.
But, how inappropriate would it be to keep doing the accounting but pass the status back to the caller? Or will that screw up the qdisc running engine?
Quoted 10 lines · David Miller
From: Eric Dumazet <[email protected]>
Date: Thu, 03 Sep 2009 12:39:16 +0200Quoted 7 lines
Its hard to tell if vlans are dropping frames, since every frame given to vlan_???_start_xmit() functions is accounted as fully transmitted by lower device.
We can test
dev_queue_xmit()return values to properly account for dropped frames.
Quoted 7 lines
Quoted 1 line
Signed-off-by Eric Dumazet <[email protected]>Applied.
But, how inappropriate would it be to keep doing the accounting but pass the status back to the caller? Or will that screw up the qdisc running engine?
Its currently not possible to return the dev_queue_xmit() status from ndo_start_xmit(). My patch to extend the possible return values will allow that. I hope I'm able to take care of it today.