[ovs-git] [openvswitch/ovs] beb75a: userspace: Switching of L3 packets in L2 pipeline

GitHub noreply at github.com
Fri Jun 2 17:22:07 UTC 2017

  Branch: refs/heads/master
  Home:   https://github.com/openvswitch/ovs
  Commit: beb75a40fdc295bfd6521b0068b4cd12f6de507c
  Author: Jan Scheurich <jan.scheurich at ericsson.com>
  Date:   2017-06-02 (Fri, 02 Jun 2017)

  Changed paths:
    M build-aux/extract-ofp-fields
    M datapath/linux/compat/include/linux/openvswitch.h
    M include/openvswitch/match.h
    M include/openvswitch/meta-flow.h
    M lib/dpif-netdev.c
    M lib/dpif-netlink.c
    M lib/dpif.c
    M lib/match.c
    M lib/meta-flow.c
    M lib/netdev-vport.c
    M lib/netdev.h
    M lib/odp-execute.c
    M lib/odp-util.c
    M lib/odp-util.h
    M lib/packets.h
    M ofproto/ofproto-dpif-sflow.c
    M ofproto/ofproto-dpif-upcall.c
    M ofproto/ofproto-dpif-xlate.c
    M ofproto/ofproto-dpif.c
    M ofproto/tunnel.c
    M tests/tunnel-push-pop-ipv6.at
    M tests/tunnel-push-pop.at
    M tests/tunnel.at

  Log Message:
  userspace: Switching of L3 packets in L2 pipeline

Ports have a new layer3 attribute if they send/receive L3 packets.

The packet_type included in structs dp_packet and flow is considered in
ofproto-dpif. The classical L2 match fields (dl_src, dl_dst, dl_type, and
vlan_tci, vlan_vid, vlan_pcp) now have Ethernet as pre-requisite.

A dummy ethernet header is pushed to L3 packets received from L3 ports
before the the pipeline processing starts. The ethernet header is popped
before sending a packet to a L3 port.

For datapath ports that can receive L2 or L3 packets, the packet_type
becomes part of the flow key for datapath flows and is handled
appropriately in dpif-netdev.

In the 'else' branch in flow_put_on_pmd() function, the additional check
flow_equal(&match.flow, &netdev_flow->flow) was removed, as a) the dpcls
lookup is sufficient to uniquely identify a flow and b) it caused false
negatives because the flow in netdev->flow may not properly masked.

In dpif_netdev_flow_put() we now use the same method for constructing the
netdev_flow_key as the one used when adding the flow to the dplcs to make sure
these always match. The function netdev_flow_key_from_flow() used so far was
not only inefficient but sometimes caused mismatches and subsequent flow
update failures.

The kernel datapath does not support the packet_type match field.
Instead it encodes the packet type implictly by the presence or absence of
the Ethernet attribute in the flow key and mask.
This patch filters the PACKET_TYPE attribute out of netlink flow key and
mask to be sent to the kernel datapath.

Signed-off-by: Lorand Jakab <lojakab at cisco.com>
Signed-off-by: Simon Horman <simon.horman at netronome.com>
Signed-off-by: Jiri Benc <jbenc at redhat.com>
Signed-off-by: Yi Yang <yi.y.yang at intel.com>
Signed-off-by: Jan Scheurich <jan.scheurich at ericsson.com>
Co-authored-by: Zoltan Balogh <zoltan.balogh at ericsson.com>
Signed-off-by: Ben Pfaff <blp at ovn.org>

More information about the git mailing list