Ben Pfaff [Fri, 23 Oct 2009 00:43:28 +0000 (17:43 -0700)]
Merge "citrix" into "master".
This merge took a little bit of care due to two issues:
- Crossport of "interface-reconfigure" fixes from master back to
citrix that had happened and needed to be canceled out of the merge.
- New script "refresh-xs-network-uuids" added on citrix branch that
needed to be moved from /root/vswitch/scripts to
/usr/share/vswitch/scripts.
Jesse Gross [Thu, 22 Oct 2009 18:40:04 +0000 (11:40 -0700)]
bridge: Eject NORMAL flows without a learning entry from datapath.
When revalidating NORMAL flows we consult the learning table, which
could be empty if a packet hasn't come to userspace in a while or we
just did a bridge flush. If there is no learning entry then existing
flows will begin flooding packets until a new flow is setup. The
problem is worse with bonding because we can receive one of the flooded
packets back on a bond slave and learn that port, causing us to send
traffic to the wrong location.
Jesse Gross [Wed, 21 Oct 2009 02:26:55 +0000 (19:26 -0700)]
bonding: Balance bond slaves based on ratio.
Previously when deciding whether to migrate a hash between slaves
we would never move it if it would cause more load on the new slave
than the old. This could lead to a situation where the slaves would
be imbalanced but no migration would occur since it would flip the
load. This will do the migration if it will decrease the ratio.
Bug NIC-49
Jesse Gross [Mon, 12 Oct 2009 20:09:51 +0000 (13:09 -0700)]
bonding: Drop unicast packets which have a different learned port.
Drop packets received on a bond port if we have learned a different
source port for that MAC. We were already doing this for multicast
packets but extend the logic to unicast packets as well since the
same situation can occur if the connected switch has not learned the
MAC address and is flooding. Otherwise vSwitch will learn the bond
port as the source of that MAC.
Bug #2167
Jesse Gross [Tue, 20 Oct 2009 03:14:31 +0000 (20:14 -0700)]
xen: Restore state files for VIF VLANs
A change on master to use ovs-vsctl instead of state files for VLANs
was ported to the citrix branch, which does not have ovs-vsctl. The
interface reconfigure portion, which does not store the state files
was ported but the vif-hotput script portion was not. This restores
interface reconfigure to again save the state files.
Bug #2187
Jesse Gross [Tue, 20 Oct 2009 01:40:11 +0000 (18:40 -0700)]
xen: Correctly write VLAN key in config file.
When adding the VLAN key the name of the vif was from a variable in
use on only the xs5.7 branch. This uses the correct variable name
for the master branch
Ben Pfaff [Fri, 16 Oct 2009 16:49:59 +0000 (09:49 -0700)]
ovs-vsctl: Add tests that adding duplicate bridges or ports fails.
Suggested-by: Reid Price <reid@nicira.com>
Ben Pfaff [Fri, 16 Oct 2009 16:42:21 +0000 (09:42 -0700)]
ovs-vsctl: Add the ability to perform multiple operations in a single run.
CC: Ian Campbell <Ian.Campbell@citrix.com>
Ben Pfaff [Fri, 16 Oct 2009 16:36:25 +0000 (09:36 -0700)]
ovs-vsctl: Refactor internals to increase flexibility.
This changes the interface of each of the command implementations, making
them take the configuration as an argument and return the output. This
will make it easier to support alternate output formats and to execute more
than one command per invocation (both happening in upcoming commits).
Ben Pfaff [Thu, 15 Oct 2009 19:47:05 +0000 (12:47 -0700)]
ovs-vsctl: Allow bridge name to be omitted from del-port command.
The 'bridge' argument to ovs-vsctl's del-port command is only supplied as
a form of error checking. Sometimes the name of the bridge isn't readily
available, so for such situations this commit allows the user to omit the
name of the bridge entirely.
CC: Ian Campbell <Ian.Campbell@citrix.com>
Ben Pfaff [Fri, 16 Oct 2009 16:26:20 +0000 (09:26 -0700)]
ovs-vsctl: Log changes to configuration file to syslog.
This feature, which has been in ovs-cfg-mod for some time as the "-c"
option, makes it much easier to see what changes ovs-vsctl actually makes
to ovs-vswitchd.conf.
CC: <Ian.Campbell@citrix.com>
Ben Pfaff [Thu, 15 Oct 2009 17:39:10 +0000 (10:39 -0700)]
Make sure that time advances in a daemon between calls to time_refresh().
Open vSwitch uses an interval timer signal to tell it that its cached idea
of the current time has expired. However, this didn't work in a daemon
detached from the foreground session (invoked with --detach) because a
child created with fork() does not inherit the parent's interval timer and
we did not re-set it after calling fork().
This commit fixes the problem by setting the interval timer back up after
calling fork() from daemonize().
This fix is based on code inspection (which was then verified to be correct
through testing). It may not fix any actual problems in practice, because
time_refresh() is called every time through the poll loop, and the poll
loop typically runs more quickly than the periodic timer fires (1 ms or so
average in ovs-vswitchd, vs. 100 ms timer interval).
Ben Pfaff [Mon, 12 Oct 2009 18:13:55 +0000 (11:13 -0700)]
datapath: Fix build with Linux 2.6.31.
Linux 2.6.31 breaks the network device functions pointers into a separate
"netdev_ops" structure, so we need to handle this case now too.
Ben Pfaff [Wed, 24 Jun 2009 21:58:57 +0000 (14:58 -0700)]
datapath: Ignore return value from rtnl_notify().
In Linux 2.6.30, the rtnl_notify() return type was changed from int to
void along with the following commit message:
This patch also modifies the rtnetlink code to ignore the return
value of rtnl_notify() in all callers. The function rtnl_notify()
(before this patch) returned the error of the unicast notification
which makes rtnl_set_sk_err() reports errors to all listeners. This
is not of any help since the origin of the change (the socket that
requested the echoing) notices the ENOBUFS error if the notification
fails and should resync itself.
Thus there's no point in checking the return value, even in older versions
of the kernel, and so this commit changes our code to ignore it, even
on older kernel versions. We also update the rtnl_notify() wrapper macros
to make the return type void on older kernel versions.
This has not been tested, just built.
Thanks to Mikio for spurring me to try building with Linux 2.6.29 and
2.6.30.
Ben Pfaff [Mon, 12 Oct 2009 17:34:38 +0000 (10:34 -0700)]
datapath: Fix warning on 64-bit builds.
Ben Pfaff [Mon, 12 Oct 2009 17:34:10 +0000 (10:34 -0700)]
datapath: Factor out code for getting and setting listen mask.
This fixes GCC warnings on 64-bit architectures caused by storing an "int"
in the "void *" f->private_data field.
Jesse Gross [Thu, 8 Oct 2009 19:31:03 +0000 (12:31 -0700)]
vlan: Compare vlan tags before implicit tagging when RSPANing.
We check that a packet is not sent out the on the in port on the
same VLAN when performing RSPAN. However, we were comparing the
vlan tag from a packet after implicit tagging with a tag from
before implicit tagging. This ensures that we always compare them
before such tagging.
Ben Pfaff [Fri, 9 Oct 2009 16:41:29 +0000 (09:41 -0700)]
datapath: Fix build with Centos 5.3 kernel.
Centos 5.3 backports more functions from later kernel versions to 2.6.18,
so the kernel version number is no longer a reliable way to check for these
functions. Thus, add a "configure" test for them.
Reported-by: Paulo Cravero <pcravero@as2594.net>
Ben Pfaff [Fri, 9 Oct 2009 16:44:47 +0000 (09:44 -0700)]
datapath: Add cpumask.h header wrapper to distribution.
This header was included in the Git tree but we failed to distribute it
as part of the tarball.
This problem was found by inspection. I am not aware of an actual problem
this fixes.
Ben Pfaff [Wed, 7 Oct 2009 19:07:27 +0000 (12:07 -0700)]
xenserver: Crossport "master" interface-reconfigure to "citrix".
This commit copies the interface-reconfigure script from "master" into
"citrix" and fixes up a few incompatibilities: the location of ovs-cfg-mod,
which in master is in /usr/bin and in citrix is in /root/vswitch/bin, and
the RPM spec file fragments needed to initialize the database cache.
The purpose of this commit is to obtain the bug fixes that have been
applied (mainly by Ian Campbell) to "master" but which are not in "citrix".
It's difficult to understand the changes from this commit alone. It is
more meaningful to compare the resulting files against those currently
on the master branch.
Jesse Gross [Fri, 14 Aug 2009 20:47:28 +0000 (13:47 -0700)]
ofproto: Make current packet counts more accurate.
When the stats for a currently active flow are requested this
ensures that the packets not handled by the kernel are counted
immediately. Before, these packets would only be counted once
the kernel flow expired and the counts were combined.
Jesse Gross [Thu, 8 Oct 2009 19:20:10 +0000 (12:20 -0700)]
bonding: Compare ports, not interfaces, for loop checks.
In order to avoid loops we check that the input and output ports
are not equal. When selecting mirror outputs for RSPAN we were
checking interfaces instead of ports. This lead to loops when
using RSPAN with bonded ports.
Bug #2118
Jean Tourrilhes [Thu, 8 Oct 2009 17:39:49 +0000 (10:39 -0700)]
ovs-ofctl: Fix use-after-free error in mod-flows command.
Jean Tourrilhes [Thu, 8 Oct 2009 17:37:43 +0000 (10:37 -0700)]
datapath: Fix validation of ODPAT_SET_VLAN_PCP actions.
The VLAN PCP mask is in the rightmost bits of the vlan_pcp member but we
were checking for it in its position in the VLAN tag field instead.
Slightly modified from Jean's original patch by adding and using the
VLAN_PCP_SHIFT macro.
Ben Pfaff [Wed, 7 Oct 2009 17:19:31 +0000 (10:19 -0700)]
xenserver: Fix ovs-vsctl in built RPM by defining /etc as sysconfdir.
By default, the "configure" script picks a sysconfdir of $prefix/etc,
which works out to /usr/etc in our case. That's wrong, of course--it
should be /etc--but we didn't notice until now because sysconfdir was
only used in ovs-vsctl, which in turn wasn't used at all on a XenServer
system until recently.
This bug is present on all branches, but it is only potentially visible
on "master" and "xs5.7", since only those have ovs-vsctl. It is only
actually visible on "xs5.7", since that is the only branch where the
system uses ovs-vsctl itself (from /etc/xensource/scripts/vif), but this
is being committed to master in case we start using ovs-vsctl there too.
Reported-by: Henrik Amren <henrik@nicira.com>
Justin Pettit [Tue, 6 Oct 2009 21:33:31 +0000 (14:33 -0700)]
Merge commit 'v0.90.6' into citrix
Justin Pettit [Tue, 6 Oct 2009 21:25:36 +0000 (14:25 -0700)]
Prepare for v0.90.6 release.
Justin Pettit [Tue, 6 Oct 2009 18:38:57 +0000 (11:38 -0700)]
xenserver: Fix dbcache location for xen-bugtool
I forgot to add my local changes to xen-bugtool that reflected the new
location for dbcache.
Justin Pettit [Tue, 6 Oct 2009 18:08:31 +0000 (11:08 -0700)]
Merge commit 'origin/citrix'
Justin Pettit [Tue, 6 Oct 2009 00:32:36 +0000 (17:32 -0700)]
xenserver: Include dbcache in xen-bugtool output
It has been pointed out that it would be useful to have a copy of the
dbcache file in the bug report. This adds that.
Bug #2106
Jesse Gross [Mon, 5 Oct 2009 20:25:19 +0000 (13:25 -0700)]
netflow: Increase maximum number of NetFlow records to 30.
NetFlow v5 allows up to 30 records per packet but we were incorrectly
limiting to 29. This corrects that and also uses the count of the
number of records in the header rather than the packet size since
it is easier to reason about.
Bug #2103
Ben Pfaff [Mon, 5 Oct 2009 17:29:07 +0000 (10:29 -0700)]
Merge "citrix" branch into "master.
Jesse Gross [Sat, 3 Oct 2009 01:08:05 +0000 (18:08 -0700)]
bonding: Update the link status on the bond fake interface.
Brings the fake bond interface up and down to match our notion of
whether the bond is currently active. This solves an issue where
XenCenter would always show the bond as disconnected.
Bug #1703
Ian Campbell [Mon, 5 Oct 2009 15:32:53 +0000 (16:32 +0100)]
xenserver: use ovs-vsctl for VIF VLANs instead of separate state files
ovs-vsctl did not exist when this code was originally written, but it
provides exactly what is needed to get rid of those separate state
files.
The vif hotplug script diff is against the xs5.7 branch but I think is
applicable to master and/or citrix with just context changes.
I was thinking of using ovs-vsctl exclusively for configuration
modifications from the vif hotplug script but that would need a
mechanism to pass the additional vif details to ovs-vsctl add-port as
well as perhaps making the bridge optional to del-port. The other option
would be to use the --no-reload option and split the config mods into
two parts, but I don't like that idea much.
Ian Campbell [Mon, 5 Oct 2009 15:27:01 +0000 (16:27 +0100)]
xenserver: Include bridge.*.xs-network-uuids for all networks
Previously I advised that only networks which were currently attached to
the host be listed in /etc/ovs-vswitchd.conf. However I've just realised
that this interacts badly with the slightly ugly special case used for
PIF.currently-attached when reading from dbcache instead of talking to
Xapi. This bites on boot when /etc/init.d/management-interface tries to
plug a selection of PIFs which are deemed to be somehow required by
xapi. (not helped by a bug in XenServer 5.7.0 which can cause this list
to be larger than it should be and not internally consistent).
For now I think it prudent to simply list all networks which could
potentially be attached to a given datapath, until I can figure out what
the sane fix is on the XenServer end.
(I think there are two options for a proper fix, either inspect the
current state of the network devices or assume dbcache represents the
desired final state after devices are plugged on boot. I'm leaning
towards the later since the dbcache should indicate the set of PIFs
which were attached on shutdown, which xapi will likely be trying to
replug on boot... Needs more thought though).
Ben Pfaff [Fri, 2 Oct 2009 20:29:01 +0000 (13:29 -0700)]
vswitch: Allow user to set Ethernet address of any internal interface.
Until now the vswitch configuration file has allowed the user to configure
the MAC address on bridge local ports only. This commit adds the ability
to configure them on any internal interface.
It would be logical to extend this to any bridge port, period, but many
network devices must be brought down before their Ethernet addresses may be
changed. Bringing a network interface down and then back up can reset a
lot of state, so as we don't actually need the ability to change any bridge
port's MAC address yet this commit does not implement it.
CC: Ian Campbell <Ian.Campbell@citrix.com>
Ben Pfaff [Fri, 2 Oct 2009 17:41:05 +0000 (10:41 -0700)]
vswitch: Factor out detection of internal interfaces into a new function.
The following commit needs to use this same logic, so break it out into
a function to avoid redundancy.
Ben Pfaff [Fri, 2 Oct 2009 23:01:36 +0000 (16:01 -0700)]
secchan: Clarify logic in add_output_action().
The code and the logic here was too terse for anyone to reasonably
understand it. Add some comments.
This should not cause any behavioral change.
CC: Jean Tourrilhes <jt@hpl.hp.com>
Justin Pettit [Fri, 2 Oct 2009 23:59:28 +0000 (16:59 -0700)]
dpif-linux: Clarify bad device warning message
The message warning that the device number is wrong for the Open vSwitch
devices could have been clearer.
Thanks to Ben Pfaff for the suggested wording.
Justin Pettit [Fri, 2 Oct 2009 22:20:12 +0000 (15:20 -0700)]
dpif-linux: Fail earlier if OVS kernel module isn't loaded
When the kernel module isn't loaded, the bridge tries to open all the
possible minor devices, regardless. This change first checks that there
is a major device number for Open vSwitch and only then tries to open the
minor devices.
This change also removes the assumption that there's a default Open vSwitch
major device number, since the kernel module always attempts to get a
dynamic one. Maybe one day we'll have one...
Bug #1179
Ian Campbell [Fri, 2 Oct 2009 18:35:42 +0000 (11:35 -0700)]
xenserver: Rework interface-reconfigure.
Substantially reworks interface-reconfigure, with the following fixes:
* Create and use ifcfg files only for ipdev, use vswitch
configuration for topology setup.
* Take care over moving from bond to slave and back to tear down
any residual sibling devices
* Take care to leave datapath present when manipulating VLANs to
avoid interrupting traffic on the slave PIF as well as other
VLANs.
* Lots of minor stuff
Ian Campbell [Fri, 2 Oct 2009 13:43:20 +0000 (14:43 +0100)]
xenserver: Clear vlan.* from /etc/ovs-vswitchd.conf on boot too
Ian Campbell [Fri, 2 Oct 2009 18:08:34 +0000 (11:08 -0700)]
Correct whitespace in xenserver/etc_init.d_vswitch
Ben Pfaff [Thu, 1 Oct 2009 20:27:47 +0000 (13:27 -0700)]
netdev-linux: Improve netdev_linux_set_etheraddr().
Fixes a bug whereby netdev_linux_set_etheraddr() would update the cached
Ethernet address but not mark it valid. (This potentially wasted a system
call later but wasn't harmful.)
As an added optimization, don't set the Ethernet address at all if the
new address is the same as the current address.
Jesse Gross [Fri, 2 Oct 2009 17:31:20 +0000 (10:31 -0700)]
netdev-linux: Return correct error codes on receive.
netdev_linux_receive was returning positive error codes while the
interface specifies that it should be returning negative errors.
This difference causes a huge increase in (non-existant) packet
processing with the userspace datapath.
Ben Pfaff [Thu, 1 Oct 2009 16:52:27 +0000 (09:52 -0700)]
xenserver: Clear stale configuration keys on boot, but not on later starts
Ian Campbell [Wed, 30 Sep 2009 10:57:23 +0000 (11:57 +0100)]
xenserver: Clear stale configuration keys on boot
Ben Pfaff [Thu, 1 Oct 2009 16:52:27 +0000 (09:52 -0700)]
xenserver: Clear stale configuration keys on boot, but not on later starts
Ian Campbell [Wed, 30 Sep 2009 10:57:23 +0000 (11:57 +0100)]
xenserver: Clear stale configuration keys on boot
Jesse Gross [Tue, 4 Aug 2009 00:04:43 +0000 (17:04 -0700)]
netdev: Add classes which don't require initialization.
If a class requires does not require initialization, still add it
to the list of netdev classes.
Jesse Gross [Mon, 3 Aug 2009 23:11:43 +0000 (16:11 -0700)]
netdev-linux: Fix tap device using wrong FD.
Tap devices were doing ioctls on the AF_INET socket, instead of the
FD opened on the tap device.
Jesse Gross [Mon, 3 Aug 2009 22:19:39 +0000 (15:19 -0700)]
netdev: Fix memory leak in netdev_open.
The name of the netdev is copied but is never freed.
Jesse Gross [Fri, 31 Jul 2009 22:43:08 +0000 (15:43 -0700)]
netdev: Fix typo in netdev provider enumerate.
Ben Pfaff [Wed, 30 Sep 2009 19:24:46 +0000 (12:24 -0700)]
xenserver: In xsconsole plugin, log via XSConsoleLog module.
Part of a patch from Ian Campbell <ian.campbell@citrix.com>.
Ian Campbell [Wed, 30 Sep 2009 10:57:21 +0000 (11:57 +0100)]
Drop separate vswitch-cfg-update.log.
xapi will log any error returned by the plugin.
Jesse Gross [Tue, 29 Sep 2009 18:02:04 +0000 (11:02 -0700)]
Document issues with RSPAN and MAC learning.
Bug #2118
Ben Pfaff [Mon, 28 Sep 2009 23:03:49 +0000 (16:03 -0700)]
xenserver: Add script refresh-xs-network-uuids.
On pool join, the bridge.<bridge>.xs-network-uuids key is not updated
properly for the primary management interface. We don't have a proper
fix for this problem yet, and probably won't ever have one for XenServer
5.5.0, so this commit adds a script that works around the problem.
Running the script is a shortcut for rebooting the XenServer host,
which should also solve the problem.
Bug #2097.
Ben Pfaff [Wed, 23 Sep 2009 19:39:58 +0000 (12:39 -0700)]
Document per-port round-robin during controller rate limiting.
CC: Peter Balland <peter@nicira.com>
Bug #2072.
Ben Pfaff [Mon, 28 Sep 2009 17:15:22 +0000 (10:15 -0700)]
debian: Make dependencies on openvswitch packages specify exact version.
NOX packages depend on a particular version of openvswitch-pki, which
depends on openvswitch-common without specifying a version. This meant
that the installed versions of openvswitch-pki and openvswitch-common
could easily get out of sync. This commit makes all of the dependencies
among openvswitch packages specify an explicit version, which should fix
this problem.
CC: Dan Wendlandt <dan@nicira.com>
Ben Pfaff [Wed, 23 Sep 2009 22:33:00 +0000 (15:33 -0700)]
shash: Fix memory leak in shash_destroy().
hmap_destroy() has to be called so that sh->map.buckets gets freed.
Ben Pfaff [Tue, 22 Sep 2009 17:17:44 +0000 (10:17 -0700)]
Merge citrix branch into master.
Ben Pfaff [Mon, 21 Sep 2009 22:34:27 +0000 (15:34 -0700)]
brcompatd: Delete VLAN tags only for the correct port in del_port().
vlan.%s.* will match e.g. eth0.123 if the %s expands to eth0. We only
want it to match eth0 in that case.
This is based on code inspection. It may or may not fix a real problem.
Justin Pettit [Mon, 21 Sep 2009 20:08:27 +0000 (13:08 -0700)]
Get ready to tag 0.90.5 release.
Justin Pettit [Mon, 21 Sep 2009 20:08:12 +0000 (13:08 -0700)]
Add ChangeLog to track changes
Ben Pfaff [Mon, 21 Sep 2009 23:56:37 +0000 (16:56 -0700)]
fatal-signal: Add clarifying comments.
Suggested by Justin Pettit.
Ben Pfaff [Mon, 21 Sep 2009 20:07:10 +0000 (13:07 -0700)]
vconn-unix: Unlink Unix sockets for vconns at close and free memory.
The make_unix_socket() function that Unix vconns use to create their
bindings calls fatal_signal_add_file_to_unlink() to make sure that the
binding socket gets unlinked from the file system if the process is killed
by a fatal signal. However, this doesn't happen until the process is
actually killed, even if the vconn that owns the socket is actually closed.
This wasn't a problem when the vconn-unix code was written, because all
of the unix vconns were created at process start time and never destroyed
during the normal process runtime. However, these days the vswitch can
create and destroy unix vconns at runtime depending on the contents of its
configuration file, so it's better to clean up the file system and free
the memory required to keep track of these sockets.
This commit makes unix vconns and pvconns delete their files and free
the memory used to track them when the (p)vconns are closed.
This is only a very minor leak most of the time.
Bug #1817.
Ben Pfaff [Mon, 21 Sep 2009 19:37:20 +0000 (12:37 -0700)]
fatal-signal: New function fatal_signal_unlink_file_now().
This is a helper function that combines two actions that callers commonly
wanted. It will have an additional user in an upcoming commit.
Ben Pfaff [Mon, 21 Sep 2009 19:38:58 +0000 (12:38 -0700)]
fatal-signal: Clean up code by using shash.
This simplifies the code here and should speed it up, too, when there are
lots of files to unlink on a fatal signal.
Ben Pfaff [Mon, 21 Sep 2009 19:33:30 +0000 (12:33 -0700)]
vconn: Remove unused "reconnectable" member from vconn.
This member is initialized, but nothing ever reads it, so get rid of it.
Ben Pfaff [Mon, 21 Sep 2009 20:06:47 +0000 (13:06 -0700)]
vswitchd: Fix memory leak in bridge_reconfigure().
Bug #1817.
Ben Pfaff [Mon, 21 Sep 2009 23:10:42 +0000 (16:10 -0700)]
netdev: Fix memory leak in get_stats_via_netlink().
Bug #1817.
Justin Pettit [Tue, 15 Sep 2009 09:08:08 +0000 (02:08 -0700)]
vswitch: More accurately identify slave status for compatibility
Ben Pfaff dug through the kernel sources and reported that
bond_miimon_inspect() supports four BOND_LINK_* states:
* BOND_LINK_UP: carrier detected, updelay has passed.
* BOND_LINK_FAIL: carrier lost, downdelay in progress.
* BOND_LINK_DOWN: carrier lost, downdelay has passed.
* BOND_LINK_BACK: carrier detected, updelay in progress.
And that bond_info_show_slave() only considers BOND_LINK_UP to be "up"
and anything else to be "down".
Thanks for doing this and suggesting a fix, Ben!
Ben Pfaff [Thu, 17 Sep 2009 22:12:34 +0000 (15:12 -0700)]
util: Add comments.
Ben Pfaff [Thu, 17 Sep 2009 21:46:18 +0000 (14:46 -0700)]
vswitchd: Fix unimportant memory leak.
Free dpif_names when we're done with it.
This memory leak is not a big deal since bridge_init() is only ever called
once in a given ovs-vswitchd execution.
Ben Pfaff [Thu, 17 Sep 2009 21:45:18 +0000 (14:45 -0700)]
bitmap: Don't allocate excessive memory.
ROUND_UP rounds up to a multiple of a given value. That means that
bitmap_allocate() was allocating one byte for each bit in the bitmap,
which is clearly excessive.
Instead, just allocate one bit for every bit in the bitmap.
Justin Pettit [Tue, 8 Sep 2009 03:50:06 +0000 (20:50 -0700)]
in-band: Document logic behind in-band's design.
There have been numerous attempts at getting in-band correct. If
history is at all an example, it probably still isn't. However, this is
an attempt to document its current design, so that we can understand
what our current thinking is.
Justin Pettit [Tue, 8 Sep 2009 03:44:25 +0000 (20:44 -0700)]
Add ChangeLog to track changes
Justin Pettit [Wed, 16 Sep 2009 14:45:49 +0000 (07:45 -0700)]
ovs-appctl: Correct "target" option synopsis in man page
The synopsis section of the man page for ovs-appctl incorrectly stated
that the target option takes "pid" as an argument. This commit corrects
that to say "socket".
Ian Campbell [Thu, 17 Sep 2009 18:32:54 +0000 (11:32 -0700)]
xenserver: Synchronize interface-reconfigure from Citrix.
* Drop "--test-mode" option -- it was never wired up to anything.
* Add some additional checks for valid parameter combinations
* Raise some errors for unimplemented (but not currently used in
XenServer) options.
Ben Pfaff [Thu, 17 Sep 2009 16:32:21 +0000 (09:32 -0700)]
ovs-vswitchd: Define missing .IQ macro in manpage.
This manpage was using a nonstandard macro that it did not define. Fix
the problem by adding the definition.
Reported-by: Ian Campbell <Ian.Campbell@citrix.com>
Ian Campbell [Thu, 17 Sep 2009 12:37:25 +0000 (13:37 +0100)]
vswitchd: implement bond/hash unixctl
Our test case automation has a requirement to know which hash value a
given MAC address hashes to, in order to validate that balancing is
happening as expect etc.. Rather than attempt to reimplement the hash
algorithm used by vswitchd in python instead expose an appctl which
returns this information.
Ben Pfaff [Thu, 17 Sep 2009 16:26:55 +0000 (09:26 -0700)]
xenserver: Remove vswitch dbcache file during RPM uninstall.
It's good to clean up.
Ported from "citrix" to "master" branch with file name updated.
CC: Keith Amidon <keith@nicira.com>
CC: Henrik Amren <henrik@nicira.com>
Ben Pfaff [Tue, 15 Sep 2009 17:07:23 +0000 (10:07 -0700)]
xenserver: Drop "init-dbcache" by making PIF optional for "rewrite".
Commit
ac9634f0af "xenserver: Make RPM install work again" introduced a
new command "init-dbcache" for the interface-reconfigure script. However
it is cleaner to simply make the PIF argument to the "rewrite" command
optional.
CC: Ian Campbell <Ian.Campbell@citrix.com>
Ben Pfaff [Wed, 16 Sep 2009 23:03:55 +0000 (16:03 -0700)]
xenserver: Remove vswitch dbcache file during RPM uninstall.
It's good to clean up.
CC: Keith Amidon <keith@nicira.com>
CC: Henrik Amren <henrik@nicira.com>
Ben Pfaff [Wed, 16 Sep 2009 22:12:19 +0000 (15:12 -0700)]
secchan: Better tolerate failing controller admission control in fail-open.
When the switch is configured to connect to a controller that accepts
connections, waits a few seconds, and then disconnects without setting up
flows, currently this causes "fail-open" to flush the flow table and
stop setting up new flows during the connection duration. This is OK if
it happens once, but it can easily happen every 8 seconds with typical
backoff settings, and that isn't so great.
This commit changes fail-open to only flush the flow table once the switch
appears to have been admitted by the controller, which prevents these
frequent network interruptions.
Thanks to Jesse Gross for especially valuable feedback.
QA notes: Behavior in fail-open and especially behavior with a controller
that rejects the switch after it connects needs to be re-tested. The
ovs-controller --mute switch added by this commit is one simple way to
create such a controller.
CC: Peter Balland <peter@nicira.com>
Bug #1695. Bug #2055.
Ben Pfaff [Tue, 15 Sep 2009 22:23:45 +0000 (15:23 -0700)]
Factor out code for composing OFPT_PACKET_IN messages.
Currently only ofproto.c ever composes OFPT_PACKET_IN messages, but some
upcoming code wants to do the same thing, so factor this out into a new
function to avoid code duplication.
Ben Pfaff [Tue, 15 Sep 2009 22:22:17 +0000 (15:22 -0700)]
Factor out code for composing benign packets.
The bonding code in vswitch sends out gratuitous learning packets that
are supposed to teach switches but not cause anything else to happen on
the network. Some upcoming code wants to synthesize packets with similar
properties, so factor this code into a new function so that it can be
used in both places.
Ben Pfaff [Wed, 16 Sep 2009 21:09:29 +0000 (14:09 -0700)]
ovs-pki: Extend validity of generated CA certificates from 3 to 6 years.
Dan requested this change to make it less likely that a user encounter a
CA certificate expiring.
For the "citrix" branch instead of "master" in case a customer upgrades
(without generating new CA certificates) away from the beta.
CC: Dan Wendlandt <dan@nicira.com>
Jesse Gross [Wed, 16 Sep 2009 18:03:42 +0000 (11:03 -0700)]
netdev-linux: Set missing cache validity bit.
Whether a port is internal is cached to avoid requerying the kernel
every time stats are requested. However, the cache vality bit was
never being set so the cache wasn't used. This corrects that
oversight.
Thanks to Ben Pfaff for noticing.
Ian Campbell [Wed, 16 Sep 2009 14:56:00 +0000 (15:56 +0100)]
create/remove /var/lock/subsys/vswitch on initscript start/stop
A lock file in /var/lock/subsys must be created with the same name as
the initscript in order for the stop action to be automatically called
on runlevel change. This is true at least on Red Hat derived systems
such as XenServer where /etc/rcS contains:
# First, run the KILL scripts.
for i in /etc/rc$runlevel.d/K* ; do
check_runlevel "$i" || continue
# Check if the subsystem is already up.
subsys=${i#/etc/rc$runlevel.d/K??}
[ -f /var/lock/subsys/$subsys -o -f /var/lock/subsys/$subsys.init ] \
|| continue
...
(This could potentially expose bugs e.g. in the stop priority for the
script since I think it is likely that the stop action hasn't been
running to now. I haven't closely considered this case yet but vswitch
is currently scheduled at K91vswitch vs K90network which seems correct
at first glance)
Ben Pfaff [Fri, 11 Sep 2009 22:49:37 +0000 (15:49 -0700)]
datapath: Fix mutual exclusion with bridge on Linux 2.6.27+.
Linux 2.6.27 introduces a new mechanism for sharing STP packets among
kernel modules, which means that the code in datapath.c to avoid loading
when the Linux bridging module is also loaded has false positives. So
fall back on these newer kernels to a less reliable way of avoiding the
bridge module, but one that does not have false positives.
CC: Jean Tourrihles <jt@hpl.hp.com>
Ben Pfaff [Tue, 15 Sep 2009 21:21:00 +0000 (14:21 -0700)]
xenserver: Fix detection of xs-network-uuids in interface-reconfigure.
Commit
c798b21c6a "xenserver: Only consider the host we are running on in
interface-reconfigure" dropped the get_pifs_by_record function in favor
of get_pifs_by_device, but didn't adapt callers properly, so that the
XenServer network PIFs weren't properly found and thus the xs-network-uuids
keys weren't set correctly.
This fixes the caller.
Bug #2043.
Ian Campbell [Tue, 15 Sep 2009 16:24:46 +0000 (09:24 -0700)]
ovs-vsctl: /var/run/ovs-vswitchd.*.ctl is a Unix domain socket
Currently ov-vsctl tries to treat /var/run/ovs-vswitchd.*.ctl as a
file/pipe when it is actually a Unix domain socket:
# ovs-vsctl add-br TEST
Traceback (most recent call last):
File "/usr/bin/ovs-vsctl", line 498, in ?
main()
File "/usr/bin/ovs-vsctl", line 493, in main
function(*args)
File "/usr/bin/ovs-vsctl", line 345, in cmd_add_br
cfg_save(cfg, VSWITCHD_CONF)
File "/usr/bin/ovs-vsctl", line 142, in cfg_save
cfg_reload()
File "/usr/bin/ovs-vsctl", line 126, in cfg_reload
f = open(target, "r+")
IOError: [Errno 6] No such device or address: ' '
# ls -l /var/run/ovs-vswitchd.4173.ctl
srw------- 1 root root 0 Sep 14 12:25 /var/run/ovs-vswitchd.4173.ctl
From strace:
open("/var/run/ovs-vswitchd.4173.ctl", O_RDWR|O_LARGEFILE) = -1 ENXIO (No such device or address)
Ben Pfaff [Mon, 14 Sep 2009 18:28:57 +0000 (11:28 -0700)]
ovs-vsctl: Add test suite, documentation for br-to-vlan, br-to-parent.
CC: Ian Campbell <Ian.Campbell@citrix.com>
Jesse Gross [Mon, 14 Sep 2009 21:12:23 +0000 (14:12 -0700)]
netdev: Swap transmit and receive stats on internal ports.
Internal ports appear to have their transmit and receive stats swapped
because from the kernel's point of view these ports are acting like
the machine connected to the switch, not the switch itself. This swaps
the stats for consistency with other ports.
Ben Pfaff [Mon, 14 Sep 2009 20:37:00 +0000 (13:37 -0700)]
secchan: Fix bad pointer dereference sending flow expirations.
Ben Pfaff [Mon, 14 Sep 2009 16:20:58 +0000 (09:20 -0700)]
datapath: Fix WARN_ON sending GSO packets to userspace in Linux 2.6.22+.
Until now, when dp_output_control() queued a GSO packet to userspace, it
would first compute the checksum for the whole GSO packet, then break the
packet into segments. However this had two drawbacks:
1. The checksum had to be recomputed for each segment, wasting time.
2. Linux 2.6.22 and later would emit a warning in skb_gso_segment()
because the checksum was precomputed.
This commit changes dp_output_control() to instead break the packet into
segments, then compute the checksum across each of the segments
individually. This fixes both drawbacks.
This commit has seen light testing on Xen's 2.6.27. It has been build
tested on a few different kernel versions.
Ben Pfaff [Fri, 11 Sep 2009 17:51:36 +0000 (10:51 -0700)]
datapath: Fix comments.
Ian Campbell [Mon, 14 Sep 2009 18:27:39 +0000 (11:27 -0700)]
ovs-vsctl: additional commands for querying VLAN fake bridges.
Our test automation needs to be able to validate that a VLAN bridge and
for this I needed two new operations in ovs-vsctl:
* The ability to query the VLAN tag for a bridge.
* The ability to query the 'parent' of a bridge. The parent is the
non-VLAN/untagged bridge with the same physical devices and
could be a bond.
So given xenbr0 (containing eth0) + xapi2 (VLAN 42 on eth0) and xapi1
(containing bond0 == eth2+eth3) + xapi3 (VLAN 23 on the bonded
interface):
[root@warlock ~]# ovs-vsctl br-to-vlan xapi2
42
[root@warlock ~]# ovs-vsctl br-to-vlan xapi3
23
[root@warlock ~]# ovs-vsctl br-to-parent xapi2
xenbr0
[root@warlock ~]# ovs-vsctl br-to-parent xapi3
xapi1
Ben Pfaff [Mon, 14 Sep 2009 17:05:13 +0000 (10:05 -0700)]
New utility ovs-vsctl.