diff --git a/mud b/mud index 1aded8e..81b279b 160000 --- a/mud +++ b/mud @@ -1 +1 @@ -Subproject commit 1aded8ec296c7bc6e7de62a9cea3edacf7471fdd +Subproject commit 81b279b06005bc330cc805bde40b6d57d78f5e57 diff --git a/src/bind.c b/src/bind.c index ef22b95..b98a5bb 100644 --- a/src/bind.c +++ b/src/bind.c @@ -284,12 +284,8 @@ gt_bind(int argc, char **argv) switch (req.type) { case CTL_NONE: break; - case CTL_PATH_ADD: - if (mud_add_path(mud, (struct sockaddr *)&req.path_addr)) - res.ret = errno; - break; - case CTL_PATH_DEL: - if (mud_del_path(mud, (struct sockaddr *)&req.path_addr)) + case CTL_STATE: + if (mud_set_state(mud, (struct sockaddr *)&req.path.addr, req.path.state)) res.ret = errno; break; case CTL_MTU: diff --git a/src/ctl.h b/src/ctl.h index 09de687..f94df1b 100644 --- a/src/ctl.h +++ b/src/ctl.h @@ -1,11 +1,12 @@ #pragma once +#include "../mud/mud.h" + #include enum ctl_type { CTL_NONE = 0, - CTL_PATH_ADD, - CTL_PATH_DEL, + CTL_STATE, CTL_STATUS, CTL_MTU, CTL_TIMEOUT, @@ -16,7 +17,10 @@ struct ctl_msg { enum ctl_type type; int reply, ret; union { - struct sockaddr_storage path_addr; + struct { + struct sockaddr_storage addr; + enum mud_state state; + } path; struct { size_t mtu; int mtu_auto; diff --git a/src/path.c b/src/path.c index 70110cc..3c4a465 100644 --- a/src/path.c +++ b/src/path.c @@ -11,32 +11,25 @@ int gt_path(int argc, char **argv) { const char *dev = "tun0"; - struct sockaddr_storage addr = { 0 }; + + struct ctl_msg req = { + .type = CTL_STATE, + .path = {.state = MUD_UP}, + }, res = {0}; struct argz pathz[] = { - {NULL, "IPADDR", &addr, argz_addr}, + {NULL, "IPADDR", &req.path.addr, argz_addr}, {"dev", "NAME", &dev, argz_str}, - {"up|down", NULL, NULL, argz_option}, + {"up|backup|down", NULL, NULL, argz_option}, {NULL}}; if (argz(pathz, argc, argv)) return 1; - struct ctl_msg req, res = {0}; - - if (argz_is_set(pathz, "up")) { - req = (struct ctl_msg){ - .type = CTL_PATH_ADD, - .path_addr = addr, - }; + if (argz_is_set(pathz, "backup")) { + req.path.state = MUD_BACKUP; } else if (argz_is_set(pathz, "down")) { - req = (struct ctl_msg){ - .type = CTL_PATH_DEL, - .path_addr = addr, - }; - } else { - gt_log("nothing to do..\n"); - return 0; + req.path.state = MUD_DOWN; } int fd = ctl_create("/run/" PACKAGE_NAME, NULL);