Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp2496295pxb; Thu, 3 Feb 2022 07:52:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJx8Bj/F70YRE5eywUbDs2X5Vo5ErAHmpn5kzxfIYXyAcb8Rsopsz6PwTxcoffb4AZNcTdqj X-Received: by 2002:a05:6402:280f:: with SMTP id h15mr35539740ede.113.1643903558319; Thu, 03 Feb 2022 07:52:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643903558; cv=none; d=google.com; s=arc-20160816; b=W1zkE1t6qonIJ4mdIRA9fi1/1JQSUcfXml6JpkLeI/li3L7jfQyZDDJ5jRJRVfjifp 5kPi2fbuUkXkkRxE+ORO3dN0QcniHt1FxTUTy4S33yL2NrFMMvEryAUkXyozpnTaIPqo FhgUsYzhhG4OlCnIQCQ1CPuVqAAnJftm0bMpmNVif1/cXm6XTHj5vj8eJtanGeeyEyDh d1zQ2/BoA7SO4hyIQ6xEciLN5YJUGRFVhyGyxDaeY4+pEQ3knRMRQYqJ9Hd337NQr8FG NuK7TI6une+8LYn8OJCJX/K4Jd9qFWNwyS5f1ACsinNOt0Cs+Kt34Oh6o6qpEUbjA1VZ /OGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=nfh9neXAUEzcShXHBoAZTFYIWM5MQnmj1xRT6suzivE=; b=MuC9xJ+ISvS8SOSY7gjoSa4l+fCHvTrdaBc0Y7WITcBkMDF7icIEruvE12savsN2S/ qSTLHcns89NSWTO+P5TSlYQbzuoNXRkWRl0uy2YIowC615AyDT7f1NE5RZEgFVdsFsq+ Ye91E1pZFd6FS6q1D1QFQsm+wjunLA6yKJHCwhjBSkTFbtCiFDP2GsdU98dKSCDDTK9E nM4eszdA11t4x8U8kXRIInAqWsnqqKPSuZSb5htVwFWft7Ul4ez36C4A+hjoEt/VjVMf tNJqFU4RH7KO5uwXziIuO/LBYOWyqWLTJg1Anf9aLTW1Mrf0lNNh9BVTkjLay6QYNC1b e3rg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=HQj0tnz3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b91si13562792edf.289.2022.02.03.07.52.13; Thu, 03 Feb 2022 07:52:38 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=HQj0tnz3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240978AbiBAW32 (ORCPT + 99 others); Tue, 1 Feb 2022 17:29:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52728 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237935AbiBAW31 (ORCPT ); Tue, 1 Feb 2022 17:29:27 -0500 Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 68C8FC061714; Tue, 1 Feb 2022 14:29:27 -0800 (PST) Received: by mail-pj1-x102b.google.com with SMTP id s2-20020a17090ad48200b001b501977b23so4862642pju.2; Tue, 01 Feb 2022 14:29:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nfh9neXAUEzcShXHBoAZTFYIWM5MQnmj1xRT6suzivE=; b=HQj0tnz3VHrnn5pC/MIU8NCa/Sb5qfbS7hvjpIgQv7lyFVsTieWCrbhrmGVViqJ0XC 38BlVG8MZDWXDEACzsTphnACxUe+Rs6B20tGzCtQtzjmPVRQjTKmtVBrc/QUNfIesyUa SfvgWsv6s92KVd3DwwVVTh5v7n5Db4Iql8EYio6Bd4bubpNCJWqbZGWg2MGlmfeHTHth 30eLmFZuckUF2J8L0/JppFrbOz74B+lzTVVrsc6SglgamDmoXrx4xzetMM2ieI6qwpPK lkQf1cKc5UGdQ8eFzt8tzYwA659hpyN7g/eOi/pOgpXu3yTLSseQK/pTGtG5UNYiVr1i nQGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nfh9neXAUEzcShXHBoAZTFYIWM5MQnmj1xRT6suzivE=; b=GJDIy+66pHl8Mfdg5DgNGBqAsHRTzaGWsMyhipgTqTJlfIV1yaRNqSHnAKawXnij+H GwFMmS5/3vzSxFQEm4Q2S4KiyVJulWvWuzFZrlcCIVihfsa+FqoIO/tgoN1TwqlSk5/A KOqsr2P2dJrPTR1Zwr2wFyIcOTnyvy7TlM4FCWcKjBgAl7dMzleke7S0jRLwpDujFt58 KPrnmAT9GtobAMoxLINYS6h1WP3jR3j/WM0wELzziqBO2Fv6YHKgJJBb+hPRVy1+j/hj OUSqzmf/NXXfQTU/8Cc3jU5VZBs724v8RU5WJ2ISMC/Qm4aeZV0eaHVgzIBWjZzUTBEj c60A== X-Gm-Message-State: AOAM531rDRaAs7WI6KgFmxdeLF+5eiqHC0NTdna/0omKve6XQVUYRiuC zUQ1ecgj5CDmD6r+HrApfhY= X-Received: by 2002:a17:90a:a503:: with SMTP id a3mr4786119pjq.88.1643754566986; Tue, 01 Feb 2022 14:29:26 -0800 (PST) Received: from jeffreyji1.c.googlers.com.com (173.84.105.34.bc.googleusercontent.com. [34.105.84.173]) by smtp.gmail.com with ESMTPSA id ck21sm3576018pjb.51.2022.02.01.14.29.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Feb 2022 14:29:26 -0800 (PST) From: Jeffrey Ji X-Google-Original-From: Jeffrey Ji To: Eric Dumazet , "David S . Miller" Cc: Brian Vazquez , linux-kernel@vger.kernel.org, kuba@kernel.org, netdev@vger.kernel.org, jeffreyjilinux@gmail.com, jeffreyji Subject: [PATCH v6 net-next] net-core: add InMacErrors counter Date: Tue, 1 Feb 2022 22:28:45 +0000 Message-Id: <20220201222845.3640041-1-jeffreyji@google.com> X-Mailer: git-send-email 2.35.0.rc2.247.g8bbb082509-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: jeffreyji Increment InMacErrors counter when packet dropped due to incorrect 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 example output from nstat: \~# nstat -a | grep InMac Ip6InMacErrors 0 0.0 IpExtInMacErrors 1 0.0 Tested: Created 2 netns, sent 1 packet using trafgen from 1 to the other with "{eth(daddr=$INCORRECT_MAC...}", verified that nstat showed the counter was incremented. changelog: v6: rebase onto net-next v5: Change from SKB_DROP_REASON_BAD_DEST_MAC to SKB_DROP_REASON_OTHERHOST v3-4: Remove Change-Id v2: Use skb_free_reason() for tracing Add real-life example in patch msg Signed-off-by: jeffreyji --- include/linux/skbuff.h | 1 + include/uapi/linux/snmp.h | 1 + net/ipv4/ip_input.c | 7 +++++-- net/ipv4/proc.c | 1 + net/ipv6/ip6_input.c | 12 +++++++----- net/ipv6/proc.c | 1 + 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index a27bcc4f7e9a..1b1114f5c68e 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -320,6 +320,7 @@ enum skb_drop_reason { SKB_DROP_REASON_TCP_CSUM, SKB_DROP_REASON_SOCKET_FILTER, SKB_DROP_REASON_UDP_CSUM, + SKB_DROP_REASON_OTHERHOST, SKB_DROP_REASON_MAX, }; diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h index 904909d020e2..ac2fac12dd7d 100644 --- a/include/uapi/linux/snmp.h +++ b/include/uapi/linux/snmp.h @@ -57,6 +57,7 @@ enum IPSTATS_MIB_ECT0PKTS, /* InECT0Pkts */ IPSTATS_MIB_CEPKTS, /* InCEPkts */ IPSTATS_MIB_REASM_OVERLAPS, /* ReasmOverlaps */ + IPSTATS_MIB_INMACERRORS, /* InMacErrors */ __IPSTATS_MIB_MAX }; diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c index 3a025c011971..780892526166 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c @@ -441,8 +441,11 @@ static struct sk_buff *ip_rcv_core(struct sk_buff *skb, struct net *net) /* When the interface is in promisc. mode, drop all the crap * that it receives, do not try to analyse it. */ - if (skb->pkt_type == PACKET_OTHERHOST) - goto drop; + if (skb->pkt_type == PACKET_OTHERHOST) { + __IP_INC_STATS(net, IPSTATS_MIB_INMACERRORS); + kfree_skb_reason(skb, SKB_DROP_REASON_OTHERHOST); + return NULL; + } __IP_UPD_PO_STATS(net, IPSTATS_MIB_IN, skb->len); diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c index 28836071f0a6..2be4189197f3 100644 --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c @@ -117,6 +117,7 @@ static const struct snmp_mib snmp4_ipextstats_list[] = { SNMP_MIB_ITEM("InECT0Pkts", IPSTATS_MIB_ECT0PKTS), SNMP_MIB_ITEM("InCEPkts", IPSTATS_MIB_CEPKTS), SNMP_MIB_ITEM("ReasmOverlaps", IPSTATS_MIB_REASM_OVERLAPS), + SNMP_MIB_ITEM("InMacErrors", IPSTATS_MIB_INMACERRORS), SNMP_MIB_SENTINEL }; diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c index 80256717868e..da18d9159647 100644 --- a/net/ipv6/ip6_input.c +++ b/net/ipv6/ip6_input.c @@ -149,15 +149,17 @@ static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, struct net_device *dev, u32 pkt_len; struct inet6_dev *idev; - if (skb->pkt_type == PACKET_OTHERHOST) { - kfree_skb(skb); - return NULL; - } - rcu_read_lock(); idev = __in6_dev_get(skb->dev); + if (skb->pkt_type == PACKET_OTHERHOST) { + __IP6_INC_STATS(net, idev, IPSTATS_MIB_INMACERRORS); + rcu_read_unlock(); + kfree_skb_reason(skb, SKB_DROP_REASON_OTHERHOST); + return NULL; + } + __IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_IN, skb->len); if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL || diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c index d6306aa46bb1..76e6119ba558 100644 --- a/net/ipv6/proc.c +++ b/net/ipv6/proc.c @@ -84,6 +84,7 @@ static const struct snmp_mib snmp6_ipstats_list[] = { SNMP_MIB_ITEM("Ip6InECT1Pkts", IPSTATS_MIB_ECT1PKTS), SNMP_MIB_ITEM("Ip6InECT0Pkts", IPSTATS_MIB_ECT0PKTS), SNMP_MIB_ITEM("Ip6InCEPkts", IPSTATS_MIB_CEPKTS), + SNMP_MIB_ITEM("Ip6InMacErrors", IPSTATS_MIB_INMACERRORS), SNMP_MIB_SENTINEL }; -- 2.35.0.rc2.247.g8bbb082509-goog