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 d02d4ec62..e810173ff 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 d9c8cfd20..bb2bd27c7 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 61d527430..5a7caf5f7 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 89feb61f6..e76135749 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.45.2