cfg.t.cfg.s.inDLSAP.clrGlr = FALSE; /* in case of glare, do not clear local call */
cfg.t.cfg.s.inDLSAP.statEnqOpt = TRUE;
- cfg.t.cfg.s.inDLSAP.rstOpt = TRUE;
+ if (signal_data->ftdm_span->trunk_type == FTDM_TRUNK_BRI_PTMP) {
+ cfg.t.cfg.s.inDLSAP.rstOpt = FALSE;
+ } else {
+ cfg.t.cfg.s.inDLSAP.rstOpt = TRUE;
+ }
} else {
cfg.t.cfg.s.inDLSAP.ackOpt = FALSE;
cfg.t.cfg.s.inDLSAP.intType = USER;
cfg.t.cfg.s.inDLSAP.tmr.t307.val = 35;
cfg.t.cfg.s.inDLSAP.tmr.t308.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t308.val = 4;
+ cfg.t.cfg.s.inDLSAP.tmr.t310.enb = TRUE;
+ cfg.t.cfg.s.inDLSAP.tmr.t310.val = 120;
if (signal_data->signalling == SNGISDN_SIGNALING_NET) {
- cfg.t.cfg.s.inDLSAP.tmr.t310.enb = TRUE;
- cfg.t.cfg.s.inDLSAP.tmr.t310.val = 10;
cfg.t.cfg.s.inDLSAP.tmr.t312.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t312.val = cfg.t.cfg.s.inDLSAP.tmr.t303.val+2;
} else {
- cfg.t.cfg.s.inDLSAP.tmr.t310.enb = TRUE;
- cfg.t.cfg.s.inDLSAP.tmr.t310.val = 120;
cfg.t.cfg.s.inDLSAP.tmr.t312.enb = FALSE;
}
cfg.t.cfg.s.inLCe.sapId = signal_data->dchan_id;
- cfg.t.cfg.s.inLCe.lnkUpDwnInd = TRUE;
+ if (span->trunk_type == FTDM_TRUNK_BRI_PTMP) {
+ /* Stack will send Restart CFM's each time link is established (TEI negotiated),
+ and we do not want thi s event */
+ cfg.t.cfg.s.inLCe.lnkUpDwnInd = FALSE;
+ } else {
+ cfg.t.cfg.s.inLCe.lnkUpDwnInd = TRUE;
+ }
+
cfg.t.cfg.s.inLCe.tCon.enb = TRUE;
cfg.t.cfg.s.inLCe.tCon.val = 35;
cfg.t.cfg.s.inLCe.tDisc.enb = TRUE;
ftdm_log(FTDM_LOG_CRIT, "Received RESTART CFM on unconfigured span (suId:%d)\n", suId);
return;
}
-
+
+ ftdm_log(FTDM_LOG_DEBUG, "%s: Processing RESTART CFM (suId:%u dChan:%d ces:%d %s(%d))\n",
+ signal_data->ftdm_span->name,
+ suId, dChan, ces,
+ (evntType == IN_LNK_DWN)?"LNK_DOWN":
+ (evntType == IN_LNK_UP)?"LNK_UP":
+ (evntType == IN_INDCHAN)?"b-channel":
+ (evntType == IN_LNK_DWN_DM_RLS)?"NFAS service procedures":
+ (evntType == IN_SWCHD_BU_DCHAN)?"NFAS switchover to backup":"Unknown", evntType);
+
if (rstEvnt->rstInd.eh.pres == PRSNT_NODEF && rstEvnt->rstInd.rstClass.pres == PRSNT_NODEF) {
switch(rstEvnt->rstInd.rstClass.val) {
case IN_CL_INDCHAN: /* Indicated b-channel */
}
if (chan_no) { /* For a single channel */
- if (chan_no > ftdm_span_get_chan_count(signal_data->ftdm_span)) {
- ftdm_log(FTDM_LOG_CRIT, "Received RESTART on invalid channel:%d\n", chan_no);
- } else {
- ftdm_channel_t *ftdmchan = ftdm_span_get_channel(signal_data->ftdm_span, chan_no);
- sngisdn_bring_down(ftdmchan);
+ ftdm_iterator_t *chaniter = NULL;
+ ftdm_iterator_t *curr = NULL;
+
+ chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
+ for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
+ ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
+ sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*) ftdmchan->call_data;
+ if (sngisdn_info->ces == ces && ftdmchan->physical_chan_id == chan_no) {
+ sngisdn_bring_down(ftdmchan);
+ }
}
+ ftdm_iterator_free(chaniter);
} else { /* for all channels */
ftdm_iterator_t *chaniter = NULL;
ftdm_iterator_t *curr = NULL;
chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
- sngisdn_bring_down((ftdm_channel_t*)ftdm_iterator_current(curr));
+ ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
+ sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*) ftdmchan->call_data;
+ if (sngisdn_info->ces == ces) {
+ sngisdn_bring_down(ftdmchan);
+ }
}
ftdm_iterator_free(chaniter);
}
}
if (chan_no) { /* For a single channel */
- if (chan_no > ftdm_span_get_chan_count(signal_data->ftdm_span)) {
- ftdm_log(FTDM_LOG_CRIT, "Received RESTART IND on invalid channel:%d\n", chan_no);
- } else {
- ftdm_iterator_t *chaniter = NULL;
- ftdm_iterator_t *curr = NULL;
-
- chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
- for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
- ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
- if (ftdmchan->physical_chan_id == chan_no) {
- sngisdn_bring_down(ftdmchan);
- }
+ ftdm_iterator_t *chaniter = NULL;
+ ftdm_iterator_t *curr = NULL;
+
+ chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
+ for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
+ ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
+ sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*) ftdmchan->call_data;
+ if (sngisdn_info->ces == ces && ftdmchan->physical_chan_id == chan_no) {
+ sngisdn_bring_down(ftdmchan);
}
- ftdm_iterator_free(chaniter);
}
+ ftdm_iterator_free(chaniter);
} else { /* for all channels */
ftdm_iterator_t *chaniter = NULL;
ftdm_iterator_t *curr = NULL;
chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
- sngisdn_bring_down((ftdm_channel_t*)ftdm_iterator_current(curr));
+ ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
+ sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*) ftdmchan->call_data;
+ if (sngisdn_info->ces == ces) {
+ sngisdn_bring_down(ftdmchan);
+ }
}
ftdm_iterator_free(chaniter);
}
switch (level) {
case SNG_LOGLEVEL_DEBUG:
- ftdm_log(FTDM_LOG_DEBUG, "sng_isdn->%s", data);
+ ftdm_log(FTDM_LOG_DEBUG, "sng_isdn->%s\n", data);
break;
case SNG_LOGLEVEL_WARN:
- ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s", data);
+ ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);
break;
case SNG_LOGLEVEL_INFO:
- ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s", data);
+ ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);
break;
case SNG_LOGLEVEL_STATS:
- ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s", data);
+ ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);
break;
case SNG_LOGLEVEL_ERROR:
- ftdm_log(FTDM_LOG_ERROR, "sng_isdn->%s", data);
+ ftdm_log(FTDM_LOG_ERROR, "sng_isdn->%s\n", data);
/*ftdm_assert(0, "Got an error from stack");*/
break;
case SNG_LOGLEVEL_CRIT:
- ftdm_log(FTDM_LOG_CRIT, "sng_isdn->%s", data);
+ ftdm_log(FTDM_LOG_CRIT, "sng_isdn->%s\n", data);
/* ftdm_assert(0, "Got an error from stack"); */
break;
default:
- ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s", data);
+ ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);
break;
}
ftdm_safe_free(data);