monitor: Fix improper use of stubs.

Stubs must be uninitialized when used in case they allocate memory.

Signed-off-by: Ethan Jackson <ethan@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
rconn: Make rconn_packet_counter thread-safe.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
connmgr: Use 'ofproto_mutex' to protect ofconns from being destroyed.

Code in the ofproto-dpif miss handler threads can currently access
ofconns, sending flow_removed and flow monitor messages due to NXAST_LEARN
actions.  Nothing currently protects those threads from accessing ofconns
that are in the process of being destroyed.  This commit adds protection
'ofproto_mutex', which NXAST_LEARN already takes.

Later patches will address other races that remain.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
connmgr: Formalize 'ofproto_mutex' as protecting ofconn monitor data.

'ofproto_mutex' has effectively protected the monitor-related members of
struct ofconn since its introduction, but this was not written down or
systematically annotated.  This commit makes it more systematic and fixes
a few issues found using the annotations.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
rconn: Make thread-safe.

This should make sending OFPT_FLOW_REMOVED and NXST_FLOW_MONITOR safe from
miss handler threads.

Bug #20271.
Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
ofproto-dpif-xlate: Fix freeing uninitialized "struct ofpbuf".

Commit 91d6cd12 (ofproto-dpif: Move send_packet() to
ofproto-dpif-xlate module.) introduced a bug that frees the "struct
ofpbuf" in 'xout' when the struct is not initialized.  This commit
fixes the bug.

Reported-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Alex Wang <alexw@nicira.com>
Signed-off-by: Ethan Jackson <ethan@nicira.com>
ofproto-dpif: Change comment for execute_actions() function.

This commit changes the comment for execute_actions() function,
since the old comment does not apply.

Signed-off-by: Alex Wang <alexw@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
ofproto-dpif: Make execute_actions() function non-static.

This commit changes the execute_actions() function to non-static
function.

Signed-off-by: Alex Wang <alexw@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
ofproto-dpif-xlate: Simplify the xlate_send_packet() function.

This commit simplifies the xlate_send_packet() function by calling
ofproto_dpif_execute_actions() function.

Signed-off-by: Alex Wang <alexw@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
rhel: Option to create tunnel through ifcfg scripts.

Signed-off-by: Edouard Bourguignon <madko@linuxed.net>
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
odp-util: Fix code formatting.

Tabs and spaces got mixed up, making the code harder to read.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
odp-util: Elaborate the comment for odp_flow_format() function.

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
ofp-actions: Make ofpacts_format() caller add "actions=" if it wants it.

An upcoming caller doesn't want it.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Add support for write-actions

Implementation note:

All actions which modify a field are added to the action set
at the point where "set" actions should be added. In general
modifying a field many times is the same as only modifying it
the last time so the implementation simply adds all set actions to
the action set in the order they are specified. However, this breaks
down if two actions modify different portions of the same field.

Some examples.

1. load acting a subfield
2. mod_vlan_vid, mod_vlan_pcp

If this is considered to be a problem one possible solution would be to
either disallow all set actions other than set_field in write_actions.
Another possible solution is prohibit problematic the actions listed above
in write actions.

Signed-off-by: Simon Horman <horms@verge.net.au>
[blp@nicira.com simplified and edited the code]
Signed-off-by: Ben Pfaff <blp@nicira.com>
tests: Make ovsdb-server add/remove remote test faster and more reliable.

Until now, the "ovsdb-server/add-remote and remove-remote with --monitor"
test killed ovsdb-server with SIGSEGV twice.  Each time, the "--monitor"
option caused the supervisor process to restart the child, but the second
time it incurred a 10-second delay intended to prevent the daemon from
wasting CPU time by restarting itself and dying again very quickly in a
loop.  This made the test take over 10 seconds to execute.  It also made
it occasionally fail because the OVS_WAIT_UNTIL check waits at most
approximately 10 seconds before it decides that the condition that it is
testing for will never occur.

This commit fixes the problem by breaking the test into two tests, each of
which kills ovsdb-server with SIGSEGV only once.

Signed-off-by: Alex Wang <alexw@nicira.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
datapath: ipfrag: reassemble fragmens

This series of patches handles IPv4 fragmentation and reassembly,
preserving the maximum fragment size of all fragments across
inbound and outbound physical vports so that Path MTU Discovery
works properly traversing an OVS network.

This patch introduces reassembly of IPv4 fragments and allows flow
matching L4 fields using fully reassembled, entire packets.
An attribute flag, OVS_VPORT_ATTR_IPV4_REASM is added to vport to
enable/disable reassembly. Disabled by default. Note that the flag
works only on NETDEV or INTERNAL vports with this patch. For others,
it's going to be covered by later patches.

The burden of handling reassembling is largely tossed to the kernel
networking infrastructure, ip_defrag in net/ipv4/ip_fragment.c,
which saves the maximum fragment size in IPCB which is non-zero if
at least one fragment had DF (Don't Fragment) set.

Signed-off-by: Takayuki Usui <takayuki@midokura.com>
datapath: ipfrag: reassemble fragmens (tunnel vport)

The patch allows reassembly of IPv4 fragments on tunnel vports;
update mac and network headers pointing to the inner frame, then
call ip_defrag as physical vports.

Signed-off-by: Takayuki Usui <takayuki@midokura.com>
datapath: ipfrag: fragment packets

This patch fragments packets outgoing from NETDEV or INTERNAL
vports. MTU is extracted from the corresponding physical device.

Signed-off-by: Takayuki Usui <takayuki@midokura.com>
datapath: ipfrag: fragment packets (802.1Q)

This patch handles fragmentation of packets outgoing to VLAN
interface; Untag 802.1Q frames just being sent, build fragments
preserving 802.1Q stuff in skb and send them executing the same
path as non-VLAN ethernet frames.

Signed-off-by: Takayuki Usui <takayuki@midokura.com>
datapath: ipfrag: extend flow key with maximum fragment size

This patch extends flow key with the maximum fragment size which is
non-zero if at least one fragment had DF set. It's a metadata, since
it doesn't occupy IP header. The maximum fragment size is used when
a packet is fragmented in order to preserve the maximum fragment size
of the packet across inbound and outbound physical vports.

Because the maximum fragment size is stored in OVS_CB as part of
a flow key, it's always available at outgoing vports.

Signed-off-by: Takayuki Usui <takayuki@midokura.com>