Hope this helps.
Zephaniah E, Hull.
On Sat, 7 Feb 1998, Herbert Xu wrote:
> Please cc karn@ka9q.ampr.org and 17885-forwarded@bugs.debian.org when
> replying.
>
> ----- Forwarded message from Phil Karn -----
>
<snip>
> Package: kernel-source-2.0.32
> Version: 2.0.32-1
>
> The symptom:
>
> On a machine with multiple interfaces, starting a DHCP client on one
> interface breaks all other interfaces until the DHCP client
> successfully binds to an address.
>
> On further investigation, I noticed that the other interfaces weren't
> actually disabled. But while the DHCP client was negotiating an
> address, all packets leaving the other interfaces have the originating
> interface's Ethernet address in the *destination* field -- so the
> hosts they're intended for never see them.
>
> The bug:
>
> The problem is an unintended consequence of code in
> net/ipv4/devinet.c, function ip_chk_addr, lines 120-126. This function
> ordinarily takes an IP address and returns IS_BROADCAST, IS_MYADDR or
> 0. But when an interface (any interface) is configured to IP address
> 0.0.0.0 (as it is during DHCP resolution), this function returns
> IS_MYADDR instead of 0 for any arbitrary non-broadcast address. This
> is intended to cause the calls to ip_chk_addr on line 437 and 439 of
> net/ipv4/ip_input.c to return IS_MYADDR during DHCP resolution so that
> the response packets from the DHCP server will be accepted regardless
> of their IP destination address.
>
> But this code has an unintended side effect. It causes the ARP
> machinery to resolve *all* outbound packets (regardless of interface)
> to the local Ethernet address instead of the correct one. This is what
> breaks the other interfaces.
>
<snip>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu