- struct mbuf *m1 = m_copy(m, 0, (int)M_COPYALL);
- if (m1) idp_input(m1, nsp);
+ struct mbuf *m0 = m_copy(m, 0, (int)M_COPYALL);
+ if (m0) {
+ register struct idp *idp;
+
+ M_PREPEND(m0, sizeof (*idp), M_DONTWAIT);
+ if (m0 == NULL)
+ continue;
+ idp = mtod(m0, struct idp *);
+ idp->idp_sna.x_net = ns_zeronet;
+ idp->idp_sna.x_host = ns_thishost;
+ if (ifp && (ifp->if_flags & IFF_POINTOPOINT))
+ for(ifa = ifp->if_addrlist; ifa;
+ ifa = ifa->ifa_next) {
+ if (ifa->ifa_addr->sa_family==AF_NS) {
+ idp->idp_sna = IA_SNS(ifa)->sns_addr;
+ break;
+ }
+ }
+ idp->idp_len = ntohl(m0->m_pkthdr.len);
+ idp_input(m0, nsp);
+ }