[ovs-dev] [PATCH 0/16 v2.17] Basic MPLS actions and matches

Simon Horman horms at verge.net.au
Fri Feb 1 00:23:52 UTC 2013


On Fri, Jan 25, 2013 at 04:22:06PM +0900, Simon Horman wrote:
> Hi,
> 
> This series implements basic MPLS actions and matches based on work by
> Ravi K, Leo Alterman and Yamahata-san.
> 
> The main limitation of this implementation is that it only
> supports manipulating the outer-most MPLS label.
> 
> Key differences between the v2.15 and v2.16:
> * Rebase
> * Address review by Ben Pfaff, particularly in th first patch of the
>   series "User-Space MPLS actions and matches"

Hi Ben,

I'm wondering if you might have time to look at some more of the
patches in this series. Or alternatively if there is anything
I can do to aid review.

> 
> Key differences between the v2.15 and v2.16:
> * Rebase
> * Use 62 for OVS_KEY_ATTR_MPLS to reduce the scope for conflict
>   with new values in the future
> 
> Key differences between the v2.14 and v2.15:
> * Addressed review by Ben Pfaff and Jesse Gross
>   In particular:
>   - Use Use OVS_ACTION_SET to set OVS_KEY_ATTR_MPLS instead o
>   Still under discussion
>   - Move OVS_KEY_ATTR_MPLS to after all upstream attributes
>   - Move OVS_ACTION_ATTR_PUSH_MPLS and OVS_ACTION_ATTR_POP_MPLS
>     to after all upstream attributes
> 
> Key differences between the v2.13 and v2.14:
> * Reshuffle patches moving kernel datapath patches to the end of the series
>   and allowing the other patches to be applied independently. That is,
>   the first 10 patches of the series may be applied. They do not
>   touch the kernel. And the result will be MPLS support for ovs-vswitchd
>   and the user-space datapath.
> 
> Key differences between the v2.12 and v2.13:
> * Rebase
> * Add Inner and Outer flow support to user-space datapath
> * Allow MPLS matches for OpenFlow 1.3
> * Optimisations suggested by Jarno Rajahalme
> 
> Key differences between the v2.11 and v2.12:
> * Rebase
> * Add eth_type_mpls helper
> * Add flow_innermost_dl_type helper
> * calculate MPLS fitness over entire flow
>   - It is sufficient to just calculate the fitness of an MPLS frame once.
>   - Previously a fitness calculation was made based on expectations calculat
>     on L1 and L2 data. However, this may not be correct as it will return
>     ODP_FIT_TOO_MUCH in the case where the key contains L3 attributes.
> * Pass MPLS lse to push_mpls
>   - When push_mpls() the LSE of the flow is always already known,
>     so pass it to push_mpls and set it directly. This avoids:
>     + The need to re-compose an default LSE, allowing
>       the removal of get_lse()
>     + The need to follow each call to push_mpls() with
>       a call to set_mpls_lse()
>   - This fixes the previously bogus usage of push_mpls
>     in dp_netdev_execute_actions, allowing push_mpls to work
>     in conjunction with the user-space datapath.
> * Add dl_type parameter to flow_extract_l3_onwards()
>   and thus allow "flow: Split flow_extract" to be applied
>   independently of the rest of this patch-set.
> 
> Key differences between the v2.10 and v2.11:
> * Rebase
> * The last 13 patches in the series have been added to allow
>   handling of actions on MPLS flows that modify any L3+ data.
>   In particular, to allow modification of the IP TTL.
> 
>   This is achieved by adding the notion of inner and outer flows.
>   This works as follows.
> 
>   - A match is decoded from a packet using the existing implementation
>     and this is used to look up the flow.
>   - If the flow includes actions that allow further decoding of
>     the packet - e.g. an MPLS pop action which supplies the
>     ethernet type of the encapsulated frame - then the packet is
>     further decoded and a more fine-grained match is made. This match
>     is then used to lookup the flow again.
> 
>   In such cases the flow added to the datapath by ovs-vswtichd
>   includes the richer match and the actions. The datapath inspects
>   the actions and if there are actions that allow further decoding of
>   the packet it inserts the flow twice, once including only an L1 and L2
>   match and once including the richer match. The former is the
>   other flow and the latter is the inner flow.
> 
>   Each inner flow has a single outer flow. Outer flows may
>   have more than one inner flow. Inner flows are not exposed
>   to ovs-vswitchd. Inner flows are deleted when their outer
>   flow is deleted.
> 
> * Check the size of nx_action_mpls_ttl.
>   nx_action_pop_mpls was being checked
>   due to a cut-and-paste error
> 
> Key differences between the previous post, v2.9, and this post, v2.10:
> * Rebase
> * Check the size of nx_action_mpls_ttl.
>   nx_action_pop_mpls was being checked
>   due to a cut-and-paste error
> 
> Key differences between v2.8 and v2.9
> * Rebase
>   and fix tests accordingly
> * Always update MPLS bos pointer when
>   VLAN pop is performed in kernel datapath.
> 
> Key differences between v2.7 and v2.8
> * Rebase
> 
> Key differences between v2.6 and v2.7
> * When encoding TTL actions (the last 4 patches) for
>   an OpenFlow 1.1+ message, encode them as OpenFlow 1.1+
>   actions. Previously they were encoded as NX matches.
> 
> Key differences between v2.5 and v2.6
> * Dropped "flow: Set ttl in flow_compose()", this is
>   now present in the master branch
> * Dropped "nx-match: Do not check pre-requisites for load actions",
>   instead, dl_type changes are tracked to allow correct pre-requisite
>   checking in the presence of push_mpls and pop_mpls actions.
> 
> Key differences between v2.4 and v2.5
> * Various clean-ups and fises to
>   "User-Space MPLS actions and matches"
>   as noted in its changelog.
> * New patches to add support for TLS actions
> * Inclusion of Justin Pettit's patch
>   "flow: Set ttl in flow_compose()",
>   which is a dependency of the
>   "Add support for copy_ttl_out action" patch.
> 
> Key differences between v2.3 and v2.4
> * Minor cleanup to "User-Space MPLS actions and matches"
>   as detailed in its changelog.
> * A new patch at the end of the series
>   "Add support for set_mpls_ttl action"
> 
> Changes are detailed in the changelog of each patch.
> 
> 
> The testsuite passes when this series is applied on top
> of the current master branch.
> 
> Diffstat and git information is provided to aid review.
> 
> ----------------------------------------------------------------
> The following changes since commit 4766ce7a6438c11743c354fddad9d1164c76c467:
> 
>   rconn: Fix null pointer dereference in rconn_add_monitor(). (2013-01-24 14:57:24 -0800)
> 
> are available in the git repository at:
> 
>   git://github.com/horms/openvswitch.git devel/mpls
> 
> for you to fetch changes up to 9acc0b2a1a0bc35a39a139991c8a9fdf7933a0f7:
> 
>   datapath: Allow IP actions for MPLS (2013-01-25 16:04:31 +0900)
> 
> ----------------------------------------------------------------
> Simon Horman (16):
>       User-Space MPLS actions and matches
>       odp-util: commit_set_nw_action: use flow's innermost dl_type
>       packet: packet_get_tcp_flags: use flow's innermost dl_type
>       actions: Allow secondary decoding of a flow
>       ofproto: Allow actions richer matches based on actions
>       dpif-netdev: Inner And Outer Flows
>       Add support for dec_mpls_ttl action
>       Add support for set_mpls_ttl action
>       Add support for copy_ttl_out action
>       Add support for copy_ttl_in action
>       datapath: Add basic MPLS support to kernel
>       datapath: Split ovs_flow_extract
>       datapath: Inner And Outer Flows
>       datapath: ovs_flow_to_nlattrs: use encap_eth_type
>       datapath: ovs_flow_used: use encap_eth_type
>       datapath: Allow IP actions for MPLS
> 
>  datapath/actions.c              |   93 +++++++++++
>  datapath/datapath.c             |  333 +++++++++++++++++++++++++++++----------
>  datapath/datapath.h             |   10 ++
>  datapath/flow.c                 |  256 +++++++++++++++++++++---------
>  datapath/flow.h                 |   60 ++++++-
>  datapath/vport.c                |    2 +
>  include/linux/openvswitch.h     |   36 ++++-
>  include/openflow/nicira-ext.h   |   39 +++++
>  include/openflow/openflow-1.1.h |    4 +-
>  lib/dpif-netdev.c               |  217 ++++++++++++++++++++++---
>  lib/flow.c                      |   76 +++++++--
>  lib/flow.h                      |   28 +++-
>  lib/match.c                     |  104 ++++++++++--
>  lib/match.h                     |    6 +
>  lib/meta-flow.c                 |  113 +++++++++++++
>  lib/meta-flow.h                 |   11 ++
>  lib/nx-match.c                  |   18 ++-
>  lib/odp-util.c                  |  199 +++++++++++++++++++----
>  lib/odp-util.h                  |    2 +-
>  lib/ofp-actions.c               |  193 ++++++++++++++++++++++-
>  lib/ofp-actions.h               |   31 ++++
>  lib/ofp-parse.c                 |   48 +++++-
>  lib/ofp-print.c                 |    8 +-
>  lib/ofp-util.c                  |   37 ++++-
>  lib/ofp-util.def                |   12 ++
>  lib/ofpbuf.c                    |    8 +-
>  lib/ofpbuf.h                    |    1 +
>  lib/packets.c                   |  171 +++++++++++++++++++-
>  lib/packets.h                   |   81 ++++++++++
>  ofproto/ofproto-dpif.c          |  296 +++++++++++++++++++++++++++++++---
>  tests/odp.at                    |   13 ++
>  tests/ofproto-dpif.at           |  255 ++++++++++++++++++++++++++++++
>  tests/test-bundle.c             |    1 +
>  tests/test-multipath.c          |    1 +
>  tests/test-odp.c                |    2 +-
>  utilities/ovs-dpctl.c           |   18 ++-
>  utilities/ovs-ofctl.8.in        |   45 ++++++
>  37 files changed, 2551 insertions(+), 277 deletions(-)
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
> 



More information about the dev mailing list