|
@@ -1193,7 +1193,12 @@ void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb)
|
|
|
ipv6_sk_rxinfo(sk);
|
|
|
|
|
|
if (prepare && skb_rtable(skb)) {
|
|
|
- pktinfo->ipi_ifindex = inet_iif(skb);
|
|
|
+ /* skb->cb is overloaded: prior to this point it is IP{6}CB
|
|
|
+ * which has interface index (iif) as the first member of the
|
|
|
+ * underlying inet{6}_skb_parm struct. This code then overlays
|
|
|
+ * PKTINFO_SKB_CB and in_pktinfo also has iif as the first
|
|
|
+ * element so the iif is picked up from the prior IPCB
|
|
|
+ */
|
|
|
pktinfo->ipi_spec_dst.s_addr = fib_compute_spec_dst(skb);
|
|
|
} else {
|
|
|
pktinfo->ipi_ifindex = 0;
|