--- cci/sys/net/route.c 2019/07/28 12:24:19 1.1 +++ cci/sys/net/route.c 2019/07/28 12:30:13 1.1.1.2 @@ -173,7 +173,6 @@ rtioctl(cmd, data) int cmd; caddr_t data; { - if (cmd != SIOCADDRT && cmd != SIOCDELRT) return (EINVAL); if (!suser()) @@ -249,12 +248,15 @@ rtrequest(req, entry) error = EEXIST; goto bad; } - ifp = if_ifwithaddr(&entry->rt_gateway); + ifp = if_ifptop(entry); /* try point-to-point */ if (ifp == 0) { - ifp = if_ifwithnet(&entry->rt_gateway); + ifp = if_ifwithaddr(&entry->rt_gateway); if (ifp == 0) { - error = ENETUNREACH; - goto bad; + ifp = if_ifwithnet(&entry->rt_gateway); + if (ifp == 0) { + error = ENETUNREACH; + goto bad; + } } } m = m_get(M_DONTWAIT, MT_RTABLE); @@ -287,7 +289,7 @@ bad: * for an interface. */ rtinit(dst, gateway, flags) - struct sockaddr *dst, *gateway; + struct sockaddr *dst, *gateway; int flags; { struct rtentry route; @@ -301,7 +303,7 @@ rtinit(dst, gateway, flags) } bzero((caddr_t)&route, sizeof (route)); route.rt_dst = *dst; - route.rt_gateway = *gateway; + route.rt_gateway = *gateway; route.rt_flags = flags; (void) rtrequest(cmd, &route); }