Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 Feb 2015 13:02:51 -0800
From:      Alfred Perlstein <alfred@freebsd.org>
To:        net@freebsd.org
Subject:   Nasty bug in startup scripts with interface renaming.
Message-ID:  <CC945B9D-7BDA-46AD-8362-E82C1FD72873@freebsd.org>

next in thread | raw e-mail | index | archive | help
If you happen to use interface renaming there is a nasty bug lurking in =
the startup scripts, it seems newly introduced, but I am unsure.

Specifically the following happens at boot time:

/etc/rc.d/netif is run without args.

It gets the list of interfaces and for each interface it calls =
network_start().

however in network start we have this:

        # Create cloned interfaces
        clone_up $cmdifn

        # Rename interfaces.
        ifnet_rename $cmdifn

        # Configure the interface(s).
        network_common ifn_start $cmdifn

Now it doesn't take that much to realize that if 'ifnet_rename' renames =
'cmdifn' then the subsequent call to 'network_common ifn_start $cmdifn' =
will be passing a stale interface in as a parameter and causes a bunch =
of errors to happen.

Example:
cmdifn=3D"vtnet0"

Therefor:

        # Rename interfaces.
        ifnet_rename vtnet0     # <- gets renamed here to derp0

        # Configure the interface(s).
        network_common ifn_start vtnet0  # <- this seems to cause an =
error since we're using old name.


I looked at fixing ifnet_rename() to take a variable to assign to, so =
for instance the call could turn into something like:

ifnet_rename cmdifn  vtnet0 =20

This way cmdifn would be set to 'derp0' and subsequent stuff would work, =
however=85. then I realized that ifnet_rename can take 0 args, or =
MULTIPLE args and will act on either all interfaces or the ones passed =
in.  So passing another var becomes a problem.

I then realized that if I threw together a patch to fix it "the alfred =
way" people would probably be upset.

So I'm asking, any suggestions before I go about just fixing this?

-Alfred






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CC945B9D-7BDA-46AD-8362-E82C1FD72873>