2
0
mirror of https://github.com/openvswitch/ovs synced 2025-09-01 06:45:17 +00:00

tunnel: Provide framework for tunnel extensions for VXLAN-GBP and others

Supports a new "exts" field in the tunnel configuration which takes a
comma separated list of enabled extensions.

The only extension supported so far is GBP but this can be used to
enable RCO and possibly others as soon as the OVS datapath supports
them.

Signed-off-by: Thomas Graf <tgraf@noironetworks.com>
Acked-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Thomas Graf
2015-02-06 21:10:45 +01:00
parent adfaaeaced
commit 526df7d854
4 changed files with 57 additions and 3 deletions

View File

@@ -849,10 +849,24 @@ dpif_netlink_port_add__(struct dpif_netlink *dpif, struct netdev *netdev,
}
tnl_cfg = netdev_get_tunnel_config(netdev);
if (tnl_cfg && tnl_cfg->dst_port != 0) {
if (tnl_cfg && (tnl_cfg->dst_port != 0 || tnl_cfg->exts)) {
ofpbuf_use_stack(&options, options_stub, sizeof options_stub);
nl_msg_put_u16(&options, OVS_TUNNEL_ATTR_DST_PORT,
ntohs(tnl_cfg->dst_port));
if (tnl_cfg->dst_port) {
nl_msg_put_u16(&options, OVS_TUNNEL_ATTR_DST_PORT,
ntohs(tnl_cfg->dst_port));
}
if (tnl_cfg->exts) {
size_t ext_ofs;
int i;
ext_ofs = nl_msg_start_nested(&options, OVS_TUNNEL_ATTR_EXTENSION);
for (i = 0; i < 32; i++) {
if (tnl_cfg->exts & (1 << i)) {
nl_msg_put_flag(&options, i);
}
}
nl_msg_end_nested(&options, ext_ofs);
}
request.options = ofpbuf_data(&options);
request.options_len = ofpbuf_size(&options);
}

View File

@@ -532,6 +532,24 @@ set_tunnel_config(struct netdev *dev_, const struct smap *args)
!strcmp(node->key, "in_key") ||
!strcmp(node->key, "out_key")) {
/* Handled separately below. */
} else if (!strcmp(node->key, "exts")) {
char *str = xstrdup(node->value);
char *ext, *save_ptr = NULL;
tnl_cfg.exts = 0;
ext = strtok_r(str, ",", &save_ptr);
while (ext) {
if (!strcmp(type, "vxlan") && !strcmp(ext, "gbp")) {
tnl_cfg.exts |= (1 << OVS_VXLAN_EXT_GBP);
} else {
VLOG_WARN("%s: unknown extension '%s'", name, ext);
}
ext = strtok_r(NULL, ",", &save_ptr);
}
free(str);
} else {
VLOG_WARN("%s: unknown %s argument '%s'", name, type, node->key);
}

View File

@@ -120,6 +120,8 @@ struct netdev_tunnel_config {
ovs_be32 ip_src;
ovs_be32 ip_dst;
uint32_t exts;
uint8_t ttl;
bool ttl_inherit;

View File

@@ -1904,6 +1904,26 @@
to <code>false</code> to disable.
</column>
<group title="Tunnel Options: vxlan only">
<column name="options" key="exts">
<p>Optional. Comma separated list of optional VXLAN extensions to
enable. The following extensions are supported:</p>
<ul>
<li>
<code>gbp</code>: VXLAN-GBP allows to transport the group policy
context of a packet across the VXLAN tunnel to other network
peers. See the field description of <code>tun_gbp_id</code> and
<code>tun_gbp_flags</code> in ovs-ofctl(8) for additional
information.
(<code>https://tools.ietf.org/html/draft-smith-vxlan-group-policy</code>)
</li>
</ul>
</column>
</group>
<group title="Tunnel Options: gre and ipsec_gre only">
<p>
Only <code>gre</code> and <code>ipsec_gre</code> interfaces support