- 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);
+ struct mbuf *m1 = m_get(M_DONTWAIT, MT_DATA);
+
+ if(m1 == NULL)
+ m_freem(m0);
+ else {
+ register struct idp *idp;
+
+ m1->m_off = MMINOFF;
+ m1->m_len = sizeof (*idp);
+ m1->m_next = m0;
+ idp = mtod(m1, struct idp *);
+ idp->idp_sna.x_net = ns_zeronet;
+ idp->idp_sna.x_host = ns_thishost;
+ if (ifp && (ifp->if_flags & IFF_POINTOPOINT))
+ for(ia = ifp->if_addrlist; ia;
+ ia = ia->ifa_next) {
+ if (ia->ifa_addr.sa_family==AF_NS) {
+ idp->idp_sna =
+ satons_addr(ia->ifa_dstaddr);
+ break;
+ }
+ }
+ idp->idp_len = 0xffff;
+ idp_input(m1, nsp, ifp);
+ }