|
@@ -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;
|