diff options
author | Eric Dumazet <edumazet@google.com> | 2012-06-28 16:15:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-06-29 03:52:32 -0400 |
commit | b8c8430726e5bd552e01dacc5a44f3f83f7446ca (patch) | |
tree | e966e64a7bb8a2451048b7e73c0c4aa9a8db40a3 /net/l2tp/l2tp_eth.c | |
parent | a777c892cea917b6c67c61f8dff47d8caae7b8a1 (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.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); |