sliver-openvswitch.git
14 years agonetdev: Remove netdev_nodev_*() functions.
Ben Pfaff [Thu, 23 Jul 2009 21:49:52 +0000 (14:49 -0700)]
netdev: Remove netdev_nodev_*() functions.

These functions are now unused, so they may be deleted.

14 years agonetdev: Make netdev_get_vlan_vid() take a netdev instead of a name.
Ben Pfaff [Thu, 23 Jul 2009 20:36:08 +0000 (13:36 -0700)]
netdev: Make netdev_get_vlan_vid() take a netdev instead of a name.

For consistency, it's best if every netdev function takes a netdev instead
of a device name.  The netdev_nodev_*() functions have always been a bit
ugly.

14 years agovswitchd: Avoid netdev_nodev_*() functions.
Ben Pfaff [Thu, 23 Jul 2009 21:50:55 +0000 (14:50 -0700)]
vswitchd: Avoid netdev_nodev_*() functions.

The netdev_nodev_*() functions have always been a bit of a kluge.  It's
better to keep a network device open than to open it every time that it is
needed.  This commit converts all of the users of these functions to use
the corresponding functions that take a "struct netdev *" instead.

14 years agovswitchd: Avoid netdev_nodev_set_policing().
Ben Pfaff [Thu, 23 Jul 2009 23:49:19 +0000 (16:49 -0700)]
vswitchd: Avoid netdev_nodev_set_policing().

The netdev_nodev_*() functions have always been a bit of a kluge.  It's
better to keep a network device open than to open it every time that it is
needed.

14 years agonetdev: Make netdev_find_dev_by_in4() use netdevs, not device names.
Ben Pfaff [Fri, 24 Jul 2009 00:09:43 +0000 (17:09 -0700)]
netdev: Make netdev_find_dev_by_in4() use netdevs, not device names.

The netdev_nodev_*() functions have always been a bit of a kluge.  It's
better to keep a network device open than to open it every time that it is
needed.

Also updates the only user of netdev_find_dev_by_in4().

14 years agovswitchd: Don't keep track of mac in struct iface.
Ben Pfaff [Thu, 23 Jul 2009 21:28:21 +0000 (14:28 -0700)]
vswitchd: Don't keep track of mac in struct iface.

It's easy to get the Ethernet address of the interface from the netdev
code, and so we don't have to keep track of it in the bridge too.

14 years agovswitchd: Keep a netdev open for each interface.
Ben Pfaff [Thu, 30 Jul 2009 23:00:41 +0000 (16:00 -0700)]
vswitchd: Keep a netdev open for each interface.

This will allow the vswitch to use the netdev functions that take a
netdev parameter instead of the ones that take a device name.

14 years agovswitchd: Factor out iteration over interfaces with deletion.
Ben Pfaff [Thu, 30 Jul 2009 22:56:17 +0000 (15:56 -0700)]
vswitchd: Factor out iteration over interfaces with deletion.

Two different pieces of code in vswitchd were both iterating over all
the interfaces in a bridge and deleting some of them, then deleting any
ports that ended up with no interfaces because of this.  This commit
factors this operation out into a helper function.

14 years agoofproto: Don't use netdev_nodev_get_etheraddr() in pick_datapath_id().
Ben Pfaff [Tue, 28 Jul 2009 18:01:44 +0000 (11:01 -0700)]
ofproto: Don't use netdev_nodev_get_etheraddr() in pick_datapath_id().

The netdev_nodev_*() functions have always been a bit of a kluge.  It's
better to keep a network device open than to open it every time that it is
needed.

This commit gets rid of a usage of netdev_nodev_get_etheraddr() in
pick_datapath_id(), by using the netdev that the datapath already has open
for the local port.

14 years agonetdev: Add 'netdev' parameter to netdev_add_router().
Ben Pfaff [Thu, 23 Jul 2009 19:18:14 +0000 (12:18 -0700)]
netdev: Add 'netdev' parameter to netdev_add_router().

When there is the possibility of multiple classes of netdevs,
netdev_add_router() needs to know which of these to use, so it needs a
"struct netdev *" parameter.

14 years agonetdev: New function netdev_exists().
Ben Pfaff [Thu, 23 Jul 2009 17:42:48 +0000 (10:42 -0700)]
netdev: New function netdev_exists().

This new function allows cleanup of code that was using
netdev_nodev_get_flags() or ad-hoc methods to detect whether a network
device with the given name exists.

14 years agonetdev: Get rid of netdev_open_tap().
Ben Pfaff [Thu, 23 Jul 2009 19:21:11 +0000 (12:21 -0700)]
netdev: Get rid of netdev_open_tap().

netdev_open() can always be used in place of netdev_open_tap().  The
former is going to be generalized to support pluggable network device
types, so it makes sense to use it everywhere.

14 years agonetdev: Change netdev_get_in4() to return an error code.
Ben Pfaff [Tue, 28 Jul 2009 20:43:52 +0000 (13:43 -0700)]
netdev: Change netdev_get_in4() to return an error code.

Until now, netdev_get_in4() and netdev_nodev_get_in4() have returned a
bool that represents success or failure.  This commit changes the return
value to an int that can indicate what kind of error occurred, which is
both more consistent with the rest of the netdev interfaces and more
meaningful, and updates all callers to the new interface.

(Currently netdev_get_in4() won't ever return an error, but other future
implementations might.)

14 years agonetdev: Change netdev_get_mtu() to return an error code.
Ben Pfaff [Tue, 28 Jul 2009 20:43:35 +0000 (13:43 -0700)]
netdev: Change netdev_get_mtu() to return an error code.

To make the netdev code more portable, it needs to support returning error
codes from functions that don't have them.  This commit changes
netdev_get_mtu() to return an error code and updates its caller.

(Currently netdev_get_mtu() won't ever return an error, but other future
implementations might.)

14 years agonetdev: Change netdev_get_etheraddr() to return an error code.
Ben Pfaff [Tue, 28 Jul 2009 20:31:49 +0000 (13:31 -0700)]
netdev: Change netdev_get_etheraddr() to return an error code.

To make the netdev code more portable, it needs to support returning error
codes from functions that don't have them.  This commit changes
netdev_get_etheraddr() to return an error code and updates all of its
callers.

(Currently netdev_get_etheraddr() won't ever return an error, but other
future implementations might.)

14 years agoshash: Introduce new macros SHASH_FOR_EACH, SHASH_FOR_EACH_SAFE.
Ben Pfaff [Wed, 22 Jul 2009 23:33:43 +0000 (16:33 -0700)]
shash: Introduce new macros SHASH_FOR_EACH, SHASH_FOR_EACH_SAFE.

This is both more convenient and cleaner than using HMAP_FOR_EACH(_SAFE)
directly.

14 years agoshash: Make shash_add() return the new node.
Ben Pfaff [Tue, 28 Jul 2009 20:29:57 +0000 (13:29 -0700)]
shash: Make shash_add() return the new node.

14 years agoAlways distribute extras/ezio/ezio3.ti.
Ben Pfaff [Thu, 30 Jul 2009 00:04:10 +0000 (17:04 -0700)]
Always distribute extras/ezio/ezio3.ti.

I had thought that Automake was smart enough to ignore conditionals around
EXTRA_DIST, so that all files always got distributed regardless of whether
Automake conditionals were set.  I was wrong.

This pushes the conditionals for building the ezio binaries down into
extras/ezio/automake.mk and thereby makes adding ezio3.ti to EXTRA_DIST
unconditional, so that it always gets distributed.  Otherwise, this file
will not be distributed on systems that don't have curses or don't have
PCRE, which is very surprising.

14 years agoRemove --disable-userspace "configure" option, since it breaks "make dist".
Ben Pfaff [Wed, 29 Jul 2009 23:48:45 +0000 (16:48 -0700)]
Remove --disable-userspace "configure" option, since it breaks "make dist".

I had thought that Automake was smart enough to ignore conditionals around
EXTRA_DIST, so that all files always got distributed regardless of whether
Automake conditionals were set.  I was wrong.

This commit removes the --disable-userspace option to "configure", which
put a conditional around most of Makefile.am and thus unintentionally
caused most of the distribution to be left out if --disable-userspace was
specified.  The alternative (fixing --disable-userspace) seems like too
much work--it would require pushing "if ENABLE_USERSPACE" down into lots
of subdirectory--and would be difficult to maintain.

14 years agoAdd support for code coverage analysis with gcov and lcov.
Ben Pfaff [Mon, 27 Jul 2009 23:42:51 +0000 (16:42 -0700)]
Add support for code coverage analysis with gcov and lcov.

14 years agoUse Autotest for the Open vSwitch test suite.
Ben Pfaff [Mon, 27 Jul 2009 23:40:11 +0000 (16:40 -0700)]
Use Autotest for the Open vSwitch test suite.

Autotest doesn't provide a lot of benefit by itself but it does allow us
to easily put a wrapper around each test by using a macro to invoke it.
(To do that with the built-in Automake test framework you need to write
or generate a separate wrapper script for each test, which is a pain.)
The next commit will take advantage of this possibility by adding support
for code coverage analysis.

14 years agoMerge commit 'origin/citrix'
Justin Pettit [Wed, 29 Jul 2009 05:19:28 +0000 (22:19 -0700)]
Merge commit 'origin/citrix'

14 years agoMerge commit 'origin/citrix'
Justin Pettit [Wed, 29 Jul 2009 05:16:50 +0000 (22:16 -0700)]
Merge commit 'origin/citrix'

Conflicts:

configure.ac

14 years agoxenserver: Enable ARP filtering to work around xhad bug.
Ben Pfaff [Tue, 28 Jul 2009 22:44:58 +0000 (15:44 -0700)]
xenserver: Enable ARP filtering to work around xhad bug.

This works around a bug in xhad, which binds to a particular Ethernet
device, which in turn causes ICMP port unreachable messages if packets are
received are on the wrong interface, which in turn can happen if we send
out ARP replies on every interface (as Linux does by default) instead of
just on the interface that has the IP address being ARPed for, which this
sysctl setting in turn works around.

Justin Pettit did most of the work tracking down the origin of this bug.

Bug #1378.

14 years agoxenserver: Retrieve vSwitch version from binary in xsconsole
Justin Pettit [Tue, 28 Jul 2009 22:24:32 +0000 (15:24 -0700)]
xenserver: Retrieve vSwitch version from binary in xsconsole

The xsconsole plugin shows status information about Open vSwitch.  The
version information was retrieved from XAPI, but this could cause
problems.  The most easily reproduced is to make a XenServer part of a
pool, then remove it.  The version string is no longer in the
XenServer's local XAPI view, so it reports "<unknown>".  A more direct
way to get the information is to directly query the binary, which is
what this commit does.

Bug #1626

14 years agoLabel the current "citrix" release 0.90.4. v0.90.4
Justin Pettit [Tue, 28 Jul 2009 18:05:28 +0000 (11:05 -0700)]
Label the current "citrix" release 0.90.4.

14 years agoDo not try to resolve DNS for OpenFlow controllers or netflow collectors.
Ben Pfaff [Wed, 15 Jul 2009 22:29:49 +0000 (15:29 -0700)]
Do not try to resolve DNS for OpenFlow controllers or netflow collectors.

Until now, setting a netflow collector to a DNS name would cause
secchan to attempt to resolve that DNS name each time that the set of
netflow collectors is re-set.  For the vswitch, this is every time that
the vswitch reconfigures itself.

Unfortunately, DNS lookup within secchan cannot work as currently
implemented, because it needs both an asynchronous DNS resolver library
and in-band control updates.  Currently we have neither.  Attempting to
look up DNS anyway just hangs.

This commit disables DNS lookup entirely, and updates the documentation to
change user expectations.  DNS still won't work, but at least it won't
hang.

Bug #1609.

14 years agoxenserver: Fix creating, destroying bonds with the management connection.
Ben Pfaff [Fri, 17 Jul 2009 19:37:01 +0000 (12:37 -0700)]
xenserver: Fix creating, destroying bonds with the management connection.

Creating a bond from the network device that holds the Xen management
connection automatically transfers the management connection to that bond.
However, we weren't properly removing the IP address from the network
devices that constituted the bond.  This commit fixes that problem.

Bug #1566.

14 years agoVarious clean-ups to INSTALL.OpenFlow
Justin Pettit [Fri, 17 Jul 2009 07:21:59 +0000 (00:21 -0700)]
Various clean-ups to INSTALL.OpenFlow

14 years agoAdd INSTALL.bridge and INSTALL.OpenFlow to distribution
Justin Pettit [Fri, 17 Jul 2009 03:50:58 +0000 (20:50 -0700)]
Add INSTALL.bridge and INSTALL.OpenFlow to distribution

14 years agoSet version number to 0.90.3. v0.90.3
Justin Pettit [Fri, 17 Jul 2009 03:47:00 +0000 (20:47 -0700)]
Set version number to 0.90.3.

14 years agoFirst cut of guide to using Open vSwitch as a simple OpenFlow switch.
Justin Pettit [Fri, 17 Jul 2009 03:45:53 +0000 (20:45 -0700)]
First cut of guide to using Open vSwitch as a simple OpenFlow switch.

14 years agoMinor documentation fixups.
Keith Amidon [Fri, 17 Jul 2009 01:07:10 +0000 (18:07 -0700)]
Minor documentation fixups.

14 years agobrcompat: Make "brctl showmacs" honor Linux notion of bridge composition.
Ben Pfaff [Thu, 16 Jul 2009 22:16:06 +0000 (15:16 -0700)]
brcompat: Make "brctl showmacs" honor Linux notion of bridge composition.

The kernel only handles a single VLAN per bridge, but vswitchd can deal
with all the VLANs on a single bridge.  This commit makes "brctl showmacs"
pretend that the former is the case even though the latter is the
implementation.

Bug #1567.

14 years agovswitchd: Make "fdb/show" output more meaningful port numbers.
Ben Pfaff [Thu, 16 Jul 2009 22:15:02 +0000 (15:15 -0700)]
vswitchd: Make "fdb/show" output more meaningful port numbers.

The "fdb/show" unixctl command was showing vswitch-internal port indexes,
which cannot be meaningfully interpreted by software outside vswitchd.
Also, they potentially change every time the vswitchd configuration file
changes.  This commit changes it to use a datapath port index instead,
which are both more meaningful and more stable.

14 years agocfg: New function cfg_get_matches().
Ben Pfaff [Thu, 16 Jul 2009 22:07:05 +0000 (15:07 -0700)]
cfg: New function cfg_get_matches().

14 years agoMerge citrix branch into master.
Ben Pfaff [Thu, 16 Jul 2009 18:54:37 +0000 (11:54 -0700)]
Merge citrix branch into master.

14 years agoImplement "brctl showmacs" support in brcompat and ovs-brcompatd.
Ben Pfaff [Wed, 15 Jul 2009 19:46:06 +0000 (12:46 -0700)]
Implement "brctl showmacs" support in brcompat and ovs-brcompatd.

This is needed by the Citrix test infrastructure.

14 years agobrcompat: Refactor infrastructure for communication with ovs-brcompatd.
Ben Pfaff [Wed, 15 Jul 2009 19:40:16 +0000 (12:40 -0700)]
brcompat: Refactor infrastructure for communication with ovs-brcompatd.

In an upcoming change, brcompat will need to receive bulk data from
ovs-brcompatd.  The existing brcompat infrastructure for receiving data
only supports returning an error code, so this commit adds the ability to
receive an arbitrary sk_buff and updates the existing users to handle it.

14 years agobrcompatd: Factor code out of prune_ports().
Ben Pfaff [Wed, 15 Jul 2009 19:09:43 +0000 (12:09 -0700)]
brcompatd: Factor code out of prune_ports().

An upcoming commit will also need to gather all of the interfaces on a
specified bridge, so break this code into a helper function.

14 years agoprocess: New function process_run_capture().
Ben Pfaff [Wed, 15 Jul 2009 19:45:44 +0000 (12:45 -0700)]
process: New function process_run_capture().

In an upcoming commit, ovs-brcompatd will need to create a subprocess and
capture both its stdout and stderr separately, which one cannot do with
simple interfaces such as popen().  This function provides that ability.

14 years agoprocess: Factor code out of process_start() into helper functions.
Ben Pfaff [Wed, 15 Jul 2009 19:07:02 +0000 (12:07 -0700)]
process: Factor code out of process_start() into helper functions.

An upcoming commit will add a new function that can also use these helper
functions.

14 years agoprocess: Fix races on fatal signal handling in process_start().
Ben Pfaff [Wed, 15 Jul 2009 19:05:04 +0000 (12:05 -0700)]
process: Fix races on fatal signal handling in process_start().

To prevent fatal signals in a child process from causing the parent
process's pidfile, etc. to be deleted, we need to block fatal signals
around fork and call fatal_signal_fork() in the child process.

This problem was noticed through code inspection; it has not been observed
in practice.

14 years agovswitchd: New unixctl command "fdb/show" to print the MAC learing table.
Ben Pfaff [Wed, 15 Jul 2009 18:05:37 +0000 (11:05 -0700)]
vswitchd: New unixctl command "fdb/show" to print the MAC learing table.

To implement "brctl showmacs" for bridge compatibility, brcompatd needs to
be able to extract the MAC learning table from ovs-vswitchd.  This provides
a way, and it may be directly useful to switch administrators also.

14 years agomac-learning: New function mac_entry_age().
Ben Pfaff [Wed, 15 Jul 2009 18:02:24 +0000 (11:02 -0700)]
mac-learning: New function mac_entry_age().

This function will be used as part of printing the MAC learning table at
user request.

14 years agoAdd macros for parsing MAC addresses from strings.
Ben Pfaff [Wed, 15 Jul 2009 17:58:30 +0000 (10:58 -0700)]
Add macros for parsing MAC addresses from strings.

14 years agoNew function ds_steal_cstr().
Ben Pfaff [Wed, 15 Jul 2009 17:57:17 +0000 (10:57 -0700)]
New function ds_steal_cstr().

14 years agoAdd function get_null_fd(), to reduce code redundancy.
Ben Pfaff [Wed, 15 Jul 2009 17:54:51 +0000 (10:54 -0700)]
Add function get_null_fd(), to reduce code redundancy.

14 years agoovs-ofctl: Use 65535 instead of 0 for OFPP_CONTROLLER max_len.
Ben Pfaff [Wed, 15 Jul 2009 20:25:11 +0000 (13:25 -0700)]
ovs-ofctl: Use 65535 instead of 0 for OFPP_CONTROLLER max_len.

OpenFlow 0.9 will change the interpretation of a max_len of 0 in an
OFPP_CONTROLLER output action from "send entire packet" to "send 0 bytes
of packet", but ovs-ofctl documents that specifying no argument or "ALL"
as the argument to a CONTROLLER output action sends the whole packet, so
we need to make that happen.

14 years agobrcompat: Improve comments in header file.
Ben Pfaff [Tue, 14 Jul 2009 16:16:55 +0000 (09:16 -0700)]
brcompat: Improve comments in header file.

14 years agovswitchd: Skip updelay on slave when only a single bond slave is up.
Ben Pfaff [Mon, 13 Jul 2009 18:09:52 +0000 (11:09 -0700)]
vswitchd: Skip updelay on slave when only a single bond slave is up.

If a network device takes a few seconds to detect carrier, as some do, then
when bringing up a network device and then immediately adding that device
to a bridge, the bond code would start out with that slave considered down
and apply the full updelay to it before bringing it up.  With the 31-second
updelay set by XenServer, this is excessive: we end up having no
connectivity at all for 31 seconds even though there is no reason for it.

This commit makes the bond code disregard the updelay when an interface
comes up on a bond that has no enabled interfaces, and updates the
documentation to match.

Part of bug #1566.

14 years agovswitchd: Fix log messages when bond slaves are enabled or disabled.
Ben Pfaff [Mon, 13 Jul 2009 17:04:45 +0000 (10:04 -0700)]
vswitchd: Fix log messages when bond slaves are enabled or disabled.

We were printg "enabled" when a slave was disabled and vice versa.

Part of bug #1566.

14 years agoFix unitialized variable in coverage_log()
Justin Pettit [Tue, 14 Jul 2009 07:25:44 +0000 (00:25 -0700)]
Fix unitialized variable in coverage_log()

When providing the ability to force coverage printouts to occur, some
code was moved around that allowed the "hash" variable to be used
unitialized.  This fixes that.

Thanks to Ben for pointing out the problem.

Bug #1577

14 years agodatapath: Don't orphan packets in dp_dev transmit path.
Ben Pfaff [Mon, 13 Jul 2009 22:50:32 +0000 (15:50 -0700)]
datapath: Don't orphan packets in dp_dev transmit path.

Before commit 72ca14c1 "datapath: Fix race against workqueue in dp_dev and
simplify code," the dp_dev network device had a device queue, and we would
orphan packets before sticking them on the queue.  This screwed up socket
accounting a bit, but the effect was limited to the device queue length.

Now, after that commit, the dp_dev device has no device queue, but it still
orphans packets.  This screws up socket accounting a *lot*, because the
effect is now unlimited, since there is no queue to limit it.

The solution is to not orphan packets at all.  There is little need for it
now since packet transmission now happens immediately, not in a workqueue
whose execution may be delayed.

This should fix bug #1519, which tests "netperf -t UDP_STREAM" performance,
finding that an unrealistically high number of UDP packets could be sent
but that none at all were received.  The send rate is due to the orphaning,
the receive rate presumably because at least one out of approx. 65535/1500
= 44 fragments per full packet were dropped in each case.

14 years agovconn: Fix detection of vconn local IP address, to fix in-band control.
Ben Pfaff [Mon, 13 Jul 2009 22:05:51 +0000 (15:05 -0700)]
vconn: Fix detection of vconn local IP address, to fix in-band control.

The in-band control code needs to know the IP and port of both ends of the
control connection.  However, the vconn code was only reporting the local
address after the connection had already succeeded, which created a
chicken-and-egg problem.  In practice we would fail to connect until the
switch went into fail-open, at which point the connection would go through.

Fortunately, we can get the local IP address right after we try to connect,
not just after the connection completes, so this commit changes the code
to do that.

This commit also breaks setting the remote IP and port into functions
separate from vconn_init(), which makes the code more readable.

14 years agoRevert "datapath: Don't orphan packets in dp_dev transmit path."
Ben Pfaff [Mon, 13 Jul 2009 18:56:26 +0000 (11:56 -0700)]
Revert "datapath: Don't orphan packets in dp_dev transmit path."

This reverts commit 0858ad2b9d2f594f99bb11fc9b331ce8b1de953d.
Although that commit partially fixed a performance regression
relative to the Linux bridge, it introduced other problems that
were not apparent in the performance testing (e.g.
WARN_ON_ONCE(skb->destructor) now triggers in dp_process_received_packet()).
The fix is not completely obvious, so reverting now to ensure stability
while investigating the problem.

14 years agodatapath: Don't orphan packets in dp_dev transmit path.
Ben Pfaff [Mon, 13 Jul 2009 16:41:26 +0000 (09:41 -0700)]
datapath: Don't orphan packets in dp_dev transmit path.

Before commit 72ca14c1 "datapath: Fix race against workqueue in dp_dev and
simplify code," the dp_dev network device had a device queue, and we would
orphan packets before sticking them on the queue.  This screwed up socket
accounting a bit, but the effect was limited to the device queue length.

Now, after that commit, the dp_dev device has no device queue, but it still
orphans packets.  This screws up socket accounting a *lot*, because the
effect is now unlimited, since there is no queue to limit it.

The solution is to not orphan packets at all.  There is little need for it
now since packet transmission now happens immediately, not in a workqueue
whose execution may be delayed.

This should fix bug #1519, which tests "netperf -t UDP_STREAM" performance,
finding that an unrealistically high number of UDP packets could be sent
but that none at all were received.  The send rate is due to the orphaning,
the receive rate presumably because at least one out of approx. 65535/1500
= 44 fragments per full packet were dropped in each case.

14 years agoRemove "coverage/clear" command due its limited use
Justin Pettit [Sat, 11 Jul 2009 00:36:09 +0000 (17:36 -0700)]
Remove "coverage/clear" command due its limited use

The poll loop calls coverage_clear on every pass anyway, so provide a
function to call it separately is of limited value.

14 years agoFix small typo in ovs-ofctl man page.
Justin Pettit [Sat, 11 Jul 2009 00:33:41 +0000 (17:33 -0700)]
Fix small typo in ovs-ofctl man page.

14 years agoProvide ability to retrieve coverage information
Justin Pettit [Fri, 10 Jul 2009 22:09:41 +0000 (15:09 -0700)]
Provide ability to retrieve coverage information

Previously, there was no way to induce coverage information to be
displayed; it would only print when the system noticed unusual delays
between polling intervals.  Now, production of coverage logs can be
forced with "coverage/log" command in ovs-appctl.  Coverage counters may
be reset with "coverage/clear".

14 years agoDocument how to submit patches for Open vSwitch.
Ben Pfaff [Fri, 10 Jul 2009 20:38:58 +0000 (13:38 -0700)]
Document how to submit patches for Open vSwitch.

14 years agoDocument how to report bugs in Open vSwitch.
Ben Pfaff [Fri, 10 Jul 2009 18:04:05 +0000 (11:04 -0700)]
Document how to report bugs in Open vSwitch.

14 years agoINSTALL.bridge: Add detail suggested by Pete.
Ben Pfaff [Fri, 10 Jul 2009 18:03:00 +0000 (11:03 -0700)]
INSTALL.bridge: Add detail suggested by Pete.

14 years agoDocument how to use Open vSwitch as a replacement for the Linux bridge.
Ben Pfaff [Fri, 10 Jul 2009 17:35:36 +0000 (10:35 -0700)]
Document how to use Open vSwitch as a replacement for the Linux bridge.

14 years agodatapath: Fix races in updating dp_dev port statistics.
Ben Pfaff [Wed, 8 Jul 2009 19:32:07 +0000 (12:32 -0700)]
datapath: Fix races in updating dp_dev port statistics.

14 years agodatapath: Fix race in datapath creation.
Ben Pfaff [Wed, 8 Jul 2009 18:31:59 +0000 (11:31 -0700)]
datapath: Fix race in datapath creation.

Before we create the local port, we should allocate and assign the table.
Otherwise packets sent on the local port before we do so will cause an
OOPS.

This is a theoretical race that has not been observed in practice.

14 years agodatapath: Fix race against workqueue in dp_dev and simplify code.
Ben Pfaff [Wed, 8 Jul 2009 19:23:32 +0000 (12:23 -0700)]
datapath: Fix race against workqueue in dp_dev and simplify code.

The dp_dev_destroy() function failed to cancel the xmit_queue work, which
allowed it to run after the device had been destroyed, accessing freed
memory.  However, simply canceling the work with cancel_work_sync() would
be insufficient, since other packets could get queued while the work
function was running.  Stopping the queue with netif_tx_disable() doesn't
help, because the final action in dp_dev_do_xmit() is to re-enable the TX
queue.

This issue led me to re-examine why the dp_dev needs to use a work_struct
at all.  This was implemented in commit 71f13ed0b "Send of0 packets from
workqueue, to avoid recursive locking of ofN device" due to a complaint
from lockdep about recursive locking.

However, there's no actual reason that we need any locking around
dp_dev_xmit().  Until now, it has accepted the standard locking provided
by the network stack.  But looking at the other software devices (veth,
loopback), those use NETIF_F_LLTX, which disables this locking, and
presumably do so for this very reason.  In fact, the lwn article at
http://lwn.net/Articles/121566/ hints that NETIF_F_LLTX, which is otherwise
discouraged in the kernel, is acceptable for "certain types of software
device."

So this commit switches to using NETIF_F_LLTX for dp_dev and gets rid
of the work_struct.

In the process, I noticed that veth and loopback also take advantage of
a network device destruction "hook" using the net_device "destructor"
member.  Using this we can automatically get called on network device
destruction at the point where rtnl_unlock() is called.  This allows us
to stop stringing the dp_devs that are being destroyed onto a list so
that we can free them, and thus simplifies the code along all the paths
that call dp_dev_destroy().

This commit gets rid of a call to synchronize_rcu() (disguised as a call
to synchronize_net(), which is a macro that expands to synchronize_rcu()),
so it probably speeds up deleting ports, too.

14 years agodatapath: Remove declarations of functions that are never defined or used.
Ben Pfaff [Wed, 8 Jul 2009 17:53:18 +0000 (10:53 -0700)]
datapath: Remove declarations of functions that are never defined or used.

14 years agodatapath: Fix use-after-free error in datapath destruction.
Ben Pfaff [Fri, 26 Jun 2009 21:15:04 +0000 (14:15 -0700)]
datapath: Fix use-after-free error in datapath destruction.

When we create a datapath we do this:

1. Create local port.
2. Call add_dp hook.
3. Allow userspace to add more ports.

When we deleted a datapath we were doing this:

1. Call del_dp hook
2. Delete all the ports.

Unfortunately step 1 destroys dp->ifobj, then dp_del_port on any port other
than the local port in step 2 tries to reference dp->ifobj through a call
to sysfs_remove_link().

This commit fixes the problem by changing datapath deletion to mirror
creation:

1. Delete all the ports but the local port.
2. Call dp_del hook.
3. Delete local port.

Commit 010082639 "datapath: Add sysfs support for all (otherwise supported)
Linux versions" makes this problem obvious on a 2.6.25+ kernel configured
with slab debugging, because on such kernels the ifobj is a pointer to a
slab object that is freed by the del_dp hook function (when brcompat_mod
is loaded).  This bug may be just as present on older kernels, but there
the ifobj is part of struct datapath, not a pointer, and thus it is much
harder to trigger.

Bug #1465.

14 years agodatapath: Remove redundant synchronize_rcu() call.
Ben Pfaff [Fri, 26 Jun 2009 19:20:02 +0000 (12:20 -0700)]
datapath: Remove redundant synchronize_rcu() call.

There is no benefit to synchronizing twice, and it might cost us a lot of
time.

14 years agosecchan: Various fixes to run in-band on non-"local" port
Justin Pettit [Wed, 8 Jul 2009 17:40:55 +0000 (10:40 -0700)]
secchan: Various fixes to run in-band on non-"local" port

The in-band control code assumed that we would connect to the controller
over the datapath's "local" port.  If the switch had multiple datapaths,
and the controller was only available through one of them, the other
datapaths would fail to connect.  This is addressed by the following
changes:

    - The controller's MAC address is looked up through the connection's
      interface instead of the datapath's local one.

    - We allow ARP traffic to be sent by the connection's interface.

    - We allow ARP traffic to be sent to the controller's MAC address.
      This is necessary if the controller is running locally (e.g. in a VM).

Bug #1466

14 years agoProvide method to locate device by IP and add more nodev functions to netdev
Justin Pettit [Mon, 6 Jul 2009 22:37:19 +0000 (15:37 -0700)]
Provide method to locate device by IP and add more nodev functions to netdev

In some cases we need to be able to locate a device by its IPv4 address.
There doesn't seem to be an easy way to do this on Linux, so we iterate
through all devices until it's found.  The caller can provide a hint as
to the device, so subsequent checks can be quicker.

This checkin also adds nodev versions of functions to lookup ARP entries
and the IPv4 address of a device.

14 years agoShow more information about connection when querying status.
Justin Pettit [Thu, 2 Jul 2009 20:40:20 +0000 (13:40 -0700)]
Show more information about connection when querying status.

It is often useful in debugging to know the ports and IP addresses being
used in an OpenFlow connection.  This commit adds the remote and local
IP addresses and ports used for a connection to the "status" information
returned by ovs-ofctl.

Feature #1484.

14 years agoHave rconn and vconn export information about IPs and ports
Justin Pettit [Mon, 6 Jul 2009 22:15:11 +0000 (15:15 -0700)]
Have rconn and vconn export information about IPs and ports

Previously, rconn and vconn only allowed users to find out about the
remote IP address.  This set of changes allows users to retrieve the
remote port, local IP, and local port used for the connection.

14 years agoInclude "inttypes.h" to pickup definition of PRIu8.
Justin Pettit [Thu, 2 Jul 2009 19:49:44 +0000 (12:49 -0700)]
Include "inttypes.h" to pickup definition of PRIu8.

14 years agoRename "secchan" to "ofproto" (library) and "ovs-openflowd" (program).
Ben Pfaff [Wed, 8 Jul 2009 17:30:42 +0000 (10:30 -0700)]
Rename "secchan" to "ofproto" (library) and "ovs-openflowd" (program).

These names are more meaningful, so we prefer them.

14 years agosecchan: Display mgmt and datapath id in status messages
Justin Pettit [Tue, 7 Jul 2009 16:34:37 +0000 (09:34 -0700)]
secchan: Display mgmt and datapath id in status messages

Since it's not always easy to determine the management id, this adds the
ability to see it (and the datapath id) with the "ovs-ofctl status"
command.

Feature #1533

14 years agovswitchd: Add missing argument to check for update-resolv.conf config
Justin Pettit [Tue, 7 Jul 2009 05:12:53 +0000 (22:12 -0700)]
vswitchd: Add missing argument to check for update-resolv.conf config

14 years agovswitch: Don't pass null pointer to stat().
Ben Pfaff [Mon, 6 Jul 2009 23:20:46 +0000 (16:20 -0700)]
vswitch: Don't pass null pointer to stat().

If no CA certificate is defined then cacert_file is null.  The kernel
kindly tolerates this but we should not do it anyhow.

Found with valgrind.

14 years agovswitch: Avoid knowledge of details specific to Linux datapaths.
Ben Pfaff [Mon, 6 Jul 2009 18:06:36 +0000 (11:06 -0700)]
vswitch: Avoid knowledge of details specific to Linux datapaths.

At startup, the vswitch needs to delete datapaths that are not configured
by the administrator.  Until now this was done by knowing the possible
names of Linux datapaths.  This commit cleans up by allowing each
datapath class to enumerate its existing datapaths and their names.

14 years agodpif-linux: Don't allow arbitrary internal ports to identify a datapath.
Ben Pfaff [Mon, 6 Jul 2009 18:02:57 +0000 (11:02 -0700)]
dpif-linux: Don't allow arbitrary internal ports to identify a datapath.

The userspace tools were allowing the name of any internal port to be used
to identify a datapath.  This, however, makes it hard to enumerate all the
names by which a datapath can be known, and it was never documented or
intentional behavior, so this commit disables it.

14 years agovswitch: Remove restriction on datapath names.
Ben Pfaff [Mon, 6 Jul 2009 17:17:54 +0000 (10:17 -0700)]
vswitch: Remove restriction on datapath names.

Commit f4b96c92c "vswitch: Disallow bridges named "dpN" or "nl:N"" disabled
naming bridges "dpN" because the vswitchd code made the bad assumption that
the bridge's local port has the same name as the bridge, which was not
true (at the time) for bridges named dpN.  Now that assumption has been
eliminated, so this commit eliminates the restriction too.

This change is also a cleanup in that it eliminates one form of the
vswitch's dependence on specifics of the dpif implementation.

14 years agoNew implementation of userspace datapath, based on the netdev library.
Ben Pfaff [Fri, 19 Jun 2009 21:09:39 +0000 (14:09 -0700)]
New implementation of userspace datapath, based on the netdev library.

14 years agoIntroduce general-purpose ways to wait for dpif and netdev changes.
Ben Pfaff [Wed, 24 Jun 2009 17:24:09 +0000 (10:24 -0700)]
Introduce general-purpose ways to wait for dpif and netdev changes.

The dpif and netdev code has had various ways to check for changes to
dpifs and netdevs over the course of Open vSwitch development.  All of
these have been thus far fairly specific to the Linux implementation.  This
commit is the start of a more general API for watching for such changes.
The dpif-related parts seem fairly mature and so they are documented,
the netdev parts will probably need to change somewhat and so they are
not documented yet.

14 years agodpif: Add new functions dp_run() and dp_wait().
Ben Pfaff [Fri, 19 Jun 2009 21:09:09 +0000 (14:09 -0700)]
dpif: Add new functions dp_run() and dp_wait().

The upcoming netdev-based dpif needs a hook where it can process packets
and throw them against the flow table, and this provides a suitable place.

14 years agodpif: Make dpifs abstract, to allow multiple datapath implementations.
Ben Pfaff [Wed, 17 Jun 2009 21:35:35 +0000 (14:35 -0700)]
dpif: Make dpifs abstract, to allow multiple datapath implementations.

This commit initially introduces only a single datapath implementation,
which is the same as the original one, but it paves the way for
additional implementations, such as the upcoming userspace datapath.

14 years agodatapath: Drop unneeded local variable initialization.
Ben Pfaff [Fri, 19 Jun 2009 21:03:12 +0000 (14:03 -0700)]
datapath: Drop unneeded local variable initialization.

14 years agodatapath: Change ODP_PORT_LIST semantics.
Ben Pfaff [Wed, 17 Jun 2009 21:28:07 +0000 (14:28 -0700)]
datapath: Change ODP_PORT_LIST semantics.

Until now, ODP_PORT_LIST has reported the number of ports actually copied
out.  It's better for the caller, however, if it reports the number of
ports that were available to be copied out.

14 years agodatapath: Make openvswitch_ioctl() have a single point of exit.
Ben Pfaff [Wed, 17 Jun 2009 18:51:55 +0000 (11:51 -0700)]
datapath: Make openvswitch_ioctl() have a single point of exit.

This makes it easier to insert debug printk() calls in a single place if
necessary, and conforms at least as well with Linux kernel style.

14 years agodatapath: Fix ODP_PORT_DEL handling of bad user memory read.
Ben Pfaff [Wed, 17 Jun 2009 18:50:46 +0000 (11:50 -0700)]
datapath: Fix ODP_PORT_DEL handling of bad user memory read.

14 years agodatapath: Style fix.
Ben Pfaff [Wed, 17 Jun 2009 18:49:01 +0000 (11:49 -0700)]
datapath: Style fix.

14 years agodatapath: Get rid of query operations for single flows.
Ben Pfaff [Wed, 17 Jun 2009 19:41:30 +0000 (12:41 -0700)]
datapath: Get rid of query operations for single flows.

14 years agodatapath: Make the datapath responsible for choosing port numbers.
Ben Pfaff [Wed, 17 Jun 2009 21:26:19 +0000 (14:26 -0700)]
datapath: Make the datapath responsible for choosing port numbers.

Soon we will allow for multiple datapath implementations.  By allowing
the datapath to choose the port numbers, we possibly simplify some datapath
implementations, and the datapath's clients don't have to guess (or to
check) what port numbers are free, so this seems like a better way to go.

14 years agodatapath: Remove unnecessary range check from put_actions().
Ben Pfaff [Tue, 16 Jun 2009 21:16:14 +0000 (14:16 -0700)]
datapath: Remove unnecessary range check from put_actions().

This code checked that the number of actions in a flow query did not
exceed the maximum number of actions that are allowed on a given flow.
But this check is unnecessary, since the code will never copy out any
more actions than actually exist in a flow.  It would be a shame to refuse
a flow query simply on the basis that the caller allocated more memory
than necessary, so eliminate the check.

14 years agodpif: Rename odp_msg related functions for more consistency.
Ben Pfaff [Wed, 17 Jun 2009 21:18:10 +0000 (14:18 -0700)]
dpif: Rename odp_msg related functions for more consistency.

This seems like a more consistent naming scheme, since all of these
functions are related but none of them were named similarly or grouped
together.

14 years agodpif: Change dpif_port_group_get() semantics.
Ben Pfaff [Wed, 17 Jun 2009 21:22:57 +0000 (14:22 -0700)]
dpif: Change dpif_port_group_get() semantics.

This function is easier for callers to use if they do not have to guess
how many ports are in the group.  Since it's not performance critical at
all, introduce these easier semantics.

14 years agodpif: Remove obsolete support for datapaths whose names begin with "nl:".
Ben Pfaff [Tue, 16 Jun 2009 18:05:00 +0000 (11:05 -0700)]
dpif: Remove obsolete support for datapaths whose names begin with "nl:".

The use of "nl:" as a prefix for datapath names has been deprecated for
months.  That should be long enough for users to update their scripts.

14 years agodpif: Hide the contents of struct dpif.
Ben Pfaff [Tue, 16 Jun 2009 17:09:10 +0000 (10:09 -0700)]
dpif: Hide the contents of struct dpif.

This helps prepare for multiple dpif implementations, and ensures that
code outside dpif.c does not depend on its internals.

14 years agodpif: Make dpif_port_query_by_name() more useful by logging less on failure.
Ben Pfaff [Tue, 16 Jun 2009 17:01:04 +0000 (10:01 -0700)]
dpif: Make dpif_port_query_by_name() more useful by logging less on failure.

One potential user of dpif_port_query_by_name() actually open-coded the
function because it didn't want logging on failure.  There was only one
actual caller of the function, which didn't want logging on failure either.
So, clean up by reducing the failure log level to DBG and making the
open-coded version an actual caller.

14 years agodpif: Replace dpif_id() by dpif_name().
Ben Pfaff [Tue, 16 Jun 2009 18:00:22 +0000 (11:00 -0700)]
dpif: Replace dpif_id() by dpif_name().

dpif_id() is often used in error messages, e.g. "dp%u: screwed up".  But
soon we will be generalizing the concept of a datapath, so it is better
to have a function that returns a full name, e.g. "%s: screwed up".
Accordingly, this commit replaces dpif_id() by a new function dpif_name()
that does so.