Subject: Re: inet stopped working?!?
To: Martin Husemann <martin@rumolt.teuto.de>
From: None <itojun@iijlab.net>
List: current-users
Date: 02/17/2000 14:56:43
>No, that's not the problem.
>
>First, the machine with the new kernel sees the ARP packets from the other
>systems. Second, even ISDN connections don't work - they establish the ISDN
>connection, but can't get packets through. And I can assure you the kernel
>needs to see several interrupts from the ISDN card before it will have an
>ISDN layer 3 connection established.
>
>It's a generic inet bug. Does it not manifest on other machines? Then I'll
>have to dig into it, but I couldn't afford this machine to be down for
>debugging yesterday.

	can you check netstat -s?  is there anything streange appear on output?

>The interfaces here are:
>
>[~] martin@rumolt > ifconfig -a
>vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
>        address: 00:80:c8:f9:e4:37
>        media: Ethernet autoselect (none)
>        status: active
>        inet 212.8.203.81 netmask 0xfffffff8 broadcast 212.8.203.87
>lo0: flags=8009<UP,LOOPBACK,MULTICAST> mtu 32976
>        inet 127.0.0.1 netmask 0xff000000
>ipr0: flags=2811<UP,POINTOPOINT,SIMPLEX,LINK1> mtu 1500
>        inet 212.8.203.81 --> 192.168.110.42 netmask 0xffffffff
>ipr1: flags=2810<POINTOPOINT,SIMPLEX,LINK1> mtu 1500
>isp0: flags=a051<UP,POINTOPOINT,RUNNING,LINK1,MULTICAST> mtu 1500
>        inet 212.8.203.81 --> 212.8.192.1 netmask 0xffffffff
>isp1: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
>
>The multiple 212.8.203.81 interface have triggered a generic IP routing bug
>before (the last-minute-fix which caused one of the first patches against
>1.4 back then), somebody changed something in that area lately?

	I think I did.  but I don't think this breaks in your case (sorry
	if I was wrong).
	http://cvsweb.netbsd.org/bsdweb.cgi/syssrc/sys/netinet/ip_input.c
	1.99 -> 1.100

	The rationale here is like this.  Suppose a packet with
	ip_src = S, ip_dst = D have reached to a node.
	- with 4.4BSD, a node will accept the packet if D matches any of
	  interface addresses configured, regardlees from IFF_UP status
	  of the interface.  a packet will get accepted even if D matches
	  an interface address configured on top of !IFF_UP interface.
	- 1.4.1 changes this to ignore IFF_UP interface.  There was a
	  mistake in it.  If D matches an interface address configured on top
	  of !IFF_UP interface, and if the node is a router, the packet
	  will be forwarded in the kernel (on loopback interface) until
	  it reaches TTL = 0.  PR9387 describes it.
	- PR9387 was not perfect, when D matches to multiple interface
	  addresses, and one of them are IFF_UP and one of them are !IFF_UP.
	  1.99 -> 1.100 tries to address this case, by following behavior:
	  (1) accept if D matches an interface address 
	  (2) handle multicast/whatever cases properly, if D is multicast
	  (3) if none of the above are successful, do the following:
		if (the node is router) {
			if D matches my address on !IFF_UP interface, drop it
			otherwise, forward it
		} else
			drop it
	  This follows same mindset as 1.4.1 (!IFF_UP interface address should
	  be ignored), just prevent infinite in-kernel forwarding loop.

itojun