kernel-netlink: Add global option to set MTU on installed routes

This commit is contained in:
Tobias Brunner
2014-09-12 10:13:30 +02:00
parent c6e8b5dc2c
commit c1adf7e0c4
2 changed files with 22 additions and 0 deletions
+3
View File
@@ -7,6 +7,9 @@ charon.plugins.kernel-netlink.fwmark =
inverts the meaning (i.e. the rule only applies to packets that don't match inverts the meaning (i.e. the rule only applies to packets that don't match
the mark). the mark).
charon.plugins.kernel-netlink.mtu = 0
MTU to set on installed routes, 0 to disable.
charon.plugins.kernel-netlink.roam_events = yes charon.plugins.kernel-netlink.roam_events = yes
Whether to trigger roam events when interfaces, addresses or routes change. Whether to trigger roam events when interfaces, addresses or routes change.
@@ -478,6 +478,11 @@ struct private_kernel_netlink_net_t {
* list with routing tables to be excluded from route lookup * list with routing tables to be excluded from route lookup
*/ */
linked_list_t *rt_exclude; linked_list_t *rt_exclude;
/**
* MTU to set on installed routes
*/
u_int32_t mtu;
}; };
/** /**
@@ -2055,6 +2060,7 @@ static status_t manage_srcroute(private_kernel_netlink_net_t *this,
netlink_buf_t request; netlink_buf_t request;
struct nlmsghdr *hdr; struct nlmsghdr *hdr;
struct rtmsg *msg; struct rtmsg *msg;
struct rtattr *rta;
int ifindex; int ifindex;
chunk_t chunk; chunk_t chunk;
@@ -2107,6 +2113,17 @@ static status_t manage_srcroute(private_kernel_netlink_net_t *this,
chunk.len = sizeof(ifindex); chunk.len = sizeof(ifindex);
netlink_add_attribute(hdr, RTA_OIF, chunk, sizeof(request)); netlink_add_attribute(hdr, RTA_OIF, chunk, sizeof(request));
if (this->mtu)
{
chunk = chunk_alloca(RTA_LENGTH(sizeof(struct rtattr) +
sizeof(u_int32_t)));
rta = (struct rtattr*)chunk.ptr;
rta->rta_type = RTAX_MTU;
rta->rta_len = chunk.len;
memcpy(RTA_DATA(rta), &this->mtu, sizeof(u_int32_t));
netlink_add_attribute(hdr, RTA_METRICS, chunk, sizeof(request));
}
return this->socket->send_ack(this->socket, hdr); return this->socket->send_ack(this->socket, hdr);
} }
@@ -2466,6 +2483,8 @@ kernel_netlink_net_t *kernel_netlink_net_create()
"%s.prefer_temporary_addrs", FALSE, lib->ns), "%s.prefer_temporary_addrs", FALSE, lib->ns),
.roam_events = lib->settings->get_bool(lib->settings, .roam_events = lib->settings->get_bool(lib->settings,
"%s.plugins.kernel-netlink.roam_events", TRUE, lib->ns), "%s.plugins.kernel-netlink.roam_events", TRUE, lib->ns),
.mtu = lib->settings->get_int(lib->settings,
"%s.plugins.kernel-netlink.mtu", 0, lib->ns),
); );
timerclear(&this->last_route_reinstall); timerclear(&this->last_route_reinstall);
timerclear(&this->next_roam); timerclear(&this->next_roam);