+tp_ltrace(so, uio)
+struct socket *so;
+struct uio *uio;
+{
+ IFTRACE(D_DATA)
+ register struct tp_pcb *tpcb = sototpcb(so);
+ if (tpcb) {
+ tptraceTPCB(TPPTmisc, "sosend so resid iovcnt", so,
+ uio->uio_resid, uio->uio_iovcnt, 0);
+ }
+ ENDTRACE
+}
+
+tp_confirm(tpcb)
+register struct tp_pcb *tpcb;
+{
+ struct tp_event E;
+ if (tpcb->tp_state == TP_CONFIRMING)
+ return DoEvent(T_ACPT_req);
+ printf("Tp confirm called when not confirming; tpcb 0x%x, state 0x%x\n",
+ tpcb, tpcb->tp_state);
+ return 0;
+}
+
+/*
+ * Process control data sent with sendmsg()
+ */
+tp_snd_control(m0, so, data)
+ register struct mbuf *m0;
+ struct socket *so;
+ register struct mbuf **data;
+{
+ register struct tp_control_hdr *ch;
+ struct mbuf *m;
+ int error = 0;
+
+ if (m0 && m0->m_len) {
+ ch = mtod(m0, struct tp_control_hdr *);
+ m0->m_len -= sizeof (*ch);
+ m0->m_data += sizeof (*ch);
+ m = m_copym(m0, 0, M_COPYALL, M_WAIT);
+ error = tp_ctloutput(PRCO_SETOPT,
+ so, ch->cmsg_level, ch->cmsg_type, &m);
+ if (m)
+ m_freem(m);
+ if (ch->cmsg_type == TPOPT_DISC_DATA) {
+ if (data && *data) {
+ m_freem(*data);
+ *data = 0;
+ }
+ m0 = 0;
+ error = tp_usrreq(so, PRU_DISCONNECT, m0, (caddr_t)0, m0);
+ }
+ }
+ return error;
+}