diff options
Diffstat (limited to 'wg_dynamic_server.c')
-rw-r--r-- | wg_dynamic_server.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/wg_dynamic_server.c b/wg_dynamic_server.c index dcc7737..75bf3af 100644 --- a/wg_dynamic_server.c +++ b/wg_dynamic_server.c @@ -7,6 +7,7 @@ #include <stdlib.h> #include <stdio.h> +#include <string.h> const char *PROG_NAME; @@ -17,6 +18,10 @@ static void show_usage() int main(int argc, char *argv[]) { + const char *iface; + int sock; + int ret; + PROG_NAME = argv[0]; if (argc == 1) { @@ -24,10 +29,25 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } - if (setup_server(argv[1]) < 0) { - perror("error setting up server"); + iface = argv[1]; + + if (!is_wg_up_on_iface(iface)) { + fprintf(stderr, "no such wireguard iface %s\n", iface); + return EXIT_FAILURE; + } + + if ((sock = setup_server(argv[1])) < 0) { + fprintf(stderr, "error setting up server: %s\n", + strerror(-sock)); + return EXIT_FAILURE; + } + + if ((ret = handle_connections(sock)) < 0) { + fprintf(stderr, "error while handling connections: %s\n", + strerror(-ret)); return EXIT_FAILURE; } - return EXIT_SUCCESS; + /* unreachable */ + return EXIT_FAILURE; } |