From e0d7fd09066712420ea076a8efb5559a3fe297b3 Mon Sep 17 00:00:00 2001 From: Pravin B Shelar Date: Mon, 5 Nov 2012 13:38:34 -0800 Subject: [PATCH] datapath: Add Upstream id for GRE type. Once GRE is upstream it will have new type to have continuous sequence of ids for vport type. Following patch adds this ID to have compatibility with it. Signed-off-by: Pravin B Shelar Acked-by: Jesse Gross --- datapath/vport-gre.c | 23 +++++++++++++++++++++++ datapath/vport.c | 1 + datapath/vport.h | 1 + include/linux/openvswitch.h | 1 + 4 files changed, 26 insertions(+) diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c index d02d4ec6..e810173f 100644 --- a/datapath/vport-gre.c +++ b/datapath/vport-gre.c @@ -488,6 +488,11 @@ static struct vport *gre_create(const struct vport_parms *parms) return ovs_tnl_create(parms, &ovs_gre_vport_ops, &gre_tnl_ops); } +static struct vport *gre_create_ft(const struct vport_parms *parms) +{ + return ovs_tnl_create(parms, &ovs_gre_ft_vport_ops, &gre_tnl_ops); +} + static const struct tnl_ops gre64_tnl_ops = { .tunnel_type = TNL_T_PROTO_GRE64, .ipproto = IPPROTO_GRE, @@ -536,6 +541,24 @@ static void gre_exit(void) inet_del_protocol(&gre_protocol_handlers, IPPROTO_GRE); } +const struct vport_ops ovs_gre_ft_vport_ops = { + .type = OVS_VPORT_TYPE_FT_GRE, + .flags = VPORT_F_TUN_ID, + .init = gre_init, + .exit = gre_exit, + .create = gre_create_ft, + .destroy = ovs_tnl_destroy, + .set_addr = ovs_tnl_set_addr, + .get_name = ovs_tnl_get_name, + .get_addr = ovs_tnl_get_addr, + .get_options = ovs_tnl_get_options, + .set_options = ovs_tnl_set_options, + .get_dev_flags = ovs_vport_gen_get_dev_flags, + .is_running = ovs_vport_gen_is_running, + .get_operstate = ovs_vport_gen_get_operstate, + .send = ovs_tnl_send, +}; + const struct vport_ops ovs_gre_vport_ops = { .type = OVS_VPORT_TYPE_GRE, .flags = VPORT_F_TUN_ID, diff --git a/datapath/vport.c b/datapath/vport.c index d9c8cfd2..bb2bd27c 100644 --- a/datapath/vport.c +++ b/datapath/vport.c @@ -41,6 +41,7 @@ static const struct vport_ops *base_vport_ops_list[] = { &ovs_internal_vport_ops, &ovs_patch_vport_ops, &ovs_gre_vport_ops, + &ovs_gre_ft_vport_ops, &ovs_gre64_vport_ops, #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26) &ovs_capwap_vport_ops, diff --git a/datapath/vport.h b/datapath/vport.h index 61d52743..5a7caf5f 100644 --- a/datapath/vport.h +++ b/datapath/vport.h @@ -254,6 +254,7 @@ extern const struct vport_ops ovs_netdev_vport_ops; extern const struct vport_ops ovs_internal_vport_ops; extern const struct vport_ops ovs_patch_vport_ops; extern const struct vport_ops ovs_gre_vport_ops; +extern const struct vport_ops ovs_gre_ft_vport_ops; extern const struct vport_ops ovs_gre64_vport_ops; extern const struct vport_ops ovs_capwap_vport_ops; diff --git a/include/linux/openvswitch.h b/include/linux/openvswitch.h index 89feb61f..e7613574 100644 --- a/include/linux/openvswitch.h +++ b/include/linux/openvswitch.h @@ -182,6 +182,7 @@ enum ovs_vport_type { OVS_VPORT_TYPE_UNSPEC, OVS_VPORT_TYPE_NETDEV, /* network device */ OVS_VPORT_TYPE_INTERNAL, /* network device implemented by datapath */ + OVS_VPORT_TYPE_FT_GRE, /* Flow based GRE tunnel. */ OVS_VPORT_TYPE_PATCH = 100, /* virtual tunnel connecting two vports */ OVS_VPORT_TYPE_GRE, /* GRE tunnel */ OVS_VPORT_TYPE_CAPWAP, /* CAPWAP tunnel */ -- 2.30.2