tests: Add ofproto-dpif push_vlan test

Signed-off-by: Joe Stringer <joe@wand.net.nz>
Signed-off-by: Ben Pfaff <blp@nicira.com>
datapath: Use kernel eth_mac_addr() on old kernels.

The OVS MAC address set function was removed in favor of the version
in the kernel but the function pointer for older kernels was not
updated.

Reported-by: Cali Ente <calientepermanente@gmail.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
timeval: Make reading the current time thread-safe.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ed Maste <emaste@freebsd.org>
timeval: Make CPU usage and wakeup tracking per-thread.

This should make the "timeval" module thread-safe, except for its
calls into vlog (because vlog is not yet thread-safe).

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ed Maste <emaste@freebsd.org>
util: Make subprogram_name thread-specific.

Signed-off-by: Ben Pfaff <blp@nicira.com>
vlog: Make vlog_should_drop() thread-safe.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ed Maste <emaste@freebsd.org>
vlog: Remove unused function vlog_get_log_file().

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ed Maste <emaste@freebsd.org>
vlog: Remove unused function vlog_exit().

This is harder to implement once threads are introduced.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ed Maste <emaste@freebsd.org>
system-stats: Remove worker process support.

The worker process implementation isn't thread-safe and, once OVS
itself is threaded, it doesn't make much sense to have a worker
process anyway.

Signed-off-by: Ben Pfaff <blp@nicira.com>
worker: Delete library.

It had no remaining users.

Signed-off-by: Ben Pfaff <blp@nicira.com>
ofproto-dpif: Zero-out subfacet counters when installation fails.

When deleting subfacets, subfacet_uninstall() asserts that the
subfacet's counters are zero to make sure we don't lose counters.  We
have seen cases where a subfacet cannot be installed, but the counters
have values.  This should not happen and indicates a bug, since we
shouldn't create a subfacet if the datapath has a flow.  A buggy
datapath could trigger this, so just zero out the counters and log an
error.

Bug #18460.

Signed-off-by: Justin Pettit <jpettit@nicira.com>
rhel, xenserver: Create /var/log/openvswitch directory.

During installation create the /var/log/openvswitch directory
so that openvswitch startup script is able to write the ovs-ctl.log

Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
Acked-by: Ben Pfaff <blp@nicira.com>
stress: Remove essentially unused library.

The "stress" library was introduced years ago.  We intended at the time to
start using it to provoke errors in testing, to make sure that Open vSwitch
was resilient against those errors.  The intention was good, but there were
few actual implementations of stress options, and the testing never
materialized.

Rather than adapt the stress library for thread safety, this seems like a
good opportunity to remove it, so this commit does so.

Signed-off-by: Ben Pfaff <blp@nicira.com>
latch: New module for a thread-safe, signal-safe, pollable doorbell.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Ed Maste <emaste@freebsd.org>
BFD: Add check_tnl_key feature to BFD code.

This change adds the check_tnl_key functionality for BFD.
When the feature is enabled, BFD will only accept control
packets with a tunnel key of 0.

Signed-off-by: Pavithra Ramesh <paramesh@vmware.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
datapath: Revert "datapath: rhel: Account for RHEL specific backports"

This reverts commit 752378e1cd1f133a8366fbacec3b281a45ff8268
(datapath: rhel: Account for RHEL specific backports).
Change related to netif_needs_gso() is cuasing panic on RHEL
and Xen platforms.  This way we revert back to use of ovs
skb_gso_segment() and netif_skb_features() which has required
compat code for gso for kernel older than 2.6.38.

<1>[  924.855722] BUG: unable to handle kernel NULL pointer dereference
at 000000a0
<1>[  924.855789] IP: [<f0337fb7>] netdev_send+0x77/0x340 [openvswitch]
<4>[  924.855849] *pdpt = 000000011bc66027 *pde = 0000000000000000
<0>[  924.855895] Oops: 0000 [#1] SMP
<0>[  924.855927] last sysfs file: /sys/class/net/lo/carrier
<4>[  924.856551] Pid: 17937, comm: vif Not tainted
(2.6.32.43-0.4.1.xs1.6.10.734.170748xen #1) VMware Virtual Platform
<4>[  924.856618] EIP: 0061:[<f0337fb7>] EFLAGS: 00010246 CPU: 0
<4>[  924.856659] EIP is at netdev_send+0x77/0x340 [openvswitch]
<4>[  924.856697] EAX: 00000000 EBX: dd4fb800 ECX: 00000000 EDX:
00000289
<4>[  924.856749] ESI: edd55a40 EDI: 000005dc EBP: df287aa8 ESP:
df287a7c
<4>[  924.856790]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0069
<0>[  924.856825] Process vif (pid: 17937, ti=df286000 task=ee88d570
task.ti=df286000)
<0>[  924.856880] Stack:
<4>[  924.856902]  00000000 be8b9067 00000000 e9b02000 dd523ac0 dd523b50
f033aef1 b2e77c64
<4>[  924.856966] <0> dd523ac0 ee902840 dd4fc58c df287ab8 f0336162
edd55a40 ee902840 df287ac8
<4>[  924.857043] <0> f032d684 0000001e ee10a300 df287b34 f032d6ef
0000001c 00000000 00000000
<0>[  924.858942] Call Trace:
<4>[  924.859553]  [<f033aef1>] ? flex_array_get+0x51/0x70 [openvswitch]
<4>[  924.860189]  [<f0336162>] ? ovs_vport_send+0x12/0x50 [openvswitch]
<4>[  924.860806]  [<f032d684>] ? do_output+0x34/0x50 [openvswitch]
<4>[  924.861444]  [<f032d6ef>] ? do_execute_actions+0x4f/0x830
[openvswitch]
<4>[  924.862047]  [<f032dfa0>] ? ovs_execute_actions+0x70/0xd0
[openvswitch]
<4>[  924.862636]  [<f032fd3f>] ?
ovs_dp_process_received_packet+0x8f/0xf0 [openvswitch]
<4>[  924.863774]  [<f033690e>] ? ovs_vport_receive+0x5e/0x70
[openvswitch]
<4>[  924.864354]  [<f0337d9f>] ? netdev_frame_hook+0x4f/0x90
[openvswitch]
<4>[  924.864918]  [<c034f7ab>] ? netif_receive_skb+0x1bb/0x6a0
<4>[  924.865469]  [<c03c193f>] ? vlan_gro_common+0x10f/0x230
<4>[  924.866007]  [<c034fd58>] ? napi_skb_finish+0x38/0x40
<4>[  924.866533]  [<c03c1e86>] ? vlan_gro_receive+0x76/0x80
<4>[  924.867055]  [<f05adba4>] ? e1000_receive_skb+0x74/0x80 [e1000]
<4>[  924.867571]  [<f05b2b67>] ? e1000_clean_rx_irq+0x1f7/0x3e0 [e1000]
<4>[  924.868084]  [<f05b2970>] ? e1000_clean_rx_irq+0x0/0x3e0 [e1000]
<4>[  924.869025]  [<f05b06ac>] ? e1000_poll+0x4c/0x1f0 [e1000]

--snip--

Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
datapath: Use RCU lock for dp dump operation.

RCUfy dp-dump operation which is already read-only. This
makes all ovs dump operations lockless.

Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
hindex: Fix incomplete iteration bug.

hindex_next() make the completely wrong assumption that head nodes within
a bucket were sorted in ascending order by hash.  This commit removes
that assumption.

Also add a test that would have found the problem.

Signed-off-by: ZhengLingyun <konghuarukhr@163.com>
[blp@nicira.com changed how hindex_head_node() is implemented and
 other code details]
Signed-off-by: Ben Pfaff <blp@nicira.com>
hindex: Fix test expected output.

Signed-off-by: Ben Pfaff <blp@nicira.com>
tests: Fix theoretical races in "ofproto-dpif - controller" test.

I don't see anything that guaranteed that ovs-ofctl would receive and print
the packets before it exited.  This commit inserts explicit waits, to avoid
the problem.

Found by inspection.

Signed-off-by: Ben Pfaff <blp@nicira.com>