mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 23:52:08 +02:00
selftests/bpf: Move open_tuntap to network helpers
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
This commit is contained in:
parent
0ca23a4d64
commit
d5ca409c86
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user