sliver-openvswitch.git
14 years agodpif-linux: Fix file descriptor leak. openflow-1.0
Tetsuo NAKAGAWA [Thu, 25 Mar 2010 14:54:15 +0000 (10:54 -0400)]
dpif-linux: Fix file descriptor leak.

get_major() opens /proc/devices to get the openvswitch major number
but never closes the FD.

14 years agoclassifer: Fix test classifier to match real classifier.
Jesse Gross [Fri, 19 Mar 2010 17:54:36 +0000 (13:54 -0400)]
classifer: Fix test classifier to match real classifier.

The trivial test classifier had the same bug as the real classifier
when replacing matching flows.  This caused it to not find the
original bug and then break when the bug was fixed.

14 years agoclassifier: Check all rules of equal priority when inserting.
Jesse Gross [Fri, 19 Mar 2010 16:08:16 +0000 (12:08 -0400)]
classifier: Check all rules of equal priority when inserting.

When adding a new classifier rule we check if there is a rule
of the same priority first and overwrite it before inserting a
new rule.  Previously we would stop looking if we found one rule
in the correct bucket with the same priority, even if it didn't
match.  This keeps going until we either find a matching rule or
we run out of equal priority rules.

Reported-by: Tetsuo NAKAGAWA <nakagawa@mxc.nes.nec.co.jp>
14 years agocollectors: Check for NULL set of collectors.
Jesse Gross [Thu, 25 Feb 2010 14:02:26 +0000 (09:02 -0500)]
collectors: Check for NULL set of collectors.

If the set of collectors for NetFlow or sFlow is empty due to
an error it will cause a crash when trying to send data.

Reported-by: Tetsuo NAKAGAWA <nakagawa@mxc.nes.nec.co.jp>
14 years agoovs-dpctl: Fix setting of packet length for "controller" action
Tetsuo NAKAGAWA [Sat, 20 Feb 2010 10:52:46 +0000 (02:52 -0800)]
ovs-dpctl: Fix setting of packet length for "controller" action

14 years agoopenflow: Fix frag config flag values
Justin Pettit [Sat, 20 Feb 2010 05:30:03 +0000 (21:30 -0800)]
openflow: Fix frag config flag values

14 years agodatapath: Set the correct bits for OFPAT_SET_NW_TOS action.
Ben Pfaff [Thu, 11 Feb 2010 23:19:26 +0000 (15:19 -0800)]
datapath: Set the correct bits for OFPAT_SET_NW_TOS action.

The DSCP bits are the high bits, not the low bits.

Reported-by: Jean Tourrilhes <jt@hpl.hp.com>
14 years agoofproto: Fix implementation of OFPAT_SET_NW_DST.
Ben Pfaff [Fri, 12 Feb 2010 20:59:50 +0000 (12:59 -0800)]
ofproto: Fix implementation of OFPAT_SET_NW_DST.

From Jean Tourrilhes <jt@hpl.hp.com>.

14 years agoovs-switchui: Fix typo.
Ben Pfaff [Thu, 11 Feb 2010 23:19:39 +0000 (15:19 -0800)]
ovs-switchui: Fix typo.

14 years agoDon't go beyond buffer length when printing descriptions
Justin Pettit [Fri, 22 Jan 2010 23:12:34 +0000 (15:12 -0800)]
Don't go beyond buffer length when printing descriptions

Prevent reading past the end of the buffer when a description is not
null-terminated.

Reported-by: Ben Pfaff <blp@nicira.com>
14 years agoofproto: Don't leak descriptions when destroying an ofproto
Justin Pettit [Fri, 22 Jan 2010 22:01:16 +0000 (14:01 -0800)]
ofproto: Don't leak descriptions when destroying an ofproto

Reported-by: Ben Pfaff <blp@nicira.com>
14 years agoofproto: Set protocol version to 0x01 (OpenFlow 1.0)
Justin Pettit [Wed, 20 Jan 2010 06:47:33 +0000 (22:47 -0800)]
ofproto: Set protocol version to 0x01 (OpenFlow 1.0)

Finalize OpenFlow 1.0 wire-compatibility:

    - Set protocol version to 0x01
    - Remove references to retired OFPC_MULTI_PHY_TX
    - Clean extraneous spaces in header file

NOTE: This is the final commit in the OpenFlow 1.0 set.  Starting with
this commit, OVS is OpenFlow 1.0 wire-compatible.  Slicing is not yet
implemented.

14 years agoofproto: Add wire-compatibility for slicing (OpenFlow 1.0)
Justin Pettit [Fri, 22 Jan 2010 07:42:47 +0000 (23:42 -0800)]
ofproto: Add wire-compatibility for slicing (OpenFlow 1.0)

OpenFlow 1.0 adds support for a subset of QoS that's referred to as slicing.
Open vSwitch does not support this yet, so send errors if it's used.

NOTE: OVS at this point is not wire-compatible with OpenFlow 1.0 until
the final commit in this OpenFlow 1.0 set.

14 years agoofproto: Querying port stats for individual ports (OpenFlow 1.0)
Justin Pettit [Wed, 20 Jan 2010 06:35:18 +0000 (22:35 -0800)]
ofproto: Querying port stats for individual ports (OpenFlow 1.0)

OpenFlow 1.0 adds "port_no" field to the Port Stat request messages to
allow stats for individual ports to be queried.  Port stats for all ports
can still be requested by specifying OFPP_NONE as the port number.

NOTE: OVS at this point is not wire-compatible with OpenFlow 1.0 until
the final commit in this OpenFlow 1.0 set.

14 years agoofproto: Match on IP ToS/DSCP bits (OpenFlow 1.0)
Justin Pettit [Fri, 22 Jan 2010 01:34:05 +0000 (17:34 -0800)]
ofproto: Match on IP ToS/DSCP bits (OpenFlow 1.0)

OpenFlow 1.0 adds support for matching on IP ToS/DSCP bits.

NOTE: OVS at this point is not wire-compatible with OpenFlow 1.0 until
the final commit in this OpenFlow 1.0 set.

14 years agoofproto: Improve resolution of flow stats and removed messages (OpenFlow 1.0)
Justin Pettit [Tue, 19 Jan 2010 23:35:02 +0000 (15:35 -0800)]
ofproto: Improve resolution of flow stats and removed messages (OpenFlow 1.0)

OpenFlow 1.0 increases the resolution of flow stats and flow removed messages
from seconds to (potentially) nanoseconds.  The spec stats that only
millisecond granularity is required, so that's all we provide at this
time.  Increasing to nanoseconds would require more significant code
change and would not provide an appreciable improvement in real world
use.

NOTE: OVS at this point is not wire-compatible with OpenFlow 1.0 until
the final commit in this OpenFlow 1.0 set.

14 years agoofproto: Add support for matching IP addresses in ARP header (OpenFlow 1.0)
Justin Pettit [Tue, 10 Nov 2009 00:43:47 +0000 (16:43 -0800)]
ofproto: Add support for matching IP addresses in ARP header (OpenFlow 1.0)

The OpenFlow 1.0 specification supports matching the IP address and
opcode in ARP messages.  The datapath already supports this, so this
commit merely exposes that through the OpenFlow module.

NOTE: OVS at this point is not wire-compatible with OpenFlow 1.0
until the final commit in this OpenFlow 1.0 set.

14 years agoofproto: Add support for flow cookies (OpenFlow 1.0)
Justin Pettit [Wed, 13 Jan 2010 07:22:22 +0000 (23:22 -0800)]
ofproto: Add support for flow cookies (OpenFlow 1.0)

In OpenFlow 1.0, flows have been extended to include an opaque
identifier, referred to as a cookie. The cookie is specified by the
controller when the flow is installed; the cookie will be returned as
part of each flow stats and flow removed message.

NOTE: OVS at this point is not wire-compatible with OpenFlow 1.0 until
the final commit in this Openflow 1.0 set.

14 years agoofproto: Add user-specifiable datapath description (OpenFlow 1.0)
Justin Pettit [Wed, 13 Jan 2010 07:01:25 +0000 (23:01 -0800)]
ofproto: Add user-specifiable datapath description (OpenFlow 1.0)

In OpenFlow 1.0, a "dp_desc" character array was added to the ofp_desc_stats
structure that allows a human readable description of the datapath to be
provided.

NOTE: OVS at this point is not wire-compatible with OpenFlow 1.0 until
the final commit in this OpenFlow 1.0 set.

14 years agoofproto: Use 64-bit datapath id and management id (OpenFlow 0.9)
Justin Pettit [Fri, 13 Nov 2009 21:21:13 +0000 (13:21 -0800)]
ofproto: Use 64-bit datapath id and management id (OpenFlow 0.9)

The length of a datapath was changed from 48 bits to 64 bits in OpenFlow
0.9.  For parity, we increased the management id size to match.

NOTE: This is the final commit in the OpenFlow 0.9 set.  Starting with
this commit, OVS is OpenFlow 0.9-compliant.

14 years agoofproto: Add support for barrier command (OpenFlow 0.9)
Justin Pettit [Fri, 13 Nov 2009 20:41:57 +0000 (12:41 -0800)]
ofproto: Add support for barrier command (OpenFlow 0.9)

OpenFlow 0.9 introduces the concept of the barrier command.  When the
controller sends a Barrier Request, the switch is not allowed to respond
with a Barrier Reply until it has finished processing any other commands
that preceded it.  This commit provides that support.

NOTE: OVS at this point is not wire-compatible with OpenFlow 0.9 until the
final commit in this OpenFlow 0.9 set.

14 years agoofproto: Cleanups to openflow.h (OpenFlow 0.9)
Justin Pettit [Fri, 13 Nov 2009 19:36:02 +0000 (11:36 -0800)]
ofproto: Cleanups to openflow.h (OpenFlow 0.9)

This commit cleans up a few comments in openflow.h.  The only one of
significance is that OpenFlow port numbers now begin enumeration at 1.
OVS already behaved in this manner, so this is just a documentation
issue for us.

NOTE: OVS at this point is not wire-compatible with OpenFlow 0.9 until the
final commit in this OpenFlow 0.9 set.

14 years agoofproto: Add selective Flow Removed messages and flow deletes (OpenFlow 0.9)
Justin Pettit [Fri, 13 Nov 2009 19:08:32 +0000 (11:08 -0800)]
ofproto: Add selective Flow Removed messages and flow deletes (OpenFlow 0.9)

In OpenFlow 0.9, flow "expiration" messages are sent when flows are
explicitly removed by a delete action.  As such, the message is renamed
from Flow Expired to Flow Removed.  This commit adds that support as well
as supporting the ability to choose sending these messages on a per flow
basis.

NOTE: OVS at this point is not wire-compatible with OpenFlow 0.9 until the
final commit in this OpenFlow 0.9 set.

14 years agoofproto: Use active time for Flow Expiration duration (OpenFlow 0.9)
Justin Pettit [Fri, 13 Nov 2009 00:52:17 +0000 (16:52 -0800)]
ofproto: Use active time for Flow Expiration duration (OpenFlow 0.9)

In pre-0.9 versions of OpenFlow, the duration field in the flow
expiration message was the amount of time that the flow was in a table.
If a long idle timeout was set, it could be difficult to determine how
long the flow was actually active.  In OpenFlow 0.9, this was changed to
only be the length of time that the flow was active.

NOTE: OVS at this point is not wire-compatible with OpenFlow 0.9 until the
final commit in this OpenFlow 0.9 set.

14 years agoofproto: Check overlap, emerg flow cache, and error code sync (OpenFlow 0.9)
Justin Pettit [Thu, 12 Nov 2009 23:40:33 +0000 (15:40 -0800)]
ofproto: Check overlap, emerg flow cache, and error code sync (OpenFlow 0.9)

This commit adds (some) support for a couple new OpenFlow 0.9 features:

    - The OFPFF_CHECK_OVERLAP flag in Flow Mod messages allows the
      controller to prevent flows that would conflict at the same
      priority.

    - An emergency flow cache that contains a small flow table that is
      used if the switch loses connectivity with the controller.  I
      believe the design has fundamental flaws and looks likely to be
      retired.  If a controller attempts to add a flow to the emergency
      flow cache, OVS always responds that the tables are full.

The OpenFlow 0.9 error codes are also sync'd in the commit.

NOTE: OVS at this point is not wire-compatible with OpenFlow 0.9 until the
final commit in this OpenFlow 0.9 set.

14 years agoofproto: Match VLAN PCP and rewrite ToS bits (OpenFlow 0.9)
Justin Pettit [Wed, 11 Nov 2009 22:59:49 +0000 (14:59 -0800)]
ofproto: Match VLAN PCP and rewrite ToS bits (OpenFlow 0.9)

Starting in OpenFlow 0.9, it is possible to match on the VLAN PCP
(priority) field and rewrite the IP ToS/DSCP bits.  This check-in
provides that support and bumps the wire protocol number to 0x98.

NOTE: The wire changes come together over the set of OpenFlow 0.9 commits,
so OVS will not be OpenFlow-compatible with any official release between
this commit and the one that completes the set.

14 years agonetdev: Rename "class" members to "netdev_class" for C++ compatibility.
Ben Pfaff [Fri, 22 Jan 2010 23:13:26 +0000 (15:13 -0800)]
netdev: Rename "class" members to "netdev_class" for C++ compatibility.

From partner.

14 years agohmap: Rename "new" to "new_node" for C++ header compatibility.
Ben Pfaff [Fri, 22 Jan 2010 23:10:07 +0000 (15:10 -0800)]
hmap: Rename "new" to "new_node" for C++ header compatibility.

From partner.

14 years agodpif: Rename "class" member to "dpif_class" for C++ compatibility.
Ben Pfaff [Fri, 22 Jan 2010 23:14:01 +0000 (15:14 -0800)]
dpif: Rename "class" member to "dpif_class" for C++ compatibility.

From partner.

14 years agoRelease Open vSwitch 0.99.0. v0.99.0
Justin Pettit [Fri, 15 Jan 2010 07:24:09 +0000 (23:24 -0800)]
Release Open vSwitch 0.99.0.

This is an "unstable" release.

14 years agodatapath: Disable preemption updating per-CPU data in dp_dev_recv().
Ben Pfaff [Wed, 13 Jan 2010 18:43:31 +0000 (10:43 -0800)]
datapath: Disable preemption updating per-CPU data in dp_dev_recv().

dp_dev_recv() is called from do_output(), which can be called from
execute_actions(), which can be called from process context with
preemption enabled, so it needs to disabled preemption before it can
access per-CPU data.

Build tested on a few different kernels.

Bug #2316.

Reported-by: John Galgay <john@galgay.net>
CC: Dan Wendlandt <dan@nicira.com>
14 years agoAdd runtime test that strtok_r() bug fix works.
Ben Pfaff [Wed, 6 Jan 2010 18:00:56 +0000 (10:00 -0800)]
Add runtime test that strtok_r() bug fix works.

Our bug fix for glibc's strtok_r() bug was not effective in distribution
tarballs.  This new test should catch that problem earlier in case it
recurs.

14 years agoInclude lib/string.h in "make dist"-generated tarballs.
Ben Pfaff [Wed, 6 Jan 2010 17:53:32 +0000 (09:53 -0800)]
Include lib/string.h in "make dist"-generated tarballs.

This file was missing from distributions.  Its lack prevented the
strtok_r() fix from working on systems that need it.

Reported-by: Tetsuo NAKAGAWA <nakagawa@mxc.nes.nec.co.jp>
14 years agovconn: Add comment describing usage of VCONN_SSL_LONG_OPTIONS
Justin Pettit [Tue, 5 Jan 2010 08:08:34 +0000 (00:08 -0800)]
vconn: Add comment describing usage of VCONN_SSL_LONG_OPTIONS

14 years agoAdd extended vlog options to utilities
Justin Pettit [Tue, 5 Jan 2010 02:55:00 +0000 (18:55 -0800)]
Add extended vlog options to utilities

The ovs-discover, ovs-dpctl, and ovs-ofctl man pages indicated that they
supported extended vlog options (e.g., --log-file), but they actually
did not.  This commit adds them.

Reported by Tetsuo NAKAGAWA <nakagawa@mxc.nes.nec.co.jp>

14 years agoofproto: Fix segfault when changing command execution settings
Tetsuo NAKAGAWA [Tue, 5 Jan 2010 02:19:47 +0000 (18:19 -0800)]
ofproto: Fix segfault when changing command execution settings

If the remote command execution settings are changed and a NULL argument
is given for the directory, a crash would occur.  With this change, the
default directory is used.

14 years agoxenserver: Fix small typo in vswitch-xapi-update
Justin Pettit [Tue, 5 Jan 2010 00:33:49 +0000 (16:33 -0800)]
xenserver: Fix small typo in vswitch-xapi-update

14 years agoFix documented name of key used to disable MAC learning on a VLAN.
Ben Pfaff [Mon, 4 Jan 2010 23:01:41 +0000 (15:01 -0800)]
Fix documented name of key used to disable MAC learning on a VLAN.

The code uses "disable-learning" but the documentation claimed that it
was "learning-disable".

14 years agoinitscript: pass complete path to pidfile to status command
Ben Pfaff [Thu, 17 Dec 2009 18:00:36 +0000 (10:00 -0800)]
initscript: pass complete path to pidfile to status command

Older versions of RHEL/CentOS used pifof in preference to the pidfile
and hence we got away with passing just the basename instead of
including the full path. Using pidof first doesn't make much sense and
this was fixed in RHEL 5 update 4 (see https://bugzilla.redhat.com/show_bug.cgi?id=440658)

This means that on RHEL 5.4 "service vswitch status" always returned
"ovs-vswitchd is stopped" even if it was running. Fix this issue by
passing in the correct pidfile name.

Cross-port of Ian Campbell's commit d1c8c9e4 on xs5.7 branch.

14 years agoovs-vsctl: Fix traceback when telling target to reload
Justin Pettit [Fri, 4 Dec 2009 22:11:53 +0000 (14:11 -0800)]
ovs-vsctl: Fix traceback when telling target to reload

The code to tell the target to reload was referencing a non-existent
global variable to determine the target.  This change uses the correct
one.

14 years agonetdev: Allow explicit creation of netdev objects
Justin Pettit [Tue, 1 Dec 2009 09:14:33 +0000 (01:14 -0800)]
netdev: Allow explicit creation of netdev objects

This change adds netdev_create() and netdev_destroy() functions to allow
the creation of network devices through the netdev library.  Previously,
network devices had to already exist or be created on demand through
netdev_open().  This caused problems such as not being able to specify
TAP devices as ports in ovs-vswitchd, which this patch fixes.

This also lays the groundwork for adding GRE and VDE support.

14 years agodpif: Minor provider comment cleanups.
Justin Pettit [Tue, 1 Dec 2009 07:20:57 +0000 (23:20 -0800)]
dpif: Minor provider comment cleanups.

14 years agoclassifier: Improve comments.
Ben Pfaff [Tue, 24 Nov 2009 17:59:54 +0000 (09:59 -0800)]
classifier: Improve comments.

14 years agoovs-openflowd: Add support for userspace-only switching.
Ben Pfaff [Mon, 23 Nov 2009 19:32:08 +0000 (11:32 -0800)]
ovs-openflowd: Add support for userspace-only switching.

14 years agosvec: New function svec_split().
Ben Pfaff [Mon, 23 Nov 2009 19:09:38 +0000 (11:09 -0800)]
svec: New function svec_split().

This is useful in an upcoming commit.

14 years agodpif: New function dpif_create_and_open().
Ben Pfaff [Mon, 23 Nov 2009 19:09:19 +0000 (11:09 -0800)]
dpif: New function dpif_create_and_open().

This function combines what dpif_create() and dpif_open() do.  It allows
us to factor a tiny amount of code out of the vswitch, but more importantly
this function is also useful in the following commit.

14 years agonetflow: Break out code for sending packets into a new "collectors" module.
Ben Pfaff [Mon, 23 Nov 2009 21:59:20 +0000 (13:59 -0800)]
netflow: Break out code for sending packets into a new "collectors" module.

sFlow uses a similar UDP structure so this will allow use to reuse the
NetFlow code for it.

14 years agonetflow: Use inet_open_active() to factor out some code.
Ben Pfaff [Mon, 23 Nov 2009 20:22:03 +0000 (12:22 -0800)]
netflow: Use inet_open_active() to factor out some code.

14 years agosocket-util: Generalize tcp_open_*() to UDP, as inet_open_*().
Ben Pfaff [Mon, 23 Nov 2009 20:18:59 +0000 (12:18 -0800)]
socket-util: Generalize tcp_open_*() to UDP, as inet_open_*().

The tcp_open_active() and tcp_open_passive() functions don't really have
any strong dependencies on TCP.  With a couple of simple changes they
can be used for UDP also.  Since this is useful for Netflow, this commit
does so.

14 years agosocket-util: Make TCP open function support no default port.
Ben Pfaff [Thu, 19 Nov 2009 21:44:49 +0000 (13:44 -0800)]
socket-util: Make TCP open function support no default port.

Until now, tcp_open_active() and tcp_open_passive() have only been used
in situations where there is a reasonable default port, e.g. OFP_TCP_PORT.
But for NetFlow there is no universal default, so enhance these functions
so that they can require the user to specify a port explicitly.

Crossported from the 'db' branch, where this is useful for JSON-RPC, which
also has no widely known port.

14 years agonetdev: New function netdev_get_ifindex().
Ben Pfaff [Mon, 23 Nov 2009 20:25:08 +0000 (12:25 -0800)]
netdev: New function netdev_get_ifindex().

sFlow needs the ifindex of an interface, so this commit adds a function
to retrieve it.

14 years agoMove C compiler warning (-W) flags from CFLAGS to AM_CFLAGS.
Ben Pfaff [Thu, 19 Nov 2009 21:25:42 +0000 (13:25 -0800)]
Move C compiler warning (-W) flags from CFLAGS to AM_CFLAGS.

C compiler warning options added by the "configure" script have until
now been put into CFLAGS.  However that option is supposed to be reserved
for the user under Automake rules, so move them to AM_CFLAGS.

Besides increased adherence to Automake rules, this is useful because
AM_CFLAGS can be overridden on a per-target (e.g. program or library)
basis, whereas CFLAGS cannot.  In turn, building the sFlow library (which
will be added in an upcoming commit) requires overriding the compiler
flags to avoid some warning messages.  (By modifying the warning flags, we
avoid the need to modify the sFlow library in any way.)

14 years agoacinclude.m4: Fix inconsistency.
Ben Pfaff [Thu, 19 Nov 2009 00:27:55 +0000 (16:27 -0800)]
acinclude.m4: Fix inconsistency.

Both ; and : are valid shell commands here, but one branch of the "if"
uses one and the other branch uses the other.  Use the same one, for
consistency's sake.

14 years agoCorrect dameon options in INSTALL.bridge
Justin Pettit [Thu, 19 Nov 2009 23:45:20 +0000 (15:45 -0800)]
Correct dameon options in INSTALL.bridge

A while back, we retired the short options for daemons.  The
INSTALL.bridge file was never updated to reflect this.

CC: Jeongkeun Lee <jklee@hp.com>
14 years agonetdev: Really set output values to 0 on failure in netdev_get_features().
Ben Pfaff [Thu, 19 Nov 2009 19:06:14 +0000 (11:06 -0800)]
netdev: Really set output values to 0 on failure in netdev_get_features().

The comment on netdev_get_features() claimed that all of the passed-in
values were set to 0 on failure, but the implementation didn't live up
to the promise.

CC: Paul Ingram <paul@nicira.com>
14 years agoovs-controller: Add --wildcard and --normal features.
Jean Tourrilhes [Thu, 19 Nov 2009 20:48:32 +0000 (12:48 -0800)]
ovs-controller: Add --wildcard and --normal features.

This adds two command line switches to ovs-controller to:
1) Use wildcards instead of exact matches.
2) Use "normal" action instead of explicit port.

14 years agodatapath: Use HAVE_PROTO_DATA_VALID when defining vswitch_skb_checksum_setup
Ian Campbell [Thu, 19 Nov 2009 18:20:49 +0000 (10:20 -0800)]
datapath: Use HAVE_PROTO_DATA_VALID when defining vswitch_skb_checksum_setup

The purpose of the non-empty variant of vswitch_skb_checksum_setup is to
synchronise the proto_data_valid and proto_csum_blank fields into the
standard skb csum/ip_summed fields, therefore it is more correct to key
off of HAVE_PROTO_DATA_VALID.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
14 years agodatapath: Fix warning building datapath on pre-2.6.24 kernels.
Ben Pfaff [Wed, 18 Nov 2009 23:56:57 +0000 (15:56 -0800)]
datapath: Fix warning building datapath on pre-2.6.24 kernels.

The Linux 'min' macro checks that its arguments have the same type, and
if not the compiler reports a message about incompatible pointer types.
On pre-2.6.24 kernels skb_headroom() returns int, so this code was
firing a warning:
       unsigned headroom = max(min_headroom, skb_headroom(skb));

This commit makes skb_headroom() return an unsigned int regardless of
kernel version.

14 years agodatapath: Check for proto_data_valid member instead of kernel version.
Ben Pfaff [Wed, 18 Nov 2009 23:19:50 +0000 (15:19 -0800)]
datapath: Check for proto_data_valid member instead of kernel version.

Commit 5ef800a69 "datapath: Copy Xen's checksumming fields when doing
skb_copy" should copy proto_data_valid between sk_buffs when that field
is present.  However the check for CONFIG_XEN plus kernel version 2.6.18
isn't sufficient, because SLES 11 kernels are version 2.6.27 but do have
this field.

This commit adds a configure-time check for the presence of the member
instead of attempting to guess based on the kernel version.

Thanks to Ian Campbell for reporting this problem.

CC: <Ian.Campbell@citrix.com>
14 years agoMerge citrix branch into master.
Ben Pfaff [Wed, 18 Nov 2009 22:14:29 +0000 (14:14 -0800)]
Merge citrix branch into master.

14 years agodatapath: Allow minimum headroom to be set when copying buffers.
Jesse Gross [Wed, 18 Nov 2009 03:03:27 +0000 (19:03 -0800)]
datapath: Allow minimum headroom to be set when copying buffers.

If we need to copy an sk_buff in order to make it writable, allow
the minimum headroom to be specified.  This ensures that if we
need to add additional data, such as a VLAN tag, we will not have
to make a second copy.

Solves bug #2197 in certain situations.

14 years agodatapath: Copy Xen's checksumming fields when doing skb_copy.
Jesse Gross [Wed, 18 Nov 2009 01:28:00 +0000 (17:28 -0800)]
datapath: Copy Xen's checksumming fields when doing skb_copy.

Two fields that control checksumming were added to sk_buff in
Xen: proto_data_valid and proto_csum_blank.  These fields are copied
when doing a skb_clone but not in other functions such as skb_copy,
which can lead to checksum errors in TCP and UDP when offloading is
enabled in the guest.  To fix this we manually copy these fields,
though ideally this should be fixed upstream in Xen.

Bug #2299

14 years agodatapath: Fix build with kernel header layout recently adopted by Debian.
Ben Pfaff [Wed, 18 Nov 2009 19:05:00 +0000 (11:05 -0800)]
datapath: Fix build with kernel header layout recently adopted by Debian.

Recent Debian kernel-header packages divide kernel headers into two
directories: the "common" headers that are not architecture-specific,
which go in a directory named like
    /usr/src/kernel-headers-2.6.31-1-common,
and architecture-specific headers in a directory named, e.g.
    /usr/src/kernel-headers-2.6.31-1-686.
OVS needs to look at the ones in the "common" directory as part of its
configuration process, but the build directory provided on --with-l26 is
the architecture-specific directory.  We also need the
architecture-specific directory, since it is the one that we use as part
of the "make", so we can't simply make the user specify the common
directory on --with-l26.  Furthermore, there is no easy-to-see link
between the two directories, except as part of the text in a Makefile,
which is not the easiest language to parse.

This commit attempts to kluge around the problem by using the Debian
directory naming.  If the build directory does not contain the headers,
then we replace the last component of its name by "-common" and check
for the headers there.  This is not ideal, but it does solve the actual
problem at hand.

Tested with Debian's linux-headers-2.6.31-1-686 and with a few older
sets of headers that do not use this scheme.

14 years agoDocument userspace switch.
Ben Pfaff [Wed, 18 Nov 2009 20:57:18 +0000 (12:57 -0800)]
Document userspace switch.

14 years agoUpdate documentation to mention correct Autoconf version prerequisite.
Ben Pfaff [Wed, 18 Nov 2009 18:03:34 +0000 (10:03 -0800)]
Update documentation to mention correct Autoconf version prerequisite.

14 years agodatapath: Remove unused print_flow() function
Justin Pettit [Tue, 17 Nov 2009 17:51:34 +0000 (09:51 -0800)]
datapath: Remove unused print_flow() function

14 years agodatapath: Cleanup tab/space issues in datapath
Justin Pettit [Mon, 16 Nov 2009 23:24:35 +0000 (15:24 -0800)]
datapath: Cleanup tab/space issues in datapath

14 years agovconn: Fix endian issue in unknown action type error message
Justin Pettit [Mon, 16 Nov 2009 23:26:31 +0000 (15:26 -0800)]
vconn: Fix endian issue in unknown action type error message

14 years agoovs-ofctl: Add support for transport and network modification actions
Justin Pettit [Tue, 17 Nov 2009 01:58:26 +0000 (17:58 -0800)]
ovs-ofctl: Add support for transport and network modification actions

Add support to ovs-ofctl for modifying the network source and destination
IP address with the "mod_nw_src" and "mod_nw_dst" actions, respectively.
And support modifying the TCP/UDP source and destination ports with the
"mod_tp_src" and "mod_tp_dst" actions, respectively.

14 years agoofproto: Support missing set_nw_dst and set_tp_dst translations
Justin Pettit [Tue, 17 Nov 2009 02:08:12 +0000 (18:08 -0800)]
ofproto: Support missing set_nw_dst and set_tp_dst translations

The function that translates OpenFlow actions into datapath actions was
missing definitions for OFPAT_SET_NW_DST and OFPAT_SET_TP_DST.  This
meant those actions would not occur in the datapath.

14 years agodatapath: Calculate proper checksum for set_tp_src/dst action
Justin Pettit [Tue, 17 Nov 2009 01:51:31 +0000 (17:51 -0800)]
datapath: Calculate proper checksum for set_tp_src/dst action

When the set_tp_src or set_tp_dst action is used, the calculation for
where the checksum is located was wrong.  This caused the checksum to
not be updated and packet corruption in the bad offset.

14 years agoovs-appctl: Fix shadow variable that could cause segfault
Justin Pettit [Tue, 17 Nov 2009 00:36:21 +0000 (16:36 -0800)]
ovs-appctl: Fix shadow variable that could cause segfault

The variable "socket_name" contains the name of the unix domain socket
to be used for communicating with the OVS process.  If the target does
not begin with a "/", the socket name is determined based on a pidfile.
A shadow copy of "socket_name" was kept in the block that looks at the
pidfile, which would cause the function-level one to not be set.  This
removes that shadow copy.

14 years agoofproto: Update time of super-rule to match sub-rule
Justin Pettit [Sat, 14 Nov 2009 02:53:28 +0000 (18:53 -0800)]
ofproto: Update time of super-rule to match sub-rule

Rules keep track of their creation and last used time.  When a sub-rule
is updated, it wasn't updating the time of its super-rule.  This commit
fixes that behavior.

Thanks to Jesse Gross for the help tracking this down.

14 years agoovs-openflowd: Setup default listener
Justin Pettit [Fri, 13 Nov 2009 23:51:44 +0000 (15:51 -0800)]
ovs-openflowd: Setup default listener

By default, ovs-openflowd was not listening for any management
connections.  Tools such as ovs-ofctl attempt to use a default location
based on the datapath name.  This change creates that default listener.

14 years agoofproto: Don't send OpenFlow flow expirations hidden rules.
Jesse Gross [Fri, 13 Nov 2009 01:41:58 +0000 (17:41 -0800)]
ofproto: Don't send OpenFlow flow expirations hidden rules.

We were reporting flow expirations for the hidden exact match flows
with the stats set to zero.  These are an implementation detail and
can confuse controllers, so don't report them.

CC: David Erickson <derickso@stanford.edu>
14 years agoofproto: Distinguish stats from before and after action changes.
Jesse Gross [Thu, 12 Nov 2009 23:58:18 +0000 (15:58 -0800)]
ofproto: Distinguish stats from before and after action changes.

When a rule is revalidated and the actions change don't lump all
the stats together.  This will clear the stats in the datapath
and send a NetFlow expiration message.  This could already happen
before in certain circumstances so this change makes it more
consistent.

14 years agoofproto: Correct structure length assertion for ofp_action_vlan_pcp
Justin Pettit [Fri, 13 Nov 2009 19:15:35 +0000 (11:15 -0800)]
ofproto: Correct structure length assertion for ofp_action_vlan_pcp

14 years agoxenserver: interface-reconfigure and vif hotplug relicensing.
Ian Campbell [Tue, 10 Nov 2009 09:23:51 +0000 (09:23 +0000)]
xenserver: interface-reconfigure and vif hotplug relicensing.

As part of the Open Sourcing of xapi (the XenServer toolstack) via the
XenCloud project (announcement in [0]). The upstream versions of
interface-reconfigure and the vif hotplug script have been re-licensed
under an LGPL v2.1 + exception license. The exception applies to other
files in the upstream repository and doesn't particularly make sense for
these scripts but it is included to maintain the uniformity of the
license for the upstream repository.

This patch synchronises the licenses headers on those scripts with the
upstream version. Since those headers refer to a file called LICENSE in
the upstream repository I have included a copy here, slightly modified
to indicate precisely which files it applies to.

Git shows[1] that only myself and Nicira employees have made
modifications to these scripts in the openvswitch repository. The
licensing change has been okayed by Keith Amidon on behalf of Nicira.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
[0]
http://lists.xensource.com/archives/html/xen-devel/2009-11/msg00117.html

14 years agoofp-print: Add missing error types
Justin Pettit [Thu, 12 Nov 2009 23:46:35 +0000 (15:46 -0800)]
ofp-print: Add missing error types

14 years agoofproto: Correctly credit stats for displaced rules.
Jesse Gross [Thu, 12 Nov 2009 20:44:44 +0000 (12:44 -0800)]
ofproto: Correctly credit stats for displaced rules.

When a rule displaces another, we are supposed to credit the stats
for packets that have already been processed to the displaced rule
before we eject it from the datapath.  However, we were instead
crediting the new rule.

14 years agobridge: Fix segfault when updating learning table for deleted port.
Jesse Gross [Thu, 12 Nov 2009 01:05:22 +0000 (17:05 -0800)]
bridge: Fix segfault when updating learning table for deleted port.

A function call using in_port was accidentally moved before the check
to see if it is null.  in_port can be null if a port was deleted but
an update is still pending.  This moves the call after the check.

Bug #2313

14 years agomirroring: Preserve key for disabling learning.
Jesse Gross [Wed, 11 Nov 2009 22:48:48 +0000 (14:48 -0800)]
mirroring: Preserve key for disabling learning.

Don't delete the key for disabling MAC learning on a given VLAN
after a reboot.  Also logs when learning is disabled.

14 years agobridge: Feed flow stats into learning table.
Jesse Gross [Wed, 11 Nov 2009 21:06:16 +0000 (13:06 -0800)]
bridge: Feed flow stats into learning table.

Update the learning table to keep it current with flows actually
going through the datapath.  This ensures that entries do not age
out when they are actively being used.

Feature #2209

14 years agoofproto: Update stats for exact match flows before expiration.
Jesse Gross [Wed, 11 Nov 2009 19:13:37 +0000 (11:13 -0800)]
ofproto: Update stats for exact match flows before expiration.

When a wildcarded flow is expired we remove all of the subrules to
collect their stats before sending a flow expiration message.  However,
we were only removing exact match flows after the expiration message
is composed.  This uninstalls it first.

CC: David Erickson <derickso@stanford.edu>
14 years agoMerge citrix branch into master.
Jesse Gross [Tue, 10 Nov 2009 23:12:01 +0000 (15:12 -0800)]
Merge citrix branch into master.

14 years agomirroring: Allow learning to be disabled on a VLAN.
Jesse Gross [Sat, 7 Nov 2009 01:13:51 +0000 (17:13 -0800)]
mirroring: Allow learning to be disabled on a VLAN.

RSPAN does not work properly unless MAC learning for the VLAN is
disabled on all switches between the origin and monitoring point.
This allows learning to be disabled on a given VLAN so vSwitch can
acts as an intermediate switch.

Feature #2136

14 years agobridge: Require learning table at all times.
Jesse Gross [Mon, 9 Nov 2009 23:26:51 +0000 (15:26 -0800)]
bridge: Require learning table at all times.

The bridge nominally allowed the MAC learning module to not be enabled
though in reality it was always used.  Tracking active MAC addresses
in the bridge is useful for other reasons besides deciding the output
port - primarily for bonding.  In addition there were several bugs
that would have been triggered had learning actually been disabled since
that code path is never tested.  This makes it explicit that the learning
table should be maintained at all times.

14 years agovconn: Clean-up "match" typo in comments
Justin Pettit [Tue, 10 Nov 2009 00:06:52 +0000 (16:06 -0800)]
vconn: Clean-up "match" typo in comments

A few comments referenced "m", when "match" was clearly meant.  This was
likely due to a quick search and replace that scooped up these comments
along with the intended code.  This cleans that up.

14 years agoovs-vsctl: Capitalize names of global constants but not variables.
Ben Pfaff [Mon, 9 Nov 2009 23:02:05 +0000 (15:02 -0800)]
ovs-vsctl: Capitalize names of global constants but not variables.

Conforms to the Google style guide for Python.

Reported by Justin.

14 years agoMake ovs-appctl easier to use and synchronize its interface with ovs-vsctl.
Ben Pfaff [Mon, 9 Nov 2009 22:46:38 +0000 (14:46 -0800)]
Make ovs-appctl easier to use and synchronize its interface with ovs-vsctl.

It is inconvenient to type the whole path to the Unix daemon socket when
using ovs-appctl.  Allow the name of the daemon to be used instead when
a pidfile exists in the default location, and contact ovs-vswitchd by
default.

Also, the various options for manipulating vlog were invented before the
general-purpose command mechanism existed.  Get rid of all of the action
options in favor of just specifying the command to be executed as
non-option arguments.

Finally, there simply wasn't much value in allowing multiple targets or
options to be specified; these variations were never used in practice.  So
simplify the interface by making it one target, one action per invocation.

Also, make ovs-vsctl use the same syntax for its --target option.

Based on work by Justin Pettit.

14 years agobonding: Ignore updelay if there is no active slave.
Jesse Gross [Wed, 4 Nov 2009 21:48:41 +0000 (13:48 -0800)]
bonding: Ignore updelay if there is no active slave.

If all slaves on a bond are down but some are waiting for an updelay,
enable the slave with the shortest amount of delay remaining.  This
would already occur if all other slaves were disabled at the time the
delay was to begin but not if a delay was already in progress.  This
also immediately sends learning packets out in both situations, which
prevents incoming packets to disabled slaves from being blackholed.

CC: Danny Wannagat <Danny.Wannagat@eu.citrix.com>
14 years agoFix incorrect printf format specifiers.
Ben Pfaff [Fri, 6 Nov 2009 18:43:50 +0000 (10:43 -0800)]
Fix incorrect printf format specifiers.

GCC reported these during a 64-bit build.

14 years agobacktrace: Avoid GCC warning on x86-64.
Ben Pfaff [Fri, 6 Nov 2009 18:25:50 +0000 (10:25 -0800)]
backtrace: Avoid GCC warning on x86-64.

The portable implementation of stack_low(), which before this commit is
used on x86-64, provokes a warning from GCC that cannot be disabled.  We
already have an i386-specific implementation that does not warn; this
commit adds a corresponding implementation for x86-64 to avoid the warning
there too.

14 years agobacktrace: Suppress dumb GCC warning on x86-64.
Ben Pfaff [Fri, 6 Nov 2009 18:22:55 +0000 (10:22 -0800)]
backtrace: Suppress dumb GCC warning on x86-64.

Without this change GCC warns "use of assignment suppression and length
modifier together in scanf format", which doesn't actually point out any
real problem (and why would it?  Google turns up nothing interesting).

14 years agoudatapath: Implement ZERO_TCP_FLAGS option.
Jesse Gross [Fri, 6 Nov 2009 22:18:58 +0000 (14:18 -0800)]
udatapath: Implement ZERO_TCP_FLAGS option.

An option to zero the TCP flags when querying flow stats was added
to the kernel datapath to support NetFlow active timeouts.  This
adds that same support to the user datapath.

14 years agonetflow: Only query stats of installed flows.
Jesse Gross [Fri, 6 Nov 2009 21:26:42 +0000 (13:26 -0800)]
netflow: Only query stats of installed flows.

NetFlow active timeouts was querying the stats of all exact match
flows that had reached a certain age including those that could
not be installed.  This was not harmful but it was wasteful and
produced log spew.  This changes it to only query the flows that
are actually installed.

Bug #2252

14 years agodatapath: Allow TCP flags to be cleared.
Jesse Gross [Wed, 28 Oct 2009 21:36:52 +0000 (14:36 -0700)]
datapath: Allow TCP flags to be cleared.

When querying flow stats allow the TCP flags to be reset.  Since
the datapath ORs together all flags that have previously been
seen it is otherwise impossible to determine the set of flags from
after a particular time.

14 years agoRevert "ovs-ofctl: Fix use-after-free error in del-flows command."
Jean Tourrilhes [Thu, 5 Nov 2009 07:40:18 +0000 (23:40 -0800)]
Revert "ovs-ofctl: Fix use-after-free error in del-flows command."

This reverts commit cae7a4b90a55cbfd4cfd23c06f9f09cd429ab4c0.

This commit forced the user to specify an action when deleting a flow,
which is not desirable.  The change was not actually needed, as the
buffer is never passed to str_to_flow() in the original code.

14 years agoovs-ofctl: Fix use-after-free error in del-flows command.
Jean Tourrilhes [Wed, 4 Nov 2009 21:21:07 +0000 (13:21 -0800)]
ovs-ofctl: Fix use-after-free error in del-flows command.

14 years agoxenserver: Fix issue with deleting network UUID on VLAN destruction
Justin Pettit [Wed, 4 Nov 2009 05:19:47 +0000 (21:19 -0800)]
xenserver: Fix issue with deleting network UUID on VLAN destruction

In XenServer, a VLAN is considered an additional network with its own
UUID.  The interface-reconfigure script properly adds this network UUID
to the configuration script, but commit 774428 removed the code that
would remove this information on VLAN destruction.  Ian Campbell was the
author of that commit and felt that reverting this part was safe.

Bug #1973