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
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)
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)))
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
"""
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
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):
"""