Ethan Jackson [Fri, 4 Feb 2011 02:33:53 +0000 (18:33 -0800)]
vswitchd: Process special packets more aggressively.
Before this patch, special packets such as LACP and CFM messages
were only processed if they had NORMAL open flow actions. With
this patch these messages are always processed unless originated in
ofproto_send_packet().
Jesse Gross [Thu, 30 Dec 2010 20:28:10 +0000 (12:28 -0800)]
datapath: Add module parameter to allow TSO with vlans.
We currently perform GSO on packets before adding a vlan tag,
which is reliable but hurts performance. Even NICs that support
TSO on vlan tagged packets typically expect vlan acceleration to
be used. Before 2.6.37 we can't use vlan acceleration and must
place the tag in the packet itself, which is risky when used with
TSO. However, if the driver is known to work with internally
tagged packets and TSO this exposes a module parameter to enable it.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Thu, 30 Dec 2010 21:13:04 +0000 (13:13 -0800)]
datapath: Add definition for FCoE offload.
FCoE offload was introduced in 2.6.30, so this introduces a null
definition for it on earlier kernels.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Thu, 30 Dec 2010 06:13:15 +0000 (22:13 -0800)]
datapath: Use vlan acceleration for vlan operations.
Using the kernel vlan acceleration has a number of benefits:
it enables hardware tagging, allows usage of TSO and checksum
offloading, and is generally easier to manipulate. This switches
the vlan actions to use skb->vlan_tci field for any necessary
changes. In places that do not support vlan acceleration in a way
that we can use (in particular kernels before 2.6.37) we perform
any necessary conversions, such as tagging and GSO before the
packet leaves Open vSwitch.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Fri, 31 Dec 2010 04:48:38 +0000 (20:48 -0800)]
datapath: Add vlan acceleration field for older kernels.
Kernels prior to 2.6.27 did not have a vlan_tci field in struct
sk_buff for vlan acceleration. It's very convenient to use this
field for manipulating vlan tags, so we would like to use it as
the primary mechanism. To enable this, this commit adds similar
infrastructure to the OVS_CB on the kernels that need it and a
set of functions to use the correct location.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Mon, 7 Feb 2011 21:05:34 +0000 (13:05 -0800)]
tunneling: Check refcount of each page in frags.
We check the refcount of each page in a fragmented skb
to see if we need to do a linearize before computing the
checksum. However, although we iterate over the list of
pages, we always check the first one.
Reported-by: Ben Pfaff <blp@nicira.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Justin Pettit [Mon, 7 Feb 2011 19:44:54 +0000 (11:44 -0800)]
debian: Store more system information in OVSDB.
Store the OVS version in OVSDB. Additionally, if the "lsb_release"
command is available, store information about the system type and
version.
Bug #4576
Justin Pettit [Mon, 7 Feb 2011 18:43:15 +0000 (10:43 -0800)]
xenserver: Consistently use spaces instead of tabs in init script.
Ben Pfaff [Fri, 28 Jan 2011 20:44:00 +0000 (12:44 -0800)]
ovs-vswitchd: Complete daemonization only after initial configuration.
Otherwise when we add support for saving and restoring configuration
of internal devices around kernel module unload and reload, there's
no easy way for the "restore" code to tell when all the interfaces
should be set up and ready for configuration.
Ben Pfaff [Fri, 28 Jan 2011 20:39:15 +0000 (12:39 -0800)]
daemon: Define daemon options enums the same way as other option enums.
Other modules that accept options use this style and I don't see a reason
for the daemon code to be different. The style used by the daemon code
until now runs the risk of ending up with conflicting values accidentally,
which would be confusing.
Ben Pfaff [Mon, 7 Feb 2011 20:46:25 +0000 (12:46 -0800)]
ofproto: Clear out entire 'name' field of ofp_phy_port when initializing.
Sometimes garbage could appear in the name field following the port name,
since it wasn't completely zeroed.
Reported-by: kk yap <yapkke@openvswitch.org>
Tested-by: kk yap <yapkke@openvswitch.org>
Ethan Jackson [Fri, 4 Feb 2011 00:19:52 +0000 (16:19 -0800)]
vswitchd: LACP switch lacp_status to bit mask.
Much of the LACP status information attached to an interface is
moved from an enum to a bit mask in this commit. The main reason
to do this is to allow a link to be concurrently expired and
defaulted. With this commit, if a link enters an expired state,
but has never had its partner information update, it will properly
set the defaulted flag in its LACP messages.
Ethan Jackson [Sat, 5 Feb 2011 02:26:22 +0000 (18:26 -0800)]
vswitchd: Instrument lacp_update_ifaces().
Ethan Jackson [Sat, 5 Feb 2011 02:23:47 +0000 (18:23 -0800)]
vswitchd: Fix format of LACP appctl output.
Ethan Jackson [Sat, 5 Feb 2011 02:16:39 +0000 (18:16 -0800)]
vswitchd: Tweak LACP values.
Hardware sets the default LACP partner information to 0 so this
commit follows. The collector delay is a more interesting
case. Hardware sets it to 32768 and Linux sets it to 0. The
collector delay relates to a part of the LACP protocol which we
don't implement so we follow Linux in this case.
Ethan Jackson [Sat, 5 Feb 2011 02:13:55 +0000 (18:13 -0800)]
vswitchd: Reset LACP partner when set off.
Without this patch, the LACP partner information will not be
cleared if LACP is turned off after a successful negotiation.
Justin Pettit [Sun, 6 Feb 2011 09:02:23 +0000 (01:02 -0800)]
debian: Backup OVSDB db file before converting it.
The XenServer init script makes a backup before converting the OVSDB
database file. This may be useful for debugging, so do the same on
Debian. Also, store the schema version in the database.
Ben Pfaff [Tue, 18 Jan 2011 19:51:46 +0000 (11:51 -0800)]
netlink: Use proper types and functions for half-aligned 64-bit values.
These haven't showed up as problems yet in my tests but it is only a matter
of time.
Ben Pfaff [Tue, 18 Jan 2011 19:50:56 +0000 (11:50 -0800)]
openflow: Use types and accessors for half-aligned 64-bit fields.
Without this commit, many of the unit tests for ofp-print.c fail with bus
errors on RISC architectures (tested on sparc) and presumably so would any
other code that uses these same struct members.
Ben Pfaff [Sat, 5 Feb 2011 21:14:47 +0000 (13:14 -0800)]
Add types and accessors for working with half-aligned 64-bit values.
Both OpenFlow and Netlink contain 64-bit fields that are only guaranteed
to be aligned on 32-bit boundaries. This commit introduces types for
representing these fields and functions for working with them. Followup
commits will make the OpenFlow and Netlink code use these types and
functions.
Jesse Gross [Fri, 4 Feb 2011 21:25:04 +0000 (13:25 -0800)]
tunneling: Always use skb->len for PMTUD.
Currently IPv4 uses the length of the packet in the IP header
and IPv6 uses actual length of the packet for path MTU discovery.
This changes both to use the length of the packet to be consistent
with each other and the the Linux IP stack and also to match what
actually causes fragmentation.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Fri, 4 Feb 2011 21:15:18 +0000 (13:15 -0800)]
tunneling: Fix uninitialized variable warning in check_mtu.
The MTU is only needed if we are doing PMTUD but some compilers
complain that it could be used uninitialized.
Reported-by: Justin Pettit <jpettit@nicira.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Fri, 4 Feb 2011 21:54:58 +0000 (13:54 -0800)]
vlan-test: Add examples of vlan problems to man page.
Ben Pfaff [Fri, 4 Feb 2011 20:35:49 +0000 (12:35 -0800)]
datapath: Tolerate backporting of rtnl_link_stats64 (as in RHEL 6).
Red Hat Enterprise Linux 6 has a 2.6.32 kernel but it backports the
rtnl_link_stats64 structure that was introduced in 2.6.35, so we need to
check whether it was defined instead of just guessing based on the kernel
version number.
Build-tested only, on 2.6.32-71.14.1.el6 (RHEL 6),
linux-2.6.18-128.1.6.el5.xs5.5.0.496.101 (XenServer 5.5.0),
2.6.18-128.1.6.el5.xs5.5.0.505.1024xen (XenServer 5.5.0 update 1),
and upstream 2.6.18, 2.6.26, 2.6.29, 2.6.33, 2.6.34, 2.6.36, all for i386,
plus 2.6.36 for x86-64.
My machine's userspace headers have <linux/if_link.h> but not
rtnl_link_stats64. Jesse Gross tested the case where <linux/if_link.h>
has rtnl_link_stats64, on Ubuntu 10.10.
Reported-by: Geoff White <gwhite@nicira.com>
Tested-by: Jesse Gross <jesse@nicira.com>
Jesse Gross [Mon, 31 Jan 2011 23:25:12 +0000 (15:25 -0800)]
datapath-protocol: Drop useless/obsolete comments.
Some of the comments related to compat code that no longer exists,
types which are defined elsewhere, or are generally not very helpful.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Mon, 31 Jan 2011 23:15:05 +0000 (15:15 -0800)]
datapath-protocol: Dropped unused __aligned_* types.
These types are no longer used, are redundantly defined, and were
cluttering our interface header.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Ben Pfaff [Fri, 4 Feb 2011 19:01:43 +0000 (11:01 -0800)]
vswitchd: Deconfigure CFM when not configured.
It looks to me like, once a CFM object is configured on an interface, it
will never get deconfigured. This fixes the problem.
Found by inspection. I haven't tested the original code or the fix.
Ben Pfaff [Tue, 1 Feb 2011 19:32:06 +0000 (11:32 -0800)]
datapath: Consider tunnels to have no MTU, fixing jumbo frame support.
Until now, tunnel vports have had a specific MTU, in the same way that
ordinary network devices have an MTU, but treating them this way does not
always make sense. For example, consider a datapath that has three ports:
the local port, a GRE tunnel to another host, and a physical port. If
the physical port is configured with a jumbo MTU, it should be possible to
send jumbo packets across the tunnel: the tunnel can do fragmentation or
the physical port traversed by the tunnel might have a jumbo MTU.
However, until now, tunnels always had a 1500-byte MTU by default. It
could be adjusted using ODP_VPORT_MTU_SET, but nothing actually did this.
One alternative would be to make ovs-vswitchd able to set the vport's MTU.
This commit, however, takes a different approach, of dropping the concept
of MTU entirely for tunnel vports. This also solves the problem described
above, without making any additional work for anyone.
I tested that, without this change, I could not send 1600-byte "pings"
between two machines whose NICs had 2000-byte MTUs that were connected to
vswitches that were in turn connected over GRE tunnels with the default
1500-byte MTU. With this change, it worked OK, regardless of the MTU of
the network traversed by the GRE tunnel.
This patch also makes "patch" ports MTU-less.
It might make sense to remove vport_set_mtu() and the associated callback
now, since ordinary network devices are the only vports that support it
now.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Suggested-by: Jesse Gross <jesse@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Bug #3728.
Jesse Gross [Fri, 28 Jan 2011 02:16:07 +0000 (18:16 -0800)]
tunneling: Simplify path MTU discovery logic.
Previously, if path MTU discovery was disabled we would use the
tunnel MTU instead of the underlying route's path MTU but otherwise
still do PMTUD. This doesn't make much sense because turning off
PMTUD really means to not check the size of the encapsulated packets
at all. This removes the disconnect and simplifies the logic.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Ben Pfaff [Tue, 1 Feb 2011 19:24:51 +0000 (11:24 -0800)]
daemon: Suppress valgrind warnings from read_pidfile().
The version of valgrind I have in my test VMs doesn't know what F_GETLK
does, so it complains that l_pid is uninitialized even though fcntl sets
it. Initializing it ourselves before calling the function avoids a series
of false-positive warnings about use of uninitialized data.
Ben Pfaff [Tue, 1 Feb 2011 19:23:30 +0000 (11:23 -0800)]
Zero padding bytes in odp_key_ipv4, odp_key_arp.
This is a potential security issue for the kernel. In userspace it just
provokes false-positive valgrind warnings (which is how I found it).
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Andrew Evans [Wed, 2 Feb 2011 08:08:12 +0000 (00:08 -0800)]
ovs-vsctl: Clear manager_options column and delete Manager rows on emer-reset.
Ethan Jackson [Sat, 29 Jan 2011 00:53:06 +0000 (16:53 -0800)]
xenserver: Allow LACP configuration from xapi.
Makes required changes to interface reconfigure to allow LACP
configuration from xapi. Conforms to XenServer style bonding
configuration which is slightly different from OVS.
Signed-off-by: Ethan Jackson <ethan@nicira.com>
Bug #4213.
Ethan Jackson [Fri, 28 Jan 2011 04:25:03 +0000 (20:25 -0800)]
vswitchd: Implement balance-tcp bonding.
This commit implements a new bonding mode "balance-tcp" which takes
into account L4 flow information when hashing. If LACP negotiation
is unsuccessful it automatically falls back to "balance-slb" bonding.
Bug #4213.
Ethan Jackson [Wed, 19 Jan 2011 02:46:58 +0000 (18:46 -0800)]
vswitchd: Implement Link Aggregation Control Protocol.
This commit implements LACP, a protocol which allows directly
connected switches to automatically negotiate which links may
participate in bonds. This commit disables LACP by default. Once
sufficiently tested, LACP will be enabled in "active" mode on
bonded ports, and "passive" mode on all others.
Bug #4213.
Ethan Jackson [Fri, 28 Jan 2011 01:26:45 +0000 (17:26 -0800)]
vswitchd: Cache interface carrier when bonding.
This commit caches each interface's carrier status when bonding is
enabled. This allows port_update_bond_compat() to be called less
often, and will prove useful in future patches.
Ethan Jackson [Wed, 26 Jan 2011 21:14:42 +0000 (13:14 -0800)]
bridge: Cache bridge Ethernet address in struct bridge.
This patch stores each bridge's Ethernet address in its handle so
that it may be used in future patches.
Ethan Jackson [Wed, 26 Jan 2011 00:20:08 +0000 (16:20 -0800)]
packets: Add eth_addr_compare_3way function.
This commit adds eth_addr_compare_3way() which behaves like memcmp
for Ethernet addresses.
Ethan Jackson [Wed, 19 Jan 2011 19:08:03 +0000 (11:08 -0800)]
lib: Correct endianness of packets.h.
Andrew Evans [Thu, 3 Feb 2011 00:47:27 +0000 (16:47 -0800)]
xenserver: Make ovsdb-server look for remotes in manager_options column.
(ovsdb-server will still use any managers found in the managers column as
well.)
Justin Pettit [Wed, 2 Feb 2011 06:54:11 +0000 (22:54 -0800)]
nicira-ext: Support matching IPv6 Neighbor Discovery messages.
IPv6 uses Neighbor Discovery messages in a similar manner to how IPv4
uses ARP. This commit adds support for matching deeper into the
payloads of Neighbor Solicitation (NS) and Neighbor Advertisement (NA)
messages. Currently, the matching fields include:
- NS and NA Target (nd_target)
- NS Source Link Layer Address (nd_sll)
- NA Target Link Layer Address (nd_tll)
When defining IPv6 Neighbor Discovery rules, the Nicira Extensible Match
(NXM) extension to OVS must be used.
Signed-off-by: Justin Pettit <jpettit@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Justin Pettit [Thu, 30 Dec 2010 03:03:46 +0000 (19:03 -0800)]
nicira-ext: Support matching IPv6 traffic.
Provides ability to match over IPv6 traffic in the same manner as IPv4.
Currently, the matching fields include:
- IPv6 source and destination addresses (ipv6_src and ipv6_dst)
- Traffic Class (nw_tos)
- Next Header (nw_proto)
- ICMPv6 Type and Code (icmp_type and icmp_code)
- TCP and UDP Ports over IPv6 (tp_src and tp_dst)
When defining IPv6 rules, the Nicira Extensible Match (NXM) extension to
OVS must be used.
Signed-off-by: Justin Pettit <jpettit@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Justin Pettit [Tue, 7 Dec 2010 22:02:17 +0000 (14:02 -0800)]
nicira-ext: Support matching ARP source and target hardware addresses.
OpenFlow 1.0 doesn't allow matching on the ARP source and target
hardware address. This has caused us to introduce hacks such as the
Drop Spoofed ARP action. Now that we have extensible match, we can
match on more fields within ARP:
- Source Hardware Address (arp_sha)
- Target Hardware Address (arp_tha)
Signed-off-by: Justin Pettit <jpettit@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Justin Pettit [Wed, 2 Feb 2011 19:33:20 +0000 (11:33 -0800)]
lib: Replace IP_TYPE_ references with IPPROTO_.
A few common IP protocol types were defined in "lib/packets.h". However,
we already assume the existence of <netinet/in.h> which contains a more
exhaustive list and should be available on POSIX systems.
Ethan Jackson [Wed, 2 Feb 2011 02:50:25 +0000 (18:50 -0800)]
lib: Move l4 flow hash to the flow library.
This commit moves hash_symmetric_l4() to the flow library so that
it may be used in future patches.
Ethan Jackson [Wed, 2 Feb 2011 02:19:39 +0000 (18:19 -0800)]
ovs-vlan-test: clearly indicate failure.
Andrew Evans [Wed, 2 Feb 2011 08:05:54 +0000 (00:05 -0800)]
Debian: Make ovsdb-server use manager_options column to find managers.
Andrew Evans [Fri, 28 Jan 2011 23:39:55 +0000 (15:39 -0800)]
ovsdb-server: Write manager status information to Manager table.
This commit makes the status of manager connections visible via the Manager
table in the database. Two new columns have been created for this purpose:
'is_connected' and 'status'. The former is a boolean flag, and the latter is a
string-string map which may contain the keys "last_error", "state", and
"time_in_state".
Requested-by: Keith Amidon <keith@nicira.com>
Reviewed by: Ben Pfaff.
Feature #3692.
Justin Pettit [Sat, 15 Jan 2011 19:12:12 +0000 (11:12 -0800)]
tests: Add test suite for packets.h.
This only tests ip_is_cidr(), since that is the only tricky function
currently defined. This will get more use once IPv6 functions are
added.
Justin Pettit [Fri, 7 Jan 2011 07:39:42 +0000 (23:39 -0800)]
ovs-ofctl: Group NXM field matches into own subsection of man page.
A number of new matching fields are going to be introduced shortly that
will require NXM (Nicira Extended Match). Rather than repeating the
same description for each field, this change groups them together with a
common preface.
Justin Pettit [Fri, 21 Jan 2011 09:34:09 +0000 (01:34 -0800)]
ovs-ofctl: Fix small typo about nw_tos in man page.
Ethan Jackson [Tue, 1 Feb 2011 06:45:58 +0000 (22:45 -0800)]
lib: Fix off-by-one error in route-table.
Ben Pfaff [Tue, 1 Feb 2011 17:25:26 +0000 (09:25 -0800)]
datapath: Dump flow actions only if there is room.
Expanding an skbuff in a netlink dump handler doesn't work well. We
weren't updating the truesize of the skb or the allocation within the
socket that netlink_dump() had put the skb in. The code had other bugs
too.
This commit fixes the problem (in my tests, anyway) by avoiding expanding
the reply skbuff to fill in the actions. Instead, in such a case the
userspace client has to do a separate "get" action to get the actions.
This commit also updates userspace to do this automatically for dumps in
the cases where the caller cares (only "ovs-dpctl dump-flows" currently
cares).
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Bug #4520.
Ben Pfaff [Mon, 31 Jan 2011 23:47:43 +0000 (15:47 -0800)]
datapath: Fix behavior of NLA_NESTED for pre-2.6.29 kernels.
Before v2.6.29, a NLA_NESTED attribute, if it was present, was not allowed
to be empty. However, OVS depends on the ability to accept empty
attributes. For example, a present but empty ODP_FLOW_ATTR_ACTIONS on
ODP_FLOW_CMD_SET replaces the existing set of actions by an empty "drop"
action, whereas a missing ODP_FLOW_ATTR_ACTIONS leaves the existing
actions, if any, unchanged.
NLA_NESTED is different from NLA_UNSPEC in only two ways:
* If the size of the nested attributes is zero, no further size checks
are performed.
* If the size of the nested attributes is not zero and no length
parameter is specified the minimum size of nested attributes is
NLA_HDRLEN.
nla_parse_nested() validates that there is at least enough space for
NLA_HDRLEN, so neither of these conditions are important, and we might
as well use NLA_UNSPEC with old kernels.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Mon, 31 Jan 2011 23:46:03 +0000 (15:46 -0800)]
dpif-linux: Always pass an actions attribute in dpif_flow_put().
The kernel expects that ODP_FLOW_NEW always has an ODP_FLOW_ATTR_ACTIONS
attribute, even though that attribute may be empty to drop all of the
packets in the flow. Similarly, ODP_FLOW_SET as used by
dpif_linux_flow_put() should always have such an attribute, since it is
used by OVS to update the flow's actions. So make it possible for
dpif_linux_flow_to_ofpbuf() to pass an empty actions attribute, and make
dpif_linux_flow_put() always force that behavior if the actions_len passed
to it is 0.
This fixes EINVAL error creating flows to drop packets.
Acked-by: Jesse Gross <jesse@nicira.com>
Ethan Jackson [Mon, 31 Jan 2011 01:52:19 +0000 (17:52 -0800)]
lib: route-table improvements.
This commit makes several changes to the route_table code used to
populate tunnel_egress_iface.
- It removes name_table code from netdev-vport and puts it into
route-table.
- It no longer attempts to build the name_table dynamically by
listening to rtnetlink-link notifications. Instead it dumps the
entire table, and uses rtnetlink-link notifications to indicate a
re-dump is required.
- It forces rtnetlink-link notifications to re-dump the routing
table. This fixes an issue where bringing an interface down or
removing it altogether would not have the expected effect on
related tunnel_egress_ifaces.
Ethan Jackson [Mon, 31 Jan 2011 20:02:54 +0000 (12:02 -0800)]
lib: netdev-vport improperly initialized route-table.
netdev-vport unregistered the routing table in its destroy
function, but registered it in its init function. This could
cause the routing table to be unregistered when it shouldn't have
been causing segmentation faults.
Bug #4526.
Ethan Jackson [Mon, 31 Jan 2011 04:02:16 +0000 (20:02 -0800)]
tests: Fix tests with UCS-2 Python.
Python can be built with either UCS2 or UCS4 support. When built
with UCS2 the python related surrogate pairs tests cannot pass.
This commit handles this situation more gracefully.
Jesse Gross [Sat, 29 Jan 2011 17:41:59 +0000 (09:41 -0800)]
dpif-linux: Read flow used time.
We were never storing the flow used time from the Netlink message
into our local struct, which caused flows to timeout prematurely.
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Sat, 29 Jan 2011 22:11:23 +0000 (14:11 -0800)]
datapath: Fix flow time used computation.
The current reporting of flow last used time has two issues that
cause it to incorrectly report the system monotonic time when the
flow was last used.
The first is that it simply converts the stored jiffies value to
milliseconds by scaling with a constant. This does not work because
jiffies is not zero based and can wrap around on 32-bit platforms.
The second is there is no guarantee that jiffies advances at the
same rate as the RTC based monotonic time that userspace uses.
A variety of factors can cause differences, including system suspend
and clock drift. These are not too important for relatively short
time periods such as the duration of the flow (nor is the flow timing
precision of extreme importance). However, when the time being
measured is the duration since system boot (assuming that the above
issues had been addressed) the difference can become significant.
This addresses both issues by restoring behavior similar to the
previous method of computing the flow used time, though in a
slightly different form to reflect the needs of the Netlink code.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Mon, 31 Jan 2011 00:01:56 +0000 (16:01 -0800)]
datapath: Avoid nla_parse_nested const warning on < 2.6.22.
We mark our Netlink policies as const for safety but the argument
to nla_parse_nested didn't become const until 2.6.22, which provokes
warnings. This casts away the constness on affected kernels to
avoid the warnings.
Reported-by: Justin Pettit <jpettit@nicira.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
Andrew Evans [Sun, 30 Jan 2011 19:29:14 +0000 (11:29 -0800)]
util: New ovs_retval_to_string() function.
Many OVS functions return 0, EOF, or errno. There are several places in the
codebase where a return value is converted to a string. All must decide whether
the return value is set, and if it is, whether it is an errno value, EOF, or
otherwise invalid. This commit consolidates that code.
Reviewed by Ben Pfaff.
Jesse Gross [Sun, 30 Jan 2011 21:05:33 +0000 (13:05 -0800)]
datapath: Correct version check for genetlink net namespaces.
Network namespaces were introduced in 2.6.24, not 2.6.19 as some of the
version checks were looking for. This caused compile errors in that
kernel range when the functions couldn't be found. In addition,
namespace support wasn't initially available in Netlink so the netns
headers weren't included, causing compile problems for a few more
kernels.
Reported-by: Justin Pettit <jpettit@nicira.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
Jesse Gross [Sun, 30 Jan 2011 19:32:30 +0000 (11:32 -0800)]
datapath: Drop allocation of memory for ODP_PACKET_ATTR_TYPE.
When doing an upcall we allocate memory for ODP_PACKET_ATTR_TYPE.
However, ODP_PACKET_ATTR_TYPE does not exist - the type is specified
by the command.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Jesse Gross [Sun, 30 Jan 2011 07:41:27 +0000 (23:41 -0800)]
odp-util: Print EtherTypes consistently.
The '#' format specifier doesn't respect the field width modifier,
so EtherTypes are printed with variable length. Zero is not a valid
EtherType so there isn't a need for the logic to dynamically insert
the 0x prefix (if the EtherType isn't specified it won't be printed
at all). This fixes the EtherType to have the intended format and
also changes the vlan TPID to match.
Jesse Gross [Sun, 30 Jan 2011 02:09:37 +0000 (18:09 -0800)]
dpif-linux: Add missing NLM_F_ECHO flag to flow requests.
Flow transactions expect a response after the operation has completed
but the request did not have NLM_F_ECHO set. This caused userspace
to receive only the Netlink ACK instead of a real response, making
it appear that the operation had failed when it actually succeeded.
Ethan Jackson [Sat, 29 Jan 2011 03:31:07 +0000 (19:31 -0800)]
dpif-linux: Remove extraneous name variable.
Fixes a "used uninitialized" warning.
Jesse Gross [Sat, 29 Jan 2011 02:18:25 +0000 (18:18 -0800)]
datapath: Use multicast groups allocated for upcalls.
We allocate a number of multicast groups and stripe upcalls across
them using a hash function. However, instead of using the ID of
the selected group for the upcall multicast we were directly using
the output of the hash function. In the best case this leads to
intermittent failures when we choose an invalid group ID (such as
0) or in the worse case could lead to access of unallocated memory.
This fixes that by looking up the group we have been allocated.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
Justin Pettit [Sat, 29 Jan 2011 02:51:31 +0000 (18:51 -0800)]
debian: Remove extra space in switch init script.
Ben Pfaff [Mon, 24 Jan 2011 05:56:00 +0000 (21:56 -0800)]
datapath: s/ODPAT_/ODP_ACTION_ATTR_/ to fit new naming scheme.
Jesse suggested this naming scheme, so I'm adjusting existing names to
fit it.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Sat, 22 Jan 2011 00:56:26 +0000 (16:56 -0800)]
dpif: Remove dpif_get_all_names().
None of the remaining dpif implementations have more than one name per
dpif, so there's no need for this function anymore.
Suggested-by: Jesse Gross <jesse@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Sat, 22 Jan 2011 01:01:56 +0000 (17:01 -0800)]
datapath: Change dp_idx to dp_ifindex, the ifindex of the local port.
I can't see any real value in maintaining a dp_idx separate from the
ifindex of the local port. With the current implementation it also
artificially limits the number of datapaths.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Tue, 11 Jan 2011 22:28:03 +0000 (14:28 -0800)]
dpif-linux: Replace 'minor' by 'dp_idx'.
The dp_idx used to be the character device minor number, but there's no
character device anymore, so rename for clarity.
Reviewed by Justin Pettit.
Ben Pfaff [Fri, 28 Jan 2011 22:00:51 +0000 (14:00 -0800)]
datapath: Convert ODP_FLOW_* commands to use AF_NETLINK socket layer.
This completes the transition to the Generic Netlink interface, and
so this commit restores support for Linux 2.6.18 and later.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Fri, 28 Jan 2011 21:59:03 +0000 (13:59 -0800)]
datapath: Convert ODP_VPORT_* to use AF_NETLINK socket layer.
This commit calls genl_lock() and thus doesn't support Linux before
2.6.35, which wasn't exported before that version. That problem will
be fixed once the whole userspace interface transitions to Generic
Netlink a few commits from now.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Fri, 28 Jan 2011 21:55:04 +0000 (13:55 -0800)]
datapath: Convert ODP_DP_* commands to use AF_NETLINK socket layer.
This commit calls genl_lock() and thus doesn't support Linux before
2.6.35, which wasn't exported before that version. That problem will
be fixed once the whole userspace interface transitions to Generic
Netlink a few commits from now.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 26 Jan 2011 21:41:54 +0000 (13:41 -0800)]
datapath: Convert upcalls and ODP_EXECUTE to use AF_NETLINK socket layer.
This commit calls genl_lock() and thus doesn't support Linux before
2.6.35, which wasn't exported before that version. That problem will
be fixed once the whole userspace interface transitions to Generic
Netlink a few commits from now.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 26 Jan 2011 20:49:06 +0000 (12:49 -0800)]
datapath: Adopt Generic Netlink-compatible locking.
The kernel Generic Netlink layer always holds a mutex (genl_lock) when it
invokes callbacks, so that means that there is no point in having
per-datapath mutexes or a separate vport lock. This commit removes them.
This commit breaks support for Linux before 2.6.35 because it calls
genl_lock(), which wasn't exported before that version. That problem will
be fixed once the whole userspace interface transitions to Generic
Netlink a few commits from now.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 26 Jan 2011 17:42:28 +0000 (09:42 -0800)]
datapath: Eliminate vport_mutex by protecting vport table with RCU.
The vport_mutex really only protects the vport dev_table, which isn't very
much. By getting rid of it we take one step toward simplifying the vswitch
locking, which will necessarily have to be based mainly around the Generic
Netlink genl_mutex once we switch to Generic Netlink.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 12 Jan 2011 21:08:08 +0000 (13:08 -0800)]
datapath: Backport more Netlink functions.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 12 Jan 2011 21:05:35 +0000 (13:05 -0800)]
datapath: Backport genl_register_family_with_ops().
Besides the user introduced in this commit, the new Netlink-based datapath
communication code will use this function.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Reported-by: Justin Pettit <jpettit@nicira.com>
Ben Pfaff [Tue, 18 Jan 2011 23:23:48 +0000 (15:23 -0800)]
datapath: Extend compatibility code for genl_register_mc_group().
The existing compatibility code for genl_register_mc_group() always returns
the same value because the only caller (in brcompat_mod) only needs a
single multicast group. However, when the datapath is converted over to
using Netlink in an upcoming commit, openvswitch_mod will start needing a
number of multicast groups, so this commit adds this ability.
The multicast group ranges differ for brcompat_mod and openvswitch_mod so
that they don't interfere with one another. (This would waste time in
ovs-brcompatd and ovs-vswitchd, although it would not be fatal.)
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 26 Jan 2011 15:14:04 +0000 (07:14 -0800)]
Eliminate ODPL_* from userspace-facing interface.
Reviewed by Justin Pettit.
Ben Pfaff [Sun, 9 Jan 2011 00:00:41 +0000 (16:00 -0800)]
datapath: Get rid of ODPP_NONE.
This definition wasn't actually useful for the kernel--the only place that
it was used it didn't really have to be, so this commit removes it from
datapath-protocol.h. It is still marginally useful in userspace, at least
as a value that converts to and from OpenFlow port number OFPP_NONE, so
move it to odp-util.c.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Mon, 24 Jan 2011 03:08:06 +0000 (19:08 -0800)]
datapath: Convert ODP_EXECUTE to use Netlink framing.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Fri, 21 Jan 2011 23:33:47 +0000 (15:33 -0800)]
datapath: Remove non-standard nla_put_be{16,32,64} functions.
These aren't part of any version of Linux, so delete them now that the code
does not use them.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Suggested-by: Jesse Gross <jesse@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 26 Jan 2011 23:42:00 +0000 (15:42 -0800)]
datapath: Convert datapath operations to use Netlink framing.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 19 Jan 2011 00:54:27 +0000 (16:54 -0800)]
datapath: Convert ODP_FLOW_* and ODP_EXECUTE to put dp_idx into message.
When the datapath moves to the Netlink protocol it won't have a minor
number to use, so we have to put the dp_idx in the message.
This also changes the kernel implementation of ODP_FLOW_FLUSH to do the
datapath locking inside flush_flows() instead of inside openvswitch_ioctl()
but doesn't change that command's userspace interface, which still passes
a datapath number as the ioctl argument.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Mon, 17 Jan 2011 22:43:30 +0000 (14:43 -0800)]
datapath: Eliminate 'flags' member from odp_flow.
Nothing was productively using the 'flags' member of odp_flow, so this
commit removes it.
ODPFF_ZERO_TCP_FLAGS isn't used at all (as of the previous commit).
ODPFF_EOF has been replaced by a special case of the 'key_len' member.
This will go away, too, once AF_NETLINK starts being used.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Fri, 7 Jan 2011 19:27:34 +0000 (11:27 -0800)]
ofproto: Avoid using ODPFF_ZERO_TCP_FLAGS.
I'm planning to remove this flag, since it is a bit of a wart, so this
commit deletes its only actual user.
Reviewed by Ethan Jackson <ethan@nicira.com>.
Ben Pfaff [Fri, 7 Jan 2011 19:20:53 +0000 (11:20 -0800)]
ofproto: Generalize facet_put__() so that it is more useful.
This immediately makes it useful in facet_revalidate(). An upcoming
patch will add one more user.
This commit should not change any externally visible behavior. It
is a pure code refactoring.
Reviewed by Ethan Jackson <ethan@nicira.com>.
Ben Pfaff [Fri, 7 Jan 2011 19:15:41 +0000 (11:15 -0800)]
ofproto: Fix test for installability change when revalidating.
ctx.may_set_up_flow will become the new facet->may_install, so it's that
value that we should check instead of the current facet->may_install when
deciding whether to update the datapath flow.
Reviewed by Ethan Jackson <ethan@nicira.com>.
Ben Pfaff [Wed, 26 Jan 2011 15:12:24 +0000 (07:12 -0800)]
dpif: Eliminate ODPPF_* constants from client-visible interface.
Following this commit, the ODPPF_* constants are only used in
Linux-specific parts of OVS userspace code. This allows the actual Linux
datapath interface to evolve more freely.
Reviewed by Justin Pettit.
Ben Pfaff [Wed, 26 Jan 2011 15:11:50 +0000 (07:11 -0800)]
dpif: Eliminate "struct odp_flow_stats" from client-visible interface.
Following this commit, "struct odp_flow_stats" is only used in
Linux-specific parts of OVS userspace code. This allows the actual Linux
datapath interface to evolve more freely.
Reviewed by Justin Pettit.
Ben Pfaff [Wed, 26 Jan 2011 15:03:39 +0000 (07:03 -0800)]
dpif: Eliminate "struct odp_flow" from client-visible interface.
Following this commit, "struct odp_flow" and related data structures are
only used in Linux-specific parts of OVS userspace code. This allows the
actual Linux datapath interface to evolve more freely.
Reviewed by Justin Pettit.
Ben Pfaff [Mon, 17 Jan 2011 22:40:58 +0000 (14:40 -0800)]
datapath: Change ODP_FLOW_GET to retrieve only a single flow at a time.
This brings the code closer to what the Netlink interface will need to
implement.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 26 Jan 2011 17:24:59 +0000 (09:24 -0800)]
datapath: Drop port information from odp_stats.
As with n_flows, n_ports was used regularly by userspace to determine how
much memory to allocate when listing ports, but it is no longer needed for
that. max_ports, on the other hand, is necessary but it is also a fixed
value for the kernel datapath right now and if we expand it we can also
come up with a way to report the expanded value.
The remaining members of odp_stats are actually real statistics that I
intend to keep.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 5 Jan 2011 01:00:36 +0000 (17:00 -0800)]
datapath: Drop queue information from odp_stats.
This queue information will be available through the kernel socket layer
once we move over to Netlink socket as transports, so we might as well get
rid of the redundancy.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 5 Jan 2011 00:43:50 +0000 (16:43 -0800)]
datapath: Drop flow information from odp_stats.
Userspace used to use the n_flows information here to decide how much
memory needed to be allocated to list flows, but that isn't necessary any
longer now that listing flows uses an iterator abstraction. The
cur_capacity and max_capacity members are just curiosities and don't
provide much information; if the implementation ever changes away from
the current hash table implementation then they could become meaningless
anyhow.
But more than anything, these aren't really the kind of statistics that
networking people usually care about.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Ben Pfaff [Wed, 26 Jan 2011 20:28:59 +0000 (12:28 -0800)]
datapath: Change userspace vport interface to use Netlink attributes.
One of the goals for Open vSwitch is to decouple kernel and userspace
software, so that either one can be upgraded or rolled back independent of
the other. To do this in full generality, it must be possible to add new
features to the kernel vport layer without changing userspace software.
The customary way to do this in the Linux networking stack is to use
Netlink and in particular Netlink attributes. This commit adopts that
model for the vport layer. It does not yet actually start using the
Netlink socket layer, which will come later.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>