]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
chlog freetdm: ss7 - adding initial support for RELAY
authorKonrad Hammel <konrad@sangoma.com>
Tue, 15 Feb 2011 16:45:17 +0000 (11:45 -0500)
committerKonrad Hammel <konrad@sangoma.com>
Wed, 9 Mar 2011 20:06:25 +0000 (15:06 -0500)
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cntrl.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_relay.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_support.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c

index 2f566198637f130581d5512c87bf5d85fb368f25..f8b12ea588ac81a1f19bcb8d48038da03337135e 100644 (file)
@@ -967,12 +967,14 @@ static ftdm_status_t handle_show_inreset(ftdm_stream_handle_t *stream, int span,
 /******************************************************************************/
 static ftdm_status_t handle_show_flags(ftdm_stream_handle_t *stream, int span, int chan, int verbose)
 {
-       int                              x;
-       int                              bit;
-       sngss7_chan_data_t  *ss7_info;
-       ftdm_channel_t    *ftdmchan;
-       int                              lspan;
-       int                              lchan;
+       sngss7_chan_data_t      *ss7_info;
+       ftdm_channel_t          *ftdmchan;
+       int                                     x;
+       int                                     bit;
+       int                                     lspan;
+       int                                     lchan;
+       const char                      *text;
+       int                                     flag;
 
        x = (g_ftdm_sngss7_data.cfg.procId * 1000) + 1;
        while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) {
@@ -1001,11 +1003,11 @@ static ftdm_status_t handle_show_flags(ftdm_stream_handle_t *stream, int span, i
                                                        ss7_info->circuit->cic);
        
                                for (bit = 0; bit < 33; bit++) {
-                                       stream->write_function(stream, "|");
                                        if (ss7_info->ckt_flags & ( 0x1 << bit)) {
-                                               stream->write_function(stream, "%2d=1", bit);
-                                       } else {
-                                               stream->write_function(stream, "%2d=0", bit);
+                                               stream->write_function(stream, "|");
+                                               flag = bit;
+                                               text = ftmod_ss7_ckt_flag2str(flag);
+                                               stream->write_function(stream, "%s",text);
                                        }
                                }
 
index c1b18e529af2933c387a06b4dd520837b97ff0fd..83ef5e0a42b24afdbef796cb6627f55c0158b177 100644 (file)
@@ -68,11 +68,14 @@ int ftmod_ss7_shutdown_isup(void);
 int ftmod_ss7_shutdown_mtp3(void);
 int ftmod_ss7_shutdown_mtp2(void);
 int ftmod_ss7_shutdown_relay(void);
+int ftmod_ss7_disable_relay_channel(uint32_t chanId);
 
 int ftmod_ss7_disable_grp_mtp3Link(uint32_t procId);
 int ftmod_ss7_enable_grp_mtp3Link(uint32_t procId);
 
 int ftmod_ss7_disable_grp_mtp2Link(uint32_t procId);
+
+int ftmod_ss7_block_isup_ckt(uint32_t cktId);
 /******************************************************************************/
 
 /* FUNCTIONS ******************************************************************/
@@ -712,6 +715,38 @@ int ftmod_ss7_shutdown_relay(void)
        return (sng_cntrl_relay(&pst, &cntrl));
 }
 
+/******************************************************************************/
+int ftmod_ss7_disable_relay_channel(uint32_t chanId)
+{
+       RyMngmt cntrl;
+       Pst pst;
+
+       /* initalize the post structure */
+       smPstInit(&pst);
+
+       /* insert the destination Entity */
+       pst.dstEnt = ENTRY;
+
+       /* initalize the control structure */
+       memset(&cntrl, 0x0, sizeof(RyMngmt));
+
+       /* initalize the control header */
+       smHdrInit(&cntrl.hdr);
+
+       cntrl.hdr.msgType                       = TCNTRL;       /* this is a control request */
+       cntrl.hdr.entId.ent                     = ENTRY;
+       cntrl.hdr.entId.inst            = S_INST;
+       cntrl.hdr.elmId.elmnt           = STGEN;
+
+       
+       cntrl.hdr.elmId.elmntInst1      = chanId;
+
+       cntrl.t.cntrl.action            = ADISIMM;                      /* Deactivate */
+       cntrl.t.cntrl.subAction         = SAELMNT;                      /* specificed element */
+
+       return (sng_cntrl_relay(&pst, &cntrl));
+}
+
 /******************************************************************************/
 int ftmod_ss7_disable_grp_mtp3Link(uint32_t procId)
 {
@@ -808,6 +843,38 @@ int ftmod_ss7_disable_grp_mtp2Link(uint32_t procId)
 
 }
 
+/******************************************************************************/
+int ftmod_ss7_block_isup_ckt(uint32_t cktId)
+{
+       SiMngmt cntrl;
+       Pst pst;
+
+       /* initalize the post structure */
+       smPstInit(&pst);
+
+       /* insert the destination Entity */
+       pst.dstEnt = ENTSI;
+
+       /* initalize the control structure */
+       memset(&cntrl, 0x0, sizeof(SiMngmt));
+
+       /* initalize the control header */
+       smHdrInit(&cntrl.hdr);
+
+       cntrl.hdr.msgType                                               = TCNTRL;               /* this is a control request */
+       cntrl.hdr.entId.ent                                             = ENTSI;
+       cntrl.hdr.entId.inst                                    = S_INST;
+       cntrl.hdr.elmId.elmnt                                   = STICIR;
+
+       cntrl.t.cntrl.s.siElmnt.elmntId.circuit = cktId;
+       cntrl.t.cntrl.s.siElmnt.elmntParam.cir.flag = LSI_CNTRL_CIR_FORCE;
+
+       cntrl.t.cntrl.action                                    = ADISIMM;              /* block via BLO */
+       cntrl.t.cntrl.subAction                                 = SAELMNT;              /* specificed element */
+
+       return (sng_cntrl_isup(&pst, &cntrl));
+}
+
 /******************************************************************************/
 /* For Emacs:
  * Local Variables:
index f4143fc86423b08ff42f21961f4760db9d1c1bf4..2a395c9ad19f9b380861d715ba67260e5272c8d1 100644 (file)
@@ -766,7 +766,18 @@ void handle_sng_relay_alarm(Pst *pst, RyMngmt *sta)
                                                                                                DECODE_LRY_REASON(sta->t.usta.s.ryErrUsta.reason));
 
                /* process the event */
-               handle_relay_disconnect_on_error(sta);
+               switch (sta->t.usta.s.ryErrUsta.reason) {
+               /**********************************************************************/
+               case (LRYRSNMGMTREQ):
+                       /* do nothing since this is a shutdown */
+                       break;
+               /**********************************************************************/
+               default:
+                       /* handle the error */
+                       handle_relay_disconnect_on_error(sta);
+                       break;
+               /**********************************************************************/
+               } /* switch (sta->t.usta.s.ryErrUsta.reason) */
 
                break;
        /**************************************************************************/
index 10e73d3fbdda0dc07d46b95f63532f5078156e76..7b885102b9571e7760515c46769285a8e34dc65a 100644 (file)
@@ -365,6 +365,9 @@ static void *ftdm_sangoma_ss7_run(ftdm_thread_t * me, void *obj)
                /* check each channel on the span to see if there is an un-procressed SUS/RES flag */
                check_for_res_sus_flag(ftdmspan);
 
+               /* check each channel on the span to see if it needs to be reconfigured */
+               check_for_reconfig_flag(ftdmspan);
+
                /* Poll for events, e.g HW DTMF */
                switch (ftdm_span_poll_event(ftdmspan, 0, NULL)) {
                /**********************************************************************/
@@ -926,33 +929,27 @@ ftdm_status_t ftdm_sangoma_ss7_process_state_change (ftdm_channel_t * ftdmchan)
                        }
                }
 
-               /* if we're not coming from HANGUP_COMPLETE we need to check for resets
-                * we can also check if we are in a PAUSED state (no point in sending message
-                */
-               if ((ftdmchan->last_state != FTDM_CHANNEL_STATE_HANGUP_COMPLETE) &&
-                       (!sngss7_test_ckt_flag(sngss7_info, FLAG_INFID_PAUSED))) {
 
-                       /* check if this is an outgoing RSC */
-                       if ((sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) &&
-                               !(sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_SENT))) {
+               /* check if this is an outgoing RSC */
+               if ((sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) &&
+                       !(sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_SENT))) {
 
-                               /* send a reset request */
-                               ft_to_sngss7_rsc (ftdmchan);
-                               sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_SENT);
+                       /* send a reset request */
+                       ft_to_sngss7_rsc (ftdmchan);
+                       sngss7_set_ckt_flag(sngss7_info, FLAG_RESET_SENT);
 
-                       } /* if (sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) */
-       
-                       /* check if this is the first channel of a GRS (this flag is thrown when requesting reset) */
-                       if ( (sngss7_test_ckt_flag (sngss7_info, FLAG_GRP_RESET_TX)) &&
-                               !(sngss7_test_ckt_flag(sngss7_info, FLAG_GRP_RESET_SENT)) &&
-                               (sngss7_test_ckt_flag(sngss7_info, FLAG_GRP_RESET_BASE))) {
+               } /* if (sngss7_test_ckt_flag(sngss7_info, FLAG_RESET_TX)) */
 
-                                       /* send out the grs */
-                                       ft_to_sngss7_grs (ftdmchan);
-                                       sngss7_set_ckt_flag(sngss7_info, FLAG_GRP_RESET_SENT);
+               /* check if this is the first channel of a GRS (this flag is thrown when requesting reset) */
+               if ( (sngss7_test_ckt_flag (sngss7_info, FLAG_GRP_RESET_TX)) &&
+                       !(sngss7_test_ckt_flag(sngss7_info, FLAG_GRP_RESET_SENT)) &&
+                       (sngss7_test_ckt_flag(sngss7_info, FLAG_GRP_RESET_BASE))) {
 
-                       }/* if ( sngss7_test_ckt_flag ( sngss7_info, FLAG_GRP_RESET_TX ) ) */
-               } /* if ( last_state != HANGUP && !PAUSED */
+                               /* send out the grs */
+                               ft_to_sngss7_grs (ftdmchan);
+                               sngss7_set_ckt_flag(sngss7_info, FLAG_GRP_RESET_SENT);
+
+               }/* if ( sngss7_test_ckt_flag ( sngss7_info, FLAG_GRP_RESET_TX ) ) */
        
                /* if the sig_status is up...bring it down */
                if (ftdm_test_flag (ftdmchan, FTDM_CHANNEL_SIG_UP)) {
@@ -1598,6 +1595,8 @@ static FIO_SIG_UNLOAD_FUNCTION(ftdm_sangoma_ss7_unload)
 {
        /*this function is called by the FT-core to unload the signaling module */
 
+       int x;
+
        ftdm_log (FTDM_LOG_INFO, "Starting ftmod_sangoma_ss7 unload...\n");
 
        if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_CC)) {
@@ -1625,6 +1624,26 @@ static FIO_SIG_UNLOAD_FUNCTION(ftdm_sangoma_ss7_unload)
        }
 
        if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_RY)) {
+               /* go through all the relays channels and configure it */
+               x = 1;
+               while (g_ftdm_sngss7_data.cfg.relay[x].id != 0) {
+                       /* check if this relay channel has been configured already */
+                       if ((g_ftdm_sngss7_data.cfg.relay[x].flags & SNGSS7_CONFIGURED)) {
+       
+                               /* send the specific configuration */
+                               if (ftmod_ss7_disable_relay_channel(x)) {
+                                       SS7_CRITICAL("Relay Channel %d disable failed!\n", x);
+                                       return 1;
+                               } else {
+                                       SS7_INFO("Relay Channel %d disable DONE!\n", x);
+                               }
+       
+                               /* set the SNGSS7_CONFIGURED flag */
+                               g_ftdm_sngss7_data.cfg.relay[x].flags &= !SNGSS7_CONFIGURED;
+                       } /* if !SNGSS7_CONFIGURED */
+                       x++;
+               } /* while (g_ftdm_sngss7_data.cfg.relay[x].id != 0) */
+               
                ftmod_ss7_shutdown_relay();
                sng_isup_free_relay();
                sngss7_clear_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_RY);
index 4d09dfa7e363d83184a89552f7b3d2e8fb1ae997..291eea098558d29c851f1090b2413c59b4a200d7 100644 (file)
@@ -506,6 +506,27 @@ typedef enum {
        FLAG_RELAY_DOWN                 = (1 << 30)
 } sng_ckt_flag_t;
 
+#define CKT_FLAGS_STRING \
+       "RX_RSC", \
+       "TX_RSC", \
+       "TX_RSC_REQ_SENT", \
+       "TX_RSC_RSP_RECIEVED", \
+       "RX_GRS", \
+       "RX_GRS_DONE", \
+       "RX_GRS_CMPLT", \
+       "GRS_BASE", \
+       "TX_GRS", \
+       "TX_GRS_REQ_SENT", \
+       "TX_GRS_RSP_RECIEVED", \
+       "REMOTE_REL", \
+       "LOCAL_REL", \
+       "GLARE", \
+       "INF_RESUME", \
+       "INF_PAUSED", \
+       "RELAY_DOWN", \
+       "CKT_RECONFIG"
+FTDM_STR2ENUM_P(ftmod_ss7_ckt_state2flag, ftmod_ss7_ckt_flag2str, sng_ckt_flag_t)
+
 /* ckt blocking flags */
 typedef enum {
        FLAG_CKT_UCIC_BLOCK             = (1 << 0),
@@ -626,12 +647,17 @@ int ftmod_ss7_shutdown_isup(void);
 int ftmod_ss7_shutdown_mtp3(void);
 int ftmod_ss7_shutdown_mtp2(void);
 int ftmod_ss7_shutdown_relay(void);
+int ftmod_ss7_disable_relay_channel(uint32_t chanId);
 
 int ftmod_ss7_disable_grp_mtp3Link(uint32_t procId);
 int ftmod_ss7_enable_grp_mtp3Link(uint32_t procId);
 
 int ftmod_ss7_disable_grp_mtp2Link(uint32_t procId);
 
+int ftmod_ss7_block_isup_ckt(uint32_t cktId);
+
+
+
 /* in ftmod_sangoma_ss7_sta.c */
 int ftmod_ss7_mtp1link_sta(uint32_t id, L1Mngmt *cfm);
 int ftmod_ss7_mtp2link_sta(uint32_t id, SdMngmt *cfm);
@@ -756,6 +782,7 @@ int find_ssf_type_in_map(const char *ssfType);
 int find_cic_cntrl_in_map(const char *cntrlType);
 
 ftdm_status_t check_status_of_all_isup_intf(void);
+ftdm_status_t check_for_reconfig_flag(ftdm_span_t *ftdmspan);
 
 void sngss7_send_signal(sngss7_chan_data_t *sngss7_info, ftdm_signal_event_t event_id);
 void sngss7_set_sig_status(sngss7_chan_data_t *sngss7_info, ftdm_signaling_status_t status);
index d003371ff2827c262443b8138b9a5cc2f0a19a3a..d34d62c2170fa3aee7d551bbfe4fcccf5dca251b 100644 (file)
@@ -61,23 +61,28 @@ ftdm_status_t handle_relay_connect(RyMngmt *sta)
 
        /* test if this is the first time the channel comes up */
        if (!sngss7_test_flag(sng_relay, SNGSS7_RELAY_INIT)) {
-               SS7_DEBUG("Relay Channel %d initial connection UP\n", sng_relay->id);
+               SS7_INFO("Relay Channel %d initial connection UP\n", sng_relay->id);
 
                /* mark the channel as being up */
                sngss7_set_flag(sng_relay, SNGSS7_RELAY_INIT);
        } else {
-               SS7_DEBUG("Relay Channel %d connection UP\n", sng_relay->id);
+               SS7_INFO("Relay Channel %d connection UP\n", sng_relay->id);
 
                /* react based on type of channel */
                switch (sng_relay->type) {
                /******************************************************************/
                case (LRY_CT_TCP_CLIENT):
+                       /* check the status of all isup intfs in case we weren't connected when
+                        * the interface became active
+                        */
+                       check_status_of_all_isup_intf();
+
                        /* reconfigure all ISUP ckts, since the main system would have lost all configs */
                        if (reconfig_all_ckts_for_relay()) {
                                SS7_ERROR("Failed to reconfigure ISUP Ckts!\n");
-
                                /* we're done....this is very bad! */
-                       } else {                                
+                       } else {
+                               /* if the circuits reconfiged then bring then back up */        
                                enable_all_ckts_for_relay();
                        }
 
@@ -104,16 +109,20 @@ ftdm_status_t handle_relay_disconnect_on_error(RyMngmt *sta)
 
        /* check which procId is in error, if it is 1, disable the ckts */
        if (sta->t.usta.s.ryErrUsta.errPid == 1 ) {
-               disable_all_ckts_for_relay();
-
+               /* we've lost the server, bring down the mtp2 links */
                disble_all_mtp2_sigs_for_relay();
+
+               /* we've lost the server, bring the sig status down on all ckts */
+               disable_all_ckts_for_relay();
        }
 
        /* check if the channel is a server, means we just lost a MGW */
        if (g_ftdm_sngss7_data.cfg.relay[sta->t.usta.s.ryErrUsta.errPid].type == LRY_CT_TCP_SERVER) {
-               block_all_ckts_for_relay(sta->t.usta.s.ryErrUsta.errPid);
-
+               /* we've lost the client, bring down all mtp3 links for this procId */
                disable_all_sigs_for_relay(sta->t.usta.s.ryErrUsta.errPid);
+
+               /* we've lost the client, bring down all the ckts for this procId */
+               block_all_ckts_for_relay(sta->t.usta.s.ryErrUsta.errPid);
        }
 
        return FTDM_SUCCESS;
@@ -222,30 +231,26 @@ ftdm_status_t enable_all_ckts_for_relay(void)
 /******************************************************************************/
 ftdm_status_t reconfig_all_ckts_for_relay(void)
 {
-#if 1
        int x;
-       int ret;
+       sngss7_chan_data_t      *sngss7_info = NULL;
 
+       /* go through all the circuits on our ProcId */
        x = (g_ftdm_sngss7_data.cfg.procId * 1000) + 1;
        while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) {
+       /**************************************************************************/
                if ( g_ftdm_sngss7_data.cfg.isupCkt[x].type == VOICE) {
-       
-                       ret = ftmod_ss7_isup_ckt_config(x);
-                       if (ret) {
-                               SS7_CRITICAL("ISUP CKT %d configuration FAILED (%d)!\n", x, ret);
-                               return 1;
-                       } else {
-                               SS7_INFO("ISUP CKT %d configuration DONE!\n", x);
-                       }
-
-               } /* if ( g_ftdm_sngss7_data.cfg.isupCkt[x].type == VOICE) */
-
-               /* set the SNGSS7_CONFIGURED flag */
-               g_ftdm_sngss7_data.cfg.isupCkt[x].flags |= SNGSS7_CONFIGURED;
-               
+                       /* grab the private data structure */
+                       sngss7_info = g_ftdm_sngss7_data.cfg.isupCkt[x].obj;
+                       
+                       /* mark the circuit for re-configuration */
+                       sngss7_set_ckt_flag(sngss7_info, FLAG_CKT_RECONFIG);
+               }
+
+               /* move to the next circuit */
                x++;
+       /**************************************************************************/
        } /* while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) */
-#endif
+
        return FTDM_SUCCESS;
 }
 
@@ -253,23 +258,26 @@ ftdm_status_t reconfig_all_ckts_for_relay(void)
 ftdm_status_t block_all_ckts_for_relay(uint32_t procId)
 {
        int x;
-
-       SS7_INFO("BLOcking all ckts on ProcID = %d\n", procId);
+       int ret;
 
        /* we just lost connection to this procId, send out a block for all these circuits */
        x = (procId * 1000) + 1;
        while (g_ftdm_sngss7_data.cfg.isupCkt[x].id != 0) {
        /**************************************************************************/
                if (g_ftdm_sngss7_data.cfg.isupCkt[x].type == VOICE) {
-                       /* send out a BLO */
-                       sng_cc_sta_request (1,
-                                                               0,
-                                                               0,
-                                                               g_ftdm_sngss7_data.cfg.isupCkt[x].id,
-                                                               0, 
-                                                               SIT_STA_CIRBLOREQ, 
-                                                               NULL);
 
+                       /* send a block request via stack manager */
+                       ret = ftmod_ss7_block_isup_ckt(g_ftdm_sngss7_data.cfg.isupCkt[x].id);
+                       if (ret) {
+                               SS7_INFO("Successfully BLOcked CIC:%d(ckt:%d) due to Relay failure\n", 
+                                                       g_ftdm_sngss7_data.cfg.isupCkt[x].cic,
+                                                       g_ftdm_sngss7_data.cfg.isupCkt[x].id);
+                       } else {
+                               SS7_ERROR("Failed to BLOck CIC:%d(ckt:%d) due to Relay failure\n",
+                                                       g_ftdm_sngss7_data.cfg.isupCkt[x].cic,
+                                                       g_ftdm_sngss7_data.cfg.isupCkt[x].id);
+                       }
+       
                } /* if (g_ftdm_sngss7_data.cfg.isupCkt[x].type == VOICE) */
 
                /* move along */
index 814f418a130005df5d381d7f3255aa6cce28687d..ded695c20549b8f9a4263da31f27fbb08cfb694c 100644 (file)
@@ -83,6 +83,7 @@ int find_ssf_type_in_map(const char *ssfType);
 int find_cic_cntrl_in_map(const char *cntrlType);
 
 ftdm_status_t check_status_of_all_isup_intf(void);
+ftdm_status_t check_for_reconfig_flag(ftdm_span_t *ftdmspan);
 
 void sngss7_send_signal(sngss7_chan_data_t *sngss7_info, ftdm_signal_event_t event_id);
 void sngss7_set_sig_status(sngss7_chan_data_t *sngss7_info, ftdm_signaling_status_t status);
@@ -90,6 +91,9 @@ ftdm_status_t sngss7_add_var(sngss7_chan_data_t *ss7_info, const char* var, cons
 ftdm_status_t sngss7_add_raw_data(sngss7_chan_data_t *sngss7_info, uint8_t* data, ftdm_size_t data_len);
 /******************************************************************************/
 
+FTDM_ENUM_NAMES(CKT_FLAGS_NAMES, CKT_FLAGS_STRING)
+FTDM_STR2ENUM(ftmod_ss7_ckt_state2flag, ftmod_ss7_ckt_flag2str, sng_ckt_flag_t, CKT_FLAGS_NAMES, 31)
+
 /* FUNCTIONS ******************************************************************/
 uint8_t copy_cgPtyNum_from_sngss7(ftdm_caller_data_t *ftdm, SiCgPtyNum *cgPtyNum)
 {
@@ -1475,6 +1479,46 @@ void sngss7_set_sig_status(sngss7_chan_data_t *sngss7_info, ftdm_signaling_statu
        return;
 }
 
+/******************************************************************************/
+ftdm_status_t check_for_reconfig_flag(ftdm_span_t *ftdmspan)
+{
+       ftdm_channel_t          *ftdmchan = NULL;
+       sngss7_chan_data_t      *sngss7_info = NULL;
+       int                             x;
+       int                                     ret;
+
+       for (x = 1; x < (ftdmspan->chan_count + 1); x++) {
+       /**************************************************************************/
+               /* extract the channel structure and sngss7 channel data */
+               ftdmchan = ftdmspan->channels[x];
+               
+               /* if the call data is NULL move on */
+               if (ftdmchan->call_data == NULL) {
+                       SS7_WARN_CHAN(ftdmchan, "Reconfiguring channel that has not call_data!%s\n", " ");
+                       continue;
+               }
+
+               /* grab the private data */
+               sngss7_info = ftdmchan->call_data;
+
+               /* check the reconfig flag */
+               if (sngss7_test_ckt_flag(sngss7_info, FLAG_CKT_RECONFIG)) {
+                       ret = ftmod_ss7_isup_ckt_config(sngss7_info->circuit->id);
+
+                       if (ret) {
+                               SS7_CRITICAL("ISUP CKT %d re-configuration FAILED!\n", x);
+                       } else {
+                               SS7_INFO("ISUP CKT %d re-configuration DONE!\n", x);
+                       }
+
+                       /* clear the re-config flag ... no matter what */
+                       sngss7_clear_ckt_flag(sngss7_info, FLAG_CKT_RECONFIG);
+
+               } /* if ((sngss7_test_ckt_flag(sngss7_info, FLAG_CKT_RECONFIG)) */
+       } /* for (x = 1; x < (span->chan_count + 1); x++) */
+
+       return FTDM_SUCCESS;
+}
 /******************************************************************************/
 /* For Emacs:
  * Local Variables:
index 166fe5dc04fb710d9912c991ca2c698253c73d4f..49da10cdf152b125ba4160643b9edcdfad6c8e7a 100644 (file)
@@ -2668,7 +2668,7 @@ static int ftmod_ss7_fill_in_isup_interface(sng_isup_inf_t *sng_isup)
        if (sng_isup->tpause != 0) {
                g_ftdm_sngss7_data.cfg.isupIntf[i].tpause       = sng_isup->tpause;
        } else {
-               g_ftdm_sngss7_data.cfg.isupIntf[i].tpause       = 150;
+               g_ftdm_sngss7_data.cfg.isupIntf[i].tpause       = 3000;
        }
        if (sng_isup->tstaenq != 0) {
                g_ftdm_sngss7_data.cfg.isupIntf[i].tstaenq      = sng_isup->tstaenq;