Project

General

Profile

Actions

Bug #1798

closed

dynpdch and repairing of broken channels

Added by zecke over 7 years ago. Updated over 7 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
-
Target version:
-
Start date:
08/18/2016
Due date:
% Done:

100%

Resolution:
Spec Reference:

Description

Going through the lchan issue and looking at rsl_rx_rf_chan_rel_ack I see that there is a path we don't do the pdch switching? What is the reason for it?

static int rsl_rx_rf_chan_rel_ack(struct gsm_lchan *lchan)
{

        DEBUGP(DRSL, "%s RF CHANNEL RELEASE ACK\n", gsm_lchan_name(lchan));

        /* Stop all pending timers */
        osmo_timer_del(&lchan->act_timer);
        osmo_timer_del(&lchan->T3111);

        /*
         * The BTS didn't respond within the timeout to our channel
         * release request and we have marked the channel as broken.
         * Now we do receive an ACK and let's be conservative. If it
         * is a sysmoBTS we know that only one RF Channel Release ACK
         * will be sent. So let's "repair" the channel.
         */
        if (lchan->state == LCHAN_S_BROKEN) {
                int do_free = is_sysmobts_v2(lchan->ts->trx->bts);
                LOGP(DRSL, LOGL_NOTICE,
                        "%s CHAN REL ACK for broken channel. %s.\n",
                        gsm_lchan_name(lchan),
                        do_free ? "Releasing it" : "Keeping it broken");
                if (do_free)
                        do_lchan_free(lchan);

!!!!
!!!!  No switch of the PDCH here!
!!!!
!!!!

                return 0;
        }

        if (lchan->state != LCHAN_S_REL_REQ && lchan->state != LCHAN_S_REL_ERR)
                LOGP(DRSL, LOGL_NOTICE, "%s CHAN REL ACK but state %s\n",
                        gsm_lchan_name(lchan),
                        gsm_lchans_name(lchan->state));

        do_lchan_free(lchan);

        /*
         * Put a dynamic TCH/F_PDCH channel back to PDCH mode iff it was
         * released successfully. If in error, the PDCH ACT will follow after
         * T3111 in error_timeout_cb().
         *
         * Any state other than LCHAN_S_REL_ERR became LCHAN_S_NONE after above
         * do_lchan_free(). Assert this, because that's what ensures a PDCH ACT
         * on a dynamic channel in all cases.
         */
        OSMO_ASSERT(lchan->state == LCHAN_S_NONE
                    || lchan->state == LCHAN_S_REL_ERR);
        if (lchan->ts->pchan == GSM_PCHAN_TCH_F_PDCH
            && lchan->state == LCHAN_S_NONE)
                return rsl_ipacc_pdch_activate(lchan->ts, 1);

        return 0;
}
Actions

Also available in: Atom PDF

Add picture from clipboard (Maximum size: 48.8 MB)