diff --git a/src/bind.c b/src/bind.c index 43b8c59..53e123d 100644 --- a/src/bind.c +++ b/src/bind.c @@ -267,7 +267,7 @@ gt_bind(int argc, char **argv) } break; case CTL_MTU: - mud_set_mtu(mud, (size_t)req.mtu); + mud_set_mtu(mud, req.mtu); mtu = gt_setup_mtu(mud, tun_name); res.mtu = mtu; break; @@ -275,12 +275,16 @@ gt_bind(int argc, char **argv) if (mud_set_tc(mud, req.tc)) res.ret = errno; break; + case CTL_KXTIMEOUT: + if (mud_set_keyx_timeout(mud, req.ms)) + res.ret = errno; + break; case CTL_TIMEOUT: - if (mud_set_send_timeout(mud, req.timeout)) + if (mud_set_send_timeout(mud, req.ms)) res.ret = errno; break; case CTL_TIMETOLERANCE: - if (mud_set_time_tolerance(mud, req.timetolerance)) + if (mud_set_time_tolerance(mud, req.ms)) res.ret = errno; break; case CTL_STATUS: diff --git a/src/ctl.h b/src/ctl.h index 2203a9d..bcac6b5 100644 --- a/src/ctl.h +++ b/src/ctl.h @@ -10,6 +10,7 @@ enum ctl_type { CTL_STATUS, CTL_MTU, CTL_TC, + CTL_KXTIMEOUT, CTL_TIMEOUT, CTL_TIMETOLERANCE, CTL_PATH_STATUS, @@ -30,10 +31,9 @@ struct ctl_msg { struct sockaddr_storage bind; struct sockaddr_storage peer; } status; - int mtu; + size_t mtu; int tc; - unsigned long timeout; - unsigned long timetolerance; + unsigned long ms; }; }; diff --git a/src/set.c b/src/set.c index ae00586..638ae41 100644 --- a/src/set.c +++ b/src/set.c @@ -22,17 +22,35 @@ gt_set_mtu(int fd, size_t mtu) return 1; } - printf("mtu set to %i\n", res.mtu); + printf("mtu set to %zu\n", res.mtu); return 0; } static int -gt_set_timeout(int fd, unsigned long timeout) +gt_set_kxtimeout(int fd, unsigned long ms) +{ + struct ctl_msg res, req = { + .type = CTL_KXTIMEOUT, + .ms = ms, + }; + + int ret = ctl_reply(fd, &res, &req); + + if (ret) { + perror("set kxtimeout"); + return 1; + } + + return 0; +} + +static int +gt_set_timeout(int fd, unsigned long ms) { struct ctl_msg res, req = { .type = CTL_TIMEOUT, - .timeout = timeout, + .ms = ms, }; int ret = ctl_reply(fd, &res, &req); @@ -46,11 +64,11 @@ gt_set_timeout(int fd, unsigned long timeout) } static int -gt_set_timetolerance(int fd, unsigned long timetolerance) +gt_set_timetolerance(int fd, unsigned long ms) { struct ctl_msg res, req = { .type = CTL_TIMETOLERANCE, - .timetolerance = timetolerance, + .ms = ms, }; int ret = ctl_reply(fd, &res, &req); @@ -113,13 +131,15 @@ gt_set(int argc, char **argv) const char *dev = NULL; size_t mtu; int tc; - unsigned long timetolerance; + unsigned long kxtimeout; unsigned long timeout; + unsigned long timetolerance; struct argz pathz[] = { {"dev", "NAME", &dev, argz_str}, {"mtu", "BYTES", &mtu, argz_bytes}, {"tc", "CS|AF|EF", &tc, gt_argz_tc}, + {"kxtimeout", "SECONDS", &kxtimeout, argz_time}, {"timeout", "SECONDS", &timeout, argz_time}, {"timetolerance", "SECONDS", &timetolerance, argz_time}, {NULL}}; @@ -142,6 +162,9 @@ gt_set(int argc, char **argv) if (argz_is_set(pathz, "tc")) ret |= gt_set_tc(fd, tc); + if (argz_is_set(pathz, "kxtimeout")) + ret |= gt_set_kxtimeout(fd, kxtimeout); + if (argz_is_set(pathz, "timeout")) ret |= gt_set_timeout(fd, timeout);