From owner-cvs-sys Tue Jul 8 00:32:58 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.5/8.8.5) id AAA03104 for cvs-sys-outgoing; Tue, 8 Jul 1997 00:32:58 -0700 (PDT) Received: from spinner.dialix.com.au (spinner.dialix.com.au [192.203.228.67]) by hub.freebsd.org (8.8.5/8.8.5) with ESMTP id AAA03097; Tue, 8 Jul 1997 00:32:45 -0700 (PDT) Received: from spinner.dialix.com.au (localhost.dialix.com.au [127.0.0.1]) by spinner.dialix.com.au with ESMTP id PAA29282; Tue, 8 Jul 1997 15:32:18 +0800 (WST) Message-Id: <199707080732.PAA29282@spinner.dialix.com.au> X-Mailer: exmh version 2.0delta 6/3/97 To: Bill Fenner cc: Julian Elischer , cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG, cvs-sys@FreeBSD.ORG, wollman@FreeBSD.ORG Subject: Re: cvs commit: src/sys/net if.c In-reply-to: Your message of "Mon, 07 Jul 1997 18:43:43 PDT." <97Jul7.184349pdt.177512@crevenia.parc.xerox.com> Date: Tue, 08 Jul 1997 15:32:17 +0800 From: Peter Wemm Sender: owner-cvs-sys@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk Bill Fenner wrote: > This should have been a 3-line fix. I don't understand why you chose > to restructure the first section of code; it has now lost its > parallelism with the next place that looks for a multicast address on > the list. > > (e.g. the 2nd bit is > > for (ifma = ifp->if_multiaddrs.lh_first; ifma; > ifma = ifma->ifma_link.le_next) { > if (equal(ifma->ifma_addr, llsa)) > break; > } > if (ifma) { > ... > > so why not leave the first bit looking like that too, or restructure > the 2nd bit in the same way you restructured the 1st bit?) I've not looked at the commit yet, but is this related to the in_ifdown panics with ppp? I had to make this patch a few days ago: Index: netinet/raw_ip.c =================================================================== RCS file: /home/ncvs/src/sys/netinet/raw_ip.c,v retrieving revision 1.46 diff -u -4 -r1.46 raw_ip.c --- raw_ip.c 1997/05/22 20:52:56 1.46 +++ raw_ip.c 1997/07/08 07:26:51 @@ -346,15 +346,17 @@ /* * in_ifscrub kills the interface route. */ in_ifscrub(ia->ia_ifp, ia); +#if 0 /* * in_ifadown gets rid of all the rest of * the routes. This is not quite the right * thing to do, but at least if we are running * a routing process they will come back. */ in_ifadown(&ia->ia_ifa); +#endif break; } } break; The problem was that killing pppd with routed active to it (eg: gated with a dozen routes) would cause rtrequest(RTM_DELETE, ...) to explode a little further down with really bad pointers. From what I could see, the rt_key(..) value (meant to be a sockaddr *) was pointing off into the void (perhaps it had been freed already?), the sa_family was bogus, and the sa_family was being used as a bad index into an array for the route tree and ending up with a very bogus rnh pointer in rtrequest(). I had not yet got around to doing a send-pr yet. > Bill > Cheers, -Peter