From: Andreas Henriksson <andreas@fatal.se>
To: David Miller <davem@davemloft.net>
Cc: Ben Greear <greearb@candelatech.com>,
netdev@vger.kernel.org, shemminger@vyatta.com
Subject: Re: [iproute2] iproute2: Allow 'ip addr flush' to loop more than 10 times.
Date: Tue, 29 Jun 2010 11:58:30 +0200 [thread overview]
Message-ID: <20100629095830.GA6775@amd64.fatal.se> (raw)
In-Reply-To: <20100628.233600.242129599.davem@davemloft.net>
Hello all!
I'm sorry if I forgot to CC someone in this reply. I'm not subscribed
and all list archives seems to be very scared of showing recipiets
these days.
[...]
>
> I can understand the reasoning behind the limit, because if this is
> run by something automated it's not like someone is at the command
> line and hit Ctrl-C to break out of a looping instance.
>
> But practically speaking I bet this never happens.
I'm sorry to bring bad news, but your bet is wrong!
There are atleast two different places (IIRC route flush, addr flush)
in iproute2 which have these limits because they've been preventing
people from booting their systems in the past! I know atleast
ubuntu users has been having problems booting their computers because
firewalling scripts executed by init use iproute2 commands and
expect them to finish.
>
> So what makes sense to me is:
>
> 1) Loop forever by default.
I think this is a completely insane default. The iproute2 tools
are low-level and will be executed by higher level tools. Authors
of these higher level tools expect iproute2 commands to always finish.
Since iproute2 will *usually* finish, it's hard for these authors
that they need to add some switch to always get this behaviour.
>
> 2) When the number of loops exceeds a threshold (calculated by the
> number of addresses we see the first dump, divided by the number
> of deletes we can squeeze into the 4096 byte message), we emit
> a warning.
>
> 3) A hard limit, off by default, it available via your "-l" new option.
>
> But seriously we can determine forward progress quite easily I think.
>
> Each loop, we see if the dump returns a smaller number of addresses
> than the last iteration. If so, we just keep going.
This would be a much better solution!
>
> If the number of addresses increases, I think we can bail in this
> case.
>
> This logic would only ever trigger iff another entity is adding a
> large number of addresses simultaneously with our flush. And frankly
> speaking the person doing the flush probably doesn't expect that to be
> happening. You're flushing all of the addresses so you can start with
> a clean slate and then add specific addresses back, or whatever.
>
How about implementing it in the kernel so iproute2 can tell the kernel
via netlink "flush <addresses|routes> on interface X" with a single
netlink message?
I guess the kernel side has some kind of lock here that will prevent
addresses being added and removed at the same time?
Please think about this more before re-introducing the same problems again!
I guess with modern distributions now using parallell boot the issue
will not block the entire bootup anymore, but firewalls being blocked
forever by iproute2 and not coming up might be very bad in some circumstances.
--
Andreas Henriksson
next prev parent reply other threads:[~2010-06-29 10:14 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-29 5:55 [iproute2] iproute2: Allow 'ip addr flush' to loop more than 10 times greearb
2010-06-29 6:12 ` David Miller
2010-06-29 6:27 ` Ben Greear
2010-06-29 6:36 ` David Miller
2010-06-29 9:58 ` Andreas Henriksson [this message]
2010-06-29 14:59 ` Ben Greear
2010-06-29 15:10 ` Ben Greear
2010-06-29 17:02 ` David Miller
2010-06-29 8:03 ` Alexander Clouter
2010-06-29 15:04 ` Ben Greear
2010-06-29 15:48 ` Alexander Clouter
2010-06-29 16:30 ` Ben Greear
2010-08-04 21:00 ` Stephen Hemminger
2010-08-04 21:13 ` Ben Greear
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=20100629095830.GA6775@amd64.fatal.se \
--to=andreas@fatal.se \
--cc=davem@davemloft.net \
--cc=greearb@candelatech.com \
--cc=netdev@vger.kernel.org \
--cc=shemminger@vyatta.com \
/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).