mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 08:49:01 +00:00
freetdm: Increased T310 to 120 sec on network side, added check for ces when handling Restarts
This commit is contained in:
parent
36619284e9
commit
621337ff15
@ -681,7 +681,11 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
|
|||||||
cfg.t.cfg.s.inDLSAP.clrGlr = FALSE; /* in case of glare, do not clear local call */
|
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.statEnqOpt = 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;
|
cfg.t.cfg.s.inDLSAP.rstOpt = TRUE;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
cfg.t.cfg.s.inDLSAP.ackOpt = FALSE;
|
cfg.t.cfg.s.inDLSAP.ackOpt = FALSE;
|
||||||
cfg.t.cfg.s.inDLSAP.intType = USER;
|
cfg.t.cfg.s.inDLSAP.intType = USER;
|
||||||
@ -772,15 +776,13 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
|
|||||||
cfg.t.cfg.s.inDLSAP.tmr.t307.val = 35;
|
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.enb = TRUE;
|
||||||
cfg.t.cfg.s.inDLSAP.tmr.t308.val = 4;
|
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) {
|
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.enb = TRUE;
|
||||||
cfg.t.cfg.s.inDLSAP.tmr.t312.val = cfg.t.cfg.s.inDLSAP.tmr.t303.val+2;
|
cfg.t.cfg.s.inDLSAP.tmr.t312.val = cfg.t.cfg.s.inDLSAP.tmr.t303.val+2;
|
||||||
} else {
|
} 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.inDLSAP.tmr.t312.enb = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -908,7 +910,14 @@ ftdm_status_t sngisdn_stack_cfg_q931_lce(ftdm_span_t *span)
|
|||||||
|
|
||||||
cfg.t.cfg.s.inLCe.sapId = signal_data->dchan_id;
|
cfg.t.cfg.s.inLCe.sapId = signal_data->dchan_id;
|
||||||
|
|
||||||
|
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.lnkUpDwnInd = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
cfg.t.cfg.s.inLCe.tCon.enb = TRUE;
|
cfg.t.cfg.s.inLCe.tCon.enb = TRUE;
|
||||||
cfg.t.cfg.s.inLCe.tCon.val = 35;
|
cfg.t.cfg.s.inLCe.tCon.val = 35;
|
||||||
cfg.t.cfg.s.inLCe.tDisc.enb = TRUE;
|
cfg.t.cfg.s.inLCe.tDisc.enb = TRUE;
|
||||||
|
@ -1179,6 +1179,15 @@ void sngisdn_process_rst_cfm (sngisdn_event_data_t *sngisdn_event)
|
|||||||
return;
|
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) {
|
if (rstEvnt->rstInd.eh.pres == PRSNT_NODEF && rstEvnt->rstInd.rstClass.pres == PRSNT_NODEF) {
|
||||||
switch(rstEvnt->rstInd.rstClass.val) {
|
switch(rstEvnt->rstInd.rstClass.val) {
|
||||||
case IN_CL_INDCHAN: /* Indicated b-channel */
|
case IN_CL_INDCHAN: /* Indicated b-channel */
|
||||||
@ -1212,19 +1221,29 @@ void sngisdn_process_rst_cfm (sngisdn_event_data_t *sngisdn_event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (chan_no) { /* For a single channel */
|
if (chan_no) { /* For a single channel */
|
||||||
if (chan_no > ftdm_span_get_chan_count(signal_data->ftdm_span)) {
|
ftdm_iterator_t *chaniter = NULL;
|
||||||
ftdm_log(FTDM_LOG_CRIT, "Received RESTART on invalid channel:%d\n", chan_no);
|
ftdm_iterator_t *curr = NULL;
|
||||||
} else {
|
|
||||||
ftdm_channel_t *ftdmchan = ftdm_span_get_channel(signal_data->ftdm_span, chan_no);
|
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);
|
sngisdn_bring_down(ftdmchan);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
ftdm_iterator_free(chaniter);
|
||||||
} else { /* for all channels */
|
} else { /* for all channels */
|
||||||
ftdm_iterator_t *chaniter = NULL;
|
ftdm_iterator_t *chaniter = NULL;
|
||||||
ftdm_iterator_t *curr = NULL;
|
ftdm_iterator_t *curr = NULL;
|
||||||
|
|
||||||
chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
|
chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
|
||||||
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
|
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);
|
ftdm_iterator_free(chaniter);
|
||||||
}
|
}
|
||||||
@ -1305,28 +1324,29 @@ void sngisdn_process_rst_ind (sngisdn_event_data_t *sngisdn_event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (chan_no) { /* For a single 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 IND on invalid channel:%d\n", chan_no);
|
|
||||||
} else {
|
|
||||||
ftdm_iterator_t *chaniter = NULL;
|
ftdm_iterator_t *chaniter = NULL;
|
||||||
ftdm_iterator_t *curr = NULL;
|
ftdm_iterator_t *curr = NULL;
|
||||||
|
|
||||||
chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
|
chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
|
||||||
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
|
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
|
||||||
ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
|
ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
|
||||||
if (ftdmchan->physical_chan_id == chan_no) {
|
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);
|
sngisdn_bring_down(ftdmchan);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ftdm_iterator_free(chaniter);
|
ftdm_iterator_free(chaniter);
|
||||||
}
|
|
||||||
} else { /* for all channels */
|
} else { /* for all channels */
|
||||||
ftdm_iterator_t *chaniter = NULL;
|
ftdm_iterator_t *chaniter = NULL;
|
||||||
ftdm_iterator_t *curr = NULL;
|
ftdm_iterator_t *curr = NULL;
|
||||||
|
|
||||||
chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
|
chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
|
||||||
for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
|
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);
|
ftdm_iterator_free(chaniter);
|
||||||
}
|
}
|
||||||
|
@ -990,27 +990,27 @@ void sngisdn_rcv_sng_log(uint8_t level, char *fmt,...)
|
|||||||
|
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case SNG_LOGLEVEL_DEBUG:
|
case SNG_LOGLEVEL_DEBUG:
|
||||||
ftdm_log(FTDM_LOG_DEBUG, "sng_isdn->%s", data);
|
ftdm_log(FTDM_LOG_DEBUG, "sng_isdn->%s\n", data);
|
||||||
break;
|
break;
|
||||||
case SNG_LOGLEVEL_WARN:
|
case SNG_LOGLEVEL_WARN:
|
||||||
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s", data);
|
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);
|
||||||
break;
|
break;
|
||||||
case SNG_LOGLEVEL_INFO:
|
case SNG_LOGLEVEL_INFO:
|
||||||
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s", data);
|
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);
|
||||||
break;
|
break;
|
||||||
case SNG_LOGLEVEL_STATS:
|
case SNG_LOGLEVEL_STATS:
|
||||||
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s", data);
|
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);
|
||||||
break;
|
break;
|
||||||
case SNG_LOGLEVEL_ERROR:
|
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");*/
|
/*ftdm_assert(0, "Got an error from stack");*/
|
||||||
break;
|
break;
|
||||||
case SNG_LOGLEVEL_CRIT:
|
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"); */
|
/* ftdm_assert(0, "Got an error from stack"); */
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s", data);
|
ftdm_log(FTDM_LOG_INFO, "sng_isdn->%s\n", data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ftdm_safe_free(data);
|
ftdm_safe_free(data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user