mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-19 13:38:24 -05:00
selftest: tun: Refactor tun_delete to use tuntap_helpers
The previous patch introduced common tuntap helpers to simplify tun test code. This patch refactors the tun_delete function to use these new helpers. Signed-off-by: Xu Du <xudu@redhat.com> Link: https://patch.msgid.link/ecc7c0c2d75d87cb814e97579e731650339703ab.1768979440.git.xudu@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -183,7 +183,6 @@ TEST_GEN_PROGS := \
|
||||
tap \
|
||||
tcp_port_share \
|
||||
tls \
|
||||
tun \
|
||||
# end of TEST_GEN_PROGS
|
||||
|
||||
TEST_FILES := \
|
||||
@@ -195,7 +194,11 @@ TEST_FILES := \
|
||||
|
||||
# YNL files, must be before "include ..lib.mk"
|
||||
YNL_GEN_FILES := busy_poller
|
||||
YNL_GEN_PROGS := netlink-dumps
|
||||
YNL_GEN_PROGS := \
|
||||
netlink-dumps \
|
||||
tun \
|
||||
# end of YNL_GEN_PROGS
|
||||
|
||||
TEST_GEN_FILES += $(YNL_GEN_FILES)
|
||||
TEST_GEN_PROGS += $(YNL_GEN_PROGS)
|
||||
|
||||
@@ -206,7 +209,14 @@ TEST_INCLUDES := forwarding/lib.sh
|
||||
include ../lib.mk
|
||||
|
||||
# YNL build
|
||||
YNL_GENS := netdev
|
||||
YNL_GENS := \
|
||||
netdev \
|
||||
rt-addr \
|
||||
rt-link \
|
||||
rt-neigh \
|
||||
rt-route \
|
||||
# end of YNL_GENS
|
||||
|
||||
include ynl.mk
|
||||
|
||||
$(OUTPUT)/epoll_busy_poll: LDLIBS += -lcap
|
||||
|
||||
@@ -8,14 +8,12 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <linux/if.h>
|
||||
#include <linux/if_tun.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include "kselftest_harness.h"
|
||||
#include "tuntap_helpers.h"
|
||||
|
||||
static int tun_attach(int fd, char *dev)
|
||||
{
|
||||
@@ -66,40 +64,7 @@ static int tun_alloc(char *dev)
|
||||
|
||||
static int tun_delete(char *dev)
|
||||
{
|
||||
struct {
|
||||
struct nlmsghdr nh;
|
||||
struct ifinfomsg ifm;
|
||||
unsigned char data[64];
|
||||
} req;
|
||||
struct rtattr *rta;
|
||||
int ret, rtnl;
|
||||
|
||||
rtnl = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
|
||||
if (rtnl < 0) {
|
||||
fprintf(stderr, "can't open rtnl: %s\n", strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
|
||||
memset(&req, 0, sizeof(req));
|
||||
req.nh.nlmsg_len = NLMSG_ALIGN(NLMSG_LENGTH(sizeof(req.ifm)));
|
||||
req.nh.nlmsg_flags = NLM_F_REQUEST;
|
||||
req.nh.nlmsg_type = RTM_DELLINK;
|
||||
|
||||
req.ifm.ifi_family = AF_UNSPEC;
|
||||
|
||||
rta = (struct rtattr *)(((char *)&req) + NLMSG_ALIGN(req.nh.nlmsg_len));
|
||||
rta->rta_type = IFLA_IFNAME;
|
||||
rta->rta_len = RTA_LENGTH(IFNAMSIZ);
|
||||
req.nh.nlmsg_len += rta->rta_len;
|
||||
memcpy(RTA_DATA(rta), dev, IFNAMSIZ);
|
||||
|
||||
ret = send(rtnl, &req, req.nh.nlmsg_len, 0);
|
||||
if (ret < 0)
|
||||
fprintf(stderr, "can't send: %s\n", strerror(errno));
|
||||
ret = (unsigned int)ret != req.nh.nlmsg_len;
|
||||
|
||||
close(rtnl);
|
||||
return ret;
|
||||
return ip_link_del(dev);
|
||||
}
|
||||
|
||||
FIXTURE(tun)
|
||||
|
||||
Reference in New Issue
Block a user