Sure. Suppose a linux box has two interfaces (eth0 and eth1). We
On 10/14/19 12:07 AM, Zhiyuan Hou wrote:
On 2019/10/12 6:59 äå, Eric Dumazet wrote:Can you please add a test, so that we can see what you are trying to do exactly ?
On 10/12/19 12:16 AM, Zhiyuan Hou wrote:When send a skb from local to external, the dst->dst_input will be
In act_mirred's ingress redirection, if the skb's dst_entry is validWhy is dst_discard used ?
when call function netif_receive_skb, the fllowing l3 stack process
(ip_rcv_finish_core) will check dst_entry and skip the routing
decision. Using the old dst_entry is unexpected and may discard the
skb in some case. For example dst->dst_input points to dst_discard.
This patch drops the skb's dst_entry before calling netif_receive_skb
so that the skb can be made routing decision like a normal ingress
skb.
Signed-off-by: Zhiyuan Hou <zhiyuan2048@xxxxxxxxxxxxxxxxx>
---
 net/sched/act_mirred.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
index 9ce073a05414..6108a64c0cd5 100644
--- a/net/sched/act_mirred.c
+++ b/net/sched/act_mirred.c
@@ -18,6 +18,7 @@
 #include <linux/gfp.h>
 #include <linux/if_arp.h>
 #include <net/net_namespace.h>
+#include <net/dst.h>
 #include <net/netlink.h>
 #include <net/pkt_sched.h>
 #include <net/pkt_cls.h>
@@ -298,8 +299,10 @@ static int tcf_mirred_act(struct sk_buff *skb, const struct tc_action *a,
 Â if (!want_ingress)
ÂÂÂÂÂÂÂÂÂ err = dev_queue_xmit(skb2);
-ÂÂÂ else
+ÂÂÂ else {
+ÂÂÂÂÂÂÂ skb_dst_drop(skb2);
ÂÂÂÂÂÂÂÂÂ err = netif_receive_skb(skb2);
+ÂÂÂ }
 Â if (err) {
 out:
assigned dst_discard after routing decision. So if we redirect these
skbs to ingress stack, it will be dropped.
For ipvlan l2 mode or macvlan, clsact egress filters on master deivce
may also meet these skbs even if they came from slave device. Ingress
redirection on these skbs may drop them on l3 stack.
Yes, I will add following tag in v2.
Please add a Fixes: tag then.This could actually drop packets, for loopback.No, this is a different issue ^_^.
A Fixes: tag would tremendously help, I wonder if you are not working around
the other issue Wei was tracking yesterday ( https://www.spinics.net/lists/netdev/msg604397.html )
Thanks.