From 5e0900c8ee13f8f067f06a99aeee48381f3d4735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Gallou=C3=ABt?= Date: Wed, 23 Oct 2019 13:52:40 +0000 Subject: [PATCH] Add option losslimit in the set command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Adrien Gallouët --- argz | 2 +- mud | 2 +- src/bind.c | 4 ++++ src/ctl.h | 2 ++ src/set.c | 23 +++++++++++++++++++++++ 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/argz b/argz index ff7bc66..e228442 160000 --- a/argz +++ b/argz @@ -1 +1 @@ -Subproject commit ff7bc660e29cb8f81fbc7d0b2b8f356c7f351e8e +Subproject commit e2284424d7747e1103c28c65277b8e75de133581 diff --git a/mud b/mud index d0dc607..94ae912 160000 --- a/mud +++ b/mud @@ -1 +1 @@ -Subproject commit d0dc6076c894ba5038a70b2e2960760899bd2393 +Subproject commit 94ae912138cd28e9485a09bab52c1fa098acbaa4 diff --git a/src/bind.c b/src/bind.c index 0c08fbe..b126b0a 100644 --- a/src/bind.c +++ b/src/bind.c @@ -362,6 +362,10 @@ gt_bind(int argc, char **argv) if (mud_set_time_tolerance(mud, req.ms)) res.ret = errno; break; + case CTL_LOSSLIMIT: + if (mud_set_loss_limit(mud, req.percent)) + res.ret = errno; + break; case CTL_STATUS: memcpy(res.status.tun_name, tun_name, sizeof(tun_name)); // XXX res.status.pid = pid; diff --git a/src/ctl.h b/src/ctl.h index c54bb76..291276e 100644 --- a/src/ctl.h +++ b/src/ctl.h @@ -15,6 +15,7 @@ enum ctl_type { CTL_TC, CTL_KXTIMEOUT, CTL_TIMETOLERANCE, + CTL_LOSSLIMIT, CTL_PATH_STATUS, CTL_BAD, }; @@ -42,6 +43,7 @@ struct ctl_msg { size_t mtu; int tc; unsigned long ms; + unsigned percent; }; }; diff --git a/src/set.c b/src/set.c index 0facdaa..c708d6f 100644 --- a/src/set.c +++ b/src/set.c @@ -63,6 +63,24 @@ gt_set_timetolerance(int fd, unsigned long ms) return 0; } +static int +gt_set_losslimit(int fd, unsigned percent) +{ + struct ctl_msg res, req = { + .type = CTL_LOSSLIMIT, + .percent = percent, + }; + + int ret = ctl_reply(fd, &res, &req); + + if (ret) { + perror("set losslimit"); + return 1; + } + + return 0; +} + static int gt_set_tc(int fd, int tc) { @@ -115,6 +133,7 @@ gt_set(int argc, char **argv) int tc; unsigned long kxtimeout; unsigned long timetolerance; + unsigned losslimit; struct argz pathz[] = { {"dev", "NAME", &dev, argz_str}, @@ -122,6 +141,7 @@ gt_set(int argc, char **argv) {"tc", "CS|AF|EF", &tc, gt_argz_tc}, {"kxtimeout", "SECONDS", &kxtimeout, argz_time}, {"timetolerance", "SECONDS", &timetolerance, argz_time}, + {"losslimit", "PERCENT", &losslimit, argz_percent}, {NULL}}; if (argz(pathz, argc, argv)) @@ -160,6 +180,9 @@ gt_set(int argc, char **argv) if (argz_is_set(pathz, "timetolerance")) ret |= gt_set_timetolerance(fd, timetolerance); + if (argz_is_set(pathz, "losslimit")) + ret |= gt_set_losslimit(fd, losslimit); + ctl_delete(fd); return ret;