Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/bpf: move SYS() macro into the test_progs.h

A lot of tests defined SYS() macro to run system calls with goto label.
Let's move this macro to test_progs.h and add configurable
"goto_label" as the first arg.

Suggested-by: Martin KaFai Lau <martin.lau@linux.dev>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Link: https://lore.kernel.org/r/20230224061343.506571-2-liuhangbin@gmail.com
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>

authored by

Hangbin Liu and committed by
Martin KaFai Lau
b61987d3 d0093aae

+192 -262
+4 -12
tools/testing/selftests/bpf/prog_tests/decap_sanity.c
··· 10 10 #include "network_helpers.h" 11 11 #include "decap_sanity.skel.h" 12 12 13 - #define SYS(fmt, ...) \ 14 - ({ \ 15 - char cmd[1024]; \ 16 - snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 17 - if (!ASSERT_OK(system(cmd), cmd)) \ 18 - goto fail; \ 19 - }) 20 - 21 13 #define NS_TEST "decap_sanity_ns" 22 14 #define IPV6_IFACE_ADDR "face::1" 23 15 #define UDP_TEST_PORT 7777 ··· 29 37 if (!ASSERT_OK_PTR(skel, "skel open_and_load")) 30 38 return; 31 39 32 - SYS("ip netns add %s", NS_TEST); 33 - SYS("ip -net %s -6 addr add %s/128 dev lo nodad", NS_TEST, IPV6_IFACE_ADDR); 34 - SYS("ip -net %s link set dev lo up", NS_TEST); 40 + SYS(fail, "ip netns add %s", NS_TEST); 41 + SYS(fail, "ip -net %s -6 addr add %s/128 dev lo nodad", NS_TEST, IPV6_IFACE_ADDR); 42 + SYS(fail, "ip -net %s link set dev lo up", NS_TEST); 35 43 36 44 nstoken = open_netns(NS_TEST); 37 45 if (!ASSERT_OK_PTR(nstoken, "open_netns")) ··· 72 80 bpf_tc_hook_destroy(&qdisc_hook); 73 81 close_netns(nstoken); 74 82 } 75 - system("ip netns del " NS_TEST " &> /dev/null"); 83 + SYS_NOFAIL("ip netns del " NS_TEST " &> /dev/null"); 76 84 decap_sanity__destroy(skel); 77 85 }
+10 -15
tools/testing/selftests/bpf/prog_tests/empty_skb.c
··· 4 4 #include <net/if.h> 5 5 #include "empty_skb.skel.h" 6 6 7 - #define SYS(cmd) ({ \ 8 - if (!ASSERT_OK(system(cmd), (cmd))) \ 9 - goto out; \ 10 - }) 11 - 12 7 void test_empty_skb(void) 13 8 { 14 9 LIBBPF_OPTS(bpf_test_run_opts, tattr); ··· 88 93 }, 89 94 }; 90 95 91 - SYS("ip netns add empty_skb"); 96 + SYS(out, "ip netns add empty_skb"); 92 97 tok = open_netns("empty_skb"); 93 - SYS("ip link add veth0 type veth peer veth1"); 94 - SYS("ip link set dev veth0 up"); 95 - SYS("ip link set dev veth1 up"); 96 - SYS("ip addr add 10.0.0.1/8 dev veth0"); 97 - SYS("ip addr add 10.0.0.2/8 dev veth1"); 98 + SYS(out, "ip link add veth0 type veth peer veth1"); 99 + SYS(out, "ip link set dev veth0 up"); 100 + SYS(out, "ip link set dev veth1 up"); 101 + SYS(out, "ip addr add 10.0.0.1/8 dev veth0"); 102 + SYS(out, "ip addr add 10.0.0.2/8 dev veth1"); 98 103 veth_ifindex = if_nametoindex("veth0"); 99 104 100 - SYS("ip link add ipip0 type ipip local 10.0.0.1 remote 10.0.0.2"); 101 - SYS("ip link set ipip0 up"); 102 - SYS("ip addr add 192.168.1.1/16 dev ipip0"); 105 + SYS(out, "ip link add ipip0 type ipip local 10.0.0.1 remote 10.0.0.2"); 106 + SYS(out, "ip link set ipip0 up"); 107 + SYS(out, "ip addr add 192.168.1.1/16 dev ipip0"); 103 108 ipip_ifindex = if_nametoindex("ipip0"); 104 109 105 110 bpf_obj = empty_skb__open_and_load(); ··· 137 142 empty_skb__destroy(bpf_obj); 138 143 if (tok) 139 144 close_netns(tok); 140 - system("ip netns del empty_skb"); 145 + SYS_NOFAIL("ip netns del empty_skb"); 141 146 }
+10 -18
tools/testing/selftests/bpf/prog_tests/fib_lookup.c
··· 8 8 #include "network_helpers.h" 9 9 #include "fib_lookup.skel.h" 10 10 11 - #define SYS(fmt, ...) \ 12 - ({ \ 13 - char cmd[1024]; \ 14 - snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 15 - if (!ASSERT_OK(system(cmd), cmd)) \ 16 - goto fail; \ 17 - }) 18 - 19 11 #define NS_TEST "fib_lookup_ns" 20 12 #define IPV6_IFACE_ADDR "face::face" 21 13 #define IPV6_NUD_FAILED_ADDR "face::1" ··· 51 59 { 52 60 int err; 53 61 54 - SYS("ip link add veth1 type veth peer name veth2"); 55 - SYS("ip link set dev veth1 up"); 62 + SYS(fail, "ip link add veth1 type veth peer name veth2"); 63 + SYS(fail, "ip link set dev veth1 up"); 56 64 57 - SYS("ip addr add %s/64 dev veth1 nodad", IPV6_IFACE_ADDR); 58 - SYS("ip neigh add %s dev veth1 nud failed", IPV6_NUD_FAILED_ADDR); 59 - SYS("ip neigh add %s dev veth1 lladdr %s nud stale", IPV6_NUD_STALE_ADDR, DMAC); 65 + SYS(fail, "ip addr add %s/64 dev veth1 nodad", IPV6_IFACE_ADDR); 66 + SYS(fail, "ip neigh add %s dev veth1 nud failed", IPV6_NUD_FAILED_ADDR); 67 + SYS(fail, "ip neigh add %s dev veth1 lladdr %s nud stale", IPV6_NUD_STALE_ADDR, DMAC); 60 68 61 - SYS("ip addr add %s/24 dev veth1 nodad", IPV4_IFACE_ADDR); 62 - SYS("ip neigh add %s dev veth1 nud failed", IPV4_NUD_FAILED_ADDR); 63 - SYS("ip neigh add %s dev veth1 lladdr %s nud stale", IPV4_NUD_STALE_ADDR, DMAC); 69 + SYS(fail, "ip addr add %s/24 dev veth1 nodad", IPV4_IFACE_ADDR); 70 + SYS(fail, "ip neigh add %s dev veth1 nud failed", IPV4_NUD_FAILED_ADDR); 71 + SYS(fail, "ip neigh add %s dev veth1 lladdr %s nud stale", IPV4_NUD_STALE_ADDR, DMAC); 64 72 65 73 err = write_sysctl("/proc/sys/net/ipv4/conf/veth1/forwarding", "1"); 66 74 if (!ASSERT_OK(err, "write_sysctl(net.ipv4.conf.veth1.forwarding)")) ··· 132 140 return; 133 141 prog_fd = bpf_program__fd(skel->progs.fib_lookup); 134 142 135 - SYS("ip netns add %s", NS_TEST); 143 + SYS(fail, "ip netns add %s", NS_TEST); 136 144 137 145 nstoken = open_netns(NS_TEST); 138 146 if (!ASSERT_OK_PTR(nstoken, "open_netns")) ··· 174 182 fail: 175 183 if (nstoken) 176 184 close_netns(nstoken); 177 - system("ip netns del " NS_TEST " &> /dev/null"); 185 + SYS_NOFAIL("ip netns del " NS_TEST " &> /dev/null"); 178 186 fib_lookup__destroy(skel); 179 187 }
+46 -54
tools/testing/selftests/bpf/prog_tests/tc_redirect.c
··· 137 137 return 0; 138 138 } 139 139 140 - #define SYS(fmt, ...) \ 141 - ({ \ 142 - char cmd[1024]; \ 143 - snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 144 - if (!ASSERT_OK(system(cmd), cmd)) \ 145 - goto fail; \ 146 - }) 147 - 148 140 static int netns_setup_links_and_routes(struct netns_setup_result *result) 149 141 { 150 142 struct nstoken *nstoken = NULL; 151 143 char veth_src_fwd_addr[IFADDR_STR_LEN+1] = {}; 152 144 153 - SYS("ip link add veth_src type veth peer name veth_src_fwd"); 154 - SYS("ip link add veth_dst type veth peer name veth_dst_fwd"); 145 + SYS(fail, "ip link add veth_src type veth peer name veth_src_fwd"); 146 + SYS(fail, "ip link add veth_dst type veth peer name veth_dst_fwd"); 155 147 156 - SYS("ip link set veth_dst_fwd address " MAC_DST_FWD); 157 - SYS("ip link set veth_dst address " MAC_DST); 148 + SYS(fail, "ip link set veth_dst_fwd address " MAC_DST_FWD); 149 + SYS(fail, "ip link set veth_dst address " MAC_DST); 158 150 159 151 if (get_ifaddr("veth_src_fwd", veth_src_fwd_addr)) 160 152 goto fail; ··· 167 175 if (!ASSERT_GT(result->ifindex_veth_dst_fwd, 0, "ifindex_veth_dst_fwd")) 168 176 goto fail; 169 177 170 - SYS("ip link set veth_src netns " NS_SRC); 171 - SYS("ip link set veth_src_fwd netns " NS_FWD); 172 - SYS("ip link set veth_dst_fwd netns " NS_FWD); 173 - SYS("ip link set veth_dst netns " NS_DST); 178 + SYS(fail, "ip link set veth_src netns " NS_SRC); 179 + SYS(fail, "ip link set veth_src_fwd netns " NS_FWD); 180 + SYS(fail, "ip link set veth_dst_fwd netns " NS_FWD); 181 + SYS(fail, "ip link set veth_dst netns " NS_DST); 174 182 175 183 /** setup in 'src' namespace */ 176 184 nstoken = open_netns(NS_SRC); 177 185 if (!ASSERT_OK_PTR(nstoken, "setns src")) 178 186 goto fail; 179 187 180 - SYS("ip addr add " IP4_SRC "/32 dev veth_src"); 181 - SYS("ip addr add " IP6_SRC "/128 dev veth_src nodad"); 182 - SYS("ip link set dev veth_src up"); 188 + SYS(fail, "ip addr add " IP4_SRC "/32 dev veth_src"); 189 + SYS(fail, "ip addr add " IP6_SRC "/128 dev veth_src nodad"); 190 + SYS(fail, "ip link set dev veth_src up"); 183 191 184 - SYS("ip route add " IP4_DST "/32 dev veth_src scope global"); 185 - SYS("ip route add " IP4_NET "/16 dev veth_src scope global"); 186 - SYS("ip route add " IP6_DST "/128 dev veth_src scope global"); 192 + SYS(fail, "ip route add " IP4_DST "/32 dev veth_src scope global"); 193 + SYS(fail, "ip route add " IP4_NET "/16 dev veth_src scope global"); 194 + SYS(fail, "ip route add " IP6_DST "/128 dev veth_src scope global"); 187 195 188 - SYS("ip neigh add " IP4_DST " dev veth_src lladdr %s", 196 + SYS(fail, "ip neigh add " IP4_DST " dev veth_src lladdr %s", 189 197 veth_src_fwd_addr); 190 - SYS("ip neigh add " IP6_DST " dev veth_src lladdr %s", 198 + SYS(fail, "ip neigh add " IP6_DST " dev veth_src lladdr %s", 191 199 veth_src_fwd_addr); 192 200 193 201 close_netns(nstoken); ··· 201 209 * needs v4 one in order to start ARP probing. IP4_NET route is added 202 210 * to the endpoints so that the ARP processing will reply. 203 211 */ 204 - SYS("ip addr add " IP4_SLL "/32 dev veth_src_fwd"); 205 - SYS("ip addr add " IP4_DLL "/32 dev veth_dst_fwd"); 206 - SYS("ip link set dev veth_src_fwd up"); 207 - SYS("ip link set dev veth_dst_fwd up"); 212 + SYS(fail, "ip addr add " IP4_SLL "/32 dev veth_src_fwd"); 213 + SYS(fail, "ip addr add " IP4_DLL "/32 dev veth_dst_fwd"); 214 + SYS(fail, "ip link set dev veth_src_fwd up"); 215 + SYS(fail, "ip link set dev veth_dst_fwd up"); 208 216 209 - SYS("ip route add " IP4_SRC "/32 dev veth_src_fwd scope global"); 210 - SYS("ip route add " IP6_SRC "/128 dev veth_src_fwd scope global"); 211 - SYS("ip route add " IP4_DST "/32 dev veth_dst_fwd scope global"); 212 - SYS("ip route add " IP6_DST "/128 dev veth_dst_fwd scope global"); 217 + SYS(fail, "ip route add " IP4_SRC "/32 dev veth_src_fwd scope global"); 218 + SYS(fail, "ip route add " IP6_SRC "/128 dev veth_src_fwd scope global"); 219 + SYS(fail, "ip route add " IP4_DST "/32 dev veth_dst_fwd scope global"); 220 + SYS(fail, "ip route add " IP6_DST "/128 dev veth_dst_fwd scope global"); 213 221 214 222 close_netns(nstoken); 215 223 ··· 218 226 if (!ASSERT_OK_PTR(nstoken, "setns dst")) 219 227 goto fail; 220 228 221 - SYS("ip addr add " IP4_DST "/32 dev veth_dst"); 222 - SYS("ip addr add " IP6_DST "/128 dev veth_dst nodad"); 223 - SYS("ip link set dev veth_dst up"); 229 + SYS(fail, "ip addr add " IP4_DST "/32 dev veth_dst"); 230 + SYS(fail, "ip addr add " IP6_DST "/128 dev veth_dst nodad"); 231 + SYS(fail, "ip link set dev veth_dst up"); 224 232 225 - SYS("ip route add " IP4_SRC "/32 dev veth_dst scope global"); 226 - SYS("ip route add " IP4_NET "/16 dev veth_dst scope global"); 227 - SYS("ip route add " IP6_SRC "/128 dev veth_dst scope global"); 233 + SYS(fail, "ip route add " IP4_SRC "/32 dev veth_dst scope global"); 234 + SYS(fail, "ip route add " IP4_NET "/16 dev veth_dst scope global"); 235 + SYS(fail, "ip route add " IP6_SRC "/128 dev veth_dst scope global"); 228 236 229 - SYS("ip neigh add " IP4_SRC " dev veth_dst lladdr " MAC_DST_FWD); 230 - SYS("ip neigh add " IP6_SRC " dev veth_dst lladdr " MAC_DST_FWD); 237 + SYS(fail, "ip neigh add " IP4_SRC " dev veth_dst lladdr " MAC_DST_FWD); 238 + SYS(fail, "ip neigh add " IP6_SRC " dev veth_dst lladdr " MAC_DST_FWD); 231 239 232 240 close_netns(nstoken); 233 241 ··· 367 375 368 376 static int test_ping(int family, const char *addr) 369 377 { 370 - SYS("ip netns exec " NS_SRC " %s " PING_ARGS " %s > /dev/null", ping_command(family), addr); 378 + SYS(fail, "ip netns exec " NS_SRC " %s " PING_ARGS " %s > /dev/null", ping_command(family), addr); 371 379 return 0; 372 380 fail: 373 381 return -1; ··· 945 953 if (!ASSERT_OK(err, "ioctl TUNSETIFF")) 946 954 goto fail; 947 955 948 - SYS("ip link set dev %s up", name); 956 + SYS(fail, "ip link set dev %s up", name); 949 957 950 958 return fd; 951 959 fail: ··· 1068 1076 XGRESS_FILTER_ADD(&qdisc_veth_dst_fwd, BPF_TC_EGRESS, skel->progs.tc_chk, 0); 1069 1077 1070 1078 /* Setup route and neigh tables */ 1071 - SYS("ip -netns " NS_SRC " addr add dev tun_src " IP4_TUN_SRC "/24"); 1072 - SYS("ip -netns " NS_FWD " addr add dev tun_fwd " IP4_TUN_FWD "/24"); 1079 + SYS(fail, "ip -netns " NS_SRC " addr add dev tun_src " IP4_TUN_SRC "/24"); 1080 + SYS(fail, "ip -netns " NS_FWD " addr add dev tun_fwd " IP4_TUN_FWD "/24"); 1073 1081 1074 - SYS("ip -netns " NS_SRC " addr add dev tun_src " IP6_TUN_SRC "/64 nodad"); 1075 - SYS("ip -netns " NS_FWD " addr add dev tun_fwd " IP6_TUN_FWD "/64 nodad"); 1082 + SYS(fail, "ip -netns " NS_SRC " addr add dev tun_src " IP6_TUN_SRC "/64 nodad"); 1083 + SYS(fail, "ip -netns " NS_FWD " addr add dev tun_fwd " IP6_TUN_FWD "/64 nodad"); 1076 1084 1077 - SYS("ip -netns " NS_SRC " route del " IP4_DST "/32 dev veth_src scope global"); 1078 - SYS("ip -netns " NS_SRC " route add " IP4_DST "/32 via " IP4_TUN_FWD 1085 + SYS(fail, "ip -netns " NS_SRC " route del " IP4_DST "/32 dev veth_src scope global"); 1086 + SYS(fail, "ip -netns " NS_SRC " route add " IP4_DST "/32 via " IP4_TUN_FWD 1079 1087 " dev tun_src scope global"); 1080 - SYS("ip -netns " NS_DST " route add " IP4_TUN_SRC "/32 dev veth_dst scope global"); 1081 - SYS("ip -netns " NS_SRC " route del " IP6_DST "/128 dev veth_src scope global"); 1082 - SYS("ip -netns " NS_SRC " route add " IP6_DST "/128 via " IP6_TUN_FWD 1088 + SYS(fail, "ip -netns " NS_DST " route add " IP4_TUN_SRC "/32 dev veth_dst scope global"); 1089 + SYS(fail, "ip -netns " NS_SRC " route del " IP6_DST "/128 dev veth_src scope global"); 1090 + SYS(fail, "ip -netns " NS_SRC " route add " IP6_DST "/128 via " IP6_TUN_FWD 1083 1091 " dev tun_src scope global"); 1084 - SYS("ip -netns " NS_DST " route add " IP6_TUN_SRC "/128 dev veth_dst scope global"); 1092 + SYS(fail, "ip -netns " NS_DST " route add " IP6_TUN_SRC "/128 dev veth_dst scope global"); 1085 1093 1086 - SYS("ip -netns " NS_DST " neigh add " IP4_TUN_SRC " dev veth_dst lladdr " MAC_DST_FWD); 1087 - SYS("ip -netns " NS_DST " neigh add " IP6_TUN_SRC " dev veth_dst lladdr " MAC_DST_FWD); 1094 + SYS(fail, "ip -netns " NS_DST " neigh add " IP4_TUN_SRC " dev veth_dst lladdr " MAC_DST_FWD); 1095 + SYS(fail, "ip -netns " NS_DST " neigh add " IP6_TUN_SRC " dev veth_dst lladdr " MAC_DST_FWD); 1088 1096 1089 1097 if (!ASSERT_OK(set_forwarding(false), "disable forwarding")) 1090 1098 goto fail;
+28 -43
tools/testing/selftests/bpf/prog_tests/test_tunnel.c
··· 91 91 92 92 #define PING_ARGS "-i 0.01 -c 3 -w 10 -q" 93 93 94 - #define SYS(fmt, ...) \ 95 - ({ \ 96 - char cmd[1024]; \ 97 - snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 98 - if (!ASSERT_OK(system(cmd), cmd)) \ 99 - goto fail; \ 100 - }) 101 - 102 - #define SYS_NOFAIL(fmt, ...) \ 103 - ({ \ 104 - char cmd[1024]; \ 105 - snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 106 - system(cmd); \ 107 - }) 108 - 109 94 static int config_device(void) 110 95 { 111 - SYS("ip netns add at_ns0"); 112 - SYS("ip link add veth0 address " MAC_VETH1 " type veth peer name veth1"); 113 - SYS("ip link set veth0 netns at_ns0"); 114 - SYS("ip addr add " IP4_ADDR1_VETH1 "/24 dev veth1"); 115 - SYS("ip link set dev veth1 up mtu 1500"); 116 - SYS("ip netns exec at_ns0 ip addr add " IP4_ADDR_VETH0 "/24 dev veth0"); 117 - SYS("ip netns exec at_ns0 ip link set dev veth0 up mtu 1500"); 96 + SYS(fail, "ip netns add at_ns0"); 97 + SYS(fail, "ip link add veth0 address " MAC_VETH1 " type veth peer name veth1"); 98 + SYS(fail, "ip link set veth0 netns at_ns0"); 99 + SYS(fail, "ip addr add " IP4_ADDR1_VETH1 "/24 dev veth1"); 100 + SYS(fail, "ip link set dev veth1 up mtu 1500"); 101 + SYS(fail, "ip netns exec at_ns0 ip addr add " IP4_ADDR_VETH0 "/24 dev veth0"); 102 + SYS(fail, "ip netns exec at_ns0 ip link set dev veth0 up mtu 1500"); 118 103 119 104 return 0; 120 105 fail: ··· 117 132 static int add_vxlan_tunnel(void) 118 133 { 119 134 /* at_ns0 namespace */ 120 - SYS("ip netns exec at_ns0 ip link add dev %s type vxlan external gbp dstport 4789", 135 + SYS(fail, "ip netns exec at_ns0 ip link add dev %s type vxlan external gbp dstport 4789", 121 136 VXLAN_TUNL_DEV0); 122 - SYS("ip netns exec at_ns0 ip link set dev %s address %s up", 137 + SYS(fail, "ip netns exec at_ns0 ip link set dev %s address %s up", 123 138 VXLAN_TUNL_DEV0, MAC_TUNL_DEV0); 124 - SYS("ip netns exec at_ns0 ip addr add dev %s %s/24", 139 + SYS(fail, "ip netns exec at_ns0 ip addr add dev %s %s/24", 125 140 VXLAN_TUNL_DEV0, IP4_ADDR_TUNL_DEV0); 126 - SYS("ip netns exec at_ns0 ip neigh add %s lladdr %s dev %s", 141 + SYS(fail, "ip netns exec at_ns0 ip neigh add %s lladdr %s dev %s", 127 142 IP4_ADDR_TUNL_DEV1, MAC_TUNL_DEV1, VXLAN_TUNL_DEV0); 128 - SYS("ip netns exec at_ns0 ip neigh add %s lladdr %s dev veth0", 143 + SYS(fail, "ip netns exec at_ns0 ip neigh add %s lladdr %s dev veth0", 129 144 IP4_ADDR2_VETH1, MAC_VETH1); 130 145 131 146 /* root namespace */ 132 - SYS("ip link add dev %s type vxlan external gbp dstport 4789", 147 + SYS(fail, "ip link add dev %s type vxlan external gbp dstport 4789", 133 148 VXLAN_TUNL_DEV1); 134 - SYS("ip link set dev %s address %s up", VXLAN_TUNL_DEV1, MAC_TUNL_DEV1); 135 - SYS("ip addr add dev %s %s/24", VXLAN_TUNL_DEV1, IP4_ADDR_TUNL_DEV1); 136 - SYS("ip neigh add %s lladdr %s dev %s", 149 + SYS(fail, "ip link set dev %s address %s up", VXLAN_TUNL_DEV1, MAC_TUNL_DEV1); 150 + SYS(fail, "ip addr add dev %s %s/24", VXLAN_TUNL_DEV1, IP4_ADDR_TUNL_DEV1); 151 + SYS(fail, "ip neigh add %s lladdr %s dev %s", 137 152 IP4_ADDR_TUNL_DEV0, MAC_TUNL_DEV0, VXLAN_TUNL_DEV1); 138 153 139 154 return 0; ··· 150 165 151 166 static int add_ip6vxlan_tunnel(void) 152 167 { 153 - SYS("ip netns exec at_ns0 ip -6 addr add %s/96 dev veth0", 168 + SYS(fail, "ip netns exec at_ns0 ip -6 addr add %s/96 dev veth0", 154 169 IP6_ADDR_VETH0); 155 - SYS("ip netns exec at_ns0 ip link set dev veth0 up"); 156 - SYS("ip -6 addr add %s/96 dev veth1", IP6_ADDR1_VETH1); 157 - SYS("ip -6 addr add %s/96 dev veth1", IP6_ADDR2_VETH1); 158 - SYS("ip link set dev veth1 up"); 170 + SYS(fail, "ip netns exec at_ns0 ip link set dev veth0 up"); 171 + SYS(fail, "ip -6 addr add %s/96 dev veth1", IP6_ADDR1_VETH1); 172 + SYS(fail, "ip -6 addr add %s/96 dev veth1", IP6_ADDR2_VETH1); 173 + SYS(fail, "ip link set dev veth1 up"); 159 174 160 175 /* at_ns0 namespace */ 161 - SYS("ip netns exec at_ns0 ip link add dev %s type vxlan external dstport 4789", 176 + SYS(fail, "ip netns exec at_ns0 ip link add dev %s type vxlan external dstport 4789", 162 177 IP6VXLAN_TUNL_DEV0); 163 - SYS("ip netns exec at_ns0 ip addr add dev %s %s/24", 178 + SYS(fail, "ip netns exec at_ns0 ip addr add dev %s %s/24", 164 179 IP6VXLAN_TUNL_DEV0, IP4_ADDR_TUNL_DEV0); 165 - SYS("ip netns exec at_ns0 ip link set dev %s address %s up", 180 + SYS(fail, "ip netns exec at_ns0 ip link set dev %s address %s up", 166 181 IP6VXLAN_TUNL_DEV0, MAC_TUNL_DEV0); 167 182 168 183 /* root namespace */ 169 - SYS("ip link add dev %s type vxlan external dstport 4789", 184 + SYS(fail, "ip link add dev %s type vxlan external dstport 4789", 170 185 IP6VXLAN_TUNL_DEV1); 171 - SYS("ip addr add dev %s %s/24", IP6VXLAN_TUNL_DEV1, IP4_ADDR_TUNL_DEV1); 172 - SYS("ip link set dev %s address %s up", 186 + SYS(fail, "ip addr add dev %s %s/24", IP6VXLAN_TUNL_DEV1, IP4_ADDR_TUNL_DEV1); 187 + SYS(fail, "ip link set dev %s address %s up", 173 188 IP6VXLAN_TUNL_DEV1, MAC_TUNL_DEV1); 174 189 175 190 return 0; ··· 190 205 191 206 static int test_ping(int family, const char *addr) 192 207 { 193 - SYS("%s %s %s > /dev/null", ping_command(family), PING_ARGS, addr); 208 + SYS(fail, "%s %s %s > /dev/null", ping_command(family), PING_ARGS, addr); 194 209 return 0; 195 210 fail: 196 211 return -1;
+15 -23
tools/testing/selftests/bpf/prog_tests/xdp_bonding.c
··· 141 141 static int bonding_setup(struct skeletons *skeletons, int mode, int xmit_policy, 142 142 int bond_both_attach) 143 143 { 144 - #define SYS(fmt, ...) \ 145 - ({ \ 146 - char cmd[1024]; \ 147 - snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 148 - if (!ASSERT_OK(system(cmd), cmd)) \ 149 - return -1; \ 150 - }) 144 + SYS(fail, "ip netns add ns_dst"); 145 + SYS(fail, "ip link add veth1_1 type veth peer name veth2_1 netns ns_dst"); 146 + SYS(fail, "ip link add veth1_2 type veth peer name veth2_2 netns ns_dst"); 151 147 152 - SYS("ip netns add ns_dst"); 153 - SYS("ip link add veth1_1 type veth peer name veth2_1 netns ns_dst"); 154 - SYS("ip link add veth1_2 type veth peer name veth2_2 netns ns_dst"); 155 - 156 - SYS("ip link add bond1 type bond mode %s xmit_hash_policy %s", 148 + SYS(fail, "ip link add bond1 type bond mode %s xmit_hash_policy %s", 157 149 mode_names[mode], xmit_policy_names[xmit_policy]); 158 - SYS("ip link set bond1 up address " BOND1_MAC_STR " addrgenmode none"); 159 - SYS("ip -netns ns_dst link add bond2 type bond mode %s xmit_hash_policy %s", 150 + SYS(fail, "ip link set bond1 up address " BOND1_MAC_STR " addrgenmode none"); 151 + SYS(fail, "ip -netns ns_dst link add bond2 type bond mode %s xmit_hash_policy %s", 160 152 mode_names[mode], xmit_policy_names[xmit_policy]); 161 - SYS("ip -netns ns_dst link set bond2 up address " BOND2_MAC_STR " addrgenmode none"); 153 + SYS(fail, "ip -netns ns_dst link set bond2 up address " BOND2_MAC_STR " addrgenmode none"); 162 154 163 - SYS("ip link set veth1_1 master bond1"); 155 + SYS(fail, "ip link set veth1_1 master bond1"); 164 156 if (bond_both_attach == BOND_BOTH_AND_ATTACH) { 165 - SYS("ip link set veth1_2 master bond1"); 157 + SYS(fail, "ip link set veth1_2 master bond1"); 166 158 } else { 167 - SYS("ip link set veth1_2 up addrgenmode none"); 159 + SYS(fail, "ip link set veth1_2 up addrgenmode none"); 168 160 169 161 if (xdp_attach(skeletons, skeletons->xdp_dummy->progs.xdp_dummy_prog, "veth1_2")) 170 162 return -1; 171 163 } 172 164 173 - SYS("ip -netns ns_dst link set veth2_1 master bond2"); 165 + SYS(fail, "ip -netns ns_dst link set veth2_1 master bond2"); 174 166 175 167 if (bond_both_attach == BOND_BOTH_AND_ATTACH) 176 - SYS("ip -netns ns_dst link set veth2_2 master bond2"); 168 + SYS(fail, "ip -netns ns_dst link set veth2_2 master bond2"); 177 169 else 178 - SYS("ip -netns ns_dst link set veth2_2 up addrgenmode none"); 170 + SYS(fail, "ip -netns ns_dst link set veth2_2 up addrgenmode none"); 179 171 180 172 /* Load a dummy program on sending side as with veth peer needs to have a 181 173 * XDP program loaded as well. ··· 186 194 } 187 195 188 196 return 0; 189 - 190 - #undef SYS 197 + fail: 198 + return -1; 191 199 } 192 200 193 201 static void bonding_cleanup(struct skeletons *skeletons)
+11 -19
tools/testing/selftests/bpf/prog_tests/xdp_do_redirect.c
··· 12 12 #include <uapi/linux/netdev.h> 13 13 #include "test_xdp_do_redirect.skel.h" 14 14 15 - #define SYS(fmt, ...) \ 16 - ({ \ 17 - char cmd[1024]; \ 18 - snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 19 - if (!ASSERT_OK(system(cmd), cmd)) \ 20 - goto out; \ 21 - }) 22 - 23 15 struct udp_packet { 24 16 struct ethhdr eth; 25 17 struct ipv6hdr iph; ··· 118 126 * iface and NUM_PKTS-2 in the TC hook. We match the packets on the UDP 119 127 * payload. 120 128 */ 121 - SYS("ip netns add testns"); 129 + SYS(out, "ip netns add testns"); 122 130 nstoken = open_netns("testns"); 123 131 if (!ASSERT_OK_PTR(nstoken, "setns")) 124 132 goto out; 125 133 126 - SYS("ip link add veth_src type veth peer name veth_dst"); 127 - SYS("ip link set dev veth_src address 00:11:22:33:44:55"); 128 - SYS("ip link set dev veth_dst address 66:77:88:99:aa:bb"); 129 - SYS("ip link set dev veth_src up"); 130 - SYS("ip link set dev veth_dst up"); 131 - SYS("ip addr add dev veth_src fc00::1/64"); 132 - SYS("ip addr add dev veth_dst fc00::2/64"); 133 - SYS("ip neigh add fc00::2 dev veth_src lladdr 66:77:88:99:aa:bb"); 134 + SYS(out, "ip link add veth_src type veth peer name veth_dst"); 135 + SYS(out, "ip link set dev veth_src address 00:11:22:33:44:55"); 136 + SYS(out, "ip link set dev veth_dst address 66:77:88:99:aa:bb"); 137 + SYS(out, "ip link set dev veth_src up"); 138 + SYS(out, "ip link set dev veth_dst up"); 139 + SYS(out, "ip addr add dev veth_src fc00::1/64"); 140 + SYS(out, "ip addr add dev veth_dst fc00::2/64"); 141 + SYS(out, "ip neigh add fc00::2 dev veth_src lladdr 66:77:88:99:aa:bb"); 134 142 135 143 /* We enable forwarding in the test namespace because that will cause 136 144 * the packets that go through the kernel stack (with XDP_PASS) to be ··· 143 151 * code didn't have this, so we keep the test behaviour to make sure the 144 152 * bug doesn't resurface. 145 153 */ 146 - SYS("sysctl -qw net.ipv6.conf.all.forwarding=1"); 154 + SYS(out, "sysctl -qw net.ipv6.conf.all.forwarding=1"); 147 155 148 156 ifindex_src = if_nametoindex("veth_src"); 149 157 ifindex_dst = if_nametoindex("veth_dst"); ··· 217 225 out: 218 226 if (nstoken) 219 227 close_netns(nstoken); 220 - system("ip netns del testns"); 228 + SYS_NOFAIL("ip netns del testns"); 221 229 test_xdp_do_redirect__destroy(skel); 222 230 }
+9 -14
tools/testing/selftests/bpf/prog_tests/xdp_metadata.c
··· 34 34 #define PREFIX_LEN "8" 35 35 #define FAMILY AF_INET 36 36 37 - #define SYS(cmd) ({ \ 38 - if (!ASSERT_OK(system(cmd), (cmd))) \ 39 - goto out; \ 40 - }) 41 - 42 37 struct xsk { 43 38 void *umem_area; 44 39 struct xsk_umem *umem; ··· 293 298 294 299 /* Setup new networking namespace, with a veth pair. */ 295 300 296 - SYS("ip netns add xdp_metadata"); 301 + SYS(out, "ip netns add xdp_metadata"); 297 302 tok = open_netns("xdp_metadata"); 298 - SYS("ip link add numtxqueues 1 numrxqueues 1 " TX_NAME 303 + SYS(out, "ip link add numtxqueues 1 numrxqueues 1 " TX_NAME 299 304 " type veth peer " RX_NAME " numtxqueues 1 numrxqueues 1"); 300 - SYS("ip link set dev " TX_NAME " address 00:00:00:00:00:01"); 301 - SYS("ip link set dev " RX_NAME " address 00:00:00:00:00:02"); 302 - SYS("ip link set dev " TX_NAME " up"); 303 - SYS("ip link set dev " RX_NAME " up"); 304 - SYS("ip addr add " TX_ADDR "/" PREFIX_LEN " dev " TX_NAME); 305 - SYS("ip addr add " RX_ADDR "/" PREFIX_LEN " dev " RX_NAME); 305 + SYS(out, "ip link set dev " TX_NAME " address 00:00:00:00:00:01"); 306 + SYS(out, "ip link set dev " RX_NAME " address 00:00:00:00:00:02"); 307 + SYS(out, "ip link set dev " TX_NAME " up"); 308 + SYS(out, "ip link set dev " RX_NAME " up"); 309 + SYS(out, "ip addr add " TX_ADDR "/" PREFIX_LEN " dev " TX_NAME); 310 + SYS(out, "ip addr add " RX_ADDR "/" PREFIX_LEN " dev " RX_NAME); 306 311 307 312 rx_ifindex = if_nametoindex(RX_NAME); 308 313 tx_ifindex = if_nametoindex(TX_NAME); ··· 400 405 xdp_metadata__destroy(bpf_obj); 401 406 if (tok) 402 407 close_netns(tok); 403 - system("ip netns del xdp_metadata"); 408 + SYS_NOFAIL("ip netns del xdp_metadata"); 404 409 }
+18 -23
tools/testing/selftests/bpf/prog_tests/xdp_synproxy.c
··· 8 8 9 9 #define CMD_OUT_BUF_SIZE 1023 10 10 11 - #define SYS(cmd) ({ \ 12 - if (!ASSERT_OK(system(cmd), (cmd))) \ 13 - goto out; \ 14 - }) 15 - 16 11 #define SYS_OUT(cmd, ...) ({ \ 17 12 char buf[1024]; \ 18 13 snprintf(buf, sizeof(buf), (cmd), ##__VA_ARGS__); \ ··· 64 69 char buf[CMD_OUT_BUF_SIZE]; 65 70 size_t size; 66 71 67 - SYS("ip netns add synproxy"); 72 + SYS(out, "ip netns add synproxy"); 68 73 69 - SYS("ip link add tmp0 type veth peer name tmp1"); 70 - SYS("ip link set tmp1 netns synproxy"); 71 - SYS("ip link set tmp0 up"); 72 - SYS("ip addr replace 198.18.0.1/24 dev tmp0"); 74 + SYS(out, "ip link add tmp0 type veth peer name tmp1"); 75 + SYS(out, "ip link set tmp1 netns synproxy"); 76 + SYS(out, "ip link set tmp0 up"); 77 + SYS(out, "ip addr replace 198.18.0.1/24 dev tmp0"); 73 78 74 79 /* When checksum offload is enabled, the XDP program sees wrong 75 80 * checksums and drops packets. 76 81 */ 77 - SYS("ethtool -K tmp0 tx off"); 82 + SYS(out, "ethtool -K tmp0 tx off"); 78 83 if (xdp) 79 84 /* Workaround required for veth. */ 80 - SYS("ip link set tmp0 xdp object xdp_dummy.bpf.o section xdp 2> /dev/null"); 85 + SYS(out, "ip link set tmp0 xdp object xdp_dummy.bpf.o section xdp 2> /dev/null"); 81 86 82 87 ns = open_netns("synproxy"); 83 88 if (!ASSERT_OK_PTR(ns, "setns")) 84 89 goto out; 85 90 86 - SYS("ip link set lo up"); 87 - SYS("ip link set tmp1 up"); 88 - SYS("ip addr replace 198.18.0.2/24 dev tmp1"); 89 - SYS("sysctl -w net.ipv4.tcp_syncookies=2"); 90 - SYS("sysctl -w net.ipv4.tcp_timestamps=1"); 91 - SYS("sysctl -w net.netfilter.nf_conntrack_tcp_loose=0"); 92 - SYS("iptables-legacy -t raw -I PREROUTING \ 91 + SYS(out, "ip link set lo up"); 92 + SYS(out, "ip link set tmp1 up"); 93 + SYS(out, "ip addr replace 198.18.0.2/24 dev tmp1"); 94 + SYS(out, "sysctl -w net.ipv4.tcp_syncookies=2"); 95 + SYS(out, "sysctl -w net.ipv4.tcp_timestamps=1"); 96 + SYS(out, "sysctl -w net.netfilter.nf_conntrack_tcp_loose=0"); 97 + SYS(out, "iptables-legacy -t raw -I PREROUTING \ 93 98 -i tmp1 -p tcp -m tcp --syn --dport 8080 -j CT --notrack"); 94 - SYS("iptables-legacy -t filter -A INPUT \ 99 + SYS(out, "iptables-legacy -t filter -A INPUT \ 95 100 -i tmp1 -p tcp -m tcp --dport 8080 -m state --state INVALID,UNTRACKED \ 96 101 -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460"); 97 - SYS("iptables-legacy -t filter -A INPUT \ 102 + SYS(out, "iptables-legacy -t filter -A INPUT \ 98 103 -i tmp1 -m state --state INVALID -j DROP"); 99 104 100 105 ctrl_file = SYS_OUT("./xdp_synproxy --iface tmp1 --ports 8080 \ ··· 165 170 if (ns) 166 171 close_netns(ns); 167 172 168 - system("ip link del tmp0"); 169 - system("ip netns del synproxy"); 173 + SYS_NOFAIL("ip link del tmp0"); 174 + SYS_NOFAIL("ip netns del synproxy"); 170 175 } 171 176 172 177 void test_xdp_synproxy(void)
+26 -41
tools/testing/selftests/bpf/prog_tests/xfrm_info.c
··· 69 69 "proto esp aead 'rfc4106(gcm(aes))' " \ 70 70 "0xe4d8f4b4da1df18a3510b3781496daa82488b713 128 mode tunnel " 71 71 72 - #define SYS(fmt, ...) \ 73 - ({ \ 74 - char cmd[1024]; \ 75 - snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 76 - if (!ASSERT_OK(system(cmd), cmd)) \ 77 - goto fail; \ 78 - }) 79 - 80 - #define SYS_NOFAIL(fmt, ...) \ 81 - ({ \ 82 - char cmd[1024]; \ 83 - snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 84 - system(cmd); \ 85 - }) 86 - 87 72 static int attach_tc_prog(struct bpf_tc_hook *hook, int igr_fd, int egr_fd) 88 73 { 89 74 LIBBPF_OPTS(bpf_tc_opts, opts1, .handle = 1, .priority = 1, ··· 111 126 112 127 static int config_underlay(void) 113 128 { 114 - SYS("ip netns add " NS0); 115 - SYS("ip netns add " NS1); 116 - SYS("ip netns add " NS2); 129 + SYS(fail, "ip netns add " NS0); 130 + SYS(fail, "ip netns add " NS1); 131 + SYS(fail, "ip netns add " NS2); 117 132 118 133 /* NS0 <-> NS1 [veth01 <-> veth10] */ 119 - SYS("ip link add veth01 netns " NS0 " type veth peer name veth10 netns " NS1); 120 - SYS("ip -net " NS0 " addr add " IP4_ADDR_VETH01 "/24 dev veth01"); 121 - SYS("ip -net " NS0 " link set dev veth01 up"); 122 - SYS("ip -net " NS1 " addr add " IP4_ADDR_VETH10 "/24 dev veth10"); 123 - SYS("ip -net " NS1 " link set dev veth10 up"); 134 + SYS(fail, "ip link add veth01 netns " NS0 " type veth peer name veth10 netns " NS1); 135 + SYS(fail, "ip -net " NS0 " addr add " IP4_ADDR_VETH01 "/24 dev veth01"); 136 + SYS(fail, "ip -net " NS0 " link set dev veth01 up"); 137 + SYS(fail, "ip -net " NS1 " addr add " IP4_ADDR_VETH10 "/24 dev veth10"); 138 + SYS(fail, "ip -net " NS1 " link set dev veth10 up"); 124 139 125 140 /* NS0 <-> NS2 [veth02 <-> veth20] */ 126 - SYS("ip link add veth02 netns " NS0 " type veth peer name veth20 netns " NS2); 127 - SYS("ip -net " NS0 " addr add " IP4_ADDR_VETH02 "/24 dev veth02"); 128 - SYS("ip -net " NS0 " link set dev veth02 up"); 129 - SYS("ip -net " NS2 " addr add " IP4_ADDR_VETH20 "/24 dev veth20"); 130 - SYS("ip -net " NS2 " link set dev veth20 up"); 141 + SYS(fail, "ip link add veth02 netns " NS0 " type veth peer name veth20 netns " NS2); 142 + SYS(fail, "ip -net " NS0 " addr add " IP4_ADDR_VETH02 "/24 dev veth02"); 143 + SYS(fail, "ip -net " NS0 " link set dev veth02 up"); 144 + SYS(fail, "ip -net " NS2 " addr add " IP4_ADDR_VETH20 "/24 dev veth20"); 145 + SYS(fail, "ip -net " NS2 " link set dev veth20 up"); 131 146 132 147 return 0; 133 148 fail: ··· 138 153 const char *ipv4_remote, int if_id) 139 154 { 140 155 /* State: local -> remote */ 141 - SYS("ip -net %s xfrm state add src %s dst %s spi 1 " 156 + SYS(fail, "ip -net %s xfrm state add src %s dst %s spi 1 " 142 157 ESP_DUMMY_PARAMS "if_id %d", ns, ipv4_local, ipv4_remote, if_id); 143 158 144 159 /* State: local <- remote */ 145 - SYS("ip -net %s xfrm state add src %s dst %s spi 1 " 160 + SYS(fail, "ip -net %s xfrm state add src %s dst %s spi 1 " 146 161 ESP_DUMMY_PARAMS "if_id %d", ns, ipv4_remote, ipv4_local, if_id); 147 162 148 163 /* Policy: local -> remote */ 149 - SYS("ip -net %s xfrm policy add dir out src 0.0.0.0/0 dst 0.0.0.0/0 " 164 + SYS(fail, "ip -net %s xfrm policy add dir out src 0.0.0.0/0 dst 0.0.0.0/0 " 150 165 "if_id %d tmpl src %s dst %s proto esp mode tunnel if_id %d", ns, 151 166 if_id, ipv4_local, ipv4_remote, if_id); 152 167 153 168 /* Policy: local <- remote */ 154 - SYS("ip -net %s xfrm policy add dir in src 0.0.0.0/0 dst 0.0.0.0/0 " 169 + SYS(fail, "ip -net %s xfrm policy add dir in src 0.0.0.0/0 dst 0.0.0.0/0 " 155 170 "if_id %d tmpl src %s dst %s proto esp mode tunnel if_id %d", ns, 156 171 if_id, ipv4_remote, ipv4_local, if_id); 157 172 ··· 259 274 if (!ASSERT_OK(setup_xfrmi_external_dev(NS0), "xfrmi")) 260 275 goto fail; 261 276 262 - SYS("ip -net " NS0 " addr add 192.168.1.100/24 dev ipsec0"); 263 - SYS("ip -net " NS0 " link set dev ipsec0 up"); 277 + SYS(fail, "ip -net " NS0 " addr add 192.168.1.100/24 dev ipsec0"); 278 + SYS(fail, "ip -net " NS0 " link set dev ipsec0 up"); 264 279 265 - SYS("ip -net " NS1 " link add ipsec0 type xfrm if_id %d", IF_ID_1); 266 - SYS("ip -net " NS1 " addr add 192.168.1.200/24 dev ipsec0"); 267 - SYS("ip -net " NS1 " link set dev ipsec0 up"); 280 + SYS(fail, "ip -net " NS1 " link add ipsec0 type xfrm if_id %d", IF_ID_1); 281 + SYS(fail, "ip -net " NS1 " addr add 192.168.1.200/24 dev ipsec0"); 282 + SYS(fail, "ip -net " NS1 " link set dev ipsec0 up"); 268 283 269 - SYS("ip -net " NS2 " link add ipsec0 type xfrm if_id %d", IF_ID_2); 270 - SYS("ip -net " NS2 " addr add 192.168.1.200/24 dev ipsec0"); 271 - SYS("ip -net " NS2 " link set dev ipsec0 up"); 284 + SYS(fail, "ip -net " NS2 " link add ipsec0 type xfrm if_id %d", IF_ID_2); 285 + SYS(fail, "ip -net " NS2 " addr add 192.168.1.200/24 dev ipsec0"); 286 + SYS(fail, "ip -net " NS2 " link set dev ipsec0 up"); 272 287 273 288 return 0; 274 289 fail: ··· 279 294 { 280 295 skel->bss->req_if_id = if_id; 281 296 282 - SYS("ping -i 0.01 -c 3 -w 10 -q 192.168.1.200 > /dev/null"); 297 + SYS(fail, "ping -i 0.01 -c 3 -w 10 -q 192.168.1.200 > /dev/null"); 283 298 284 299 if (!ASSERT_EQ(skel->bss->resp_if_id, if_id, "if_id")) 285 300 goto fail;
+15
tools/testing/selftests/bpf/test_progs.h
··· 376 376 ___ok; \ 377 377 }) 378 378 379 + #define SYS(goto_label, fmt, ...) \ 380 + ({ \ 381 + char cmd[1024]; \ 382 + snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 383 + if (!ASSERT_OK(system(cmd), cmd)) \ 384 + goto goto_label; \ 385 + }) 386 + 387 + #define SYS_NOFAIL(fmt, ...) \ 388 + ({ \ 389 + char cmd[1024]; \ 390 + snprintf(cmd, sizeof(cmd), fmt, ##__VA_ARGS__); \ 391 + system(cmd); \ 392 + }) 393 + 379 394 static inline __u64 ptr_to_u64(const void *ptr) 380 395 { 381 396 return (__u64) (unsigned long) ptr;