Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 2 Apr 2001 20:45:16 +0300
From:      Ruslan Ermilov <ru@FreeBSD.org>
To:        Alexander Leidinger <Alexander@leidinger.net>
Cc:        net@FreeBSD.org, isdn@FreeBSD.org
Subject:   Re: Recent interface/routing changes breaks on-demand PPP (+sppp)
Message-ID:  <20010402204516.A74854@sunbay.com>
In-Reply-To: <200104021652.f32Gq1I02500@Magelan.Leidinger.net>; from Alexander@leidinger.net on Mon, Apr 02, 2001 at 06:52:00PM %2B0200
References:  <20010331204534.B11966@sunbay.com> <200104021652.f32Gq1I02500@Magelan.Leidinger.net>

next in thread | previous in thread | raw e-mail | index | archive | help

--bg08WKrSYDhXBjb5
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Mon, Apr 02, 2001 at 06:52:00PM +0200, Alexander Leidinger wrote:
> On 31 Mar, Ruslan Ermilov wrote:
> 
> [-isdn CCed,]
> 
> Dear -isdn readers, we are talking about the actual behavior of
> -current, see -current and -net for the beginning of the discussion.
> 
> >> >> If I use
> >> >>   route add default -interface isp1
> >> >> I wan't to have the packets routed trough isp1. I don't care about how
> >> >> the routing table is held consistent, but I if the route is discarded
> >> >> without my interaction it not only violates POLA, in this case it's
> >> >> prohibits a valid use of the -interface feature (dial on demand via sppp
> >> >> is broken at the moment).
> >> >> 
> >> > OK, finally got it.  When the interface goes down, the address is still
> >> > valid, and there is no reason to delete (static?) routes that use this
> >> > address, but the new code does.  I was confused by the code comment below
> >> 
> >> I didn't have a static IP address. The only static thing in this context
> >> is the interface the defaultroute is assigned to. At every
> >> dial-on-demand I get another IP.
> >> 
> > Well, if address is deleted from an interface, all routes that use it
> > will be invalidated (deleted) to avoid using the wrong address.  This
> > patch only fixes interface down/up case, when address does not change.
> 
> If "isp1" is a valid address in this context: it doesn't change.
> 
Nope, "isp1" is not an address, it is the pointer to an interface.
Routing table entry has both pointer to an interface, and a pointer
to one of its addresses.  That is what you see in the output from
``route -vn get default'' command, as IFP and IFA sockaddrs.

> Here a little bit of cut&paste (your "#if 0" patch is applied)
> which perhaps gives you a hint what I have here:
> ---snip---
> (3) netchild@ttyp1 % ifconfig isp1
> isp1: flags=a010<POINTOPOINT,LINK1,MULTICAST> mtu 1500
>         inet 0.0.0.0 --> 0.0.0.1 netmask 0xffff0000 
>         ether 00:00:00:00:00:00
> 
> (4) netchild@ttyp1 % netstat -rn
> Routing tables
> 
> Internet:
> Destination        Gateway            Flags     Refs     Use     Netif Expire
> default            0:0:0:0:0:0        USc         0        1     isp1
> 0.0.0.1            0.0.0.0            UH          0        0     isp1
> 127.0.0.1          127.0.0.1          UH          2     4613      lo0
> 192.168.1          link#1             UC          1        0      ed0 =>
> 
> (5) netchild@ttyp1 % isdn-up   # this is a SUID wrapper for "ifconfig isp1 up"
> 
> (6) netchild@ttyp1 % ifconfig isp1
> isp1: flags=a011<UP,POINTOPOINT,LINK1,MULTICAST> mtu 1500
>         inet 0.0.0.0 --> 0.0.0.1 netmask 0xffff0000 
>         ether 00:00:00:00:00:00 
> 
> (7) netchild@ttyp1 % netstat -rn  
> Routing tables
> 
> Internet:
> Destination        Gateway            Flags     Refs     Use     Netif Expire
> default            0:0:0:0:0:0        USc         0        1     isp1
> 0.0.0.1            0.0.0.0            UH          0        0     isp1
> 0.0.0.2            0.0.0.0            UH          0        0     isp0
> 127.0.0.1          127.0.0.1          UH          2     4613      lo0
> 192.168.1          link#1             UC          1        0      ed0 =>
> ---snip---
> 
> isp1 gets a new IP address after the ppp negotiation of sppp/isdnd.
> 0.0.0.0 -> 0.0.0.1 uses a documented hack in the i4b stack which
> discards the first packet to don't let go a packet with a wrong address
> (0.0.0.0) out of the computer. After a timeout or an "ifconfig isp1
> down" it hangs up and the dynamic IP address of isp1 get's replaced by
> 0.0.0.0 again. The actual behavior of -current breaks the documented way
> of enabling dial-on-demand with sppp/isdnd.
> (To -isdn readers: after the first "ifconfig isp1 down" the defaultroute
> vanishes, after a manual "route add default -interface isp1" the route
> stays even with subsequent "ifconfig isp1 down", doing an additional
> "route add ..." is annoying, needs additional privileges and violates
> POLA)
> 
OK, we fixed the "ifconfig down" case already.  The attached patch alters
inet routing code so that it does not delete routes with the "default"
source address of 0.0.0.0; ip_output() will take care of choosing the
right address.  Please let me know if it works for you.


Cheers,
-- 
Ruslan Ermilov		Oracle Developer/DBA,
ru@sunbay.com		Sunbay Software AG,
ru@FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age

--bg08WKrSYDhXBjb5
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=p

Index: in_rmx.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/in_rmx.c,v
retrieving revision 1.39
diff -u -p -u -r1.39 in_rmx.c
--- in_rmx.c	2001/03/19 09:16:16	1.39
+++ in_rmx.c	2001/04/02 17:25:57
@@ -416,6 +416,9 @@ in_ifadown(struct ifaddr *ifa)
 	if (ifa->ifa_addr->sa_family != AF_INET)
 		return 1;
 
+	if (((struct sockaddr_in *)ifa->ifa_addr)->sin_addr.s_addr == INADDR_ANY)
+		return 0;
+
 	arg.rnh = rnh = rt_tables[AF_INET];
 	arg.ifa = ifa;
 	rnh->rnh_walktree(rnh, in_ifadownkill, &arg);

--bg08WKrSYDhXBjb5--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010402204516.A74854>