|
@@ -96,6 +96,7 @@
|
|
|
#include <net/xfrm.h>
|
|
|
#include <net/inet_common.h>
|
|
|
#include <net/ip_fib.h>
|
|
|
+#include <net/vrf.h>
|
|
|
|
|
|
/*
|
|
|
* Build xmit assembly blocks
|
|
@@ -425,6 +426,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
|
|
|
fl4.flowi4_mark = mark;
|
|
|
fl4.flowi4_tos = RT_TOS(ip_hdr(skb)->tos);
|
|
|
fl4.flowi4_proto = IPPROTO_ICMP;
|
|
|
+ fl4.flowi4_oif = vrf_master_ifindex_rcu(skb->dev) ? : skb->dev->ifindex;
|
|
|
security_skb_classify_flow(skb, flowi4_to_flowi(&fl4));
|
|
|
rt = ip_route_output_key(net, &fl4);
|
|
|
if (IS_ERR(rt))
|
|
@@ -458,6 +460,8 @@ static struct rtable *icmp_route_lookup(struct net *net,
|
|
|
fl4->flowi4_proto = IPPROTO_ICMP;
|
|
|
fl4->fl4_icmp_type = type;
|
|
|
fl4->fl4_icmp_code = code;
|
|
|
+ fl4->flowi4_oif = vrf_master_ifindex_rcu(skb_in->dev) ? : skb_in->dev->ifindex;
|
|
|
+
|
|
|
security_skb_classify_flow(skb_in, flowi4_to_flowi(fl4));
|
|
|
rt = __ip_route_output_key(net, fl4);
|
|
|
if (IS_ERR(rt))
|