- iso_again:
- if (rt && rt->rt_gateway && (rt->rt_flags & RTF_UP)) {
- if (rt->rt_flags & RTF_GATEWAY) {
- register struct llinfo_llc *lc =
- (struct llinfo_llc *)rt->rt_llinfo;
- if (lc && lc->lc_rtgate) {
- rt = lc->lc_rtgate;
- goto iso_again;
- }
- } else {
- register struct sockaddr_dl *sdl =
- (struct sockaddr_dl *)rt->rt_gateway;
- if (sdl && sdl->sdl_family == AF_LINK
- && sdl->sdl_alen > 0) {
- bcopy(LLADDR(sdl), (char *)edst,
- sizeof(edst));
- goto iso_resolved;
- }
+ if (rt && (sdl = (struct sockaddr_dl *)rt->rt_gateway) &&
+ sdl->sdl_family == AF_LINK && sdl->sdl_alen > 0) {
+ bcopy(LLADDR(sdl), (caddr_t)edst, sizeof(edst));
+ } else if (error =
+ iso_snparesolve(ifp, (struct sockaddr_iso *)dst,
+ (char *)edst, &snpalen))
+ goto bad; /* Not Resolved */
+ if ((ifp->if_flags & IFF_SIMPLEX) && (*edst & 1) &&
+ (mcopy = m_copy(m, 0, (int)M_COPYALL))) {
+ M_PREPEND(mcopy, sizeof (*eh), M_DONTWAIT);
+ if (mcopy) {
+ eh = mtod(mcopy, struct ether_header *);
+ bcopy((caddr_t)edst,
+ (caddr_t)eh->ether_dhost, sizeof (edst));
+ bcopy((caddr_t)ac->ac_enaddr,
+ (caddr_t)eh->ether_shost, sizeof (edst));