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

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'use network helpers, part 10'

Geliang Tang says:

====================
This set is part 10 of series "use network helpers" all BPF selftests
wide.

Patches 1-3 drop local functions make_client(), make_socket() and
inetaddr_len() in sk_lookup.c. Patch 4 drops a useless function
__start_server() in network_helpers.c.
====================

Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>

authored by

Martin KaFai Lau and committed by
Andrii Nakryiko
1edf364a aa8ebb27

+40 -96
+10 -16
tools/testing/selftests/bpf/network_helpers.c
··· 80 80 81 81 #define save_errno_close(fd) ({ int __save = errno; close(fd); errno = __save; }) 82 82 83 - static int __start_server(int type, const struct sockaddr *addr, socklen_t addrlen, 84 - const struct network_helper_opts *opts) 83 + int start_server_addr(int type, const struct sockaddr_storage *addr, socklen_t addrlen, 84 + const struct network_helper_opts *opts) 85 85 { 86 86 int fd; 87 87 88 - fd = socket(addr->sa_family, type, opts->proto); 88 + if (!opts) 89 + opts = &default_opts; 90 + 91 + fd = socket(addr->ss_family, type, opts->proto); 89 92 if (fd < 0) { 90 93 log_err("Failed to create server socket"); 91 94 return -1; ··· 103 100 goto error_close; 104 101 } 105 102 106 - if (bind(fd, addr, addrlen) < 0) { 103 + if (bind(fd, (struct sockaddr *)addr, addrlen) < 0) { 107 104 log_err("Failed to bind socket"); 108 105 goto error_close; 109 106 } ··· 134 131 if (make_sockaddr(family, addr_str, port, &addr, &addrlen)) 135 132 return -1; 136 133 137 - return __start_server(type, (struct sockaddr *)&addr, addrlen, opts); 134 + return start_server_addr(type, &addr, addrlen, opts); 138 135 } 139 136 140 137 int start_server(int family, int type, const char *addr_str, __u16 port, ··· 176 173 if (!fds) 177 174 return NULL; 178 175 179 - fds[0] = __start_server(type, (struct sockaddr *)&addr, addrlen, &opts); 176 + fds[0] = start_server_addr(type, &addr, addrlen, &opts); 180 177 if (fds[0] == -1) 181 178 goto close_fds; 182 179 nr_fds = 1; ··· 185 182 goto close_fds; 186 183 187 184 for (; nr_fds < nr_listens; nr_fds++) { 188 - fds[nr_fds] = __start_server(type, (struct sockaddr *)&addr, addrlen, &opts); 185 + fds[nr_fds] = start_server_addr(type, &addr, addrlen, &opts); 189 186 if (fds[nr_fds] == -1) 190 187 goto close_fds; 191 188 } ··· 195 192 close_fds: 196 193 free_fds(fds, nr_fds); 197 194 return NULL; 198 - } 199 - 200 - int start_server_addr(int type, const struct sockaddr_storage *addr, socklen_t len, 201 - const struct network_helper_opts *opts) 202 - { 203 - if (!opts) 204 - opts = &default_opts; 205 - 206 - return __start_server(type, (struct sockaddr *)addr, len, opts); 207 195 } 208 196 209 197 void free_fds(int *fds, unsigned int nr_close_fds)
+30 -80
tools/testing/selftests/bpf/prog_tests/sk_lookup.c
··· 47 47 #define INT_IP6 "fd00::2" 48 48 #define INT_PORT 8008 49 49 50 - #define IO_TIMEOUT_SEC 3 51 - 52 50 enum server { 53 51 SERVER_A = 0, 54 52 SERVER_B = 1, ··· 104 106 return -1; 105 107 106 108 return 0; 107 - } 108 - 109 - static socklen_t inetaddr_len(const struct sockaddr_storage *addr) 110 - { 111 - return (addr->ss_family == AF_INET ? sizeof(struct sockaddr_in) : 112 - addr->ss_family == AF_INET6 ? sizeof(struct sockaddr_in6) : 0); 113 - } 114 - 115 - static int make_socket(int sotype, const char *ip, int port, 116 - struct sockaddr_storage *addr) 117 - { 118 - struct timeval timeo = { .tv_sec = IO_TIMEOUT_SEC }; 119 - int err, family, fd; 120 - 121 - family = is_ipv6(ip) ? AF_INET6 : AF_INET; 122 - err = make_sockaddr(family, ip, port, addr, NULL); 123 - if (CHECK(err, "make_address", "failed\n")) 124 - return -1; 125 - 126 - fd = socket(addr->ss_family, sotype, 0); 127 - if (CHECK(fd < 0, "socket", "failed\n")) { 128 - log_err("failed to make socket"); 129 - return -1; 130 - } 131 - 132 - err = setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeo, sizeof(timeo)); 133 - if (CHECK(err, "setsockopt(SO_SNDTIMEO)", "failed\n")) { 134 - log_err("failed to set SNDTIMEO"); 135 - close(fd); 136 - return -1; 137 - } 138 - 139 - err = setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &timeo, sizeof(timeo)); 140 - if (CHECK(err, "setsockopt(SO_RCVTIMEO)", "failed\n")) { 141 - log_err("failed to set RCVTIMEO"); 142 - close(fd); 143 - return -1; 144 - } 145 - 146 - return fd; 147 109 } 148 110 149 111 static int setsockopts(int fd, void *opts) ··· 179 221 log_err("failed to attach reuseport prog"); 180 222 goto fail; 181 223 } 182 - } 183 - 184 - return fd; 185 - fail: 186 - close(fd); 187 - return -1; 188 - } 189 - 190 - static int make_client(int sotype, const char *ip, int port) 191 - { 192 - struct sockaddr_storage addr = {0}; 193 - int err, fd; 194 - 195 - fd = make_socket(sotype, ip, port, &addr); 196 - if (fd < 0) 197 - return -1; 198 - 199 - err = connect(fd, (void *)&addr, inetaddr_len(&addr)); 200 - if (CHECK(err, "make_client", "connect")) { 201 - log_err("failed to connect client socket"); 202 - goto fail; 203 224 } 204 225 205 226 return fd; ··· 583 646 goto close; 584 647 } 585 648 586 - client_fd = make_client(t->sotype, t->connect_to.ip, t->connect_to.port); 587 - if (client_fd < 0) 649 + client_fd = connect_to_addr_str(is_ipv6(t->connect_to.ip) ? AF_INET6 : AF_INET, 650 + t->sotype, t->connect_to.ip, t->connect_to.port, NULL); 651 + if (!ASSERT_OK_FD(client_fd, "connect_to_addr_str")) 588 652 goto close; 589 653 590 654 if (t->sotype == SOCK_STREAM) ··· 800 862 801 863 static void drop_on_lookup(const struct test *t) 802 864 { 865 + int family = is_ipv6(t->connect_to.ip) ? AF_INET6 : AF_INET; 803 866 struct sockaddr_storage dst = {}; 804 867 int client_fd, server_fd, err; 805 868 struct bpf_link *lookup_link; 869 + socklen_t len; 806 870 ssize_t n; 807 871 808 872 lookup_link = attach_lookup_prog(t->lookup_prog); ··· 816 876 if (server_fd < 0) 817 877 goto detach; 818 878 819 - client_fd = make_socket(t->sotype, t->connect_to.ip, 820 - t->connect_to.port, &dst); 821 - if (client_fd < 0) 879 + client_fd = client_socket(family, t->sotype, NULL); 880 + if (!ASSERT_OK_FD(client_fd, "client_socket")) 822 881 goto close_srv; 823 882 824 - err = connect(client_fd, (void *)&dst, inetaddr_len(&dst)); 883 + err = make_sockaddr(family, t->connect_to.ip, t->connect_to.port, &dst, &len); 884 + if (!ASSERT_OK(err, "make_sockaddr")) 885 + goto close_all; 886 + err = connect(client_fd, (void *)&dst, len); 825 887 if (t->sotype == SOCK_DGRAM) { 826 888 err = send_byte(client_fd); 827 889 if (err) ··· 918 976 919 977 static void drop_on_reuseport(const struct test *t) 920 978 { 979 + int family = is_ipv6(t->connect_to.ip) ? AF_INET6 : AF_INET; 921 980 struct sockaddr_storage dst = { 0 }; 922 981 int client, server1, server2, err; 923 982 struct bpf_link *lookup_link; 983 + socklen_t len; 924 984 ssize_t n; 925 985 926 986 lookup_link = attach_lookup_prog(t->lookup_prog); ··· 944 1000 if (server2 < 0) 945 1001 goto close_srv1; 946 1002 947 - client = make_socket(t->sotype, t->connect_to.ip, 948 - t->connect_to.port, &dst); 949 - if (client < 0) 1003 + client = client_socket(family, t->sotype, NULL); 1004 + if (!ASSERT_OK_FD(client, "client_socket")) 950 1005 goto close_srv2; 951 1006 952 - err = connect(client, (void *)&dst, inetaddr_len(&dst)); 1007 + err = make_sockaddr(family, t->connect_to.ip, t->connect_to.port, &dst, &len); 1008 + if (!ASSERT_OK(err, "make_sockaddr")) 1009 + goto close_all; 1010 + err = connect(client, (void *)&dst, len); 953 1011 if (t->sotype == SOCK_DGRAM) { 954 1012 err = send_byte(client); 955 1013 if (err) ··· 1098 1152 if (server_fd < 0) 1099 1153 return; 1100 1154 1101 - connected_fd = make_client(sotype, EXT_IP4, EXT_PORT); 1102 - if (connected_fd < 0) 1155 + connected_fd = connect_to_addr_str(AF_INET, sotype, EXT_IP4, EXT_PORT, NULL); 1156 + if (!ASSERT_OK_FD(connected_fd, "connect_to_addr_str")) 1103 1157 goto out_close_server; 1104 1158 1105 1159 /* Put a connected socket in redirect map */ ··· 1112 1166 goto out_close_connected; 1113 1167 1114 1168 /* Try to redirect TCP SYN / UDP packet to a connected socket */ 1115 - client_fd = make_client(sotype, EXT_IP4, EXT_PORT); 1116 - if (client_fd < 0) 1169 + client_fd = connect_to_addr_str(AF_INET, sotype, EXT_IP4, EXT_PORT, NULL); 1170 + if (!ASSERT_OK_FD(client_fd, "connect_to_addr_str")) 1117 1171 goto out_unlink_prog; 1118 1172 if (sotype == SOCK_DGRAM) { 1119 1173 send_byte(client_fd); ··· 1165 1219 int map_fd, server_fd, client_fd; 1166 1220 struct bpf_link *link1, *link2; 1167 1221 int prog_idx, done, err; 1222 + socklen_t len; 1168 1223 1169 1224 map_fd = bpf_map__fd(t->run_map); 1170 1225 ··· 1195 1248 if (err) 1196 1249 goto out_close_server; 1197 1250 1198 - client_fd = make_socket(SOCK_STREAM, EXT_IP4, EXT_PORT, &dst); 1199 - if (client_fd < 0) 1251 + client_fd = client_socket(AF_INET, SOCK_STREAM, NULL); 1252 + if (!ASSERT_OK_FD(client_fd, "client_socket")) 1200 1253 goto out_close_server; 1201 1254 1202 - err = connect(client_fd, (void *)&dst, inetaddr_len(&dst)); 1255 + err = make_sockaddr(AF_INET, EXT_IP4, EXT_PORT, &dst, &len); 1256 + if (!ASSERT_OK(err, "make_sockaddr")) 1257 + goto out_close_client; 1258 + err = connect(client_fd, (void *)&dst, len); 1203 1259 if (CHECK(err && !t->expect_errno, "connect", 1204 1260 "unexpected error %d\n", errno)) 1205 1261 goto out_close_client;