]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: ISDN-Fix for d-channel indexing, causing improper configuration on non-conse...
authorDavid Yat Sin <dyatsin@sangoma.com>
Thu, 13 Jan 2011 21:28:31 +0000 (16:28 -0500)
committerDavid Yat Sin <dyatsin@sangoma.com>
Thu, 13 Jan 2011 21:28:31 +0000 (16:28 -0500)
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cfg.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cntrl.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c
libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c

index 585f6d4aa0bb69c8770ce7f8f011da40b2473ccf..100631f345445d05d4afe9d4bfa7cb59b6616c01 100644 (file)
@@ -150,7 +150,7 @@ static ftdm_status_t parse_switchtype(const char* switch_name, ftdm_span_t *span
 
        g_sngisdn_data.spans[signal_data->link_id] = signal_data;
        
-       ftdm_log(FTDM_LOG_DEBUG, "%s: cc_id:%d dchan_id:%d span_id:%d\n", span->name, signal_data->cc_id, signal_data->dchan_id, signal_data->span_id);
+       ftdm_log(FTDM_LOG_DEBUG, "%s: cc_id:%d dchan_id:%d span_id:%d link_id:%d\n", span->name, signal_data->cc_id, signal_data->dchan_id, signal_data->span_id, signal_data->link_id);
 
        
        chaniter = ftdm_span_get_chan_iterator(span, NULL);
index de10a9fac0ff7eeac6f1c1df02b8e73b6f273118..a52a624dd0df8f47c4fbbef0619a3cda23b55bef 100644 (file)
@@ -216,7 +216,7 @@ ftdm_status_t sngisdn_stack_cfg_phy_psap(ftdm_span_t *span)
        cfg.hdr.entId.inst  = S_INST;
        cfg.hdr.elmId.elmnt = STPSAP;
 
-       cfg.hdr.elmId.elmntInst1    = signal_data->link_id;
+       cfg.hdr.elmId.elmntInst1    = signal_data->dchan_id;
 
        if (!signal_data->dchan) {
                ftdm_log(FTDM_LOG_ERROR, "%s:No d-channels specified\n", span->name);
@@ -241,7 +241,8 @@ ftdm_status_t sngisdn_stack_cfg_phy_psap(ftdm_span_t *span)
                        ftdm_log(FTDM_LOG_ERROR, "%s:Unsupported trunk type %d\n", span->name, span->trunk_type);
                        return FTDM_FAIL;
        }
-       cfg.t.cfg.s.l1PSAP.spId         = signal_data->link_id;
+
+       cfg.t.cfg.s.l1PSAP.spId         = signal_data->dchan_id;
 
        if (sng_isdn_phy_config(&pst, &cfg)) {
                return FTDM_FAIL;
@@ -315,7 +316,7 @@ ftdm_status_t sngisdn_stack_cfg_q921_msap(ftdm_span_t *span)
        cfg.hdr.entId.inst  = S_INST;
        cfg.hdr.elmId.elmnt = STMSAP;
 
-       cfg.t.cfg.s.bdMSAP.lnkNmb      = signal_data->link_id;
+       cfg.t.cfg.s.bdMSAP.lnkNmb      = signal_data->dchan_id;
 
        cfg.t.cfg.s.bdMSAP.maxOutsFrms = 24;            /* MAC window */
        cfg.t.cfg.s.bdMSAP.tQUpperTrs  = 32;           /* Tx Queue Upper Threshold */
@@ -408,7 +409,7 @@ ftdm_status_t sngisdn_stack_cfg_q921_dlsap(ftdm_span_t *span, uint8_t management
        cfg.hdr.entId.inst  = S_INST;
        cfg.hdr.elmId.elmnt = STDLSAP;
 
-       cfg.t.cfg.s.bdDLSAP.lnkNmb              = signal_data->link_id;
+       cfg.t.cfg.s.bdDLSAP.lnkNmb              = signal_data->dchan_id;
 
        cfg.t.cfg.s.bdDLSAP.n201                = 1028;                 /* n201 */
        if (span->trunk_type == FTDM_TRUNK_BRI_PTMP ||
@@ -613,9 +614,9 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
 
        cfg.hdr.response.selector=0;
 
+       cfg.t.cfg.s.inDLSAP.sapId = signal_data->dchan_id;
+       cfg.t.cfg.s.inDLSAP.spId = signal_data->dchan_id;
 
-       cfg.t.cfg.s.inDLSAP.sapId = signal_data->link_id;
-       cfg.t.cfg.s.inDLSAP.spId = signal_data->link_id;
        cfg.t.cfg.s.inDLSAP.swtch = sng_isdn_stack_switchtype(signal_data->switchtype);
 
        cfg.t.cfg.s.inDLSAP.n201 = 1024;
@@ -876,8 +877,7 @@ ftdm_status_t sngisdn_stack_cfg_q931_lce(ftdm_span_t *span)
 
        cfg.hdr.response.selector=0;
 
-       cfg.t.cfg.s.inLCe.sapId = signal_data->link_id;
-
+       cfg.t.cfg.s.inLCe.sapId = signal_data->dchan_id;
 
        cfg.t.cfg.s.inLCe.lnkUpDwnInd = TRUE;
        cfg.t.cfg.s.inLCe.tCon.enb = TRUE;
index 225244f57ec6016b0f1bdcb774a02720110f8b71..2023f4c54c04c3eaa307604570d31c652f15071d 100644 (file)
@@ -146,7 +146,8 @@ ftdm_status_t sngisdn_deactivate_phy(ftdm_span_t *span)
 
        cntrl.t.cntrl.action = AUBND_DIS;
        cntrl.t.cntrl.subAction = SAELMNT;
-       cntrl.t.cntrl.sapId = signal_data->link_id;
+
+       cntrl.t.cntrl.sapId = signal_data->dchan_id;
        
        if (sng_isdn_phy_cntrl(&pst, &cntrl)) {
                return FTDM_FAIL;
@@ -180,7 +181,8 @@ ftdm_status_t sngisdn_wake_up_phy(ftdm_span_t *span)
 
        cntrl.t.cntrl.action = AENA;
        cntrl.t.cntrl.subAction = SAELMNT;
-       cntrl.t.cntrl.sapId = signal_data->link_id;
+
+       cntrl.t.cntrl.sapId = signal_data->dchan_id;
        
        if (sng_isdn_phy_cntrl(&pst, &cntrl)) {
                return FTDM_FAIL;
@@ -298,7 +300,8 @@ ftdm_status_t sngisdn_cntrl_q931(ftdm_span_t *span, uint8_t action, uint8_t suba
        if (action == AENA && subaction == SATRC) {
                cntrl.t.cntrl.trcLen = -1; /* Trace the entire message buffer */
        }
-       cntrl.t.cntrl.sapId = signal_data->link_id;
+
+       cntrl.t.cntrl.sapId = signal_data->dchan_id;
        cntrl.t.cntrl.ces = 0;
 
        if(sng_isdn_q931_cntrl(&pst, &cntrl)) {
@@ -339,11 +342,11 @@ ftdm_status_t sngisdn_cntrl_q921(ftdm_span_t *span, uint8_t action, uint8_t suba
        cntrl.t.cntrl.subAction    = subaction;
 
 #if (SMBD_LMINT3 || BD_LMINT3)
-       cntrl.t.cntrl.lnkNmb       = signal_data->link_id;
+       cntrl.t.cntrl.lnkNmb       = signal_data->dchan_id;
        cntrl.t.cntrl.sapi         = NOTUSED;
        cntrl.t.cntrl.tei          = NOTUSED;
 #else /* _LMINT3 */
-       cntrl.hdr.elmId.elmntInst1 = signal_data->link_id;
+       cntrl.hdr.elmId.elmntInst1 = signal_data->dchan_id;
        cntrl.hdr.elmId.elmntInst2 = NOTUSED;
        cntrl.hdr.elmId.elmntInst3 = NOTUSED;
 #endif /* _LMINT3 */
index 9b4b7872c464c1be0de6b5ac8c3d849b6cca91cb..4b27f21e1ce13e643d895406d70122dba2c7d0df 100644 (file)
@@ -491,8 +491,8 @@ void sngisdn_snd_data(ftdm_channel_t *dchan, uint8_t *data, ftdm_size_t len)
                /* Should we trigger congestion here? */
                l1_frame.flags |= SNG_L1FRAME_QUEUE_FULL;
        }
-       
-       sng_isdn_data_ind(signal_data->link_id, &l1_frame);
+
+       sng_isdn_data_ind(signal_data->dchan_id, &l1_frame);
 }
 
 void sngisdn_snd_event(ftdm_channel_t *dchan, ftdm_oob_event_t event)
@@ -506,11 +506,11 @@ void sngisdn_snd_event(ftdm_channel_t *dchan, ftdm_oob_event_t event)
        switch(event) {
                case FTDM_OOB_ALARM_CLEAR:
                        l1_event.type = SNG_L1EVENT_ALARM_OFF;
-                       sng_isdn_event_ind(signal_data->link_id, &l1_event);
+                       sng_isdn_event_ind(signal_data->dchan_id, &l1_event);
                        break;
                case FTDM_OOB_ALARM_TRAP:
                        l1_event.type = SNG_L1EVENT_ALARM_ON;
-                       sng_isdn_event_ind(signal_data->link_id, &l1_event);
+                       sng_isdn_event_ind(signal_data->dchan_id, &l1_event);
                        break;
                default:
                        /* We do not care about the other OOB events for now */
index a90968f64bd353f8db012db6881e23c2ce729901..791b65f0f6e256afcee105e2cd5da8e8ff671046 100644 (file)
@@ -662,7 +662,9 @@ void sngisdn_rcv_phy_ind(SuId suId, Reason reason)
 void sngisdn_rcv_q921_ind(BdMngmt *status)
 {      
        ftdm_span_t *ftdmspan;
-       sngisdn_span_data_t     *signal_data = g_sngisdn_data.spans[status->t.usta.lnkNmb];
+
+       sngisdn_span_data_t     *signal_data = g_sngisdn_data.dchans[status->t.usta.lnkNmb].spans[1];
+       
        if (!signal_data) {
                ftdm_log(FTDM_LOG_INFO, "Received q921 status on unconfigured span (lnkNmb:%d)\n", status->t.usta.lnkNmb);
                return;
@@ -715,7 +717,7 @@ void sngisdn_rcv_q931_ind(InMngmt *status)
                case LCM_EVENT_DOWN:
                {
                        ftdm_span_t *ftdmspan;
-                       sngisdn_span_data_t     *signal_data = g_sngisdn_data.spans[status->t.usta.suId];
+                       sngisdn_span_data_t     *signal_data = g_sngisdn_data.dchans[status->t.usta.suId].spans[1];
                        if (!signal_data) {
                                ftdm_log(FTDM_LOG_INFO, "Received q931 status on unconfigured span (lnkNmb:%d)\n", status->t.usta.suId);
                                return;
@@ -784,7 +786,8 @@ void sngisdn_rcv_q931_trace(InMngmt *trc, Buffer *mBuf)
        uint8_t data;
        ftdm_trace_dir_t dir;
        uint8_t tdata[1000];
-       sngisdn_span_data_t     *signal_data = g_sngisdn_data.spans[trc->t.trc.suId];
+
+       sngisdn_span_data_t     *signal_data = g_sngisdn_data.dchans[trc->t.trc.suId].spans[1];
 
        ftdm_assert(mBuf != NULLP, "Received a Q931 trace with no buffer");
        mlen = ((SsMsgInfo*)(mBuf->b_rptr))->len;
@@ -830,7 +833,8 @@ void sngisdn_rcv_q921_trace(BdMngmt *trc, Buffer *mBuf)
        uint8_t data;
        ftdm_trace_dir_t dir;
        uint8_t tdata[1000];
-       sngisdn_span_data_t     *signal_data = g_sngisdn_data.spans[trc->t.trc.lnkNmb];
+
+       sngisdn_span_data_t     *signal_data = g_sngisdn_data.dchans[trc->t.trc.lnkNmb].spans[1];
 
        if (trc->t.trc.evnt == TL2TMR) {
                return;
@@ -879,7 +883,7 @@ int16_t sngisdn_rcv_l1_data_req(uint16_t spId, sng_l1_frame_t *l1_frame)
 {
        ftdm_status_t status;
        ftdm_wait_flag_t flags = FTDM_WRITE;
-       sngisdn_span_data_t     *signal_data = g_sngisdn_data.spans[spId];      
+       sngisdn_span_data_t     *signal_data = g_sngisdn_data.dchans[spId].spans[1];
        ftdm_size_t length = l1_frame->len;
 
        ftdm_assert(signal_data, "Received Data request on unconfigured span\n");
@@ -912,8 +916,8 @@ int16_t sngisdn_rcv_l1_data_req(uint16_t spId, sng_l1_frame_t *l1_frame)
 }
 
 int16_t sngisdn_rcv_l1_cmd_req(uint16_t spId, sng_l1_cmd_t *l1_cmd)
-{      
-       sngisdn_span_data_t     *signal_data = g_sngisdn_data.spans[spId];
+{
+       sngisdn_span_data_t     *signal_data = g_sngisdn_data.dchans[spId].spans[1];
        ftdm_assert(signal_data, "Received Data request on unconfigured span\n");
        
        switch(l1_cmd->type) {