From: Jeffrey Ji <jeffreyjilinux@gmail.com>
To: "David S . Miller" <davem@davemloft.net>
Cc: Brian Vazquez <brianvv@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>,
David Ahern <dsahern@kernel.org>,
Eric Dumazet <edumazet@google.com>,
Antoine Tenart <atenart@kernel.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Alexander Lobakin <alexandr.lobakin@intel.com>,
Kumar Kartikeya Dwivedi <memxor@gmail.com>,
Arnd Bergmann <arnd@arndb.de>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
jeffreyji <jeffreyji@google.com>
Subject: [PATCH v3 net-next] net-core: add rx_otherhost_dropped counter
Date: Tue, 8 Mar 2022 21:25:31 +0000 [thread overview]
Message-ID: <20220308212531.752215-1-jeffreyjilinux@gmail.com> (raw)
From: jeffreyji <jeffreyji@google.com>
Increment rx_otherhost_dropped counter when packet dropped due to
mismatched dest MAC addr.
An example when this drop can occur is when manually crafting raw
packets that will be consumed by a user space application via a tap
device. For testing purposes local traffic was generated using trafgen
for the client and netcat to start a server
Tested: Created 2 netns, sent 1 packet using trafgen from 1 to the other
with "{eth(daddr=$INCORRECT_MAC...}", verified that iproute2 showed the
counter was incremented. (Also had to modify iproute2 to show the stat,
additional patch for that coming next.)
Signed-off-by: jeffreyji <jeffreyji@google.com>
Reviewed-by: Brian Vazquez <brianvv@google.com>
---
changelog:
v3: rebase onto net-next/master, fix comments
v2: add kdoc comment
include/linux/netdevice.h | 3 +++
include/uapi/linux/if_link.h | 5 +++++
net/core/dev.c | 2 ++
net/ipv4/ip_input.c | 1 +
net/ipv6/ip6_input.c | 1 +
5 files changed, 12 insertions(+)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 29a850a8d460..43af5012b39c 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1741,6 +1741,8 @@ enum netdev_ml_priv_type {
* do not use this in drivers
* @rx_nohandler: nohandler dropped packets by core network on
* inactive devices, do not use this in drivers
+ * @rx_otherhost_dropped: Dropped packets due to mismatch in packet dest
+ * MAC address
* @carrier_up_count: Number of times the carrier has been up
* @carrier_down_count: Number of times the carrier has been down
*
@@ -2026,6 +2028,7 @@ struct net_device {
atomic_long_t rx_dropped;
atomic_long_t tx_dropped;
atomic_long_t rx_nohandler;
+ atomic_long_t rx_otherhost_dropped;
/* Stats to monitor link on/off, flapping */
atomic_t carrier_up_count;
diff --git a/include/uapi/linux/if_link.h b/include/uapi/linux/if_link.h
index ddca20357e7e..a9681908617b 100644
--- a/include/uapi/linux/if_link.h
+++ b/include/uapi/linux/if_link.h
@@ -211,6 +211,9 @@ struct rtnl_link_stats {
* @rx_nohandler: Number of packets received on the interface
* but dropped by the networking stack because the device is
* not designated to receive packets (e.g. backup link in a bond).
+ *
+ * @rx_otherhost_dropped: Number of packets dropped due to mismatch in
+ * packet's destination MAC address.
*/
struct rtnl_link_stats64 {
__u64 rx_packets;
@@ -243,6 +246,8 @@ struct rtnl_link_stats64 {
__u64 rx_compressed;
__u64 tx_compressed;
__u64 rx_nohandler;
+
+ __u64 rx_otherhost_dropped;
};
/* Subset of link stats useful for in-HW collection. Meaning of the fields is as
diff --git a/net/core/dev.c b/net/core/dev.c
index ba69ddf85af6..fd7ec8ce972b 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -10308,6 +10308,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
storage->rx_dropped += (unsigned long)atomic_long_read(&dev->rx_dropped);
storage->tx_dropped += (unsigned long)atomic_long_read(&dev->tx_dropped);
storage->rx_nohandler += (unsigned long)atomic_long_read(&dev->rx_nohandler);
+ storage->rx_otherhost_dropped +=
+ (unsigned long)atomic_long_read(&dev->rx_otherhost_dropped);
return storage;
}
EXPORT_SYMBOL(dev_get_stats);
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
index 95f7bb052784..8b87ea99904b 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -451,6 +451,7 @@ static struct sk_buff *ip_rcv_core(struct sk_buff *skb, struct net *net)
* that it receives, do not try to analyse it.
*/
if (skb->pkt_type == PACKET_OTHERHOST) {
+ atomic_long_inc(&skb->dev->rx_otherhost_dropped);
drop_reason = SKB_DROP_REASON_OTHERHOST;
goto drop;
}
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
index 5b5ea35635f9..5624c937f87f 100644
--- a/net/ipv6/ip6_input.c
+++ b/net/ipv6/ip6_input.c
@@ -150,6 +150,7 @@ static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, struct net_device *dev,
struct inet6_dev *idev;
if (skb->pkt_type == PACKET_OTHERHOST) {
+ atomic_long_inc(&skb->dev->rx_otherhost_dropped);
kfree_skb(skb);
return NULL;
}
--
2.35.1.616.g0bdcbb4464-goog
next reply other threads:[~2022-03-08 21:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-08 21:25 Jeffrey Ji [this message]
2022-03-08 22:51 ` David Ahern
2022-03-08 23:18 ` Eric Dumazet
2022-03-09 0:28 ` Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220308212531.752215-1-jeffreyjilinux@gmail.com \
--to=jeffreyjilinux@gmail.com \
--cc=alexandr.lobakin@intel.com \
--cc=arnd@arndb.de \
--cc=atenart@kernel.org \
--cc=bigeasy@linutronix.de \
--cc=brianvv@google.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=jeffreyji@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=memxor@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=yoshfuji@linux-ipv6.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®