Subject: Re: Netatalk ASUN ASIP problems
To: Herb Singleton <hsingleton@flashcom.net>
From: Donald Lee <donlee_68k@icompute.com>
List: port-mac68k
Date: 04/30/2000 14:21:19
At 11:42 AM -0500 4/29/00, Frederick Bruckman wrote:
>On Wed, 26 Apr 2000, Bill Studenmund wrote:
>
>> On Sun, 16 Apr 2000, Hauke Fath wrote:
>> 
>> > Due to some NetBSD quirk which according to Bill Studenmund is not a bug
>> > but a feature (TM) I could only get Netatalk to work on 1.4.x when I
>> > configured it as a router. This is annoying because all the Macs on the net
>> > will complain every time the "router" appears to go away.
>> 
>> Hauke, which quirk is this?
>
>IIRC, Manuel Bouyer made a change to the kernel sources between
>1.4.1-1.4.2 to allow the packaged netatalk to be used as a router.
>This required a change to the netatalk package to permit netatalk to
>be used as a non-router, "patch-be". Maybe you'd like to pull that one
>up to the sources you're using.

Indeed.  Monsieur Bouyer submitted a patch just a few days ago that tweaked
the code that was added between 1.4.1 and 1.4.2.  The code was not
properly handling some routing, depending on.....

Changes are at or about line 213 in sys/net/if.c.

If you know how to snarf up the changes from the latest sources (I don't),
you can build your own kernel.

-dgl-

P.S. below is not the code that is checked in, but is what I'm running....

sys/net/if.c ~213

#ifdef NETATALK
        if (af == AF_APPLETALK) {
                struct sockaddr_at *sat, *sat2;
                sat = (struct sockaddr_at *)addr;
                for (ifp = TAILQ_FIRST(&ifnet); ifp != NULL;
                     ifp = TAILQ_NEXT(ifp, if_list)) {
                        ifa = at_ifawithnet(sat, ifp);
                        if (ifa == NULL)
                                continue;
                        ifa_maybe = ifa; /* This may be OK.  Remember it. */
                        sat2 = (struct sockaddr_at *)ifa->ifa_addr;
                        if (sat2->sat_addr.s_net == sat->sat_addr.s_net) {
                                return (ifa); /* exact match */
                        }
                }
                return (ifa_maybe);
        }
#endif