git://git.onelab.eu
/
sliver-openvswitch.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
datapath: Move kernel version check to configure.
[sliver-openvswitch.git]
/
datapath
/
datapath.c
diff --git
a/datapath/datapath.c
b/datapath/datapath.c
index
1de50c1
..
b6410c4
100644
(file)
--- a/
datapath/datapath.c
+++ b/
datapath/datapath.c
@@
-58,15
+58,9
@@
#include "datapath.h"
#include "flow.h"
#include "vlan.h"
#include "datapath.h"
#include "flow.h"
#include "vlan.h"
-#include "tunnel.h"
#include "vport-internal_dev.h"
#include "vport-netdev.h"
#include "vport-internal_dev.h"
#include "vport-netdev.h"
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) || \
- LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,0)
-#error Kernels before 2.6.18 or after 3.8 are not supported by this version of Open vSwitch.
-#endif
-
#define REHASH_FLOW_INTERVAL (10 * 60 * HZ)
static void rehash_flow_table(struct work_struct *work);
static DECLARE_DELAYED_WORK(rehash_flow_wq, rehash_flow_table);
#define REHASH_FLOW_INTERVAL (10 * 60 * HZ)
static void rehash_flow_table(struct work_struct *work);
static DECLARE_DELAYED_WORK(rehash_flow_wq, rehash_flow_table);
@@
-280,6
+274,7
@@
static struct genl_family dp_packet_genl_family = {
.version = OVS_PACKET_VERSION,
.maxattr = OVS_PACKET_ATTR_MAX,
SET_NETNSOK
.version = OVS_PACKET_VERSION,
.maxattr = OVS_PACKET_ATTR_MAX,
SET_NETNSOK
+ SET_PARALLEL_OPS
};
int ovs_dp_upcall(struct datapath *dp, struct sk_buff *skb,
};
int ovs_dp_upcall(struct datapath *dp, struct sk_buff *skb,
@@
-624,7
+619,7
@@
static int validate_and_copy_set_tun(const struct nlattr *attr,
int err, start;
ovs_match_init(&match, &key, NULL);
int err, start;
ovs_match_init(&match, &key, NULL);
- err = ipv4_tun_from_nlattr(nla_data(attr), &match, false);
+ err =
ovs_
ipv4_tun_from_nlattr(nla_data(attr), &match, false);
if (err)
return err;
if (err)
return err;
@@
-726,6
+721,12
@@
static int validate_set(const struct nlattr *a,
return validate_tp_port(flow_key);
return validate_tp_port(flow_key);
+ case OVS_KEY_ATTR_SCTP:
+ if (flow_key->ip.proto != IPPROTO_SCTP)
+ return -EINVAL;
+
+ return validate_tp_port(flow_key);
+
default:
return -EINVAL;
}
default:
return -EINVAL;
}
@@
-1010,6
+1011,7
@@
static struct genl_family dp_flow_genl_family = {
.version = OVS_FLOW_VERSION,
.maxattr = OVS_FLOW_ATTR_MAX,
SET_NETNSOK
.version = OVS_FLOW_VERSION,
.maxattr = OVS_FLOW_ATTR_MAX,
SET_NETNSOK
+ SET_PARALLEL_OPS
};
static struct genl_multicast_group ovs_dp_flow_multicast_group = {
};
static struct genl_multicast_group ovs_dp_flow_multicast_group = {
@@
-1065,8
+1067,8
@@
static int set_action_to_attr(const struct nlattr *a, struct sk_buff *skb)
if (!start)
return -EMSGSIZE;
if (!start)
return -EMSGSIZE;
- err =
ipv4_tun_to_nlattr(skb
,
-
nla_data(ovs_key),
nla_data(ovs_key));
+ err =
ovs_ipv4_tun_to_nlattr(skb, nla_data(ovs_key)
,
+
nla_data(ovs_key));
if (err)
return err;
nla_nest_end(skb, start);
if (err)
return err;
nla_nest_end(skb, start);
@@
-1127,7
+1129,6
@@
static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp,
u32 seq, u32 flags, u8 cmd)
{
const int skb_orig_len = skb->len;
u32 seq, u32 flags, u8 cmd)
{
const int skb_orig_len = skb->len;
- struct sw_flow_mask *mask;
struct nlattr *start;
struct ovs_flow_stats stats;
struct ovs_header *ovs_header;
struct nlattr *start;
struct ovs_flow_stats stats;
struct ovs_header *ovs_header;
@@
-1157,8
+1158,7
@@
static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp,
if (!nla)
goto nla_put_failure;
if (!nla)
goto nla_put_failure;
- mask = rcu_dereference_check(flow->mask, lockdep_ovsl_is_held());
- err = ovs_flow_to_nlattrs(&flow->key, &mask->key, skb);
+ err = ovs_flow_to_nlattrs(&flow->key, &flow->mask->key, skb);
if (err)
goto error;
if (err)
goto error;
@@
-1344,7
+1344,7
@@
static int ovs_flow_cmd_new_or_set(struct sk_buff *skb, struct genl_info *info)
}
ovs_sw_flow_mask_add_ref(mask_p);
}
ovs_sw_flow_mask_add_ref(mask_p);
-
rcu_assign_pointer(flow->mask, mask_p)
;
+
flow->mask = mask_p
;
rcu_assign_pointer(flow->sf_acts, acts);
/* Put flow in bucket. */
rcu_assign_pointer(flow->sf_acts, acts);
/* Put flow in bucket. */
@@
-1591,6
+1591,7
@@
static struct genl_family dp_datapath_genl_family = {
.version = OVS_DATAPATH_VERSION,
.maxattr = OVS_DP_ATTR_MAX,
SET_NETNSOK
.version = OVS_DATAPATH_VERSION,
.maxattr = OVS_DP_ATTR_MAX,
SET_NETNSOK
+ SET_PARALLEL_OPS
};
static struct genl_multicast_group ovs_dp_datapath_multicast_group = {
};
static struct genl_multicast_group ovs_dp_datapath_multicast_group = {
@@
-1970,6
+1971,7
@@
static struct genl_family dp_vport_genl_family = {
.version = OVS_VPORT_VERSION,
.maxattr = OVS_VPORT_ATTR_MAX,
SET_NETNSOK
.version = OVS_VPORT_VERSION,
.maxattr = OVS_VPORT_ATTR_MAX,
SET_NETNSOK
+ SET_PARALLEL_OPS
};
struct genl_multicast_group ovs_dp_vport_multicast_group = {
};
struct genl_multicast_group ovs_dp_vport_multicast_group = {
@@
-2459,6
+2461,8
@@
static struct pernet_operations ovs_net_ops = {
.size = sizeof(struct ovs_net),
};
.size = sizeof(struct ovs_net),
};
+DEFINE_COMPAT_PNET_REG_FUNC(device);
+
static int __init dp_init(void)
{
int err;
static int __init dp_init(void)
{
int err;