datapath: Add support for VXLAN tunnels to Open vSwitch
[sliver-openvswitch.git] / datapath / tunnel.h
index ef09162..b7de7a9 100644 (file)
@@ -42,6 +42,7 @@
 #define TNL_T_PROTO_GRE                0
 #define TNL_T_PROTO_GRE64      1
 #define TNL_T_PROTO_CAPWAP     2
+#define TNL_T_PROTO_VXLAN      3
 
 /* These flags are only needed when calling tnl_find_port(). */
 #define TNL_T_KEY_EXACT                (1 << 10)
@@ -116,6 +117,7 @@ struct tnl_mutable_config {
        u32     flags;
        u8      tos;
        u8      ttl;
+       __be16  dst_port;
 
        /* Multicast configuration. */
        int     mlink;
@@ -201,4 +203,25 @@ static inline void tnl_tun_key_init(struct ovs_key_ipv4_tunnel *tun_key,
        tun_key->tun_flags = tun_flags;
 }
 
+static inline void tnl_get_param(const struct tnl_mutable_config *mutable,
+                                const struct ovs_key_ipv4_tunnel *tun_key,
+                                u32 *flags,  __be64 *out_key)
+{
+       if (tun_key->ipv4_dst) {
+               *flags = 0;
+
+               if (tun_key->tun_flags & OVS_TNL_F_KEY)
+                       *flags = TNL_F_OUT_KEY_ACTION;
+               if (tun_key->tun_flags & OVS_TNL_F_CSUM)
+                       *flags |= TNL_F_CSUM;
+               *out_key = tun_key->tun_id;
+       } else {
+               *flags = mutable->flags;
+               if (mutable->flags & TNL_F_OUT_KEY_ACTION)
+                       *out_key = tun_key->tun_id;
+               else
+                       *out_key = mutable->out_key;
+       }
+}
+
 #endif /* tunnel.h */