|
@@ -135,10 +135,14 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
|
|
|
struct ipv6_opt_hdr *exthdr;
|
|
|
const unsigned char *nh = skb_network_header(skb);
|
|
|
u8 nexthdr = nh[IP6CB(skb)->nhoff];
|
|
|
+ int oif = 0;
|
|
|
+
|
|
|
+ if (skb_dst(skb))
|
|
|
+ oif = skb_dst(skb)->dev->ifindex;
|
|
|
|
|
|
memset(fl6, 0, sizeof(struct flowi6));
|
|
|
fl6->flowi6_mark = skb->mark;
|
|
|
- fl6->flowi6_oif = skb_dst(skb)->dev->ifindex;
|
|
|
+ fl6->flowi6_oif = reverse ? skb->skb_iif : oif;
|
|
|
|
|
|
fl6->daddr = reverse ? hdr->saddr : hdr->daddr;
|
|
|
fl6->saddr = reverse ? hdr->daddr : hdr->saddr;
|
|
@@ -285,7 +289,7 @@ static struct dst_ops xfrm6_dst_ops = {
|
|
|
.destroy = xfrm6_dst_destroy,
|
|
|
.ifdown = xfrm6_dst_ifdown,
|
|
|
.local_out = __ip6_local_out,
|
|
|
- .gc_thresh = 1024,
|
|
|
+ .gc_thresh = 32768,
|
|
|
};
|
|
|
|
|
|
static struct xfrm_policy_afinfo xfrm6_policy_afinfo = {
|