Date: Thu, 9 Jan 1997 16:20:47 +0100 (MET) From: grog@lemis.de To: peter@spinner.DIALix.COM (Peter Wemm) Cc: FreeBSD-current@FreeBSD.ORG (FreeBSD current users) Subject: Re: What's happened to nfsd and mountd? Message-ID: <199701091520.QAA03172@freebie.lemis.de> In-Reply-To: <199701091502.XAA13553@spinner.DIALix.COM> from Peter Wemm at "Jan 9, 97 11:02:49 pm"
next in thread | previous in thread | raw e-mail | index | archive | help
Peter Wemm writes: > Greg Lehey wrote: >> A pointer to the problem, by the look of it: >> >> === grog@freebie (/dev/ttypa) ~/src 3 -> gma >> get_myaddress() returns 0 >> sin_family = 0 (AF_INET = 2) >> sin_len = 3 (16) >> sin_port = 0 >> sin_addr = 0.32.0.0 >> SIOCFIGCONF used 1008 bytes of a buffer 1024 long > > YIKES! SIOCGIFCONF might be screwing up by the look of it. Either that > or you > have records being returned that are not sizeof(ifreq) in length and the > code that is supposed to track these isn't working. There's 16 spare > bytes coming from somewhere.. > > I think get_myaddress() has failed, and didn't return a failure code, so > the uninitialised data is being used.. No, I've got further than that. There's a bug in get_myaddress, line 91: if ((ifreq.ifr_flags & IFF_UP) && ifr->ifr_addr.sa_family == AF_INET && (loopback == 1 && (ifreq.ifr_flags & IFF_LOOPBACK))) { <--- here *addr = *((struct sockaddr_in *)&ifr->ifr_addr); addr->sin_port = htons(PMAPPORT); gotit = 1; break; } This means that it can't find anything in the first pass (where loopback is 0), and it always takes the loopback interface in the second pass. I've changed this to: if ((ifreq.ifr_flags & IFF_UP) && ifr->ifr_addr.sa_family == AF_INET && (loopback == 1 || ! (ifreq.ifr_flags & IFF_LOOPBACK))) { Now gma returns: === grog@freebie (/dev/ttyp5) ~/src 16 -> gma get_myaddress() returns 0 sin_family = 2 (AF_INET = 2) sin_len = 16 (16) sin_port = 111 sin_addr = 192.109.197.137 SIOCFIGCONF used 1008 bytes of a buffer 1024 long Unfortunately, mountd still fails (and draws portmap in for sympathy) with a message which completely baffles me: Jan 9 12:08:28 freebie portmap[754]: connect from 127.0.0.1 to unset(mountd): request from non-local host Jan 9 12:08:39 freebie portmap[759]: connect from 127.0.0.1 to unset(mountd): request from non-local host Jan 9 12:08:39 freebie mountd[749]: Can't register mount Jan 9 12:08:39 freebie portmap[760]: connect from 127.0.0.1 to set(mountd): request from non-local host Jan 9 12:10:29 freebie portmap[803]: connect from 127.0.0.1 to unset(mountd): request from non-local host Jan 9 12:10:29 freebie portmap[804]: connect from 127.0.0.1 to unset(mountd): request from non-local host Jan 9 12:10:29 freebie mountd[802]: Can't register mount Jan 9 12:10:29 freebie portmap[805]: connect from 127.0.0.1 to set(mountd): request from non-local host I've established (with gdb and mountd -d) that it does (now) find the correct interface (which should be obvious form the sin_addr reported by gma), but these messages look like they should have come from the old version, not from this one. Unfortunately, I'm off on a business trip for 2 weeks tomorrow, and I don't have time to follow through any further. >>> One of my systems nearby uses 992 bytes of the SIOCGIFCONF 1024 byte buffer >>> (as used in get_myaddress). It would be interesting to know what happens >>> if it is overflowing on the systems that are failing. >> >> I'd guess it's probably the wrong family. > > Yes. get_myaddress() is returning a family of 0 (AF_UNSPEC), rather than > AF_INET, so it's no real suprise that it can't send to that address over a > UDP socket. > > Can you give me the result of 'netstat -in' please? I'm curious to see if > you have large <Link> entries or something on the isdn interfaces. OK, here goes, though again I don't think this is the problem. === root@freebie (/dev/ttyp6) /home/grog 18 -> netstat -in Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll lp0* 1500 <Link> 0 0 0 0 0 ep0 1500 <Link> 00.a0.24.37.0d.2b 23066 0 17860 1 0 ep0 1500 192.109.197 192.109.197.137 23066 0 17860 1 0 ipi0 1500 <Link> 0 0 0 0 0 ipi0 1500 192.109.197.1 192.109.197.137 0 0 0 0 0 ipi1 1500 <Link> 166 0 208 7 0 ipi1 1500 192.109.197 192.109.197.137 166 0 208 7 0 ipi2 1500 <Link> 0 0 0 0 0 ipi2 1500 192.109.197.1 192.109.197.137 0 0 0 0 0 ipi3 1500 <Link> 0 0 0 0 0 ipi3 1500 192.109.197 192.109.197.37 0 0 0 0 0 ipi4 1500 <Link> 0 0 0 0 0 ipi4 1500 192.109.197 192.109.197.148 0 0 0 0 0 ipi5 1500 <Link> 0 0 0 0 0 ipi5 1500 192.109.197.1 192.109.197.137 0 0 0 0 0 ipi6 1500 <Link> 0 0 0 0 0 ipi6 1500 192.109.197 192.109.197.137 0 0 0 0 0 ipi7* 1500 <Link> 0 0 0 0 0 ipi8* 1500 <Link> 0 0 0 0 0 ipi9 1500 <Link> 413 0 514 0 0 ipi9 1500 194.97.201 194.97.201.66 413 0 514 0 0 ipi10 1500 <Link> 0 0 0 0 0 ipi11 1500 <Link> 0 0 0 0 0 ipi12 1500 <Link> 0 0 0 0 0 ipi13 1500 <Link> 0 0 0 0 0 ipi14 1500 <Link> 0 0 0 0 0 ipi15 1500 <Link> 0 0 0 0 0 tun0* 1500 <Link> 0 0 0 0 0 sl0* 552 <Link> 0 0 0 0 0 ppp0* 1500 <Link> 0 0 0 0 0 ppp1* 1500 <Link> 0 0 0 0 0 lo0 16384 <Link> 1465 0 1465 0 0 lo0 16384 127 127.0.0.1 1465 0 1465 0 0 I've changed my name server config, and at some time in the next 24 hours my lowest MX will point to freefall. When that happens, I may not get any messages for up to 48 hours. Could you please copy grog@freebie.lemis.de on any message you send before Friday the 10th, 1000 UTC? Thanks in advance Greg
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199701091520.QAA03172>