--- trunk_head_libpri/q921.c.orig 2006-06-01 13:39:39.000000000 +0200 +++ trunk_head_libpri/q921.c 2006-06-01 13:50:34.000000000 +0200 @@ -80,7 +80,7 @@ pri->q921_txcount++; #endif /* Just send it raw */ - if (pri->debug & PRI_DEBUG_Q921_DUMP) + if (pri->debug & (PRI_DEBUG_Q921_DUMP | PRI_DEBUG_Q921_RAW)) q921_dump(pri, h, len, pri->debug & PRI_DEBUG_Q921_RAW, 1); /* Write an extra two bytes for the FCS */ res = pri->write_func ? pri->write_func(pri, h, len + 2) : 0; @@ -111,7 +111,7 @@ pri_error(pri, "Don't know how to U/A on a type %d node\n", pri->localtype); return; } - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & (PRI_DEBUG_Q921_STATE | PRI_DEBUG_Q921_DUMP)) pri_message(pri, "Sending Unnumbered Acknowledgement\n"); q921_transmit(pri, &h, 3); } @@ -143,9 +143,11 @@ pri_error(pri, "Don't know how to U/A on a type %d node\n", pri->localtype); return; } - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & (PRI_DEBUG_Q921_STATE | PRI_DEBUG_Q921_DUMP)) pri_message(pri, "Sending Set Asynchronous Balanced Mode Extended\n"); q921_transmit(pri, &h, 3); + if (pri->debug & PRI_DEBUG_Q921_STATE && pri->q921_state != Q921_AWAITING_ESTABLISH) + pri_message(pri, DBGHEAD "q921_state now is Q921_AWAITING_ESTABLISH\n", DBGINFO); pri->q921_state = Q921_AWAITING_ESTABLISH; } @@ -166,7 +168,7 @@ prev->next = f->next; else pri->txqueue = f->next; - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- ACKing packet %d, new txqueue is %d (-1 means empty)\n", f->h.n_s, pri->txqueue ? pri->txqueue->h.n_s : -1); /* Update v_a */ pri->v_a = num; @@ -180,7 +182,7 @@ while(f) { if (!f->transmitted) { /* Send it now... */ - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Finally transmitting %d, since window opened up\n", f->h.n_s); f->transmitted++; pri->windowlen++; @@ -206,7 +208,7 @@ { if (pri->t203_timer) { pri_schedule_del(pri, pri->t203_timer); - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Restarting T203 counter\n"); /* Nothing to transmit, start the T203 counter instead */ pri->t203_timer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T203], t203_expire, pri); @@ -229,31 +231,31 @@ return ev; } /* Cancel each packet as necessary */ - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- ACKing all packets from %d to (but not including) %d\n", pri->v_a, ack); for (x=pri->v_a; x != ack; Q921_INC(x)) cnt += q921_ack_packet(pri, x); if (!pri->txqueue) { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Since there was nothing left, stopping T200 counter\n"); /* Something was ACK'd. Stop T200 counter */ pri_schedule_del(pri, pri->t200_timer); pri->t200_timer = 0; } if (pri->t203_timer) { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Stopping T203 counter since we got an ACK\n"); pri_schedule_del(pri, pri->t203_timer); pri->t203_timer = 0; } if (pri->txqueue) { /* Something left to transmit, Start the T200 counter again if we stopped it */ - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Something left to transmit (%d), restarting T200 counter\n", pri->txqueue->h.n_s); if (!pri->t200_timer) pri->t200_timer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T200], t200_expire, pri); } else { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Nothing left, starting T203 counter\n"); /* Nothing to transmit, start the T203 counter instead */ pri->t203_timer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T203], t203_expire, pri); @@ -281,7 +283,7 @@ pri_error(pri, "Don't know how to U/A on a type %d node\n", pri->localtype); return; } - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "Sending Reject (%d)\n", pri->v_r); pri->sentrej = 1; q921_transmit(pri, &h, 4); @@ -313,7 +315,7 @@ return; } pri->v_na = pri->v_r; /* Make a note that we've already acked this */ - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "Sending Receiver Ready (%d)\n", pri->v_r); q921_transmit(pri, &h, 4); } @@ -323,7 +325,7 @@ struct pri *pri = vpri; if (pri->txqueue) { /* Retransmit first packet in the queue, setting the poll bit */ - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- T200 counter expired, What to do...\n"); /* Force Poll bit */ pri->txqueue->h.p_f = 1; @@ -335,7 +337,7 @@ /* Up to three retransmissions */ if (pri->retrans < pri->timers[PRI_TIMER_N200]) { /* Reschedule t200_timer */ - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Retransmitting %d bytes\n", pri->txqueue->len); if (pri->busy) q921_rr(pri, 1, 1); @@ -344,12 +346,14 @@ pri_error(pri, "!! Not good - head of queue has not been transmitted yet\n"); q921_transmit(pri, (q921_h *)&pri->txqueue->h, pri->txqueue->len); } - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Rescheduling retransmission (%d)\n", pri->retrans); pri->t200_timer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T200], t200_expire, pri); } else { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_STATE) pri_message(pri, "-- Timeout occured, restarting PRI\n"); + if (pri->debug & PRI_DEBUG_Q921_STATE && pri->q921_state != Q921_LINK_CONNECTION_RELEASED) + pri_message(pri, DBGHEAD "q921_state now is Q921_LINK_CONNECTION_RELEASED\n",DBGINFO); pri->q921_state = Q921_LINK_CONNECTION_RELEASED; pri->t200_timer = 0; q921_dchannel_down(pri); @@ -357,7 +361,7 @@ pri->schedev = 1; } } else if (pri->solicitfbit) { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Retrying poll with f-bit\n"); pri->retrans++; if (pri->retrans < pri->timers[PRI_TIMER_N200]) { @@ -365,8 +369,10 @@ q921_rr(pri, 1, 1); pri->t200_timer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T200], t200_expire, pri); } else { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_STATE) pri_message(pri, "-- Timeout occured, restarting PRI\n"); + if (pri->debug & PRI_DEBUG_Q921_STATE && pri->q921_state != Q921_LINK_CONNECTION_RELEASED) + pri_message(pri, DBGHEAD "q921_state now is Q921_LINK_CONNECTION_RELEASED\n", DBGINFO); pri->q921_state = Q921_LINK_CONNECTION_RELEASED; pri->t200_timer = 0; q921_dchannel_down(pri); @@ -423,23 +429,23 @@ q921_transmit(pri, (q921_h *)(&f->h), f->len); f->transmitted++; } else { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "Delaying transmission of %d, window is %d/%d long\n", f->h.n_s, pri->windowlen, pri->window); } } if (pri->t203_timer) { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "Stopping T_203 timer\n"); pri_schedule_del(pri, pri->t203_timer); pri->t203_timer = 0; } if (!pri->t200_timer) { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "Starting T_200 timer\n"); pri->t200_timer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T200], t200_expire, pri); } else - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "T_200 timer already going (%d)\n", pri->t200_timer); } else { @@ -453,7 +459,7 @@ { struct pri *pri = vpri; if (pri->q921_state == Q921_LINK_CONNECTION_ESTABLISHED) { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "T203 counter expired, sending RR and scheduling T203 again\n"); /* Solicit an F-bit in the other's RR */ pri->solicitfbit = 1; @@ -462,7 +468,7 @@ /* Start timer T200 to resend our RR if we don't get it */ pri->t203_timer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T200], t200_expire, pri); } else { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "T203 counter expired in weird state %d\n", pri->q921_state); pri->t203_timer = 0; } @@ -654,6 +660,8 @@ pri->sentrej = 0; /* Go into connection established state */ + if (pri->debug & PRI_DEBUG_Q921_STATE && pri->q921_state != Q921_LINK_CONNECTION_ESTABLISHED) + pri_message(pri, DBGHEAD "q921_state now is Q921_LINK_CONNECTION_ESTABLISHED\n", DBGINFO); pri->q921_state = Q921_LINK_CONNECTION_ESTABLISHED; /* Start the T203 timer */ @@ -691,6 +699,8 @@ pri->t200_timer = 0; pri->busy = 0; pri->solicitfbit = 0; + if (pri->debug & PRI_DEBUG_Q921_STATE && pri->q921_state != Q921_LINK_CONNECTION_RELEASED) + pri_message(pri, DBGHEAD "q921_state now is Q921_LINK_CONNECTION_RELEASED\n", DBGINFO); pri->q921_state = Q921_LINK_CONNECTION_RELEASED; pri->retrans = 0; pri->sentrej = 0; @@ -739,10 +749,10 @@ if (h->s.p_f) { /* If it's a p/f one then send back a RR in return with the p/f bit set */ if (pri->solicitfbit) { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Got RR response to our frame\n"); } else { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Unsolicited RR with P/F bit, responding\n"); q921_rr(pri, 1, 0); } @@ -751,7 +761,7 @@ break; case 1: /* Receiver not ready */ - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Got receiver not ready\n"); if(h->s.p_f) { /* Send RR if poll bit set */ @@ -761,7 +771,7 @@ break; case 2: /* Just retransmit */ - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Got reject requesting packet %d... Retransmitting.\n", h->s.n_r); if (h->s.p_f) { /* If it has the poll bit set, send an appropriate supervisory response */ @@ -818,7 +828,7 @@ if (h->u.p_f) { /* Section 5.7.1 says we should restart on receiving a DM response with the f-bit set to one, but we wait T200 first */ - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & (PRI_DEBUG_Q921_STATE | PRI_DEBUG_Q921_DUMP)) pri_message(pri, "-- Got DM Mode from peer.\n"); /* Disconnected mode, try again after T200 */ ev = q921_dchannel_down(pri); @@ -826,7 +836,7 @@ return ev; } else { - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & PRI_DEBUG_Q921_DUMP) pri_message(pri, "-- Ignoring unsolicited DM with p/f set to 0\n"); #if 0 /* Requesting that we start */ @@ -839,7 +849,7 @@ } break; case 2: - if (pri->debug & PRI_DEBUG_Q921_STATE) + if (pri->debug & (PRI_DEBUG_Q921_STATE | PRI_DEBUG_Q921_DUMP)) pri_message(pri, "-- Got Disconnect from peer.\n"); /* Acknowledge */ q921_send_ua(pri, h->u.p_f); @@ -849,7 +859,7 @@ case 3: if (h->u.m2 == 3) { /* SABME */ - if (pri->debug & PRI_DEBUG_Q921_STATE) { + if (pri->debug & (PRI_DEBUG_Q921_STATE | PRI_DEBUG_Q921_DUMP)) { pri_message(pri, "-- Got SABME from %s peer.\n", h->h.c_r ? "network" : "cpe"); } if (h->h.c_r) { @@ -871,7 +881,7 @@ } else if (h->u.m2 == 0) { /* It's a UA */ if (pri->q921_state == Q921_AWAITING_ESTABLISH) { - if (pri->debug & PRI_DEBUG_Q921_STATE) { + if (pri->debug & (PRI_DEBUG_Q921_STATE | PRI_DEBUG_Q921_DUMP)) { pri_message(pri, "-- Got UA from %s peer Link up.\n", h->h.c_r ? "cpe" : "network"); } return q921_dchannel_up(pri); @@ -901,7 +911,7 @@ /* Discard FCS */ len -= 2; - if (!pri->master && pri->debug & PRI_DEBUG_Q921_DUMP) + if (!pri->master && pri->debug & (PRI_DEBUG_Q921_DUMP | PRI_DEBUG_Q921_RAW)) q921_dump(pri, h, len, pri->debug & PRI_DEBUG_Q921_RAW, 0); /* Check some reject conditions -- Start by rejecting improper ea's */