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