]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: honor MTUBytes= setting
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 15 May 2019 07:02:06 +0000 (16:02 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 16 May 2019 02:47:41 +0000 (11:47 +0900)
Closes #12552.

src/network/networkd-dhcp4.c
src/network/networkd-link.c
src/network/networkd-link.h
src/network/networkd-network.c
src/network/networkd-network.h

index 81c694822c11c7b896a3241c6b8777084088b34b..7907988a9bb9937c41f9c4411bee2f4df6c52987 100644 (file)
@@ -261,7 +261,7 @@ static int dhcp_lease_lost(Link *link) {
 
                 r = sd_dhcp_lease_get_mtu(link->dhcp_lease, &mtu);
                 if (r >= 0 && link->original_mtu != mtu) {
-                        r = link_set_mtu(link, link->original_mtu, true);
+                        r = link_set_mtu(link, link->original_mtu);
                         if (r < 0) {
                                 log_link_warning(link,
                                                  "DHCP error: could not reset MTU");
@@ -454,7 +454,7 @@ static int dhcp_lease_acquired(sd_dhcp_client *client, Link *link) {
 
                 r = sd_dhcp_lease_get_mtu(lease, &mtu);
                 if (r >= 0) {
-                        r = link_set_mtu(link, mtu, true);
+                        r = link_set_mtu(link, mtu);
                         if (r < 0)
                                 log_link_error_errno(link, r, "Failed to set MTU to %" PRIu16 ": %m", mtu);
                 }
index cd1b0325e8e527fb1b6c5912f9f42ec913ba27ea..6c9a056d782965b943239463a79564ff64810342 100644 (file)
@@ -1383,7 +1383,7 @@ static int set_mtu_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link)
         return 1;
 }
 
-int link_set_mtu(Link *link, uint32_t mtu, bool force) {
+int link_set_mtu(Link *link, uint32_t mtu) {
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
         int r;
 
@@ -1394,7 +1394,7 @@ int link_set_mtu(Link *link, uint32_t mtu, bool force) {
         if (mtu == 0 || link->setting_mtu)
                 return 0;
 
-        if (force ? link->mtu == mtu : link->mtu >= mtu)
+        if (link->mtu == mtu)
                 return 0;
 
         log_link_debug(link, "Setting MTU: %" PRIu32, mtu);
@@ -2634,7 +2634,7 @@ static int link_configure(Link *link) {
                         return r;
         }
 
-        r = link_set_mtu(link, link->network->mtu, link->network->mtu_is_set);
+        r = link_set_mtu(link, link->network->mtu);
         if (r < 0)
                 return r;
 
index e1f4b23a5ac01e9b803d045d6d9021156b2f1f0d..cc4cd07075509855fb0eab9aa2475c28dcbea2d7 100644 (file)
@@ -158,7 +158,7 @@ bool link_has_carrier(Link *link);
 
 int link_ipv6ll_gained(Link *link, const struct in6_addr *address);
 
-int link_set_mtu(Link *link, uint32_t mtu, bool force);
+int link_set_mtu(Link *link, uint32_t mtu);
 
 int ipv4ll_configure(Link *link);
 bool link_ipv4ll_enabled(Link *link);
index 56a45379c164936a4c8c6c6e205c0e1c256b9476..81d2b974edf98a833e35a4651b7f0e850c5cbf2c 100644 (file)
@@ -143,24 +143,6 @@ static int network_resolve_stacked_netdevs(Network *network) {
         return 0;
 }
 
-static uint32_t network_get_stacked_netdevs_mtu(Network *network) {
-        uint32_t mtu = 0;
-        NetDev *dev;
-        Iterator i;
-
-        HASHMAP_FOREACH(dev, network->stacked_netdevs, i)
-                if (dev->kind == NETDEV_KIND_VLAN && dev->mtu > 0)
-                        /* See vlan_dev_change_mtu() in kernel.
-                         * Note that the additional 4bytes may not be necessary for all devices. */
-                        mtu = MAX(mtu, dev->mtu + 4);
-
-                else if (dev->kind == NETDEV_KIND_MACVLAN && dev->mtu > mtu)
-                        /* See macvlan_change_mtu() in kernel. */
-                        mtu = dev->mtu;
-
-        return mtu;
-}
-
 int network_verify(Network *network) {
         Address *address, *address_next;
         Route *route, *route_next;
@@ -169,7 +151,6 @@ int network_verify(Network *network) {
         AddressLabel *label, *label_next;
         Prefix *prefix, *prefix_next;
         RoutingPolicyRule *rule, *rule_next;
-        uint32_t mtu;
 
         assert(network);
         assert(network->filename);
@@ -252,16 +233,7 @@ int network_verify(Network *network) {
         if (network->ip_masquerade)
                 network->ip_forward |= ADDRESS_FAMILY_IPV4;
 
-        network->mtu_is_set = network->mtu > 0;
-        mtu = network_get_stacked_netdevs_mtu(network);
-        if (network->mtu < mtu) {
-                if (network->mtu_is_set)
-                        log_notice("%s: Bumping MTUBytes= from %"PRIu32" to %"PRIu32" because of stacked device",
-                                   network->filename, network->mtu, mtu);
-                network->mtu = mtu;
-        }
-
-        if (network->mtu_is_set && network->dhcp_use_mtu) {
+        if (network->mtu > 0 && network->dhcp_use_mtu) {
                 log_warning("%s: MTUBytes= in [Link] section and UseMTU= in [DHCP] section are set. "
                             "Disabling UseMTU=.", network->filename);
                 network->dhcp_use_mtu = false;
index d00062fe5999b55feb9f0d7bdab4cd9461b18908..702e864eafa503cfaf8c7ed46b67a26b45b4153b 100644 (file)
@@ -218,7 +218,6 @@ struct Network {
 
         struct ether_addr *mac;
         uint32_t mtu;
-        bool mtu_is_set; /* Indicate MTUBytes= is specified. */
         int arp;
         int multicast;
         int allmulticast;