Fixed the out of sequence frame condition
Redmine Bug#1966 IAM -> <-REL <-ACM <-ANM ACM sets the reset flag ANM sets the group reset flag when both reset flags are set we got into infinite loop
This commit is contained in:
parent
cb1d5be5e6
commit
69c62f7b38
|
@ -322,12 +322,14 @@ handle_glare:
|
||||||
default: /* should not have gotten an IAM while in this state */
|
default: /* should not have gotten an IAM while in this state */
|
||||||
SS7_ERROR_CHAN(ftdmchan, "Got IAM on channel in invalid state(%s)...reset!\n", ftdm_channel_state2str (ftdmchan->state));
|
SS7_ERROR_CHAN(ftdmchan, "Got IAM on channel in invalid state(%s)...reset!\n", ftdm_channel_state2str (ftdmchan->state));
|
||||||
|
|
||||||
/* reset the cic */
|
/* throw the TX reset flag */
|
||||||
sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_TX);
|
if (!sngss7_tx_reset_status_pending(sngss7_info)) {
|
||||||
|
sngss7_info->ckt_flags=0;
|
||||||
/* move the state of the channel to RESTART to force a reset */
|
sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_TX);
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART);
|
|
||||||
|
|
||||||
|
/* go to RESTART */
|
||||||
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
} /* switch (ftdmchan->state) */
|
} /* switch (ftdmchan->state) */
|
||||||
|
@ -393,11 +395,14 @@ ftdm_status_t handle_con_sta(uint32_t suInstId, uint32_t spInstId, uint32_t circ
|
||||||
SS7_ERROR_CHAN(ftdmchan, "RX ACM in invalid state :%s...resetting CIC\n",
|
SS7_ERROR_CHAN(ftdmchan, "RX ACM in invalid state :%s...resetting CIC\n",
|
||||||
ftdm_channel_state2str (ftdmchan->state));
|
ftdm_channel_state2str (ftdmchan->state));
|
||||||
|
|
||||||
/* reset the cic */
|
/* throw the TX reset flag */
|
||||||
sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_TX);
|
if (!sngss7_tx_reset_status_pending(sngss7_info)) {
|
||||||
|
sngss7_info->ckt_flags=0;
|
||||||
|
sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_TX);
|
||||||
|
|
||||||
/* go to RESTART */
|
/* go to RESTART */
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART);
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
} /* switch (ftdmchan->state) */
|
} /* switch (ftdmchan->state) */
|
||||||
|
@ -657,10 +662,13 @@ ftdm_status_t handle_con_cfm(uint32_t suInstId, uint32_t spInstId, uint32_t circ
|
||||||
SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Rx ANM/CON\n", sngss7_info->circuit->cic);
|
SS7_INFO_CHAN(ftdmchan,"[CIC:%d]Rx ANM/CON\n", sngss7_info->circuit->cic);
|
||||||
|
|
||||||
/* throw the TX reset flag */
|
/* throw the TX reset flag */
|
||||||
sngss7_set_ckt_flag(sngss7_info, FLAG_GRP_RESET_TX);
|
if (!sngss7_tx_reset_status_pending(sngss7_info)) {
|
||||||
|
sngss7_info->ckt_flags=0;
|
||||||
|
sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_TX);
|
||||||
|
|
||||||
/* go to RESTART */
|
/* go to RESTART */
|
||||||
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART);
|
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RESTART);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue