diff options
Diffstat (limited to 'net/l2tp/l2tp_eth.c')
-rw-r--r-- | net/l2tp/l2tp_eth.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c index 47b259fccd27..f9ee74deeac2 100644 --- a/net/l2tp/l2tp_eth.c +++ b/net/l2tp/l2tp_eth.c | |||
@@ -44,6 +44,7 @@ struct l2tp_eth { | |||
44 | struct list_head list; | 44 | struct list_head list; |
45 | atomic_long_t tx_bytes; | 45 | atomic_long_t tx_bytes; |
46 | atomic_long_t tx_packets; | 46 | atomic_long_t tx_packets; |
47 | atomic_long_t tx_dropped; | ||
47 | atomic_long_t rx_bytes; | 48 | atomic_long_t rx_bytes; |
48 | atomic_long_t rx_packets; | 49 | atomic_long_t rx_packets; |
49 | atomic_long_t rx_errors; | 50 | atomic_long_t rx_errors; |
@@ -92,12 +93,15 @@ static int l2tp_eth_dev_xmit(struct sk_buff *skb, struct net_device *dev) | |||
92 | { | 93 | { |
93 | struct l2tp_eth *priv = netdev_priv(dev); | 94 | struct l2tp_eth *priv = netdev_priv(dev); |
94 | struct l2tp_session *session = priv->session; | 95 | struct l2tp_session *session = priv->session; |
96 | unsigned int len = skb->len; | ||
97 | int ret = l2tp_xmit_skb(session, skb, session->hdr_len); | ||
95 | 98 | ||
96 | atomic_long_add(skb->len, &priv->tx_bytes); | 99 | if (likely(ret == NET_XMIT_SUCCESS)) { |
97 | atomic_long_inc(&priv->tx_packets); | 100 | atomic_long_add(len, &priv->tx_bytes); |
98 | 101 | atomic_long_inc(&priv->tx_packets); | |
99 | l2tp_xmit_skb(session, skb, session->hdr_len); | 102 | } else { |
100 | 103 | atomic_long_inc(&priv->tx_dropped); | |
104 | } | ||
101 | return NETDEV_TX_OK; | 105 | return NETDEV_TX_OK; |
102 | } | 106 | } |
103 | 107 | ||
@@ -108,6 +112,7 @@ static struct rtnl_link_stats64 *l2tp_eth_get_stats64(struct net_device *dev, | |||
108 | 112 | ||
109 | stats->tx_bytes = atomic_long_read(&priv->tx_bytes); | 113 | stats->tx_bytes = atomic_long_read(&priv->tx_bytes); |
110 | stats->tx_packets = atomic_long_read(&priv->tx_packets); | 114 | stats->tx_packets = atomic_long_read(&priv->tx_packets); |
115 | stats->tx_dropped = atomic_long_read(&priv->tx_dropped); | ||
111 | stats->rx_bytes = atomic_long_read(&priv->rx_bytes); | 116 | stats->rx_bytes = atomic_long_read(&priv->rx_bytes); |
112 | stats->rx_packets = atomic_long_read(&priv->rx_packets); | 117 | stats->rx_packets = atomic_long_read(&priv->rx_packets); |
113 | stats->rx_errors = atomic_long_read(&priv->rx_errors); | 118 | stats->rx_errors = atomic_long_read(&priv->rx_errors); |