mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-28 11:55:23 +03:00
networkd: Unify set MTU
Now the setting MTU is embedded into the link_up message which makes it incapable of setting MTU if link is up. MTU can be set while Link is up. Closes #9254
This commit is contained in:
parent
aac5ece3b2
commit
44b598a1c9
@ -1307,6 +1307,24 @@ int link_set_mtu(Link *link, uint32_t mtu) {
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not allocate RTM_SETLINK message: %m");
|
||||
|
||||
/* If IPv6 not configured (no static IPv6 address and IPv6LL autoconfiguration is disabled)
|
||||
for this interface, or if it is a bridge slave, then disable IPv6 else enable it. */
|
||||
(void) link_enable_ipv6(link);
|
||||
|
||||
/* IPv6 protocol requires a minimum MTU of IPV6_MTU_MIN(1280) bytes
|
||||
on the interface. Bump up MTU bytes to IPV6_MTU_MIN. */
|
||||
if (link_ipv6_enabled(link) && link->network->mtu < IPV6_MIN_MTU) {
|
||||
|
||||
log_link_warning(link, "Bumping MTU to " STRINGIFY(IPV6_MIN_MTU) ", as "
|
||||
"IPv6 is requested and requires a minimum MTU of " STRINGIFY(IPV6_MIN_MTU) " bytes: %m");
|
||||
|
||||
link->network->mtu = IPV6_MIN_MTU;
|
||||
}
|
||||
|
||||
r = sd_netlink_message_append_u32(req, IFLA_MTU, link->network->mtu);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not set MTU: %m");
|
||||
|
||||
r = sd_netlink_message_append_u32(req, IFLA_MTU, mtu);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not append MTU: %m");
|
||||
@ -1774,26 +1792,6 @@ int link_up(Link *link) {
|
||||
return log_link_error_errno(link, r, "Could not set MAC address: %m");
|
||||
}
|
||||
|
||||
/* If IPv6 not configured (no static IPv6 address and IPv6LL autoconfiguration is disabled)
|
||||
for this interface, or if it is a bridge slave, then disable IPv6 else enable it. */
|
||||
(void) link_enable_ipv6(link);
|
||||
|
||||
if (link->network->mtu != 0) {
|
||||
/* IPv6 protocol requires a minimum MTU of IPV6_MTU_MIN(1280) bytes
|
||||
on the interface. Bump up MTU bytes to IPV6_MTU_MIN. */
|
||||
if (link_ipv6_enabled(link) && link->network->mtu < IPV6_MIN_MTU) {
|
||||
|
||||
log_link_warning(link, "Bumping MTU to " STRINGIFY(IPV6_MIN_MTU) ", as "
|
||||
"IPv6 is requested and requires a minimum MTU of " STRINGIFY(IPV6_MIN_MTU) " bytes: %m");
|
||||
|
||||
link->network->mtu = IPV6_MIN_MTU;
|
||||
}
|
||||
|
||||
r = sd_netlink_message_append_u32(req, IFLA_MTU, link->network->mtu);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not set MTU: %m");
|
||||
}
|
||||
|
||||
r = sd_netlink_message_open_container(req, IFLA_AF_SPEC);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not open IFLA_AF_SPEC container: %m");
|
||||
@ -2867,6 +2865,12 @@ static int link_configure(Link *link) {
|
||||
return r;
|
||||
}
|
||||
|
||||
if (link->network->mtu > 0) {
|
||||
r = link_set_mtu(link, link->network->mtu);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (link_has_carrier(link) || link->network->configure_without_carrier) {
|
||||
r = link_acquire_conf(link);
|
||||
if (r < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user