]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/bpf: Move open_tuntap to network helpers
authorMarcus Wichelmann <marcus.wichelmann@hetzner-cloud.de>
Wed, 5 Mar 2025 21:34:35 +0000 (21:34 +0000)
committerMartin KaFai Lau <martin.lau@kernel.org>
Thu, 6 Mar 2025 20:31:08 +0000 (12:31 -0800)
To test the XDP metadata functionality of the tun driver, it's necessary
to create a new tap device first. A helper function for this already
exists in lwt_helpers.h. Move it to the common network helpers header,
so it can be reused in other tests.

Signed-off-by: Marcus Wichelmann <marcus.wichelmann@hetzner-cloud.de>
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Link: https://patch.msgid.link/20250305213438.3863922-4-marcus.wichelmann@hetzner-cloud.de
tools/testing/selftests/bpf/network_helpers.c
tools/testing/selftests/bpf/network_helpers.h
tools/testing/selftests/bpf/prog_tests/lwt_helpers.h

index 80844a5fb1feef2ff73c2f0293e52495803ab769..fcee2c4a637a5238958d43bd62a988f67dd4fc6b 100644 (file)
@@ -548,6 +548,34 @@ void close_netns(struct nstoken *token)
        free(token);
 }
 
+int open_tuntap(const char *dev_name, bool need_mac)
+{
+       int err = 0;
+       struct ifreq ifr;
+       int fd = open("/dev/net/tun", O_RDWR);
+
+       if (!ASSERT_GT(fd, 0, "open(/dev/net/tun)"))
+               return -1;
+
+       ifr.ifr_flags = IFF_NO_PI | (need_mac ? IFF_TAP : IFF_TUN);
+       strncpy(ifr.ifr_name, dev_name, IFNAMSIZ - 1);
+       ifr.ifr_name[IFNAMSIZ - 1] = '\0';
+
+       err = ioctl(fd, TUNSETIFF, &ifr);
+       if (!ASSERT_OK(err, "ioctl(TUNSETIFF)")) {
+               close(fd);
+               return -1;
+       }
+
+       err = fcntl(fd, F_SETFL, O_NONBLOCK);
+       if (!ASSERT_OK(err, "fcntl(O_NONBLOCK)")) {
+               close(fd);
+               return -1;
+       }
+
+       return fd;
+}
+
 int get_socket_local_port(int sock_fd)
 {
        struct sockaddr_storage addr;
index ebec8a8d6f81e9d079a3b087127a37885c656856..9235976d0c5043b34b0926bb8bc2e89de0ab5744 100644 (file)
@@ -8,6 +8,7 @@
 typedef __u16 __sum16;
 #include <linux/if_ether.h>
 #include <linux/if_packet.h>
+#include <linux/if_tun.h>
 #include <linux/ip.h>
 #include <linux/ipv6.h>
 #include <linux/ethtool.h>
@@ -85,6 +86,8 @@ int get_socket_local_port(int sock_fd);
 int get_hw_ring_size(char *ifname, struct ethtool_ringparam *ring_param);
 int set_hw_ring_size(char *ifname, struct ethtool_ringparam *ring_param);
 
+int open_tuntap(const char *dev_name, bool need_mac);
+
 struct nstoken;
 /**
  * open_netns() - Switch to specified network namespace by name.
index fb1eb8c6736170ccb641e02b6398e33ecbe210b7..ccec0fcdabc11de22963f5ab418345101388c825 100644 (file)
@@ -5,7 +5,6 @@
 
 #include <time.h>
 #include <net/if.h>
-#include <linux/if_tun.h>
 #include <linux/icmp.h>
 
 #include "test_progs.h"
@@ -37,34 +36,6 @@ static inline int netns_delete(void)
        return system("ip netns del " NETNS ">/dev/null 2>&1");
 }
 
-static int open_tuntap(const char *dev_name, bool need_mac)
-{
-       int err = 0;
-       struct ifreq ifr;
-       int fd = open("/dev/net/tun", O_RDWR);
-
-       if (!ASSERT_GT(fd, 0, "open(/dev/net/tun)"))
-               return -1;
-
-       ifr.ifr_flags = IFF_NO_PI | (need_mac ? IFF_TAP : IFF_TUN);
-       strncpy(ifr.ifr_name, dev_name, IFNAMSIZ - 1);
-       ifr.ifr_name[IFNAMSIZ - 1] = '\0';
-
-       err = ioctl(fd, TUNSETIFF, &ifr);
-       if (!ASSERT_OK(err, "ioctl(TUNSETIFF)")) {
-               close(fd);
-               return -1;
-       }
-
-       err = fcntl(fd, F_SETFL, O_NONBLOCK);
-       if (!ASSERT_OK(err, "fcntl(O_NONBLOCK)")) {
-               close(fd);
-               return -1;
-       }
-
-       return fd;
-}
-
 #define ICMP_PAYLOAD_SIZE     100
 
 /* Match an ICMP packet with payload len ICMP_PAYLOAD_SIZE */