Lines Matching refs:args

127 	va_list args;
135 va_start(args, format);
136 vfprintf(stdout, format, args);
137 va_end(args);
145 va_list args;
153 va_start(args, format);
154 vfprintf(stderr, format, args);
155 va_end(args);
163 va_list args;
171 va_start(args, fmt);
172 vfprintf(stderr, fmt, args);
173 va_end(args);
210 static int tcp_md5sig(int sd, void *addr, socklen_t alen, struct sock_args *args)
212 int keylen = strlen(args->password);
218 memcpy(md5sig.tcpm_key, args->password, keylen);
220 if (args->prefix_len) {
224 md5sig.tcpm_prefixlen = args->prefix_len;
225 addr = &args->md5_prefix;
229 if (args->ifindex) {
233 md5sig.tcpm_ifindex = args->ifindex;
248 static int tcp_md5_remote(int sd, struct sock_args *args)
259 switch (args->version) {
261 sin.sin_port = htons(args->port);
262 sin.sin_addr = args->remote_addr.in;
267 sin6.sin6_port = htons(args->port);
268 sin6.sin6_addr = args->remote_addr.in6;
277 if (tcp_md5sig(sd, addr, alen, args))
335 static int check_device(int sd, struct sock_args *args)
348 if (!args->expected_ifindex)
351 if (args->expected_ifindex != ifindex) {
353 args->expected_ifindex, ifindex);
358 args->expected_ifindex, ifindex);
565 static int show_sockstat(int sd, struct sock_args *args)
578 if (args->has_expected_laddr) {
579 rc = expected_addr_match(sa, &args->expected_laddr,
591 if (args->has_expected_raddr) {
592 rc |= expected_addr_match(sa, &args->expected_raddr,
719 static int send_msg(int sd, void *addr, socklen_t alen, struct sock_args *args)
721 if (args->type == SOCK_STREAM) {
726 } else if (args->ifindex && args->use_cmsg) {
727 if (send_msg_cmsg(sd, addr, alen, args->ifindex, args->version))
740 static int socket_read_dgram(int sd, struct sock_args *args)
781 if (args->expected_ifindex) {
782 if (args->expected_ifindex != ifindex) {
784 args->expected_ifindex, ifindex);
788 args->expected_ifindex, ifindex);
814 if (args->version == AF_INET6) {
817 if (args->dev) {
885 static int socket_read(int sd, struct sock_args *args)
887 if (args->type == SOCK_STREAM)
890 return socket_read_dgram(sd, args);
941 struct sock_args *args)
948 if (args->type != SOCK_STREAM)
949 set_recv_attr(sd, args->version);
956 if (send_msg(sd, addr, alen, args))
988 rc = socket_read(sd, args);
1000 if (stdin_to_socket(sd, args->type, addr, alen) <= 0)
1017 if (send_msg(sd, addr, alen, args)) {
1027 static int msock_init(struct sock_args *args, int server)
1032 .sin_port = htons(args->port),
1037 if (!server && args->has_local_ip)
1038 if_addr = args->local_addr.in.s_addr;
1056 if (args->dev && bind_to_device(sd, args->dev) != 0)
1058 else if (args->use_setsockopt &&
1059 set_multicast_if(sd, args->ifindex))
1070 set_membership(sd, args->grp.s_addr,
1071 args->local_addr.in.s_addr, args->ifindex))
1080 static int msock_server(struct sock_args *args)
1082 return msock_init(args, 1);
1085 static int msock_client(struct sock_args *args)
1087 return msock_init(args, 0);
1090 static int bind_socket(int sd, struct sock_args *args)
1101 if (!args->has_local_ip && args->type == SOCK_RAW)
1104 switch (args->version) {
1106 serv_addr.sin_port = htons(args->port);
1107 serv_addr.sin_addr = args->local_addr.in;
1113 serv6_addr.sin6_port = htons(args->port);
1114 serv6_addr.sin6_addr = args->local_addr.in6;
1132 static int lsock_init(struct sock_args *args)
1137 sd = socket(args->version, args->type, args->protocol);
1149 if (args->dev && bind_to_device(sd, args->dev) != 0)
1151 else if (args->use_setsockopt &&
1152 set_unicast_if(sd, args->ifindex, args->version))
1155 if (bind_socket(sd, args))
1158 if (args->bind_test_only)
1161 if (args->type == SOCK_STREAM && listen(sd, 1) < 0) {
1183 static int do_server(struct sock_args *args)
1196 if (args->has_grp)
1197 lsd = msock_server(args);
1199 lsd = lsock_init(args);
1204 if (args->bind_test_only) {
1209 if (args->type != SOCK_STREAM) {
1210 rc = msg_loop(0, lsd, (void *) addr, alen, args);
1215 if (args->password && tcp_md5_remote(lsd, args)) {
1248 rc = show_sockstat(csd, args);
1252 rc = check_device(csd, args);
1257 rc = msg_loop(0, csd, (void *) addr, alen, args);
1304 static int connectsock(void *addr, socklen_t alen, struct sock_args *args)
1309 sd = socket(args->version, args->type, args->protocol);
1324 if (args->dev && bind_to_device(sd, args->dev) != 0)
1326 else if (args->use_setsockopt &&
1327 set_unicast_if(sd, args->ifindex, args->version))
1330 if (args->has_local_ip && bind_socket(sd, args))
1333 if (args->type != SOCK_STREAM)
1336 if (args->password && tcp_md5sig(sd, addr, alen, args))
1339 if (args->bind_test_only)
1360 static int do_client(struct sock_args *args)
1373 if (!args->has_remote_ip && !args->has_grp) {
1378 switch (args->version) {
1380 sin.sin_port = htons(args->port);
1381 if (args->has_grp)
1382 sin.sin_addr = args->grp;
1384 sin.sin_addr = args->remote_addr.in;
1389 sin6.sin6_port = htons(args->port);
1390 sin6.sin6_addr = args->remote_addr.in6;
1391 sin6.sin6_scope_id = args->scope_id;
1397 if (args->has_grp)
1398 sd = msock_client(args);
1400 sd = connectsock(addr, alen, args);
1405 if (args->bind_test_only)
1408 if (args->type == SOCK_STREAM) {
1409 rc = show_sockstat(sd, args);
1414 rc = msg_loop(1, sd, addr, alen, args);
1431 static int convert_addr(struct sock_args *args, const char *_str,
1434 int pfx_len_max = args->version == AF_INET6 ? 128 : 32;
1435 int family = args->version;
1450 addr = &args->local_addr;
1454 addr = &args->remote_addr;
1458 addr = &args->grp;
1462 addr = &args->expected_laddr;
1466 addr = &args->expected_raddr;
1471 args->md5_prefix.v4.sin_family = AF_INET;
1472 addr = &args->md5_prefix.v4.sin_addr;
1474 args->md5_prefix.v6.sin6_family = AF_INET6;
1475 addr = &args->md5_prefix.v6.sin6_addr;
1484 &args->prefix_len) != 0) {
1489 args->prefix_len = pfx_len_max;
1529 args->scope_id = get_ifidx(dev);
1530 if (args->scope_id < 0) {
1615 struct sock_args args = {
1629 * process input args
1641 args.has_local_ip = 1;
1642 if (convert_addr(&args, optarg, ADDR_TYPE_LOCAL) < 0)
1646 args.has_remote_ip = 1;
1647 if (convert_addr(&args, optarg, ADDR_TYPE_REMOTE) < 0)
1655 args.port = (unsigned short) tmp;
1665 args.type = SOCK_DGRAM;
1668 args.type = SOCK_RAW;
1669 args.port = 0;
1670 if (!args.protocol)
1671 args.protocol = IPPROTO_RAW;
1676 args.protocol = pe->p_proto;
1682 args.protocol = tmp;
1692 args.password = optarg;
1695 if (convert_addr(&args, optarg, ADDR_TYPE_MD5_PREFIX) < 0)
1699 args.use_setsockopt = 1;
1702 args.use_cmsg = 1;
1705 args.dev = optarg;
1706 args.ifindex = get_ifidx(optarg);
1707 if (args.ifindex < 0) {
1716 args.has_grp = 1;
1717 if (convert_addr(&args, optarg, ADDR_TYPE_MCAST) < 0)
1719 args.type = SOCK_DGRAM;
1722 args.version = AF_INET6;
1725 args.bind_test_only = 1;
1728 args.has_expected_laddr = 1;
1729 if (convert_addr(&args, optarg,
1734 args.has_expected_raddr = 1;
1735 if (convert_addr(&args, optarg,
1742 args.expected_ifindex = (int)tmp;
1744 args.expected_ifindex = get_ifidx(optarg);
1745 if (args.expected_ifindex < 0) {
1761 if (args.password &&
1762 ((!args.has_remote_ip && !args.prefix_len) || args.type != SOCK_STREAM)) {
1767 if (args.prefix_len && !args.password) {
1772 if ((args.use_setsockopt || args.use_cmsg) && !args.ifindex) {
1776 if (args.use_setsockopt || args.use_cmsg)
1777 args.dev = NULL;
1784 if (args.type == SOCK_STREAM && !args.protocol)
1785 args.protocol = IPPROTO_TCP;
1786 if (args.type == SOCK_DGRAM && !args.protocol)
1787 args.protocol = IPPROTO_UDP;
1789 if ((args.type == SOCK_STREAM || args.type == SOCK_DGRAM) &&
1790 args.port == 0) {
1795 if (!server_mode && !args.has_grp &&
1796 !args.has_remote_ip && !args.has_local_ip) {
1809 rc = do_server(&args);
1814 return do_client(&args);