# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1267008538 0
# Node ID a91df72fd4bf6329831d3efcae45a5ff55e3ba2e
# Parent 219104a041786d7274b15800de5c3efccf0c4f42
CP-1592: interface-reconfigure: Configure network device MTU from Network.MTU
field
With override via other-config:mtu field on specific objects in the datamodel.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
diff -r 219104a04178 -r a91df72fd4bf scripts/InterfaceReconfigure.py
--- a/scripts/InterfaceReconfigure.py Wed Feb 24 10:48:58 2010 +0000
+++ b/scripts/InterfaceReconfigure.py Wed Feb 24 10:48:58 2010 +0000
@@ -295,6 +295,7 @@
_NETWORK_ATTRS = { 'uuid': (_str_to_xml,_str_from_xml),
'bridge': (_str_to_xml,_str_from_xml),
+ 'MTU': (_str_to_xml,_str_from_xml),
'PIFs': (lambda x, p, t, v: _strlist_to_xml(x, p, 'PIFs',
'PIF', v),
lambda n: _strlist_from_xml(n, 'PIFs', 'PIF')),
'other_config': (lambda x, p, t, v: _otherconfig_to_xml(x,
p, v, _NETWORK_OTHERCONFIG_ATTRS),
@@ -595,13 +596,33 @@
log("Invalid value for ethtool-%s = %s. Must be
on|true|off|false." % (opt, val))
return settings,offload
-def mtu_setting(oc):
+# By default the MTU is taken from the Network.MTU setting for VIF,
+# PIF and Bridge. However it is possible to override this by using
+# {VIF,PIF,Network}.other-config:mtu.
+#
+# type parameter is a string describing the object that the oc parameter
+# is from. e.g. "PIF", "Network"
+def mtu_setting(nw, type, oc):
+ mtu = None
+
+ nwrec = db().get_network_record(nw)
+ if nwrec.has_key('MTU'):
+ mtu = nwrec['MTU']
+ else:
+ mtu = "1500"
+
if oc.has_key('mtu'):
+ log("Override Network.MTU setting on bridge %s from %s.MTU is %s" % \
+ (nwrec['bridge'], type, mtu))
+ mtu = oc['mtu']
+
+ if mtu is not None:
try:
- int(oc['mtu']) # Check that the value is an integer
- return oc['mtu']
+ int(mtu) # Check that the value is an integer
+ return mtu
except ValueError, x:
- log("Invalid value for mtu = %s" % oc['mtu'])
+ log("Invalid value for mtu = %s" % mtu)
+
return None
#
diff -r 219104a04178 -r a91df72fd4bf scripts/InterfaceReconfigureBridge.py
--- a/scripts/InterfaceReconfigureBridge.py Wed Feb 24 10:48:58 2010 +0000
+++ b/scripts/InterfaceReconfigureBridge.py Wed Feb 24 10:48:58 2010 +0000
@@ -295,6 +295,8 @@
pifrec = db().get_pif_record(pif)
+ log("Configuring physical interface %s" % pifrec['device'])
+
f = open_pif_ifcfg(pif)
f.write("TYPE=Ethernet\n")
@@ -306,7 +308,7 @@
if len(offload):
f.write("ETHTOOL_OFFLOAD_OPTS=\"%s\"\n" % str.join(" ", offload))
- mtu = mtu_setting(pifrec['other_config'])
+ mtu = mtu_setting(pifrec['network'], "PIF", pifrec['other_config'])
if mtu:
f.write("MTU=%s\n" % mtu)
@@ -364,7 +366,7 @@
if len(offload):
f.write("ETHTOOL_OFFLOAD_OPTS=\"%s\"\n" % str.join(" ", offload))
- mtu = mtu_setting(pifrec['other_config'])
+ mtu = mtu_setting(pifrec['network'], "Bond-PIF", pifrec['other_config'])
if mtu:
f.write("MTU=%s\n" % mtu)
@@ -414,7 +416,7 @@
if len(offload):
f.write("ETHTOOL_OFFLOAD_OPTS=\"%s\"\n" % str.join(" ", offload))
- mtu = mtu_setting(pifrec['other_config'])
+ mtu = mtu_setting(pifrec['network'], "VLAN-PIF", pifrec['other_config'])
if mtu:
f.write("MTU=%s\n" % mtu)
diff -r 219104a04178 -r a91df72fd4bf scripts/InterfaceReconfigureVswitch.py
--- a/scripts/InterfaceReconfigureVswitch.py Wed Feb 24 10:48:58 2010 +0000
+++ b/scripts/InterfaceReconfigureVswitch.py Wed Feb 24 10:48:58 2010 +0000
@@ -393,11 +393,12 @@
physical_devices = datapath_get_physical_pifs(self._dp)
for p in physical_devices:
- oc = db().get_pif_record(p)['other_config']
+ prec = db().get_pif_record(p)
+ oc = prec['other_config']
dev = pif_netdev_name(p)
- mtu = mtu_setting(oc)
+ mtu = mtu_setting(prec['network'], "PIF", oc)
netdev_up(dev, mtu)
diff -r 219104a04178 -r a91df72fd4bf scripts/interface-reconfigure
--- a/scripts/interface-reconfigure Wed Feb 24 10:48:58 2010 +0000
+++ b/scripts/interface-reconfigure Wed Feb 24 10:48:58 2010 +0000
@@ -284,7 +284,8 @@
"""
pifrec = db().get_pif_record(pif)
- nwrec = db().get_network_record(pifrec['network'])
+ nw = pifrec['network']
+ nwrec = db().get_network_record(nw)
ipdev = pif_ipdev_name(pif)
@@ -319,11 +320,12 @@
if len(offload):
f.write("ETHTOOL_OFFLOAD_OPTS=\"%s\"\n" % str.join(" ", offload))
- mtu = mtu_setting(nwrec['other_config'])
- if mtu:
- f.write("MTU=%s\n" % mtu)
+ ipdev_configure_static_routes(ipdev, nwrec['other_config'], f)
- ipdev_configure_static_routes(ipdev, nwrec['other_config'], f)
+ mtu = mtu_setting(nw, "Network", nwrec['other_config'])
+ if mtu:
+ f.write("MTU=%s\n" % mtu)
+
if pifrec.has_key('DNS') and pifrec['DNS'] != "":
ServerList = pifrec['DNS'].split(",")
diff -r 219104a04178 -r a91df72fd4bf scripts/vif
--- a/scripts/vif Wed Feb 24 10:48:58 2010 +0000
+++ b/scripts/vif Wed Feb 24 10:48:58 2010 +0000
@@ -62,7 +62,8 @@
{
local mtu=$(xenstore-read "${PRIVATE}/MTU" 2>/dev/null)
if [ $? -eq 0 -a -n "${mtu}" ]; then
- echo "${mtu}" > /sys/class/net/${dev}/mtu
+ logger -t scripts-vif "Setting ${dev} MTU ${mtu}"
+ ${IP} link set "${dev}" mtu ${mtu} || logger -t scripts-vif "Failed to
ip link set ${dev} mtu ${mtu}. Error code $?"
fi
}
_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
|