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: Fix tunnel source port selection for mega flow
[sliver-openvswitch.git]
/
datapath
/
tunnel.c
diff --git
a/datapath/tunnel.c
b/datapath/tunnel.c
index
8cf1c16
..
ef46a69
100644
(file)
--- a/
datapath/tunnel.c
+++ b/
datapath/tunnel.c
@@
-37,12
+37,6
@@
#include "vlan.h"
#include "vport.h"
#include "vlan.h"
#include "vport.h"
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)
-#define rt_dst(rt) (rt->dst)
-#else
-#define rt_dst(rt) (rt->u.dst)
-#endif
-
/**
* ovs_tnl_rcv - ingress point for generic tunnel code
*
/**
* ovs_tnl_rcv - ingress point for generic tunnel code
*
@@
-58,7
+52,8
@@
* - skb->csum does not include the inner Ethernet header.
* - The layer pointers are undefined.
*/
* - skb->csum does not include the inner Ethernet header.
* - The layer pointers are undefined.
*/
-void ovs_tnl_rcv(struct vport *vport, struct sk_buff *skb)
+void ovs_tnl_rcv(struct vport *vport, struct sk_buff *skb,
+ struct ovs_key_ipv4_tunnel *tun_key)
{
struct ethhdr *eh;
{
struct ethhdr *eh;
@@
-81,12
+76,12
@@
void ovs_tnl_rcv(struct vport *vport, struct sk_buff *skb)
return;
}
return;
}
- ovs_vport_receive(vport, skb);
+ ovs_vport_receive(vport, skb
, tun_key
);
}
}
-st
atic st
ruct rtable *find_route(struct net *net,
- __be32 *saddr, __be32 daddr, u8 ipproto,
- u8 tos, u32 skb_mark)
+struct rtable *find_route(struct net *net,
+
__be32 *saddr, __be32 daddr, u8 ipproto,
+
u8 tos, u32 skb_mark)
{
struct rtable *rt;
/* Tunnel configuration keeps DSCP part of TOS bits, But Linux
{
struct rtable *rt;
/* Tunnel configuration keeps DSCP part of TOS bits, But Linux
@@
-191,7
+186,9
@@
u16 ovs_tnl_get_src_port(struct sk_buff *skb)
int low;
int high;
unsigned int range;
int low;
int high;
unsigned int range;
- u32 hash = OVS_CB(skb)->flow->hash;
+ struct sw_flow_key *pkt_key = OVS_CB(skb)->pkt_key;
+ u32 hash = jhash2((const u32 *)pkt_key,
+ sizeof(*pkt_key) / sizeof(u32), 0);
inet_get_local_port_range(&low, &high);
range = (high - low) + 1;
inet_get_local_port_range(&low, &high);
range = (high - low) + 1;
@@
-288,7
+285,7
@@
int ovs_tnl_send(struct vport *vport, struct sk_buff *skb,
iph->tos = OVS_CB(skb)->tun_key->ipv4_tos;
iph->ttl = OVS_CB(skb)->tun_key->ipv4_ttl;
iph->frag_off = OVS_CB(skb)->tun_key->tun_flags &
iph->tos = OVS_CB(skb)->tun_key->ipv4_tos;
iph->ttl = OVS_CB(skb)->tun_key->ipv4_ttl;
iph->frag_off = OVS_CB(skb)->tun_key->tun_flags &
-
OVS_TNL_F
_DONT_FRAGMENT ? htons(IP_DF) : 0;
+
TUNNEL
_DONT_FRAGMENT ? htons(IP_DF) : 0;
/*
* Allow our local IP stack to fragment the outer packet even
* if the DF bit is set as a last resort. We also need to
/*
* Allow our local IP stack to fragment the outer packet even
* if the DF bit is set as a last resort. We also need to