@@ -245,11 +245,18 @@ static inline void ip_route_connect_init(struct
flowi4 *fl4, __be32 dst, __be32
__be16 sport, __be16 dport,
struct sock *sk)
{
+ struct net_device *dev = dev_get_by_index(sock_net(sk), oif);
__u8 flow_flags = 0;
if (inet_sk(sk)->transparent)
flow_flags |= FLOWI_FLAG_ANYSRC;
+ if (dev) {
+ if (netif_is_vrf(dev))
+ flow_flags |= FLOWI_FLAG_VRFSRC;
+ dev_put(dev);
+ }
+
flowi4_init_output(fl4, oif, sk->sk_mark, tos, RT_SCOPE_UNIVERSE,
protocol, flow_flags, dst, src, dport, sport);