On Mon, Mar 30, 2015 at 3:14 PM, Jesse Gross <[email protected]> wrote:
> This adds basic userspace dataplane support for the Geneve
> tunneling protocol. The rest of userspace only has the ability
> to handle Geneve without options and this follows that pattern
> for the time being. However, when the rest of userspace is updated
> it should be easy to extend the dataplane as well.
>
> Signed-off-by: Jesse Gross <[email protected]>
> ---
> NEWS | 4 +-
> lib/netdev-vport.c | 114
> ++++++++++++++++++++++++++++++++++++++++++++++-
> lib/odp-util.c | 28 ++++++++++--
> lib/packets.h | 19 ++++++++
> tests/odp.at | 1 +
> tests/tunnel-push-pop.at | 16 +++++++
> 6 files changed, 176 insertions(+), 6 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index 9f9dc4c..87460a7 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -62,8 +62,8 @@ Post-v2.3.0
> - A simple wrapper script, 'ovs-docker', to integrate OVS with Docker
> containers. If and when there is a native integration of Open vSwitch
> with Docker, the wrapper script will be retired.
> - - Added support for DPDK Tunneling. VXLAN and GRE are supported protocols.
> - This is generic tunneling mechanism for userspace datapath.
> + - Added support for DPDK Tunneling. VXLAN, GRE, and Geneve are supported
> + protocols. This is generic tunneling mechanism for userspace datapath.
> - Support for multicast snooping (IGMPv1 and IGMPv2)
> - Support for Linux kernels up to 3.19.x
> - The documentation now use the term 'destination' to mean one of syslog,
> diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
> index 0c9f5a4..ef96862 100644
> --- a/lib/netdev-vport.c
> +++ b/lib/netdev-vport.c
> @@ -61,6 +61,11 @@ static struct vlog_rate_limit err_rl =
> VLOG_RATE_LIMIT_INIT(60, 5);
> sizeof(struct udp_header) + \
> sizeof(struct vxlanhdr))
>
...
> +
> + if (gnh->proto_type != htons(ETH_TYPE_TEB)) {
> + VLOG_WARN_RL(&err_rl, "unknown geneve encapsulated protocol: %#x\n",
> + ntohs(gnh->proto_type));
> + reset_tnl_md(md);
> + return;
> + }
> +
> + tnl->flags |= gnh->oam ? FLOW_TNL_F_OAM : 0;
> + tnl->tun_id = htonll(ntohl(get_16aligned_be32(&gnh->vni)) >> 8);
> +
We need to set FLOW_TNL_F_KEY. It is also missing for vxlan.
> + dp_packet_reset_packet(packet, hlen);
> +}
> +
> +static int
> +netdev_geneve_pop_header(struct netdev *netdev_ OVS_UNUSED,
....
> +
> +static int
> +netdev_geneve_push_header(const struct netdev *netdev OVS_UNUSED,
> + struct dp_packet **packets, int cnt,
> + const struct ovs_action_push_tnl *data)
> +{
> + int i;
> +
> + for (i = 0; i < cnt; i++) {
> + push_udp_header(packets[i], data->header, data->header_len);
> + packets[i]->md =
> PKT_METADATA_INITIALIZER(u32_to_odp(data->out_port));
> + }
> + return 0;
> +}
> +
This looks like vxlan_push, Is there reason for having two different function?
> +static void
> netdev_vport_range(struct unixctl_conn *conn, int argc,
> const char *argv[], void *aux OVS_UNUSED)
> {
> @@ -1331,7 +1441,9 @@ netdev_vport_tunnel_register(void)
Otherwise looks good.
Acked-by: Pravin B Shelar <[email protected]>
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev