# Copyright (c) 2008,2009 Citrix Systems, Inc.
-# Copyright (c) 2009,2010 Nicira Networks.
+# Copyright (c) 2009,2010,2011 Nicira Networks.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
"downdelay": "200",
"updelay": "31000",
"use_carrier": "1",
+ "hashing-algorithm": "src_mac",
}
# override defaults with values from other-config whose keys
# being with "bond-"
key.startswith("bond-"), oc.items())
overrides = map(lambda (key,val): (key[5:], val), overrides)
bond_options.update(overrides)
+ mode = None
+ halgo = None
argv += ['--', 'set', 'Port', interface]
if pifrec['MAC'] != "":
except ValueError:
log("bridge %s has invalid %s '%s'" % (bridge, name, value))
elif name == "mode":
-
- if val in ['balance-slb', 'active-backup']:
- argv += ['bond_%s=%s' % (name, val)]
- else:
- log("bridge %s has invalid %s '%s'" % (bridge, name, val))
+ mode = val
+ elif name == "hashing-algorithm":
+ halgo = val
else:
# Pass other bond options into other_config.
argv += ["other-config:%s=%s" % (vsctl_escape("bond-%s" % name),
vsctl_escape(val))]
+
+ if mode == 'lacp':
+ argv += ['lacp=active']
+
+ if halgo == 'src_mac':
+ argv += ['bond_mode=balance-slb']
+ elif halgo == "tcpudp_ports":
+ argv += ['bond_mode=balance-tcp']
+ else:
+ log("bridge %s has invalid bond-hashing-algorithm '%s'" % (bridge, halgo))
+ argv += ['bond_mode=balance-slb']
+ elif mode in ['balance-slb', 'active-backup']:
+ argv += ['lacp=off', 'bond_mode=%s' % mode]
+ else:
+ log("bridge %s has invalid bond-mode '%s'" % (bridge, mode))
+ argv += ['lacp=off', 'bond_mode=balance-slb']
+
return argv
def datapath_deconfigure_bond(netdev):
pool = db().get_pool_record()
network = db().get_network_by_bridge(bridge)
+ network_rec = None
fail_mode = None
valid_fail_modes = ['standalone', 'secure']
vsctl_argv += ['--', 'set', 'Bridge', bridge, 'fail_mode=%s' % fail_mode]
+ if network_rec:
+ dib = network_rec['other_config'].get('vswitch-disable-in-band')
+ if not dib:
+ vsctl_argv += ['--', 'remove', 'Bridge', bridge, 'other_config', 'disable-in-band']
+ elif dib in ['true', 'false']:
+ vsctl_argv += ['--', 'set', 'Bridge', bridge, 'other_config:disable-in-band=' + dib]
+ else:
+ log('"' + dib + '"' "isn't a valid setting for other_config:disable-in-band on " + bridge)
+
vsctl_argv += set_br_external_ids(pif)
vsctl_argv += ['## done configuring datapath %s' % bridge]
dpname = pif_bridge_name(self._dp)
if pif_is_vlan(self._pif):
- # XXX this is only needed on XS5.5, because XAPI misguidedly
- # creates the fake bridge (via bridge ioctl) before it calls us.
+ # In some cases XAPI may misguidedly leave an instance of
+ # 'bridge' which should be deleted.
vsctl_argv += ['--', '--if-exists', 'del-br', bridge]
# configure_datapath() set up the underlying datapath bridge.
netdev_up(dev, mtu)
- settings, offload = ethtool_settings(oc)
+ settings, offload = ethtool_settings(oc, PIF_OTHERCONFIG_DEFAULTS)
if len(settings):
run_command(['/sbin/ethtool', '-s', dev] + settings)
if len(offload):
bridge = pif_bridge_name(dp)
- #nw = db().get_pif_record(self._pif)['network']
- #nwrec = db().get_network_record(nw)
- #vsctl_argv += ['# deconfigure network-uuids']
- #vsctl_argv += ['--del-entry=bridge.%s.network-uuids=%s' % (bridge,nwrec['uuid'])]
-
log("deconfigure ipdev %s on %s" % (ipdev,bridge))
vsctl_argv += ["# deconfigure ipdev %s" % ipdev]
vsctl_argv += datapath_deconfigure_ipdev(ipdev)