sliver-openvswitch.git
14 years agoRework and simplify the "lcov" support for the testsuite.
Ben Pfaff [Mon, 1 Feb 2010 22:04:25 +0000 (14:04 -0800)]
Rework and simplify the "lcov" support for the testsuite.

14 years agodatapath: Set datapath device MTU to minimum of MTU of ports.
Jesse Gross [Mon, 1 Feb 2010 21:43:44 +0000 (16:43 -0500)]
datapath: Set datapath device MTU to minimum of MTU of ports.

The MTU of the local port should be no larger than the minimum of
the MTUs of the ports attached to the bridge, overwise packets may be
dropped.  We already prevent changes to the MTU that would violate
this constraint but don't actuallly proactively set the MTU.  This
changes makes everything consistent and matches the behavior of
the bridge.

14 years agoxenserver: Add XenServer 5.5.0 updates 1 and 2 to supported versions.
Jesse Gross [Fri, 29 Jan 2010 20:54:47 +0000 (15:54 -0500)]
xenserver: Add XenServer 5.5.0 updates 1 and 2 to supported versions.

Add the file hashes for updates  1  and 2 (the scripts we care about
are the same) to the list of supported versions to prevent a warning
message on install.

14 years agoClean up nicira-ext.h header a bit.
Ben Pfaff [Tue, 26 Jan 2010 19:43:27 +0000 (11:43 -0800)]
Clean up nicira-ext.h header a bit.

14 years agoofproto: Mark NXT_ACT_SET_CONFIG and NXT_ACT_GET_CONFIG obsolete.
Ben Pfaff [Tue, 26 Jan 2010 19:42:56 +0000 (11:42 -0800)]
ofproto: Mark NXT_ACT_SET_CONFIG and NXT_ACT_GET_CONFIG obsolete.

These Nicira-specific requests have not been implemented for some time.
In case we need them later we can always reimplement them.

14 years agoofproto: Remove support for OpenFlow-based management protocol.
Ben Pfaff [Tue, 26 Jan 2010 19:35:38 +0000 (11:35 -0800)]
ofproto: Remove support for OpenFlow-based management protocol.

Older versions of Open vSwitch supported a management protocol based on
OpenFlow message framing.  The current Open vSwitch instead uses the
OVSDB protocol for the same purposes.  We don't plan to support this older
protocol any longer, so this commit deletes support.

This commit also deletes the management_id column from the vswitch's
database schema.  The management_id was used by the older management
protocol to match up OpenFlow switch connections to management connections,
but the current implementation instead matches up connections based on
the datapath IDs exported by the configuration database.  In fact, the
OpenFlow connections had no way to actually export the management ID, so
this just deletes code that was essentially without function anyhow.

14 years agodpif: Allow providers to be managed at runtime.
Jesse Gross [Mon, 1 Feb 2010 16:36:01 +0000 (11:36 -0500)]
dpif: Allow providers to be managed at runtime.

The list of datapath providers was previously staticly defined at
compile time.  This allows new providers to be added and removed
at runtime.

14 years agonetdev: Allow providers to be managed at runtime.
Jesse Gross [Mon, 1 Feb 2010 16:35:54 +0000 (11:35 -0500)]
netdev: Allow providers to be managed at runtime.

The list of netdev providers was previously staticly defined at
compile time.  This allows new providers to be added and removed
at runtime.

14 years agoovs-vsctl: Add tests for database commands.
Ben Pfaff [Fri, 29 Jan 2010 00:18:43 +0000 (16:18 -0800)]
ovs-vsctl: Add tests for database commands.

Bug #2396.

14 years agoovs-vsctl: Add --if-exists option to "get" command, for map columns.
Ben Pfaff [Fri, 29 Jan 2010 00:03:52 +0000 (16:03 -0800)]
ovs-vsctl: Add --if-exists option to "get" command, for map columns.

14 years agoovs-vsctl: Improve error reporting.
Ben Pfaff [Fri, 29 Jan 2010 00:03:26 +0000 (16:03 -0800)]
ovs-vsctl: Improve error reporting.

14 years agoovs-vsctl: Alphabetize lists of database column names.
Ben Pfaff [Thu, 28 Jan 2010 23:59:11 +0000 (15:59 -0800)]
ovs-vsctl: Alphabetize lists of database column names.

This makes the "list" command print the database columns in alphabetical
order, which seems more sensible than the semi-random order we had before.

14 years agoovs-vsctl: Make "create" command print new row's UUID.
Ben Pfaff [Thu, 28 Jan 2010 22:00:22 +0000 (14:00 -0800)]
ovs-vsctl: Make "create" command print new row's UUID.

Also, document limitations of other commands regarding UUIDs of new rows.

14 years agoovs-vsctl: Add postprocess step.
Ben Pfaff [Thu, 28 Jan 2010 21:33:24 +0000 (13:33 -0800)]
ovs-vsctl: Add postprocess step.

Nothing uses this new feature yet, so this commit by itself has no visible
effect.

This is a step toward printing the UUIDs of newly inserted rows.

14 years agoovs-vsctl: Refactor in preparation for adding "postprocess" step.
Ben Pfaff [Fri, 29 Jan 2010 00:09:26 +0000 (16:09 -0800)]
ovs-vsctl: Refactor in preparation for adding "postprocess" step.

Until now, all the ovs-vsctl commands have had no need to look at the
results of the database transaction.  However, to print the UUID of newly
inserted database records, they do need to do this.

This commit refactors ovs-vsctl in preparation for adding this ability.

14 years agoNew functions hmap_moved(), shash_moved().
Ben Pfaff [Thu, 28 Jan 2010 22:21:31 +0000 (14:21 -0800)]
New functions hmap_moved(), shash_moved().

To be used in ovs-vsctl in an upcoming commit.

14 years agohmap: Rename hmap_moved() to hmap_node_moved().
Ben Pfaff [Thu, 28 Jan 2010 22:12:56 +0000 (14:12 -0800)]
hmap: Rename hmap_moved() to hmap_node_moved().

This prepares for adding a new function that deals with a "struct hmap"
moving, as opposed to a "struct hmap_node".

Since there was only a single call to this in the whole tree, and its
caller didn't have any callers of its own at all, also move this function
from hmap.h to hmap.c.

14 years agoovsdb-idl: Add interface to find out the permanent IDL of an inserted row.
Ben Pfaff [Thu, 28 Jan 2010 21:23:30 +0000 (13:23 -0800)]
ovsdb-idl: Add interface to find out the permanent IDL of an inserted row.

The ovs-vsctl "create" command, and perhaps other commands, should print
the UUID of the newly created database row, but until now the IDL has not
provided a way to find that out.  This commit adds the ability.

14 years agodynamic-string: New function ds_swap().
Ben Pfaff [Thu, 28 Jan 2010 21:11:39 +0000 (13:11 -0800)]
dynamic-string: New function ds_swap().

14 years agoovsdb-data: Allow spaces around '=' in key-value pairs.
Ben Pfaff [Thu, 28 Jan 2010 18:09:15 +0000 (10:09 -0800)]
ovsdb-data: Allow spaces around '=' in key-value pairs.

This allows a = b, a= b, a =b, etc. whereas before only a=b was accepted.

14 years agoovsdb-data: Allow arbitrary white space as string data delimiters.
Ben Pfaff [Wed, 27 Jan 2010 23:58:32 +0000 (15:58 -0800)]
ovsdb-data: Allow arbitrary white space as string data delimiters.

14 years agoovsdb-data: Make string parsing of negative 0 match JSON parsing.
Ben Pfaff [Wed, 27 Jan 2010 23:38:29 +0000 (15:38 -0800)]
ovsdb-data: Make string parsing of negative 0 match JSON parsing.

14 years agoopenflowd: Update for changes to dpif and netdev.
Jesse Gross [Fri, 22 Jan 2010 19:37:05 +0000 (14:37 -0500)]
openflowd: Update for changes to dpif and netdev.

Openflowd had been a bit neglected as changes were made to the dpif
and netdev interfaces over time.  This brings it up to date with all
the latest changes.

14 years agodpif: Update dpif interface to match netdev.
Jesse Gross [Fri, 22 Jan 2010 19:37:10 +0000 (14:37 -0500)]
dpif: Update dpif interface to match netdev.

This brings over some features that were added to the netdev interface,
most notably the separation between the name and the type.  In addition
to being cleaner, this also avoids problems where it is expected that
the local port has the same name as the datapath.

14 years agoovs-vsctl: Drop redundant {port,iface}-{set,get}-external-ids commands.
Ben Pfaff [Wed, 27 Jan 2010 22:28:30 +0000 (14:28 -0800)]
ovs-vsctl: Drop redundant {port,iface}-{set,get}-external-ids commands.

These commands can be implemented just as well, and in a more
general-purpose way, using the "set", "remove", and "get" commands.

The br-{get,set}-external-ids commands have slightly more specialized
behavior and so we can't drop them (yet).

14 years agoovsdb-idl: Make rows inserted by transaction appear during table iteration.
Ben Pfaff [Wed, 27 Jan 2010 22:12:35 +0000 (14:12 -0800)]
ovsdb-idl: Make rows inserted by transaction appear during table iteration.

14 years agoovs-vsctl: Update --help message.
Ben Pfaff [Wed, 27 Jan 2010 21:49:19 +0000 (13:49 -0800)]
ovs-vsctl: Update --help message.

14 years agoovs-vsctl: Add "destroy" command.
Ben Pfaff [Wed, 27 Jan 2010 21:26:44 +0000 (13:26 -0800)]
ovs-vsctl: Add "destroy" command.

14 years agoovsdb-idl: Export ovsdb_idl_txn_delete() and ovsdb_idl_txn_insert().
Ben Pfaff [Wed, 27 Jan 2010 21:04:56 +0000 (13:04 -0800)]
ovsdb-idl: Export ovsdb_idl_txn_delete() and ovsdb_idl_txn_insert().

ovs-vsctl wants to use these functions directly, so make them available
through the ovsdb-idl public header instead of only through the private
one.

Also, change the prototypes to make them usable without casts.

14 years agoovs-vsctl: Add new "create" command.
Ben Pfaff [Wed, 27 Jan 2010 21:19:46 +0000 (13:19 -0800)]
ovs-vsctl: Add new "create" command.

14 years agoovs-vsctl: Add --force option to database commands to override safety checks.
Ben Pfaff [Wed, 27 Jan 2010 20:48:47 +0000 (12:48 -0800)]
ovs-vsctl: Add --force option to database commands to override safety checks.

14 years agoovs-vsctl: Fix formatting in manpage.
Ben Pfaff [Wed, 27 Jan 2010 19:36:09 +0000 (11:36 -0800)]
ovs-vsctl: Fix formatting in manpage.

The stray .TP was screwing up the right margin for the whole rest of the
manpage.  The .STs were just adding too much vertical space.

14 years agoovs-vsctl: Add "remove" and "clear" commands.
Ben Pfaff [Wed, 27 Jan 2010 19:30:59 +0000 (11:30 -0800)]
ovs-vsctl: Add "remove" and "clear" commands.

14 years agoovs-vsctl: Make parsing functions return error instead of aborting.
Ben Pfaff [Wed, 27 Jan 2010 19:25:20 +0000 (11:25 -0800)]
ovs-vsctl: Make parsing functions return error instead of aborting.

The upcoming "remove" command for ovs-vsctl wants to try parsing an
argument two different ways.  This doesn't work if a parse error always
aborts immediately.  This commit fixes the problem, by making a parsing
failure pass up an error for higher layers to deal with instead of aborting
immediately.

This commit should have no user-visible effect.

14 years agoovs-vsctl: Make the "list" format more uniform.
Ben Pfaff [Wed, 27 Jan 2010 19:23:03 +0000 (11:23 -0800)]
ovs-vsctl: Make the "list" format more uniform.

14 years agoovs-vsctl: Score perfect matches higher than ones that differ in case.
Ben Pfaff [Wed, 27 Jan 2010 19:21:43 +0000 (11:21 -0800)]
ovs-vsctl: Score perfect matches higher than ones that differ in case.

Before, both "xY_z" and "xy-z" were considered equally good matches for
"xy-z", but obviously the latter is a much better match.  This commit fixes
the problem (which was found by inspection).

14 years agoovs-vsctl: Fix uninitialized variable.
Jesse Gross [Wed, 27 Jan 2010 20:08:10 +0000 (15:08 -0500)]
ovs-vsctl: Fix uninitialized variable.

When querying a row we could return an uninitialized variable in
some cases if we can't find what we are looking for.

14 years agobridge: Properly read NetFlow parameters.
Jesse Gross [Wed, 27 Jan 2010 20:08:02 +0000 (15:08 -0500)]
bridge: Properly read NetFlow parameters.

When reading the NetFlow engine type and ID from the config database
we weren't dereferencing the variables.

14 years agodatapath: Fix compilation on newer old-style Xen kernels.
Jesse Gross [Mon, 25 Jan 2010 00:58:40 +0000 (19:58 -0500)]
datapath: Fix compilation on newer old-style Xen kernels.

Some ports of Xen (such as Debian Lenny's) use the old style
Xen checksumming fields on newer kernels.  Normally the code that
deals with those fields isn't used at all on newer kernels.  This
updates the checksumming pointer code with some changes from Lenny
Xen since it is cleaner and works well with our existing compatibility
layer.

CC:pspreadborough@comcast.net

14 years agodatapath: Support CHECKSUM_PARTIAL on older kernels.
Jesse Gross [Mon, 25 Jan 2010 00:58:46 +0000 (19:58 -0500)]
datapath: Support CHECKSUM_PARTIAL on older kernels.

On older kernels we would not correctly update partial checksums
because it was difficult to determine the type of checksum.  This
uses some hints to infer the correct type of checksum so that it
can be updated.  It also allows us to correctly define
CHECKSUM_PARTIAL, which is important for other components.

14 years agodatapath: Transport port is not part of psuedoheader.
Jesse Gross [Mon, 25 Jan 2010 00:57:54 +0000 (19:57 -0500)]
datapath: Transport port is not part of psuedoheader.

While updating the checksum after changing the transport port,
we indicated that this was a change to the psuedoheader.  Since
this is not the case, it could produce an incorrect checksum.

14 years agodatapath: Handle packets with precomputed checksums.
Jesse Gross [Fri, 22 Jan 2010 22:26:31 +0000 (17:26 -0500)]
datapath: Handle packets with precomputed checksums.

On older kernels (< 2.6.19) CHECKSUM_HW can mean either that the
checksum has already been computed by hardware or that the checksum
needs to be computed by hardware, depending on whether we are on
the transmit or receive path.  Unfortunately since we are in the
middle of these two paths it is impossible to tell which is the
case.  Code after us assumes that CHECKSUM_HW means that the
checksum needs to be computed and will panic if there already is
a checksum.  On these kernels we mark these packets as CHECKSUM_NONE
before handing them off.

Without this change using certain NICs will cause panics.

14 years agoovs-vsctl: Add missing columns.
Jesse Gross [Tue, 26 Jan 2010 19:37:59 +0000 (14:37 -0500)]
ovs-vsctl: Add missing columns.

bond_updelay and flood_vlans were missing from the list of
configurable columns.

14 years agoFix references to vswitch-idl.ovsschema to refer to vswitch.ovsschema.
Ben Pfaff [Tue, 26 Jan 2010 19:46:43 +0000 (11:46 -0800)]
Fix references to vswitch-idl.ovsschema to refer to vswitch.ovsschema.

14 years agodaemon: Make --monitor process change its process title.
Ben Pfaff [Tue, 19 Jan 2010 23:00:56 +0000 (15:00 -0800)]
daemon: Make --monitor process change its process title.

When --monitor is used, administrators sometimes become confused about the
presence of two copies of each process.  This commit attempts to clarify
the situation by making the monitoring process change its process name, as
seen in /proc/$pid/cmdline and in "ps", to clearly indicate what is going
on.

CC: Dan Wendlandt <dan@nicira.com>
14 years agoFix "make distcleancheck" by deleting the nicira-ext.h stamp file too.
Ben Pfaff [Tue, 26 Jan 2010 18:47:50 +0000 (10:47 -0800)]
Fix "make distcleancheck" by deleting the nicira-ext.h stamp file too.

14 years agotests: Fix ovsdb tests.
Ben Pfaff [Tue, 26 Jan 2010 18:46:56 +0000 (10:46 -0800)]
tests: Fix ovsdb tests.

This code was updated to use the new name of the schema, but I accidentally
left in the old code to check for the old schema's name.  This worked fine
in my own tests, because I still have a copy of that file sitting around,
but fails on "make distcheck" or a clean source dir.

So this commit deletes the code that checks for the old schema file.

14 years agoovsdb: Require column type "min" value be 0 or 1.
Ben Pfaff [Tue, 26 Jan 2010 18:32:33 +0000 (10:32 -0800)]
ovsdb: Require column type "min" value be 0 or 1.

A "min" value greater than 1 is problematic for the database.  There is no
reasonable way to synthesize a default value for such a column: keys in a
set or map must unique, so the database cannot, say, simply set a set of
3 or more integers to [0, 0, 0].

This should have no effect on the vswitch in practice because it does not
have any columns that require more than one element.

14 years agoovs-vsctl: Add commands for low-level database manipulation.
Ben Pfaff [Mon, 25 Jan 2010 18:13:52 +0000 (10:13 -0800)]
ovs-vsctl: Add commands for low-level database manipulation.

The new "get", "list", "set", and "add" commands provide lower-level
access to the vswitch database than the other ovs-vsctl commands, but they
are more convenient than using ovsdb-client directly.

This commit deserves several enhancements, but users are clamoring for
some kind of interface, so this is a starting point.

14 years agoovsdb-datum: Add functions for parsing and formatting atoms, data.
Ben Pfaff [Mon, 25 Jan 2010 18:16:52 +0000 (10:16 -0800)]
ovsdb-datum: Add functions for parsing and formatting atoms, data.

These functions provide an alternative to JSON parsing and formatting that
is more human-friendly (and shorter).

These will be used in an upcoming commit to enhance ovs-vsctl.

14 years agoovsdb-data: Add some more functions for dealing with "struct ovsdb_datum".
Ben Pfaff [Mon, 25 Jan 2010 18:08:57 +0000 (10:08 -0800)]
ovsdb-data: Add some more functions for dealing with "struct ovsdb_datum".

This commit refactors the functions for working with "struct ovsdb_datum",
adding and exposing some more operations for ovs-vsctl to use in an
upcoming commit.

14 years agoovsdb-idl: Allow clients to modify records without using structs.
Ben Pfaff [Mon, 25 Jan 2010 18:15:17 +0000 (10:15 -0800)]
ovsdb-idl: Allow clients to modify records without using structs.

The IDL is intended to allow clients easier access to data in the database
by providing an extra layer of abstraction.  However, ovs-vsctl needs to
also provide generic access to database tables, rows, and columns, and
until now the IDL has not allowed this.  In particular, there was no way
to modify the value of a database column by providing a "struct
ovsdb_datum" with the new value and then have that reflected in the IDL
structs, although the other direction was possible.

This commit fixes that problem, which requires a bit of refactoring of the
IDL layer.  It also exposes the interface for iterating through table
records to clients directly, by moving it from the "private" IDL header to
the public one.

14 years agojson: New function json_to_ds().
Ben Pfaff [Fri, 22 Jan 2010 22:57:18 +0000 (14:57 -0800)]
json: New function json_to_ds().

Some upcoming code wants to serialize JSON into a "struct ds" dynamic
string buffer, so expose an interface to do this.

This commit doesn't change much, but it renames some functions internal
to json.c to make the naming more consistent.

Also, make jsonrpc_log_msg() use this new function, since it is a more
straightforward way to do what it wants.

14 years agojson: Export function to parse an individual JSON string.
Ben Pfaff [Tue, 26 Jan 2010 17:47:54 +0000 (09:47 -0800)]
json: Export function to parse an individual JSON string.

The JSON syntax for strings is very reasonable.  An upcoming commit will
have a need for a string parser, so make the JSON string parser available
for that.

Also, this change improves the error message for strings that end in the
middle of a \u sequence, so update the tests to match.

14 years agoovsdb-idl: Avoid redundant memset.
Ben Pfaff [Thu, 21 Jan 2010 18:59:34 +0000 (10:59 -0800)]
ovsdb-idl: Avoid redundant memset.

14 years agoovsdb-idl: Fix use-after-free error in ovsdb_idl_txn_delete().
Ben Pfaff [Thu, 21 Jan 2010 18:51:37 +0000 (10:51 -0800)]
ovsdb-idl: Fix use-after-free error in ovsdb_idl_txn_delete().

14 years agoCleanly separate IDL annotations from OVSDB schema information.
Ben Pfaff [Thu, 7 Jan 2010 23:52:58 +0000 (15:52 -0800)]
Cleanly separate IDL annotations from OVSDB schema information.

Until now, the OVSDB IDL annotations have been glommed together with the
schema information in a single file, and then we've used ovsdb-idlc to
extract the schema from that file.  This commit reverses the process:
the schema and the annotations are stored separately and then glommed
together as necessary at build time.

This new arrangement has a few advantages:

    - We can now easily have multiple different sets of IDL annotations
      for a single OVSDB schema.  For example, some users may not need
      access to columns that other users do.

    - Bugs in ovsdb-idlc cannot screw up the underlying schema (as shown
      by a recent commit).

14 years agovswitch: Remove redundant "internal" column from Interface table.
Ben Pfaff [Mon, 11 Jan 2010 22:28:48 +0000 (14:28 -0800)]
vswitch: Remove redundant "internal" column from Interface table.

This column's function is now served by the "type" column, which is set
to "internal" to mark an interface as internal.

14 years agovswitch: Fix types of NetFlow columns in db schema.
Ben Pfaff [Thu, 7 Jan 2010 23:26:36 +0000 (15:26 -0800)]
vswitch: Fix types of NetFlow columns in db schema.

This bug was masked by the translation done by ovsdb-idlc, which doesn't
fully validate its input.  In particular, it ignores fields that it doesn't
know about and drops them when it does translation, so nothing later can
find the problem.

An upcoming commit will ensure that it can't happen again, by dropping the
ovsdb-idlc translation step.

14 years agoovsdb-idlc: With "doc" command, output tables and columns alphabetically.
Ben Pfaff [Tue, 26 Jan 2010 17:32:38 +0000 (09:32 -0800)]
ovsdb-idlc: With "doc" command, output tables and columns alphabetically.

Until this commit, tables and columns in output were output in random
order (according to the ordering of Python's internal hash table).
Alphabetical order makes more sense.

Thanks to Reid Price for useful Python tips.

14 years agotests: Prefer $(VAR) over @VAR@ in Makefiles.
Ben Pfaff [Thu, 14 Jan 2010 19:32:00 +0000 (11:32 -0800)]
tests: Prefer $(VAR) over @VAR@ in Makefiles.

The Autoconf documentation recently started recommending $(VAR) over @VAR@,
so adopt this style.

14 years agoAdd build checks for portable OpenFlow structure padding and alignment.
Ben Pfaff [Mon, 25 Jan 2010 18:49:31 +0000 (10:49 -0800)]
Add build checks for portable OpenFlow structure padding and alignment.

This causes the build to fail with an error message if openflow.h contains
a structure whose members are not aligned in a portable way.

14 years agoovs-vsctl: Prevent uninitialized variable warning.
Jesse Gross [Wed, 20 Jan 2010 19:19:47 +0000 (14:19 -0500)]
ovs-vsctl: Prevent uninitialized variable warning.

The compiler warns about next_cfg being uninitialized but in the cases
where it is unset we will never reach the point where it is used.  This
just sets next_cfg to 0 to stop the whining.

14 years agohash: Prevent warnings about strict aliasing rules.
Jesse Gross [Wed, 20 Jan 2010 18:50:48 +0000 (13:50 -0500)]
hash: Prevent warnings about strict aliasing rules.

Some versions of GCC complain about violations of strict aliasing
rules due to a cast between different pointer types.  This avoids
any aliasing by copying the value first.

14 years agomac-learning: Rename "non-learning VLANs" to "flood VLANs".
Ben Pfaff [Tue, 19 Jan 2010 18:41:46 +0000 (10:41 -0800)]
mac-learning: Rename "non-learning VLANs" to "flood VLANs".

Usually positive names are better than negative ones.

14 years agoReimplement port mirroring configuration for database.
Ben Pfaff [Tue, 19 Jan 2010 18:40:36 +0000 (10:40 -0800)]
Reimplement port mirroring configuration for database.

Tested only to the extent that it doesn't obviously break anything else.

14 years agonetdev: Compare full arguments instead of hash for reconfigure.
Jesse Gross [Mon, 18 Jan 2010 22:26:02 +0000 (17:26 -0500)]
netdev: Compare full arguments instead of hash for reconfigure.

We only reconfigure netdevs if the arguments have changed, which
was previously detected based on a hash.  This stores and compares
the full argument list to avoid any chance of missing changes due
to collisions.

14 years agonetdev-linux: Use the netdev list of devices instead of cachemap.
Jesse Gross [Mon, 18 Jan 2010 20:05:58 +0000 (15:05 -0500)]
netdev-linux: Use the netdev list of devices instead of cachemap.

We previously maintained a list of open devices inside of the
linux netdev.  Since the netdev library now maintains this list,
it is better to use that list instead of our own.

14 years agonetdev-linux: Avoid potential issues with unset FD.
Jesse Gross [Sat, 16 Jan 2010 00:24:53 +0000 (19:24 -0500)]
netdev-linux: Avoid potential issues with unset FD.

Never close the file descriptor if it is 0, since it is never a
valid FD in this context.  Also initialize the FD to -1 so that
it is never set to a valid but incorrect value.

14 years agoAdd ability to set controller for specific bridges
Keith Amidon [Mon, 18 Jan 2010 00:55:30 +0000 (16:55 -0800)]
Add ability to set controller for specific bridges

Some applications would prefer that the controller only be enabled for
a subset of bridges.  This commit introduces an alternative syntax for
the XAPI vSwitchController key to enable the specification of such a
configuration.

The implementation of the configuration is currently a hack.  The
problem is that some bridges (especially internal bridges) are only
created when a VIF is added to them.  This means that attempting to
set the controller on boot as we used to do won't work.  Ideally we
would should hook the creation of the bridge and set the controller at
that time.  However, in XenServer 5.5 I can't find an appropriate
place to hook to do so.

To meet immediate requirements, this commit hacks the startup-based
approach by spawning background processes that watch for the creation
of the bridge and set the controller when it becomes available.  We'll
have to replace it with a better and more robust solution ASAP.

14 years agonetdev-linux: Properly store netdev_dev pointer for RTNL callbacks.
Jesse Gross [Sat, 16 Jan 2010 14:45:45 +0000 (09:45 -0500)]
netdev-linux: Properly store netdev_dev pointer for RTNL callbacks.

We were storing a struct netdev_dev_linux ** instead of a
netdev_dev_linux * in the cache map.  This prevented the cache
from being invalidated on changes such as link status.

14 years agortnetlink: Fix typo in comments referencing rtnetlink_notifier_register()
Justin Pettit [Sat, 16 Jan 2010 08:53:09 +0000 (00:53 -0800)]
rtnetlink: Fix typo in comments referencing rtnetlink_notifier_register()

14 years agonetdev: Increase default ingress policing burst size
Justin Pettit [Sat, 16 Jan 2010 01:27:28 +0000 (17:27 -0800)]
netdev: Increase default ingress policing burst size

The default burst rate was 10Kb.  This increases it to 1000kb, since
we were having problems getting traffic through at 10kb.  A better value
probably exists between these two points, but that will require
additional experimentation.

14 years agoidl: Gracefully handle destroying a transaction before receiving its reply.
Ben Pfaff [Fri, 15 Jan 2010 23:22:54 +0000 (15:22 -0800)]
idl: Gracefully handle destroying a transaction before receiving its reply.

If ovsdb_idl_txn_destroy() is called to destroy a transaction before its
reply has been received from the database server, then until now we would
drop the connection to the database when the reply actually arrived,
because we would have no record of that transaction ID any longer.

Notably, ovs-vswitchd does this: it "fires and forgets" database
transactions.  (Really, it should not do that, but that's a bigger commit.)

This commit fixes the problem by not dropping the database connection in
such a case.

This fixes an observed problem such that sometimes ovs-vsctl took a long
time to complete, which was because ovs-vswitchd was dropping its
connection to the database and backing off.

14 years agonetdev-linux: Don't close(0) when closing an ordinary netdev.
Ben Pfaff [Fri, 15 Jan 2010 22:06:15 +0000 (14:06 -0800)]
netdev-linux: Don't close(0) when closing an ordinary netdev.

Calling close(0) at random points is bad.  It means that the next call to
socket() or open() returns fd 0.  Then the next time a netdev gets closed,
that socket or file fd gets closed too, and you end up with weird "Bad
file descriptor" errors.

Found by installing the following as lib/unistd.h in the source tree:

#ifndef UNISTD_H
#define UNISTD_H 1

#include <stdlib.h>
#include_next <unistd.h>

#undef close
#define close(fd) rpl_close(fd)

static inline int rpl_close(int fd)
{
    if (!fd) {
        abort();
    }
    return (close)(fd);
}

#endif

14 years agoEnable daemon monitoring and automatic restart by default.
Ben Pfaff [Fri, 15 Jan 2010 21:09:32 +0000 (13:09 -0800)]
Enable daemon monitoring and automatic restart by default.

Tested on a XenServer by running "kill -SEGV" on the daemon processes and
watching them restart automatically and by running plain "kill" and
watching them terminate normally.

14 years agodaemon: Add support for process monitoring and restart.
Ben Pfaff [Fri, 15 Jan 2010 20:13:46 +0000 (12:13 -0800)]
daemon: Add support for process monitoring and restart.

14 years agodaemon: Refactor code.
Ben Pfaff [Fri, 15 Jan 2010 23:29:52 +0000 (15:29 -0800)]
daemon: Refactor code.

This commit should not change behavior, but it paves the way for
implementing --monitor in the following commit.

14 years agotests: New macro OVS_WAIT_WHILE.
Ben Pfaff [Fri, 15 Jan 2010 20:12:51 +0000 (12:12 -0800)]
tests: New macro OVS_WAIT_WHILE.

For use by upcoming tests.

14 years agotests: Factor OVSDB_INIT out of OVS_VSCTL_SETUP for other tests to use.
Ben Pfaff [Fri, 15 Jan 2010 20:12:36 +0000 (12:12 -0800)]
tests: Factor OVSDB_INIT out of OVS_VSCTL_SETUP for other tests to use.

New tests in upcoming commits will use this.

14 years agofatal-signal: After fork, clear hooks instead of disabling them.
Ben Pfaff [Fri, 15 Jan 2010 23:28:14 +0000 (15:28 -0800)]
fatal-signal: After fork, clear hooks instead of disabling them.

Until now, fatal_signal_fork() has simply disabled all the fatal signal
callback hooks.  This worked fine, because a daemon process forked only
once and the parent didn't do much before it exited.

But upcoming commits will introduce a --monitor option, which requires
processes to fork multiple times.  Sometimes the parent process will fork,
then run for a while, then fork again.  It's not good to disable the
hooks in the child process in such a case, because that prevents e.g.
pidfiles from being removed at the child's exit.

So this commit changes the semantics of fatal_signal_fork() to just
clearing out hooks.  After hooks are cleared, new hooks can be added and
will be executed on process termination in the usual way.

This commit also introduces a cancellation callback function so that a
canceled hook can free resources.

14 years agounixctl: Avoid double error reporting.
Ben Pfaff [Fri, 15 Jan 2010 18:31:57 +0000 (10:31 -0800)]
unixctl: Avoid double error reporting.

All of these programs were re-reporting an error that
unixctl_server_create() had already reported.  There's no need for that.

14 years agounixctl: Improve error reporting.
Ben Pfaff [Fri, 15 Jan 2010 18:31:06 +0000 (10:31 -0800)]
unixctl: Improve error reporting.

The ovs_error() function is our standard way of reporting startup errors,
so use it.  (It also outputs the program name at the beginning of the
message.)

14 years agotests: Improve error reporting for timeval test failures.
Ben Pfaff [Fri, 15 Jan 2010 18:26:20 +0000 (10:26 -0800)]
tests: Improve error reporting for timeval test failures.

14 years agonetdev: Fix build for switchui.
Jesse Gross [Fri, 15 Jan 2010 16:48:29 +0000 (11:48 -0500)]
netdev: Fix build for switchui.

14 years agoxenserver: Give ovs-vsctl a bit more time to do its work
Justin Pettit [Fri, 15 Jan 2010 16:33:03 +0000 (08:33 -0800)]
xenserver: Give ovs-vsctl a bit more time to do its work

Creating bonds sometimes fails due to ovs-vsctl timing out.  This commit
increases the time interface-reconfigure gives ovs-vsctl from five to
twenty seconds.  We should investigate why it's taking ovs-vsctl so
long, but this helps for now.

14 years agonetdev-linux: Cleanup tap netdev.
Jesse Gross [Tue, 12 Jan 2010 20:58:40 +0000 (15:58 -0500)]
netdev-linux: Cleanup tap netdev.

TAP devices need to be treated slightly differently from other other
devices because they cannot be opened multiple times.  Instead we
open them once and share the file descriptor.  This means that if
the netdev is opened multiple times one reader can drain the buffers
of another.  While this is a deviation from the normal convention,
it does not impact current or planned users.

In addition, this cleans up some confusion between the file
descriptor for tap devices versus other FD's.

14 years agogre: Add support for destroying GRE devices.
Jesse Gross [Tue, 12 Jan 2010 00:00:17 +0000 (19:00 -0500)]
gre: Add support for destroying GRE devices.

This allows GRE tunnel devices to be torn down on graceful exit
of vswitch and cleaned up on restart for non-graceful exits.

14 years agonetdev: Fully handle netdev lifecycle through refcounting.
Jesse Gross [Tue, 12 Jan 2010 21:01:43 +0000 (16:01 -0500)]
netdev: Fully handle netdev lifecycle through refcounting.

This builds on earlier work that implemented netdev object refcounting.
However, rather than requiring explicit create and destroy calls,
these operations are now performed automatically based on the referenece
count.  This is important because in certain situations it is not
possible to know whether a netdev has already been created.  A
workaround existed (which looked fairly similar to this paradigm) but
introduced it's own issues.  This simplifies and unifies the API.

14 years agoovs-vsctl: Add option to create fake iface when adding a bond
Justin Pettit [Fri, 15 Jan 2010 05:53:43 +0000 (21:53 -0800)]
ovs-vsctl: Add option to create fake iface when adding a bond

Some systems, such as XenServer, expect that bonds have their own interface.
This commit adds the ability to do that with the "--fake-iface" option
in ovs-vsctl's add-bond command.  It also has XenServer's
interface-reconfigure use it.

Part of solution to Bug #2376

14 years agogre: Workarounds for large packets over GRE
Jesse Gross [Fri, 15 Jan 2010 01:58:20 +0000 (20:58 -0500)]
gre: Workarounds for large packets over GRE

The first change is to not propagate the IP DF bit from the inner
packet to the outer packet.  Large TCP packets can get segmented
first which will set the DF bit.  However these segmented packets
might still be too large after the GRE header is added, requiring
fragmentation.

The second change is to raise the MTU of the GRE tunnel device.
This prevents packets from being dropped in the datapath before
they can be fragmented.  Since the datapath is layer 2 it does not
do any fragmentation and drops any packets that are too large.

Both of these are temporary workarounds that need to be addressed
more carefully in the future.

Bug #2379

14 years agoovs-vsctl: Don't mask timeout argument
Justin Pettit [Fri, 15 Jan 2010 02:06:33 +0000 (18:06 -0800)]
ovs-vsctl: Don't mask timeout argument

ovs-vsctl supports the "--timeout" option, which specifies the amount
of time that the operation is allowed to take before a SIGALRM is
raised.  The code that parsed options had a local "timeout" that masked
the global one that was supposed to be set.

14 years agobonding: Use device names instead of Xen OpaqueRefs
Jesse Gross [Wed, 13 Jan 2010 22:43:09 +0000 (17:43 -0500)]
bonding: Use device names instead of Xen OpaqueRefs

When configuring the slaves of a bond, interface-reconfigure was
directly writing the Xen OpaqueRef as the name instead of first
converting it into a standard device name.

Bug #2377

14 years agoovsdb: Provide helper function to determine if IDL has ever connected
Justin Pettit [Thu, 14 Jan 2010 21:10:35 +0000 (13:10 -0800)]
ovsdb: Provide helper function to determine if IDL has ever connected

14 years agoovs-brcompatd: Don't consume CPU if can't connect to config db
Justin Pettit [Thu, 14 Jan 2010 20:20:09 +0000 (12:20 -0800)]
ovs-brcompatd: Don't consume CPU if can't connect to config db

When ovs-brcompatd can't connect to the database, the "ovs" variable
is never set.  The function "brc_recv_update" takes care of draining
brcompat kernel module's netlink messages.  When the netlink message
comes in to modify the bridge, that function never gets called, so a
netlink message always appears to be ready and we consume 100% CPU
looping.

With this commit, we log a warning and drop the request on the floor.

Bug #2373

14 years agoovsdb-client: Fix regression introduced with changes to daemonize().
Ben Pfaff [Wed, 13 Jan 2010 17:55:52 +0000 (09:55 -0800)]
ovsdb-client: Fix regression introduced with changes to daemonize().

daemonize() now closes the standard file descriptors, but ovsdb-client's
"monitor" command uses stdout even after daemonizing.  This caused
tests that used "ovsdb-client --detach monitor" to fail without printing
their complete output.  This commit fixes the problem.

14 years agodaemon: Close standard file descriptors when daemonizing.
Ben Pfaff [Tue, 12 Jan 2010 22:10:11 +0000 (14:10 -0800)]
daemon: Close standard file descriptors when daemonizing.

Before SSH terminates, it waits for the PTYs that it creates for use as
stdin, stdout, and stderr to be closed.  When any of the Open vSwitch
daemons were started in the background over an SSH session, they held
those file descriptors open and thus the SSH session hung.  This commit
fixes the problem by closing those file descriptors, allowing SSH to
terminate.

14 years agoxenserver: Make BRCOMPATD_MEMLEAK_LOGFILE setting work.
Ben Pfaff [Tue, 12 Jan 2010 18:57:12 +0000 (10:57 -0800)]
xenserver: Make BRCOMPATD_MEMLEAK_LOGFILE setting work.

Sometimes it's too bad that shell variables don't need declarations.

14 years agoovsdb-idl: Fix memory leak committing a no-op transaction.
Ben Pfaff [Tue, 12 Jan 2010 18:51:52 +0000 (10:51 -0800)]
ovsdb-idl: Fix memory leak committing a no-op transaction.

Partial fix for bug #2373.

14 years agojsonrpc: Fix memory leak in jsonrpc_session_send() when not connected.
Ben Pfaff [Tue, 12 Jan 2010 18:51:30 +0000 (10:51 -0800)]
jsonrpc: Fix memory leak in jsonrpc_session_send() when not connected.

Partial fix for bug #2373.