Add option losslimit in the set command

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2019-10-23 13:52:40 +00:00
parent 8bd936929e
commit 5e0900c8ee
5 changed files with 31 additions and 2 deletions

2
argz

Submodule argz updated: ff7bc660e2...e2284424d7

2
mud

Submodule mud updated: d0dc6076c8...94ae912138

View File

@@ -362,6 +362,10 @@ gt_bind(int argc, char **argv)
if (mud_set_time_tolerance(mud, req.ms)) if (mud_set_time_tolerance(mud, req.ms))
res.ret = errno; res.ret = errno;
break; break;
case CTL_LOSSLIMIT:
if (mud_set_loss_limit(mud, req.percent))
res.ret = errno;
break;
case CTL_STATUS: case CTL_STATUS:
memcpy(res.status.tun_name, tun_name, sizeof(tun_name)); // XXX memcpy(res.status.tun_name, tun_name, sizeof(tun_name)); // XXX
res.status.pid = pid; res.status.pid = pid;

View File

@@ -15,6 +15,7 @@ enum ctl_type {
CTL_TC, CTL_TC,
CTL_KXTIMEOUT, CTL_KXTIMEOUT,
CTL_TIMETOLERANCE, CTL_TIMETOLERANCE,
CTL_LOSSLIMIT,
CTL_PATH_STATUS, CTL_PATH_STATUS,
CTL_BAD, CTL_BAD,
}; };
@@ -42,6 +43,7 @@ struct ctl_msg {
size_t mtu; size_t mtu;
int tc; int tc;
unsigned long ms; unsigned long ms;
unsigned percent;
}; };
}; };

View File

@@ -63,6 +63,24 @@ gt_set_timetolerance(int fd, unsigned long ms)
return 0; 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 static int
gt_set_tc(int fd, int tc) gt_set_tc(int fd, int tc)
{ {
@@ -115,6 +133,7 @@ gt_set(int argc, char **argv)
int tc; int tc;
unsigned long kxtimeout; unsigned long kxtimeout;
unsigned long timetolerance; unsigned long timetolerance;
unsigned losslimit;
struct argz pathz[] = { struct argz pathz[] = {
{"dev", "NAME", &dev, argz_str}, {"dev", "NAME", &dev, argz_str},
@@ -122,6 +141,7 @@ gt_set(int argc, char **argv)
{"tc", "CS|AF|EF", &tc, gt_argz_tc}, {"tc", "CS|AF|EF", &tc, gt_argz_tc},
{"kxtimeout", "SECONDS", &kxtimeout, argz_time}, {"kxtimeout", "SECONDS", &kxtimeout, argz_time},
{"timetolerance", "SECONDS", &timetolerance, argz_time}, {"timetolerance", "SECONDS", &timetolerance, argz_time},
{"losslimit", "PERCENT", &losslimit, argz_percent},
{NULL}}; {NULL}};
if (argz(pathz, argc, argv)) if (argz(pathz, argc, argv))
@@ -160,6 +180,9 @@ gt_set(int argc, char **argv)
if (argz_is_set(pathz, "timetolerance")) if (argz_is_set(pathz, "timetolerance"))
ret |= gt_set_timetolerance(fd, timetolerance); ret |= gt_set_timetolerance(fd, timetolerance);
if (argz_is_set(pathz, "losslimit"))
ret |= gt_set_losslimit(fd, losslimit);
ctl_delete(fd); ctl_delete(fd);
return ret; return ret;