From b341f6fd45abb188653d9e0a2816bc53d64278b1 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Sat, 8 Feb 2025 14:26:43 -0500 Subject: blackhole_dev: convert self-test to KUnit Convert this very simple smoke test to a KUnit test. Add a missing `htons` call that was spotted[0] by kernel test robot after initial conversion to KUnit. Link: https://lore.kernel.org/oe-kbuild-all/202502090223.qCYMBjWT-lkp@intel.com/ [0] Signed-off-by: Tamir Duberstein Link: https://patch.msgid.link/20250208-blackholedev-kunit-convert-v2-1-182db9bd56ec@gmail.com Signed-off-by: Jakub Kicinski --- lib/Kconfig.debug | 20 +++-- lib/Makefile | 2 +- lib/blackhole_dev_kunit.c | 85 ++++++++++++++++++ lib/test_blackhole_dev.c | 100 ---------------------- tools/testing/selftests/net/Makefile | 2 +- tools/testing/selftests/net/test_blackhole_dev.sh | 11 --- 6 files changed, 98 insertions(+), 122 deletions(-) create mode 100644 lib/blackhole_dev_kunit.c delete mode 100644 lib/test_blackhole_dev.c delete mode 100755 tools/testing/selftests/net/test_blackhole_dev.sh diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 1af972a92d06..238321830993 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -2557,15 +2557,6 @@ config TEST_BPF If unsure, say N. -config TEST_BLACKHOLE_DEV - tristate "Test blackhole netdev functionality" - depends on m && NET - help - This builds the "test_blackhole_dev" module that validates the - data path through this blackhole netdev. - - If unsure, say N. - config FIND_BIT_BENCHMARK tristate "Test find_bit functions" help @@ -2888,6 +2879,17 @@ config USERCOPY_KUNIT_TEST on the copy_to/from_user infrastructure, making sure basic user/kernel boundary testing is working. +config BLACKHOLE_DEV_KUNIT_TEST + tristate "Test blackhole netdev functionality" if !KUNIT_ALL_TESTS + depends on NET + depends on KUNIT + default KUNIT_ALL_TESTS + help + This builds the "blackhole_dev_kunit" module that validates the + data path through this blackhole netdev. + + If unsure, say N. + config TEST_UDELAY tristate "udelay test driver" help diff --git a/lib/Makefile b/lib/Makefile index d5cfc7afbbb8..19ff6993c2bc 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -102,7 +102,6 @@ obj-$(CONFIG_TEST_RUNTIME) += tests/ obj-$(CONFIG_TEST_DEBUG_VIRTUAL) += test_debug_virtual.o obj-$(CONFIG_TEST_MEMCAT_P) += test_memcat_p.o obj-$(CONFIG_TEST_OBJAGG) += test_objagg.o -obj-$(CONFIG_TEST_BLACKHOLE_DEV) += test_blackhole_dev.o obj-$(CONFIG_TEST_MEMINIT) += test_meminit.o obj-$(CONFIG_TEST_LOCKUP) += test_lockup.o obj-$(CONFIG_TEST_HMM) += test_hmm.o @@ -393,6 +392,7 @@ obj-$(CONFIG_FORTIFY_KUNIT_TEST) += fortify_kunit.o obj-$(CONFIG_CRC_KUNIT_TEST) += crc_kunit.o obj-$(CONFIG_SIPHASH_KUNIT_TEST) += siphash_kunit.o obj-$(CONFIG_USERCOPY_KUNIT_TEST) += usercopy_kunit.o +obj-$(CONFIG_BLACKHOLE_DEV_KUNIT_TEST) += blackhole_dev_kunit.o obj-$(CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED) += devmem_is_allowed.o diff --git a/lib/blackhole_dev_kunit.c b/lib/blackhole_dev_kunit.c new file mode 100644 index 000000000000..06834ab35f43 --- /dev/null +++ b/lib/blackhole_dev_kunit.c @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * This tests the blackhole_dev that is created during the + * net subsystem initialization. The test this module performs is + * by injecting an skb into the stack with skb->dev as the + * blackhole_dev and expects kernel to behave in a sane manner + * (in other words, *not crash*)! + * + * Copyright (c) 2018, Mahesh Bandewar + */ + +#include +#include +#include +#include +#include +#include + +#include + +#define SKB_SIZE 256 +#define HEAD_SIZE (14+40+8) /* Ether + IPv6 + UDP */ +#define TAIL_SIZE 32 /* random tail-room */ + +#define UDP_PORT 1234 + +static void test_blackholedev(struct kunit *test) +{ + struct ipv6hdr *ip6h; + struct sk_buff *skb; + struct udphdr *uh; + int data_len; + + skb = alloc_skb(SKB_SIZE, GFP_KERNEL); + KUNIT_ASSERT_NOT_NULL(test, skb); + + /* Reserve head-room for the headers */ + skb_reserve(skb, HEAD_SIZE); + + /* Add data to the skb */ + data_len = SKB_SIZE - (HEAD_SIZE + TAIL_SIZE); + memset(__skb_put(skb, data_len), 0xf, data_len); + + /* Add protocol data */ + /* (Transport) UDP */ + uh = (struct udphdr *)skb_push(skb, sizeof(struct udphdr)); + skb_set_transport_header(skb, 0); + uh->source = uh->dest = htons(UDP_PORT); + uh->len = htons(data_len); + uh->check = 0; + /* (Network) IPv6 */ + ip6h = (struct ipv6hdr *)skb_push(skb, sizeof(struct ipv6hdr)); + skb_set_network_header(skb, 0); + ip6h->hop_limit = 32; + ip6h->payload_len = htons(data_len + sizeof(struct udphdr)); + ip6h->nexthdr = IPPROTO_UDP; + ip6h->saddr = in6addr_loopback; + ip6h->daddr = in6addr_loopback; + /* Ether */ + skb_push(skb, sizeof(struct ethhdr)); + skb_set_mac_header(skb, 0); + + skb->protocol = htons(ETH_P_IPV6); + skb->pkt_type = PACKET_HOST; + skb->dev = blackhole_netdev; + + /* Now attempt to send the packet */ + KUNIT_EXPECT_EQ(test, dev_queue_xmit(skb), NET_XMIT_SUCCESS); +} + +static struct kunit_case blackholedev_cases[] = { + KUNIT_CASE(test_blackholedev), + {}, +}; + +static struct kunit_suite blackholedev_suite = { + .name = "blackholedev", + .test_cases = blackholedev_cases, +}; + +kunit_test_suite(blackholedev_suite); + +MODULE_AUTHOR("Mahesh Bandewar "); +MODULE_DESCRIPTION("module test of the blackhole_dev"); +MODULE_LICENSE("GPL"); diff --git a/lib/test_blackhole_dev.c b/lib/test_blackhole_dev.c deleted file mode 100644 index ec290ac2a0d9..000000000000 --- a/lib/test_blackhole_dev.c +++ /dev/null @@ -1,100 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * This module tests the blackhole_dev that is created during the - * net subsystem initialization. The test this module performs is - * by injecting an skb into the stack with skb->dev as the - * blackhole_dev and expects kernel to behave in a sane manner - * (in other words, *not crash*)! - * - * Copyright (c) 2018, Mahesh Bandewar - */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -#define SKB_SIZE 256 -#define HEAD_SIZE (14+40+8) /* Ether + IPv6 + UDP */ -#define TAIL_SIZE 32 /* random tail-room */ - -#define UDP_PORT 1234 - -static int __init test_blackholedev_init(void) -{ - struct ipv6hdr *ip6h; - struct sk_buff *skb; - struct udphdr *uh; - int data_len; - int ret; - - skb = alloc_skb(SKB_SIZE, GFP_KERNEL); - if (!skb) - return -ENOMEM; - - /* Reserve head-room for the headers */ - skb_reserve(skb, HEAD_SIZE); - - /* Add data to the skb */ - data_len = SKB_SIZE - (HEAD_SIZE + TAIL_SIZE); - memset(__skb_put(skb, data_len), 0xf, data_len); - - /* Add protocol data */ - /* (Transport) UDP */ - uh = (struct udphdr *)skb_push(skb, sizeof(struct udphdr)); - skb_set_transport_header(skb, 0); - uh->source = uh->dest = htons(UDP_PORT); - uh->len = htons(data_len); - uh->check = 0; - /* (Network) IPv6 */ - ip6h = (struct ipv6hdr *)skb_push(skb, sizeof(struct ipv6hdr)); - skb_set_network_header(skb, 0); - ip6h->hop_limit = 32; - ip6h->payload_len = data_len + sizeof(struct udphdr); - ip6h->nexthdr = IPPROTO_UDP; - ip6h->saddr = in6addr_loopback; - ip6h->daddr = in6addr_loopback; - /* Ether */ - skb_push(skb, sizeof(struct ethhdr)); - skb_set_mac_header(skb, 0); - - skb->protocol = htons(ETH_P_IPV6); - skb->pkt_type = PACKET_HOST; - skb->dev = blackhole_netdev; - - /* Now attempt to send the packet */ - ret = dev_queue_xmit(skb); - - switch (ret) { - case NET_XMIT_SUCCESS: - pr_warn("dev_queue_xmit() returned NET_XMIT_SUCCESS\n"); - break; - case NET_XMIT_DROP: - pr_warn("dev_queue_xmit() returned NET_XMIT_DROP\n"); - break; - case NET_XMIT_CN: - pr_warn("dev_queue_xmit() returned NET_XMIT_CN\n"); - break; - default: - pr_err("dev_queue_xmit() returned UNKNOWN(%d)\n", ret); - } - - return 0; -} - -static void __exit test_blackholedev_exit(void) -{ - pr_warn("test_blackholedev module terminating.\n"); -} - -module_init(test_blackholedev_init); -module_exit(test_blackholedev_exit); - -MODULE_AUTHOR("Mahesh Bandewar "); -MODULE_DESCRIPTION("module test of the blackhole_dev"); -MODULE_LICENSE("GPL"); diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile index e2f03211f9b3..b6271714504d 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile @@ -7,7 +7,7 @@ CFLAGS += -I../../../../usr/include/ $(KHDR_INCLUDES) CFLAGS += -I../ TEST_PROGS := run_netsocktests run_afpackettests test_bpf.sh netdevice.sh \ - rtnetlink.sh xfrm_policy.sh test_blackhole_dev.sh + rtnetlink.sh xfrm_policy.sh TEST_PROGS += fib_tests.sh fib-onlink-tests.sh pmtu.sh udpgso.sh ip_defrag.sh TEST_PROGS += udpgso_bench.sh fib_rule_tests.sh msg_zerocopy.sh psock_snd.sh TEST_PROGS += udpgro_bench.sh udpgro.sh test_vxlan_under_vrf.sh reuseport_addr_any.sh diff --git a/tools/testing/selftests/net/test_blackhole_dev.sh b/tools/testing/selftests/net/test_blackhole_dev.sh deleted file mode 100755 index 3119b80e711f..000000000000 --- a/tools/testing/selftests/net/test_blackhole_dev.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# SPDX-License-Identifier: GPL-2.0 -# Runs blackhole-dev test using blackhole-dev kernel module - -if /sbin/modprobe -q test_blackhole_dev ; then - /sbin/modprobe -q -r test_blackhole_dev; - echo "test_blackhole_dev: ok"; -else - echo "test_blackhole_dev: [FAIL]"; - exit 1; -fi -- cgit v1.2.3