aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/set.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/set.c')
-rw-r--r--src/tools/set.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/tools/set.c b/src/tools/set.c
new file mode 100644
index 0000000..f85162d
--- /dev/null
+++ b/src/tools/set.c
@@ -0,0 +1,35 @@
+/* Copyright 2015-2016 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "subcommands.h"
+#include "config.h"
+#include "kernel.h"
+
+int set_main(int argc, char *argv[])
+{
+ struct wgdevice *device = NULL;
+ int ret = 1;
+
+ if (argc < 3) {
+ fprintf(stderr, "Usage: %s %s <interface> [listen-port <port>] [private-key <file path>] [peer <base64 public key> [remove] [endpoint <ip>:<port>] [allowed-ips <ip1>/<cidr1>[,<ip2>/<cidr2>]...] ]...\n", PROG_NAME, argv[0]);
+ return 1;
+ }
+
+ if (!config_read_cmd(&device, argv + 2, argc - 2))
+ goto cleanup;
+ strncpy(device->interface, argv[1], IFNAMSIZ - 1);
+ device->interface[IFNAMSIZ - 1] = 0;
+
+ if (kernel_set_device(device) != 0) {
+ perror("Unable to set device");
+ goto cleanup;
+ }
+
+ ret = 0;
+
+cleanup:
+ free(device);
+ return ret;
+}