aboutsummaryrefslogtreecommitdiff
path: root/datapath
diff options
context:
space:
mode:
authorPravin B Shelar <pshelar@nicira.com>2012-03-23 10:50:08 -0700
committerPravin B Shelar <pshelar@nicira.com>2012-03-23 10:50:08 -0700
commit69b0983e3868ae5249e06d4ca9418d7ca439480f (patch)
treea775df8f21d53ae09295630af5ddf69cf8be1875 /datapath
parentf7f53d381d2c271185357682741e833d67d5508d (diff)
datapath: Support for kernel 3.3
Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Acked-by: Jesse Gross <jesse@nicira.com>
Diffstat (limited to 'datapath')
-rw-r--r--datapath/datapath.c4
-rw-r--r--datapath/linux/compat/include/linux/etherdevice.h4
-rw-r--r--datapath/linux/compat/include/linux/genetlink.h6
-rw-r--r--datapath/linux/compat/include/linux/if_vlan.h7
-rw-r--r--datapath/linux/compat/include/net/dst.h8
-rw-r--r--datapath/tunnel.c2
6 files changed, 20 insertions, 11 deletions
diff --git a/datapath/datapath.c b/datapath/datapath.c
index d64fc32b..4dde50b2 100644
--- a/datapath/datapath.c
+++ b/datapath/datapath.c
@@ -62,8 +62,8 @@
#include "vport-internal_dev.h"
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) || \
- LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
-#error Kernels before 2.6.18 or after 3.2 are not supported by this version of Open vSwitch.
+ LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)
+#error Kernels before 2.6.18 or after 3.3 are not supported by this version of Open vSwitch.
#endif
#define REHASH_FLOW_INTERVAL (10 * 60 * HZ)
diff --git a/datapath/linux/compat/include/linux/etherdevice.h b/datapath/linux/compat/include/linux/etherdevice.h
index 7a8178e5..7f04c962 100644
--- a/datapath/linux/compat/include/linux/etherdevice.h
+++ b/datapath/linux/compat/include/linux/etherdevice.h
@@ -1,15 +1,15 @@
#ifndef __LINUX_ETHERDEVICE_WRAPPER_H
#define __LINUX_ETHERDEVICE_WRAPPER_H 1
-#include_next <linux/etherdevice.h>
#include <linux/version.h>
+#include_next <linux/etherdevice.h>
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)
static inline void eth_hw_addr_random(struct net_device *dev)
{
random_ether_addr(dev->dev_addr);
}
-#elif LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)
static inline void eth_hw_addr_random(struct net_device *dev)
{
dev_hw_addr_random(dev, dev->dev_addr);
diff --git a/datapath/linux/compat/include/linux/genetlink.h b/datapath/linux/compat/include/linux/genetlink.h
index f7b96d96..8b894be3 100644
--- a/datapath/linux/compat/include/linux/genetlink.h
+++ b/datapath/linux/compat/include/linux/genetlink.h
@@ -1,18 +1,18 @@
#ifndef __GENETLINK_WRAPPER_H
#define __GENETLINK_WRAPPER_H 1
+#include <linux/version.h>
#include_next <linux/genetlink.h>
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)
#ifdef CONFIG_PROVE_LOCKING
-/* No version of the kernel has this function, but our locking scheme depends
- * on genl_mutex so for clarity we use it where appropriate. */
static inline int lockdep_genl_is_held(void)
{
return 1;
}
#endif
+#endif
-/* This is also not upstream yet. */
#ifndef genl_dereference
#include <linux/rcupdate.h>
diff --git a/datapath/linux/compat/include/linux/if_vlan.h b/datapath/linux/compat/include/linux/if_vlan.h
index 326abb27..66ed0583 100644
--- a/datapath/linux/compat/include/linux/if_vlan.h
+++ b/datapath/linux/compat/include/linux/if_vlan.h
@@ -1,8 +1,9 @@
#ifndef __LINUX_IF_VLAN_WRAPPER_H
#define __LINUX_IF_VLAN_WRAPPER_H 1
-#include_next <linux/if_vlan.h>
#include <linux/skbuff.h>
+#include <linux/version.h>
+#include_next <linux/if_vlan.h>
/*
* The behavior of __vlan_put_tag() has changed over time:
@@ -54,8 +55,7 @@ static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, u16 vlan_tci)
#define VLAN_TAG_PRESENT VLAN_CFI_MASK
#endif
-/* This function is not exported from kernel. OVS Upstreaming patch will
- * fix that. */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)
static inline void vlan_set_encap_proto(struct sk_buff *skb, struct vlan_hdr *vhdr)
{
__be16 proto;
@@ -88,4 +88,5 @@ static inline void vlan_set_encap_proto(struct sk_buff *skb, struct vlan_hdr *vh
*/
skb->protocol = htons(ETH_P_802_2);
}
+#endif
#endif /* linux/if_vlan.h wrapper */
diff --git a/datapath/linux/compat/include/net/dst.h b/datapath/linux/compat/include/net/dst.h
index f481a9d3..9d9e6160 100644
--- a/datapath/linux/compat/include/net/dst.h
+++ b/datapath/linux/compat/include/net/dst.h
@@ -1,8 +1,16 @@
#ifndef __NET_DST_WRAPPER_H
#define __NET_DST_WRAPPER_H 1
+#include <linux/version.h>
#include_next <net/dst.h>
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) && \
+ LINUX_VERSION_CODE > KERNEL_VERSION(3,0,20)
+
+#define dst_get_neighbour_noref dst_get_neighbour
+
+#endif
+
#ifndef HAVE_SKB_DST_ACCESSOR_FUNCS
static inline void skb_dst_drop(struct sk_buff *skb)
diff --git a/datapath/tunnel.c b/datapath/tunnel.c
index cdbf94ab..ea97e394 100644
--- a/datapath/tunnel.c
+++ b/datapath/tunnel.c
@@ -111,7 +111,7 @@ static unsigned int multicast_ports __read_mostly;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0)
static struct hh_cache *rt_hh(struct rtable *rt)
{
- struct neighbour *neigh = dst_get_neighbour(&rt->dst);
+ struct neighbour *neigh = dst_get_neighbour_noref(&rt->dst);
if (!neigh || !(neigh->nud_state & NUD_CONNECTED) ||
!neigh->hh.hh_len)
return NULL;