mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 14:25:26 +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:
@@ -29,7 +29,7 @@ ofpbuf_use__(struct ofpbuf *b, void *base, size_t allocated,
|
||||
b->allocated = allocated;
|
||||
b->source = source;
|
||||
b->size = 0;
|
||||
b->l2 = b->l3 = b->l4 = b->l7 = NULL;
|
||||
b->l2 = b->l2_5 = b->l3 = b->l4 = b->l7 = NULL;
|
||||
list_poison(&b->list_node);
|
||||
b->private_p = NULL;
|
||||
}
|
||||
@@ -176,6 +176,9 @@ ofpbuf_clone_with_headroom(const struct ofpbuf *buffer, size_t headroom)
|
||||
if (buffer->l2) {
|
||||
new_buffer->l2 = (char *) buffer->l2 + data_delta;
|
||||
}
|
||||
if (buffer->l2_5) {
|
||||
new_buffer->l2_5 = (char *) buffer->l2_5 + data_delta;
|
||||
}
|
||||
if (buffer->l3) {
|
||||
new_buffer->l3 = (char *) buffer->l3 + data_delta;
|
||||
}
|
||||
@@ -295,6 +298,9 @@ ofpbuf_resize__(struct ofpbuf *b, size_t new_headroom, size_t new_tailroom)
|
||||
if (b->l2) {
|
||||
b->l2 = (char *) b->l2 + data_delta;
|
||||
}
|
||||
if (b->l2_5) {
|
||||
b->l2_5 = (char *) b->l2_5 + data_delta;
|
||||
}
|
||||
if (b->l3) {
|
||||
b->l3 = (char *) b->l3 + data_delta;
|
||||
}
|
||||
|
Reference in New Issue
Block a user