2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-29 13:27:59 +00:00

19894 Commits

Author SHA1 Message Date
Ben Pfaff
48d973e3c7 vconn: Add unit test for tcp and unix vconns. 2009-06-12 17:10:09 -07:00
Ben Pfaff
78ff02708b vconn: Factor out common code from TCP and SSL vconns.
The TCP and SSL vconn implementations had a lot of common code to make
and accept TCP connections, which this commit factors out into common
functions in socket-util.c.

Also adds the ability to bind ptcp and pssl vconns to a particular IP
address instead of the wildcard address.
2009-06-12 17:05:51 -07:00
Ben Pfaff
5fe577ebbe vconn: Drop obsolete code for Netlink-based vconns.
Older versions of Open vSwitch implemented OpenFlow in the kernel over
a Netlink channel, and this code was here to work around some issues with
that, but now it is unnecessary since the OpenFlow kernel implementation is
gone.
2009-06-12 16:45:28 -07:00
Ben Pfaff
b7eae257f1 vconn: Report valid errno value if connection closed waiting for hello.
vconn_connect() is defined to return 0 on success or a positive errno
value on failure, but it was possible to get a negative value (EOF).  This
commit changes this to ECONNRESET to match caller expectations.
2009-06-12 16:45:28 -07:00
Ben Pfaff
806e39cfdf datapath: Add sysfs support for all (otherwise supported) Linux versions.
This turned out to be less trouble than I expected.

This builds successfully against 2.6.18 through 2.6.28.  Justin has lightly
tested it on a 2.6.27 kernel provided by Citrix.
2009-06-12 16:45:01 -07:00
Justin Pettit
b4ebfbeaf1 xenserver: xen 2.6.27 kernel doesn't need skb_checksum_setup defined
The latest XenServer release is based on 2.6.27.  The datapath code
defined "skb_checksum_setup", since it wasn't exported in their 2.6.18
kernels.  This change causes it only to be built if the kernel is
version 2.6.18.
2009-06-12 15:39:59 -07:00
Justin Pettit
91b47481fc xenserver: Fix key used to identify network UUID
The "dump-vif-details" script adds the network UUID to the
ovs-vswitchd.conf file.  Unfortunately, it wrote the key as
"network-uuid", but the code that retrieves it for the management
protocol checked our "net-uuid".  The script now uses the key
"net-uuid".

Thanks to Natasha for catching the problem.
2009-06-11 18:30:41 -07:00
Ben Pfaff
12fb742b6f Don't accept unix: connections, etc. in OpenFlow controller discovery.
The controller discovery code has always had the capability to whitelist
only certain types of controller locations.  Until now, we have only taken
advantage of this when SSL is enabled (so that all OpenFlow connections are
authenticated with SSL if SSL is configured).

However, it occurs to me that making the section of connections entirely
unrestricted is too permissive.  An attacker could make the vswitch connect
to an arbitrary Unix domain socket, for example.  I don't have a
description of how this is an exploitable security vulnerability, but it
seems entirely too lax.

So: this commit changes the default to allowing only TCP connections to
controller in the non-SSL case.
2009-06-11 13:02:33 -07:00
Ben Pfaff
986b77c099 xenserver: Pass network UUID to controller for internal networks too.
vNetManager needs to know the xapi UUIDs for the networks that correspond
to OpenFlow connections.  For some time now we have passed these to it
over the management connection using bridge.<bridgename>.xs-network-uuids
configuration keys, but only now did we notice that this didn't get set for
internal networks.

The reason that it didn't get set is that interface-reconfigure is the
script that sets up these configuration keys, but interface-reconfigure
is never called for internal networks.  Instead, xapi creates them itself
using directly calls to bridge ioctls.  So no amount of tweaks to
interface-reconfigure will help.

This commit fixes the problem by modifying the vif script instead.  This
works acceptably only because xapi is lazy about creating bridges for
internal networks: it creates them only just before it is about to add the
first vif to them.  Thus, by setting up the configuration key in the vif
script, it gets added just after the bridge itself is created.  There is
a race, of course, meaning that there may be a delay between the initial
OpenFlow connection and the time when the configuration key is set up,
but vNetManager can tolerate that.
2009-06-11 11:33:39 -07:00
Justin Pettit
a8d211487e vswitch: Add support for large OFMP messages
OpenFlow uses a 16-bit field to describe the message length, which
limits messages to a maximum 65535 bytes.  Some of the messages passed
by the management protocol may be larger than this, so a general
Extended Data message has been added to management protocol.  It
encapsulates a single giant OpenFlow-like message, and breaks it into
however many vaild smaller ones are required.
2009-06-11 01:58:52 -07:00
Justin Pettit
08359020c2 xenserver: Remove debugging redirect from vif script
I redirected some output to a temporary file during debugging, but
forgot to remove it.  Now it's removed.

Thanks to Ben for pointing it out.
2009-06-10 17:10:54 -07:00
Justin Pettit
2f14f69319 vswitch: Fix memory leak when OFMP resource updates are sent
When a resource update message is generated by vSwitch, it creates a
couple of svec objects that need to be explicitly destroyed.  This
wasn't happening, so memory would leak after each resource update.  This
commit properly destroys them after use.
2009-06-10 17:10:54 -07:00
Ben Pfaff
d138cd2c09 Add unit test for SHA-1 library. 2009-06-10 16:45:28 -07:00
Ben Pfaff
8d3a769e1c Add file missing from commit baf099 "Fix glibc 2.7 strtok_r() bug...".
Oops.
2009-06-10 16:45:02 -07:00
Ben Pfaff
c93b1d6a4c vswitch: Fix handling of multicast packets received by bonds.
As long as bonding has been implemented, the vswitch has refused to learn
from multicast packets that arrive on a bond slave if it has already
learned any other port for that source MAC, because it is likely that we
sent the packet out ourselves and are only now receiving a copy of it on
our active slave.

This is entirely correct, but it does not go far enough.  In fact, the
bridge needs to entirely drop such packets.  Otherwise, a host whose MAC
is assigned to a slave other than the active slave will receive a second
copy of multicast packets that it sends out the bond, and other ports
will receive two copies of every multicast packet sent by such a host.

This commit implements this new policy, which simplifies the code at the
same time.

Bug #1387.
2009-06-10 15:31:20 -07:00
Ben Pfaff
da285df4bf vswitch: Add ovs-appctl commands for debugging and managing bonds. 2009-06-10 15:31:20 -07:00
Ben Pfaff
e50097d233 Fix glibc 2.7 strtok_r() bug in a more permanent fashion.
The glibc 2.7 headers contain a bug that causes strtok_r() to segfault
in some circumstances.  Until now, we have been working around this
problem at each invocation, but this depends on the programmer to remember
to do so each time.

This commit instead adds a shim that adds a work-around to the string.h
header itself, so that it is much more difficult to miss the workaround.
2009-06-10 15:31:20 -07:00
Justin Pettit
d798447957 vswitch: Clarify what "ingress" means in policing
The man page for ovs-vswitchd.conf explains how ingress policing works.
However, what "ingress" means is a bit confusing depending on the
perspective.  For vSwitch, it's from the switch's perspective.  This
means on a PIF, it's the rate traffic comes into the box.  On a VIF,
it's the rate traffic can be *transmitted* from a VM.  This commit
clarifies the man page a bit.

Thanks to Johan for pointing out the problem.
2009-06-09 23:32:30 -07:00
Justin Pettit
c611392b0e xenserver: Add dump-vif-details to automake 2009-06-09 18:40:15 -07:00
Justin Pettit
3570ee9844 xenserver: Send VIF details to controller
The controller needs to know various things about virtual interfaces as
they move about the network.  This commit sends the VIF, virtual
machine, and network UUIDs associated with the VIF, as well as its MAC
address over the management channel.

Feature #1324
2009-06-09 18:22:24 -07:00
Justin Pettit
ae825abbe7 Xen: Fixes for core handling configuration
An improper string comparison operator was used to check whether
FORCE_COREFILES was enabled.  Further, the check to enable core files
was only down when vswitch was started, and not when restarted.

Thanks to Ben for help debugging the issue.
2009-06-09 18:22:23 -07:00
Justin Pettit
b44508095d Fix url in RPM spec. 2009-06-09 18:22:22 -07:00
Ben Pfaff
21effc0384 Add unit test for TCP/IP checksumming code. 2009-06-09 17:10:18 -07:00
Ben Pfaff
d06fd60379 Fix another "make" versus "make dist" build problem. 2009-06-09 15:19:24 -07:00
Ben Pfaff
8833d73dea Remove "dpkg-buildpackage" test from "make distcheck".
Now the Debian packaging is regularly tested via the autobuilder, so there
is less need to do it from "make distcheck", and not doing it saves time
there.
2009-06-09 14:22:52 -07:00
Ben Pfaff
424d1282e1 Fix behavior of simultaneous "make" and "make dist".
We were distributing lib/dirs.c, which doesn't make sense, but in any case
it created a race between "make" and "make dist" in updating lib/dirs.c,
which showed up in the Debian package build (which runs build-indep and
build-arch in parallel).

Also, clean lib/dhparams.c.

This should fix the failure seen in build openvswitch843.
2009-06-09 14:19:53 -07:00
Ben Pfaff
fcfb9b2cdc xenserver: Use parallel make in RPM build on SMP machines. 2009-06-09 13:49:49 -07:00
Ben Pfaff
819a2d4c8a debian: Honor "noopt", "parallel=<n>" build options. 2009-06-09 13:33:24 -07:00
Ben Pfaff
52db0bbec6 debian: Run build tests during build (unless "nocheck" is specified). 2009-06-09 13:32:59 -07:00
Ben Pfaff
8a0e7ce2dd debian: Ignore directories created as part of Debian package build. 2009-06-09 13:32:20 -07:00
Ben Pfaff
4b11d5e8d3 Update documentation. 2009-06-09 13:09:08 -07:00
Ben Pfaff
c8ab937586 ovs-pki: Improve readability of manpage. 2009-06-09 13:01:04 -07:00
Ben Pfaff
8b8308289c ovs-pki: Fix formatting errors in manpage. 2009-06-09 13:01:04 -07:00
Ben Pfaff
2303f3b2fc vswitch: Send gratuitous learning packets when bond slaves go down.
When a bond slave goes down, all of the MACs that were on it are migrated
to another slave, but this is not apparent to the switch that the bond is
connected to until each MAC sends out a packet.  This causes incoming
traffic for a given MAC to be dropped until the MAC sends out a packet.
This is not usually a problem, because traffic is not ordinarily one-way,
and we can't avoid losing some packets in some cases, but we can do a
little better by sending out a gratuitous learning packet on the new slave
as soon as we know about it, and that is what this commit implements.

Bug #1290.
2009-06-08 12:26:27 -07:00
Ben Pfaff
962ff3d674 mac-learning: Make data structures public.
The vswitchd bonding code needs to iterate through the table entries to
be able to send out gratuitous learning packets when bond slaves go down.
It might be best to create an abstract interface to the MAC learning table,
but this commit does the simpler thing and exposes the data structures in
the header file.
2009-06-08 12:26:11 -07:00
Justin Pettit
ce87c72813 vswitch: Fix typos in OFMP comments.
A couple of comments describing the new UUID TLVs were incorrect and
this fixes them.
2009-06-05 14:59:36 -07:00
Justin Pettit
010c6bd029 vswitch: Fix OFMP alignment problem on 64-bit systems.
One of the OpenFlow managment protocol's UUID TLV messages had a problem
building on 64-bit systems.  By extending the structure length by 4
bytes, the problem goes away.
2009-06-05 14:59:36 -07:00
Ben Pfaff
c2633c26a1 vswitch: Enable bond slaves based on carrier status, not up/down.
Whether a bond slave is enabled should be based on whether the device's
PHY sees carrier, not based on whether the device is configured up or down.
(Note that a device that is configured down will always see "no carrier").
Otherwise a device that is up but has no carrier will initially be enabled,
which does not make sense.

This has no effect on interfaces that are not bond slaves, because the
"enabled" setting is used only by bond slaves.

Bug #1247.
2009-06-05 14:28:39 -07:00
Ben Pfaff
460923cf8b netdev: New function netdev_nodev_get_carrier(). 2009-06-05 14:26:42 -07:00
Ben Pfaff
8826590a1d xenserver: Bring up bond slave device before adding to bond.
Until now, we've added network devices to the ovs-vswitchd configuration
file before bringing them up.  This works suboptimally for bond slaves,
because vswitchd takes the initial carrier state of the bond slaves as
whether to initially enable or disable them, and a device that is down
always reports "no carrier".  So this commit changes interface-reconfigure
to bring up bond slaves before adding them to the configuration file,
which gives them a chance to detect carrier before vswitchd checks for it.

This might still be an imperfect situation, because it takes quite a while
(maybe 1 second?) for some network devices to detect carrier after being
brought up.  But the kernel implementation of bonding seems to do the very
same thing, so we should be at least no worse than it.

Incidentally, this is only important for bonds that have long updelays.
XenServer uses an updelay of 31 seconds (!), so it is especially important
there.

Bug #1247.
2009-06-05 14:08:36 -07:00
Ben Pfaff
d8319dd499 xenserver: Allow RPM to install only with correct Xen kernel version.
Bug #638.
2009-06-05 12:28:16 -07:00
Justin Pettit
6ae36700df vswitch: Send Xen UUIDs associated with system and networks
This commit sends information about Xen UUIDs to the controller through
the management connection.  Specifically, it sends the XenServer UUID
and a list of network UUIDs associated with each datapath.
2009-06-05 12:13:37 -07:00
Ben Pfaff
0bb1f43dd8 xenserver: Rename cache file to ovs-vswitch.dbache, for consistency.
Fixes bug #1374.
2009-06-05 11:18:33 -07:00
Ben Pfaff
064af42167 Import from old repository commit 61ef2b42a9c4ba8e1600f15bb0236765edc2ad45. v0.90.0 2009-07-08 13:19:16 -07:00