X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Ftincctl.c;h=632e7ac6efa8720197e7623b69b429087c49f528;hp=ede186ad4be94c1000c300cfee183ee4f4891b71;hb=55ef2f806f9840103bceb472564a711b22e73d58;hpb=f12c36afd5293ddbecccf13f36edb8d36e56f040 diff --git a/src/tincctl.c b/src/tincctl.c index ede186ad..632e7ac6 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -92,6 +92,7 @@ static void usage(bool status) { " debug N Set debug level\n" " retry Retry all outgoing connections\n" " reload Partial reload of configuration\n" + " disconnect NODE Close meta connection with NODE\n" "\n"); printf("Report bugs to tinc@tinc-vpn.org.\n"); } @@ -595,6 +596,36 @@ int main(int argc, char *argv[], char *envp[]) { return 0; } + if(!strcasecmp(argv[optind], "connect")) { + if(argc != optind + 2) { + fprintf(stderr, "Invalid arguments.\n"); + return 1; + } + char *name = argv[optind + 1]; + + sendline(fd, "%d %d %s", CONTROL, REQ_CONNECT, name); + if(!recvline(fd, line, sizeof line) || sscanf(line, "%d %d %d", &code, &req, &result) != 3 || code != CONTROL || req != REQ_CONNECT || result) { + fprintf(stderr, "Could not connect to %s\n", name); + return 1; + } + return 0; + } + + if(!strcasecmp(argv[optind], "disconnect")) { + if(argc != optind + 2) { + fprintf(stderr, "Invalid arguments.\n"); + return 1; + } + char *name = argv[optind + 1]; + + sendline(fd, "%d %d %s", CONTROL, REQ_DISCONNECT, name); + if(!recvline(fd, line, sizeof line) || sscanf(line, "%d %d %d", &code, &req, &result) != 3 || code != CONTROL || req != REQ_DISCONNECT || result) { + fprintf(stderr, "Could not disconnect %s\n", name); + return 1; + } + return 0; + } + fprintf(stderr, "Unknown command `%s'.\n", argv[optind]); usage(true);