sliver-openvswitch.git
13 years agobridge: Reintroduce log message that was lost (and wrong).
Ben Pfaff [Tue, 29 Mar 2011 18:16:31 +0000 (11:16 -0700)]
bridge: Reintroduce log message that was lost (and wrong).

Setting the 'mac' in the Interface record for a bridge's local port has
always been ineffective, but the log message was suppressed because of a
check at too high of a level.  This commit fixes the problem.  It also
fixes the wording of the log message, which has been obsolete since the
introduction of the database.

Finally, it seems better to check for the local port before checking for a
multicast address, so this reverses the order of the checks.

13 years agodaemon: Reduce log level of "pid file is stale" message.
Ben Pfaff [Tue, 5 Apr 2011 19:17:08 +0000 (12:17 -0700)]
daemon: Reduce log level of "pid file is stale" message.

This message will appear repeatedly when ovs-vswitchd is running, if there
is any stale pidfile in /var/run/openvswitch, because ovs-vswitchd reads
all of the pidfiles in that directory periodically to update statistics.

13 years agobridge: Initialize mirrors' uuid member.
Ben Pfaff [Tue, 5 Apr 2011 21:17:55 +0000 (14:17 -0700)]
bridge: Initialize mirrors' uuid member.

Otherwise mirrors get destroyed and re-created on every reconfiguration.

13 years agoofproto: Avoid memory leak in classifier on destruction.
Ben Pfaff [Tue, 5 Apr 2011 22:58:06 +0000 (15:58 -0700)]
ofproto: Avoid memory leak in classifier on destruction.

ofproto_flush_flows() flushes the flow table but then it reintroduces flows
required by fail-open or in-band.  These are then leaked when the
classifier is destroyed a little later.

This fixes the problem by not reintroducing these flows when ofproto is
being destroyed.

13 years agoFix calls to ctype functions.
Ben Pfaff [Fri, 15 Apr 2011 16:31:36 +0000 (09:31 -0700)]
Fix calls to ctype functions.

The ctype functions often need casts to be fully C standards compliant.
Here's the full explanation that I used to post to comp.lang.c from time
to time when the issue came up:

    With the to*() and is*() functions, you should be careful to cast
    `char' arguments to `unsigned char' before calling them.  Type `char'
    may be signed or unsigned, depending on your compiler or its
    configuration.  If `char' is signed, then some characters have
    negative values; however, the arguments to is*() and to*() functions
    must be nonnegative (or EOF).  Casting to `unsigned char' fixes this
    problem by forcing the character to the corresponding positive value.

This fixes the following warnings from some version of GCC:

lib/ofp-parse.c:828: warning: array subscript has type 'char'
lib/ofp-print.c:617: warning: array subscript has type 'char'

Reported-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
13 years agovswitchd: Document how to disable inactivity probes.
Ben Pfaff [Thu, 14 Apr 2011 17:22:21 +0000 (10:22 -0700)]
vswitchd: Document how to disable inactivity probes.

This has always been implemented but it was not documented until now.

Reported-by: Alex Yip <alex@nicira.com>
13 years agoxenserver: Fix typo in RPM install message.
Ethan Jackson [Tue, 12 Apr 2011 20:20:13 +0000 (13:20 -0700)]
xenserver: Fix typo in RPM install message.

13 years agoxenserver: Don't openvswitch-xapi-update in bridge mode.
Ethan Jackson [Tue, 12 Apr 2011 01:33:06 +0000 (18:33 -0700)]
xenserver: Don't openvswitch-xapi-update in bridge mode.

This commit causes the init scripts not to call the
openvswitch-cfg-update plugin when in bridge mode.

13 years agoxenserver: Warn when upgrading OVS on a bridged system.
Ethan Jackson [Tue, 12 Apr 2011 01:29:02 +0000 (18:29 -0700)]
xenserver:  Warn when upgrading OVS on a bridged system.

13 years agoovsdb-idl: Suppress "delete" operations for garbage-collected tables.
Ben Pfaff [Tue, 12 Apr 2011 18:31:58 +0000 (11:31 -0700)]
ovsdb-idl: Suppress "delete" operations for garbage-collected tables.

Deciding what delete operations to issue on garbage-collected tables has
been a bit of a difficult issue for ovs-vsctl.  When garbage collection was
introduced in commit c5f341a "ovsdb: Implement garbage collection",
ovs-vsctl did not issue any deletions for these tables at all.  As a side
effect, ovs-vsctl did not notice that records were going to be deleted.
That meant that when multiple commands were issued in one ovs-vsctl run,
ovs-vsctl could get confused by apparent duplicate records that did not
in fact exist.  Commit 28a14bf "ovs-vsctl: Back out garbage collection
changes" fixed the problem by putting all of the explicit deletions back
into ovs-vsctl.

However, adding these explicit deletions had the price that it then became
(again) impossible to use ovs-vsctl commands to delete duplicates, for
example to use "ovs-vsctl del-br" to delete a bridge that points to the
same Port records that some other Bridge record also does.  This commit
makes that possible again, by implementing a compromise:

    * Internally, ovs-vsctl deletes the records that it believes should be
      deleted.

    * ovsdb-idl suppresses the deletions when it makes the RPC call into
      the database server.

Bug #5358.
Reported-by: Henrik Amren <henrik@nicira.com>
13 years agodebian: Do not call obsolete command "ovs-ofctl status" in ovs-bugtool.
Ben Pfaff [Tue, 12 Apr 2011 17:02:40 +0000 (10:02 -0700)]
debian: Do not call obsolete command "ovs-ofctl status" in ovs-bugtool.

This command was removed in commit 9b45d7f5d (ofproto: Get rid of archaic
"switch status" OpenFlow extension) but I didn't notice that ovs-bugtool
uses that command and forgot to remove it at the time.

Bug #5360.
Reported-by: Michael Mao <mmao@nicira.com>
Reported-by: Keith Amidon <keith@nicira.com>
13 years agopcap: Silence warnings about fwrite(3) return value being ignored.
Andrew Evans [Tue, 12 Apr 2011 17:40:15 +0000 (10:40 -0700)]
pcap: Silence warnings about fwrite(3) return value being ignored.

13 years agobridge: Monitor fewer OVSDB columns.
Ben Pfaff [Wed, 30 Mar 2011 00:05:52 +0000 (17:05 -0700)]
bridge: Monitor fewer OVSDB columns.

By omitting columns that ovs-vswitchd does not use at all, and omitting
alerts for columns that ovs-vswitchd writes to but does not read, we can
save CPU time and bandwidth.

13 years agoovsdb-idl: Fix atomicity of writes that don't change a column's value.
Ben Pfaff [Fri, 1 Apr 2011 17:50:52 +0000 (10:50 -0700)]
ovsdb-idl: Fix atomicity of writes that don't change a column's value.

The existing ovsdb_idl_txn_commit() drops any writes that don't change a
column's value from what was last reported by the database.  But this isn't
a valid optimization, because it breaks the atomicity of transactions.
Suppose columns A and B initially have values 1 and 2.  Client 1 writes
value 1 to both columns in one transaction.  Client 2 writes value 2 to
both columns in another transaction.  The only possible valid results for
any serial ordering of transactions are 1,1 or 2,2.  But if both clients
drop writes to columns that they have not modified, then 2,1 also becomes
possible (because client 1 just writes to B and client 2 just writes to A).

However, for write-only columns we can optimize this out because the IDL
can assume it is the only client writing to a column.

Found by inspection.

13 years agodaemon: Avoid races on pidfile creation.
Ben Pfaff [Mon, 4 Apr 2011 17:59:19 +0000 (10:59 -0700)]
daemon: Avoid races on pidfile creation.

Until now, if two copies of one OVS daemon started up at the same time,
then due to races in pidfile creation it was possible for both of them to
start successfully, instead of just one.  This was made worse when a
previous copy of the daemon had died abruptly, leaving a stale pidfile.

This commit implements a new pidfile creation and removal protocol that I
believe closes these races.  Now, a pidfile is asserted with "link" instead
of "rename", which prevents the race on creation, and a stale pidfile may
only be deleted by a process after it has taken a lock on it.

This may solve mysterious problems seen occasionally on vswitch restart.
I'm still puzzled by these problems, however, because I don't see anything
in our tests cases that would actually cause two copies of a daemon to
start at the same time, which as far as I can see is a necessary
precondition for the problem.

13 years agodaemon: Integrate checking for an existing pidfile into daemonize_start().
Ben Pfaff [Thu, 31 Mar 2011 16:44:30 +0000 (09:44 -0700)]
daemon: Integrate checking for an existing pidfile into daemonize_start().

Until now, it has been the responsibility of an individual daemon to call
die_if_already_running() at an appropriate time.  A long time ago, this
had to happen *before* daemonizing, because once the process daemonized
itself there was no way to report failure to the process that originally
started the daemon.  With the introduction of daemonize_start(), this is
now possible, but we haven't been taking advantage of it.

Therefore, this commit integrates the die_if_already_running() call into
daemonize_start() and deletes the calls to it from individual daemons.

13 years agodaemon: Tolerate EINTR in fork_and_wait_for_startup().
Ben Pfaff [Thu, 31 Mar 2011 16:36:10 +0000 (09:36 -0700)]
daemon: Tolerate EINTR in fork_and_wait_for_startup().

It seems possible that a signal coming in at the wrong time could confuse
this code.  It's always best to loop on EINTR.

13 years agoLog anything that could prevent a daemon from starting.
Ben Pfaff [Thu, 31 Mar 2011 23:23:50 +0000 (16:23 -0700)]
Log anything that could prevent a daemon from starting.

If a daemon doesn't start, we need to know why.  Being able to
consistently consult the log to find out is helpful.

13 years agoutil: New function ovs_fatal_valist().
Ben Pfaff [Thu, 31 Mar 2011 21:50:58 +0000 (14:50 -0700)]
util: New function ovs_fatal_valist().

This commit adds a few initial users but more are coming up.

13 years agosignals: New function signal_name().
Ben Pfaff [Fri, 1 Apr 2011 17:22:51 +0000 (10:22 -0700)]
signals: New function signal_name().

This will acquire a new user in an upcoming commit.

13 years agotype-props: New macro for estimating length of a decimal integer.
Ben Pfaff [Fri, 1 Apr 2011 17:20:17 +0000 (10:20 -0700)]
type-props: New macro for estimating length of a decimal integer.

13 years agodpif-linux: Avoid logging error on ENOENT in dpif_linux_is_internal_device().
Ben Pfaff [Fri, 8 Apr 2011 23:38:42 +0000 (16:38 -0700)]
dpif-linux: Avoid logging error on ENOENT in dpif_linux_is_internal_device().

ENOENT can be returned if the kernel module isn't loaded.  If that's the
case then we've already logged that and there's no point in logging it
again.

13 years agodpif-linux: Avoid segfault on netdev_get_stats() without kernel module.
Ben Pfaff [Fri, 8 Apr 2011 23:37:22 +0000 (16:37 -0700)]
dpif-linux: Avoid segfault on netdev_get_stats() without kernel module.

netdev_linux_get_stats() calls into netdev_vport_get_stats(), which in
turn attempts a transaction on genl_sock.  If the kernel module isn't
loaded, then genl_sock won't be there, and in any case there's nothing that
guarantees that it's been initialized yet.

This fixes the problem by ensuring that dpif_linux was initialized properly
before attempting a transaction on genl_sock.

Reported-by: Aaron Rosen <arosen@clemson.edu>
13 years agovswitch: Improve schema documentation.
Ben Pfaff [Tue, 29 Mar 2011 16:30:04 +0000 (09:30 -0700)]
vswitch: Improve schema documentation.

13 years agocfm: Fix broken fault logic. v1.1.0
Ethan Jackson [Thu, 7 Apr 2011 00:23:40 +0000 (17:23 -0700)]
cfm: Fix broken fault logic.

If the last receive time for a remote MP was before the last fault
check, the CFM code would not declare a fault.  This is, of course,
exactly the wrong response.

Bug #5303.

13 years agobridge: Run once before configuring CFM.
Ethan Jackson [Wed, 6 Apr 2011 23:59:22 +0000 (16:59 -0700)]
bridge: Run once before configuring CFM.

CFM configuration requires the ofproto_run function to have been
executed at least once in order to guarantee that the relevant
ports exist.

Bug #5303.

13 years agoRelease Open vSwitch 1.1.0
Justin Pettit [Wed, 6 Apr 2011 05:17:03 +0000 (22:17 -0700)]
Release Open vSwitch 1.1.0

13 years agoUpdate top-level documentation to bring it up to date with latest features.
Ben Pfaff [Wed, 6 Apr 2011 16:15:58 +0000 (09:15 -0700)]
Update top-level documentation to bring it up to date with latest features.

13 years agodpif-linux: Choose port numbers more prudently.
Ethan Jackson [Mon, 4 Apr 2011 23:55:34 +0000 (16:55 -0700)]
dpif-linux: Choose port numbers more prudently.

Before this patch the kernel chose the lowest available number for
newly created datapath ports.  This patch moves the port number
choosing responsibility to user space, and implements a least
recently used port number queue in an attempt to avoid reuse.

Bug #2140.

13 years agoxenserver: Fix up iface-id after it changes or disappears too.
Ben Pfaff [Fri, 1 Apr 2011 20:47:51 +0000 (13:47 -0700)]
xenserver: Fix up iface-id after it changes or disappears too.

ovs-xapi-sync is supposed to always keep external-ids:iface-id up to date,
but in fact it would only set it when an interface initially appeared.  If
the interface quickly disappeared and reappeared, then it failed to notice
that iface-id had changed or disappeared.  This happens in practice on
Citrix XenServer, where VM "tap" devices often disappear and then reappear
almost immediately during VM boot.  This commit fixes the problem.

This also fixes the similar problem for external-ids:bridge-id in Bridge
records.  Bridges aren't ordinarily destroyed and re-created quickly, so
this problem might never have manifested in practice for bridges.

Many thanks to Reid Price <reid@nicira.com> for identifying the problem
and supplying an initial fix.

Bug #5239.
Reported-by: Henrik Amren <henrik@nicira.com>
13 years agoovsdb-server: Avoid intermittent test failures due to lockfile log message.
Ben Pfaff [Fri, 1 Apr 2011 22:46:22 +0000 (15:46 -0700)]
ovsdb-server: Avoid intermittent test failures due to lockfile log message.

Sometimes lockfile will emit a message saying that it took a little while
to get the lock, which caused spurious test failures.  This commit
suppresses the message.  With this change, I was able to run these tests
continuously for some time without failures.

This was a bug in the testsuite, not in the code under test.

13 years agocfm: Allow time for CCM reception after cfm_configure();
Ethan Jackson [Fri, 1 Apr 2011 20:10:49 +0000 (13:10 -0700)]
cfm: Allow time for CCM reception after cfm_configure();

Before this (and the previous) patch, whenever cfm_configure was
called it would set the fault_timer to expired.  Thus, the next
call to cfm_run would notice a lack of CCM reception and trigger a
faulted status.  This is a bug in and of itself, but normally would
not be a big deal because cfm_configure should only be called
infrequently (when the database changes).  However due to an
unrelated bug, cfm_configure() was getting called approximately once
per second.  This resulted in all monitors showing faults all of
the time.

This patch fixes the problem by not expiring the timer at
cfm_configure().  Instead it gives it the appropriate
fault_interval amount of time to miss heartbeats.

Bug #5244.

13 years agocfm: cfm_configure() only update when necessary.
Ethan Jackson [Fri, 1 Apr 2011 20:22:44 +0000 (13:22 -0700)]
cfm: cfm_configure() only update when necessary.

Calling cfm_configure often could cause timers to be reset
resulting in unexpected behavior.  This commit only updates when
cfm configuration actually changed.

Bug #5244.

13 years agoovsdb: Truncate bad transactions from database log.
Ben Pfaff [Mon, 28 Mar 2011 20:05:40 +0000 (13:05 -0700)]
ovsdb: Truncate bad transactions from database log.

When ovsdb-server reads a database file that is corrupted at the
transaction level (that is, the transaction is valid JSON and has the
correct SHA-1 hash, but it does not describe a valid database transaction),
then ovsdb-server should truncate it and overwrite it by valid
transactions.  However, until now, it didn't.  Instead, it would keep the
invalid transaction and possibly every transaction in the database file
(depending on in what way the transaction was invalid), which would just
cause the same trouble again the next time the database was read.

This fixes the problem.  An invalid transaction will be deleted from the
database file at the first write to the database.

Bug #5144.
Bug #5149.

13 years agoovsdb: Check that ovsdb-server truncates corrupted database logs.
Ben Pfaff [Mon, 28 Mar 2011 19:57:20 +0000 (12:57 -0700)]
ovsdb: Check that ovsdb-server truncates corrupted database logs.

When ovsdb-server reads a database that is corrupted at the log level
(that is, when ovsdb_log detects the corruption by checking the SHA-1 hash
of the record or JSON parser error reporting), then writing to the database
should discard the corrupted data and thereby fix the problem for future
ovsdb-server runs.

This already worked OK.  This just adds an extra test.

13 years agoovsdb: Raise database corruption log level from warning to error.
Ben Pfaff [Mon, 28 Mar 2011 19:59:18 +0000 (12:59 -0700)]
ovsdb: Raise database corruption log level from warning to error.

If there's database corruption then it indicates that something went wrong,
e.g. the machine was powered-off by power failure.  It's definitely
something that the admin should know about.  This sounds like an error to
me, so use that log level.

13 years agoovsdb: Force strong references to non-root tables to be persistent.
Ben Pfaff [Thu, 31 Mar 2011 23:43:43 +0000 (16:43 -0700)]
ovsdb: Force strong references to non-root tables to be persistent.

When a strong reference to a non-root table is ephemeral, the database log
can contain inconsistencies.  In particular, if the column in question is
the only reference to a row, then the row will be created in one logged
transaction but the reference to it will not be logged (because it is
ephemeral).  Thus, any later occurrence of the row later in the log (to
modify it, to delete it, or just to reference it) will yield a transaction
error and reading the database will abort at that point.

This commit fixes the problem by forcing any column with a strong reference
to a non-root table to be persistent.

The change to ovsdb_schema_from_json() looks bigger than it really is: it
just swaps the order of two operations on the schema and updates their
comments.  Similarly for the update to ovs.db.DbSchema.__init__().

Bug #5144.
Reported-by: Sujatha Sumanth <ssumanth@nicira.com>
Bug #5149.
Reported-by: Ram Jothikumar <rjothikumar@nicira.com>
13 years agoovsdb-types: Fix bug in ovsdb_base_type_is_ref().
Ben Pfaff [Mon, 28 Mar 2011 17:48:36 +0000 (10:48 -0700)]
ovsdb-types: Fix bug in ovsdb_base_type_is_ref().

This function only worked properly inside OVSDB itself, because that is
the only place where the 'refTable' member of ovsdb_base_type is set.
Both inside and outside OVSDB, 'refTableName' is set for reference types,
so it's better to check for that.

This doesn't fix any existing bug because this function was only used
inside OVSDB until now.

13 years agoovs-brcompatd: Convert svecs to ssets.
Ben Pfaff [Fri, 25 Mar 2011 22:21:18 +0000 (15:21 -0700)]
ovs-brcompatd: Convert svecs to ssets.

13 years agobridge: Convert svecs to ssets.
Ben Pfaff [Fri, 25 Mar 2011 22:15:33 +0000 (15:15 -0700)]
bridge: Convert svecs to ssets.

13 years agoovs-openflowd: Use sset in place of svec.
Ben Pfaff [Fri, 25 Mar 2011 22:11:05 +0000 (15:11 -0700)]
ovs-openflowd: Use sset in place of svec.

Also deletes svec_split() since this was the only user.

13 years agoofproto: Change string sets in interface from svec to sset.
Ben Pfaff [Fri, 25 Mar 2011 22:04:12 +0000 (15:04 -0700)]
ofproto: Change string sets in interface from svec to sset.

13 years agoovsdb-parser: Use sset instead of svec for detecting unused members.
Ben Pfaff [Fri, 25 Mar 2011 20:20:35 +0000 (13:20 -0700)]
ovsdb-parser: Use sset instead of svec for detecting unused members.

Should be slightly cheaper than sorting a list (O(n) vs. O(n lg n)).

13 years agonetdev: Use sset instead of svec in netdev interface.
Ben Pfaff [Fri, 25 Mar 2011 20:04:47 +0000 (13:04 -0700)]
netdev: Use sset instead of svec in netdev interface.

13 years agodpif: Use sset instead of svec in dpif interface.
Ben Pfaff [Fri, 25 Mar 2011 20:00:13 +0000 (13:00 -0700)]
dpif: Use sset instead of svec in dpif interface.

13 years agoConvert shash users that don't use the 'data' value to sset instead.
Ben Pfaff [Fri, 25 Mar 2011 22:26:30 +0000 (15:26 -0700)]
Convert shash users that don't use the 'data' value to sset instead.

In each of the cases converted here, an shash was used simply to maintain
a set of strings, with the shash_nodes' 'data' values set to NULL.  This
commit converts them to use sset instead.

13 years agosset: New data type for a set of strings.
Ben Pfaff [Wed, 30 Mar 2011 20:44:10 +0000 (13:44 -0700)]
sset: New data type for a set of strings.

Many uses of "shash" or "svec" data structures really call for a "set of
strings" data type.  This commit introduces such a data structure.  Later
commits convert inappropriate uses of shash and svec to use sset instead.

13 years agolearning-switch: Remove dead assignment.
Ethan Jackson [Tue, 29 Mar 2011 19:37:49 +0000 (12:37 -0700)]
learning-switch: Remove dead assignment.

13 years agoovs-ofctl: Remove dead assignment.
Ethan Jackson [Thu, 31 Mar 2011 23:38:56 +0000 (16:38 -0700)]
ovs-ofctl: Remove dead assignment.

13 years agonetdev-linux: Remove dead assignments.
Ethan Jackson [Tue, 29 Mar 2011 19:25:17 +0000 (12:25 -0700)]
netdev-linux: Remove dead assignments.

13 years agoofproto: Use new timer library.
Ethan Jackson [Thu, 31 Mar 2011 20:55:23 +0000 (13:55 -0700)]
ofproto: Use new timer library.

13 years agocfm: Use new timer library.
Ethan Jackson [Thu, 31 Mar 2011 20:54:44 +0000 (13:54 -0700)]
cfm: Use new timer library.

13 years agolacp: Use new timer library.
Ethan Jackson [Thu, 31 Mar 2011 20:54:15 +0000 (13:54 -0700)]
lacp: Use new timer library.

13 years agolib: Create new timer library.
Ethan Jackson [Thu, 31 Mar 2011 20:46:04 +0000 (13:46 -0700)]
lib: Create new timer library.

Scattered throughout the code base we use long integers to
implement timers.  When the result of timer_msec() is greater than
the time stored, we preform some action.

This commit creates a new timer library intended to replace these
manually managed timers.  Code using the timer library will be more
obviously correct, and more consistent with other code using the
library.

13 years agocfm: Fix appctl negative report.
Ethan Jackson [Thu, 31 Mar 2011 23:12:01 +0000 (16:12 -0700)]
cfm: Fix appctl negative report.

When the cfm module has never received a bad CCM message, it would
report a negative time.

13 years agobridge: Destroy ofproto before deleting dpif.
Ben Pfaff [Thu, 31 Mar 2011 21:12:57 +0000 (14:12 -0700)]
bridge: Destroy ofproto before deleting dpif.

Otherwise the ofproto's attempt to flush flows from the dpif will fail with
an error, causing a spurious log message.

13 years agoconnmgr: Fix wild pointer dereference in connmgr_broadcast().
Ben Pfaff [Thu, 31 Mar 2011 21:13:36 +0000 (14:13 -0700)]
connmgr: Fix wild pointer dereference in connmgr_broadcast().

Fixes a segfault when fail-open goes into effect.

13 years agoofproto: Fix order of destruction in ofproto_destroy().
Ben Pfaff [Thu, 31 Mar 2011 21:11:57 +0000 (14:11 -0700)]
ofproto: Fix order of destruction in ofproto_destroy().

ofproto_flush_flows() calls into the connmgr (via connmgr_flushed()) so
it must be called before destroying the connmgr to avoid a use-after-free
error.

Bug #5231.
Reported-by: Krishna Miriyala <krishna@nicira.com>
13 years agodatapath: Update for changes in 2.6.39-rc1
Simon Horman [Thu, 31 Mar 2011 07:32:07 +0000 (16:32 +0900)]
datapath: Update for changes in 2.6.39-rc1

Update for flowi4 and ip_route_output_flow() changes
in 2.6.39-rc1.

Signed-off-by: Simon Horman <horms@verge.net.au>
[Jesse: drop redundant unlikely() from IS_ERR()]
Signed-off-by: Jesse Gross <jesse@nicira.com>
13 years agoofpbuf: Make ofpbufs initialized with ofpbuf_use_stack() not expandable.
Ben Pfaff [Wed, 2 Mar 2011 21:39:59 +0000 (13:39 -0800)]
ofpbuf: Make ofpbufs initialized with ofpbuf_use_stack() not expandable.

My original intent for ofpbufs initialized with ofpbuf_use_stack() was that
the caller was providing enough space on the stack for the common case,
with dynamic allocation as a fallback.  But in practice, none of the
clients actually do this.  Instead, all of them actually know that the
stack-allocated buffer is big enough and, since they don't want to bother
with having to call ofpbuf_delete(), they instead assert that the buffer
wasn't reallocated.

Since this is a bit of a pain, this commit changes the semantics of
ofpbuf_use_stack() to be that the stack-allocated buffer cannot be
reallocated at all.  This is more convenient for the existing clients.

13 years agoodp-util: Replace ODPUTIL_FLOW_KEY_U32S by new struct odputil_keybuf.
Ben Pfaff [Wed, 2 Mar 2011 21:25:10 +0000 (13:25 -0800)]
odp-util: Replace ODPUTIL_FLOW_KEY_U32S by new struct odputil_keybuf.

This seems to me to better encapsulate the inherent ugliness.

13 years agodatapath: Fix mysterious GRE-over-IPSEC problems.
Ben Pfaff [Wed, 30 Mar 2011 21:54:26 +0000 (14:54 -0700)]
datapath: Fix mysterious GRE-over-IPSEC problems.

We've noticed that packets that go up to userspace and then back down to
the kernel and then enter an GRE tunnel that is then ESP encapsulated
by IPSEC end up with a bad ESP "next header" value: it ends up as zero
instead of 0x2f (IPPROTO_GRE).  Just putting packets from userspace into
a freshly allocated skb fixes the problem.

The underlying problem that this works around is still unknown.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Bug #4769.

13 years agomac-learning: Fix mac_entry_is_grat_arp_locked().
Ben Pfaff [Wed, 30 Mar 2011 20:01:36 +0000 (13:01 -0700)]
mac-learning: Fix mac_entry_is_grat_arp_locked().

The lock is asserted if its expiration time has not arrived yet, not the
reverse.

13 years agoofproto: Get rid of send_port_status() trivial wrapper function.
Ben Pfaff [Tue, 15 Mar 2011 23:51:46 +0000 (16:51 -0700)]
ofproto: Get rid of send_port_status() trivial wrapper function.

13 years agoofp-util: Remove flow_stats_iterator, flows_stats_first(), flow_stats_next()
Ben Pfaff [Tue, 15 Mar 2011 21:56:09 +0000 (14:56 -0700)]
ofp-util: Remove flow_stats_iterator, flows_stats_first(), flow_stats_next()

Nothing uses these anymore.  ofputil_decode_flow_stats_reply() is a better
alternative.

13 years agotimeval: Only log poll intervals longer than 50 ms.
Ben Pfaff [Mon, 28 Mar 2011 20:43:32 +0000 (13:43 -0700)]
timeval: Only log poll intervals longer than 50 ms.

When poll interval-based logging was introduced a long time, we were
actively interested in looking at almost every long poll interval.  But
these days, with OVS working rather well, with pretty good latency, most
of the messages are red herrings that bother some administrators and
provoke false reports.  So this commit suppresses all but the most
egregious long poll intervals that may in fact be worth looking at.

NIC-366.

13 years agoAUTHORS: Add Gaetano Catalli <gaetano.catalli@gmail.com>.
Ben Pfaff [Wed, 30 Mar 2011 18:21:28 +0000 (11:21 -0700)]
AUTHORS: Add Gaetano Catalli <gaetano.catalli@gmail.com>.

13 years agoFix compilation of openvswitch-1.1.0pre2 on FreeBSD-8.1
Gaetano Catalli [Wed, 30 Mar 2011 15:25:36 +0000 (17:25 +0200)]
Fix compilation of openvswitch-1.1.0pre2 on FreeBSD-8.1

13 years agoofproto: Factor OpenFlow connection management into new "connmgr".
Ben Pfaff [Tue, 29 Mar 2011 19:24:28 +0000 (12:24 -0700)]
ofproto: Factor OpenFlow connection management into new "connmgr".

This removes a lot of code from ofproto.c and makes the ofproto code
easier to understand.

13 years agoofproto: New function ofconn_pktbuf_retrieve().
Ben Pfaff [Thu, 10 Feb 2011 21:16:56 +0000 (13:16 -0800)]
ofproto: New function ofconn_pktbuf_retrieve().

This helps to increase the level of abstraction of "struct ofconn",
in preparation for moving it from ofproto.c into a new file.

13 years agoofproto: Add functions to get and set ofconn type and role.
Ben Pfaff [Thu, 10 Feb 2011 21:11:07 +0000 (13:11 -0800)]
ofproto: Add functions to get and set ofconn type and role.

This helps to increase the level of abstraction of "struct ofconn",
in preparation for moving it from ofproto.c into a new file.

13 years agoofproto: Add ofconn_get_miss_send_len(), ofconn_set_miss_send_len().
Ben Pfaff [Thu, 10 Feb 2011 20:37:02 +0000 (12:37 -0800)]
ofproto: Add ofconn_get_miss_send_len(), ofconn_set_miss_send_len().

This helps to increase the level of abstraction of "struct ofconn",
in preparation for moving it from ofproto.c into a new file.

13 years agoofproto: Add ofconn_get_flow_format(), ofconn_set_flow_format().
Ben Pfaff [Thu, 10 Feb 2011 19:26:16 +0000 (11:26 -0800)]
ofproto: Add ofconn_get_flow_format(), ofconn_set_flow_format().

This helps to increase the level of abstraction of "struct ofconn",
in preparation for moving it from ofproto.c into a new file.

13 years agoofproto: Use ofconn_send_reply() for sending OpenFlow replies.
Ben Pfaff [Thu, 10 Feb 2011 19:22:03 +0000 (11:22 -0800)]
ofproto: Use ofconn_send_reply() for sending OpenFlow replies.

This helps to increase the level of abstraction of "struct ofconn",
in preparation for moving it from ofproto.c into a new file.

13 years agoofproto: Introduce ofconn_get_ofproto() accessor function.
Ben Pfaff [Tue, 22 Mar 2011 16:14:59 +0000 (09:14 -0700)]
ofproto: Introduce ofconn_get_ofproto() accessor function.

This helps to increase the level of abstraction of "struct ofconn",
in preparation for moving it from ofproto.c into a new file.

13 years agoofproto: Move hton_ofp_phy_port() to ofp-util.
Ben Pfaff [Tue, 15 Mar 2011 17:08:54 +0000 (10:08 -0700)]
ofproto: Move hton_ofp_phy_port() to ofp-util.

This removes some code from ofproto.c that doesn't really seem to
belong there to begin with.

13 years agoofproto: Break packet_in encoding out of ofproto into ofp-util.
Ben Pfaff [Tue, 22 Mar 2011 16:13:02 +0000 (09:13 -0700)]
ofproto: Break packet_in encoding out of ofproto into ofp-util.

This removes some code from ofproto.c.

13 years agoofproto: Factor building of flow_removed messages out into ofp-util.
Ben Pfaff [Tue, 15 Mar 2011 16:49:14 +0000 (09:49 -0700)]
ofproto: Factor building of flow_removed messages out into ofp-util.

This removes some code from ofproto.c.

13 years agoovs-vsctl: Remove dead assignment.
Ethan Jackson [Tue, 29 Mar 2011 17:58:45 +0000 (10:58 -0700)]
ovs-vsctl: Remove dead assignment.

Noticed this last night while playing around with the clang static
analyzer.

13 years agoovs-vsctl: Remove dead code.
Ethan Jackson [Tue, 29 Mar 2011 00:46:43 +0000 (17:46 -0700)]
ovs-vsctl: Remove dead code.

Coverity #10710.

13 years agobridge: Always wait for MAC learning table and ports.
Ben Pfaff [Tue, 29 Mar 2011 17:08:16 +0000 (10:08 -0700)]
bridge: Always wait for MAC learning table and ports.

The test ofproto_has_primary_controller() is meaningless, since OFPP_NORMAL
can cause the MAC learning table and port bonding to be in use even when
there is a controller.

I see that this bug has been here since early 2009, when the OFPP_NORMAL
feature was introduced in the bridge.  (Obviously it's not a severe
problem.)

13 years agoxenserver: Wait for ovs-xapi-sync to exit in "stop" command.
Ben Pfaff [Mon, 28 Mar 2011 23:22:59 +0000 (16:22 -0700)]
xenserver: Wait for ovs-xapi-sync to exit in "stop" command.

It seems possible that "restart" or a quick application of "stop" then
"start" could kill ovs-xapi-sync without starting it again, if
ovs-xapi-sync takes a little while to die, long enough for the next
instance of it to see that its pidfile is still open and locked.

I hope that this fixes some odd races that we've noticed in the "restart"
command.

Signed-off-by: Ben Pfaff <blp@nicira.com>
13 years agodaemon: Avoid redundant code in already_running().
Ben Pfaff [Tue, 29 Mar 2011 16:44:55 +0000 (09:44 -0700)]
daemon: Avoid redundant code in already_running().

This function substantially duplicated read_pidfile(), so reuse that
code instead.

13 years agodaemon: Write "already running" message to log also.
Ben Pfaff [Tue, 29 Mar 2011 17:09:23 +0000 (10:09 -0700)]
daemon: Write "already running" message to log also.

Otherwise it's hard to diagnose later if the daemon failed to start because
it thinks that it is already running.

13 years agocfm: No longer keep track of bad remote MPs and MAIDS.
Ethan Jackson [Mon, 28 Mar 2011 20:10:12 +0000 (13:10 -0700)]
cfm: No longer keep track of bad remote MPs and MAIDS.

Ben pointed out that an attacker could cause OVS to use infinite
memory by sending a series of CCMs with different MAIDs.  Each
message would cause a remote_maid to be allocated and stored for
several seconds.

Since Commit 1c2e2d2fc8 (cfm: Don't report unexpected remote
endpoints) no longer reports unexpected remote MAIDS and MPs in the
database, the only reason to keep track of this information is for
debugging purposes.  In my judgment, it provides negligible useful
debugging information at the expense of significantly increased
code complexity.  This commit rips it out entirely.

13 years agoovsdb-tool: Fix cut-and-paste error in manpage.
Ben Pfaff [Mon, 28 Mar 2011 20:35:32 +0000 (13:35 -0700)]
ovsdb-tool: Fix cut-and-paste error in manpage.

Reported-by: Paul Ingram <paul@nicira.com>
13 years agoovs-brcompatd: Delete write-only variable.
Ben Pfaff [Fri, 25 Mar 2011 22:22:10 +0000 (15:22 -0700)]
ovs-brcompatd: Delete write-only variable.

13 years agocfm: Create new cfm/show appctl command.
Ethan Jackson [Fri, 25 Mar 2011 22:30:33 +0000 (15:30 -0700)]
cfm: Create new cfm/show appctl command.

This will be useful for debugging CFM problems in the future.

13 years agobridge: Write CFM updates more quickly.
Ethan Jackson [Fri, 25 Mar 2011 20:36:43 +0000 (13:36 -0700)]
bridge: Write CFM updates more quickly.

This commit causes updates to CFM status to be written immediately.
A rate limit of 1 second is introduced to avoid performance
problems.

13 years agocfm: Reduce missed CCM detection time.
Ethan Jackson [Fri, 25 Mar 2011 21:26:53 +0000 (14:26 -0700)]
cfm: Reduce missed CCM detection time.

The specification says that a fault should be signaled when 3.5 *
ccm_interval milliseconds have passed.  This commit respects that
requirement, possibly increasing the responsiveness of fault
detection slightly.

13 years agocfm: Don't report unexpected remote endpoints.
Ethan Jackson [Fri, 25 Mar 2011 01:36:56 +0000 (18:36 -0700)]
cfm: Don't report unexpected remote endpoints.

Before this patch, CFM would report unexpected remote maintenance
points in the database.  This commit no longer exposes this
information.

Information about precisely why a link is faulty is more interesting
to a system administrator debugging a problem than a controller
which will generally only care about whether or not a link is
faulty.  For simplicity sake, this commit removes this information
from the database where it was somewhat awkwardly placed.  In the
future it may be valuable to report the information through
ovs-appctl commands for debugging purposes.

13 years agocfm: Immediately signal fault on bad CCM reception.
Ethan Jackson [Fri, 25 Mar 2011 02:04:21 +0000 (19:04 -0700)]
cfm: Immediately signal fault on bad CCM reception.

Commit af5739857a (cfm: Immediately signal a fault upon receiving
an unexpected MPID.) caused the CFM library to immediately signal a
fault upon reception of an unexpected remote MPID.  This commit
does the same for MAIDs, and remote maintenance points with invalid
CCM intervals.

13 years agopackets: Move CFM related packet information to cfm header file.
Ethan Jackson [Fri, 25 Mar 2011 20:57:21 +0000 (13:57 -0700)]
packets: Move CFM related packet information to cfm header file.

13 years agoschema: Monitor's remote_mps is not ephemeral.
Ethan Jackson [Fri, 25 Mar 2011 00:53:16 +0000 (17:53 -0700)]
schema: Monitor's remote_mps is not ephemeral.

The remote_mps column of the Monitor table is a configuration
parameter and should not be ephemeral.

13 years agodatapath: Avoid memory leak in odp_packet_cmd_execute().
Ben Pfaff [Fri, 25 Mar 2011 00:06:58 +0000 (17:06 -0700)]
datapath: Avoid memory leak in odp_packet_cmd_execute().

The error path needs to free 'packet'.

Signed-off-by: Ben Pfaff <blp@nicira.com>
13 years agocfm: cfm_run() return ccm instead of packet.
Ethan Jackson [Tue, 22 Mar 2011 23:57:43 +0000 (16:57 -0700)]
cfm: cfm_run() return ccm instead of packet.

It doesn't really make sense for the CFM code to be composing
packets.  Its caller is better placed to compose the appropriate
L2 header.  This commit pulls that logic out of the CFM library.

13 years agopackets: Create new compose_packet() function.
Ethan Jackson [Wed, 23 Mar 2011 19:59:40 +0000 (12:59 -0700)]
packets: Create new compose_packet() function.

This commit generalizes compose_lacp_packet() into new
compose_packet() function.  This new function will be used to send
CCM messages in future patches.

13 years agocfm: Move destination address to cfm.h
Ethan Jackson [Tue, 22 Mar 2011 21:28:22 +0000 (14:28 -0700)]
cfm: Move destination address to cfm.h

Future patches will require the use of this information globally.

13 years agodatapath: Add compatibility with sk_buff's vlan_tci before 2.6.33.
Ben Pfaff [Wed, 23 Mar 2011 17:34:37 +0000 (10:34 -0700)]
datapath: Add compatibility with sk_buff's vlan_tci before 2.6.33.

Between 2.6.27 and 2.6.32, the vlan_tci member of struct sk_buff was the
raw value of the 802.1Q header's TCI field, without the CFI bit being set.
In 2.6.33 and later, the CFI bit is always set if an 802.1Q header is
present, correcting a corner case.

Until now, OVS has not consistently dealt with this.  If a packet arrived
at a datapath from a network device directly, or if it was set with an
ODP_ACTION_ATTR_SET_DL_TCI action, then the CFI bit would not be set in
vlan_tci.  In flow_extract(), OVS copies vlan_tci directly to dl_tci in the
flow structure (via vlan_get_tci()), so the CFI bit would also not be set
in dl_tci.  But if OVS had to send a packet up to userspace (converting the
vlan_tci back to an 802.1Q header along the way) and got it back, then it
would set the VLAN CFI bit in dl_tci when it parsed the 802.1Q header in
parse_vlan().  This had the effect that a flow set up by userspace (with
the CFI bit set) would never be matched by a packet arriving from a network
device, because they would have different dl_tci values.

This fixes the problem, by making the vlan_get_tci() and vlan_set_tci()
interface consistent across kernel versions.  Now, they always accept or
return a value where the VLAN CFI bit is set if an 802.1Q header is
present.

Build-tested only.

Problem isolated by Ethan Jackson <ethan@nicira.com>

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Reported-by: Ram Jothikumar <rjothikumar@nicira.com>
Bug #4915.

13 years agoofproto: Allow tunnel id to be in decimal or hex for trace command.
Justin Pettit [Wed, 23 Mar 2011 00:06:07 +0000 (17:06 -0700)]
ofproto: Allow tunnel id to be in decimal or hex for trace command.

Suggested-by: Pankaj Thakkar <thakkar@nicira.com>