Lines Matching refs:args

163 	va_list args;
171 va_start(args, format);
172 vfprintf(stdout, format, args);
173 va_end(args);
181 va_list args;
189 va_start(args, format);
190 vfprintf(stderr, format, args);
191 va_end(args);
199 va_list args;
207 va_start(args, fmt);
208 vfprintf(stderr, fmt, args);
209 va_end(args);
265 static int tcp_md5sig(int sd, void *addr, socklen_t alen, struct sock_args *args)
267 int keylen = strlen(args->password);
273 memcpy(md5sig.tcpm_key, args->password, keylen);
275 if (args->prefix_len) {
279 md5sig.tcpm_prefixlen = args->prefix_len;
280 addr = &args->md5_prefix;
284 if ((args->ifindex && args->bind_key_ifindex >= 0) || args->bind_key_ifindex >= 1) {
288 md5sig.tcpm_ifindex = args->ifindex;
306 static int tcp_md5_remote(int sd, struct sock_args *args)
317 switch (args->version) {
319 sin.sin_port = htons(args->port);
320 sin.sin_addr = args->md5_prefix.v4.sin_addr;
325 sin6.sin6_port = htons(args->port);
326 sin6.sin6_addr = args->md5_prefix.v6.sin6_addr;
335 if (tcp_md5sig(sd, addr, alen, args))
393 static int check_device(int sd, struct sock_args *args)
406 if (!args->expected_ifindex)
409 if (args->expected_ifindex != ifindex) {
411 args->expected_ifindex, ifindex);
416 args->expected_ifindex, ifindex);
648 static int resolve_devices(struct sock_args *args)
650 if (args->dev) {
651 args->ifindex = get_ifidx(args->dev);
652 if (args->ifindex < 0) {
658 if (args->expected_dev) {
661 if (str_to_uint(args->expected_dev, 0, INT_MAX, &tmp) == 0) {
662 args->expected_ifindex = (int)tmp;
664 args->expected_ifindex = get_ifidx(args->expected_dev);
665 if (args->expected_ifindex < 0) {
715 static int show_sockstat(int sd, struct sock_args *args)
728 if (args->has_expected_laddr) {
729 rc = expected_addr_match(sa, &args->expected_laddr,
741 if (args->has_expected_raddr) {
742 rc |= expected_addr_match(sa, &args->expected_raddr,
761 static int convert_addr(struct sock_args *args, const char *_str,
764 int pfx_len_max = args->version == AF_INET6 ? 128 : 32;
765 int family = args->version;
780 addr = &args->local_addr;
784 addr = &args->remote_addr;
788 addr = &args->grp;
792 addr = &args->expected_laddr;
796 addr = &args->expected_raddr;
801 args->md5_prefix.v4.sin_family = AF_INET;
802 addr = &args->md5_prefix.v4.sin_addr;
804 args->md5_prefix.v6.sin6_family = AF_INET6;
805 addr = &args->md5_prefix.v6.sin6_addr;
814 &args->prefix_len) != 0) {
819 args->prefix_len = 0;
859 args->scope_id = get_ifidx(dev);
860 if (args->scope_id < 0) {
878 static int validate_addresses(struct sock_args *args)
880 if (args->local_addr_str &&
881 convert_addr(args, args->local_addr_str, ADDR_TYPE_LOCAL) < 0)
884 if (args->remote_addr_str &&
885 convert_addr(args, args->remote_addr_str, ADDR_TYPE_REMOTE) < 0)
888 if (args->md5_prefix_str &&
889 convert_addr(args, args->md5_prefix_str,
893 if (args->expected_laddr_str &&
894 convert_addr(args, args->expected_laddr_str,
898 if (args->expected_raddr_str &&
899 convert_addr(args, args->expected_raddr_str,
1023 static int send_msg(int sd, void *addr, socklen_t alen, struct sock_args *args)
1025 if (args->type == SOCK_STREAM) {
1030 } else if (args->datagram_connect) {
1035 } else if (args->ifindex && args->use_cmsg) {
1036 if (send_msg_cmsg(sd, addr, alen, args->ifindex, args->version))
1049 static int socket_read_dgram(int sd, struct sock_args *args)
1090 if (args->expected_ifindex) {
1091 if (args->expected_ifindex != ifindex) {
1093 args->expected_ifindex, ifindex);
1097 args->expected_ifindex, ifindex);
1123 if (args->version == AF_INET6) {
1126 if (args->dev) {
1194 static int socket_read(int sd, struct sock_args *args)
1196 if (args->type == SOCK_STREAM)
1199 return socket_read_dgram(sd, args);
1250 struct sock_args *args)
1257 if (args->type != SOCK_STREAM)
1258 set_recv_attr(sd, args->version);
1265 if (send_msg(sd, addr, alen, args))
1297 rc = socket_read(sd, args);
1309 if (stdin_to_socket(sd, args->type, addr, alen) <= 0)
1326 if (send_msg(sd, addr, alen, args)) {
1336 static int msock_init(struct sock_args *args, int server)
1341 .sin_port = htons(args->port),
1346 if (!server && args->has_local_ip)
1347 if_addr = args->local_addr.in.s_addr;
1365 if (set_dsfield(sd, AF_INET, args->dsfield) != 0)
1369 if (args->server_dontroute && set_dontroute(sd) != 0)
1372 if (args->client_dontroute && set_dontroute(sd) != 0)
1376 if (args->dev && bind_to_device(sd, args->dev) != 0)
1378 else if (args->use_setsockopt &&
1379 set_multicast_if(sd, args->ifindex))
1390 set_membership(sd, args->grp.s_addr,
1391 args->local_addr.in.s_addr, args->ifindex))
1400 static int msock_server(struct sock_args *args)
1402 return msock_init(args, 1);
1405 static int msock_client(struct sock_args *args)
1407 return msock_init(args, 0);
1410 static int bind_socket(int sd, struct sock_args *args)
1421 if (!args->has_local_ip && args->type == SOCK_RAW)
1424 switch (args->version) {
1426 serv_addr.sin_port = htons(args->port);
1427 serv_addr.sin_addr = args->local_addr.in;
1433 serv6_addr.sin6_port = htons(args->port);
1434 serv6_addr.sin6_addr = args->local_addr.in6;
1452 static int config_xfrm_policy(int sd, struct sock_args *args)
1459 if (args->type != SOCK_DGRAM) {
1465 policy.sel.family = args->version;
1466 if (args->version == AF_INET6) {
1487 static int lsock_init(struct sock_args *args)
1492 sd = socket(args->version, args->type, args->protocol);
1504 if (set_dsfield(sd, args->version, args->dsfield) != 0)
1507 if (args->server_dontroute && set_dontroute(sd) != 0)
1510 if (args->dev && bind_to_device(sd, args->dev) != 0)
1512 else if (args->use_setsockopt &&
1513 set_unicast_if(sd, args->ifindex, args->version))
1516 if (args->use_freebind && set_freebind(sd, args->version))
1519 if (bind_socket(sd, args))
1522 if (args->bind_test_only)
1525 if (args->type == SOCK_STREAM && listen(sd, 1) < 0) {
1539 if (args->use_xfrm && config_xfrm_policy(sd, args)) {
1562 static int do_server(struct sock_args *args, int ipc_fd)
1573 if (args->serverns) {
1574 if (switch_ns(args->serverns)) {
1576 args->serverns);
1582 args->dev = args->server_dev;
1583 args->expected_dev = args->expected_server_dev;
1584 if (resolve_devices(args) || validate_addresses(args))
1590 if (args->has_grp)
1591 lsd = msock_server(args);
1593 lsd = lsock_init(args);
1598 if (args->bind_test_only) {
1604 if (args->type != SOCK_STREAM) {
1606 rc = msg_loop(0, lsd, (void *) addr, alen, args);
1611 if (args->password && tcp_md5_remote(lsd, args)) {
1644 rc = show_sockstat(csd, args);
1648 rc = check_device(csd, args);
1653 rc = msg_loop(0, csd, (void *) addr, alen, args);
1703 static int connectsock(void *addr, socklen_t alen, struct sock_args *args)
1708 sd = socket(args->version, args->type, args->protocol);
1723 if (set_dsfield(sd, args->version, args->dsfield) != 0)
1726 if (args->client_dontroute && set_dontroute(sd) != 0)
1729 if (args->dev && bind_to_device(sd, args->dev) != 0)
1731 else if (args->use_setsockopt &&
1732 set_unicast_if(sd, args->ifindex, args->version))
1735 if (args->has_local_ip && bind_socket(sd, args))
1738 if (args->type != SOCK_STREAM && !args->datagram_connect)
1741 if (args->password && tcp_md5sig(sd, addr, alen, args))
1744 if (args->bind_test_only)
1765 static int do_client(struct sock_args *args)
1778 if (!args->has_remote_ip && !args->has_grp) {
1783 if (args->clientns) {
1784 if (switch_ns(args->clientns)) {
1786 args->clientns);
1792 args->local_addr_str = args->client_local_addr_str;
1793 if (resolve_devices(args) || validate_addresses(args))
1796 if ((args->use_setsockopt || args->use_cmsg) && !args->ifindex) {
1800 if (args->use_setsockopt || args->use_cmsg)
1801 args->dev = NULL;
1803 switch (args->version) {
1805 sin.sin_port = htons(args->port);
1806 if (args->has_grp)
1807 sin.sin_addr = args->grp;
1809 sin.sin_addr = args->remote_addr.in;
1814 sin6.sin6_port = htons(args->port);
1815 sin6.sin6_addr = args->remote_addr.in6;
1816 sin6.sin6_scope_id = args->scope_id;
1822 args->password = args->client_pw;
1824 if (args->has_grp)
1825 sd = msock_client(args);
1827 sd = connectsock(addr, alen, args);
1832 if (args->bind_test_only)
1835 if (args->type == SOCK_STREAM) {
1836 rc = show_sockstat(sd, args);
1841 rc = msg_loop(1, sd, addr, alen, args);
1873 static int ipc_child(int fd, struct sock_args *args)
1893 args->has_expected_laddr = 0;
1894 args->has_expected_raddr = 0;
1896 rc = do_server(args, fd);
1905 static int ipc_parent(int cpid, int fd, struct sock_args *args)
1924 client_status = do_client(args);
2012 struct sock_args args = {
2029 * process input args
2044 args.has_local_ip = 1;
2045 args.local_addr_str = optarg;
2048 args.has_remote_ip = 1;
2049 args.remote_addr_str = optarg;
2052 args.has_local_ip = 1;
2053 args.client_local_addr_str = optarg;
2060 args.dsfield = tmp;
2067 args.port = (unsigned short) tmp;
2077 args.type = SOCK_DGRAM;
2080 args.type = SOCK_RAW;
2081 args.port = 0;
2082 if (!args.protocol)
2083 args.protocol = IPPROTO_RAW;
2088 args.protocol = pe->p_proto;
2094 args.protocol = tmp;
2101 args.clientns = optarg;
2104 args.serverns = optarg;
2110 args.password = optarg;
2113 args.bind_key_ifindex = 1;
2116 args.bind_key_ifindex = -1;
2119 args.client_dontroute = 1;
2122 args.server_dontroute = 1;
2125 args.client_pw = optarg;
2128 args.md5_prefix_str = optarg;
2131 args.use_setsockopt = 1;
2134 args.use_freebind = 1;
2137 args.use_cmsg = 1;
2140 args.dev = optarg;
2143 args.server_dev = optarg;
2149 args.has_grp = 1;
2150 if (convert_addr(&args, optarg, ADDR_TYPE_MCAST) < 0)
2152 args.type = SOCK_DGRAM;
2155 args.version = AF_INET6;
2158 args.bind_test_only = 1;
2161 args.has_expected_laddr = 1;
2162 args.expected_laddr_str = optarg;
2165 args.has_expected_raddr = 1;
2166 args.expected_raddr_str = optarg;
2169 args.expected_dev = optarg;
2172 args.expected_server_dev = optarg;
2178 args.use_xfrm = 1;
2181 args.datagram_connect = 1;
2189 if (args.password &&
2190 ((!args.has_remote_ip && !args.md5_prefix_str) ||
2191 args.type != SOCK_STREAM)) {
2196 if (args.md5_prefix_str && !args.password) {
2206 if (args.type == SOCK_STREAM && !args.protocol)
2207 args.protocol = IPPROTO_TCP;
2208 if (args.type == SOCK_DGRAM && !args.protocol)
2209 args.protocol = IPPROTO_UDP;
2211 if ((args.type == SOCK_STREAM || args.type == SOCK_DGRAM) &&
2212 args.port == 0) {
2217 if ((both_mode || !server_mode) && !args.has_grp &&
2218 !args.has_remote_ip && !args.has_local_ip) {
2241 return ipc_parent(cpid, fd[0], &args);
2243 return ipc_child(fd[1], &args);
2248 rc = do_server(&args, -1);
2253 return do_client(&args);