Commit f7ba868b authored by David Ahern's avatar David Ahern Committed by David S. Miller

net: Use VRF index for oif in ip_send_unicast_reply

If output device is not specified use VRF device if input device is
enslaved. This is needed to ensure tcp acks and resets go out VRF device.
Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3bfd8472
...@@ -1542,6 +1542,7 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, ...@@ -1542,6 +1542,7 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb,
struct net *net = sock_net(sk); struct net *net = sock_net(sk);
struct sk_buff *nskb; struct sk_buff *nskb;
int err; int err;
int oif;
if (__ip_options_echo(&replyopts.opt.opt, skb, sopt)) if (__ip_options_echo(&replyopts.opt.opt, skb, sopt))
return; return;
...@@ -1559,7 +1560,11 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb, ...@@ -1559,7 +1560,11 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb,
daddr = replyopts.opt.opt.faddr; daddr = replyopts.opt.opt.faddr;
} }
flowi4_init_output(&fl4, arg->bound_dev_if, oif = arg->bound_dev_if;
if (!oif && netif_index_is_vrf(net, skb->skb_iif))
oif = skb->skb_iif;
flowi4_init_output(&fl4, oif,
IP4_REPLY_MARK(net, skb->mark), IP4_REPLY_MARK(net, skb->mark),
RT_TOS(arg->tos), RT_TOS(arg->tos),
RT_SCOPE_UNIVERSE, ip_hdr(skb)->protocol, RT_SCOPE_UNIVERSE, ip_hdr(skb)->protocol,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment