- tp_ctimeout(p->tp_refp, TM_inact, (int)p->tp_inact_ticks);
- tp_euntimeout_lss(p->tp_refp, TM_data_retrans, e->ev_union.EV_AK_TPDU.e_seq);
- }
- sbwakeup( &p->tp_sock->so_snd );
-
- if (p->tp_sndhiwat <= p->tp_retrans_hiwat &&
- p->tp_snduna <= p->tp_retrans_hiwat) {
-
- register struct mbuf *m;
- /* extern struct mbuf *m_copy(); */
- register struct tp_rtc *r;
- SeqNum high, retrans, low_save;
-
- high = SEQ_MIN(p, SEQ_ADD(p, p->tp_snduna,
- MIN(p->tp_cong_win, p->tp_fcredit)) - 1,
- p->tp_sndhiwat);
- low_save = retrans = SEQ_MAX(p, SEQ_ADD(p, p->tp_last_retrans, 1),
- p->tp_snduna);
- for (; SEQ_LEQ(p, retrans, high); SEQ_INC(p, retrans)) {
-
- for (r = p->tp_snduna_rtc; r; r = r->tprt_next){
- if ( r->tprt_seq == retrans ){
- if(( m = m_copy(r->tprt_data, 0, r->tprt_octets ))
- == MNULL)
- break;
- (void) tp_emit(DT_TPDU_type, p, retrans,
- r->tprt_eot, m);
- p->tp_last_retrans = retrans;
- IncStat(ts_retrans_dt);
- break;
- }
- }
- if ( r == (struct tp_rtc *)0 ){
- IFDEBUG(D_RTC)
- printf( "tp: retrans rtc list is GONE!\n");
- ENDDEBUG
- break;
- }
- }
- tp_etimeout(p->tp_refp, TM_data_retrans, (caddr_t)low_save,
- (caddr_t)high, p->tp_retrans, (int)p->tp_dt_ticks);
- if (SEQ_DEC(p, retrans) == p->tp_retrans_hiwat)
- tp_send(p);
- }
- else {
- tp_send(p);