-
-#define NtoL(x) (*(long *)(&(x)))
- for (ia = ns_ifaddr; ia; ia = ia->ia_next)
- if (NtoL(ia->ia_net) == NtoL(net))
- return (ia);
- return ((struct ns_ifaddr *)0);
+ register struct ns_addr *compare;
+ register struct ifnet *ifp;
+ struct ns_ifaddr *ia_maybe = 0;
+ union ns_net net = dst->x_net;
+
+ for (ia = ns_ifaddr; ia; ia = ia->ia_next) {
+ if (ifp = ia->ia_ifp) {
+ if (ifp->if_flags & IFF_POINTOPOINT) {
+ compare = &satons_addr(ia->ia_dstaddr);
+ if (ns_hosteq(*dst, *compare))
+ return (ia);
+ if (ns_neteqnn(net, ia->ia_net))
+ ia_maybe = ia;
+ } else {
+ if (ns_neteqnn(net, ia->ia_net))
+ return (ia);
+ }
+ }
+ }
+ return (ia_maybe);