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
netdev_pltap,netdev_tunnel: moved to new API
[sliver-openvswitch.git]
/
datapath
/
tunnel.c
diff --git
a/datapath/tunnel.c
b/datapath/tunnel.c
index
9102786
..
bd63da5
100644
(file)
--- a/
datapath/tunnel.c
+++ b/
datapath/tunnel.c
@@
-144,6
+144,9
@@
static struct sk_buff *handle_offloads(struct sk_buff *skb)
if (skb_is_gso(skb)) {
struct sk_buff *nskb;
if (skb_is_gso(skb)) {
struct sk_buff *nskb;
+ char cb[sizeof(skb->cb)];
+
+ memcpy(cb, skb->cb, sizeof(cb));
nskb = __skb_gso_segment(skb, 0, false);
if (IS_ERR(nskb)) {
nskb = __skb_gso_segment(skb, 0, false);
if (IS_ERR(nskb)) {
@@
-153,6
+156,10
@@
static struct sk_buff *handle_offloads(struct sk_buff *skb)
consume_skb(skb);
skb = nskb;
consume_skb(skb);
skb = nskb;
+ while (nskb) {
+ memcpy(nskb->cb, cb, sizeof(cb));
+ nskb = nskb->next;
+ }
} else if (get_ip_summed(skb) == OVS_CSUM_PARTIAL) {
/* Pages aren't locked and could change at any time.
* If this happens after we compute the checksum, the
} else if (get_ip_summed(skb) == OVS_CSUM_PARTIAL) {
/* Pages aren't locked and could change at any time.
* If this happens after we compute the checksum, the
@@
-186,7
+193,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;