Lines Matching full:args

156 	va_list args;  in log_msg()  local
164 va_start(args, format); in log_msg()
165 vfprintf(stdout, format, args); in log_msg()
166 va_end(args); in log_msg()
174 va_list args; in log_error() local
182 va_start(args, format); in log_error()
183 vfprintf(stderr, format, args); in log_error()
184 va_end(args); in log_error()
192 va_list args; in log_err_errno() local
200 va_start(args, fmt); in log_err_errno()
201 vfprintf(stderr, fmt, args); in log_err_errno()
202 va_end(args); in log_err_errno()
258 static int tcp_md5sig(int sd, void *addr, socklen_t alen, struct sock_args *args) in tcp_md5sig() argument
260 int keylen = strlen(args->password); in tcp_md5sig()
266 memcpy(md5sig.tcpm_key, args->password, keylen); in tcp_md5sig()
268 if (args->prefix_len) { in tcp_md5sig()
272 md5sig.tcpm_prefixlen = args->prefix_len; in tcp_md5sig()
273 addr = &args->md5_prefix; in tcp_md5sig()
277 if ((args->ifindex && args->bind_key_ifindex >= 0) || args->bind_key_ifindex >= 1) { in tcp_md5sig()
281 md5sig.tcpm_ifindex = args->ifindex; in tcp_md5sig()
299 static int tcp_md5_remote(int sd, struct sock_args *args) in tcp_md5_remote() argument
310 switch (args->version) { in tcp_md5_remote()
312 sin.sin_port = htons(args->port); in tcp_md5_remote()
313 sin.sin_addr = args->md5_prefix.v4.sin_addr; in tcp_md5_remote()
318 sin6.sin6_port = htons(args->port); in tcp_md5_remote()
319 sin6.sin6_addr = args->md5_prefix.v6.sin6_addr; in tcp_md5_remote()
328 if (tcp_md5sig(sd, addr, alen, args)) in tcp_md5_remote()
386 static int check_device(int sd, struct sock_args *args) in check_device() argument
399 if (!args->expected_ifindex) in check_device()
402 if (args->expected_ifindex != ifindex) { in check_device()
404 args->expected_ifindex, ifindex); in check_device()
409 args->expected_ifindex, ifindex); in check_device()
576 static int resolve_devices(struct sock_args *args) in resolve_devices() argument
578 if (args->dev) { in resolve_devices()
579 args->ifindex = get_ifidx(args->dev); in resolve_devices()
580 if (args->ifindex < 0) { in resolve_devices()
586 if (args->expected_dev) { in resolve_devices()
589 if (str_to_uint(args->expected_dev, 0, INT_MAX, &tmp) == 0) { in resolve_devices()
590 args->expected_ifindex = (int)tmp; in resolve_devices()
592 args->expected_ifindex = get_ifidx(args->expected_dev); in resolve_devices()
593 if (args->expected_ifindex < 0) { in resolve_devices()
643 static int show_sockstat(int sd, struct sock_args *args) in show_sockstat() argument
656 if (args->has_expected_laddr) { in show_sockstat()
657 rc = expected_addr_match(sa, &args->expected_laddr, in show_sockstat()
669 if (args->has_expected_raddr) { in show_sockstat()
670 rc |= expected_addr_match(sa, &args->expected_raddr, in show_sockstat()
689 static int convert_addr(struct sock_args *args, const char *_str, in convert_addr() argument
692 int pfx_len_max = args->version == AF_INET6 ? 128 : 32; in convert_addr()
693 int family = args->version; in convert_addr()
708 addr = &args->local_addr; in convert_addr()
712 addr = &args->remote_addr; in convert_addr()
716 addr = &args->grp; in convert_addr()
720 addr = &args->expected_laddr; in convert_addr()
724 addr = &args->expected_raddr; in convert_addr()
729 args->md5_prefix.v4.sin_family = AF_INET; in convert_addr()
730 addr = &args->md5_prefix.v4.sin_addr; in convert_addr()
732 args->md5_prefix.v6.sin6_family = AF_INET6; in convert_addr()
733 addr = &args->md5_prefix.v6.sin6_addr; in convert_addr()
742 &args->prefix_len) != 0) { in convert_addr()
747 args->prefix_len = 0; in convert_addr()
787 args->scope_id = get_ifidx(dev); in convert_addr()
788 if (args->scope_id < 0) { in convert_addr()
806 static int validate_addresses(struct sock_args *args) in validate_addresses() argument
808 if (args->local_addr_str && in validate_addresses()
809 convert_addr(args, args->local_addr_str, ADDR_TYPE_LOCAL) < 0) in validate_addresses()
812 if (args->remote_addr_str && in validate_addresses()
813 convert_addr(args, args->remote_addr_str, ADDR_TYPE_REMOTE) < 0) in validate_addresses()
816 if (args->md5_prefix_str && in validate_addresses()
817 convert_addr(args, args->md5_prefix_str, in validate_addresses()
821 if (args->expected_laddr_str && in validate_addresses()
822 convert_addr(args, args->expected_laddr_str, in validate_addresses()
826 if (args->expected_raddr_str && in validate_addresses()
827 convert_addr(args, args->expected_raddr_str, in validate_addresses()
951 static int send_msg(int sd, void *addr, socklen_t alen, struct sock_args *args) in send_msg() argument
953 if (args->type == SOCK_STREAM) { in send_msg()
958 } else if (args->ifindex && args->use_cmsg) { in send_msg()
959 if (send_msg_cmsg(sd, addr, alen, args->ifindex, args->version)) in send_msg()
972 static int socket_read_dgram(int sd, struct sock_args *args) in socket_read_dgram() argument
1013 if (args->expected_ifindex) { in socket_read_dgram()
1014 if (args->expected_ifindex != ifindex) { in socket_read_dgram()
1016 args->expected_ifindex, ifindex); in socket_read_dgram()
1020 args->expected_ifindex, ifindex); in socket_read_dgram()
1046 if (args->version == AF_INET6) { in socket_read_dgram()
1049 if (args->dev) { in socket_read_dgram()
1117 static int socket_read(int sd, struct sock_args *args) in socket_read() argument
1119 if (args->type == SOCK_STREAM) in socket_read()
1122 return socket_read_dgram(sd, args); in socket_read()
1173 struct sock_args *args) in msg_loop() argument
1180 if (args->type != SOCK_STREAM) in msg_loop()
1181 set_recv_attr(sd, args->version); in msg_loop()
1188 if (send_msg(sd, addr, alen, args)) in msg_loop()
1220 rc = socket_read(sd, args); in msg_loop()
1232 if (stdin_to_socket(sd, args->type, addr, alen) <= 0) in msg_loop()
1249 if (send_msg(sd, addr, alen, args)) { in msg_loop()
1259 static int msock_init(struct sock_args *args, int server) in msock_init() argument
1264 .sin_port = htons(args->port), in msock_init()
1269 if (!server && args->has_local_ip) in msock_init()
1270 if_addr = args->local_addr.in.s_addr; in msock_init()
1288 if (args->dev && bind_to_device(sd, args->dev) != 0) in msock_init()
1290 else if (args->use_setsockopt && in msock_init()
1291 set_multicast_if(sd, args->ifindex)) in msock_init()
1302 set_membership(sd, args->grp.s_addr, in msock_init()
1303 args->local_addr.in.s_addr, args->ifindex)) in msock_init()
1312 static int msock_server(struct sock_args *args) in msock_server() argument
1314 return msock_init(args, 1); in msock_server()
1317 static int msock_client(struct sock_args *args) in msock_client() argument
1319 return msock_init(args, 0); in msock_client()
1322 static int bind_socket(int sd, struct sock_args *args) in bind_socket() argument
1333 if (!args->has_local_ip && args->type == SOCK_RAW) in bind_socket()
1336 switch (args->version) { in bind_socket()
1338 serv_addr.sin_port = htons(args->port); in bind_socket()
1339 serv_addr.sin_addr = args->local_addr.in; in bind_socket()
1345 serv6_addr.sin6_port = htons(args->port); in bind_socket()
1346 serv6_addr.sin6_addr = args->local_addr.in6; in bind_socket()
1364 static int config_xfrm_policy(int sd, struct sock_args *args) in config_xfrm_policy() argument
1371 if (args->type != SOCK_DGRAM) { in config_xfrm_policy()
1377 policy.sel.family = args->version; in config_xfrm_policy()
1378 if (args->version == AF_INET6) { in config_xfrm_policy()
1399 static int lsock_init(struct sock_args *args) in lsock_init() argument
1404 sd = socket(args->version, args->type, args->protocol); in lsock_init()
1416 if (args->dev && bind_to_device(sd, args->dev) != 0) in lsock_init()
1418 else if (args->use_setsockopt && in lsock_init()
1419 set_unicast_if(sd, args->ifindex, args->version)) in lsock_init()
1422 if (bind_socket(sd, args)) in lsock_init()
1425 if (args->bind_test_only) in lsock_init()
1428 if (args->type == SOCK_STREAM && listen(sd, 1) < 0) { in lsock_init()
1442 if (args->use_xfrm && config_xfrm_policy(sd, args)) { in lsock_init()
1465 static int do_server(struct sock_args *args, int ipc_fd) in do_server() argument
1476 if (args->serverns) { in do_server()
1477 if (switch_ns(args->serverns)) { in do_server()
1479 args->serverns); in do_server()
1485 args->dev = args->server_dev; in do_server()
1486 args->expected_dev = args->expected_server_dev; in do_server()
1487 if (resolve_devices(args) || validate_addresses(args)) in do_server()
1493 if (args->has_grp) in do_server()
1494 lsd = msock_server(args); in do_server()
1496 lsd = lsock_init(args); in do_server()
1501 if (args->bind_test_only) { in do_server()
1507 if (args->type != SOCK_STREAM) { in do_server()
1509 rc = msg_loop(0, lsd, (void *) addr, alen, args); in do_server()
1514 if (args->password && tcp_md5_remote(lsd, args)) { in do_server()
1547 rc = show_sockstat(csd, args); in do_server()
1551 rc = check_device(csd, args); in do_server()
1556 rc = msg_loop(0, csd, (void *) addr, alen, args); in do_server()
1606 static int connectsock(void *addr, socklen_t alen, struct sock_args *args) in connectsock() argument
1611 sd = socket(args->version, args->type, args->protocol); in connectsock()
1626 if (args->dev && bind_to_device(sd, args->dev) != 0) in connectsock()
1628 else if (args->use_setsockopt && in connectsock()
1629 set_unicast_if(sd, args->ifindex, args->version)) in connectsock()
1632 if (args->has_local_ip && bind_socket(sd, args)) in connectsock()
1635 if (args->type != SOCK_STREAM) in connectsock()
1638 if (args->password && tcp_md5sig(sd, addr, alen, args)) in connectsock()
1641 if (args->bind_test_only) in connectsock()
1662 static int do_client(struct sock_args *args) in do_client() argument
1675 if (!args->has_remote_ip && !args->has_grp) { in do_client()
1680 if (args->clientns) { in do_client()
1681 if (switch_ns(args->clientns)) { in do_client()
1683 args->clientns); in do_client()
1689 args->local_addr_str = args->client_local_addr_str; in do_client()
1690 if (resolve_devices(args) || validate_addresses(args)) in do_client()
1693 if ((args->use_setsockopt || args->use_cmsg) && !args->ifindex) { in do_client()
1697 if (args->use_setsockopt || args->use_cmsg) in do_client()
1698 args->dev = NULL; in do_client()
1700 switch (args->version) { in do_client()
1702 sin.sin_port = htons(args->port); in do_client()
1703 if (args->has_grp) in do_client()
1704 sin.sin_addr = args->grp; in do_client()
1706 sin.sin_addr = args->remote_addr.in; in do_client()
1711 sin6.sin6_port = htons(args->port); in do_client()
1712 sin6.sin6_addr = args->remote_addr.in6; in do_client()
1713 sin6.sin6_scope_id = args->scope_id; in do_client()
1719 args->password = args->client_pw; in do_client()
1721 if (args->has_grp) in do_client()
1722 sd = msock_client(args); in do_client()
1724 sd = connectsock(addr, alen, args); in do_client()
1729 if (args->bind_test_only) in do_client()
1732 if (args->type == SOCK_STREAM) { in do_client()
1733 rc = show_sockstat(sd, args); in do_client()
1738 rc = msg_loop(1, sd, addr, alen, args); in do_client()
1769 static int ipc_child(int fd, struct sock_args *args) in ipc_child() argument
1789 args->has_expected_laddr = 0; in ipc_child()
1790 args->has_expected_raddr = 0; in ipc_child()
1792 rc = do_server(args, fd); in ipc_child()
1801 static int ipc_parent(int cpid, int fd, struct sock_args *args) in ipc_parent() argument
1820 client_status = do_client(args); in ipc_parent()
1894 struct sock_args args = { in main() local
1911 * process input args in main()
1926 args.has_local_ip = 1; in main()
1927 args.local_addr_str = optarg; in main()
1930 args.has_remote_ip = 1; in main()
1931 args.remote_addr_str = optarg; in main()
1934 args.has_local_ip = 1; in main()
1935 args.client_local_addr_str = optarg; in main()
1942 args.port = (unsigned short) tmp; in main()
1952 args.type = SOCK_DGRAM; in main()
1955 args.type = SOCK_RAW; in main()
1956 args.port = 0; in main()
1957 if (!args.protocol) in main()
1958 args.protocol = IPPROTO_RAW; in main()
1963 args.protocol = pe->p_proto; in main()
1969 args.protocol = tmp; in main()
1976 args.clientns = optarg; in main()
1979 args.serverns = optarg; in main()
1985 args.password = optarg; in main()
1988 args.bind_key_ifindex = 1; in main()
1991 args.bind_key_ifindex = -1; in main()
1994 args.client_pw = optarg; in main()
1997 args.md5_prefix_str = optarg; in main()
2000 args.use_setsockopt = 1; in main()
2003 args.use_cmsg = 1; in main()
2006 args.dev = optarg; in main()
2009 args.server_dev = optarg; in main()
2015 args.has_grp = 1; in main()
2016 if (convert_addr(&args, optarg, ADDR_TYPE_MCAST) < 0) in main()
2018 args.type = SOCK_DGRAM; in main()
2021 args.version = AF_INET6; in main()
2024 args.bind_test_only = 1; in main()
2027 args.has_expected_laddr = 1; in main()
2028 args.expected_laddr_str = optarg; in main()
2031 args.has_expected_raddr = 1; in main()
2032 args.expected_raddr_str = optarg; in main()
2035 args.expected_dev = optarg; in main()
2038 args.expected_server_dev = optarg; in main()
2044 args.use_xfrm = 1; in main()
2052 if (args.password && in main()
2053 ((!args.has_remote_ip && !args.md5_prefix_str) || in main()
2054 args.type != SOCK_STREAM)) { in main()
2059 if (args.md5_prefix_str && !args.password) { in main()
2069 if (args.type == SOCK_STREAM && !args.protocol) in main()
2070 args.protocol = IPPROTO_TCP; in main()
2071 if (args.type == SOCK_DGRAM && !args.protocol) in main()
2072 args.protocol = IPPROTO_UDP; in main()
2074 if ((args.type == SOCK_STREAM || args.type == SOCK_DGRAM) && in main()
2075 args.port == 0) { in main()
2080 if ((both_mode || !server_mode) && !args.has_grp && in main()
2081 !args.has_remote_ip && !args.has_local_ip) { in main()
2104 return ipc_parent(cpid, fd[0], &args); in main()
2106 return ipc_child(fd[1], &args); in main()
2111 rc = do_server(&args, -1); in main()
2116 return do_client(&args); in main()