23 May, 2014

3 commits

  • For ovs_flow_stats_get() using ovsl_dereference() was wrong, since
    flow dumps call this with RCU read lock.

    ovs_flow_stats_clear() is always called with ovs_mutex, so can use
    ovsl_dereference().

    Also, make the ovs_flow_stats_get() 'flow' argument const to make
    later patches cleaner.

    Signed-off-by: Jarno Rajahalme
    Signed-off-by: Pravin B Shelar

    Jarno Rajahalme
     
  • Remove unnecessary locking from functions that are always called with
    appropriate locking.

    Signed-off-by: Jarno Rajahalme
    Signed-off-by: Thomas Graf
    Signed-off-by: Pravin B Shelar

    Jarno Rajahalme
     
  • 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
    Signed-off-by: Pravin B Shelar

    Jarno Rajahalme
     

17 May, 2014

4 commits

  • We already extract the TCP flags for the key, might as well use that
    for stats.

    Signed-off-by: Jarno Rajahalme
    Acked-by: Pravin B Shelar
    Signed-off-by: Jesse Gross

    Jarno Rajahalme
     
  • Keep kernel flow stats for each NUMA node rather than each (logical)
    CPU. This avoids using the per-CPU allocator and removes most of the
    kernel-side OVS locking overhead otherwise on the top of perf reports
    and allows OVS to scale better with higher number of threads.

    With 9 handlers and 4 revalidators netperf TCP_CRR test flow setup
    rate doubles on a server with two hyper-threaded physical CPUs (16
    logical cores each) compared to the current OVS master. Tested with
    non-trivial flow table with a TCP port match rule forcing all new
    connections with unique port numbers to OVS userspace. The IP
    addresses are still wildcarded, so the kernel flows are not considered
    as exact match 5-tuple flows. This type of flows can be expected to
    appear in large numbers as the result of more effective wildcarding
    made possible by improvements in OVS userspace flow classifier.

    Perf results for this test (master):

    Events: 305K cycles
    + 8.43% ovs-vswitchd [kernel.kallsyms] [k] mutex_spin_on_owner
    + 5.64% ovs-vswitchd [kernel.kallsyms] [k] __ticket_spin_lock
    + 4.75% ovs-vswitchd ovs-vswitchd [.] find_match_wc
    + 3.32% ovs-vswitchd libpthread-2.15.so [.] pthread_mutex_lock
    + 2.61% ovs-vswitchd [kernel.kallsyms] [k] pcpu_alloc_area
    + 2.19% ovs-vswitchd ovs-vswitchd [.] flow_hash_in_minimask_range
    + 2.03% swapper [kernel.kallsyms] [k] intel_idle
    + 1.84% ovs-vswitchd libpthread-2.15.so [.] pthread_mutex_unlock
    + 1.64% ovs-vswitchd ovs-vswitchd [.] classifier_lookup
    + 1.58% ovs-vswitchd libc-2.15.so [.] 0x7f4e6
    + 1.07% ovs-vswitchd [kernel.kallsyms] [k] memset
    + 1.03% netperf [kernel.kallsyms] [k] __ticket_spin_lock
    + 0.92% swapper [kernel.kallsyms] [k] __ticket_spin_lock
    ...

    And after this patch:

    Events: 356K cycles
    + 6.85% ovs-vswitchd ovs-vswitchd [.] find_match_wc
    + 4.63% ovs-vswitchd libpthread-2.15.so [.] pthread_mutex_lock
    + 3.06% ovs-vswitchd [kernel.kallsyms] [k] __ticket_spin_lock
    + 2.81% ovs-vswitchd ovs-vswitchd [.] flow_hash_in_minimask_range
    + 2.51% ovs-vswitchd libpthread-2.15.so [.] pthread_mutex_unlock
    + 2.27% ovs-vswitchd ovs-vswitchd [.] classifier_lookup
    + 1.84% ovs-vswitchd libc-2.15.so [.] 0x15d30f
    + 1.74% ovs-vswitchd [kernel.kallsyms] [k] mutex_spin_on_owner
    + 1.47% swapper [kernel.kallsyms] [k] intel_idle
    + 1.34% ovs-vswitchd ovs-vswitchd [.] flow_hash_in_minimask
    + 1.33% ovs-vswitchd ovs-vswitchd [.] rule_actions_unref
    + 1.16% ovs-vswitchd ovs-vswitchd [.] hindex_node_with_hash
    + 1.16% ovs-vswitchd ovs-vswitchd [.] do_xlate_actions
    + 1.09% ovs-vswitchd ovs-vswitchd [.] ofproto_rule_ref
    + 1.01% netperf [kernel.kallsyms] [k] __ticket_spin_lock
    ...

    There is a small increase in kernel spinlock overhead due to the same
    spinlock being shared between multiple cores of the same physical CPU,
    but that is barely visible in the netperf TCP_CRR test performance
    (maybe ~1% performance drop, hard to tell exactly due to variance in
    the test results), when testing for kernel module throughput (with no
    userspace activity, handful of kernel flows).

    On flow setup, a single stats instance is allocated (for the NUMA node
    0). As CPUs from multiple NUMA nodes start updating stats, new
    NUMA-node specific stats instances are allocated. This allocation on
    the packet processing code path is made to never block or look for
    emergency memory pools, minimizing the allocation latency. If the
    allocation fails, the existing preallocated stats instance is used.
    Also, if only CPUs from one NUMA-node are updating the preallocated
    stats instance, no additional stats instances are allocated. This
    eliminates the need to pre-allocate stats instances that will not be
    used, also relieving the stats reader from the burden of reading stats
    that are never used.

    Signed-off-by: Jarno Rajahalme
    Acked-by: Pravin B Shelar
    Signed-off-by: Jesse Gross

    Jarno Rajahalme
     
  • The 5-tuple optimization becomes unnecessary with a later per-NUMA
    node stats patch. Remove it first to make the changes easier to
    grasp.

    Signed-off-by: Jarno Rajahalme
    Signed-off-by: Jesse Gross

    Jarno Rajahalme
     
  • It's slightly smaller/faster for some architectures.

    Signed-off-by: Joe Perches
    Signed-off-by: Jesse Gross

    Joe Perches
     

29 Mar, 2014

1 commit

  • There are two problematic situations.

    A deadlock can happen when is_percpu is false because it can get
    interrupted while holding the spinlock. Then it executes
    ovs_flow_stats_update() in softirq context which tries to get
    the same lock.

    The second sitation is that when is_percpu is true, the code
    correctly disables BH but only for the local CPU, so the
    following can happen when locking the remote CPU without
    disabling BH:

    CPU#0 CPU#1
    ovs_flow_stats_get()
    stats_read()
    +->spin_lock remote CPU#1 ovs_flow_stats_get()
    | stats_read()
    | ... +--> spin_lock remote CPU#0
    | |
    | ovs_flow_stats_update() | ...
    | spin_lock local CPU#0

    =================================
    [ INFO: inconsistent lock state ]
    3.14.0-rc8-00007-g632b06a #1 Tainted: G I
    ---------------------------------
    inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
    swapper/0/0 [HC0[0]:SC1[5]:HE1:SE0] takes:
    (&(&cpu_stats->lock)->rlock){+.?...}, at: [] ovs_flow_stats_update+0x51/0xd0 [openvswitch]
    {SOFTIRQ-ON-W} state was registered at:
    [] __lock_acquire+0x68f/0x1c40
    [] lock_acquire+0xa2/0x1d0
    [] _raw_spin_lock+0x3e/0x80
    [] ovs_flow_stats_get+0xc4/0x1e0 [openvswitch]
    [] ovs_flow_cmd_fill_info+0x185/0x360 [openvswitch]
    [] ovs_flow_cmd_build_info.constprop.27+0x55/0x90 [openvswitch]
    [] ovs_flow_cmd_new_or_set+0x4dd/0x570 [openvswitch]
    [] genl_family_rcv_msg+0x1cd/0x3f0
    [] genl_rcv_msg+0x8e/0xd0
    [] netlink_rcv_skb+0xa9/0xc0
    [] genl_rcv+0x28/0x40
    [] netlink_unicast+0x100/0x1e0
    [] netlink_sendmsg+0x347/0x770
    [] sock_sendmsg+0x9c/0xe0
    [] ___sys_sendmsg+0x3a9/0x3c0
    [] __sys_sendmsg+0x51/0x90
    [] SyS_sendmsg+0x12/0x20
    [] system_call_fastpath+0x16/0x1b
    irq event stamp: 1740726
    hardirqs last enabled at (1740726): [] ip6_finish_output2+0x4f0/0x840
    hardirqs last disabled at (1740725): [] ip6_finish_output2+0x4ab/0x840
    softirqs last enabled at (1740674): [] _local_bh_enable+0x22/0x50
    softirqs last disabled at (1740675): [] irq_exit+0xc5/0xd0

    other info that might help us debug this:
    Possible unsafe locking scenario:

    CPU0
    ----
    lock(&(&cpu_stats->lock)->rlock);

    lock(&(&cpu_stats->lock)->rlock);

    *** DEADLOCK ***

    5 locks held by swapper/0/0:
    #0: (((&ifa->dad_timer))){+.-...}, at: [] call_timer_fn+0x5/0x320
    #1: (rcu_read_lock){.+.+..}, at: [] mld_sendpack+0x5/0x4a0
    #2: (rcu_read_lock_bh){.+....}, at: [] ip6_finish_output2+0x59/0x840
    #3: (rcu_read_lock_bh){.+....}, at: [] __dev_queue_xmit+0x5/0x9b0
    #4: (rcu_read_lock){.+.+..}, at: [] internal_dev_xmit+0x5/0x110 [openvswitch]

    stack backtrace:
    CPU: 0 PID: 0 Comm: swapper/0 Tainted: G I 3.14.0-rc8-00007-g632b06a #1
    Hardware name: /DX58SO, BIOS SOX5810J.86A.5599.2012.0529.2218 05/29/2012
    0000000000000000 0fcf20709903df0c ffff88042d603808 ffffffff817cfe3c
    ffffffff81c134c0 ffff88042d603858 ffffffff817cb6da 0000000000000005
    ffffffff00000001 ffff880400000000 0000000000000006 ffffffff81c134c0
    Call Trace:
    [] dump_stack+0x4d/0x66
    [] print_usage_bug+0x1f4/0x205
    [] ? check_usage_backwards+0x180/0x180
    [] mark_lock+0x223/0x2b0
    [] __lock_acquire+0x623/0x1c40
    [] ? __lock_is_held+0x57/0x80
    [] ? masked_flow_lookup+0x236/0x250 [openvswitch]
    [] lock_acquire+0xa2/0x1d0
    [] ? ovs_flow_stats_update+0x51/0xd0 [openvswitch]
    [] _raw_spin_lock+0x3e/0x80
    [] ? ovs_flow_stats_update+0x51/0xd0 [openvswitch]
    [] ovs_flow_stats_update+0x51/0xd0 [openvswitch]
    [] ovs_dp_process_received_packet+0x84/0x120 [openvswitch]
    [] ? __lock_acquire+0x347/0x1c40
    [] ovs_vport_receive+0x2a/0x30 [openvswitch]
    [] internal_dev_xmit+0x68/0x110 [openvswitch]
    [] ? internal_dev_xmit+0x5/0x110 [openvswitch]
    [] dev_hard_start_xmit+0x2e6/0x8b0
    [] __dev_queue_xmit+0x417/0x9b0
    [] ? __dev_queue_xmit+0x5/0x9b0
    [] ? ip6_finish_output2+0x4f0/0x840
    [] dev_queue_xmit+0x10/0x20
    [] ip6_finish_output2+0x551/0x840
    [] ? ip6_finish_output+0x9a/0x220
    [] ip6_finish_output+0x9a/0x220
    [] ip6_output+0x4f/0x1f0
    [] mld_sendpack+0x1d9/0x4a0
    [] mld_send_initial_cr.part.32+0x88/0xa0
    [] ? addrconf_dad_completed+0x220/0x220
    [] ipv6_mc_dad_complete+0x31/0x50
    [] addrconf_dad_completed+0x147/0x220
    [] ? addrconf_dad_completed+0x220/0x220
    [] addrconf_dad_timer+0x19f/0x1c0
    [] call_timer_fn+0x99/0x320
    [] ? call_timer_fn+0x5/0x320
    [] ? addrconf_dad_completed+0x220/0x220
    [] run_timer_softirq+0x254/0x3b0
    [] __do_softirq+0x12d/0x480

    Signed-off-by: Flavio Leitner
    Signed-off-by: David S. Miller

    Flavio Leitner
     

21 Mar, 2014

1 commit

  • The kernel starts out its "jiffies" timer as 5 minutes below zero, as
    shown in include/linux/jiffies.h:

    /*
    * Have the 32 bit jiffies value wrap 5 minutes after boot
    * so jiffies wrap bugs show up earlier.
    */
    #define INITIAL_JIFFIES ((unsigned long)(unsigned int) (-300*HZ))

    The loop in ovs_flow_stats_get() starts out with 'used' set to 0, then
    takes any "later" time. This means that for the first five minutes after
    boot, flows will always be reported as never used, since 0 is greater than
    any time already seen.

    Signed-off-by: Ben Pfaff
    Acked-by: Pravin B Shelar
    Signed-off-by: Jesse Gross

    Ben Pfaff
     

16 Feb, 2014

1 commit


07 Jan, 2014

1 commit

  • With mega flow implementation ovs flow can be shared between
    multiple CPUs which makes stats updates highly contended
    operation. This patch uses per-CPU stats in cases where a flow
    is likely to be shared (if there is a wildcard in the 5-tuple
    and therefore likely to be spread by RSS). In other situations,
    it uses the current strategy, saving memory and allocation time.

    Signed-off-by: Pravin B Shelar
    Signed-off-by: Jesse Gross

    Pravin B Shelar
     

02 Nov, 2013

2 commits

  • tcp_flags=flags/mask
    Bitwise match on TCP flags. The flags and mask are 16-bit num‐
    bers written in decimal or in hexadecimal prefixed by 0x. Each
    1-bit in mask requires that the corresponding bit in port must
    match. Each 0-bit in mask causes the corresponding bit to be
    ignored.

    TCP protocol currently defines 9 flag bits, and additional 3
    bits are reserved (must be transmitted as zero), see RFCs 793,
    3168, and 3540. The flag bits are, numbering from the least
    significant bit:

    0: FIN No more data from sender.

    1: SYN Synchronize sequence numbers.

    2: RST Reset the connection.

    3: PSH Push function.

    4: ACK Acknowledgement field significant.

    5: URG Urgent pointer field significant.

    6: ECE ECN Echo.

    7: CWR Congestion Windows Reduced.

    8: NS Nonce Sum.

    9-11: Reserved.

    12-15: Not matchable, must be zero.

    Signed-off-by: Jarno Rajahalme
    Signed-off-by: Jesse Gross

    Jarno Rajahalme
     
  • Widen TCP flags handling from 7 bits (uint8_t) to 12 bits (uint16_t).
    The kernel interface remains at 8 bits, which makes no functional
    difference now, as none of the higher bits is currently of interest
    to the userspace.

    Signed-off-by: Jarno Rajahalme
    Signed-off-by: Jesse Gross

    Jarno Rajahalme
     

04 Oct, 2013

1 commit

  • Over the time datapath.c and flow.c has became pretty large files.
    Following patch restructures functionality of component into three
    different components:

    flow.c: contains flow extract.
    flow_netlink.c: netlink flow api.
    flow_table.c: flow table api.

    This patch restructures code without changing logic.

    Signed-off-by: Pravin B Shelar
    Signed-off-by: Jesse Gross

    Pravin B Shelar
     

12 Sep, 2013

1 commit

  • In function __parse_flow_nlattrs(), we check for condition
    (type > OVS_KEY_ATTR_MAX) and if true, print an error, but we do
    not return from this function as in other checks. It seems this
    has been forgotten, as otherwise, we could access beyond the
    memory of ovs_key_lens, which is of ovs_key_lens[OVS_KEY_ATTR_MAX + 1].
    Hence, a maliciously prepared nla_type from user space could access
    beyond this upper limit.

    Introduced by 03f0d916a ("openvswitch: Mega flow implementation").

    Signed-off-by: Daniel Borkmann
    Cc: Andy Zhou
    Acked-by: Jesse Gross
    Signed-off-by: David S. Miller

    Daniel Borkmann
     

06 Sep, 2013

1 commit

  • sw_flow_key alignment was declared as " __aligned(__alignof__(long))".
    However, this breaks on the m68k architecture where long is 32 bit in
    size but 16 bit aligned by default. This aligns to the size of a long to
    ensure that we can always do comparsions in full long-sized chunks. It
    also adds an additional build check to catch any reduction in alignment.

    CC: Andy Zhou
    Reported-by: Fengguang Wu
    Reported-by: Geert Uytterhoeven
    Signed-off-by: Jesse Gross
    Signed-off-by: David S. Miller

    Jesse Gross
     

28 Aug, 2013

1 commit

  • Make sure the sw_flow_key structure and valid mask boundaries are always
    machine word aligned. Optimize the flow compare and mask operations
    using machine word size operations. This patch improves throughput on
    average by 15% when CPU is the bottleneck of forwarding packets.

    This patch is inspired by ideas and code from a patch submitted by Peter
    Klausler titled "replace memcmp() with specialized comparator".
    However, The original patch only optimizes for architectures
    support unaligned machine word access. This patch optimizes for all
    architectures.

    Signed-off-by: Andy Zhou
    Signed-off-by: Jesse Gross

    Andy Zhou
     

27 Aug, 2013

2 commits

  • Key_end is a better name describing the ending boundary than key_len.
    Rename those variables to make it less confusing.

    Signed-off-by: Andy Zhou
    Signed-off-by: Jesse Gross

    Andy Zhou
     
  • This patch adds support for rewriting SCTP src,dst ports similar to the
    functionality already available for TCP/UDP.

    Rewriting SCTP ports is expensive due to double-recalculation of the
    SCTP checksums; this is performed to ensure that packets traversing OVS
    with invalid checksums will continue to the destination with any
    checksum corruption intact.

    Reviewed-by: Simon Horman
    Signed-off-by: Joe Stringer
    Signed-off-by: Ben Pfaff
    Signed-off-by: Jesse Gross

    Joe Stringer
     

24 Aug, 2013

2 commits

  • Add wildcarded flow support in kernel datapath.

    Wildcarded flow can improve OVS flow set up performance by avoid sending
    matching new flows to the user space program. The exact performance boost
    will largely dependent on wildcarded flow hit rate.

    In case all new flows hits wildcard flows, the flow set up rate is
    within 5% of that of linux bridge module.

    Pravin has made significant contributions to this patch. Including API
    clean ups and bug fixes.

    Signed-off-by: Pravin B Shelar
    Signed-off-by: Andy Zhou
    Signed-off-by: Jesse Gross

    Andy Zhou
     
  • Flow table destroy is done in rcu call-back context. Therefore
    there is no need to use rcu variant of hlist_del().

    Signed-off-by: Pravin B Shelar
    Signed-off-by: Jesse Gross

    Pravin B Shelar
     

15 Aug, 2013

1 commit


20 Jun, 2013

3 commits


15 Jun, 2013

3 commits


23 Apr, 2013

1 commit

  • Conflicts:
    drivers/net/ethernet/emulex/benet/be_main.c
    drivers/net/ethernet/intel/igb/igb_main.c
    drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
    include/net/scm.h
    net/batman-adv/routing.c
    net/ipv4/tcp_input.c

    The e{uid,gid} --> {uid,gid} credentials fix conflicted with the
    cleanup in net-next to now pass cred structs around.

    The be2net driver had a bug fix in 'net' that overlapped with the VLAN
    interface changes by Patrick McHardy in net-next.

    An IGB conflict existed because in 'net' the build_skb() support was
    reverted, and in 'net-next' there was a comment style fix within that
    code.

    Several batman-adv conflicts were resolved by making sure that all
    calls to batadv_is_my_mac() are changed to have a new bat_priv first
    argument.

    Eric Dumazet's TS ECR fix in TCP in 'net' conflicted with the F-RTO
    rewrite in 'net-next', mostly overlapping changes.

    Thanks to Stephen Rothwell and Antonio Quartulli for help with several
    of these merge resolutions.

    Signed-off-by: David S. Miller

    David S. Miller
     

30 Mar, 2013

1 commit


28 Mar, 2013

2 commits

  • Add a new constant ETH_P_802_3_MIN, the minimum ethernet type for
    an 802.3 frame. Frames with a lower value in the ethernet type field
    are Ethernet II.

    Also update all the users of this value that David Miller and
    I could find to use the new constant.

    Also correct a bug in util.c. The comparison with ETH_P_802_3_MIN
    should be >= not >.

    As suggested by Jesse Gross.

    Compile tested only.

    Cc: David Miller
    Cc: Jesse Gross
    Cc: Karsten Keil
    Cc: John W. Linville
    Cc: Johannes Berg
    Cc: Bart De Schuymer
    Cc: Stephen Hemminger
    Cc: Patrick McHardy
    Cc: Marcel Holtmann
    Cc: Gustavo Padovan
    Cc: Johan Hedberg
    Cc: linux-bluetooth@vger.kernel.org
    Cc: netfilter-devel@vger.kernel.org
    Cc: bridge@lists.linux-foundation.org
    Cc: linux-wireless@vger.kernel.org
    Cc: linux1394-devel@lists.sourceforge.net
    Cc: linux-media@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Cc: dev@openvswitch.org
    Acked-by: Mauro Carvalho Chehab
    Acked-by: Stefan Richter
    Signed-off-by: Simon Horman
    Signed-off-by: David S. Miller

    Simon Horman
     
  • table->count is uint32_t

    Signed-off-by: Hong Zhiguo
    Signed-off-by: Jesse Gross

    Hong Zhiguo
     

15 Mar, 2013

1 commit


28 Feb, 2013

1 commit

  • I'm not sure why, but the hlist for each entry iterators were conceived

    list_for_each_entry(pos, head, member)

    The hlist ones were greedy and wanted an extra parameter:

    hlist_for_each_entry(tpos, pos, head, member)

    Why did they need an extra pos parameter? I'm not quite sure. Not only
    they don't really need it, it also prevents the iterator from looking
    exactly like the list iterator, which is unfortunate.

    Besides the semantic patch, there was some manual work required:

    - Fix up the actual hlist iterators in linux/list.h
    - Fix up the declaration of other iterators based on the hlist ones.
    - A very small amount of places were using the 'node' parameter, this
    was modified to use 'obj->member' instead.
    - Coccinelle didn't handle the hlist_for_each_entry_safe iterator
    properly, so those had to be fixed up manually.

    The semantic patch which is mostly the work of Peter Senna Tschudin is here:

    @@
    iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host;

    type T;
    expression a,c,d,e;
    identifier b;
    statement S;
    @@

    -T b;

    [akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c]
    [akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c]
    [akpm@linux-foundation.org: checkpatch fixes]
    [akpm@linux-foundation.org: fix warnings]
    [akpm@linux-foudnation.org: redo intrusive kvm changes]
    Tested-by: Peter Senna Tschudin
    Acked-by: Paul E. McKenney
    Signed-off-by: Sasha Levin
    Cc: Wu Fengguang
    Cc: Marcelo Tosatti
    Cc: Gleb Natapov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sasha Levin
     

23 Feb, 2013

1 commit

  • Before this patch, if an LLC/SNAP packet with OUI 00:00:00 had an
    ethertype less than 1536 the flow key given to userspace in the upcall
    would contain the invalid ethertype (for example, 3). If userspace
    attempted to insert a kernel flow for this key it would be rejected
    by ovs_flow_from_nlattrs.

    This patch allows OVS to pass the OFTest pktact.DirectBadLlcPackets.

    Signed-off-by: Rich Lane
    Signed-off-by: Jesse Gross

    Rich Lane
     

27 Nov, 2012

1 commit


03 Nov, 2012

1 commit


31 Oct, 2012

1 commit

  • We currently only extract the ARP payload if the opcode indicates
    that it is a request or reply. However, we also only set the
    key length in these situations even though it should still be
    possible to match on the opcode. There's no real reason to
    restrict the ARP opcode since all have the same format so this
    simply removes the check.

    Signed-off-by: Mehak Mahajan
    Signed-off-by: Jesse Gross

    Mehak Mahajan
     

05 Sep, 2012

1 commit


04 Sep, 2012

1 commit