aboutsummaryrefslogtreecommitdiffstats
path: root/net/l2tp/l2tp_eth.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2012-06-28 16:15:13 -0400
committerDavid S. Miller <davem@davemloft.net>2012-06-29 03:52:32 -0400
commitb8c8430726e5bd552e01dacc5a44f3f83f7446ca (patch)
treee966e64a7bb8a2451048b7e73c0c4aa9a8db40a3 /net/l2tp/l2tp_eth.c
parenta777c892cea917b6c67c61f8dff47d8caae7b8a1 (diff)
net: l2tp_eth: provide tx_dropped counter
Change l2tp_xmit_skb() to return NET_XMIT_DROP in case skb is dropped. Use kfree_skb() instead dev_kfree_skb() for drop_monitor pleasure. Support tx_dropped counter for l2tp_eth Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: James Chapman <jchapman@katalix.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/l2tp/l2tp_eth.c')
-rw-r--r--net/l2tp/l2tp_eth.c15
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);