Add control CTL_PATH_STATUS
Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
22
src/bind.c
22
src/bind.c
@@ -288,6 +288,28 @@ gt_bind(int argc, char **argv)
|
|||||||
if (mud_set_state(mud, (struct sockaddr *)&req.path.addr, req.path.state))
|
if (mud_set_state(mud, (struct sockaddr *)&req.path.addr, req.path.state))
|
||||||
res.ret = errno;
|
res.ret = errno;
|
||||||
break;
|
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:
|
case CTL_MTU:
|
||||||
mud_set_mtu(mud, GT_MTU((size_t)req.mtu));
|
mud_set_mtu(mud, GT_MTU((size_t)req.mtu));
|
||||||
res.mtu = gt_setup_mtu(mud, tun_name);
|
res.mtu = gt_setup_mtu(mud, tun_name);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ enum ctl_type {
|
|||||||
CTL_MTU,
|
CTL_MTU,
|
||||||
CTL_TIMEOUT,
|
CTL_TIMEOUT,
|
||||||
CTL_TIMETOLERANCE,
|
CTL_TIMETOLERANCE,
|
||||||
|
CTL_PATH_STATUS,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ctl_msg {
|
struct ctl_msg {
|
||||||
@@ -21,6 +22,7 @@ struct ctl_msg {
|
|||||||
struct sockaddr_storage addr;
|
struct sockaddr_storage addr;
|
||||||
enum mud_state state;
|
enum mud_state state;
|
||||||
} path;
|
} path;
|
||||||
|
struct mud_path path_status;
|
||||||
struct {
|
struct {
|
||||||
size_t mtu;
|
size_t mtu;
|
||||||
int mtu_auto;
|
int mtu_auto;
|
||||||
|
|||||||
Reference in New Issue
Block a user