]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addons: bridge: set bridge mtu on device creation
authorJulien Fortin <julien@cumulusnetworks.com>
Mon, 3 Jun 2019 11:18:24 +0000 (19:18 +0800)
committerJulien Fortin <julien@cumulusnetworks.com>
Thu, 6 Jun 2019 11:18:29 +0000 (19:18 +0800)
Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
ifupdown2/addons/bridge.py
ifupdown2/ifupdown/netlink.py
ifupdown2/nlmanager/nlmanager.py

index 5d8ae2fed90950479324d293cab123ab0a31a19b..527740dae5a9ec09f9ed22d43e25fc424e17a833 100644 (file)
@@ -2043,6 +2043,24 @@ class bridge(moduleBase):
                 self.logger.debug('(cache %s)' % cached_ifla_brport_group_fwd_maskhi)
             brports_ifla_info_slave_data[brport_name][Link.IFLA_BRPORT_GROUP_FWD_MASKHI] = ifla_brport_group_fwd_maskhi
 
+    def get_bridge_mtu(self, ifaceobj):
+        user_config_mtu = ifaceobj.get_attr_value_first("mtu")
+
+        if not user_config_mtu:
+            user_config_mtu = policymanager.policymanager_api.get_attr_default(
+                module_name=self.__class__.__name__,
+                attr="mtu"
+            )
+
+        try:
+            if user_config_mtu:
+                mtu = int(user_config_mtu)
+                self.logger.info("%s: set bridge mtu %s" % (ifaceobj.name, mtu))
+                return mtu
+        except Exception as e:
+            self.logger.warning("%s: invalid bridge mtu %s: %s" % (ifaceobj.name, user_config_mtu, str(e)))
+        return 0
+
     def up_bridge(self, ifaceobj, ifaceobj_getfunc):
         ifname = ifaceobj.name
 
@@ -2054,7 +2072,7 @@ class bridge(moduleBase):
             link_just_created = not link_exists
 
         if not link_exists:
-            netlink.link_add_bridge(ifname)
+            netlink.link_add_bridge(ifname, self.get_bridge_mtu(ifaceobj))
         else:
             self.logger.info('%s: bridge already exists' % ifname)
 
index 65dacdde87c16ccfbd64c6754656a66d91ec8d12..f5aef0f7ce5dadf685095d40833fdb1e041dc3f2 100644 (file)
@@ -242,11 +242,11 @@ class Netlink(utilsBase):
             raise Exception('netlink: cannot set link %s protodown %s: %s'
                             % (ifacename, state, str(e)))
 
-    def link_add_bridge(self, ifname):
+    def link_add_bridge(self, ifname, mtu=None):
         self.logger.info('%s: netlink: ip link add %s type bridge' % (ifname, ifname))
         if ifupdownflags.flags.DRYRUN: return
         try:
-            return self._nlmanager_api.link_add_bridge(ifname)
+            return self._nlmanager_api.link_add_bridge(ifname, mtu=mtu)
         except Exception as e:
             raise Exception('netlink: cannot create bridge %s: %s' % (ifname, str(e)))
 
index 52f9f62ce6f9c09c2fc834f654fc2e1ff5fb2015..c6279969eaa4c47d149a22006d758dbb8933a864 100644 (file)
@@ -637,7 +637,7 @@ class NetlinkManager(object):
         link.build_message(self.sequence.next(), self.pid)
         return self.tx_nlpacket_get_response(link)
 
-    def _link_add(self, ifindex, ifname, kind, ifla_info_data):
+    def _link_add(self, ifindex, ifname, kind, ifla_info_data, mtu=None):
         """
         Build and TX a RTM_NEWLINK message to add the desired interface
         """
@@ -651,6 +651,9 @@ class NetlinkManager(object):
         if ifindex:
             link.add_attribute(Link.IFLA_LINK, ifindex)
 
+        if mtu:
+            link.add_attribute(Link.IFLA_MTU, mtu)
+
         link.add_attribute(Link.IFLA_LINKINFO, {
             Link.IFLA_INFO_KIND: kind,
             Link.IFLA_INFO_DATA: ifla_info_data
@@ -658,8 +661,8 @@ class NetlinkManager(object):
         link.build_message(self.sequence.next(), self.pid)
         return self.tx_nlpacket_get_response(link)
 
-    def link_add_bridge(self, ifname, ifla_info_data={}):
-        return self._link_add(ifindex=None, ifname=ifname, kind='bridge', ifla_info_data=ifla_info_data)
+    def link_add_bridge(self, ifname, ifla_info_data={}, mtu=None):
+        return self._link_add(ifindex=None, ifname=ifname, kind='bridge', ifla_info_data=ifla_info_data, mtu=mtu)
 
     def link_add_vlan(self, ifindex, ifname, vlanid, vlan_protocol=None):
         """