Index: sys/fs/nfsclient/nfs_clvfsops.c =================================================================== --- sys/fs/nfsclient/nfs_clvfsops.c +++ sys/fs/nfsclient/nfs_clvfsops.c @@ -468,26 +468,14 @@ */ if (nd->mygateway.sin_len != 0 && nd->mygateway.sin_addr.s_addr != 0) { - struct sockaddr_in mask, sin; struct epoch_tracker et; - struct rt_addrinfo info; - struct rib_cmd_info rc; - - bzero((caddr_t)&mask, sizeof(mask)); - sin = mask; - sin.sin_family = AF_INET; - sin.sin_len = sizeof(sin); - /* XXX MRT use table 0 for this sort of thing */ + struct rib_cmd_info rc = {}; + NET_EPOCH_ENTER(et); CURVNET_SET(TD_TO_VNET(td)); - - bzero((caddr_t)&info, sizeof(info)); - info.rti_flags = RTF_UP | RTF_GATEWAY; - info.rti_info[RTAX_DST] = (struct sockaddr *)&sin; - info.rti_info[RTAX_GATEWAY] = (struct sockaddr *)&nd->mygateway; - info.rti_info[RTAX_NETMASK] = (struct sockaddr *)&mask; - - error = rib_action(RT_DEFAULT_FIB, RTM_ADD, &info, &rc); + struct ifnet *ifp = ifunit(nd->myif.ifra_name); + struct sockaddr *gw = (struct sockaddr *)&nd->mygateway; + error = rib_add_default_route(RT_DEFAULT_FIB, AF_INET, ifp, gw, &rc); CURVNET_RESTORE(); NET_EPOCH_EXIT(et); if (error)