diff options
-rw-r--r-- | tools/testing/selftests/bpf/prog_tests/tc_netkit.c | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/tools/testing/selftests/bpf/prog_tests/tc_netkit.c b/tools/testing/selftests/bpf/prog_tests/tc_netkit.c index b9135720024ccf..d4e92e4fd4456c 100644 --- a/tools/testing/selftests/bpf/prog_tests/tc_netkit.c +++ b/tools/testing/selftests/bpf/prog_tests/tc_netkit.c @@ -7,12 +7,13 @@ #define netkit_peer "nk0" #define netkit_name "nk1" -#define ping_addr_neigh 0x0a000002 /* 10.0.0.2 */ -#define ping_addr_noneigh 0x0a000003 /* 10.0.0.3 */ +#define ping_addr_neigh "10.0.0.2" +#define ping_addr_noneigh "10.0.0.3" #include "test_tc_link.skel.h" #include "netlink_helpers.h" #include "tc_helpers.h" +#include "network_helpers.h" #define ICMP_ECHO 8 @@ -116,9 +117,17 @@ static void destroy_netkit(void) ASSERT_EQ(if_nametoindex(netkit_name), 0, netkit_name "_ifindex"); } -static int __send_icmp(__u32 dest) +static int bind_to_device_cb(int sock, void *opts) { - struct sockaddr_in addr; + return setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, + netkit_name, strlen(netkit_name) + 1); +} +static int __send_icmp(const char *dest) +{ + struct network_helper_opts opts = { + .proto = IPPROTO_ICMP, + .post_socket_cb = bind_to_device_cb, + }; struct icmphdr icmp; int sock, ret; @@ -126,33 +135,17 @@ static int __send_icmp(__u32 dest) if (!ASSERT_OK(ret, "write_sysctl(net.ipv4.ping_group_range)")) return ret; - sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP); - if (!ASSERT_GE(sock, 0, "icmp_socket")) - return -errno; - - ret = setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, - netkit_name, strlen(netkit_name) + 1); - if (!ASSERT_OK(ret, "setsockopt(SO_BINDTODEVICE)")) - goto out; - - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = htonl(dest); - memset(&icmp, 0, sizeof(icmp)); icmp.type = ICMP_ECHO; icmp.echo.id = 1234; icmp.echo.sequence = 1; - ret = sendto(sock, &icmp, sizeof(icmp), 0, - (struct sockaddr *)&addr, sizeof(addr)); - if (!ASSERT_GE(ret, 0, "icmp_sendto")) - ret = -errno; - else - ret = 0; -out: + sock = send_to_addr_str(AF_INET, SOCK_DGRAM, dest, 0, + &icmp, sizeof(icmp), 0, &opts); + if (!ASSERT_OK_FD(sock, "send_to_addr_str")) + return -errno; close(sock); - return ret; + return 0; } static int send_icmp(void) |