Lines Matching refs:args

163 	va_list args;  in log_msg()  local
171 va_start(args, format); in log_msg()
172 vfprintf(stdout, format, args); in log_msg()
173 va_end(args); in log_msg()
181 va_list args; in log_error() local
189 va_start(args, format); in log_error()
190 vfprintf(stderr, format, args); in log_error()
191 va_end(args); in log_error()
199 va_list args; in log_err_errno() local
207 va_start(args, fmt); in log_err_errno()
208 vfprintf(stderr, fmt, args); in log_err_errno()
209 va_end(args); in log_err_errno()
265 static int tcp_md5sig(int sd, void *addr, socklen_t alen, struct sock_args *args) in tcp_md5sig() argument
267 int keylen = strlen(args->password); in tcp_md5sig()
273 memcpy(md5sig.tcpm_key, args->password, keylen); in tcp_md5sig()
275 if (args->prefix_len) { in tcp_md5sig()
279 md5sig.tcpm_prefixlen = args->prefix_len; in tcp_md5sig()
280 addr = &args->md5_prefix; in tcp_md5sig()
284 if ((args->ifindex && args->bind_key_ifindex >= 0) || args->bind_key_ifindex >= 1) { in tcp_md5sig()
288 md5sig.tcpm_ifindex = args->ifindex; in tcp_md5sig()
306 static int tcp_md5_remote(int sd, struct sock_args *args) in tcp_md5_remote() argument
317 switch (args->version) { in tcp_md5_remote()
319 sin.sin_port = htons(args->port); in tcp_md5_remote()
320 sin.sin_addr = args->md5_prefix.v4.sin_addr; in tcp_md5_remote()
325 sin6.sin6_port = htons(args->port); in tcp_md5_remote()
326 sin6.sin6_addr = args->md5_prefix.v6.sin6_addr; in tcp_md5_remote()
335 if (tcp_md5sig(sd, addr, alen, args)) in tcp_md5_remote()
393 static int check_device(int sd, struct sock_args *args) in check_device() argument
406 if (!args->expected_ifindex) in check_device()
409 if (args->expected_ifindex != ifindex) { in check_device()
411 args->expected_ifindex, ifindex); in check_device()
416 args->expected_ifindex, ifindex); in check_device()
648 static int resolve_devices(struct sock_args *args) in resolve_devices() argument
650 if (args->dev) { in resolve_devices()
651 args->ifindex = get_ifidx(args->dev); in resolve_devices()
652 if (args->ifindex < 0) { in resolve_devices()
658 if (args->expected_dev) { in resolve_devices()
661 if (str_to_uint(args->expected_dev, 0, INT_MAX, &tmp) == 0) { in resolve_devices()
662 args->expected_ifindex = (int)tmp; in resolve_devices()
664 args->expected_ifindex = get_ifidx(args->expected_dev); in resolve_devices()
665 if (args->expected_ifindex < 0) { in resolve_devices()
715 static int show_sockstat(int sd, struct sock_args *args) in show_sockstat() argument
728 if (args->has_expected_laddr) { in show_sockstat()
729 rc = expected_addr_match(sa, &args->expected_laddr, in show_sockstat()
741 if (args->has_expected_raddr) { in show_sockstat()
742 rc |= expected_addr_match(sa, &args->expected_raddr, in show_sockstat()
761 static int convert_addr(struct sock_args *args, const char *_str, in convert_addr() argument
764 int pfx_len_max = args->version == AF_INET6 ? 128 : 32; in convert_addr()
765 int family = args->version; in convert_addr()
780 addr = &args->local_addr; in convert_addr()
784 addr = &args->remote_addr; in convert_addr()
788 addr = &args->grp; in convert_addr()
792 addr = &args->expected_laddr; in convert_addr()
796 addr = &args->expected_raddr; in convert_addr()
801 args->md5_prefix.v4.sin_family = AF_INET; in convert_addr()
802 addr = &args->md5_prefix.v4.sin_addr; in convert_addr()
804 args->md5_prefix.v6.sin6_family = AF_INET6; in convert_addr()
805 addr = &args->md5_prefix.v6.sin6_addr; in convert_addr()
814 &args->prefix_len) != 0) { in convert_addr()
819 args->prefix_len = 0; in convert_addr()
859 args->scope_id = get_ifidx(dev); in convert_addr()
860 if (args->scope_id < 0) { in convert_addr()
878 static int validate_addresses(struct sock_args *args) in validate_addresses() argument
880 if (args->local_addr_str && in validate_addresses()
881 convert_addr(args, args->local_addr_str, ADDR_TYPE_LOCAL) < 0) in validate_addresses()
884 if (args->remote_addr_str && in validate_addresses()
885 convert_addr(args, args->remote_addr_str, ADDR_TYPE_REMOTE) < 0) in validate_addresses()
888 if (args->md5_prefix_str && in validate_addresses()
889 convert_addr(args, args->md5_prefix_str, in validate_addresses()
893 if (args->expected_laddr_str && in validate_addresses()
894 convert_addr(args, args->expected_laddr_str, in validate_addresses()
898 if (args->expected_raddr_str && in validate_addresses()
899 convert_addr(args, args->expected_raddr_str, in validate_addresses()
1023 static int send_msg(int sd, void *addr, socklen_t alen, struct sock_args *args) in send_msg() argument
1025 if (args->type == SOCK_STREAM) { in send_msg()
1030 } else if (args->datagram_connect) { in send_msg()
1035 } else if (args->ifindex && args->use_cmsg) { in send_msg()
1036 if (send_msg_cmsg(sd, addr, alen, args->ifindex, args->version)) in send_msg()
1049 static int socket_read_dgram(int sd, struct sock_args *args) in socket_read_dgram() argument
1090 if (args->expected_ifindex) { in socket_read_dgram()
1091 if (args->expected_ifindex != ifindex) { in socket_read_dgram()
1093 args->expected_ifindex, ifindex); in socket_read_dgram()
1097 args->expected_ifindex, ifindex); in socket_read_dgram()
1123 if (args->version == AF_INET6) { in socket_read_dgram()
1126 if (args->dev) { in socket_read_dgram()
1194 static int socket_read(int sd, struct sock_args *args) in socket_read() argument
1196 if (args->type == SOCK_STREAM) in socket_read()
1199 return socket_read_dgram(sd, args); in socket_read()
1250 struct sock_args *args) in msg_loop() argument
1257 if (args->type != SOCK_STREAM) in msg_loop()
1258 set_recv_attr(sd, args->version); in msg_loop()
1265 if (send_msg(sd, addr, alen, args)) in msg_loop()
1297 rc = socket_read(sd, args); in msg_loop()
1309 if (stdin_to_socket(sd, args->type, addr, alen) <= 0) in msg_loop()
1326 if (send_msg(sd, addr, alen, args)) { in msg_loop()
1336 static int msock_init(struct sock_args *args, int server) in msock_init() argument
1341 .sin_port = htons(args->port), in msock_init()
1346 if (!server && args->has_local_ip) in msock_init()
1347 if_addr = args->local_addr.in.s_addr; in msock_init()
1365 if (set_dsfield(sd, AF_INET, args->dsfield) != 0) in msock_init()
1369 if (args->server_dontroute && set_dontroute(sd) != 0) in msock_init()
1372 if (args->client_dontroute && set_dontroute(sd) != 0) in msock_init()
1376 if (args->dev && bind_to_device(sd, args->dev) != 0) in msock_init()
1378 else if (args->use_setsockopt && in msock_init()
1379 set_multicast_if(sd, args->ifindex)) in msock_init()
1390 set_membership(sd, args->grp.s_addr, in msock_init()
1391 args->local_addr.in.s_addr, args->ifindex)) in msock_init()
1400 static int msock_server(struct sock_args *args) in msock_server() argument
1402 return msock_init(args, 1); in msock_server()
1405 static int msock_client(struct sock_args *args) in msock_client() argument
1407 return msock_init(args, 0); in msock_client()
1410 static int bind_socket(int sd, struct sock_args *args) in bind_socket() argument
1421 if (!args->has_local_ip && args->type == SOCK_RAW) in bind_socket()
1424 switch (args->version) { in bind_socket()
1426 serv_addr.sin_port = htons(args->port); in bind_socket()
1427 serv_addr.sin_addr = args->local_addr.in; in bind_socket()
1433 serv6_addr.sin6_port = htons(args->port); in bind_socket()
1434 serv6_addr.sin6_addr = args->local_addr.in6; in bind_socket()
1452 static int config_xfrm_policy(int sd, struct sock_args *args) in config_xfrm_policy() argument
1459 if (args->type != SOCK_DGRAM) { in config_xfrm_policy()
1465 policy.sel.family = args->version; in config_xfrm_policy()
1466 if (args->version == AF_INET6) { in config_xfrm_policy()
1487 static int lsock_init(struct sock_args *args) in lsock_init() argument
1492 sd = socket(args->version, args->type, args->protocol); in lsock_init()
1504 if (set_dsfield(sd, args->version, args->dsfield) != 0) in lsock_init()
1507 if (args->server_dontroute && set_dontroute(sd) != 0) in lsock_init()
1510 if (args->dev && bind_to_device(sd, args->dev) != 0) in lsock_init()
1512 else if (args->use_setsockopt && in lsock_init()
1513 set_unicast_if(sd, args->ifindex, args->version)) in lsock_init()
1516 if (args->use_freebind && set_freebind(sd, args->version)) in lsock_init()
1519 if (bind_socket(sd, args)) in lsock_init()
1522 if (args->bind_test_only) in lsock_init()
1525 if (args->type == SOCK_STREAM && listen(sd, 1) < 0) { in lsock_init()
1539 if (args->use_xfrm && config_xfrm_policy(sd, args)) { in lsock_init()
1562 static int do_server(struct sock_args *args, int ipc_fd) in do_server() argument
1573 if (args->serverns) { in do_server()
1574 if (switch_ns(args->serverns)) { in do_server()
1576 args->serverns); in do_server()
1582 args->dev = args->server_dev; in do_server()
1583 args->expected_dev = args->expected_server_dev; in do_server()
1584 if (resolve_devices(args) || validate_addresses(args)) in do_server()
1590 if (args->has_grp) in do_server()
1591 lsd = msock_server(args); in do_server()
1593 lsd = lsock_init(args); in do_server()
1598 if (args->bind_test_only) { in do_server()
1604 if (args->type != SOCK_STREAM) { in do_server()
1606 rc = msg_loop(0, lsd, (void *) addr, alen, args); in do_server()
1611 if (args->password && tcp_md5_remote(lsd, args)) { in do_server()
1644 rc = show_sockstat(csd, args); in do_server()
1648 rc = check_device(csd, args); in do_server()
1653 rc = msg_loop(0, csd, (void *) addr, alen, args); in do_server()
1703 static int connectsock(void *addr, socklen_t alen, struct sock_args *args) in connectsock() argument
1708 sd = socket(args->version, args->type, args->protocol); in connectsock()
1723 if (set_dsfield(sd, args->version, args->dsfield) != 0) in connectsock()
1726 if (args->client_dontroute && set_dontroute(sd) != 0) in connectsock()
1729 if (args->dev && bind_to_device(sd, args->dev) != 0) in connectsock()
1731 else if (args->use_setsockopt && in connectsock()
1732 set_unicast_if(sd, args->ifindex, args->version)) in connectsock()
1735 if (args->has_local_ip && bind_socket(sd, args)) in connectsock()
1738 if (args->type != SOCK_STREAM && !args->datagram_connect) in connectsock()
1741 if (args->password && tcp_md5sig(sd, addr, alen, args)) in connectsock()
1744 if (args->bind_test_only) in connectsock()
1765 static int do_client(struct sock_args *args) in do_client() argument
1778 if (!args->has_remote_ip && !args->has_grp) { in do_client()
1783 if (args->clientns) { in do_client()
1784 if (switch_ns(args->clientns)) { in do_client()
1786 args->clientns); in do_client()
1792 args->local_addr_str = args->client_local_addr_str; in do_client()
1793 if (resolve_devices(args) || validate_addresses(args)) in do_client()
1796 if ((args->use_setsockopt || args->use_cmsg) && !args->ifindex) { in do_client()
1800 if (args->use_setsockopt || args->use_cmsg) in do_client()
1801 args->dev = NULL; in do_client()
1803 switch (args->version) { in do_client()
1805 sin.sin_port = htons(args->port); in do_client()
1806 if (args->has_grp) in do_client()
1807 sin.sin_addr = args->grp; in do_client()
1809 sin.sin_addr = args->remote_addr.in; in do_client()
1814 sin6.sin6_port = htons(args->port); in do_client()
1815 sin6.sin6_addr = args->remote_addr.in6; in do_client()
1816 sin6.sin6_scope_id = args->scope_id; in do_client()
1822 args->password = args->client_pw; in do_client()
1824 if (args->has_grp) in do_client()
1825 sd = msock_client(args); in do_client()
1827 sd = connectsock(addr, alen, args); in do_client()
1832 if (args->bind_test_only) in do_client()
1835 if (args->type == SOCK_STREAM) { in do_client()
1836 rc = show_sockstat(sd, args); in do_client()
1841 rc = msg_loop(1, sd, addr, alen, args); in do_client()
1872 static int ipc_child(int fd, struct sock_args *args) in ipc_child() argument
1892 args->has_expected_laddr = 0; in ipc_child()
1893 args->has_expected_raddr = 0; in ipc_child()
1895 rc = do_server(args, fd); in ipc_child()
1904 static int ipc_parent(int cpid, int fd, struct sock_args *args) in ipc_parent() argument
1923 client_status = do_client(args); in ipc_parent()
2011 struct sock_args args = { in main() local
2043 args.has_local_ip = 1; in main()
2044 args.local_addr_str = optarg; in main()
2047 args.has_remote_ip = 1; in main()
2048 args.remote_addr_str = optarg; in main()
2051 args.has_local_ip = 1; in main()
2052 args.client_local_addr_str = optarg; in main()
2059 args.dsfield = tmp; in main()
2066 args.port = (unsigned short) tmp; in main()
2076 args.type = SOCK_DGRAM; in main()
2079 args.type = SOCK_RAW; in main()
2080 args.port = 0; in main()
2081 if (!args.protocol) in main()
2082 args.protocol = IPPROTO_RAW; in main()
2087 args.protocol = pe->p_proto; in main()
2093 args.protocol = tmp; in main()
2100 args.clientns = optarg; in main()
2103 args.serverns = optarg; in main()
2109 args.password = optarg; in main()
2112 args.bind_key_ifindex = 1; in main()
2115 args.bind_key_ifindex = -1; in main()
2118 args.client_dontroute = 1; in main()
2121 args.server_dontroute = 1; in main()
2124 args.client_pw = optarg; in main()
2127 args.md5_prefix_str = optarg; in main()
2130 args.use_setsockopt = 1; in main()
2133 args.use_freebind = 1; in main()
2136 args.use_cmsg = 1; in main()
2139 args.dev = optarg; in main()
2142 args.server_dev = optarg; in main()
2148 args.has_grp = 1; in main()
2149 if (convert_addr(&args, optarg, ADDR_TYPE_MCAST) < 0) in main()
2151 args.type = SOCK_DGRAM; in main()
2154 args.version = AF_INET6; in main()
2157 args.bind_test_only = 1; in main()
2160 args.has_expected_laddr = 1; in main()
2161 args.expected_laddr_str = optarg; in main()
2164 args.has_expected_raddr = 1; in main()
2165 args.expected_raddr_str = optarg; in main()
2168 args.expected_dev = optarg; in main()
2171 args.expected_server_dev = optarg; in main()
2177 args.use_xfrm = 1; in main()
2180 args.datagram_connect = 1; in main()
2188 if (args.password && in main()
2189 ((!args.has_remote_ip && !args.md5_prefix_str) || in main()
2190 args.type != SOCK_STREAM)) { in main()
2195 if (args.md5_prefix_str && !args.password) { in main()
2205 if (args.type == SOCK_STREAM && !args.protocol) in main()
2206 args.protocol = IPPROTO_TCP; in main()
2207 if (args.type == SOCK_DGRAM && !args.protocol) in main()
2208 args.protocol = IPPROTO_UDP; in main()
2210 if ((args.type == SOCK_STREAM || args.type == SOCK_DGRAM) && in main()
2211 args.port == 0) { in main()
2216 if ((both_mode || !server_mode) && !args.has_grp && in main()
2217 !args.has_remote_ip && !args.has_local_ip) { in main()
2240 return ipc_parent(cpid, fd[0], &args); in main()
2242 return ipc_child(fd[1], &args); in main()
2247 rc = do_server(&args, -1); in main()
2252 return do_client(&args); in main()