netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ido Schimmel <idosch@idosch.org>
To: gaoxingwang <gaoxingwang1@huawei.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	davem@davemloft.net, yoshfuji@linux-ipv6.org, kuba@kernel.org,
	pabeni@redhat.com, shuah@kernel.org, liaichun@huawei.com,
	yanan@huawei.com
Subject: Re: ipv4:the same route is added repeatedly
Date: Tue, 14 Mar 2023 19:12:24 +0200	[thread overview]
Message-ID: <ZBCq+KXtxWXLPFNF@shredder> (raw)
In-Reply-To: <20230314144159.2354729-1-gaoxingwang1@huawei.com>

On Tue, Mar 14, 2023 at 10:41:59PM +0800, gaoxingwang wrote:
> When i add default route in /etc/sysconfig/static-routes, and then restart network service, it appears to add two same default route:
> [root@localhost ~]# ip r
> default via 9.82.0.1 dev eth0 
> default via 9.82.0.1 dev eth0 
> 
> The static-routes file contents are as follows:
> any net 0.0.0.0 netmask 0.0.0.0 gw 110.1.62.1
> 
> This problem seems to be related to patch f96a3d7455(ipv4: Fix incorrect route flushing when source address is deleted). When I revert this patch, the problem gets fixed.
> Is that a known issue?

'fi->fib_tb_id' is initialized from 'cfg->fc_table' which is not
initialized in the IOCTL path which I guess is what you are using given
the syntax of the file. You can therefore end up having two identical
routes that only differ in their FIB info due to its associated table
ID.

Can you try this fix [1]? Seems to be working for me. Tested using this
reproducer [2].

With f96a3d7455:

 # ./ioctl_repro.sh
 default via 192.0.2.2 dev dummy10
 default via 192.0.2.2 dev dummy10

With f96a3d7455 reverted:

 # ./ioctl_repro.sh
 SIOCADDRT: File exists
 default via 192.0.2.2 dev dummy10

With the fix:

 # ./ioctl_repro.sh
 SIOCADDRT: File exists
 default via 192.0.2.2 dev dummy10

Thanks

[1]
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index b5736ef16ed2..390f4be7f7be 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -576,6 +576,9 @@ static int rtentry_to_fib_config(struct net *net, int cmd, struct rtentry *rt,
 			cfg->fc_scope = RT_SCOPE_UNIVERSE;
 	}
 
+	if (!cfg->fc_table)
+		cfg->fc_table = RT_TABLE_MAIN;
+
 	if (cmd == SIOCDELRT)
 		return 0;
 
[2]
#!/bin/bash

ip link del dev dummy10 &> /dev/null
ip link add name dummy10 up type dummy
ip address add 192.0.2.1/24 dev dummy10

ip route add default via 192.0.2.2
route add default gw 192.0.2.2
ip -4 r show default

  reply	other threads:[~2023-03-14 17:12 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-14 14:41 ipv4:the same route is added repeatedly gaoxingwang
2023-03-14 17:12 ` Ido Schimmel [this message]
2023-03-15  7:43   ` gaoxingwang
2023-03-15  8:54     ` Ido Schimmel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZBCq+KXtxWXLPFNF@shredder \
    --to=idosch@idosch.org \
    --cc=davem@davemloft.net \
    --cc=gaoxingwang1@huawei.com \
    --cc=kuba@kernel.org \
    --cc=liaichun@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=shuah@kernel.org \
    --cc=yanan@huawei.com \
    --cc=yoshfuji@linux-ipv6.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).