vxlan: combine VXLAN_FLOWBASED into VXLAN_COLLECT_METADATA
authorAlexei Starovoitov <ast@plumgrid.com>
Wed, 5 Aug 2015 05:51:07 +0000 (22:51 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 7 Aug 2015 18:46:34 +0000 (11:46 -0700)
IFLA_VXLAN_FLOWBASED is useless without IFLA_VXLAN_COLLECT_METADATA,
so combine them into single IFLA_VXLAN_COLLECT_METADATA flag.
'flowbased' doesn't convey real meaning of the vxlan tunnel mode.
This mode can be used by routing, tc+bpf and ovs.
Only ovs is strictly flow based, so 'collect metadata' is a better
name for this tunnel mode.

Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Acked-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vxlan.c
include/net/vxlan.h
include/uapi/linux/if_link.h
net/openvswitch/vport-vxlan.c

index e90f7a4..b6731fa 100644 (file)
@@ -1141,7 +1141,7 @@ static void vxlan_rcv(struct vxlan_sock *vs, struct sk_buff *skb,
        union vxlan_addr *remote_ip;
 
        /* For flow based devices, map all packets to VNI 0 */
-       if (vs->flags & VXLAN_F_FLOW_BASED)
+       if (vs->flags & VXLAN_F_COLLECT_METADATA)
                vni = 0;
 
        /* Is this VNI defined? */
@@ -1183,7 +1183,7 @@ static void vxlan_rcv(struct vxlan_sock *vs, struct sk_buff *skb,
 
        skb_reset_network_header(skb);
        /* In flow-based mode, GBP is carried in dst_metadata */
-       if (!(vs->flags & VXLAN_F_FLOW_BASED))
+       if (!(vs->flags & VXLAN_F_COLLECT_METADATA))
                skb->mark = md->gbp;
 
        if (oip6)
@@ -2129,7 +2129,7 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
 #endif
        }
 
-       if (vxlan->flags & VXLAN_F_FLOW_BASED &&
+       if (vxlan->flags & VXLAN_F_COLLECT_METADATA &&
            info && info->mode == IP_TUNNEL_INFO_TX) {
                vxlan_xmit_one(skb, dev, NULL, false);
                return NETDEV_TX_OK;
@@ -2462,7 +2462,6 @@ static const struct nla_policy vxlan_policy[IFLA_VXLAN_MAX + 1] = {
        [IFLA_VXLAN_RSC]        = { .type = NLA_U8 },
        [IFLA_VXLAN_L2MISS]     = { .type = NLA_U8 },
        [IFLA_VXLAN_L3MISS]     = { .type = NLA_U8 },
-       [IFLA_VXLAN_FLOWBASED]  = { .type = NLA_U8 },
        [IFLA_VXLAN_COLLECT_METADATA]   = { .type = NLA_U8 },
        [IFLA_VXLAN_PORT]       = { .type = NLA_U16 },
        [IFLA_VXLAN_UDP_CSUM]   = { .type = NLA_U8 },
@@ -2814,10 +2813,6 @@ static int vxlan_newlink(struct net *src_net, struct net_device *dev,
        if (data[IFLA_VXLAN_LIMIT])
                conf.addrmax = nla_get_u32(data[IFLA_VXLAN_LIMIT]);
 
-       if (data[IFLA_VXLAN_FLOWBASED] &&
-           nla_get_u8(data[IFLA_VXLAN_FLOWBASED]))
-               conf.flags |= VXLAN_F_FLOW_BASED;
-
        if (data[IFLA_VXLAN_COLLECT_METADATA] &&
            nla_get_u8(data[IFLA_VXLAN_COLLECT_METADATA]))
                conf.flags |= VXLAN_F_COLLECT_METADATA;
@@ -2903,7 +2898,7 @@ static size_t vxlan_get_size(const struct net_device *dev)
                nla_total_size(sizeof(__u8)) +  /* IFLA_VXLAN_RSC */
                nla_total_size(sizeof(__u8)) +  /* IFLA_VXLAN_L2MISS */
                nla_total_size(sizeof(__u8)) +  /* IFLA_VXLAN_L3MISS */
-               nla_total_size(sizeof(__u8)) +  /* IFLA_VXLAN_FLOWBASED */
+               nla_total_size(sizeof(__u8)) +  /* IFLA_VXLAN_COLLECT_METADATA */
                nla_total_size(sizeof(__u32)) + /* IFLA_VXLAN_AGEING */
                nla_total_size(sizeof(__u32)) + /* IFLA_VXLAN_LIMIT */
                nla_total_size(sizeof(struct ifla_vxlan_port_range)) +
@@ -2970,8 +2965,8 @@ static int vxlan_fill_info(struct sk_buff *skb, const struct net_device *dev)
                        !!(vxlan->flags & VXLAN_F_L2MISS)) ||
            nla_put_u8(skb, IFLA_VXLAN_L3MISS,
                        !!(vxlan->flags & VXLAN_F_L3MISS)) ||
-           nla_put_u8(skb, IFLA_VXLAN_FLOWBASED,
-                      !!(vxlan->flags & VXLAN_F_FLOW_BASED)) ||
+           nla_put_u8(skb, IFLA_VXLAN_COLLECT_METADATA,
+                      !!(vxlan->flags & VXLAN_F_COLLECT_METADATA)) ||
            nla_put_u32(skb, IFLA_VXLAN_AGEING, vxlan->cfg.age_interval) ||
            nla_put_u32(skb, IFLA_VXLAN_LIMIT, vxlan->cfg.addrmax) ||
            nla_put_be16(skb, IFLA_VXLAN_PORT, vxlan->cfg.dst_port) ||
index eb8d721..e4534f1 100644 (file)
@@ -181,7 +181,6 @@ struct vxlan_dev {
 #define VXLAN_F_GBP                    0x800
 #define VXLAN_F_REMCSUM_NOPARTIAL      0x1000
 #define VXLAN_F_COLLECT_METADATA       0x2000
-#define VXLAN_F_FLOW_BASED             0x4000
 
 /* Flags that are used in the receive path. These flags must match in
  * order for a socket to be shareable
@@ -190,8 +189,7 @@ struct vxlan_dev {
                                         VXLAN_F_UDP_ZERO_CSUM6_RX |    \
                                         VXLAN_F_REMCSUM_RX |           \
                                         VXLAN_F_REMCSUM_NOPARTIAL |    \
-                                        VXLAN_F_COLLECT_METADATA |     \
-                                        VXLAN_F_FLOW_BASED)
+                                        VXLAN_F_COLLECT_METADATA)
 
 struct net_device *vxlan_dev_create(struct net *net, const char *name,
                                    u8 name_assign_type, struct vxlan_config *conf);
index ea04748..f24ec99 100644 (file)
@@ -382,7 +382,6 @@ enum {
        IFLA_VXLAN_REMCSUM_RX,
        IFLA_VXLAN_GBP,
        IFLA_VXLAN_REMCSUM_NOPARTIAL,
-       IFLA_VXLAN_FLOWBASED,
        IFLA_VXLAN_COLLECT_METADATA,
        __IFLA_VXLAN_MAX
 };
index 5471733..c6e937e 100644 (file)
@@ -90,7 +90,7 @@ static struct vport *vxlan_tnl_create(const struct vport_parms *parms)
        int err;
        struct vxlan_config conf = {
                .no_share = true,
-               .flags = VXLAN_F_FLOW_BASED | VXLAN_F_COLLECT_METADATA,
+               .flags = VXLAN_F_COLLECT_METADATA,
        };
 
        if (!options) {