1*adf37648SKyle Evans // SPDX-License-Identifier: GPL-2.0 OR MIT 2*adf37648SKyle Evans /* 3*adf37648SKyle Evans * Copyright (C) 2015-2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. 4*adf37648SKyle Evans */ 5*adf37648SKyle Evans 6*adf37648SKyle Evans #include <stdio.h> 7*adf37648SKyle Evans #include <stdlib.h> 8*adf37648SKyle Evans #include <string.h> 9*adf37648SKyle Evans 10*adf37648SKyle Evans #include "containers.h" 11*adf37648SKyle Evans #include "config.h" 12*adf37648SKyle Evans #include "ipc.h" 13*adf37648SKyle Evans #include "subcommands.h" 14*adf37648SKyle Evans set_main(int argc,const char * argv[])15*adf37648SKyle Evansint set_main(int argc, const char *argv[]) 16*adf37648SKyle Evans { 17*adf37648SKyle Evans struct wgdevice *device = NULL; 18*adf37648SKyle Evans int ret = 1; 19*adf37648SKyle Evans 20*adf37648SKyle Evans if (argc < 3) { 21*adf37648SKyle Evans fprintf(stderr, "Usage: %s %s <interface> [listen-port <port>] [fwmark <mark>] [private-key <file path>] [peer <base64 public key> [remove] [preshared-key <file path>] [endpoint <ip>:<port>] [persistent-keepalive <interval seconds>] [allowed-ips <ip1>/<cidr1>[,<ip2>/<cidr2>]...] ]...\n", PROG_NAME, argv[0]); 22*adf37648SKyle Evans return 1; 23*adf37648SKyle Evans } 24*adf37648SKyle Evans 25*adf37648SKyle Evans device = config_read_cmd(argv + 2, argc - 2); 26*adf37648SKyle Evans if (!device) 27*adf37648SKyle Evans goto cleanup; 28*adf37648SKyle Evans strncpy(device->name, argv[1], IFNAMSIZ - 1); 29*adf37648SKyle Evans device->name[IFNAMSIZ - 1] = '\0'; 30*adf37648SKyle Evans 31*adf37648SKyle Evans if (ipc_set_device(device) != 0) { 32*adf37648SKyle Evans perror("Unable to modify interface"); 33*adf37648SKyle Evans goto cleanup; 34*adf37648SKyle Evans } 35*adf37648SKyle Evans 36*adf37648SKyle Evans ret = 0; 37*adf37648SKyle Evans 38*adf37648SKyle Evans cleanup: 39*adf37648SKyle Evans free_wgdevice(device); 40*adf37648SKyle Evans return ret; 41*adf37648SKyle Evans } 42