2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-13 14:07:02 +00:00
Commit Graph

7835 Commits

Author SHA1 Message Date
Jarno Rajahalme
87968f01fc datapath: Remove a debugging message.
This was left in accidentally.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
2014-03-24 17:34:48 -07:00
Jarno Rajahalme
5382a3cf9b lib/flow: Fix flow_hash_5tuple().
First part of the hash was discarded as basis was used too late.

Also be explicit about the input type expected by mhash_add().

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Alex Wang <alexw@nicira.com>
2014-03-24 17:34:48 -07:00
Gurucharan Shetty
fc3431c6a0 packets: packet metadata from flow function instead of macro.
Commit 03fbdf8d9c (lib/flow: Retain ODPP_NONE on flow_extract())
replaced packet metadata initialization function by a macro.
Visual studio does not like nested structure initialization that
is done in that macro.

This commit replaces the macro by a function.

CC: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Jarno Rajahalme <jrajahalme@nicira.com>
2014-03-24 10:56:31 -07:00
Jarno Rajahalme
708fb4c50a datapath: Compact sw_flow_key.
Minimize padding in sw_flow_key and move 'tp' top the main struct.
These changes simplify code when accessing the transport port numbers
and the tcp flags, and makes the sw_flow_key 8 bytes smaller on 64-bit
systems (128->120 bytes).  These changes also make the keys for IPv4
packets to fit in one cache line.

There is a valid concern for safety of packing the struct
ovs_key_ipv4_tunnel, as it would be possible to take the address of
the tun_id member as a __be64 * which could result in unaligned access
in some systems. However:

- sw_flow_key itself is 64-bit aligned, so the tun_id within is always
  64-bit aligned.
- We never make arrays of ovs_key_ipv4_tunnel (which would force every
  second tun_key to be misaligned).
- We never take the address of the tun_id in to a __be64 *.
- Whereever we use struct ovs_key_ipv4_tunnel outside the sw_flow_key,
  it is in stack (on tunnel input functions), where compiler has full
  control of the alignment.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
2014-03-24 10:45:47 -07:00
Jarno Rajahalme
2ee9b978da ofp-util: Fix inconsistencies in table features type.
'metadata_match' and 'metadata_write' fields are defined as ovs_be64,
but sometimes used and referred to as uint64_t.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
2014-03-24 10:16:19 -07:00
Jarno Rajahalme
9ae5ab3c35 datapath: Use TCP flags in the flow key for stats.
We already extract the TCP flags for the key, might as well use that
for stats.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
2014-03-24 09:52:03 -07:00
Jarno Rajahalme
b8bbcabf8f datapath: Fix output of SCTP mask.
The 'output' argument of the ovs_nla_put_flow() is the one from which
the bits are written to the netlink attributes.  For SCTP we
accidentally used the bits from the 'swkey' instead.  This caused the
mask attributes to include the bits from the actual flow key instead
of the mask.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
2014-03-24 09:50:50 -07:00
Alexander Wu
5deff5aa26 ofp-util: Implement OFPMP_TABLE_FEATURES decoding and printing.
Signed-off-by: Alexander Wu <alexander.wu@huawei.com>
Co-authored-by: Ben Pfaff <blp@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-23 23:27:00 -07:00
Ben Pfaff
b71273f60d bitmap: Make bitmap_scan() able to scan for 0-bits or 1-bits.
An upcoming commit will make use of this feature.

Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-23 23:00:22 -07:00
Alexander Wu
9c4dbc1caa ofp-actions: Complete ofp13_action_type.
Signed-off-by: Alexander Wu <alexander.wu@huawei.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-23 22:58:55 -07:00
Alexander Wu
c0621c394f ofp-actions: New function ovs_instruction_type_from_inst_type().
Signed-off-by: Alexander Wu <alexander.wu@huawei.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-23 22:58:51 -07:00
Ben Pfaff
ecb229bebb Disable OF1.4 in ovs-vswitchd and ovs-ofctl without specially enabling.
When the OF1.4 is made safe, so that receiving an unimplemented message
cannot crash the switch, this commit should be reverted.

Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-23 14:47:47 -07:00
Alexandru Copot
c37c03826c ofproto: Allow the use of the OpenFlow 1.4 protocol
This defines the version number for OpenFlow 1.4 so that the switch
can actually use it. The ovsdb schema is also modified.

Signed-off-by: Alexandru Copot <alex.mihai.c@gmail.com>
Cc: Daniel Baluta <dbaluta@ixiacom.com>
[blp@nicira.com adjusted code in cases where 1.3 and 1.4 are the same]
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-23 14:44:58 -07:00
Simon Horman
32260212a0 ofproto-dpif: Differentiate between different miss types in packet in
Replace the generated_by_table_miss field of struct ofproto_packet_in
with a miss_type field.

The generated_by_table_miss field allowed packet-in messages generated
by table-miss rules to be differentiated. This differentiation
is still provided for by miss_type being set to OFPROTO_PACKET_IN_MISS_FLOW.

This patch allows further differentiation by setting miss_type
to OFPROTO_PACKET_IN_MISS_WITHOUT_FLOW if the packet-in message
is generated by a table-miss which is not handled by a table-miss rule.

This is in preparation for OpenFlow 1.3 version-specific
handling of the default action for such misses.

Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-20 15:01:45 -07:00
Simon Horman
527ae97e8e ofproto-dpif: Add table-miss flow tests
Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-20 14:17:25 -07:00
Ben Pfaff
3e634810da odp-util: Fix VLAN parsing behavior in parse_8021q_onward().
Anytime there is a VLAN the flow needs to properly reflect that.  Keeping
the TPID in dl_type never makes sense and will probably cause problems.
The existing code did the right thing in the common case but not in corner
cases where it returned ODP_FIT_TOO_MUCH or ODP_FIT_TOO_LITTLE (the cases
where it returned an error don't matter since nothing looks at the flow
in that case).

Found by inspection.

Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-20 14:06:27 -07:00
Simon Horman
6d328fa23d ofproto: Honour Table Mod settings for table-miss handling
This reworks lookup of rules for both table 0 and table action translation.
The result is that Table Mod settings, which can alter the miss-behaviour
of tables, including table 0, on a per-table basis may be honoured.

Previous patches proposed by myself which build on earlier merged patches
by Andy Zhou implement the ofproto side of Table Mod. So with this patch
the feature should be complete.

Neither this patch, nor any other patches it builds on, alter the default
behaviour of Open vSwitch. And in particular the OpenFlow1.1 behaviour is
the default regardless of which OpenFlow version is negotiated between the
switch and the controller.

An implementation detail, which lends itself to future work, is the
handling of OFPTC_TABLE_MISS_CONTINUE. If a table has this behaviour set by
Table Mod and a miss occurs then a loop is created, skipping to the next
table. It is quite easy to create a situation where this loop covers ~255
tables which is very expensive as the lookup for each table involves taking
locks, amongst other things.

Cc: Andy Zhou <azhou@nicira.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
[blp@nicira.com updated comments and refactored]
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-20 13:45:34 -07:00
Alex Wang
5bb8a63029 cfm: Add test for the update of CFM status to OVSDB.
Since daemons can use the cfm status from OVSDB, it is useful
to add a test to guarantee that the update is in time.

Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-20 10:49:25 -07:00
Alex Wang
45756018d6 cfm: Define old_cfm_fault as 'enum cfm_fault_reason'.
CFM fault variable type has been changed to 'enum cfm_fault_reason' for
long time.  However, inside cfm_run(), the old_cfm_fault is still defined
as boolean.  This commit fixes the issue.

Found by inspection.

Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-20 10:49:25 -07:00
Alex Wang
63be20bee2 dpif-netdev: Implement the API functions to allow multiple handler
threads read upcall.

This commit implements the API functions to allow multiple handler
threads read upcall.

Also, this commit removes the handling priority of DPIF_UC_MISS
over DPIF_UC_ACTION.  So, both misses will be put to the same
queue.  The decision is based on the fact that a lot has changed
since the age when flow setup rate is most treasured and starving
all actions in the presence of any flow misses doesn't seem like
a sound balancing solution.

Thusly the current implementation will be put in testing and
investigation for better balancing solution will continue if
there is an issue.

Also note, the introduction and use of flow_hash_5tuple() will
put missed ICMP packets from same source but with different
type/code to different handler queues.  This may cause reordering
of these packets.  For now, we do not count this as a problem.

Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-20 10:27:20 -07:00
Alex Wang
1954e6bbcb dpif: Change dpif API to allow multiple handler threads read upcall.
This commit changes the API in 'dpif-provider.h' to allow multiple
handler threads call dpif_recv() simultaneously.

Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-20 10:27:10 -07:00
YAMAMOTO Takashi
6723e8af39 socket-util: Fix an inverted use of LINUX
Fix a regression introduced by commit fce314cd.
("socket-util: Fix definition of LINUX.")

Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-20 09:30:03 -07:00
Ben Pfaff
3548d24257 CodingStyle: Allow designated initializers.
MSVC 2013 finally implements them, 14 years after they became part of C,
so we can use them in generic code now.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Alex Wang <alexw@nicira.com>
2014-03-19 17:34:55 -07:00
Jarno Rajahalme
f41b5b3bd0 lib/packets: Remove packet_get_tcp_flags().
This function has no more users, so remove it.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-19 16:13:32 -07:00
Jarno Rajahalme
e0eecb1ca1 lib: Use tcp_flags from flow.
TCP flags are already extracted from the flow, no need to parse them
again.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-19 16:13:32 -07:00
Jarno Rajahalme
855dd13c9a dpif-netdev: Use packet key to parse TCP flags.
The flow that created the netdev_flow might have wildcarded TCP flags,
or it may not be a TCP flow at all.  Fix this by using the freshly
extracted flow key to parse TCP flags.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-19 16:13:32 -07:00
Jarno Rajahalme
03fbdf8d9c lib/flow: Retain ODPP_NONE on flow_extract().
We used to map ODPP_NONE to port number 0, which is wrong, as
ODPP_NONE is a valid value of the flow's in_port.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-19 16:13:32 -07:00
Alex Wang
18dcfc56cb cfm: Notify connectivity_seq on remote maintenance points change.
Commit f23d157c ("ofproto-dpif: Don't poll ports when nothing changes")
did not ensure the update of the row of remote maintenance points in ovsdb
when it changes.  This commit makes the update happen by notifying the
global connectivity_seq.

Bug #1192265

Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-19 15:09:19 -07:00
Alex Wang
f1946fbe83 ovs-rcu: Call ovsrcu_init() in ovsrcu_quiesce().
This commit fixes a bug introduced by 0f2ea848(ovs-rcu: New library.).
It is possible that ovsrcu_quiesce() is called before ovsrcu_init().
So, it is necessary to call ovsrcu_init() in ovsrcu_quiesce().

Signed-off-by: Alex Wang <alexw@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-19 10:53:39 -07:00
Jarno Rajahalme
543ede7e3e lib/hmap: Remove the memory fence from hmap_is_empty().
The fence made classifier_lookup() slower.  Access to a size_t 'n' is
safe without synchonizing, and if racing with writers matters,
additional syncronization primitives are used anyway.

Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-19 08:51:52 -07:00
Ben Pfaff
61e7deb143 dpif-netdev: Use RCU to protect data.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Andy Zhou <azhou@nicira.com>
2014-03-19 07:48:43 -07:00
Ben Pfaff
679ba04cab dpif-netdev: Use ovsthread_stats for flow stats.
This should scale better than a single mutex, though still not
ideally.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Andy Zhou <azhou@nicira.com>
2014-03-19 07:48:42 -07:00
Ben Pfaff
51852a57a0 ovs-thread: Replace ovsthread_counter by more general ovsthread_stats.
This allows clients to do more than just increment a counter.  The
following commit will make the first use of that feature.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Andy Zhou <azhou@nicira.com>
2014-03-19 07:47:12 -07:00
Ben Pfaff
2fec66dbb5 util: New functions for allocating memory while avoiding false sharing.
This factors code out of fat-rwlock, making it easily usable by other code.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Andy Zhou <azhou@nicira.com>
2014-03-18 16:41:09 -07:00
Ben Pfaff
06a0f3e21b ofproto: Use RCU to protect rule_actions.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Andy Zhou <azhou@nicira.com>
2014-03-18 16:34:30 -07:00
Ben Pfaff
0f2ea84841 ovs-rcu: New library.
RCU allows multiple threads to read objects in parallel without any
performance penalty.  The following commit will introduce the first use.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Andy Zhou <azhou@nicira.com>
2014-03-18 16:34:28 -07:00
Justin Pettit
06f64d032a tests: Fix small typo in "OpenFlow" in ofproto tests.
Signed-off-by: Justin Pettit <jpettit@nicira.com>
2014-03-18 14:29:17 -07:00
Gurucharan Shetty
26e1fdc46c stream: Call WSAStartup() before calling any winsock functions.
The WSAStartup function initiates use of the Winsock DLL by a process.
The function should be called before any winsock related functions
are called.

Since, we use stream-fd-windows through pstream_open or stream_open
add the WSAStartup() call there.

The current version of the Windows Sockets specification is version 2.2

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-18 13:18:58 -07:00
Gurucharan Shetty
fc48c3ba30 socket-util: Fix dscp error check for Windows.
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-18 10:45:35 -07:00
Arun Sharma
e935fc32fa Man ovs-ofctl: Typo in arp_spa & arp_tpa
It seems there is a typo in definition of arp_spa & arp_tpa

Signed-off-by: Arun Sharma <arun.sharma@calsoftinc.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-18 08:24:22 -07:00
Alex Wang
a27ce57b65 datapath: compat: Downstream the reciprocal_div.{c,h}.
The reciprocal division code used in datapath is flawed.  The bug
has been fixed in the linux kernel repo in commit 809fa972fd(
reciprocal_divide: update/correction of the algorithm).

This commit downstreams the reciprocal_div.{c,h} from the linux
kernel repo.

Signed-off-by: Alex Wang <alexw@nicira.com>
Reviewed-by: Thomas Graf <tgraf@redhat.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
2014-03-17 17:07:54 -07:00
Andy Zhou
1a65ba8544 dpif-netdev: init atomic flag dp->destroyed
It is better to explicitly initialize the dp->destroy than to rely
on xzalloc().

Signed-off-by: Andy Zhou <azhou@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-18 00:40:10 -07:00
Ben Pfaff
566b8c8d33 Fix typos in documentation.
Reported-by: Anshuman Manral <anshuman.manral@outlook.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
2014-03-17 15:29:23 -07:00
Gurucharan Shetty
61cdd287e4 BUILD.Windows: Update compilable utilities.
We can now compile a few OVS userspace components on Windows.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-17 14:20:49 -07:00
Gurucharan Shetty
6c04f67c6a system-stats: Port for Windows.
This does not provide us all the functionality that
is available in Linux. But should be a start.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-17 14:20:49 -07:00
Gurucharan Shetty
bbaf134dcf windefs: srandom() and random() for windows.
Windows does not have a srandom() and random(). But it does
have a srand() and rand(). We use these functions in sflow code.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-17 14:20:49 -07:00
Gurucharan Shetty
f062911fe3 strsep: Copy from netbsd.
Windows does not have a strsep.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-17 14:20:49 -07:00
Gurucharan Shetty
31b97ffddd sflow: Include the windefs.h header for windows.
sflow.h uses u_int32_t that needs windefs.h for compilation
in visual studio.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-17 14:20:49 -07:00
Gurucharan Shetty
f72e3073d7 ofproto: Don't use DELETE inside enumerator list.
Visual studio does not like it. It is mostly a keyword.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-17 14:20:49 -07:00
Gurucharan Shetty
71d1b7639c ovs-ofctl: Use fcntl instead of sys/fcntl.
Windows does not have a sys/fcntl.h

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2014-03-17 14:20:48 -07:00