This brings the code up to sync with the kernel as
of changeset "net-next: remove useless union keyword",
which was added between 2.6.35 and 2.6.35-rc1

Signed-off-by: Simon Horman <horms@verge.net.au>

--- 

Compile tested only

Index: openvswitch/acinclude.m4
===================================================================
--- openvswitch.orig/acinclude.m4	2010-08-06 18:12:33.000000000 +0900
+++ openvswitch/acinclude.m4	2010-08-06 18:22:00.000000000 +0900
@@ -201,6 +201,9 @@ AC_DEFUN([OVS_CHECK_LINUX26_COMPAT], [
   OVS_GREP_IFELSE([$KSRC26/include/net/netlink.h], [nla_get_be16],
                   [OVS_DEFINE([HAVE_NLA_GET_BE16])])
 
+  OVS_GREP_IFELSE([$KSRC26/include/net/route.h], [union],
+                  [OVS_DEFINE([HAVE_RT_UNION])])
+
   OVS_CHECK_LOG2_H
 
   if cmp -s datapath/linux-2.6/kcompat.h.new \
Index: openvswitch/datapath/linux-2.6/compat-2.6/include/net/route.h
===================================================================
--- openvswitch.orig/datapath/linux-2.6/compat-2.6/include/net/route.h	2010-08-06 18:11:14.000000000 +0900
+++ openvswitch/datapath/linux-2.6/compat-2.6/include/net/route.h	2010-08-06 18:22:42.000000000 +0900
@@ -11,4 +11,10 @@
 
 #endif /* linux kernel < 2.6.25 */
 
+#ifdef HAVE_RT_UNION
+#define rt_dst(rt) (rt->u.dst)
+#else
+#define rt_dst(rt) (rt->dst)
+#endif
+
 #endif
Index: openvswitch/datapath/vport-gre.c
===================================================================
--- openvswitch.orig/datapath/vport-gre.c	2010-08-06 18:11:14.000000000 +0900
+++ openvswitch/datapath/vport-gre.c	2010-08-06 18:22:00.000000000 +0900
@@ -968,7 +968,7 @@ static int build_packet(struct vport *vp
 
 	memcpy(new_iph, iph, sizeof(struct iphdr));
 	new_iph->frag_off = frag_off;
-	ip_select_ident(new_iph, &rt->u.dst, NULL);
+	ip_select_ident(new_iph, &rt_dst(rt), NULL);
 
 	create_gre_header(skb, mutable);
 
@@ -1062,11 +1062,11 @@ static int gre_send(struct vport *vport,
 #endif
 	}
 	if (!iph.ttl)
-		iph.ttl = dst_metric(&rt->u.dst, RTAX_HOPLIMIT);
+		iph.ttl = dst_metric(&rt_dst(rt), RTAX_HOPLIMIT);
 
 	iph.frag_off = (mutable->port_config.flags & GRE_F_PMTUD) ? htons(IP_DF) : 0;
 	if (iph.frag_off)
-		mtu = dst_mtu(&rt->u.dst)
+		mtu = dst_mtu(&rt_dst(rt))
 			- ETH_HLEN
 			- mutable->tunnel_hlen
 			- (eth_hdr(skb)->h_proto == htons(ETH_P_8021Q) ? VLAN_HLEN : 0);
@@ -1091,7 +1091,7 @@ static int gre_send(struct vport *vport,
 	nf_reset(skb);
 	secpath_reset(skb);
 	skb_dst_drop(skb);
-	skb_dst_set(skb, &rt->u.dst);
+	skb_dst_set(skb, &rt_dst(rt));
 
 	/* If we are doing GSO on a pskb it is better to make sure that the
 	 * headroom is correct now.  We will only have to copy the portion in
@@ -1099,7 +1099,7 @@ static int gre_send(struct vport *vport,
 	 * the segments.  This is particularly beneficial on Xen where we get
 	 * lots of GSO pskbs.  Conversely, we delay copying if it is just to
 	 * get our own writable clone because GSO may do the copy for us. */
-	max_headroom = LL_RESERVED_SPACE(rt->u.dst.dev) + rt->u.dst.header_len
+	max_headroom = LL_RESERVED_SPACE(rt_dst(rt).dev) + rt_dst(rt).header_len
 			+ mutable->tunnel_hlen;
 
 	if (skb_headroom(skb) < max_headroom) {



