+#ifdef SF_NEWCALL
+ if (cb->s_flags2 & SF_NEWCALL) {
+ struct sphdr *sp = mtod(m, struct sphdr *);
+ u_char dt = sp->sp_dt;
+ spp_newchecks[4]++;
+ if (dt != cb->s_rhdr.sp_dt) {
+ struct mbuf *mm =
+ m_getclr(M_DONTWAIT, MT_CONTROL);
+ spp_newchecks[0]++;
+ if (mm != NULL) {
+ u_short *s =
+ mtod(mm, u_short *);
+ cb->s_rhdr.sp_dt = dt;
+ mm->m_len = 5; /*XXX*/
+ s[0] = 5;
+ s[1] = 1;
+ *(u_char *)(&s[2]) = dt;
+ sbappend(&so->so_rcv, mm);
+ }
+ }
+ if (sp->sp_cc & SP_OB) {
+ MCHTYPE(m, MT_OOBDATA);
+ spp_newchecks[1]++;
+ so->so_oobmark = 0;
+ so->so_state &= ~SS_RCVATMARK;
+ }
+ if (packetp == 0) {
+ m->m_data += SPINC;
+ m->m_len -= SPINC;
+ m->m_pkthdr.len -= SPINC;
+ }
+ if ((sp->sp_cc & SP_EM) || packetp) {
+ sbappendrecord(&so->so_rcv, m);
+ spp_newchecks[9]++;
+ } else
+ sbappend(&so->so_rcv, m);
+ } else
+#endif