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 [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.
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>
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 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.
Justin Pettit [Sat, 12 Sep 2009 07:49:30 +0000 (00:49 -0700)]
Merge commit 'origin/citrix'
Conflicts:
vswitchd/ovs-vswitchd.8.in
vswitchd/ovs-vswitchd.conf.5.in
xenserver/etc_init.d_vswitch
Justin Pettit [Sat, 12 Sep 2009 01:40:38 +0000 (18:40 -0700)]
Merge commit 'origin/ctrix' into k
Justin Pettit [Fri, 11 Sep 2009 15:15:49 +0000 (08:15 -0700)]
xenserver: Have ovs-brcompatd's log file rotated
Suggested by Ian Campbell.
Jean Tourrihles [Fri, 11 Sep 2009 22:19:15 +0000 (15:19 -0700)]
vconn: Fix byte-swapping of message type when validating OpenFlow actions.
It seems really strange that this one slipped through. Perhaps this
means that we have never tested with any action other than OFPAT_OUTPUT
(which has value 0 and thus is not affected by byte-swapping).
Ben Pfaff [Thu, 27 Aug 2009 21:45:36 +0000 (14:45 -0700)]
xenserver: Install kernel modules in proper system locations.
This gets rid of the last files in /root/vswitch. With this change, the
Open vSwitch RPMs should now comply with FHS (http://www.pathname.com/fhs/).
Ben Pfaff [Fri, 11 Sep 2009 22:13:08 +0000 (15:13 -0700)]
xenserver: Install into /usr instead of /root/vswitch.
/usr is the standard location for installation, so use that instead of our
nonstandard location under /root.
This migrates everything except the kernel modules to /usr. The kernel
modules will be migrated in an upcoming commit.
One possibly surprising change is that the manpages listed in the %files
section of vswitch-xen.spec not only moved but added .gz extensions. This
seems to be because RPM automatically compresses manpages, but only if they
are installed in a standard system location.
Ben Pfaff [Fri, 11 Sep 2009 21:41:39 +0000 (14:41 -0700)]
xenserver: Make RPM install work again.
The RPM install was generating a database cache in Python pickle format in
/etc/ovs-vswitchd.conf, but interface-reconfigure was looking for it in
XML format in /var/lib/openvswitch/dbcache. This fixes the problem, by
adding an init-dbcache command to interface-reconfigure and then using that
at RPM install time.
This moves the database cache creation from %pre to %post. This is
necessary so that interface-reconfigure is available from the install
script.
Ben Pfaff [Fri, 11 Sep 2009 21:03:00 +0000 (14:03 -0700)]
xenserver: Remove dead store from interface-reconfigure.
No point in looking up pifrec if we're not going to use it.
Ben Pfaff [Fri, 11 Sep 2009 21:02:17 +0000 (14:02 -0700)]
xenserver: Remove unmaintained comments in interface-reconfigure.
I added these comments a long time ago and have not kept them up-to-date,
so it is probably better to delete them than to confuse people.
Ben Pfaff [Fri, 11 Sep 2009 20:13:37 +0000 (13:13 -0700)]
xenserver: Fix syntax error in vswitch-xen.spec %pre fragment.
Justin Pettit [Fri, 11 Sep 2009 17:52:40 +0000 (10:52 -0700)]
xenserver: Set default file log level and fix brcompatd file
Set the default log level for file logging to INFO for ovs-vswitchd and
ovs-brcompatd. This is done so that coverage messages are kept in the
log file, since we no longer log them through syslog due its synchronous
writing on Xen hosts. The issue is described in detail in commit
6bc995e.
Fix test for whether file logging should be enabled for ovs-brcompatd.
Reported by Ian Campbell.
Justin Pettit [Fri, 11 Sep 2009 14:15:24 +0000 (07:15 -0700)]
logging: Lower logging level for coverage messages due to slow poll loops
By default, many OVS processes keep track of their time through a poll
loop. If it takes an unusually long time (measured as some distance
from the mean), the processes will log stats it has been keeping about
coverage. It was doing this at level WARN.
On Xen systems, syslog messages written at level INFO and higher are
written to /var/log/messages synchronously. This would mean that there
would be dire messages that it took a few dozen milliseconds to go
through the loop, meanwhile, it would take up to 6(!) seconds writing
those. Meanwhile, the process would do no other processing, which could
be quite serious in the case of a process such as ovs-vswitchd.
This problem was somewhat masked because the time used by this logging
was not used in the calculations for determining how long it was taking
to get through the loop.
This commit lowers the default log level for those coverage messages to
INFO. On Xen systems, it raises the default level at which messages are
written to syslog to WARN.
Diagnosed and fixed with the help of Ian Campbell.
Ben Pfaff [Wed, 9 Sep 2009 18:16:55 +0000 (11:16 -0700)]
Document ovs-vswitchd's ovs-appctl commands and some ovs-vswitchd internals.
CC: Justin Pettit <jpettit@nicira.com>
Ben Pfaff [Wed, 9 Sep 2009 17:52:26 +0000 (10:52 -0700)]
Increase the default priority of vswitchd and brcompatd
Our hope is that this will resolve many of the issues we have seen
where temporary delays in the forwarding of packets have caused issues
of various types.
This is a crossport from master of commit
44cb492 by Ian Campbell.
Ben Pfaff [Wed, 9 Sep 2009 17:50:32 +0000 (10:50 -0700)]
Revert "xenserver: Renice netback process to priority 0 by default."
This reverts commit
641a0a4ed0a79d53a52d4e78ce1d90140a768798.
This is a crossport from master of commit
b2cdfea by Ian Campbell, with
the following commit message:
Do not renice the netback thread.
We should increase the vswitchd daemon's priority instead.
Ian Campbell [Wed, 9 Sep 2009 17:08:59 +0000 (18:08 +0100)]
Increase the default priority of vswitchd and brcompatd
Our hope is that this will resolve many of the issues we have seen
where temporary delays in the forwarding of packets have caused issues
of various types.
Ian Campbell [Wed, 9 Sep 2009 17:08:58 +0000 (18:08 +0100)]
Do not renice the netback thread.
We should increase the vswitchd daemon's priority instead.
Reverts
641a0a4ed
Ian Campbell [Wed, 9 Sep 2009 17:09:02 +0000 (18:09 +0100)]
Only write Network.PIF elements for this host to dbcache.
Ian Campbell [Wed, 9 Sep 2009 17:09:01 +0000 (18:09 +0100)]
Add PIF.currently_attached to the list of fields used by interface-reconfigure
Ian Campbell [Wed, 9 Sep 2009 17:09:00 +0000 (18:09 +0100)]
Move vswitch state files to /var/lib.
I believe this is the correct location for files of this type.
Ben Pfaff [Thu, 27 Aug 2009 21:36:06 +0000 (14:36 -0700)]
xenserver: Don't (try to) remove log files on RPM uninstall.
The RPM spec file was trying to remove Open vSwitch log files as part of
the RPM uninstall process. It wasn't succeeding, however, since the glob
pattern was wrong.
Instead of fixing the glob pattern, just stop trying to remove the log
files. Log files are, after all, important for trying to debug problems,
and if we delete them at uninstall time then that makes life harder.
Ben Pfaff [Thu, 27 Aug 2009 20:31:52 +0000 (13:31 -0700)]
xenserver: Improve readability of /etc/init.d scripts.
Less redundancy makes code easier to read.
Ben Pfaff [Tue, 8 Sep 2009 20:20:35 +0000 (13:20 -0700)]
xenserver: Don't install at same time as XS 5.5.900 "openvswitch" package.
XenServer 5.5.900 installs an "openvswitch" package that this package
conflicts with, so add a "Conflicts: openvswitch" to the RPM packaging.
Ben Pfaff [Tue, 8 Sep 2009 20:18:13 +0000 (13:18 -0700)]
xenserver: Avoid "rpm -i" warnings on XenServer 5.5.900.
Open vSwitch installs successfully on XenServer 5.5.900 but it prints some
worrying messages during the process. This commit fixes them.
Ben Pfaff [Fri, 4 Sep 2009 20:35:36 +0000 (13:35 -0700)]
vswitch: Document that fail-open is enabled by default.
The vswitchd.conf manpage said that fail-open is disabled by default. This
is wrong: it is enabled by default. This commit fixes the documentation.
CC: Sujatha Sumanth <ssumanth@nicira.com>
Ben Pfaff [Tue, 8 Sep 2009 19:54:07 +0000 (12:54 -0700)]
vswitchd: Fix typo in comment.
Justin Pettit [Sat, 5 Sep 2009 05:23:29 +0000 (22:23 -0700)]
Merge commit 'origin/citrix'
Justin Pettit [Sat, 5 Sep 2009 00:03:22 +0000 (17:03 -0700)]
datapath: Don't drop MTU-sized VLAN packets from userspace
Before transimitting a packet, the datapath checks that the packet
length is not greater than the MTU. It determines the length based on
the 'protocol' field in the skb. If 'protocol' is ETH_P_8021Q, it reduces
the packet length as stored in the 'len' field by four bytes, which
is the size of a VLAN tag header. Unfortunately, packets that arrived
from userspace were not having the 'protocol' field set, which would
cause MTU-sized packets to be dropped. This commit sets the 'protocol'
field appropriately.
Thanks to Ben Pfaff for the help diagnosing this issue.
NIC-17 and NIC-26
Ben Pfaff [Thu, 3 Sep 2009 21:28:44 +0000 (14:28 -0700)]
xenserver: Install /etc/sysconfig/vswitch by default.
Until now, the vswitch RPM has installed /etc/sysconfig/vswitch.example
and made the system administrator copy it to /etc/sysconfig/vswitch if he
desires. This is slightly inconvenient, since it is slightly easier for
the admin if he can just edit /etc/sysconfig/vswitch directly. This commit
changes to the latter behavior.
Bug #1810.
Ben Pfaff [Thu, 3 Sep 2009 19:51:51 +0000 (12:51 -0700)]
xenserver: Create vswitchd configuration file if it does not exist.
/etc/ovs-vswitchd.conf should always be there. Nevertheless, it is not
nice to entirely break vswitch if it is accidentally deleted. This commit
makes /etc/init.d/vswitch create an empty configuration file if it is
missing.
Bug #1821.
Ben Pfaff [Thu, 3 Sep 2009 19:58:25 +0000 (12:58 -0700)]
vswitchd: Explain why mirroring to a VLAN can cause network problems.
Bug #1963.
Ben Pfaff [Thu, 3 Sep 2009 18:53:31 +0000 (11:53 -0700)]
xenserver: Document all the /etc/sysconfig/vswitch settings.
Bug #1853.
Ben Pfaff [Wed, 2 Sep 2009 19:52:50 +0000 (12:52 -0700)]
rconn: Speed up in-band control connections, by caching the remote address.
In-band control needs to know the IP and port of the controller, so that
it can set up the correct flows to talk to that controller. Until now,
the rconn code has only made this available when a connection was actually
in progress. This means that, say, ARP packets will not be allowed through
when the rconn backs off. The same is true of packets sent by switches
that access the controller through this one.
This commit makes the rconn cache the remote IP and port and local IP
across connection attempts, improving the situation. In particular, it
reduces the overall amount of time that it takes to connect in my own
simple test case from over 10 seconds to about 2 seconds.
Ben Pfaff [Wed, 2 Sep 2009 18:16:40 +0000 (11:16 -0700)]
vconn-tcp: Report correct remote IP and remote port.
TCP vconns were reporting indeterminate remote IP and remote port, which
prevented in-band control from working for TCP vconns.
The code that this fixes is implemented differently on the citrix branch
and thus the bug was not present there.
Ben Pfaff [Wed, 2 Sep 2009 18:11:38 +0000 (11:11 -0700)]
ofproto: Fix bad merge in previous commit.
This was fixed in my working tree before I pushed it, but I forgot to
commit it. Oops.
Ben Pfaff [Wed, 2 Sep 2009 17:14:53 +0000 (10:14 -0700)]
Merge citrix branch into master.
Justin Pettit [Mon, 31 Aug 2009 22:18:43 +0000 (15:18 -0700)]
in-band: Implement L3-based in-band control
Previously, in-band control was L2-based. This worked well when the
controller was on the same network segment as the switch. However, many
configurations are not set up this way. These changes allow a switch and
controller to be on different subnets.
This set of changes also fixes some problems related to passing DHCP
traffic as described in Bug #1618.
A full description of the reasoning and supported configurations of
in-band will be forthcoming.
Justin Pettit [Sat, 29 Aug 2009 23:02:56 +0000 (16:02 -0700)]
dpif: Add dpif_port_get_name call
Add ability to lookup a device name by its dpif port number.
Justin Pettit [Sat, 29 Aug 2009 22:58:40 +0000 (15:58 -0700)]
netdev: Add netdev_get_next_hop call
Add ability to determine the next hop IP address and device used to
reach a given host.
Justin Pettit [Thu, 16 Jul 2009 19:58:28 +0000 (12:58 -0700)]
Add ability for the datapath to match IP address in ARPs
The ability to match the IP addresses in ARP packets allows for fine-grained
control of ARP processing. Some forthcoming changes to allow in-band
control to operate over L3 requires this support if we don't want to
allow overly broad rules regarding ARPs to always be white-listed.
Unfortunately, OpenFlow does not support this sort of processing yet, so
we must treat OpenFlow ARP rules as having wildcarded those L3 fields.
Justin Pettit [Sat, 11 Jul 2009 00:21:43 +0000 (17:21 -0700)]
Return netmask along with IP address when querying through netdev
The call netdev_get_in4() now allows the caller to also retrieve the
associated netmask.
Justin Pettit [Wed, 8 Jul 2009 22:41:42 +0000 (15:41 -0700)]
secchan: Tighten in-band traffic always allowed into switch
In-band control sets up a bunch of invisible flows that allow the switch
and controller to communicate over OpenFlow. The rules may have been a
bit too permissive, since it allowed any traffic to reach the
connection's interface. This set of changes tries to tighten that to
only OpenFlow traffic and ARPs.
Justin Pettit [Thu, 27 Aug 2009 22:13:59 +0000 (15:13 -0700)]
in-band: Fix status checks that could prevent in-band updates
The method the status callback was using to retrieve the local and
remote MAC addresses pushed back the refresh timer. If this were done
frequently, it could prevent in-band control from updating its rules.
Justin Pettit [Sat, 29 Aug 2009 22:54:28 +0000 (15:54 -0700)]
ofproto: Cleanup bridge/dump-flows output
Add separator that was missing from the output of the "bridge/dump-flows"
command from ovs-appctl.
Justin Pettit [Mon, 31 Aug 2009 06:51:41 +0000 (23:51 -0700)]
netdev: Fix reversed arguments in netdev_recv warning.
Ben Pfaff [Tue, 1 Sep 2009 17:31:32 +0000 (10:31 -0700)]
datapath: Use hash table more tolerant of collisions for flow table.
The hash table used until now in the kernel datapath for storing the flow
table provides only two slots that a given flow can occupy. If both of
those slots are already full, for a given flow, then that flow cannot be
added at all and its packets must be handled entirely in userspace, taking
a performance hit. The code does attempt to compensate for this by making
the flow table rather large: 8 slots per flow actually in the flow table.
In practice, this is usually good enough, but some of the tests that we
have run show bad enough performance degradation or even timeouts of
various kinds that we want to implement something better.
This commit replaces the existing hash table by one with a completely
different design in which buckets are flexibly sized and can accept any
number of collisions. By use of suitable levels of indirection, this
design is both simple and RCU-compatible. I did consider other schemes,
but none of the ones that I came up with shared both of those two
properties.
This commit also adds kerneldoc comments for all of the flow table
non-static functions and data structures.
This has been lightly tested for correctness. It has not been tested for
performance.
Bug #1656. Bug #1851.
Ben Pfaff [Tue, 1 Sep 2009 17:12:12 +0000 (10:12 -0700)]
datapath: Remove WARN_ON_ONCE(1) now that this code has been exercised.
The code on one side of this #if fork was difficult to test until Xen
upgraded to a new enough kernel that it would exercise it. Later Xen
kernels are now available and this code path has been tested, at least to
some extent, so remove the warning.
Thanks to Ian Campbell <Ian.Campbell@citrix.com> for pointing out the
warning.
Ben Pfaff [Fri, 28 Aug 2009 20:05:48 +0000 (13:05 -0700)]
corekeeper: Always include PID in core dump names.
Some distributions automatically set /proc/sys/kernel/core_uses_pid to 1
and others leave it at its default setting of 0. That means that, with the
core_pattern that corekeeper was setting, on the former distributions the
PID would be included in core names and on the latter the PID would be
omitted. For consistency, this commit forces the PID to be in the core
file name in either case (note that putting %p in core_pattern causes
the core_uses_pid setting to be disregarded).
CC: Martin Casado <casado@nicira.com>
Ben Pfaff [Fri, 28 Aug 2009 21:59:42 +0000 (14:59 -0700)]
secchan: Avoid sending NetFlow packets for empty flows.
There is no value in sending out NetFlow messages when the byte counter
(hence, packet counter) is 0. This does not often happen, but it can in
corner cases where a flow gets installed but never sees any traffic before
it is uninstalled.
CC: Peter Balland <peter@nicira.com>
Ben Pfaff [Mon, 24 Aug 2009 18:06:34 +0000 (11:06 -0700)]
vswitchd: Mirror nothing, not everything, if mirror ports don't exist.
If all of the ports specified as mirror selection criteria actually do not
exist, then until now the bridge would mirror all incoming packets (on
specified VLAN(s), if any). This matches the behavior that occurs if no
mirror selection ports were specified at all, and so it makes a certain
amount of logical sense.
But it is far more likely that the user simply misspelled a port name, or
specified the name of a port that does not always exist. In fact we have
seen this behavior in practice when the controller has not caught up to
the switch's current configuration. So this commit changes the bridge to
instead disable a mirror if ports are specified and none of those ports
exist.
Bug #1904.
Ben Pfaff [Mon, 24 Aug 2009 17:42:44 +0000 (10:42 -0700)]
vswitchd: Avoid output port explosion with mirrors that output to VLANs.
compose_dsts() was updating the VLAN of packets sent to VLAN mirrors
before it changed the VLAN value, but of course it's the final VLAN value
that actually matters.
Thanks to Reid for his good work tracking this one down.
Bug #1898.
Ben Pfaff [Wed, 26 Aug 2009 19:51:39 +0000 (12:51 -0700)]
vswitchd: Fix bug in Ethernet address selection for bridge.
This bug was introduced in the merge from the citrix branch in commit
8fef8c71 "Merge citrix into master."
Thanks to Reid for characterizing the problem.
Bug #1907.
Justin Pettit [Tue, 25 Aug 2009 23:34:45 +0000 (16:34 -0700)]
tests: Cleanup getsockname argument warning
The second argument was being passed in as a sockaddr_in, when it should
be a sockaddr. This commit cleans up the warning by casting it.
Justin Pettit [Tue, 25 Aug 2009 23:33:16 +0000 (16:33 -0700)]
tests: Cleanup islower() warning.
NetBSD's gcc complains if islower()'s argument is an unadorned char. This
provides an appropriate cast.
Justin Pettit [Tue, 25 Aug 2009 23:26:36 +0000 (16:26 -0700)]
Cleanup incorrect unitialized variable warnings.
The NetBSD compiler warns that these variables may be used unitialized.
They are not, but this commit gets rid of the warnings.
Justin Pettit [Tue, 25 Aug 2009 23:22:44 +0000 (16:22 -0700)]
tests: Rename NTOHL/NTOHS macros
NetBSD defines NTOHL and NTOHS macros that are used differently than how
they are defined in the test-classifier.c. This commit renames the local
definition so there's no conflict.
Justin Pettit [Tue, 25 Aug 2009 19:34:45 +0000 (12:34 -0700)]
mgmt: Cleanup handling of extended messages
OpenFlow has a maximum messages size of 65536 bytes, but management
messages can be greater than that. The management protocol's Extended
Data message is used to get around that limitation. This commit cleans
up some problems with our implementation and adds some additional
sanity-checking to received messages.
Related to vNetManager Bug #1843.
Justin Pettit [Tue, 25 Aug 2009 21:12:01 +0000 (14:12 -0700)]
dpif: Address portability issues in dpif-netdev
There were a number of Linux assumptions in dpif-netdev that were not
necessary. This commit cleans those up to aid portability.
Justin Pettit [Tue, 25 Aug 2009 21:11:44 +0000 (14:11 -0700)]
Cleanup isdigit() warnings.
NetBSD's gcc complains if isdigit()'s argument is an unadorned char. This
provides an appropriate cast.
Justin Pettit [Tue, 25 Aug 2009 20:23:11 +0000 (13:23 -0700)]
Merge commit 'origin/citrix'
Justin Pettit [Tue, 25 Aug 2009 20:17:26 +0000 (13:17 -0700)]
datapath: Return EFBIG instead of EXFULL when no room in flow table
The EXFULL errno is only defined in Linux. While this datapath is
Linux-specific, the userspace that interacts with it is not.
Ben Pfaff [Fri, 21 Aug 2009 20:46:47 +0000 (13:46 -0700)]
netflow: Remove stray debug printf().
Ben Pfaff [Thu, 20 Aug 2009 22:39:01 +0000 (15:39 -0700)]
xenserver: Compute correct physical PIFs for VLANs on bonds.
Otherwise the bond device is considered the physical PIF of a VLAN-on-bond
PIF, and various bad stuff happens.
Ben Pfaff [Wed, 19 Aug 2009 23:08:18 +0000 (16:08 -0700)]
Merge citrix into master.
Ben Pfaff [Wed, 19 Aug 2009 22:59:18 +0000 (15:59 -0700)]
xenserver: Renice netback process to priority 0 by default.
Under heavy VM network load, we have observed that ovs-vswitchd can be
starved for CPU time, which prevents flows from being set up. This can
in turn cause connections to XAPI in Dom0 to time out (among other issues).
It is probably not necessary to renice netback all the way to priority 0
as done in this commit. That is simply the value that we have tested. QA
has not reported any ill side-effects of this choice of value (yet). One
reasonable alternative, should any problems be noticed, would be to leave
netback at its default -5 priority and simply boost ovs-vswitchd's priority
to say -6 or -7.
Bug #1656.
Ben Pfaff [Wed, 19 Aug 2009 21:49:18 +0000 (14:49 -0700)]
xenserver: Use = instead of == as operator for "test" in shell scripts.
The "test" program uses =, not ==, as the test for equality. Fortunately
most implementations are tolerant but it's better to follow the spec.
Ben Pfaff [Wed, 19 Aug 2009 21:14:40 +0000 (14:14 -0700)]
xenserver: Fix "brctl show" compatibility by introducing "brctl" wrapper.
Bug NIC-19, which reported that "brctl show" did not format its output in
the way expected by Citrix QA scripts, was believed fixed by commit
35c979bff4 "vswitchd: Support creating fake bond device interfaces."
Unfortunately, this commit was not tested on a XenServer before it was
committed. Due to differences in the actual test environment and the
XenServer environment, which have different versions of the bridge-utils
package that contains brctl, that commit did not fix the problem observed
by Citrix QA. In particular, the XenServer brctl uses sysfs to obtain
the information displayed by "brctl show", but the previous commit only
fixed up the information output by the bridge ioctls.
The natural way to fix this problem would be to fix up the sysfs support
as well. I started out along that path, but became bogged down in all
the details of the kernel sysfs.
This commit takes an alternate approach, by introducing a wrapper around
the system brctl binary that implements "brctl show" itself and delegates
all other functionality to the original binary (in a different location).
This will not fix tools that do not call into brctl, but to the best of
my knowledge there are no such tools used in the Citrix QA process.
Thanks to Justin and Reid for much feedback.
Bug NIC-19.
Ben Pfaff [Wed, 19 Aug 2009 19:59:56 +0000 (12:59 -0700)]
xenserver: Completely ignore datapath devices for renaming purposes.
Commit
2bb451b69 "xenserver: Rename network devices to match MAC addresses
of physical PIFs" started renaming network devices so that they match
the MAC address that we expect them to have. This worked OK at the time.
Commit
35c979bff "vswitchd: Support creating fake bond device interfaces"
later started creating fake bond devices to make the Citrix QA scripts
happier.
Unfortunately these commits interact badly: the bond devices created by
the latter commit are sometimes chosen as the physical devices to be
renamed over the physical PIF device names. This is because we do allow
datapath internal ports to be chosen as "physical devices" as a last
resort. This commit reverses this decision, eliminating that possibility.
This probably won't become a problem unless somehow we encounter a physical
Ethernet card driver that lacks a queue, but that is unlikely since the
performance would be awful.
Ben Pfaff [Wed, 19 Aug 2009 19:51:27 +0000 (12:51 -0700)]
datapath: Additional fixes for datapath device renaming.
Commit
c874dc6d6b "secchan: Fix behavior when a network device is renamed."
fixed a crash in the datapath when network devices within a datapath were
renamed. However, this missed the case where the device that was renamed
was a datapath's internal port: these devices have their br_port members
set to NULL, so we have to determine that they belong to a datapath another
way. This commit does so.
This commit also changes the initialization order in dp_dev_create().
Otherwise, dp_device_event() will dereference null when it is called via
register_netdevice(), because the newly created device is a datapath device
but its members are not yet initialized.
Ben Pfaff [Wed, 19 Aug 2009 20:03:46 +0000 (13:03 -0700)]
Merge citrix into master.
This was a somewhat difficult merge since there was a fair amount of
superficially divergent development on the two branches, especially in the
datapath.
This has been build-tested against XenServer 5.5.0 and XenServer 5.7.0
build 15122. It has been booted and connected to XenCenter on 5.5.0.
The merge revealed a couple of outstanding bugs, which will be fixed on
citrix and then merged back into master.
Ian Campbell [Thu, 6 Aug 2009 20:51:44 +0000 (13:51 -0700)]
xenserver: Store XAPI dbcache as XML in interface-reconfigure.
This allows the Citrix host installer to also write the dbcache on upgrade
which enables the management interface to come up on a slave after upgrade.
CP-1148.
Ian Campbell [Thu, 6 Aug 2009 20:50:15 +0000 (13:50 -0700)]
xenserver: Whitelist specific XAPI fields to pickle in interface-reconfigure.
Only add certain fields to the database cache of database
objects. This constrains the cases we need to deal with when
pickling/unpickling.
CP-1148.
Ian Campbell [Thu, 6 Aug 2009 20:45:12 +0000 (13:45 -0700)]
xenserver: Only consider the host we are running on in interface-reconfigure.
Drop records for PIFs,bonds,VLANs etc for other hosts at the point at
which we fetch the records from xapi rather than filtering everytime
we iterate through the lists.
CP-1148.
Ian Campbell [Thu, 6 Aug 2009 20:43:21 +0000 (13:43 -0700)]
xenserver: Factor out XAPI interactions in interface-reconfigure.
Currently interface-reconfigure stores a copy of the XAPI database using
python's pickling functionality. Since the XenServer host installer also needs
to write this file (so it is present after slave upgrade) we would like to
switch to something more explicitly under our control.
Begin by factoring out XAPI interactions.
Ben Pfaff [Thu, 6 Aug 2009 20:24:13 +0000 (13:24 -0700)]
switch UI: Only build ovs-switchui if PCRE 7.2 or later is available.
The PCRE_INFO_OKPARTIAL feature used by ovs-switchui was only introduced
in PCRE 7.2, so we need to check for that version or later, instead of
just for PCRE.
Thanks to Ian Campbell <Ian.Campbell@citrix.com> for reporting the problem.
Ian Campbell [Thu, 6 Aug 2009 19:53:27 +0000 (12:53 -0700)]
datapath: Only call skb_checksum_setup on 2.6.18 && Xen.
For newer kernels the checksum setup is done at the point the skb is
received in netback or netfront so there is no more need to sprinkle
skb_checksum_setup calls throughout the kernel.
Ben Pfaff [Mon, 17 Aug 2009 16:30:29 +0000 (09:30 -0700)]
ovs-brcompatd: Don't include the local port in BRCTL_GET_PORT_LIST output.
The BRCTL_GET_PORT_LIST ioctl is not supposed to include the bridge port
itself in the list of ports, but ovs-brcompatd was doing that.
Ben Pfaff [Fri, 14 Aug 2009 20:44:27 +0000 (13:44 -0700)]
ovs-brcompatd: Fix memory leak.
Ben Pfaff [Fri, 14 Aug 2009 20:44:06 +0000 (13:44 -0700)]
ovs-brcompatd: Fix use of uninitialized svec.