Gary <[EMAIL PROTECTED]> writes:
> I will be very interested to have a way to recover the network if
> someone find the root cause but it seems I reach my technical limit.
> Of course if anyone need more information about my configuration I am
> still in the thread.
I was able to recreate your problem, and to recover from it by doing
# ifconfig eth0 0
# ifconfig eth0 192.168.240.195 netmask 255.255.248.0
# route add default gw 192.168.240.1
from the non-working situation.
I suspect that the problem might be this code in net/ipv4/devinet.c ,
which sets ifa_scope to RT_SCOPE_HOST if you configure a loopback
address (127/8) on any interface. I guess it's there to protect us from
sending packets with a loopback source address, which woulnd't look too
good:
static int inet_set_ifa(struct net_device *dev, struct in_ifaddr *ifa)
{
struct in_device *in_dev = __in_dev_get_rtnl(dev);
ASSERT_RTNL();
if (!in_dev) {
inet_free_ifa(ifa);
return -ENOBUFS;
}
ipv4_devconf_setall(in_dev);
if (ifa->ifa_dev != in_dev) {
BUG_TRAP(!ifa->ifa_dev);
in_dev_hold(in_dev);
ifa->ifa_dev = in_dev;
}
if (LOOPBACK(ifa->ifa_local))
ifa->ifa_scope = RT_SCOPE_HOST;
return inet_insert_ifa(ifa);
}
The real problem is that there's never anything resetting this scope if
you change the address later. The attached patch fixes this.
Bjørn
We set the scope to RT_SCOPE_HOST if an IPv4 interface is configured with a
loopback address (127/8). This prevents the interface from sending packets
out the wire. This patch resets the scope if the address is changed again,
to restore normal functionality.
Signed-off-by: Bjorn Mork <[EMAIL PROTECTED]>
devinet.c | 1 +
1 file changed, 1 insertion(+)
--- linux-2.6.24-rc8.orig/net/ipv4/devinet.c 2008-01-16 05:22:48.000000000 +0100
+++ linux-2.6.24-rc8/net/ipv4/devinet.c 2008-01-23 19:17:30.000000000 +0100
@@ -753,6 +753,7 @@
inet_del_ifa(in_dev, ifap, 0);
ifa->ifa_broadcast = 0;
ifa->ifa_anycast = 0;
+ ifa->ifa_scope = 0;
}
ifa->ifa_address = ifa->ifa_local = sin->sin_addr.s_addr;