summaryrefslogtreecommitdiff
path: root/lib/dpif-netlink-rtnl.c
diff options
context:
space:
mode:
authorEric Garver <e@erig.me>2017-07-10 15:39:53 -0400
committerJoe Stringer <joe@ovn.org>2017-07-19 14:34:18 -0700
commitc33c412fb139b1fe86acbba0fb36665d6ad14d2b (patch)
tree29fd85c997d91e69094ebaaa3d3c7aa7a8bdd671 /lib/dpif-netlink-rtnl.c
parenta8a3eee4920fa67cbb48b4c46476327db2d635f3 (diff)
downloadopenvswitch-c33c412fb139b1fe86acbba0fb36665d6ad14d2b.tar.gz
dpif-netlink-rtnl: Support VXLAN-GPE
Add support for creating VXLAN tunnels with GPE. This enables layer3 VXLAN tunnels with kernel datapath. Signed-off-by: Eric Garver <e@erig.me> Signed-off-by: Joe Stringer <joe@ovn.org>
Diffstat (limited to 'lib/dpif-netlink-rtnl.c')
-rw-r--r--lib/dpif-netlink-rtnl.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/dpif-netlink-rtnl.c b/lib/dpif-netlink-rtnl.c
index 17ae24a7f..b71fb9c26 100644
--- a/lib/dpif-netlink-rtnl.c
+++ b/lib/dpif-netlink-rtnl.c
@@ -33,12 +33,13 @@ VLOG_DEFINE_THIS_MODULE(dpif_netlink_rtnl);
#ifndef IFLA_VXLAN_MAX
#define IFLA_VXLAN_MAX 0
#endif
-#if IFLA_VXLAN_MAX < 25
+#if IFLA_VXLAN_MAX < 27
#define IFLA_VXLAN_LEARNING 7
#define IFLA_VXLAN_PORT 15
#define IFLA_VXLAN_UDP_ZERO_CSUM6_RX 20
#define IFLA_VXLAN_GBP 23
#define IFLA_VXLAN_COLLECT_METADATA 25
+#define IFLA_VXLAN_GPE 27
#endif
#ifndef IFLA_GRE_MAX
@@ -69,6 +70,7 @@ static const struct nl_policy vxlan_policy[] = {
[IFLA_VXLAN_LEARNING] = { .type = NL_A_U8 },
[IFLA_VXLAN_UDP_ZERO_CSUM6_RX] = { .type = NL_A_U8 },
[IFLA_VXLAN_PORT] = { .type = NL_A_U16 },
+ [IFLA_VXLAN_GPE] = { .type = NL_A_FLAG },
};
static const struct nl_policy gre_policy[] = {
[IFLA_GRE_COLLECT_METADATA] = { .type = NL_A_FLAG },
@@ -171,7 +173,9 @@ dpif_netlink_rtnl_vxlan_verify(const struct netdev_tunnel_config *tnl_cfg,
|| (tnl_cfg->dst_port
!= nl_attr_get_be16(vxlan[IFLA_VXLAN_PORT]))
|| (tnl_cfg->exts & (1 << OVS_VXLAN_EXT_GBP)
- && !nl_attr_get_flag(vxlan[IFLA_VXLAN_GBP]))) {
+ && !nl_attr_get_flag(vxlan[IFLA_VXLAN_GBP]))
+ || (tnl_cfg->exts & (1 << OVS_VXLAN_EXT_GPE)
+ && !nl_attr_get_flag(vxlan[IFLA_VXLAN_GPE]))) {
err = EINVAL;
}
}
@@ -289,6 +293,9 @@ dpif_netlink_rtnl_create(const struct netdev_tunnel_config *tnl_cfg,
if (tnl_cfg->exts & (1 << OVS_VXLAN_EXT_GBP)) {
nl_msg_put_flag(&request, IFLA_VXLAN_GBP);
}
+ if (tnl_cfg->exts & (1 << OVS_VXLAN_EXT_GPE)) {
+ nl_msg_put_flag(&request, IFLA_VXLAN_GPE);
+ }
nl_msg_put_be16(&request, IFLA_VXLAN_PORT, tnl_cfg->dst_port);
break;
case OVS_VPORT_TYPE_GRE: