Ben Pfaff [Thu, 28 Jul 2011 22:02:06 +0000 (15:02 -0700)]
ofproto: New helper macro OFPROTO_FOR_EACH_TABLE.
In my opinion this makes the code slightly easier to read and write.
Ben Pfaff [Thu, 28 Jul 2011 22:01:20 +0000 (15:01 -0700)]
ofproto: Allow ->rule_choose_table() to be NULL regardless of table count.
In the upcoming software switch implementation of multiple tables, there is
no reason to prefer one table over another, so we always put rules into
table 0 by default. This commit allows this to be done simply by
specifying NULL as ->rule_choose_table().
Ben Pfaff [Thu, 28 Jul 2011 21:19:52 +0000 (14:19 -0700)]
ofproto: Make ->construct() and ->destruct() more symmetrical.
The ofproto_provider's ->construct() was required to allocate and
initialize the flow tables, but ->destruct() was not allowed to
uninitialize and free them. This arrangement is oddly asymmetrical (and
undocumented), so this commit changes the code so that the client is
responsible for both allocation and freeing.
Reported-by: Hao Zheng <hzheng@nicira.com>
CC: Hao Zheng <hzheng@nicira.com>
Ben Pfaff [Mon, 8 Aug 2011 23:01:05 +0000 (16:01 -0700)]
ofproto-dpif: Fix pointer arithmetic on null pointer.
rule_dpif_lookup() can return a null pointer as 'rule' so we shouldn't
try to calculate '&rule->up' before it's been found to be nonnull.
This doesn't appear to fix a real bug because 'up' is the first member
of 'rule' so when rule is NULL then &rule->up is also NULL.
Reported-by: Ethan Jackson <ethan@nicira.com>
Ben Pfaff [Mon, 8 Aug 2011 22:43:29 +0000 (15:43 -0700)]
ofproto-dpif: Make ofproto/trace accept an odp_flow in place of a packet.
It's often easier to get a flow than it is to get a packet. For example,
"ovs-dpctl dump-flows" prints flows, but it doesn't print any of the
packets in those flows. It is also easier to construct a flow by hand than
it is to construct packet bytes.
This commit, therefore, makes ofproto/trace accept a flow specification in
place of packet data. In a few cases a flow by itself is not sufficient
to determine what would happen to a packet, so in those cases the command
prints a message to that effect.
An upcoming commit will also start using this feature to unit-test action
translation in ofproto-dpif.
Suggested-by: Reid Price <reid@nicira.com>
Ben Pfaff [Thu, 4 Aug 2011 23:20:34 +0000 (16:20 -0700)]
odp-util: New function odp_flow_key_from_string().
This will be used in upcoming commits.
Ben Pfaff [Thu, 4 Aug 2011 20:32:19 +0000 (13:32 -0700)]
odp-util: Format VLAN headers more like other headers in ODP flow output.
The rest of the headers all follow the form "header(value)" or
"header(key1=value1,key2=value2,...)" but VLAN headers left out the "="
characters. This adds them in for consistency.
Ben Pfaff [Fri, 5 Aug 2011 21:18:06 +0000 (14:18 -0700)]
netdev: Get rid of struct netdev_options and netdev_open_default().
Now that netdev_options only has two members, we might as well pass them
directly as parameters.
Ben Pfaff [Mon, 8 Aug 2011 19:49:17 +0000 (12:49 -0700)]
netdev: Decouple creating and configuring network devices.
Until now, each call to netdev_open() for a particular network device
had to either specify a set of network device arguments that was either
empty or (for devices that already existed) equal to the existing device's
configuration. Unfortunately, the definition of "equality" in the latter
case was mostly done in terms of strict equality of string-to-string maps,
which caused problems in cases where, for example, one set of arguments
specified the default value of an optional argument explicitly and the
other omitted it.
The netdev interface does have provisions for defining equality other ways,
but this had only been done in one case that was especially problematic in
practice. One way to solve this particular problem would be to carefully
define equality in all the problematic cases.
This commit takes another approach based on the realization that there is
really no need to do any comparisons. Instead, it removes configuration
at netdev_open() time entirely, because almost all of netdev_open()'s
callers are not interested in creating and configuring a netdev. Most of
them just want to open a configured device and use it. Therefore, this
commit stops providing any configuration arguments to netdev_open() and the
provider functions that it calls. Instead, a caller that does want to
configure a device does so after it opens it, by calling
netdev_set_config().
This change allows us to simplify the netdev interface a bit. There is no
longer any need to implement argument comparisons. As a result, there is
also no need for "struct netdev_dev" to keep track of configuration at all.
Instead, the network devices that have configuration keep track of it in
their own internal form.
This new interface does mean that it becomes possible to accidentally
create and try to use an unconfigured netdev that requires configuration.
Bug #6677.
Reported-by: Paul Ingram <paul@nicira.com>
Ben Pfaff [Mon, 8 Aug 2011 17:58:38 +0000 (10:58 -0700)]
debian: Ensure that /var/run/openvswitch exists in controller init script.
It would be better to use ovs-ctl from this script, but until now this is
an adequate solution.
Reported-by: Jibesh Patra
Bug-report: https://bugs.launchpad.net/bugs/822142
Ben Pfaff [Fri, 5 Aug 2011 21:15:32 +0000 (14:15 -0700)]
netdev: Clean up and refactor packet receive interface.
The Open vSwitch tree only has one user of the ability for a netdev to
receive packets from a network device. Thus, this commit simplifies the
common-case use of the netdev interface by replacing the "ethertype" option
from "struct netdev_options" by a new netdev_listen() call.
The only user of netdev_listen() wants to receive all packets from a
network device, so this commit also removes the ability to restrict the
received packets to a particular protocol. (This ability was once used by
the Open vSwitch integrated DHCP client, but that code has been removed.)
This commit also simplifies and improves the implementation of the code
in netdev-linux that started listening to a network device. Before, I had
not figured out how to avoid receiving all packets on all devices before
binding to a particular device, but I took a closer look at the kernel code
and figured it out.
I've tested that the userspace datapath (dpif-netdev), the only user of
netdev_recv(), still works after this change.
Ben Pfaff [Fri, 5 Aug 2011 21:14:18 +0000 (14:14 -0700)]
bridge: Add port to datapath before trying to retrieve device stats.
Virtual ports such as GRE tunnels don't exist until after the port is
added to the datapath, so without this change adding such a port yields
a warning like the following:
netdev|WARN|failed to retrieve MTU for network device gre0: No such device
Ben Pfaff [Fri, 5 Aug 2011 22:56:05 +0000 (15:56 -0700)]
ovsdb: Correct specification inconsistency between "lock" and "assert".
The "lock" request requires the lock name to be an <id> but it is shown as
<string> in the "assert" operation. This corrects the "assert"
specification and fixes the suggested naming convention (since ":" is not
valid in an <id>).
This commit also updates the implementation to match the specification.
Reported-by: Jeremy Stribling <strib@nicira.com>
Ben Pfaff [Fri, 5 Aug 2011 22:48:45 +0000 (15:48 -0700)]
ofp-util: Rewrite action decoding to improve compiler warnings.
The previous implementation of ofputil_decode_action() had two weaknesses.
First, the action lengths in its tables were written as literal integers
instead of using "sizeof". Second, it used arrays for tables instead of
switch statements, which meant that GCC didn't warn when someone added a
new action type but forgot to add an entry to the tables.
This rewrite fixes both of those problems.
Suggested-by: Ethan Jackson <ethan@nicira.com>
Ben Pfaff [Fri, 5 Aug 2011 23:58:02 +0000 (16:58 -0700)]
Document and warn that mirroring to a VLAN is incompatible with SLB bonding.
vswitchd/INTERNALS explains the incompatibility:
2. When Open vSwitch forwards a multicast or broadcast packet to a
link in the SLB bond other than the active slave, the remote
switch will forward it to all of the other links in the SLB
bond, including the active slave. Without special handling,
this would mean that Open vSwitch would forward a second copy of
the packet to each switch port (other than the bond), including
the port that originated the packet.
Open vSwitch deals with this case by dropping packets received
on any SLB bonded link that have a source MAC+VLAN that has been
learned on any other port. (This means that SLB as implemented
in Open vSwitch relies critically on MAC learning. Notably, SLB
is incompatible with the "flood_vlans" feature.)
We could go farther than this and automatically change the bonding mode to
a safer one (e.g. active-backup) when flood_vlans are enabled. However,
that would still leave the SLB fallback for LACP modes in place; perhaps
active-backup would have to be the fallback for LACP modes when flood_vlans
are enabled.
Ben Pfaff [Mon, 8 Aug 2011 17:17:30 +0000 (10:17 -0700)]
Document that mirroring to a GRE tunnel works and is better than RSPAN.
Ben Pfaff [Mon, 8 Aug 2011 16:35:01 +0000 (09:35 -0700)]
ChangeLog: Rename NEWS.
Many users seem to miss changes that Open vSwitch clearly states in
ChangeLog. Some of this is probably due to users not reading any
documentation ever, but I wonder whether some of it is because users
expect ChangeLog to be akin to a commit log, because that's what GNU
software puts in ChangeLog. Users don't read GNU ChangeLogs, because
they don't contain information useful to users.
GNU software puts what we have in ChangeLog in a file named NEWS. Some
users read it. Therefore, this commit renames ChangeLog to NEWS.
Also, strip trailing whitespace for Ethan-compliance.
Ben Pfaff [Fri, 5 Aug 2011 21:08:54 +0000 (14:08 -0700)]
ovsdb: Fix typo in SPECS.
Reported-by: Jeremy Stribling <strib@nicira.com>
Casey Barker [Thu, 4 Aug 2011 23:18:59 +0000 (16:18 -0700)]
lib: Adapt headers for use in C++.
This commit makes several library headers suitable for inclusion in C++.
It adds [extern "C"] guards and makes minor changes to fix casting and
keyword issues.
Ethan Jackson [Thu, 4 Aug 2011 20:20:30 +0000 (13:20 -0700)]
util: Fix non-ANSI function declaration.
This patch fixes the following sparse warning:
"non-ANSI function declaration of function 'get_program_version'"
Justin Pettit [Thu, 4 Aug 2011 08:26:54 +0000 (01:26 -0700)]
ovs-appctl: Add common commands to man page.
The common "help" command was not previously mentioned in the ovs-appctl
man page. This commit documents both "help" and the new "version"
commands.
Justin Pettit [Tue, 2 Aug 2011 04:18:00 +0000 (21:18 -0700)]
ovs-appctl: Add "version" command to print version of running daemons.
When debugging a running system, we occasionally see a mismatch of
different versions because someone forgets to restart one or more
daemons. Often times, it would be useful to know what's running as
opposed to what's on the current runpath.
Justin Pettit [Tue, 2 Aug 2011 19:16:44 +0000 (12:16 -0700)]
util: Introduce get_program_version function.
Useful in an upcoming commit.
Simon Horman [Wed, 3 Aug 2011 23:04:10 +0000 (08:04 +0900)]
ovs-dpctl: Show number of flows
Expose the number of flows present in a datapath to user-space
and to users via ovs-dpctl show.
e.g.:
ovs-dpctl show br3
system@br3:
lookups: frags:0, hit:0, missed:0, lost:0
flows: 0
...
Signed-off-by: Simon Horman <horms@verge.net.au>
[Jesse: Add same logic to userspace datapath.]
Signed-off-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 3 Aug 2011 22:01:11 +0000 (15:01 -0700)]
in-band: Delete remaining rules when disabling in-band control.
in_band_destroy() doesn't remove all of the rules that in-band control
adds (and it cannot, because that might require waiting for an existing
asynchronous flow modification or addition to complete), so turning on
other-config:disable-in-band or deleting all of the OpenFlow controllers
did not delete all of the in-band rules.
This commit fixes the problem by making the in-band control object hang
around until all of the flows that it set up have actually been deleted.
This problem was introduced as part of commit
7ee20df "ofproto: Implement
asynchronous OFPT_FLOW_MOD commands."
Reported-by: Brad Hall <brad@nicira.com>
Ben Pfaff [Wed, 3 Aug 2011 21:31:54 +0000 (14:31 -0700)]
connmgr: Drop 'next_in_band_update' timer.
This timer used to exist because it was possible for in-band remote IP
addresses to change without any intentional configuration change in one
case: where controller discovery found a new controller. Controller
discovery was removed long ago, but the reason for the timer had been
forgotten and so remained. This commit removes it.
Justin Pettit [Wed, 3 Aug 2011 22:10:58 +0000 (15:10 -0700)]
Prepare for a post-1.2.0 world (1.2.90).
Justin Pettit [Wed, 3 Aug 2011 22:09:45 +0000 (15:09 -0700)]
Prepare Open vSwitch 1.2.0 release.
Justin Pettit [Wed, 3 Aug 2011 06:15:30 +0000 (23:15 -0700)]
Update ChangeLog to reflect changes since 1.1.0.
Simon Horman [Wed, 3 Aug 2011 02:19:47 +0000 (11:19 +0900)]
datapath: Allow the number of hash entries to exceed TBL_MAX_BUCKETS
* If the number of entries in a table exceeds
the number of buckets that it has then
an attempt will be made to resize the table.
* There is a limit of TBL_MAX_BUCKETS placed on
the number of buckets of a table.
* If this limit is exceeded keep using the existing table.
This allows a table to hold more than TBL_MAX_BUCKETS
entries at the expense of increased hash collisions.
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Jesse Gross <jesse@nicira.com>
Simon Horman [Wed, 3 Aug 2011 02:19:46 +0000 (11:19 +0900)]
datapath: Allow table to expand to have TBL_MAX_BUCKETS buckets
This resolves what appears to be a logic error whereby
the maximum number of buckets is limited to only half of TBL_MAX_BUCKETS.
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Thu, 28 Jul 2011 17:19:43 +0000 (10:19 -0700)]
vlog: Move log level definitions from source code to user documentation.
Users should be able to find out what a log level means without reading
source code comments, so this seems like a better place for it.
Reported-by: David Tsai <dtsai@nicira.com>
Ben Pfaff [Thu, 28 Jul 2011 17:19:42 +0000 (10:19 -0700)]
vlog: Add a new log level "off".
Until now, "emer" has effectively been "off" because no messages were ever
logged at "emer" level. Justin points out that it is useful to use "emer"
for messages that indicate a fatal error. This commit makes that change
and adds a new "off" level to really turn off all logging to a facility.
Justin Pettit [Mon, 1 Aug 2011 17:43:26 +0000 (10:43 -0700)]
debian: Fix path for ovsdb-server in init script.
Reported-by: Brad Hall <brad@nicira.com>
Jesse Gross [Fri, 15 Jul 2011 16:59:06 +0000 (09:59 -0700)]
datapath: Backport flex_arrays.
flex_arrays didn't exist at all until 2.6.30, weren't exported to modules
until 2.6.38, and performed poorly until 3.0, so this backports the
functionality to older kernels.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Fri, 15 Jul 2011 16:59:16 +0000 (09:59 -0700)]
datapath: Don't pass __GFP_ZERO to kmalloc on older kernels.
On new kernels kzalloc() is simply a wrapper around kmalloc with
the addition of the __GFP_ZERO flag. flex_arrays take advantage
of this by expecting the user to just pass in this flag if they
want the memory to be zeroed. However, before 2.6.23, kzalloc()
was a function in its own right and kmalloc really didn't like
receiving __GFP_ZERO. This overrides kmalloc() to intercept the
flags and direct the call to the right function.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Fri, 15 Jul 2011 16:59:05 +0000 (09:59 -0700)]
datapath: Backport reciprocal division.
The reciprocal division library did not exist until 2.6.20 and is
not currently exported in any version, so this backports it.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Ethan Jackson [Thu, 28 Jul 2011 23:49:06 +0000 (16:49 -0700)]
ovs-ofctl: Print human readable nx_pull_match() errors.
I've found this makes debugging a bit easier.
Ethan Jackson [Wed, 27 Jul 2011 22:10:38 +0000 (15:10 -0700)]
nx-match: Shorten line length to 79 characters.
Simon Horman [Thu, 28 Jul 2011 23:38:50 +0000 (16:38 -0700)]
ofproto-dpif: Allow setting of flow eviction threshold
Allow setting the number of flows present in the flow hash
at which point eviction of entries from the kernel flow hash
will begin to occur.
The value may be set using a bridge's other-config column.
e.g.
ovs-vsctl set bridge br3 other-config:flow-eviction-threshold=10000
default is 1000, reflecting constant value previously used.
Increasing this value can result in reduced CPU usage and
packet loss in situations where the number of active flows
is significantly larger than 1000.
pravin shelar [Thu, 28 Jul 2011 16:05:25 +0000 (09:05 -0700)]
Datapath action should not refer to controller
ODP_ACTION_ATTR_CONTROLLER in the kernel actually sends packets to
userspace, not the controller. To make it generic rename this action
to ODP_ACTION_ATTR_USERSPACE.
Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Ethan Jackson [Thu, 28 Jul 2011 18:39:51 +0000 (11:39 -0700)]
git: Update gitignore in tests and utilities.
Ben Pfaff [Thu, 28 Jul 2011 00:06:50 +0000 (17:06 -0700)]
ofproto-dpif: Fix mirror configuration and deconfiguration.
Deleting or updating a mirror didn't work: mirror_set() didn't set the
'aux' member so mirror_lookup() couldn't find the mirror on that basis.
Bug #6617.
Reported-by: David Tsai <dtsai@nicira.com>
Ben Pfaff [Thu, 28 Jul 2011 16:45:02 +0000 (09:45 -0700)]
vlog: Fix typo in VLOG_IS_ERR_ENABLED macro definition.
This does not fix any real bug because VLOG_IS_ERR_ENABLED is not used
anywhere in the tree.
Ethan Jackson [Thu, 28 Jul 2011 02:00:59 +0000 (19:00 -0700)]
xenserver: Fix typo in spec file.
Ben Pfaff [Thu, 28 Jul 2011 00:07:07 +0000 (17:07 -0700)]
Remove spurious blank line.
Ben Pfaff [Wed, 27 Jul 2011 23:23:06 +0000 (16:23 -0700)]
ovs-benchmark: New utility.
Ben Pfaff [Thu, 16 Sep 2010 21:28:53 +0000 (14:28 -0700)]
socket-util: New function lookup_hostname().
This is equivalent to lookup_ip() except that it accepts DNS names also.
Ben Pfaff [Wed, 29 Sep 2010 17:15:15 +0000 (10:15 -0700)]
socket-util: Factor inet_parse_passive() out of inet_open_passive().
Ben Pfaff [Thu, 21 Jul 2011 21:44:54 +0000 (14:44 -0700)]
ovs-ofctl: Fix dump-ports and queue-stats commands.
These ovs-ofctl commands have been sending malformed stats requests since
commit
63f2140a553 "openflow: Make stats replies more like other OpenFlow
messages." This commit fixes the problem and adds basic unit tests that
should prevent similar regressions.
Reported-by: Hao Zheng <hzheng@nicira.com>
Ben Pfaff [Wed, 27 Jul 2011 21:58:10 +0000 (14:58 -0700)]
ovs-ofctl: New --readd option for "replace-flows".
This is useful for resetting flows' byte and packet counters to 0.
Suggested-by: Jed Daniels <openvswitch@jeddaniels.com>
Ben Pfaff [Wed, 27 Jul 2011 21:56:03 +0000 (14:56 -0700)]
netlink-socket: Reduce nl_sock_recv() from 2 (or more) system calls to 1.
Until now, each attempt to receive a message from a Netlink socket has
taken at least two system calls, one to check the size of the message to
be received and a second one to delete the message from the socket buffer.
This commit switches to a new strategy that requires only one system call
per message received.
In my testing this increases the maximum flow setups per second by a little
over 10%.
Ben Pfaff [Wed, 20 Jul 2011 17:52:09 +0000 (10:52 -0700)]
netlink-socket: Remove unused nl_sock_sendv() function.
This function hasn't been used for ages.
Ben Pfaff [Tue, 26 Jul 2011 16:46:38 +0000 (09:46 -0700)]
debian: Move OVSDB schema and ovsdb-tool to openvswitch-switch.
ovs-vswitchd in the openvswitch-switch package is tightly coupled to its
database schema. During development, it's possible to change the schema
without changing the Open vSwitch version number, which makes it possible
for the openvswitch-switch and openvswitch-common packages to get out of
sync: openvswitch-switch requires the same version of openvswitch-common,
but if the version number doesn't get updated that has no effect.
Actually putting the schema and ovs-vswitchd (its primary user) in the
same package prevents them from getting out-of-sync. This commit also
moves ovsdb-tool because that program often works directly with OVSDB
schemas and so there's not much point having it around without a schema to
work with.
Ben Pfaff [Fri, 22 Jul 2011 22:31:32 +0000 (15:31 -0700)]
ofproto-dpif: Restore former NORMAL action behavior when revalidating.
Before commit
fa066f015 "bridge: Move packet processing functionality into
ofproto," the code that called into what became xlate_normal() prevented
a flow from being installed if it was called at revalidation time and
the MAC learning table lacked an entry for the flow's destination MAC.
That commit instead started dropping packets in that case (because it
incorrectly ignored xlate_normal()'s return value).
This restores the former behavior. It's not clear that the former behavior
is the best possible, but it is strictly better than starting to drop
packets at revalidation time.
Along with the previously fixed problem where flood_vlans were interpreted
incorrectly, this bug broke controller connectivity when flood_vlans was
set to any nonempty value that did not include the VLAN used for the
controller connection (that is, when flood_vlans was interpreted as
flooding the controller VLAN).
Reported-by: David Tsai <dtsai@nicira.com>
Ben Pfaff [Fri, 22 Jul 2011 00:03:59 +0000 (17:03 -0700)]
vlan-bitmap: Remove function vlan_bitmap_contains().
I created this function because I thought I had three good use cases.
Unfortunately, one of them was wrong, so drop it.
Ben Pfaff [Fri, 22 Jul 2011 00:03:03 +0000 (17:03 -0700)]
mac-learning: Fix inverted logic in is_learning_vlan().
When a bit is set in flood_vlans, that VLAN must be flooded, but the logic
here was reversed in the case where there were any flooded VLANs at all.
Thus, if a single VLAN was configured to be flooded, all VLANs except that
one were actually flooded.
The common case where no VLANs were to be flooded was handled correctly.
Reported-by: David Tsai <dtsai@nicira.com>
Ben Pfaff [Wed, 27 Jul 2011 00:08:06 +0000 (17:08 -0700)]
datapath: Add missing targets to avoid failure on e.g. "make TAGS".
Automake invokes a number of targets recursively, including in
datapath/linux, so we need to define all those targets or get an error
from "make" when those targets are invoked, e.g. when "make TAGS" is run.
This commit adds a no-op target to the main datapath/linux Makefile for
each recursive target listed in the "Third-Party Makefiles" section of
the Automake manual, in the order listed there, fixing the problem.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Thu, 14 Jul 2011 22:17:33 +0000 (15:17 -0700)]
ofp-print: Make port "config" and "state" output easier to read.
This changes the output of "ovs-ofctl show" from printing ports like this:
1(eth1): addr:50:54:00:00:00:02, config: 0x11, state:0x1
to this:
1(eth1): addr:50:54:00:00:00:02
config: PORT_DOWN NO_FLOOD
state: LINK_DOWN
which seems much easier to read.
It also eliminates trailing white space from the output.
Reported-by: Ethan Jackson <ethan@nicira.com>
Ben Pfaff [Tue, 26 Jul 2011 23:49:03 +0000 (16:49 -0700)]
vswitchd: Prevent multiple ovs-vswitchd processes from acting together.
Once in a while someone reports a problem caused by running multiple
ovs-vswitchd processes at the same time. This fixes the problem by
requiring ovs-vswitchd to obtain a database lock before taking any actions.
Ben Pfaff [Tue, 26 Jul 2011 17:24:17 +0000 (10:24 -0700)]
ovsdb: Implement a "lock" feature in the database protocol.
This provides clients a way to coordinate their access to the database.
This is a voluntary, not mandatory, locking protocols, that is, clients
are not prevented from modifying the database unless they cooperate with
the locking protocol. It is also not related to any of the ACID properties
of database transactions. It is strictly a way for clients to coordinate
among themselves.
The following commit will introduce one user.
Ben Pfaff [Tue, 26 Jul 2011 17:17:36 +0000 (10:17 -0700)]
ovsdb: Refactor jsonrpc-server to make the concept of a session public.
An upcoming commit will need to expose the concept of a database session
to the execution engine, to allow the execution engine to query the locks
held by the session. This commit prepares for that by making sessions a
publicly visible data structure.
Ben Pfaff [Wed, 13 Jul 2011 23:08:37 +0000 (16:08 -0700)]
ovsdb: Report the number of connections for inbound Managers.
Inbound managers (e.g. "ptcp:") can have multiple active connections, but
the database schema doesn't allow us to report the status of more than one
at a time. This commit adds a status key-value pair that, when there is
more than one active connection, reports the number that are active. This
at least helps to clarify the issue.
Ben Pfaff [Wed, 13 Jul 2011 23:15:22 +0000 (16:15 -0700)]
ovsdb-server: Reliably report status of inbound connections.
ovsdb_jsonrpc_server keeps track of its remotes in a shash indexed on the
remote name specified in the database Manager record, but
ovsdb_jsonrpc_server_get_remote_status() added the name returned by
jsonrpc_session_get_name() to the shash returned to the ovsdb-server code.
If that name happened to be different (which is entirely possible because
the latter returns a "canonicalized" name in some cases) then the
ovsdb-server code couldn't find it. Furthermore, if an inbound (e.g.
"ptcp:") Manager got a connection and then lost it, the status info in
that Manager never got updated to reflect that, because the code considered
that that "couldn't happen" and didn't bother to do any updates.
This commit simplifies the logic. Now ovsdb-server just asks for a single
status record at a time, using the name that is indexed in the
ovsdb_jsonrpc_server shash, avoiding that whole issue.
Ben Pfaff [Tue, 26 Jul 2011 17:16:15 +0000 (10:16 -0700)]
ovsdb-client: Make "server" and "database" arguments optional.
In practice these arguments are almost always the defaults, so this change
makes ovsdb-client much more usable interactively.
Ben Pfaff [Tue, 26 Jul 2011 17:13:07 +0000 (10:13 -0700)]
ovs-vswitchd: Make database socket command-line argument optional.
In practice the default location is the only one used, so we might as well
make it easy.
Ben Pfaff [Tue, 26 Jul 2011 16:53:49 +0000 (09:53 -0700)]
ovsdb-server: Make database command-line argument optional.
In practice the default location is the only one used, so we might as well
make it easier.
Ben Pfaff [Sat, 9 Jul 2011 00:03:17 +0000 (17:03 -0700)]
dirs: Make sysconfdir available via ovs_sysconfdir().
This will be used in upcoming patches.
Ben Pfaff [Wed, 13 Jul 2011 21:38:33 +0000 (14:38 -0700)]
ovsdb-doc: Fix definition of .TQ macro.
.TP's argument is an optional indentation width, not a string. The string
goes on the next line.
vswitch.xml didn't actually cause .TQ to be used before, so this wasn't a
problem, but an upcoming commit does add a use, so this commit fixes the
problem in advance.
Ben Pfaff [Wed, 13 Jul 2011 20:40:43 +0000 (13:40 -0700)]
stream-unix: Fix naming of passive Unix streams.
Until now, pstream_get_name() would just return "punix" for passive Unix
streams. This is uninformative and probably just a mistake, so this
commit switches to using the full name passed in, e.g.
"punix:/path/to/socket".
Justin Pettit [Tue, 26 Jul 2011 21:43:06 +0000 (14:43 -0700)]
Update version to reflect this branch is for post-1.1.x development.
When development for a new long-term release is started, we haven't
typically updated the version string. This means that version numbers
used in binaries generated on this branch tend to lag behind "current"
stable releases. We considered using a "pre" string in the version
(eg, "1.2.0-pre1") but this causes some pain for RPMs. Instead, we
will now use "90" as the version's bug-fix number to indicate that this
will form a new release.
For example, the current stable series is "1.1.x" in the "branch-1.1"
branch, so the master branch will be labeled "1.1.90" in anticipation
that it will be the basis for the "1.2.x" series. Code in "branch-1.1"
will have the expected version numbers (ie, 1.1.0, 1.1.1, 1.1.2, etc)
and versions in-branch will lag slightly before an official release.
Suggested-by: Ben Pfaff <blp@nicira.com>
Ben Pfaff [Tue, 26 Jul 2011 21:55:55 +0000 (14:55 -0700)]
debian: Fix bug from commit
211b05b5 "debian: Modernize use of dh_install."
Commit
211b05b5 "debian: Modernize use of dh_install" caused build failures
in clean environments because debian/ovsdbmonitor.install now installed
files that were never created in such an environment. It didn't cause a
build failure in my own testing because I still had old files around.
This fixes the problem.
It seems to be necessary to run "make install" once for each of binary-arch
and binary-indep, because dh_prep always deletes debian/tmp. It is
logically not necessary but I don't see a clean and robust way to avoid it.
Ben Pfaff [Mon, 18 Jul 2011 22:26:43 +0000 (15:26 -0700)]
nx-match: Make more fields writable with NXAST_REG_MOVE and other actions.
Until now, fields writable by actions defined in terms of NXM field
numbers were special cases, but commit
b3e9b2eda9a "ofproto: Optimize
datapath actions" had the side effect of making it easy to modify
additional fields. This commit takes advantage of that to make
modifiable all the fields that the kernel datapath supports modifying.
We could make other fields modifiable by adding more support to the kernel
datapath.
Ben Pfaff [Mon, 18 Jul 2011 20:51:12 +0000 (13:51 -0700)]
debian: Add support for bridge compatibility.
This adds support for bridge compatibility to the generic Open vSwitch
init scripts and to the Debian packaging.
See https://bugs.launchpad.net/ubuntu/+source/openvswitch/+bug/808224.
Ben Pfaff [Fri, 8 Jul 2011 19:31:55 +0000 (12:31 -0700)]
ovs-vsctl: Log better warnings for duplicate ports and interfaces.
The database prevents multiple ports or interfaces with a single name, but
duplicates can still occur if, for example, two bridges' "ports" columns
both point to a single Port record. The existing warning just says in this
case that the database contains a duplicate port name. This prompts users
to dump the Port table to look for the duplicate. Of course there isn't
one, so then they ask me to point out the problem.
This commit improves the log message to point out the actual problem.
Ben Pfaff [Tue, 26 Jul 2011 16:22:45 +0000 (09:22 -0700)]
debian: Modernize use of dh_install.
Originally I intended this as just a cleanup, but as a side effect it also
installs some files from the install tree in debian/tmp instead of from
_debian. This should avoid a reported problem in which ovs-bugtool was
being created in the source directory instead of the build directory (I
still don't see why this happened).
Reported-by: Sébastien RICCIO <sr@swisscenter.com>
Tested-by: Sébastien RICCIO <sr@swisscenter.com>
Acked-by: Simon Horman <horms@verge.net.au>
CC: Simon Horman <horms@verge.net.au>
Ben Pfaff [Tue, 26 Jul 2011 16:23:31 +0000 (09:23 -0700)]
utilities: Install ovs-parse-leaks utility by default.
We install this in the Debian packaging and I don't see a reason not to
install it everywhere.
(Oddly, we were already installing the manpage everywhere.)
Signed-off-by: Ben Pfaff <blp@nicira.com>
Ben Pfaff [Tue, 26 Jul 2011 16:13:17 +0000 (09:13 -0700)]
ovs-ctl: Drop back to an empty database if schema conversion fails.
If the "ovsdb-tool convert" call fails, it is likely because the database
has bad contents that this version of OVSDB does not understand. In that
case, we're better off using a fresh, empty database rather than failing
to come up at all.
Bug #6280.
Ben Pfaff [Thu, 7 Jul 2011 19:31:58 +0000 (12:31 -0700)]
ovs-ctl: Log messages about database upgrade process.
This should make problems easier to debug.
Bug #6280.
Ben Pfaff [Mon, 25 Jul 2011 23:15:18 +0000 (16:15 -0700)]
rhel: Fix use of $< in ordinary Make rules.
POSIX only allows $< in inference rules, so avoid it for these target
rules.
Also, add a header to the generated spec files to remind developers that
they are generated.
Ben Pfaff [Mon, 25 Jul 2011 16:30:41 +0000 (09:30 -0700)]
ovs-parse-leaks: Fix typos in manpage.
Ethan Jackson [Fri, 22 Jul 2011 19:00:46 +0000 (12:00 -0700)]
mac-learning: Simplify memory management.
The mac-learning implementation used a free list to keep track of
statically allocated table entries. This made the code slightly
more difficult to understand than the more straightforward heap
based strategy implemented by this patch.
Ethan Jackson [Fri, 22 Jul 2011 18:50:26 +0000 (11:50 -0700)]
mac-learning: Use random secret in hash function.
The mac-learning 'secret' parameter is intended to prevent an
attacker from turning the mac learning table into a linked list by
using a known hash function to choose perfectly bad mac entries.
However, this parameter was not taken into account in most cases.
Found by inspection.
Ethan Jackson [Wed, 20 Jul 2011 22:07:46 +0000 (15:07 -0700)]
bundle: New action "bundle_load".
The bundle_load action behaves the same as the bundle action,
except instead of outputting, it writes its result to a register.
Ethan Jackson [Mon, 18 Jul 2011 20:50:26 +0000 (13:50 -0700)]
bundle: Implement NX_BD_ALG_ACTIVE_BACKUP.
I don't expect this bundling algorithm to be particularly useful in
software switches. However, hardware switches will probably only
support this bundling algorithm, so it's implemented here as an
example and a reference.
Ethan Jackson [Tue, 19 Jul 2011 22:47:02 +0000 (15:47 -0700)]
nx-match: New helpers.
This patch creates two new helper functions, nxm_reg_load() and
nxm_dst_check(). The new nxm_dst_check() function may be used to
check the validity of destination fields used by actions. The new
nxm_reg_load() function may be used by actions which need to write
to NXM fields.
This patch also allows multipath and autopath to write their result
to non-register NXM fields.
Ben Pfaff [Fri, 22 Jul 2011 17:20:52 +0000 (10:20 -0700)]
util: New function log_2_floor().
Calculates the position of the most significant bit in a 32 bit
word.
Ethan Jackson [Thu, 21 Jul 2011 01:58:23 +0000 (18:58 -0700)]
bundle: Run bundle_check() in unit tests.
This has been helpful finding bugs in my development environment.
It's good to exercise this code.
Ethan Jackson [Wed, 20 Jul 2011 01:05:46 +0000 (18:05 -0700)]
utilities: Add ovs-bugtool to gitignore.
Ethan Jackson [Tue, 19 Jul 2011 21:33:29 +0000 (14:33 -0700)]
nx-match: Whitespace cleanup.
Ben Pfaff [Fri, 22 Jul 2011 22:05:35 +0000 (15:05 -0700)]
INTERNALS: Describe SLB bonding.
Ben Pfaff [Thu, 21 Jul 2011 22:39:08 +0000 (15:39 -0700)]
ofproto-dpif: Initialize 'may_enable' at port construction time.
Silences a valgrind warning:
==640== Conditional jump or move depends on uninitialised value(s)
==640== at 0x808E623: run (ofproto-dpif.c:1444)
==640== by 0x8086593: ofproto_run (ofproto.c:755)
==640== by 0x806EB80: bridge_run (bridge.c:1397)
==640== by 0x806F66C: main (ovs-vswitchd.c:90)
Ethan Jackson [Fri, 22 Jul 2011 00:41:58 +0000 (17:41 -0700)]
mac-learning: Convert to hmap.
The mac-learning code predates the hmap data structure in OVS. For
this reason, it rolled it's own hmap-like bucket concept. This
patch converts it to use an hmap which makes the code slightly
simpler and easier to understand.
Ethan Jackson [Fri, 22 Jul 2011 00:58:47 +0000 (17:58 -0700)]
mac-learning: Fix serious performance bug in the learning table.
Due to a typo, the mac-learning hash table had dissolved into a
linked list. This caused a significant reduction in performance.
Ben Pfaff [Thu, 21 Jul 2011 18:12:45 +0000 (11:12 -0700)]
ovs-ofctl: Use strchr() instead of strstr().
It's the right tool for the job. Potentially faster, too.
Ben Pfaff [Wed, 20 Jul 2011 21:31:54 +0000 (14:31 -0700)]
ovs-ofctl: Improve error message for "ovs-ofctl show nonexistent".
Suggested-by: Peter Balland <peter@nicira.com>
Ben Pfaff [Wed, 20 Jul 2011 17:41:16 +0000 (10:41 -0700)]
bridge: Log a warning when QoS misconfiguration is likely.
Queue 0 is documented as the "default queue" used when a packet is not
directed to any specific queue. Many qdiscs drop packets not directed to a
queue if the default queue is not configured. This is therefore likely to
be a misconfiguration, so warn about it.
Bug #5583.
Ben Pfaff [Wed, 20 Jul 2011 16:51:29 +0000 (09:51 -0700)]
bundle: Avoid GCC 4.5 warning about possibly uninitialized value.
This value is not actually uninitialized but GCC 4.5 cannot tell.
Ben Pfaff [Wed, 20 Jul 2011 16:50:37 +0000 (09:50 -0700)]
bundle: Treat slave_type properly as 32-bit value.
Found by sparse.
Ben Pfaff [Mon, 18 Jul 2011 22:13:01 +0000 (15:13 -0700)]
ofproto-dpif: Implement OFPAT_SET_NW_TOS.
This field was overlooked in commit
b3e9b2eda9a "ofproto: Optimize datapath
actions."
Found by inspection.