Add control CTL_PATH_STATUS

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2018-02-27 19:06:45 +00:00
parent 44dd8124b7
commit 44f75458d1
2 changed files with 24 additions and 0 deletions

View File

@@ -288,6 +288,28 @@ gt_bind(int argc, char **argv)
if (mud_set_state(mud, (struct sockaddr *)&req.path.addr, req.path.state))
res.ret = errno;
break;
case CTL_PATH_STATUS:
{
unsigned count = 0;
struct mud_path *paths = mud_get_paths(mud, &count);
if (!paths) {
res.ret = errno;
break;
}
res.ret = EAGAIN;
for (unsigned i = 0; i < count; i++) {
if (i && sendto(ctl_fd, &res, sizeof(res), 0,
(const struct sockaddr *)&ss, sl) == -1)
perror("sendto(ctl)");
memcpy(&res.path_status, &paths[i], sizeof(struct mud_path));
}
res.ret = 0;
}
break;
case CTL_MTU:
mud_set_mtu(mud, GT_MTU((size_t)req.mtu));
res.mtu = gt_setup_mtu(mud, tun_name);

View File

@@ -11,6 +11,7 @@ enum ctl_type {
CTL_MTU,
CTL_TIMEOUT,
CTL_TIMETOLERANCE,
CTL_PATH_STATUS,
};
struct ctl_msg {
@@ -21,6 +22,7 @@ struct ctl_msg {
struct sockaddr_storage addr;
enum mud_state state;
} path;
struct mud_path path_status;
struct {
size_t mtu;
int mtu_auto;