mirror of
https://github.com/openvswitch/ovs
synced 2025-10-23 14:57:06 +00:00
User-Space MPLS actions and matches
This patch implements use-space datapath and non-datapath code to match and use the datapath API set out in Leo Alterman's patch "user-space datapath: Add basic MPLS support to kernel". The resulting MPLS implementation supports: * Pushing a single MPLS label * Poping a single MPLS label * Modifying an MPLS lable using set-field or load actions that act on the label value, tc and bos bit. * There is no support for manipulating the TTL this is considered future work. The single-level push pop limitation is implemented by processing push, pop and set-field/load actions in order and discarding information that would require multiple levels of push/pop to be supported. e.g. push,push -> the first push is discarded pop,pop -> the first pop is discarded This patch is based heavily on work by Ravi K. Cc: Ravi K <rkerur@gmail.com> Reviewed-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Simon Horman <horms@verge.net.au> Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012 Nicira, Inc.
|
||||
* Copyright (c) 2012, 2013 Nicira, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -71,6 +71,8 @@
|
||||
DEFINE_OFPACT(REG_MOVE, ofpact_reg_move, ofpact) \
|
||||
DEFINE_OFPACT(REG_LOAD, ofpact_reg_load, ofpact) \
|
||||
DEFINE_OFPACT(DEC_TTL, ofpact_cnt_ids, cnt_ids) \
|
||||
DEFINE_OFPACT(PUSH_MPLS, ofpact_push_mpls, ofpact) \
|
||||
DEFINE_OFPACT(POP_MPLS, ofpact_pop_mpls, ofpact) \
|
||||
\
|
||||
/* Metadata. */ \
|
||||
DEFINE_OFPACT(SET_TUNNEL, ofpact_tunnel, ofpact) \
|
||||
@@ -310,6 +312,22 @@ struct ofpact_reg_load {
|
||||
union mf_subvalue subvalue; /* Least-significant bits are used. */
|
||||
};
|
||||
|
||||
/* OFPACT_PUSH_VLAN/MPLS/PBB
|
||||
*
|
||||
* Used for NXAST_PUSH_MPLS, OFPAT11_PUSH_MPLS. */
|
||||
struct ofpact_push_mpls {
|
||||
struct ofpact ofpact;
|
||||
ovs_be16 ethertype;
|
||||
};
|
||||
|
||||
/* OFPACT_POP_MPLS
|
||||
*
|
||||
* Used for NXAST_POP_MPLS, OFPAT11_POP_MPLS.. */
|
||||
struct ofpact_pop_mpls {
|
||||
struct ofpact ofpact;
|
||||
ovs_be16 ethertype;
|
||||
};
|
||||
|
||||
/* OFPACT_SET_TUNNEL.
|
||||
*
|
||||
* Used for NXAST_SET_TUNNEL, NXAST_SET_TUNNEL64. */
|
||||
|
||||
Reference in New Issue
Block a user