- if ((ifp->if_flags & IFF_POINTOPOINT) == 0) {
- tmpaddr.sin_addr = in_makeaddr(ia->ia_subnet, INADDR_ANY);
- rtinit((struct sockaddr *)&tmpaddr, &ia->ia_addr,
- (int)SIOCADDRT, RTF_UP);
- } else
- rtinit((struct sockaddr *)&ia->ia_dstaddr, &ia->ia_addr,
- (int)SIOCADDRT, RTF_HOST|RTF_UP);
+ if (ifp->if_flags & IFF_LOOPBACK)
+ rtinit(&ia->ia_addr, &ia->ia_addr, (int)SIOCADDRT,
+ RTF_HOST|RTF_UP);
+ else if (ifp->if_flags & IFF_POINTOPOINT)
+ rtinit(&ia->ia_dstaddr, &ia->ia_addr, (int)SIOCADDRT,
+ RTF_HOST|RTF_UP);
+ else {
+ netaddr.sin_addr = in_makeaddr(ia->ia_subnet, INADDR_ANY);
+ rtinit((struct sockaddr *)&netaddr, &ia->ia_addr,
+ (int)SIOCADDRT, RTF_UP);
+ }