FreeBSD 8.0 problems with interface renaming and dhcp?

Angelo Hongens angelo at hongens.nl
Sat Dec 5 07:27:01 UTC 2009


On 04-12-2009 23:15, Brooks Davis wrote:
> On Fri, Dec 04, 2009 at 07:43:17PM +0100, Angelo Hongens wrote:
>> On most of my BSD machines I rename the interfaces to nic0. This way, I
>> can swap cards and drivers, and keep the rest of my config the same.
>>
>> I upgraded one of these machines from 7.2 to 8.0 (both standard kernel),
>> and suddenly the machine would not get a dhcp lease.
>>
>> In my /etc/rc.conf:
>>
>> ifconfig_em0_name="nic0"
>> ifconfig_nic0="DHCP"
>>
>> The machine woud boot, but not get an ip. (and no dhclient output while
>> booting). And ifconfig would show the nic nic0 up, but without an ip. If
>> I do 'dhclient nic0' it immediately gets an ip, and all is well.
>>
>> If I do NOT rename the interface but just config: ifconfig_em0="DHCP"
>> everything works as well..
>>
>> So is this a new bug or feature introduced in FreeBSD8? Is it something
>> that can be fixed? (So dhclient is executed for renamed interfaces.)
> 
> I think the problem here is that with the new DHCP configuration where
> we only start DHCP based on link events we're loosing a race between the
> link coming up and the rename occurring.  The absolutely correct answer is
> that the nic should no be trying to do anything until it is configured
> up and I don't think that happens before the rename (it shouldn't).
> It's likely the case though that a number of nics incorrectly start doing
> things before they are configured and thus racing the rename.  The
> easiest workaround in the rc.d code would probably be to add some code
> to the rename section to take the interface down and then bring it back
> up after the rename.  That should cause it to renegotiate and generate
> an event.
> 
> The no code change workaround is to change DHCP to SYNCDHCP which will
> restore the old behavior on this interface.
> 
> -- Brooks

Great, configuring SYNCDHCP does exactly what it should do. I'm happy.

If I understand you correctly, the long term solution would be to fix
the 'em' driver so that it never does anything with an interface until
it's configured (in my case: renamed). I never even touched C code, so I
hope someone else will look into that ;)

-- 


Met vriendelijke groet,

Angelo Höngens


More information about the freebsd-current mailing list