.. | .. |
---|
1240 | 1240 | |
---|
1241 | 1241 | static void ipv4_send_dest_unreach(struct sk_buff *skb) |
---|
1242 | 1242 | { |
---|
| 1243 | + struct net_device *dev; |
---|
1243 | 1244 | struct ip_options opt; |
---|
1244 | 1245 | int res; |
---|
1245 | 1246 | |
---|
.. | .. |
---|
1257 | 1258 | opt.optlen = ip_hdr(skb)->ihl * 4 - sizeof(struct iphdr); |
---|
1258 | 1259 | |
---|
1259 | 1260 | rcu_read_lock(); |
---|
1260 | | - res = __ip_options_compile(dev_net(skb->dev), &opt, skb, NULL); |
---|
| 1261 | + dev = skb->dev ? skb->dev : skb_rtable(skb)->dst.dev; |
---|
| 1262 | + res = __ip_options_compile(dev_net(dev), &opt, skb, NULL); |
---|
1261 | 1263 | rcu_read_unlock(); |
---|
1262 | 1264 | |
---|
1263 | 1265 | if (res) |
---|
.. | .. |
---|
2058 | 2060 | int h = fib_multipath_hash(res->fi->fib_net, NULL, skb, hkeys); |
---|
2059 | 2061 | |
---|
2060 | 2062 | fib_select_multipath(res, h); |
---|
| 2063 | + IPCB(skb)->flags |= IPSKB_MULTIPATH; |
---|
2061 | 2064 | } |
---|
2062 | 2065 | #endif |
---|
2063 | 2066 | |
---|