Lines Matching +full:mcast +full:- +full:groups

1 // SPDX-License-Identifier: GPL-2.0
4 * Copyright (C) 2020-2025 OpenVPN, Inc.
143 ret = nl_recvmsgs(ctx->nl_sock, ctx->nl_cb); in ovpn_nl_recvmsgs()
146 case -NLE_INTR: in ovpn_nl_recvmsgs()
148 "netlink received interrupt due to signal - ignoring\n"); in ovpn_nl_recvmsgs()
150 case -NLE_NOMEM: in ovpn_nl_recvmsgs()
153 case -NLE_AGAIN: in ovpn_nl_recvmsgs()
155 "netlink reports blocking read - aborting wait\n"); in ovpn_nl_recvmsgs()
160 ret, nl_geterror(-ret)); in ovpn_nl_recvmsgs()
177 ctx->nl_sock = nl_socket_alloc(); in nl_ctx_alloc_flags()
178 if (!ctx->nl_sock) { in nl_ctx_alloc_flags()
183 nl_socket_set_buffer_size(ctx->nl_sock, 8192, 8192); in nl_ctx_alloc_flags()
185 ret = genl_connect(ctx->nl_sock); in nl_ctx_alloc_flags()
194 setsockopt(nl_socket_get_fd(ctx->nl_sock), SOL_NETLINK, NETLINK_EXT_ACK, in nl_ctx_alloc_flags()
197 ctx->ovpn_dco_id = genl_ctrl_resolve(ctx->nl_sock, OVPN_FAMILY_NAME); in nl_ctx_alloc_flags()
198 if (ctx->ovpn_dco_id < 0) { in nl_ctx_alloc_flags()
200 ctx->ovpn_dco_id); in nl_ctx_alloc_flags()
204 ctx->nl_msg = nlmsg_alloc(); in nl_ctx_alloc_flags()
205 if (!ctx->nl_msg) { in nl_ctx_alloc_flags()
210 ctx->nl_cb = nl_cb_alloc(NL_CB_DEFAULT); in nl_ctx_alloc_flags()
211 if (!ctx->nl_cb) { in nl_ctx_alloc_flags()
216 nl_socket_set_cb(ctx->nl_sock, ctx->nl_cb); in nl_ctx_alloc_flags()
218 genlmsg_put(ctx->nl_msg, 0, 0, ctx->ovpn_dco_id, 0, flags, cmd, 0); in nl_ctx_alloc_flags()
220 if (ovpn->ifindex > 0) in nl_ctx_alloc_flags()
221 NLA_PUT_U32(ctx->nl_msg, OVPN_A_IFINDEX, ovpn->ifindex); in nl_ctx_alloc_flags()
226 nlmsg_free(ctx->nl_msg); in nl_ctx_alloc_flags()
228 nl_socket_free(ctx->nl_sock); in nl_ctx_alloc_flags()
244 nl_socket_free(ctx->nl_sock); in nl_ctx_free()
245 nlmsg_free(ctx->nl_msg); in nl_ctx_free()
246 nl_cb_put(ctx->nl_cb); in nl_ctx_free()
253 struct nlmsghdr *nlh = (struct nlmsghdr *)err - 1; in ovpn_nl_cb_error()
255 int len = nlh->nlmsg_len; in ovpn_nl_cb_error()
260 *ret = err->error; in ovpn_nl_cb_error()
262 if (!(nlh->nlmsg_flags & NLM_F_ACK_TLVS)) in ovpn_nl_cb_error()
265 if (!(nlh->nlmsg_flags & NLM_F_CAPPED)) in ovpn_nl_cb_error()
266 ack_len += err->msg.nlmsg_len - sizeof(*nlh); in ovpn_nl_cb_error()
272 len -= ack_len; in ovpn_nl_cb_error()
317 nl_cb_err(ctx->nl_cb, NL_CB_CUSTOM, ovpn_nl_cb_error, &status); in ovpn_nl_msg_send()
318 nl_cb_set(ctx->nl_cb, NL_CB_FINISH, NL_CB_CUSTOM, ovpn_nl_cb_finish, in ovpn_nl_msg_send()
320 nl_cb_set(ctx->nl_cb, NL_CB_ACK, NL_CB_CUSTOM, ovpn_nl_cb_ack, &status); in ovpn_nl_msg_send()
323 nl_cb_set(ctx->nl_cb, NL_CB_VALID, NL_CB_CUSTOM, cb, ctx); in ovpn_nl_msg_send()
325 nl_send_auto_complete(ctx->nl_sock, ctx->nl_msg); in ovpn_nl_msg_send()
332 strerror(-status), status); in ovpn_nl_msg_send()
339 int idx_enc, idx_dec, ret = -1; in ovpn_parse_key()
349 return -1; in ovpn_parse_key()
409 switch (ctx->key_dir) { in ovpn_parse_key()
422 memcpy(ctx->key_enc, bkey + KEY_LEN * idx_enc, KEY_LEN); in ovpn_parse_key()
423 memcpy(ctx->key_dec, bkey + KEY_LEN * idx_dec, KEY_LEN); in ovpn_parse_key()
424 memcpy(ctx->nonce, bkey + 2 * KEY_LEN, NONCE_LEN); in ovpn_parse_key()
439 ctx->cipher = OVPN_CIPHER_ALG_AES_GCM; in ovpn_parse_cipher()
441 ctx->cipher = OVPN_CIPHER_ALG_CHACHA20_POLY1305; in ovpn_parse_cipher()
443 ctx->cipher = OVPN_CIPHER_ALG_NONE; in ovpn_parse_cipher()
445 return -ENOTSUP; in ovpn_parse_cipher()
458 ctx->key_dir = in_dir; in ovpn_parse_key_direction()
463 return -1; in ovpn_parse_key_direction()
482 return -EINVAL; in ovpn_socket()
487 return -1; in ovpn_socket()
493 in->sin_family = family; in ovpn_socket()
494 in->sin_port = htons(ctx->lport); in ovpn_socket()
495 in->sin_addr.s_addr = htonl(INADDR_ANY); in ovpn_socket()
500 in6->sin6_family = family; in ovpn_socket()
501 in6->sin6_port = htons(ctx->lport); in ovpn_socket()
502 in6->sin6_addr = in6addr_any; in ovpn_socket()
506 return -1; in ovpn_socket()
529 return -1; in ovpn_socket()
539 ctx->socket = s; in ovpn_socket()
540 ctx->sa_family = family; in ovpn_socket()
545 return -1; in ovpn_socket()
561 ret = listen(ctx->socket, 10); in ovpn_listen()
564 close(ctx->socket); in ovpn_listen()
565 return -1; in ovpn_listen()
576 socklen = sizeof(ctx->remote); in ovpn_accept()
577 ret = accept(ctx->socket, (struct sockaddr *)&ctx->remote, &socklen); in ovpn_accept()
592 ret = -EINVAL; in ovpn_accept()
598 close(ctx->socket); in ovpn_accept()
607 s = socket(ovpn->remote.in4.sin_family, SOCK_STREAM, 0); in ovpn_connect()
610 return -1; in ovpn_connect()
613 switch (ovpn->remote.in4.sin_family) { in ovpn_connect()
621 return -EOPNOTSUPP; in ovpn_connect()
624 ret = connect(s, (struct sockaddr *)&ovpn->remote, socklen); in ovpn_connect()
632 ovpn->socket = s; in ovpn_connect()
644 int ret = -1; in ovpn_new_peer()
648 return -ENOMEM; in ovpn_new_peer()
650 attr = nla_nest_start(ctx->nl_msg, OVPN_A_PEER); in ovpn_new_peer()
651 NLA_PUT_U32(ctx->nl_msg, OVPN_A_PEER_ID, ovpn->peer_id); in ovpn_new_peer()
652 NLA_PUT_U32(ctx->nl_msg, OVPN_A_PEER_SOCKET, ovpn->socket); in ovpn_new_peer()
655 switch (ovpn->remote.in4.sin_family) { in ovpn_new_peer()
657 NLA_PUT_U32(ctx->nl_msg, OVPN_A_PEER_REMOTE_IPV4, in ovpn_new_peer()
658 ovpn->remote.in4.sin_addr.s_addr); in ovpn_new_peer()
659 NLA_PUT_U16(ctx->nl_msg, OVPN_A_PEER_REMOTE_PORT, in ovpn_new_peer()
660 ovpn->remote.in4.sin_port); in ovpn_new_peer()
663 NLA_PUT(ctx->nl_msg, OVPN_A_PEER_REMOTE_IPV6, in ovpn_new_peer()
664 sizeof(ovpn->remote.in6.sin6_addr), in ovpn_new_peer()
665 &ovpn->remote.in6.sin6_addr); in ovpn_new_peer()
666 NLA_PUT_U32(ctx->nl_msg, in ovpn_new_peer()
668 ovpn->remote.in6.sin6_scope_id); in ovpn_new_peer()
669 NLA_PUT_U16(ctx->nl_msg, OVPN_A_PEER_REMOTE_PORT, in ovpn_new_peer()
670 ovpn->remote.in6.sin6_port); in ovpn_new_peer()
679 if (ovpn->peer_ip_set) { in ovpn_new_peer()
680 switch (ovpn->peer_ip.in4.sin_family) { in ovpn_new_peer()
682 NLA_PUT_U32(ctx->nl_msg, OVPN_A_PEER_VPN_IPV4, in ovpn_new_peer()
683 ovpn->peer_ip.in4.sin_addr.s_addr); in ovpn_new_peer()
686 NLA_PUT(ctx->nl_msg, OVPN_A_PEER_VPN_IPV6, in ovpn_new_peer()
688 &ovpn->peer_ip.in6.sin6_addr); in ovpn_new_peer()
696 nla_nest_end(ctx->nl_msg, attr); in ovpn_new_peer()
708 int ret = -1; in ovpn_set_peer()
712 return -ENOMEM; in ovpn_set_peer()
714 attr = nla_nest_start(ctx->nl_msg, OVPN_A_PEER); in ovpn_set_peer()
715 NLA_PUT_U32(ctx->nl_msg, OVPN_A_PEER_ID, ovpn->peer_id); in ovpn_set_peer()
716 NLA_PUT_U32(ctx->nl_msg, OVPN_A_PEER_KEEPALIVE_INTERVAL, in ovpn_set_peer()
717 ovpn->keepalive_interval); in ovpn_set_peer()
718 NLA_PUT_U32(ctx->nl_msg, OVPN_A_PEER_KEEPALIVE_TIMEOUT, in ovpn_set_peer()
719 ovpn->keepalive_timeout); in ovpn_set_peer()
720 nla_nest_end(ctx->nl_msg, attr); in ovpn_set_peer()
732 int ret = -1; in ovpn_del_peer()
736 return -ENOMEM; in ovpn_del_peer()
738 attr = nla_nest_start(ctx->nl_msg, OVPN_A_PEER); in ovpn_del_peer()
739 NLA_PUT_U32(ctx->nl_msg, OVPN_A_PEER_ID, ovpn->peer_id); in ovpn_del_peer()
740 nla_nest_end(ctx->nl_msg, attr); in ovpn_del_peer()
799 int scope_id = -1; in ovpn_handle_peer()
808 fprintf(stderr, "\tRemote: %s:%hu (scope-id: %u)\n", buf, rport, in ovpn_handle_peer()
882 int flags = 0, ret = -1; in ovpn_get_peer()
886 if (ovpn->peer_id == PEER_ID_UNDEF) in ovpn_get_peer()
891 return -ENOMEM; in ovpn_get_peer()
893 if (ovpn->peer_id != PEER_ID_UNDEF) { in ovpn_get_peer()
894 attr = nla_nest_start(ctx->nl_msg, OVPN_A_PEER); in ovpn_get_peer()
895 NLA_PUT_U32(ctx->nl_msg, OVPN_A_PEER_ID, ovpn->peer_id); in ovpn_get_peer()
896 nla_nest_end(ctx->nl_msg, attr); in ovpn_get_peer()
909 int ret = -1; in ovpn_new_key()
913 return -ENOMEM; in ovpn_new_key()
915 keyconf = nla_nest_start(ctx->nl_msg, OVPN_A_KEYCONF); in ovpn_new_key()
916 NLA_PUT_U32(ctx->nl_msg, OVPN_A_KEYCONF_PEER_ID, ovpn->peer_id); in ovpn_new_key()
917 NLA_PUT_U32(ctx->nl_msg, OVPN_A_KEYCONF_SLOT, ovpn->key_slot); in ovpn_new_key()
918 NLA_PUT_U32(ctx->nl_msg, OVPN_A_KEYCONF_KEY_ID, ovpn->key_id); in ovpn_new_key()
919 NLA_PUT_U32(ctx->nl_msg, OVPN_A_KEYCONF_CIPHER_ALG, ovpn->cipher); in ovpn_new_key()
921 key_dir = nla_nest_start(ctx->nl_msg, OVPN_A_KEYCONF_ENCRYPT_DIR); in ovpn_new_key()
922 NLA_PUT(ctx->nl_msg, OVPN_A_KEYDIR_CIPHER_KEY, KEY_LEN, ovpn->key_enc); in ovpn_new_key()
923 NLA_PUT(ctx->nl_msg, OVPN_A_KEYDIR_NONCE_TAIL, NONCE_LEN, ovpn->nonce); in ovpn_new_key()
924 nla_nest_end(ctx->nl_msg, key_dir); in ovpn_new_key()
926 key_dir = nla_nest_start(ctx->nl_msg, OVPN_A_KEYCONF_DECRYPT_DIR); in ovpn_new_key()
927 NLA_PUT(ctx->nl_msg, OVPN_A_KEYDIR_CIPHER_KEY, KEY_LEN, ovpn->key_dec); in ovpn_new_key()
928 NLA_PUT(ctx->nl_msg, OVPN_A_KEYDIR_NONCE_TAIL, NONCE_LEN, ovpn->nonce); in ovpn_new_key()
929 nla_nest_end(ctx->nl_msg, key_dir); in ovpn_new_key()
931 nla_nest_end(ctx->nl_msg, keyconf); in ovpn_new_key()
943 int ret = -1; in ovpn_del_key()
947 return -ENOMEM; in ovpn_del_key()
949 keyconf = nla_nest_start(ctx->nl_msg, OVPN_A_KEYCONF); in ovpn_del_key()
950 NLA_PUT_U32(ctx->nl_msg, OVPN_A_KEYCONF_PEER_ID, ovpn->peer_id); in ovpn_del_key()
951 NLA_PUT_U32(ctx->nl_msg, OVPN_A_KEYCONF_SLOT, ovpn->key_slot); in ovpn_del_key()
952 nla_nest_end(ctx->nl_msg, keyconf); in ovpn_del_key()
981 fprintf(stderr, "\t- Slot: "); in ovpn_handle_key()
996 fprintf(stderr, "\t- Key ID: %u\n", in ovpn_handle_key()
999 fprintf(stderr, "\t- Cipher: "); in ovpn_handle_key()
1005 fprintf(stderr, "aes-gcm\n"); in ovpn_handle_key()
1024 int ret = -1; in ovpn_get_key()
1028 return -ENOMEM; in ovpn_get_key()
1030 keyconf = nla_nest_start(ctx->nl_msg, OVPN_A_KEYCONF); in ovpn_get_key()
1031 NLA_PUT_U32(ctx->nl_msg, OVPN_A_KEYCONF_PEER_ID, ovpn->peer_id); in ovpn_get_key()
1032 NLA_PUT_U32(ctx->nl_msg, OVPN_A_KEYCONF_SLOT, ovpn->key_slot); in ovpn_get_key()
1033 nla_nest_end(ctx->nl_msg, keyconf); in ovpn_get_key()
1045 int ret = -1; in ovpn_swap_keys()
1049 return -ENOMEM; in ovpn_swap_keys()
1051 kc = nla_nest_start(ctx->nl_msg, OVPN_A_KEYCONF); in ovpn_swap_keys()
1052 NLA_PUT_U32(ctx->nl_msg, OVPN_A_KEYCONF_PEER_ID, ovpn->peer_id); in ovpn_swap_keys()
1053 nla_nest_end(ctx->nl_msg, kc); in ovpn_swap_keys()
1068 if ((int)(NLMSG_ALIGN(n->nlmsg_len) + RTA_ALIGN(len)) > maxlen) { in ovpn_addattr()
1071 return -EMSGSIZE; in ovpn_addattr()
1075 rta->rta_type = type; in ovpn_addattr()
1076 rta->rta_len = len; in ovpn_addattr()
1083 n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + RTA_ALIGN(len); in ovpn_addattr()
1101 nest->rta_len = (uint8_t *)nlmsg_tail(msg) - (uint8_t *)nest; in ovpn_nest_end()
1122 return -1; in ovpn_rt_socket()
1129 return -1; in ovpn_rt_socket()
1136 static int ovpn_rt_bind(int fd, uint32_t groups) in ovpn_rt_bind() argument
1142 local.nl_groups = groups; in ovpn_rt_bind()
1147 return -errno; in ovpn_rt_bind()
1154 return -errno; in ovpn_rt_bind()
1160 return -EINVAL; in ovpn_rt_bind()
1166 return -EINVAL; in ovpn_rt_bind()
1176 unsigned int groups, ovpn_parse_reply_cb cb, in ovpn_rt_send() argument
1186 .iov_len = payload->nlmsg_len, in ovpn_rt_send()
1197 nladdr.nl_groups = groups; in ovpn_rt_send()
1199 payload->nlmsg_seq = time(NULL); in ovpn_rt_send()
1203 payload->nlmsg_flags |= NLM_F_ACK; in ovpn_rt_send()
1208 return -errno; in ovpn_rt_send()
1214 ret = -errno; in ovpn_rt_send()
1221 ret = -errno; in ovpn_rt_send()
1244 ret = -errno; in ovpn_rt_send()
1252 ret = -EIO; in ovpn_rt_send()
1260 ret = -EIO; in ovpn_rt_send()
1266 len = h->nlmsg_len; in ovpn_rt_send()
1267 rem_len = len - sizeof(*h); in ovpn_rt_send()
1273 ret = -EIO; in ovpn_rt_send()
1278 ret = -EIO; in ovpn_rt_send()
1282 if (h->nlmsg_type == NLMSG_DONE) { in ovpn_rt_send()
1287 if (h->nlmsg_type == NLMSG_ERROR) { in ovpn_rt_send()
1292 ret = -EIO; in ovpn_rt_send()
1296 if (err->error) { in ovpn_rt_send()
1298 __func__, err->error, in ovpn_rt_send()
1299 strerror(-err->error)); in ovpn_rt_send()
1300 ret = err->error; in ovpn_rt_send()
1326 rcv_len -= NLMSG_ALIGN(len); in ovpn_rt_send()
1339 ret = -1; in ovpn_rt_send()
1359 int ret = -1; in ovpn_new_iface()
1361 fprintf(stdout, "Creating interface %s with mode %u\n", ovpn->ifname, in ovpn_new_iface()
1362 ovpn->mode); in ovpn_new_iface()
1368 if (ovpn_addattr(&req.n, sizeof(req), IFLA_IFNAME, ovpn->ifname, in ovpn_new_iface()
1369 strlen(ovpn->ifname) + 1) < 0) in ovpn_new_iface()
1380 if (ovpn->mode_set) { in ovpn_new_iface()
1386 &ovpn->mode, sizeof(uint8_t)) < 0) in ovpn_new_iface()
1405 fprintf(stdout, "Deleting interface %s ifindex %u\n", ovpn->ifname, in ovpn_del_iface()
1406 ovpn->ifindex); in ovpn_del_iface()
1413 req.i.ifi_index = ovpn->ifindex; in ovpn_del_iface()
1453 grp->group, nla_len(tb_mcgrp[CTRL_ATTR_MCAST_GRP_NAME]))) in mcast_family_handler()
1455 grp->id = nla_get_u32(tb_mcgrp[CTRL_ATTR_MCAST_GRP_ID]); in mcast_family_handler()
1467 *ret = err->error; in mcast_error_handler()
1488 fprintf(stderr, "received message from ovpn-dco\n"); in ovpn_handle_msg()
1490 *ret = -1; in ovpn_handle_msg()
1499 fprintf(stderr, "received bogus data from ovpn-dco\n"); in ovpn_handle_msg()
1515 switch (gnlh->cmd) { in ovpn_handle_msg()
1523 fprintf(stderr, "received unknown command: %d\n", gnlh->cmd); in ovpn_handle_msg()
1539 .id = -ENOENT, in ovpn_get_mcast_id()
1544 return -ENOMEM; in ovpn_get_mcast_id()
1548 ret = -ENOMEM; in ovpn_get_mcast_id()
1556 ret = -ENOBUFS; in ovpn_get_mcast_id()
1604 fprintf(stderr, "cannot get mcast group: %s\n", in ovpn_listen_mcast()
1611 fprintf(stderr, "failed to join mcast group: %d\n", ret); in ovpn_listen_mcast()
1627 err, nl_geterror(-err)); in ovpn_listen_mcast()
1628 ret = -1; in ovpn_listen_mcast()
1649 fprintf(stderr, "\t\t- P2P for peer-to-peer mode (i.e. client)\n"); in usage()
1650 fprintf(stderr, "\t\t- MP for multi-peer mode (i.e. server)\n"); in usage()
1666 …"* connect <iface> <peer_id> <raddr> <rport> [key_file]: start connecting peer of TCP-based VPN se… in usage()
1718 "\tcipher: cipher to use, supported: aes (AES-GCM), chachapoly (CHACHA20POLY1305)\n"); in usage()
1721 fprintf(stderr, "\tkey_file: file containing the pre-shared key\n"); in usage()
1750 .ai_family = ovpn->sa_family, in ovpn_parse_remote()
1760 return -1; in ovpn_parse_remote()
1763 if (!(result->ai_family == AF_INET && in ovpn_parse_remote()
1764 result->ai_addrlen == sizeof(struct sockaddr_in)) && in ovpn_parse_remote()
1765 !(result->ai_family == AF_INET6 && in ovpn_parse_remote()
1766 result->ai_addrlen == sizeof(struct sockaddr_in6))) { in ovpn_parse_remote()
1767 ret = -EINVAL; in ovpn_parse_remote()
1771 memcpy(&ovpn->remote, result->ai_addr, result->ai_addrlen); in ovpn_parse_remote()
1779 return -1; in ovpn_parse_remote()
1782 if (!(result->ai_family == AF_INET && in ovpn_parse_remote()
1783 result->ai_addrlen == sizeof(struct sockaddr_in)) && in ovpn_parse_remote()
1784 !(result->ai_family == AF_INET6 && in ovpn_parse_remote()
1785 result->ai_addrlen == sizeof(struct sockaddr_in6))) { in ovpn_parse_remote()
1786 ret = -EINVAL; in ovpn_parse_remote()
1790 memcpy(&ovpn->peer_ip, result->ai_addr, result->ai_addrlen); in ovpn_parse_remote()
1791 ovpn->sa_family = result->ai_family; in ovpn_parse_remote()
1793 ovpn->peer_ip_set = true; in ovpn_parse_remote()
1806 ovpn->peer_id = strtoul(peer_id, NULL, 10); in ovpn_parse_new_peer()
1807 if (errno == ERANGE || ovpn->peer_id > PEER_ID_UNDEF) { in ovpn_parse_new_peer()
1809 return -1; in ovpn_parse_new_peer()
1821 return -1; in ovpn_parse_key_slot()
1826 ovpn->key_slot = OVPN_KEY_SLOT_PRIMARY; in ovpn_parse_key_slot()
1829 ovpn->key_slot = OVPN_KEY_SLOT_SECONDARY; in ovpn_parse_key_slot()
1843 memset(buf + sizeof(len), 0x86, sizeof(buf) - sizeof(len)); in ovpn_send_tcp_data()
1943 switch (ovpn->cmd) { in ovpn_run_cmd()
1951 ret = ovpn_listen(ovpn, ovpn->sa_family); in ovpn_run_cmd()
1957 fp = fopen(ovpn->peers_file, "r"); in ovpn_run_cmd()
1960 ovpn->peers_file); in ovpn_run_cmd()
1961 return -1; in ovpn_run_cmd()
1971 return -E2BIG; in ovpn_run_cmd()
1974 peer_ctx.ifindex = ovpn->ifindex; in ovpn_run_cmd()
1975 peer_ctx.sa_family = ovpn->sa_family; in ovpn_run_cmd()
1980 return -1; in ovpn_run_cmd()
1984 ovpn->cli_sockets[num_peers] = peer_ctx.socket; in ovpn_run_cmd()
1990 return -1; in ovpn_run_cmd()
2004 ret = ovpn_recv_tcp_data(ovpn->cli_sockets[i]); in ovpn_run_cmd()
2020 close(ovpn->socket); in ovpn_run_cmd()
2024 if (ovpn->cipher != OVPN_CIPHER_ALG_NONE) { in ovpn_run_cmd()
2032 ret = ovpn_send_tcp_data(ovpn->socket); in ovpn_run_cmd()
2048 fp = fopen(ovpn->peers_file, "r"); in ovpn_run_cmd()
2051 ovpn->peers_file); in ovpn_run_cmd()
2052 return -1; in ovpn_run_cmd()
2059 peer_ctx.ifindex = ovpn->ifindex; in ovpn_run_cmd()
2060 peer_ctx.socket = ovpn->socket; in ovpn_run_cmd()
2067 return -1; in ovpn_run_cmd()
2087 if (ovpn->peer_id == PEER_ID_UNDEF) in ovpn_run_cmd()
2089 ovpn->ifname); in ovpn_run_cmd()
2120 if (ovpn->cmd == CMD_LISTEN_MCAST) in ovpn_parse_cmd_args()
2125 return -EINVAL; in ovpn_parse_cmd_args()
2127 strscpy(ovpn->ifname, argv[2], IFNAMSIZ - 1); in ovpn_parse_cmd_args()
2128 ovpn->ifname[IFNAMSIZ - 1] = '\0'; in ovpn_parse_cmd_args()
2131 if (ovpn->cmd != CMD_NEW_IFACE) { in ovpn_parse_cmd_args()
2132 ovpn->ifindex = if_nametoindex(ovpn->ifname); in ovpn_parse_cmd_args()
2133 if (!ovpn->ifindex) { in ovpn_parse_cmd_args()
2136 return -1; in ovpn_parse_cmd_args()
2140 switch (ovpn->cmd) { in ovpn_parse_cmd_args()
2146 ovpn->mode = OVPN_MODE_P2P; in ovpn_parse_cmd_args()
2148 ovpn->mode = OVPN_MODE_MP; in ovpn_parse_cmd_args()
2152 return -1; in ovpn_parse_cmd_args()
2154 ovpn->mode_set = true; in ovpn_parse_cmd_args()
2160 return -EINVAL; in ovpn_parse_cmd_args()
2162 ovpn->lport = strtoul(argv[3], NULL, 10); in ovpn_parse_cmd_args()
2163 if (errno == ERANGE || ovpn->lport > 65535) { in ovpn_parse_cmd_args()
2165 return -1; in ovpn_parse_cmd_args()
2168 ovpn->peers_file = argv[4]; in ovpn_parse_cmd_args()
2170 ovpn->sa_family = AF_INET; in ovpn_parse_cmd_args()
2172 ovpn->sa_family = AF_INET6; in ovpn_parse_cmd_args()
2176 return -EINVAL; in ovpn_parse_cmd_args()
2178 ovpn->sa_family = AF_INET; in ovpn_parse_cmd_args()
2184 return -1; in ovpn_parse_cmd_args()
2188 ovpn->key_slot = OVPN_KEY_SLOT_PRIMARY; in ovpn_parse_cmd_args()
2189 ovpn->key_id = 0; in ovpn_parse_cmd_args()
2190 ovpn->cipher = OVPN_CIPHER_ALG_AES_GCM; in ovpn_parse_cmd_args()
2191 ovpn->key_dir = KEY_DIR_OUT; in ovpn_parse_cmd_args()
2195 return -1; in ovpn_parse_cmd_args()
2200 return -EINVAL; in ovpn_parse_cmd_args()
2202 ovpn->lport = strtoul(argv[4], NULL, 10); in ovpn_parse_cmd_args()
2203 if (errno == ERANGE || ovpn->lport > 65535) { in ovpn_parse_cmd_args()
2205 return -1; in ovpn_parse_cmd_args()
2213 return -1; in ovpn_parse_cmd_args()
2217 return -EINVAL; in ovpn_parse_cmd_args()
2219 ovpn->lport = strtoul(argv[3], NULL, 10); in ovpn_parse_cmd_args()
2220 if (errno == ERANGE || ovpn->lport > 65535) { in ovpn_parse_cmd_args()
2222 return -1; in ovpn_parse_cmd_args()
2225 ovpn->peers_file = argv[4]; in ovpn_parse_cmd_args()
2229 return -EINVAL; in ovpn_parse_cmd_args()
2231 ovpn->peer_id = strtoul(argv[3], NULL, 10); in ovpn_parse_cmd_args()
2232 if (errno == ERANGE || ovpn->peer_id > PEER_ID_UNDEF) { in ovpn_parse_cmd_args()
2234 return -1; in ovpn_parse_cmd_args()
2237 ovpn->keepalive_interval = strtoul(argv[4], NULL, 10); in ovpn_parse_cmd_args()
2241 return -1; in ovpn_parse_cmd_args()
2244 ovpn->keepalive_timeout = strtoul(argv[5], NULL, 10); in ovpn_parse_cmd_args()
2248 return -1; in ovpn_parse_cmd_args()
2253 return -EINVAL; in ovpn_parse_cmd_args()
2255 ovpn->peer_id = strtoul(argv[3], NULL, 10); in ovpn_parse_cmd_args()
2256 if (errno == ERANGE || ovpn->peer_id > PEER_ID_UNDEF) { in ovpn_parse_cmd_args()
2258 return -1; in ovpn_parse_cmd_args()
2262 ovpn->peer_id = PEER_ID_UNDEF; in ovpn_parse_cmd_args()
2264 ovpn->peer_id = strtoul(argv[3], NULL, 10); in ovpn_parse_cmd_args()
2265 if (errno == ERANGE || ovpn->peer_id > PEER_ID_UNDEF) { in ovpn_parse_cmd_args()
2267 return -1; in ovpn_parse_cmd_args()
2273 return -EINVAL; in ovpn_parse_cmd_args()
2275 ovpn->peer_id = strtoul(argv[3], NULL, 10); in ovpn_parse_cmd_args()
2278 return -1; in ovpn_parse_cmd_args()
2283 return -1; in ovpn_parse_cmd_args()
2285 ovpn->key_id = strtoul(argv[5], NULL, 10); in ovpn_parse_cmd_args()
2286 if (errno == ERANGE || ovpn->key_id > 2) { in ovpn_parse_cmd_args()
2288 return -1; in ovpn_parse_cmd_args()
2293 return -1; in ovpn_parse_cmd_args()
2297 return -1; in ovpn_parse_cmd_args()
2301 return -1; in ovpn_parse_cmd_args()
2305 return -EINVAL; in ovpn_parse_cmd_args()
2307 ovpn->peer_id = strtoul(argv[3], NULL, 10); in ovpn_parse_cmd_args()
2310 return -1; in ovpn_parse_cmd_args()
2319 return -EINVAL; in ovpn_parse_cmd_args()
2321 ovpn->peer_id = strtoul(argv[3], NULL, 10); in ovpn_parse_cmd_args()
2324 return -1; in ovpn_parse_cmd_args()
2333 return -EINVAL; in ovpn_parse_cmd_args()
2335 ovpn->peer_id = strtoul(argv[3], NULL, 10); in ovpn_parse_cmd_args()
2338 return -1; in ovpn_parse_cmd_args()
2357 return -1; in main()
2368 return -1; in main()
2374 if (ret == -EINVAL) in main()
2382 strerror(-ret), ret); in main()