|
@@ -1352,7 +1352,8 @@ void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *ar
|
|
}
|
|
}
|
|
|
|
|
|
{
|
|
{
|
|
- struct flowi fl = { .nl_u = { .ip4_u =
|
|
|
|
|
|
+ struct flowi fl = { .oif = arg->bound_dev_if,
|
|
|
|
+ .nl_u = { .ip4_u =
|
|
{ .daddr = daddr,
|
|
{ .daddr = daddr,
|
|
.saddr = rt->rt_spec_dst,
|
|
.saddr = rt->rt_spec_dst,
|
|
.tos = RT_TOS(ip_hdr(skb)->tos) } },
|
|
.tos = RT_TOS(ip_hdr(skb)->tos) } },
|
|
@@ -1376,6 +1377,7 @@ void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *ar
|
|
inet->tos = ip_hdr(skb)->tos;
|
|
inet->tos = ip_hdr(skb)->tos;
|
|
sk->sk_priority = skb->priority;
|
|
sk->sk_priority = skb->priority;
|
|
sk->sk_protocol = ip_hdr(skb)->protocol;
|
|
sk->sk_protocol = ip_hdr(skb)->protocol;
|
|
|
|
+ sk->sk_bound_dev_if = arg->bound_dev_if;
|
|
ip_append_data(sk, ip_reply_glue_bits, arg->iov->iov_base, len, 0,
|
|
ip_append_data(sk, ip_reply_glue_bits, arg->iov->iov_base, len, 0,
|
|
&ipc, rt, MSG_DONTWAIT);
|
|
&ipc, rt, MSG_DONTWAIT);
|
|
if ((skb = skb_peek(&sk->sk_write_queue)) != NULL) {
|
|
if ((skb = skb_peek(&sk->sk_write_queue)) != NULL) {
|