The first patch refactors the erspan header definitions. Originally, the erspan fields are defined as a group into a __be16 field, and use mask and offset to access each field. This is more costly due to calling ntohs/htons and error-prone. The first patch changes it to use bitfields. The second patch creates erspan.h in UAPI and move the definition 'struct erspan_metadata' to it for later openvswitch to use. The final patch introduces the new OVS tunnel key attribute, OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS, to program both v1 and v2 erspan tunnel for openvswitch.
William Tu (3): net: erspan: use bitfield instead of mask and offset net: erspan: create erspan metadata uapi header openvswitch: add erspan version I and II support include/net/erspan.h | 123 +++++++++++++++++++++++++-------------- include/uapi/linux/erspan.h | 52 +++++++++++++++++ include/uapi/linux/openvswitch.h | 1 + net/ipv4/ip_gre.c | 38 +++++------- net/ipv6/ip6_gre.c | 36 +++++------- net/openvswitch/flow_netlink.c | 52 ++++++++++++++++- 6 files changed, 209 insertions(+), 93 deletions(-) create mode 100644 include/uapi/linux/erspan.h --- v5->v6 move field 'version' to the begining of the struct for easy expansion later. remove redundant erspan validation function create erspan.h in uapi v4->v5 rather than passing individual members of erspan_metadata, just pass the whole binary structure between kernel and userspace, suggested by Pravin. v3->v4 change from be32 to u32 for OVS_ERSPAN_OPT_IDX, suggested by Jiri Benc. v2->v3 revert the "openvswitch: Add erspan tunnel support." commit ceaa001a170e. redesign the OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS as nested attribute v1->v2 Fix compatibility issue suggested by Pravin. -- 2.7.4