[libpri-commits] mattf: branch mattf/libpri-1.4-q921-rewrite r1342 - /team/mattf/libpri-1.4-q9...
SVN commits to the libpri project
libpri-commits at lists.digium.com
Thu Nov 19 17:28:44 CST 2009
Author: mattf
Date: Thu Nov 19 17:28:42 2009
New Revision: 1342
URL: http://svnview.digium.com/svn/libpri?view=rev&rev=1342
Log:
Start cleaning the rubble from the old Q.921 layer out of q921.c
Modified:
team/mattf/libpri-1.4-q921-rewrite/q921.c
Modified: team/mattf/libpri-1.4-q921-rewrite/q921.c
URL: http://svnview.digium.com/svn/libpri/team/mattf/libpri-1.4-q921-rewrite/q921.c?view=diff&rev=1342&r1=1341&r2=1342
==============================================================================
--- team/mattf/libpri-1.4-q921-rewrite/q921.c (original)
+++ team/mattf/libpri-1.4-q921-rewrite/q921.c Thu Nov 19 17:28:42 2009
@@ -412,83 +412,6 @@
return frames_txd;
}
-#if 0
-static pri_event *q921_ack_rx(struct pri *pri, int ack, int send_untransmitted_frames)
-{
- int x;
- int cnt=0;
- pri_event *ev;
- int txd_frames = 0;
- /* Make sure the ACK was within our window */
- for (x=pri->v_a; (x != pri->v_s) && (x != ack); Q921_INC(x));
- if (x != ack) {
- /* ACK was outside of our window --- ignore */
- pri_error(pri, "ACK received for '%d' outside of window of '%d' to '%d', restarting\n", ack, pri->v_a, pri->v_s);
- ev = q921_dchannel_down(pri);
- q921_start(pri, 1);
- pri->schedev = 1;
- return ev;
- }
- /* Cancel each packet as necessary */
- 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_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_DUMP)
- pri_message(pri, "-- Stopping T203 counter since we got an ACK\n");
- pri_schedule_del(pri, pri->t203_timer);
- pri->t203_timer = 0;
- }
-
- /* We ACK'd some frames */
- if (cnt) {
- stop_t200(pri);
- }
-
- if (send_untransmitted_frames) {
- txd_frames = q921_send_queued_iframes(pri);
- }
-
- if (txd_frames || q921_unacked_iframes(pri)) {
- if (!pri->t200_timer) {
- start_t200(pri);
- }
- }
-
- if (!pri->t200_timer) {
- start_t203(pri);
- }
-
-#if 0
- if (pri->txqueue) {
- /* Something left to transmit, Start the T200 counter again if we stopped it */
- if (!pri->busy && send_untransmitted_frames) {
- pri->retrans = 0;
- /* Search for something to send */
- txd_frames = q921_send_queued_iframes(pri);
- if (pri->debug & PRI_DEBUG_Q921_DUMP)
- pri_message(pri, "-- Waiting for acknowledge, restarting T200 counter\n");
- reschedule_t200(pri);
- }
- } else {
- 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);
- }
-#endif
- return NULL;
-}
-#endif
-
static void q921_reject(struct pri *pri, int pf)
{
q921_h h;
@@ -614,92 +537,6 @@
}
}
-
-#if 0
-static void t200_expire_old(void *vpri)
-{
- struct pri *pri = vpri;
- q921_frame *f, *lastframe=NULL;
-
- if (pri->txqueue) {
- /* Retransmit first packet in the queue, setting the poll bit */
- if (pri->debug & PRI_DEBUG_Q921_DUMP)
- pri_message(pri, "-- T200 counter expired, What to do...\n");
- pri->solicitfbit = 1;
- /* Up to three retransmissions */
- if (pri->retrans < pri->timers[PRI_TIMER_N200]) {
- pri->retrans++;
- /* Reschedule t200_timer */
- 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);
- else {
- if (!pri->txqueue->transmitted)
- pri_error(pri, "!! Not good - head of queue has not been transmitted yet\n");
- /*Actually we need to retransmit the last transmitted packet, setting the poll bit */
- for (f=pri->txqueue; f; f = f->next) {
- if (f->transmitted)
- lastframe = f;
- }
- if (lastframe) {
- /* Force Poll bit */
- lastframe->h.p_f = 1;
- /* Update nr */
- lastframe->h.n_r = pri->v_r;
- pri->v_na = pri->v_r;
- q921_transmit(pri, (q921_h *)&lastframe->h, lastframe->len);
- }
- }
- 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)
- 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;
- if (pri->bri && pri->master) {
- q921_tei_release_and_reacquire(pri->master);
- return;
- } else {
- q921_dchannel_down(pri);
- q921_start(pri, 1);
- pri->schedev = 1;
- }
- }
- } else if (pri->solicitfbit) {
- if (pri->debug & PRI_DEBUG_Q921_DUMP)
- pri_message(pri, "-- Retrying poll with f-bit\n");
- if (pri->retrans < pri->timers[PRI_TIMER_N200]) {
- pri->retrans++;
- pri->solicitfbit = 1;
- 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)
- 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;
- if (pri->bri && pri->master) {
- q921_tei_release_and_reacquire(pri->master);
- return;
- } else {
- q921_dchannel_down(pri);
- q921_start(pri, 1);
- pri->schedev = 1;
- }
- }
- } else {
- pri_error(pri, "T200 counter expired, nothing to send...\n");
- pri->t200_timer = 0;
- }
-}
-#endif
/* This is sending a DL-UNIT-DATA request */
int q921_transmit_uiframe(struct pri *pri, void *buf, int len)
@@ -837,34 +674,6 @@
q921_send_queued_iframes(pri);
return 0;
-#if 0
- /* Immediately transmit unless we're in a recovery state, or the window
- size is too big */
- if ((pri->q921_state == Q921_LINK_CONNECTION_ESTABLISHED) && (!pri->retrans && !pri->busy)) {
- if (pri->windowlen < pri->window) {
- new_frames_sent = q921_send_queued_iframes(pri);
- if (new_frames_sent) {
- if (pri->t203_timer) {
- 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->debug & PRI_DEBUG_Q921_DUMP)
- pri_message(pri, "Starting T_200 timer\n");
-
- /* Only start T200 if we sent new frames and if T200 is not running already */
- if (!pri->t200_timer)
- reschedule_t200(pri);
- }
- } else {
- 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);
- }
- }
-#endif
} else {
pri_error(pri, "!! Out of memory for Q.921 transmit\n");
return -1;
@@ -891,72 +700,8 @@
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;
- break;
- }
-#if 0
- if (pri->q921_state == Q921_LINK_CONNECTION_ESTABLISHED) {
- 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;
- pri->retrans = 0;
- q921_rr(pri, 1, 1);
- /* Start timer T200 to resend our RR if we don't get it */
- pri->t200_timer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T200], t200_expire, pri);
- } else {
- if (pri->debug & PRI_DEBUG_Q921_DUMP) {
- pri_message(pri,
- "T203 counter expired in weird state %d on pri with SAPI/TEI of %d/%d\n",
- pri->q921_state, pri->sapi, pri->tei);
- }
- pri->t203_timer = 0;
- }
-#endif
-}
-
-#if 0
-static pri_event *q921_handle_iframe(struct pri *pri, q921_i *i, int len)
-{
- int res;
- pri_event *ev;
-
- pri->solicitfbit = 0;
- /* Make sure this is a valid packet */
- if (i->n_s == pri->v_r) {
- /* Increment next expected I-frame */
- Q921_INC(pri->v_r);
- /* Handle their ACK */
- pri->sentrej = 0;
- ev = q921_ack_rx(pri, i->n_r, 1);
- if (ev)
- return ev;
- if (i->p_f) {
- /* If the Poll/Final bit is set, immediate send the RR */
- q921_rr(pri, 1, 0);
- } else if (pri->busy || pri->retrans) {
- q921_rr(pri, 0, 0);
- }
- /* Receive Q.931 data */
- res = q931_receive(pri, (q931_h *)i->data, len - 4);
- /* Send an RR if one wasn't sent already */
- if (pri->v_na != pri->v_r)
- q921_rr(pri, 0, 0);
- if (res == -1) {
- return NULL;
- }
- if (res & Q931_RES_HAVEEVENT)
- return &pri->ev;
- } else {
- /* If we haven't already sent a reject, send it now, otherwise
- we are obliged to RR */
- if (!pri->sentrej)
- q921_reject(pri, i->p_f);
- else if (i->p_f)
- q921_rr(pri, 1, 0);
- }
- return NULL;
-}
-#endif
+ }
+}
static void q921_dump_iqueue_info(struct pri *pri, int force)
{
@@ -1161,62 +906,6 @@
}
}
-#if 0
-pri_event *q921_dchannel_up(struct pri *pri)
-{
- if (pri->tei == Q921_TEI_PRI) {
- q921_reset(pri, 1);
- } else {
- q921_reset(pri, 0);
- }
-
- /* Stop any SABME retransmissions */
- pri_schedule_del(pri, pri->sabme_timer);
- pri->sabme_timer = 0;
-
- /* Reset any rejects */
- 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;
-
- /* Ensure that we do not have T200 or T203 running when the link comes up */
- pri_schedule_del(pri, pri->t200_timer);
- pri->t200_timer = 0;
-
- /* Start the T203 timer */
- pri_schedule_del(pri, pri->t203_timer);
- pri->t203_timer = pri_schedule_event(pri, pri->timers[PRI_TIMER_T203], t203_expire, pri);
-
- /* Notify Layer 3 */
- q931_dl_indication(pri, PRI_EVENT_DCHAN_UP);
-
- q921_send_queued_iframes(pri);
-
- /* Report event that D-Channel is now up */
- pri->ev.gen.e = PRI_EVENT_DCHAN_UP;
- return &pri->ev;
-}
-#endif
-
-#if 0
-pri_event *q921_dchannel_down(struct pri *pri)
-{
- pri_error(pri, "%s\n", __FUNCTION__);
- /* Reset counters, reset sabme timer etc */
- q921_reset(pri, 1);
-
- /* Notify Layer 3 */
- q931_dl_indication(pri, PRI_EVENT_DCHAN_DOWN);
-
- /* Report event that D-Channel is now down */
- pri->ev.gen.e = PRI_EVENT_DCHAN_DOWN;
- return &pri->ev;
-}
-#endif
-
static void q921_dump_pri(struct pri *pri)
{
pri_message(pri, "State %d\n", pri->q921_state);
@@ -1225,53 +914,6 @@
//pri_message(pri, "Window %d Windowlen %d, sentrej %d solicitfbit %d busy %d\n", pri->window, pri->windowlen, pri->sentrej, pri->solicitfbit, pri->busy);
pri_message(pri, "T200 %d, N200 %d, T203 %d, Sabme timer %d\n", pri->t200_timer, 3, pri->t203_timer, pri->sabme_timer);
}
-
-#if 0
-void q921_reset(struct pri *pri, int reset_iqueue)
-{
- pri_error(pri, "%s\n", __FUNCTION__);
- /* Having gotten a SABME we MUST reset our entire state */
- if (reset_iqueue)
- pri->v_s = 0;
-
- pri->v_a = 0;
- pri->v_r = 0;
- pri->v_na = 0;
- pri->window = pri->timers[PRI_TIMER_K];
- pri->windowlen = 0;
- pri_schedule_del(pri, pri->sabme_timer);
- pri_schedule_del(pri, pri->t203_timer);
- pri_schedule_del(pri, pri->t200_timer);
- pri->sabme_timer = 0;
- pri->sabme_count = 0;
- pri->t203_timer = 0;
- 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;
-
- /* Discard anything waiting to go out */
- if (reset_iqueue)
- q921_discard_retransmissions(pri);
-}
-#endif
-
-#if 0
-static void q921_tei_release_and_reacquire(struct pri *master)
-{
- /* Make sure the master is passed into this function */
- //q921_dchannel_down(master->subchannel);
- __pri_free_tei(master->subchannel);
- master->subchannel = NULL;
- master->ev.gen.e = PRI_EVENT_DCHAN_DOWN;
- master->schedev = 1;
- q921_start(master);
-}
-#endif
static pri_event *q921_receive_MDL(struct pri *pri, q921_u *h, int len)
{
@@ -1560,6 +1202,7 @@
static void q921_enquiry_response(struct pri *pri)
{
if (pri->own_rx_busy) {
+ /* XXX : TODO later sometime */
pri_error(pri, "Implement me %s: own_rx_busy\n", __FUNCTION__);
//q921_rnr(pri);
} else {
@@ -1790,7 +1433,7 @@
case Q921_MULTI_FRAME_ESTABLISHED:
/* FIXME: Verify that it's a command ... */
if (pri->own_rx_busy) {
- /* Note: There's a difference in th P/F between both states */
+ /* XXX: Note: There's a difference in th P/F between both states */
/* DEVIATION: Handle own rx busy */
}
@@ -2025,34 +1668,8 @@
ev = q921_rr_rx(pri, h);
break;
case 1:
- pri_error(pri, "%s:%d FIXME!!!\n", __FUNCTION__, __LINE__);
ev = q921_rnr_rx(pri, h);
-
- break;
-
-#if 0
- /* Receiver not ready */
- if (pri->debug & PRI_DEBUG_Q921_STATE)
- pri_message(pri, "-- Got receiver not ready\n");
- pri->busy = 1;
- ev = q921_ack_rx(pri, h->s.n_r, 0);
- if (ev)
- return ev;
- if (h->s.p_f && is_command(pri, h))
- q921_rr(pri, 1, 0);
- pri->solicitfbit = 1;
- pri->retrans = 0;
- if (pri->t203_timer) {
- 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->debug & PRI_DEBUG_Q921_DUMP)
- pri_message(pri, "Restarting T_200 timer\n");
- reschedule_t200(pri);
- break;
-#endif
+ break;
case 2:
/* Just retransmit */
if (pri->debug & PRI_DEBUG_Q921_STATE)
@@ -2233,26 +1850,6 @@
return e;
}
-#if 0
-static void q921_restart(struct pri *pri, int now)
-{
- pri_error(pri, "%s\n", __FUNCTION__);
-
- return;
-
- if (pri->q921_state != Q921_LINK_CONNECTION_RELEASED) {
- pri_error(pri, "!! q921_start: Not in 'Link Connection Released' state\n");
- return;
- }
- /* Reset our interface */
- q921_reset(pri, 1);
- /* Do the SABME XXX Maybe we should implement T_WAIT? XXX */
- pri->q921_state = Q921_AWAITING_ESTABLISHMENT;
-
- q921_send_sabme(pri, now);
-}
-#endif
-
static void q921_establish_data_link(struct pri *pri)
{
q921_clear_exception_conditions(pri);
@@ -2288,16 +1885,3 @@
}
}
-#if 0
-static void q921_start_old(struct pri *pri, int isCPE)
-{
- q921_reset(pri, 1);
- if ((pri->sapi == Q921_SAPI_LAYER2_MANAGEMENT) && (pri->tei == Q921_TEI_GROUP)) {
- pri->q921_state = Q921_DOWN;
- if (isCPE)
- q921_tei_request(pri);
- } else {
- q921_send_sabme(pri, isCPE);
- }
-}
-#endif
More information about the libpri-commits
mailing list