Commit 82cfdcfa authored by Xu Du's avatar Xu Du Committed by Jakub Kicinski
Browse files

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: default avatarXu Du <xudu@redhat.com>
Link: https://patch.msgid.link/ecc7c0c2d75d87cb814e97579e731650339703ab.1768979440.git.xudu@redhat.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent a942fcd7
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -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
+2 −37
Original line number Diff line number Diff line
@@ -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)