> > The roadmap for locking up the IP stack looks like roughly like ifaddr > ref counts, ifnet list, routing radix tree, ARP, ifaddr uses, and rtentry.
However, it seems that the rtentries' rt_refcnt are not used like ifaddr, ifnet, ... It looks like something dirty has been done a long time ago. For example, the following lines: rt = rtalloc1((struct sockaddr *)&sin, create, 0UL); if (rt == 0) return (0); rt->rt_refcnt--; if (rt->rt_flags & RTF_GATEWAY) why = "host is not on local network"; else if ((rt->rt_flags & RTF_LLINFO) == 0) why = "could not allocate llinfo"; else if (rt->rt_gateway->sa_family != AF_LINK) why = "gateway route is not ours"; [...] return ((struct llinfo_arp *)rt->rt_llinfo); Why is rt_refnt decreased so early and not later ? I would think that it would be more correct to have: rt = rtalloc1((struct sockaddr *)&sin, create, 0UL); if (rt == 0) return (0); if (rt->rt_flags & RTF_GATEWAY) why = "host is not on local network"; else if ((rt->rt_flags & RTF_LLINFO) == 0) why = "could not allocate llinfo"; else if (rt->rt_gateway->sa_family != AF_LINK) why = "gateway route is not ours"; [...] rt->rt_refcnt--; return ((struct llinfo_arp *)rt->rt_llinfo); It looks like rt_refcnt is decreased just after many rtalloc() in order just to be sure that it won't be forgotten later, doesn'it ? > I'm a little over 3/5 of the way done along this path. Good luck, Vincent To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-net" in the body of the message