freetdm: Made CPG optional on configuration file
Fixes in hw alarm - no need to set hw unblock if hw block did not execute yet. Minor bug fixes
This commit is contained in:
parent
69f6f20fd2
commit
4b25044ac6
|
@ -94,7 +94,7 @@ int ft_to_sngss7_cfg_all(void)
|
||||||
/* set the desired procID value */
|
/* set the desired procID value */
|
||||||
sng_set_procId((uint16_t)g_ftdm_sngss7_data.cfg.procId);
|
sng_set_procId((uint16_t)g_ftdm_sngss7_data.cfg.procId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* start up the stack manager */
|
/* start up the stack manager */
|
||||||
if (sng_isup_init_sm()) {
|
if (sng_isup_init_sm()) {
|
||||||
SS7_CRITICAL("Failed to start Stack Manager\n");
|
SS7_CRITICAL("Failed to start Stack Manager\n");
|
||||||
|
|
|
@ -308,10 +308,14 @@ static void handle_hw_alarm(ftdm_event_t *e)
|
||||||
}
|
}
|
||||||
} else if (e->enum_id == FTDM_OOB_ALARM_CLEAR) {
|
} else if (e->enum_id == FTDM_OOB_ALARM_CLEAR) {
|
||||||
SS7_DEBUG("handle_hw_alarm: Clear\n");
|
SS7_DEBUG("handle_hw_alarm: Clear\n");
|
||||||
sngss7_set_ckt_blk_flag(ss7_info, FLAG_GRP_HW_UNBLK_TX);
|
sngss7_clear_ckt_blk_flag(ss7_info, FLAG_GRP_HW_BLOCK_TX);
|
||||||
SS7_DEBUG("handle_hw_alarm: Setting FLAG_GRP_HW_UNBLK_TX\n");
|
sngss7_clear_ckt_blk_flag(ss7_info, FLAG_GRP_HW_UNBLK_TX);
|
||||||
if (ftdmchan->state != FTDM_CHANNEL_STATE_SUSPENDED) {
|
if (sngss7_test_ckt_blk_flag(ss7_info, FLAG_GRP_HW_BLOCK_TX_DN)) {
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_SUSPENDED);
|
sngss7_set_ckt_blk_flag(ss7_info, FLAG_GRP_HW_UNBLK_TX);
|
||||||
|
SS7_DEBUG("handle_hw_alarm: Setting FLAG_GRP_HW_UNBLK_TX\n");
|
||||||
|
if (ftdmchan->state != FTDM_CHANNEL_STATE_SUSPENDED) {
|
||||||
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_SUSPENDED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -737,6 +741,12 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
|
||||||
sngss7_set_ckt_flag(sngss7_info, FLAG_SENT_ACM);
|
sngss7_set_ckt_flag(sngss7_info, FLAG_SENT_ACM);
|
||||||
ft_to_sngss7_acm(ftdmchan);
|
ft_to_sngss7_acm(ftdmchan);
|
||||||
}
|
}
|
||||||
|
if (g_ftdm_sngss7_data.cfg.isupCkt[sngss7_info->circuit->id].cpg_on_progress == FTDM_TRUE) {
|
||||||
|
if (!sngss7_test_ckt_flag(sngss7_info, FLAG_SENT_CPG)) {
|
||||||
|
sngss7_set_ckt_flag(sngss7_info, FLAG_SENT_CPG);
|
||||||
|
ft_to_sngss7_cpg(ftdmchan);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -756,7 +766,12 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
|
||||||
sngss7_set_ckt_flag(sngss7_info, FLAG_SENT_ACM);
|
sngss7_set_ckt_flag(sngss7_info, FLAG_SENT_ACM);
|
||||||
ft_to_sngss7_acm(ftdmchan);
|
ft_to_sngss7_acm(ftdmchan);
|
||||||
}
|
}
|
||||||
ft_to_sngss7_cpg(ftdmchan);
|
if (g_ftdm_sngss7_data.cfg.isupCkt[sngss7_info->circuit->id].cpg_on_progress_media == FTDM_TRUE) {
|
||||||
|
if (!sngss7_test_ckt_flag(sngss7_info, FLAG_SENT_CPG)) {
|
||||||
|
sngss7_set_ckt_flag(sngss7_info, FLAG_SENT_CPG);
|
||||||
|
ft_to_sngss7_cpg(ftdmchan);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -973,7 +988,10 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
|
||||||
/* all flags are down so we can bring up the sig status */
|
/* all flags are down so we can bring up the sig status */
|
||||||
sngss7_set_sig_status(sngss7_info, FTDM_SIG_STATE_UP);
|
sngss7_set_sig_status(sngss7_info, FTDM_SIG_STATE_UP);
|
||||||
} /* if (!ftdm_test_flag (ftdmchan, FTDM_CHANNEL_SIG_UP)) */
|
} /* if (!ftdm_test_flag (ftdmchan, FTDM_CHANNEL_SIG_UP)) */
|
||||||
} /* if !blocked */
|
} else {
|
||||||
|
state_flag = 0;
|
||||||
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_SUSPENDED);
|
||||||
|
} /* if !blocked */
|
||||||
} else {
|
} else {
|
||||||
SS7_DEBUG_CHAN(ftdmchan,"Reset flags present (0x%X)\n", sngss7_info->ckt_flags);
|
SS7_DEBUG_CHAN(ftdmchan,"Reset flags present (0x%X)\n", sngss7_info->ckt_flags);
|
||||||
|
|
||||||
|
@ -998,6 +1016,7 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
|
||||||
sngss7_clear_ckt_flag (sngss7_info, FLAG_REMOTE_REL);
|
sngss7_clear_ckt_flag (sngss7_info, FLAG_REMOTE_REL);
|
||||||
sngss7_clear_ckt_flag (sngss7_info, FLAG_LOCAL_REL);
|
sngss7_clear_ckt_flag (sngss7_info, FLAG_LOCAL_REL);
|
||||||
sngss7_clear_ckt_flag (sngss7_info, FLAG_SENT_ACM);
|
sngss7_clear_ckt_flag (sngss7_info, FLAG_SENT_ACM);
|
||||||
|
sngss7_clear_ckt_flag (sngss7_info, FLAG_SENT_CPG);
|
||||||
|
|
||||||
|
|
||||||
if (ftdm_test_flag (ftdmchan, FTDM_CHANNEL_OPEN)) {
|
if (ftdm_test_flag (ftdmchan, FTDM_CHANNEL_OPEN)) {
|
||||||
|
@ -1162,6 +1181,22 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
|
||||||
/* clear the PAUSE flag */
|
/* clear the PAUSE flag */
|
||||||
sngss7_clear_ckt_flag(sngss7_info, FLAG_INFID_PAUSED);
|
sngss7_clear_ckt_flag(sngss7_info, FLAG_INFID_PAUSED);
|
||||||
|
|
||||||
|
/* We have transmitted Reset/GRS but have not gotten a
|
||||||
|
* Response. In mean time we got a RESUME. We cannot be sure
|
||||||
|
* that our reset has been trasmitted, thus restart reset procedure. */
|
||||||
|
if (sngss7_tx_reset_status_pending(sngss7_info)) {
|
||||||
|
SS7_DEBUG_CHAN(ftdmchan, "Channel transmitted RSC/GRS before RESUME, restart Reset procedure%s\n", "");
|
||||||
|
clear_rx_grs_flags(sngss7_info);
|
||||||
|
clear_rx_grs_data(sngss7_info);
|
||||||
|
clear_tx_grs_flags(sngss7_info);
|
||||||
|
clear_tx_grs_data(sngss7_info);
|
||||||
|
clear_rx_rsc_flags(sngss7_info);
|
||||||
|
clear_tx_rsc_flags(sngss7_info);
|
||||||
|
|
||||||
|
clear_tx_rsc_flags(sngss7_info);
|
||||||
|
sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_TX);
|
||||||
|
}
|
||||||
|
|
||||||
/* if there are any resets present */
|
/* if there are any resets present */
|
||||||
if (!sngss7_channel_status_clear(sngss7_info)) {
|
if (!sngss7_channel_status_clear(sngss7_info)) {
|
||||||
/* don't bring up the sig status but also move to reset */
|
/* don't bring up the sig status but also move to reset */
|
||||||
|
|
|
@ -342,6 +342,8 @@ typedef struct sng_isup_ckt {
|
||||||
uint32_t min_digits;
|
uint32_t min_digits;
|
||||||
uint8_t itx_auto_reply;
|
uint8_t itx_auto_reply;
|
||||||
uint8_t transparent_iam;
|
uint8_t transparent_iam;
|
||||||
|
uint8_t cpg_on_progress_media;
|
||||||
|
uint8_t cpg_on_progress;
|
||||||
void *obj;
|
void *obj;
|
||||||
uint16_t t3;
|
uint16_t t3;
|
||||||
uint32_t t10;
|
uint32_t t10;
|
||||||
|
@ -534,6 +536,7 @@ typedef enum {
|
||||||
FLAG_INFID_RESUME = (1 << 14),
|
FLAG_INFID_RESUME = (1 << 14),
|
||||||
FLAG_INFID_PAUSED = (1 << 15),
|
FLAG_INFID_PAUSED = (1 << 15),
|
||||||
FLAG_SENT_ACM = (1 << 16),
|
FLAG_SENT_ACM = (1 << 16),
|
||||||
|
FLAG_SENT_CPG = (1 << 17),
|
||||||
FLAG_RELAY_DOWN = (1 << 30),
|
FLAG_RELAY_DOWN = (1 << 30),
|
||||||
FLAG_CKT_RECONFIG = (1 << 31)
|
FLAG_CKT_RECONFIG = (1 << 31)
|
||||||
} sng_ckt_flag_t;
|
} sng_ckt_flag_t;
|
||||||
|
@ -542,14 +545,14 @@ typedef enum {
|
||||||
"RX_RSC", \
|
"RX_RSC", \
|
||||||
"TX_RSC", \
|
"TX_RSC", \
|
||||||
"TX_RSC_REQ_SENT", \
|
"TX_RSC_REQ_SENT", \
|
||||||
"TX_RSC_RSP_RECIEVED", \
|
"TX_RSC_RSP_RECEIVED", \
|
||||||
"RX_GRS", \
|
"RX_GRS", \
|
||||||
"RX_GRS_DONE", \
|
"RX_GRS_DONE", \
|
||||||
"RX_GRS_CMPLT", \
|
"RX_GRS_CMPLT", \
|
||||||
"GRS_BASE", \
|
"GRS_BASE", \
|
||||||
"TX_GRS", \
|
"TX_GRS", \
|
||||||
"TX_GRS_REQ_SENT", \
|
"TX_GRS_REQ_SENT", \
|
||||||
"TX_GRS_RSP_RECIEVED", \
|
"TX_GRS_RSP_RECEIVED", \
|
||||||
"REMOTE_REL", \
|
"REMOTE_REL", \
|
||||||
"LOCAL_REL", \
|
"LOCAL_REL", \
|
||||||
"GLARE", \
|
"GLARE", \
|
||||||
|
@ -1058,6 +1061,11 @@ if (ftdmchan->state == new_state) { \
|
||||||
FLAG_GRP_RESET_TX | \
|
FLAG_GRP_RESET_TX | \
|
||||||
FLAG_GRP_RESET_RX )))
|
FLAG_GRP_RESET_RX )))
|
||||||
|
|
||||||
|
#define sngss7_tx_reset_status_pending(obj) ((sngss7_test_ckt_flag(obj, (FLAG_RESET_TX)) && \
|
||||||
|
sngss7_test_ckt_flag(obj, (FLAG_RESET_SENT))) || \
|
||||||
|
(sngss7_test_ckt_flag(obj, (FLAG_GRP_RESET_TX)) && \
|
||||||
|
sngss7_test_ckt_flag(obj, (FLAG_GRP_RESET_SENT))))
|
||||||
|
|
||||||
#define sngss7_channel_status_clear(obj) ((sngss7_block_status_clear(obj)) && (sngss7_reset_status_clear(obj)))
|
#define sngss7_channel_status_clear(obj) ((sngss7_block_status_clear(obj)) && (sngss7_reset_status_clear(obj)))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -128,6 +128,8 @@ typedef struct sng_ccSpan
|
||||||
uint32_t min_digits;
|
uint32_t min_digits;
|
||||||
uint8_t itx_auto_reply;
|
uint8_t itx_auto_reply;
|
||||||
uint8_t transparent_iam;
|
uint8_t transparent_iam;
|
||||||
|
uint8_t cpg_on_progress_media;
|
||||||
|
uint8_t cpg_on_progress;
|
||||||
uint32_t t3;
|
uint32_t t3;
|
||||||
uint32_t t10;
|
uint32_t t10;
|
||||||
uint32_t t12;
|
uint32_t t12;
|
||||||
|
@ -1906,6 +1908,14 @@ static int ftmod_ss7_parse_cc_span(ftdm_conf_node_t *cc_span)
|
||||||
sng_ccSpan.transparent_iam = ftdm_true(parm->val);
|
sng_ccSpan.transparent_iam = ftdm_true(parm->val);
|
||||||
SS7_DEBUG("Found transparent_iam %d\n", sng_ccSpan.transparent_iam);
|
SS7_DEBUG("Found transparent_iam %d\n", sng_ccSpan.transparent_iam);
|
||||||
#endif
|
#endif
|
||||||
|
} else if (!strcasecmp(parm->var, "cpg_on_progress_media")) {
|
||||||
|
sng_ccSpan.cpg_on_progress_media = ftdm_true(parm->val);
|
||||||
|
SS7_DEBUG("Found cpg_on_progress_media %d\n", sng_ccSpan.cpg_on_progress_media);
|
||||||
|
|
||||||
|
} else if (!strcasecmp(parm->var, "cpg_on_progress")) {
|
||||||
|
sng_ccSpan.cpg_on_progress = ftdm_true(parm->val);
|
||||||
|
SS7_DEBUG("Found cpg_on_progress_media %d\n", sng_ccSpan.cpg_on_progress);
|
||||||
|
|
||||||
} else if (!strcasecmp(parm->var, "cicbase")) {
|
} else if (!strcasecmp(parm->var, "cicbase")) {
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
sng_ccSpan.cicbase = atoi(parm->val);
|
sng_ccSpan.cicbase = atoi(parm->val);
|
||||||
|
@ -2941,6 +2951,8 @@ static int ftmod_ss7_fill_in_ccSpan(sng_ccSpan_t *ccSpan)
|
||||||
g_ftdm_sngss7_data.cfg.isupCkt[x].min_digits = ccSpan->min_digits;
|
g_ftdm_sngss7_data.cfg.isupCkt[x].min_digits = ccSpan->min_digits;
|
||||||
g_ftdm_sngss7_data.cfg.isupCkt[x].itx_auto_reply = ccSpan->itx_auto_reply;
|
g_ftdm_sngss7_data.cfg.isupCkt[x].itx_auto_reply = ccSpan->itx_auto_reply;
|
||||||
g_ftdm_sngss7_data.cfg.isupCkt[x].transparent_iam = ccSpan->transparent_iam;
|
g_ftdm_sngss7_data.cfg.isupCkt[x].transparent_iam = ccSpan->transparent_iam;
|
||||||
|
g_ftdm_sngss7_data.cfg.isupCkt[x].cpg_on_progress_media = ccSpan->cpg_on_progress_media;
|
||||||
|
g_ftdm_sngss7_data.cfg.isupCkt[x].cpg_on_progress = ccSpan->cpg_on_progress;
|
||||||
|
|
||||||
if (ccSpan->t3 == 0) {
|
if (ccSpan->t3 == 0) {
|
||||||
g_ftdm_sngss7_data.cfg.isupCkt[x].t3 = 1200;
|
g_ftdm_sngss7_data.cfg.isupCkt[x].t3 = 1200;
|
||||||
|
|
Loading…
Reference in New Issue