Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -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,
			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,