- register SeqNum low, lowsave = 0;
- register struct tp_rtc *r = $P.tp_snduna_rtc;
- register struct mbuf *m;
- register SeqNum high = $$.e_high;
- extern struct mbuf *m_copy();
-
- low =
- SEQ_GT($P, $P.tp_snduna, $$.e_low )? $P.tp_snduna: $$.e_low;
- lowsave = low;
- if (($P.tp_rx_strat & TPRX_EACH) == 0)
- high = (high>low)?low:high;
-
- if( $P.tp_rx_strat & TPRX_USE_CW ) {
- register int i;
-
- $P.tp_cong_win = 1;
-
- i = SEQ_ADD($P, low, $P.tp_cong_win);
- if(SEQ_LT($P, i, high ))
- high = i;
- }
-
- while( SEQ_LEQ($P, low, high) ){
- if ( r == (struct tp_rtc *)0 ){
- IFDEBUG(D_RTC)
- printf( "tp: retrans rtc list is GONE!\n");
- ENDDEBUG
- break;
- }
- if ( r->tprt_seq == low ){
- if(( m = m_copy(r->tprt_data, 0, r->tprt_octets ))== MNULL)
- break;
- (void) tp_emit(DT_TPDU_type, $P, low, r->tprt_eot, m);
- IncStat(ts_retrans_dt);
- SEQ_INC($P, low );
- }
- r = r->tprt_next;
- }
- if ( SEQ_LEQ($P, lowsave, high) ){
- $$.e_retrans --;
- tp_etimeout($P.tp_refp, TM_data_retrans, (caddr_t)lowsave,
- (caddr_t)high, $$.e_retrans,
- ($P.tp_Nretrans - $$.e_retrans) * (int)$P.tp_dt_ticks);
- }