From 92b55af0715a2a8c41b78ba01ec75763697cf3e5 Mon Sep 17 00:00:00 2001
From: David Yat Sin <dyatsin@sangoma.com>
Date: Fri, 15 Jun 2012 16:08:18 -0400
Subject: [PATCH 1/3] missing functions rename

---
 src/mod/endpoints/mod_media_gateway/mod_media_gateway.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mod/endpoints/mod_media_gateway/mod_media_gateway.c b/src/mod/endpoints/mod_media_gateway/mod_media_gateway.c
index ebad0b30b7..6383bb0750 100644
--- a/src/mod/endpoints/mod_media_gateway/mod_media_gateway.c
+++ b/src/mod/endpoints/mod_media_gateway/mod_media_gateway.c
@@ -14,7 +14,7 @@ static sng_mg_event_interface_t sng_event;
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_megaco_load);
 SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_megaco_shutdown);
-SWITCH_MODULE_DEFINITION(mod_megaco, mod_megaco_load, mod_megaco_shutdown, NULL);
+SWITCH_MODULE_DEFINITION(mod_media_gateway, mod_media_gateway_load, mod_media_gateway_shutdown, NULL);
 
 SWITCH_STANDARD_API(megaco_function)
 {
@@ -51,7 +51,7 @@ static switch_status_t list_profiles(const char *line, const char *cursor, switc
 	return status;
 }
 
-SWITCH_MODULE_LOAD_FUNCTION(mod_megaco_load)
+SWITCH_MODULE_LOAD_FUNCTION(mod_media_gateway_load)
 {
 	switch_api_interface_t *api_interface;
 	
@@ -93,7 +93,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_megaco_load)
 	return sng_mgco_init(&sng_event);
 }
 
-SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_megaco_shutdown)
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_media_gateway_shutdown)
 {
 	sng_mgco_stack_shutdown();
 

From af39d4c9d2a5ac277035ccbb5b984c06ee4cb155 Mon Sep 17 00:00:00 2001
From: David Yat Sin <dyatsin@sangoma.com>
Date: Fri, 15 Jun 2012 16:16:11 -0400
Subject: [PATCH 2/3] missed one

---
 src/mod/endpoints/mod_media_gateway/mod_media_gateway.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mod/endpoints/mod_media_gateway/mod_media_gateway.c b/src/mod/endpoints/mod_media_gateway/mod_media_gateway.c
index 6383bb0750..58a8794fad 100644
--- a/src/mod/endpoints/mod_media_gateway/mod_media_gateway.c
+++ b/src/mod/endpoints/mod_media_gateway/mod_media_gateway.c
@@ -12,8 +12,8 @@
 struct megaco_globals megaco_globals;
 static sng_mg_event_interface_t sng_event;
 
-SWITCH_MODULE_LOAD_FUNCTION(mod_megaco_load);
-SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_megaco_shutdown);
+SWITCH_MODULE_LOAD_FUNCTION(mod_media_gateway_load);
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_media_gateway_shutdown);
 SWITCH_MODULE_DEFINITION(mod_media_gateway, mod_media_gateway_load, mod_media_gateway_shutdown, NULL);
 
 SWITCH_STANDARD_API(megaco_function)

From 3b4c725b1c339233452a2832a05e9b8325bb8822 Mon Sep 17 00:00:00 2001
From: kapil <kgupta@sangoma.com>
Date: Mon, 18 Jun 2012 17:41:05 +0530
Subject: [PATCH 3/3] fixing cli issues

---
 libs/freetdm/configure.ac                     |   2 +-
 libs/freetdm/mod_freetdm/mod_freetdm.c        |   8 +-
 .../ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c |   7 +
 .../ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c |  96 ++++----
 .../ftmod_sangoma_ss7_m2ua.c                  | 216 +++++++++---------
 .../ftmod_sangoma_ss7_m2ua.h                  |   2 +
 .../ftmod_sangoma_ss7_m2ua_xml.c              |  17 +-
 .../ftmod_sangoma_ss7_main.h                  |   5 +-
 8 files changed, 178 insertions(+), 175 deletions(-)

diff --git a/libs/freetdm/configure.ac b/libs/freetdm/configure.ac
index 80f0c73070..292c1e7cfa 100644
--- a/libs/freetdm/configure.ac
+++ b/libs/freetdm/configure.ac
@@ -316,7 +316,7 @@ if test "${HAVE_SNG_SS7}" = "yes"; then
 		case "${host}" in
 		x86_64-*)
 			# X86_64 machines need additional flags when compiling against libsng_isdn
-			CFLAGS="$CFLAGS -DBIT_64 -DALIGN_64BIT -DDEBUGP"
+			CFLAGS="$CFLAGS -DBIT_64 -DALIGN_64BIT"
 			;;
 		esac
 	fi
diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c
index 35690b1e24..89524f0eca 100755
--- a/libs/freetdm/mod_freetdm/mod_freetdm.c
+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c
@@ -3061,7 +3061,6 @@ static ftdm_conf_node_t *_get_ss7_config_node(switch_xml_t cfg, const char *conf
 		return NULL;
 	}
 
-	/* If ISUP is operating mode then only include mtp3_links/isup links */
 	if(is_isup) {
 		/* add mtp3 links */
 		if (add_config_list_nodes(isup, rootnode, "mtp3_links", "mtp3_link", NULL, NULL)) {
@@ -3097,10 +3096,9 @@ static ftdm_conf_node_t *_get_ss7_config_node(switch_xml_t cfg, const char *conf
 			ftdm_conf_node_destroy(rootnode);
 			return NULL;
 		}
-	}
-	else {
+	} else {
 		/* add sctp links */
-		if (add_config_list_nodes(isup, rootnode, "sng_sctp_interfaces", "sng_sctp_interface", NULL, NULL)) {
+		if (add_config_nodes(isup, rootnode, "sng_sctp_interfaces", "sng_sctp_interface",  "sng_source_addresses")) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to process sng_sctp_interface for sng_isup config %s\n", confname);
 			ftdm_conf_node_destroy(rootnode);
 			return NULL;
@@ -3124,13 +3122,11 @@ static ftdm_conf_node_t *_get_ss7_config_node(switch_xml_t cfg, const char *conf
 			return NULL;
 		}
 
-
 		if (add_config_nodes(isup, rootnode, "sng_m2ua_cluster_interfaces", "sng_m2ua_cluster_interface", "sng_m2ua_peers")) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to process sng_m2ua_cluster_interfaces for sng_isup config %s\n", confname);
 			ftdm_conf_node_destroy(rootnode);
 			return NULL;
 		}
-
 	}
 
 	switch_core_hash_insert(globals.ss7_configs, confname, rootnode);
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
index 170f03f8f3..1600e71016 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
@@ -209,6 +209,13 @@ int  ft_to_sngss7_cfg_all(void)
 			}
 		} /* if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_MTP2)) */
 
+		if(SNG_SS7_OPR_MODE_M2UA_SG == g_ftdm_operating_mode){
+			if(FTDM_SUCCESS != ftmod_ss7_m2ua_init()){
+				ftdm_log (FTDM_LOG_ERROR, "ftmod_ss7_m2ua_init FAILED \n");
+				return FTDM_FAIL;
+			}
+		}
+
 		g_ftdm_sngss7_data.gen_config = SNG_GEN_CFG_STATUS_DONE;
 
 	} /* if (!(g_ftdm_sngss7_data.gen_config)) */
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
index 89cfec14a7..6906b80290 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
@@ -3090,8 +3090,8 @@ static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream)
 		return FTDM_FAIL;
 	} else {
 		len = len + sprintf(buf + len, "<m2ua_gen>\n");
-		len = len + sprintf(buf + len, "<mem_size> %ld </mem_size>\n", cfm.t.ssta.s.genSta.memSize);
-		len = len + sprintf(buf + len, " <allocated_mem_size> %ld </allocated_mem_size>\n", cfm.t.ssta.s.genSta.memAlloc);
+		len = len + sprintf(buf + len, "<mem_size> %d </mem_size>\n", cfm.t.ssta.s.genSta.memSize);
+		len = len + sprintf(buf + len, " <allocated_mem_size> %d </allocated_mem_size>\n", cfm.t.ssta.s.genSta.memAlloc);
 		len = len + sprintf(buf + len, " <num_of_cluster> %d </num_of_cluster>\n", cfm.t.ssta.s.genSta.nmbClusters);
 		len = len + sprintf(buf + len, " <num_of_peers> %d </num_of_peers>\n", cfm.t.ssta.s.genSta.nmbPeers);
 		len = len + sprintf(buf + len, " <num_of_interfaces> %d </num_of_interfaces>\n", cfm.t.ssta.s.genSta.nmbIntf);
@@ -3102,7 +3102,9 @@ static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream)
 	 x = 1;
 	 while(x<MW_MAX_NUM_OF_INTF){
 		 if((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].id !=0) &&
-				 (!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_CONFIGURED))) {
+				 ((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_ACTIVE))) {
+
+			 memset((U8 *)&cfm, 0, sizeof(MwMgmt));
 
 			 len = len + sprintf(buf + len, "<m2ua_profile>\n");
 			 len = len + sprintf(buf + len, "<name> %s </name>\n", g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].name);
@@ -3120,6 +3122,7 @@ static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream)
 				 len = len + sprintf(buf + len, "</m2ua_dlsap>\n");
 			 }
 
+			 memset((U8 *)&cfm, 0, sizeof(MwMgmt));
 			 if(ftmod_m2ua_ssta_req(STMWCLUSTER,g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].clusterId,&cfm)) {
 				 stream->write_function(stream," Request to Trillium SCTP layer failed \n");
 				 return FTDM_FAIL;
@@ -3137,34 +3140,47 @@ static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream)
 				 len = len + sprintf(buf + len, "<num_active_peer> %d </num_active_peer>\n",cfm.t.ssta.s.clusterSta.nmbActPeer);
 
 				 len = len + sprintf(buf + len, "</m2ua_cluster>\n");
-			 }
 
-			 memcpy((U8 *)&rsp, &cfm, sizeof(MwMgmt));
+				 memset((U8 *)&rsp, 0, sizeof(MwMgmt));
+				 memcpy(&rsp, &cfm, sizeof(MwMgmt));
 
-			 /* loop through configured peers */
-			 for(idx = 0; idx < rsp.t.ssta.s.clusterSta.nmbPeer; idx++)
-			 {
-				 memset((U8 *)&cfm, 0, sizeof(MwMgmt));
 
-				 if(ftmod_m2ua_ssta_req(STMWPEER, rsp.t.ssta.s.clusterSta.peerSt[idx].peerId, &cfm)) {
-					 stream->write_function(stream," Request to Trillium SCTP layer failed \n");
-					 return FTDM_FAIL;
-				 } else {
-					 len = len + sprintf(buf + len, "<m2ua_peer>\n");
-					 len = len + sprintf(buf + len, "<name> %s </name>\n",g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[rsp.t.ssta.s.clusterSta.peerSt[idx].peerId].name);
-					 len = len + sprintf(buf + len," <state> %s </state>\n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state));
-					 len = len + sprintf(buf + len, " <retry_count> %d </retry_count>\n",cfm.t.ssta.s.peerSta.retryCount);
-					 len = len + sprintf(buf + len, " <assoc_id> %ld </assoc_id>\n",cfm.t.ssta.s.peerSta.assocSta.spAssocId);
-					 len = len + sprintf(buf + len, " <connected_status> %s </connected_status>\n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED");
-					 len = len + sprintf(buf + len, " <flow_cntrl_progress> %d </flow_cntrl_progress>\n",cfm.t.ssta.s.peerSta.assocSta.flcInProg);
-					 len = len + sprintf(buf + len, " <flow_cntrl_level> %d </flow_cntrl_level>\n",cfm.t.ssta.s.peerSta.assocSta.flcLevel);
-					 len = len + sprintf(buf + len, " <hearbeat_status> %d </hearbeat_status>\n",cfm.t.ssta.s.peerSta.assocSta.sctpHBeatEnb);
-					 len = len + sprintf(buf + len, " <nmb_of_stream> %d </nmb_of_stream>\n",cfm.t.ssta.s.peerSta.assocSta.locOutStrms);
+				 /* loop through configured peers */
+				 for(idx = 0; idx < rsp.t.ssta.s.clusterSta.nmbPeer; idx++)
+				 {
+					 int peer_id = rsp.t.ssta.s.clusterSta.peerSt[idx].peerId;
+					 
+					 memset(&cfm, 0, sizeof(MwMgmt));
 
-					 len = len + sprintf(buf + len, "</m2ua_peer>\n");
+					 if(LMW_PEER_DOWN != rsp.t.ssta.s.clusterSta.peerSt[idx].peerState){
+
+						 if(ftmod_m2ua_ssta_req(STMWPEER, peer_id, &cfm)) {
+							 stream->write_function(stream," Request to Trillium SCTP layer failed \n");
+							 return FTDM_FAIL;
+						 } else {
+							 len = len + sprintf(buf + len, "<m2ua_peer>\n");
+							 len = len + sprintf(buf + len, "<name> %s </name>\n",g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[peer_id].name);
+							 len = len + sprintf(buf + len," <state> %s </state>\n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state));
+							 len = len + sprintf(buf + len, " <retry_count> %d </retry_count>\n",cfm.t.ssta.s.peerSta.retryCount);
+							 len = len + sprintf(buf + len, " <assoc_id> %d </assoc_id>\n",cfm.t.ssta.s.peerSta.assocSta.spAssocId);
+							 len = len + sprintf(buf + len, " <connected_status> %s </connected_status>\n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED");
+							 len = len + sprintf(buf + len, " <flow_cntrl_progress> %d </flow_cntrl_progress>\n",cfm.t.ssta.s.peerSta.assocSta.flcInProg);
+							 len = len + sprintf(buf + len, " <flow_cntrl_level> %d </flow_cntrl_level>\n",cfm.t.ssta.s.peerSta.assocSta.flcLevel);
+							 len = len + sprintf(buf + len, " <hearbeat_status> %d </hearbeat_status>\n",cfm.t.ssta.s.peerSta.assocSta.sctpHBeatEnb);
+							 len = len + sprintf(buf + len, " <nmb_of_stream> %d </nmb_of_stream>\n",cfm.t.ssta.s.peerSta.assocSta.locOutStrms);
+
+							 len = len + sprintf(buf + len, "</m2ua_peer>\n");
+						 }
+					 } else {
+							 len = len + sprintf(buf + len, "<m2ua_peer>\n");
+							 len = len + sprintf(buf + len, "<name> %s </name>\n",g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[peer_id].name);
+							 len = len + sprintf(buf + len," <state> %s </state>\n", PRNT_M2UA_PEER_STATE(rsp.t.ssta.s.clusterSta.peerSt[idx].peerState));
+							 len = len + sprintf(buf + len, "</m2ua_peer>\n");
+					 }
 				 }
 			 }
 
+			 memset((U8 *)&cfm, 0, sizeof(MwMgmt));
 			 if(ftmod_m2ua_ssta_req(STMWSCTSAP,x,&cfm)) {
 				 stream->write_function(stream," Request to Trillium SCTP layer failed \n");
 				 return FTDM_FAIL;
@@ -3172,7 +3188,7 @@ static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream)
 				 len = len + sprintf(buf + len, "<m2ua_sctp_sap>\n");
 				 len = len + sprintf(buf + len," <state> %s </state>\n", PRNT_M2UA_SAP_STATE(cfm.t.ssta.s.sctSapSta.state));
 				 len = len + sprintf(buf + len," <end_point_open_state> %s </end_point_open_state>\n", (cfm.t.ssta.s.sctSapSta.endpOpen)?"END_POINT_OPENED_SUCCESSFULLY":"END_POINT_NOT_OPEN");
-				 len = len + sprintf(buf + len," <end_point_id> %ld </end_point_id>\n", cfm.t.ssta.s.sctSapSta.spEndpId);
+				 len = len + sprintf(buf + len," <end_point_id> %d </end_point_id>\n", cfm.t.ssta.s.sctSapSta.spEndpId);
 				 len = len + sprintf(buf + len," <nmb_of_retry_attemp> %d </nmb_of_retry_attemp>\n", cfm.t.ssta.s.sctSapSta.nmbPrimRetry);
 				 len = len + sprintf(buf + len, "</m2ua_sctp_sap>\n");
 			 }
@@ -3218,7 +3234,7 @@ static ftdm_status_t handle_show_m2ua_profile(ftdm_stream_handle_t *stream, char
 	x = 1;
 	while(x<MW_MAX_NUM_OF_INTF){
 		if((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].id !=0) &&
-				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_CONFIGURED))) {
+				((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_ACTIVE))) {
 
 			if(!strcasecmp(m2ua_profile_name, g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].name)){
 				found = 0x01;
@@ -3284,7 +3300,7 @@ static ftdm_status_t handle_show_m2ua_profile(ftdm_stream_handle_t *stream, char
 			len = len + sprintf(buf + len, "<name> %s </name>\n",g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[rsp.t.ssta.s.clusterSta.peerSt[idx].peerId].name);
 			len = len + sprintf(buf + len," <state> %s </state>\n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state));
 			len = len + sprintf(buf + len, " <retry_count> %d </retry_count>\n",cfm.t.ssta.s.peerSta.retryCount);
-			len = len + sprintf(buf + len, " <assoc_id> %ld </assoc_id>\n",cfm.t.ssta.s.peerSta.assocSta.spAssocId);
+			len = len + sprintf(buf + len, " <assoc_id> %d </assoc_id>\n",cfm.t.ssta.s.peerSta.assocSta.spAssocId);
 			len = len + sprintf(buf + len, " <connected_status> %s </connected_status>\n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED");
 			len = len + sprintf(buf + len, " <flow_cntrl_progress> %d </flow_cntrl_progress>\n",cfm.t.ssta.s.peerSta.assocSta.flcInProg);
 			len = len + sprintf(buf + len, " <flow_cntrl_level> %d </flow_cntrl_level>\n",cfm.t.ssta.s.peerSta.assocSta.flcLevel);
@@ -3302,7 +3318,7 @@ static ftdm_status_t handle_show_m2ua_profile(ftdm_stream_handle_t *stream, char
 		len = len + sprintf(buf + len, "<m2ua_sctp_sap>\n");
 		len = len + sprintf(buf + len," <state> %s </state>\n", PRNT_M2UA_SAP_STATE(cfm.t.ssta.s.sctSapSta.state));
 		len = len + sprintf(buf + len," <end_point_open_state> %s </end_point_open_state>\n", (cfm.t.ssta.s.sctSapSta.endpOpen)?"END_POINT_OPENED_SUCCESSFULLY":"END_POINT_NOT_OPEN");
-		len = len + sprintf(buf + len," <end_point_id> %ld </end_point_id>\n", cfm.t.ssta.s.sctSapSta.spEndpId);
+		len = len + sprintf(buf + len," <end_point_id> %d </end_point_id>\n", cfm.t.ssta.s.sctSapSta.spEndpId);
 		len = len + sprintf(buf + len," <nmb_of_retry_attemp> %d </nmb_of_retry_attemp>\n", cfm.t.ssta.s.sctSapSta.nmbPrimRetry);
 		len = len + sprintf(buf + len, "</m2ua_sctp_sap>\n");
 	}
@@ -3341,8 +3357,8 @@ static ftdm_status_t handle_show_sctp_profiles(ftdm_stream_handle_t *stream)
 		return FTDM_FAIL;
 	} else {
 		len = len + sprintf(buf + len, "<sctp_gen>\n");
-		len = len + sprintf(buf + len, "<mem_size> %ld </mem_size>\n",cfm.t.ssta.s.genSta.memSize);
-		len = len + sprintf(buf + len, " <allocated_mem_size> %ld </allocated_mem_size>\n",cfm.t.ssta.s.genSta.memAlloc);
+		len = len + sprintf(buf + len, "<mem_size> %d </mem_size>\n",cfm.t.ssta.s.genSta.memSize);
+		len = len + sprintf(buf + len, " <allocated_mem_size> %d </allocated_mem_size>\n",cfm.t.ssta.s.genSta.memAlloc);
 		len = len + sprintf(buf + len, " <num_of_open_assoc> %d </num_of_open_assoc>\n",cfm.t.ssta.s.genSta.nmbAssoc);
 		len = len + sprintf(buf + len, " <num_of_open_end_points> %d </num_of_open_end_points>\n",cfm.t.ssta.s.genSta.nmbEndp);
 		len = len + sprintf(buf + len, " <num_of_lcl_addr_in_use> %d </num_of_lcl_addr_in_use>\n",cfm.t.ssta.s.genSta.nmbLocalAddr);
@@ -3379,7 +3395,7 @@ static ftdm_status_t handle_show_sctp_profiles(ftdm_stream_handle_t *stream)
 	x = 1;
 	while(x<MAX_SCTP_LINK){
 		if((g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].id !=0) &&
-				(!(g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags & SNGSS7_CONFIGURED))) {
+				((g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags & SNGSS7_ACTIVE))) {
 
 			len = len + sprintf(buf + len, "<sctp_profile>\n");
 
@@ -3438,7 +3454,7 @@ int get_assoc_resp_buf(char* buf,SbMgmt* cfm)
 	char *asciiAddr;
 	CmInetIpAddr ip;
 
-	len = len + sprintf(buf + len, " <assoc_id> %ld </assoc_id>\n", cfm->t.ssta.s.assocSta.assocId);
+	len = len + sprintf(buf + len, " <assoc_id> %d </assoc_id>\n", cfm->t.ssta.s.assocSta.assocId);
 	len = len + sprintf(buf + len, " <assoc_status> %s </assoc_status>\n", PRNT_SCTP_ASSOC_STATE(cfm->t.ssta.s.assocSta.assocState));
 	len = len + sprintf(buf + len, " <assoc_dst_port> %d </assoc_dst_port>\n", cfm->t.ssta.s.assocSta.dstPort);
 	len = len + sprintf(buf + len, " <assoc_src_port> %d </assoc_src_port>\n", cfm->t.ssta.s.assocSta.srcPort);
@@ -3558,7 +3574,7 @@ static ftdm_status_t handle_show_sctp_profile(ftdm_stream_handle_t *stream, char
 	x = 1;
 	while(x<MAX_SCTP_LINK){
 		if((g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].id !=0) &&
-				(!(g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags & SNGSS7_CONFIGURED))) {
+				((g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags & SNGSS7_ACTIVE))) {
 			if(!strcasecmp(sctp_profile_name, g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].name)){
 				found = 0x01;
 				break;
@@ -3644,8 +3660,8 @@ static ftdm_status_t handle_show_nif_profiles(ftdm_stream_handle_t *stream)
 		return FTDM_FAIL;
 	} else {
 		len = len + sprintf(buf + len, "<nif_gen>\n");
-		len = len + sprintf(buf + len, "<mem_size> %ld </mem_size>\n",cfm.t.ssta.s.genSta.memSize);
-		len = len + sprintf(buf + len, " <allocated_mem_size> %ld </allocated_mem_size>\n",cfm.t.ssta.s.genSta.memAlloc);
+		len = len + sprintf(buf + len, "<mem_size> %d </mem_size>\n",cfm.t.ssta.s.genSta.memSize);
+		len = len + sprintf(buf + len, " <allocated_mem_size> %d </allocated_mem_size>\n",cfm.t.ssta.s.genSta.memAlloc);
 		len = len + sprintf(buf + len, "</nif_gen>\n");
 	}
 
@@ -3653,7 +3669,7 @@ static ftdm_status_t handle_show_nif_profiles(ftdm_stream_handle_t *stream)
 	x = 1;
 	while(x<MW_MAX_NUM_OF_INTF){
 		if((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].id !=0) &&
-				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].flags & SNGSS7_CONFIGURED))) {
+				((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].flags & SNGSS7_ACTIVE))) {
 
 			len = len + sprintf(buf + len, "<nif_profile>\n");
 
@@ -3664,7 +3680,7 @@ static ftdm_status_t handle_show_nif_profiles(ftdm_stream_handle_t *stream)
 				len = len + sprintf(buf + len, "<nif_dlsap>\n");
 				len = len + sprintf(buf + len," <m2ua_sap_state> %s </m2ua_sap_state>\n", PRNT_NIF_SAP_STATE(cfm.t.ssta.s.dlSapSta.m2uaState));
 				len = len + sprintf(buf + len," <mtp2_sap_state> %s </mtp2_sap_state>\n", PRNT_NIF_SAP_STATE(cfm.t.ssta.s.dlSapSta.mtp2State));
-				len = len + sprintf(buf + len," <nmb_of_retry> %ld </nmb_of_retry>\n", cfm.t.ssta.s.dlSapSta.nmbRetry);
+				len = len + sprintf(buf + len," <nmb_of_retry> %d </nmb_of_retry>\n", cfm.t.ssta.s.dlSapSta.nmbRetry);
 				len = len + sprintf(buf + len, "</nif_dlsap>\n");
 			}
 
@@ -3704,7 +3720,7 @@ static ftdm_status_t handle_show_nif_profile(ftdm_stream_handle_t *stream, char*
 	x = 1;
 	while(x<MW_MAX_NUM_OF_INTF){
 		if((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].id !=0) &&
-				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].flags & SNGSS7_CONFIGURED))) {
+				((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].flags & SNGSS7_ACTIVE))) {
 
 			if(!strcasecmp(nif_profile_name, g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].name)){
 				found = 0x01;
@@ -3729,7 +3745,7 @@ static ftdm_status_t handle_show_nif_profile(ftdm_stream_handle_t *stream, char*
 		len = len + sprintf(buf + len, "<nif_dlsap>\n");
 		len = len + sprintf(buf + len," <m2ua_sap_state> %s </m2ua_sap_state>\n", PRNT_NIF_SAP_STATE(cfm.t.ssta.s.dlSapSta.m2uaState));
 		len = len + sprintf(buf + len," <mtp2_sap_state> %s </mtp2_sap_state>\n", PRNT_NIF_SAP_STATE(cfm.t.ssta.s.dlSapSta.mtp2State));
-		len = len + sprintf(buf + len," <nmb_of_retry> %ld </nmb_of_retry>\n", cfm.t.ssta.s.dlSapSta.nmbRetry);
+		len = len + sprintf(buf + len," <nmb_of_retry> %d </nmb_of_retry>\n", cfm.t.ssta.s.dlSapSta.nmbRetry);
 		len = len + sprintf(buf + len, "</nif_dlsap>\n");
 	}
 
@@ -3774,7 +3790,7 @@ static ftdm_status_t handle_show_m2ua_peer_status(ftdm_stream_handle_t *stream,
 	x = 1;
 	while(x<MW_MAX_NUM_OF_INTF){
 		if((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].id !=0) &&
-				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_CONFIGURED))) {
+				((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_ACTIVE))) {
 
 			if(!strcasecmp(m2ua_profile_name, g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].name)){
 				found = 0x01;
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.c
index a5ff80a636..ccaf3ce418 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.c
@@ -72,25 +72,94 @@ static int ftmod_ss7_sctp_shutdown(void);
 static int ftmod_ss7_m2ua_shutdown(void);
 static int ftmod_ss7_tucl_shutdown(void);
 
-ftdm_status_t sng_m2ua_init(void); 
-ftdm_status_t sng_m2ua_cfg(void);
+
+/******************************************************************************/
+ftdm_status_t ftmod_ss7_m2ua_init(void) 
+{
+	/****************************************************************************************************/
+	if (sng_isup_init_nif()) {
+		ftdm_log (FTDM_LOG_ERROR , "Failed to start NIF\n");
+		return FTDM_FAIL;
+	} else {
+		ftdm_log (FTDM_LOG_INFO ,"Started NIF!\n");
+	}
+	/****************************************************************************************************/
+
+	if (sng_isup_init_m2ua()) {
+		ftdm_log (FTDM_LOG_ERROR ,"Failed to start M2UA\n");
+		return FTDM_FAIL;
+	} else {
+		ftdm_log (FTDM_LOG_INFO ,"Started M2UA!\n");
+	}
+	/****************************************************************************************************/
+
+	if (sng_isup_init_sctp()) {
+		ftdm_log (FTDM_LOG_ERROR ,"Failed to start SCTP\n");
+		return FTDM_FAIL;
+	} else {
+		ftdm_log (FTDM_LOG_INFO ,"Started SCTP!\n");
+	}
+	/****************************************************************************************************/
+
+	if (sng_isup_init_tucl()) {
+		ftdm_log (FTDM_LOG_ERROR ,"Failed to start TUCL\n");
+		return FTDM_FAIL;
+	} else {
+		ftdm_log (FTDM_LOG_INFO ,"Started TUCL!\n");
+		sngss7_set_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_TUCL_PRESENT);
+	}
+	/****************************************************************************************************/
+
+	if(ftmod_tucl_gen_config()){
+		ftdm_log (FTDM_LOG_ERROR ,"TUCL GEN configuration: NOT OK\n");
+		return FTDM_FAIL;
+	} else {
+		ftdm_log (FTDM_LOG_INFO ,"TUCL GEN configuration: OK\n");
+	}
+	/****************************************************************************************************/
+	if(ftmod_sctp_gen_config()){
+		ftdm_log (FTDM_LOG_ERROR ,"SCTP GEN configuration: NOT OK\n");
+		return FTDM_FAIL;
+	} else {
+		ftdm_log (FTDM_LOG_INFO ,"SCTP GEN configuration: OK\n");
+	}
+	/****************************************************************************************************/
+	if(ftmod_m2ua_gen_config()) {
+		ftdm_log (FTDM_LOG_ERROR ,"M2UA General configuration: NOT OK\n");
+		return FTDM_FAIL;
+	}else {
+		ftdm_log (FTDM_LOG_INFO ,"M2UA General configuration: OK\n");
+	}
+	/****************************************************************************************************/
+	if(ftmod_nif_gen_config()){
+		ftdm_log (FTDM_LOG_ERROR ,"NIF General configuration: NOT OK\n");
+		return FTDM_FAIL;
+	}else {
+		ftdm_log (FTDM_LOG_INFO ,"NIF General configuration: OK\n");
+	}
+	/****************************************************************************************************/
+
+
+	return FTDM_SUCCESS;
+}
 
 /******************************************************************************/
 void ftmod_ss7_m2ua_free()
 {
-	if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_M2UA_STARTED)) {
+	if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_M2UA_PRESENT)) {
 		ftmod_ss7_m2ua_shutdown();
 		sng_isup_free_m2ua();
 	}
-	if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_SCTP_STARTED)) {
+	if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_SCTP_PRESENT)) {
 		ftmod_ss7_sctp_shutdown();
 		sng_isup_free_sctp();
 	}
-	if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_TUCL_STARTED)) {
+	if (sngss7_test_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_TUCL_PRESENT)) {
 		ftmod_ss7_tucl_shutdown();
 		sng_isup_free_tucl();
 	}
 }
+
 /******************************************************************************/
 static int ftmod_ss7_tucl_shutdown()
 {
@@ -181,86 +250,12 @@ static int ftmod_ss7_sctp_shutdown()
 
 /******************************************************************************/
 
+
+
 ftdm_status_t ftmod_ss7_m2ua_cfg(void)
-{
-	if(FTDM_SUCCESS != sng_m2ua_init()){
-		ftdm_log (FTDM_LOG_ERROR, " sng_m2ua_init FAILED \n");
-		return FTDM_FAIL;
-	}
-	
-	if(FTDM_SUCCESS != sng_m2ua_cfg()){
-		ftdm_log (FTDM_LOG_ERROR, " sng_m2ua_cfg FAILED \n");
-		return FTDM_FAIL;
-	}
-
-	/* SET STARTED FLAGS */
-	sngss7_set_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_NIF_STARTED);
-	sngss7_set_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_M2UA_STARTED);
-	sngss7_set_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_SCTP_STARTED);
-	sngss7_set_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_TUCL_STARTED);
-
-	return FTDM_SUCCESS;
-}
-		
-/******************************************************************************/
-
-ftdm_status_t sng_m2ua_init(void) 
-{
-	if (sng_isup_init_nif()) {
-		ftdm_log (FTDM_LOG_ERROR , "Failed to start NIF\n");
-		return FTDM_FAIL;
-	} else {
-		ftdm_log (FTDM_LOG_INFO ,"Started NIF!\n");
-	}
-
-	if (sng_isup_init_m2ua()) {
-		ftdm_log (FTDM_LOG_ERROR ,"Failed to start M2UA\n");
-		return FTDM_FAIL;
-	} else {
-		ftdm_log (FTDM_LOG_INFO ,"Started M2UA!\n");
-	}
-
-	if (sng_isup_init_sctp()) {
-		ftdm_log (FTDM_LOG_ERROR ,"Failed to start SCTP\n");
-		return FTDM_FAIL;
-	} else {
-		ftdm_log (FTDM_LOG_INFO ,"Started SCTP!\n");
-	}
-
-	if (sng_isup_init_tucl()) {
-		ftdm_log (FTDM_LOG_ERROR ,"Failed to start TUCL\n");
-		return FTDM_FAIL;
-	} else {
-		ftdm_log (FTDM_LOG_INFO ,"Started TUCL!\n");
-	}
-
-	return FTDM_SUCCESS;
-}
-
-/****************************************************************************************************/
-
-ftdm_status_t sng_m2ua_cfg(void)
 {
 	int x=0;
 
-	/****************************************************************************************************/
-	/* TUCL */
-	if(ftmod_tucl_gen_config()){
-		ftdm_log (FTDM_LOG_ERROR ,"TUCL GEN configuration: NOT OK\n");
-		return FTDM_FAIL;
-	} else {
-		ftdm_log (FTDM_LOG_INFO ,"TUCL GEN configuration: OK\n");
-	}
-
-	/****************************************************************************************************/
-	/* SCTP */
-	if(ftmod_sctp_gen_config()){
-		ftdm_log (FTDM_LOG_ERROR ,"SCTP GEN configuration: NOT OK\n");
-		return FTDM_FAIL;
-	} else {
-		ftdm_log (FTDM_LOG_INFO ,"SCTP GEN configuration: OK\n");
-	}
-	/****************************************************************************************************/
 	/* SCTP configuration */
 	if(ftmod_cfg_sctp()){
 		ftdm_log (FTDM_LOG_ERROR ,"SCTP Configuration : NOT OK\n");
@@ -268,15 +263,7 @@ ftdm_status_t sng_m2ua_cfg(void)
 	} else {
 		ftdm_log (FTDM_LOG_INFO ,"SCTP Configuration : OK\n");
 	}
-	/****************************************************************************************************/
-	/* M2UA configurations */
 
-	if(ftmod_m2ua_gen_config()) {
-		ftdm_log (FTDM_LOG_ERROR ,"M2UA General configuration: NOT OK\n");
-		return FTDM_FAIL;
-	}else {
-		ftdm_log (FTDM_LOG_INFO ,"M2UA General configuration: OK\n");
-	}
 	/****************************************************************************************************/
 	/* M2UA SCTP SAP configurations */
 	x = 1;
@@ -314,17 +301,9 @@ ftdm_status_t sng_m2ua_cfg(void)
 				ftdm_log (FTDM_LOG_INFO ,"M2UA DLSAP[%d] configuration: OK\n", x);
 			}
 		} /* END - SNGSS7_CONFIGURED */
+		g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags |= SNGSS7_CONFIGURED;
 		x++;
 	}/* END - M2UA Interfaces for loop*/
-/****************************************************************************************************/
-	/* NIF */
-	if(ftmod_nif_gen_config()){
-		ftdm_log (FTDM_LOG_ERROR ,"NIF General configuration: NOT OK\n");
-		return FTDM_FAIL;
-	}else {
-		ftdm_log (FTDM_LOG_INFO ,"NIF General configuration: OK\n");
-	}
-
 /****************************************************************************************************/
 	/* NIF DLSAP */
 
@@ -339,10 +318,16 @@ ftdm_status_t sng_m2ua_cfg(void)
 				ftdm_log (FTDM_LOG_INFO ,"NIF DLSAP[%d] configuration: OK\n", x);
 			}
 		}
+		g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].flags |= SNGSS7_CONFIGURED;
 		x++;
 	}
 
-/****************************************************************************************************/
+	/* successfully started all the layers , not SET STARTED FLAGS */
+	sngss7_set_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_NIF_STARTED);
+	sngss7_set_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_M2UA_STARTED);
+	sngss7_set_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_SCTP_STARTED);
+	sngss7_set_flag(&g_ftdm_sngss7_data.cfg, SNGSS7_TUCL_STARTED);
+
 
 	return 0;
 }
@@ -524,16 +509,22 @@ static int ftmod_sctp_gen_config(void)
 static int ftmod_cfg_sctp(void)
 {
 	int x=0;
-	for (x=1; g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].id !=0; x++) {
-		if (!(g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags & SNGSS7_CONFIGURED)) {
-			
+
+	x = 1;
+	while(x<MAX_SCTP_LINK){
+
+		if((g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].id !=0) && 
+				(!(g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags & SNGSS7_CONFIGURED))) {
+
 			if (  ftmod_sctp_config(x) == FTDM_FAIL) {
 				SS7_CRITICAL("SCTP %d configuration FAILED!\n", x);
 				return FTDM_FAIL;
 			} else {
 				SS7_INFO("SCTP %d configuration DONE!\n", x);
 			}
+			g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags |= SNGSS7_CONFIGURED;
 		}
+		x++;
 	}
 	return FTDM_SUCCESS;
 }
@@ -1214,7 +1205,7 @@ int ftmod_ss7_m2ua_start(void){
 	x = 1;
 	while(x<MAX_SCTP_LINK){
 		if((g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].id !=0) && 
-				(!(g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags & SNGSS7_CONFIGURED))) {
+				(!(g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags & SNGSS7_ACTIVE))) {
 
 			/* Send a control request to bind the TSAP between SCTP and TUCL */
 			if(ftmod_sctp_tucl_tsap_bind(x)) {
@@ -1223,6 +1214,7 @@ int ftmod_ss7_m2ua_start(void){
 			} else {
 				ftdm_log (FTDM_LOG_INFO ,"\nControl request to bind TSAP[%d] of SCTP and TUCL: OK\n", x);
 			}
+			g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[x].flags |= SNGSS7_ACTIVE;
 		}
 		x++;
 	}
@@ -1232,13 +1224,14 @@ int ftmod_ss7_m2ua_start(void){
 	x = 1;
 	while(x<MW_MAX_NUM_OF_INTF){
 		if((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].id !=0) && 
-				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_CONFIGURED))) {
+				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_ACTIVE))) {
 			if(ftmod_m2ua_sctp_sctsap_bind(x)) {
 				ftdm_log (FTDM_LOG_ERROR ,"Control request to bind SCTSAP[%d] of M2UA and SCTP : NOT OK\n", x);
 				return 1;
 			} else {
 				ftdm_log (FTDM_LOG_INFO ,"Control request to bind SCTSAP[%d] of M2UA and SCTP: OK\n", x);
 			}
+			g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags |= SNGSS7_ACTIVE;
 		}
 		x++;
 	}/* END - M2UA Interfaces while loop*/
@@ -1247,7 +1240,7 @@ int ftmod_ss7_m2ua_start(void){
 	x = 1;
 	while(x<MW_MAX_NUM_OF_INTF){
 		if ((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].id !=0) && 
-				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].flags & SNGSS7_CONFIGURED))) {
+				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].flags & SNGSS7_ACTIVE))) {
 			/* Send a control request to bind the DLSAP between NIF, M2UA and MTP-2 */
 			if(ftmod_nif_m2ua_dlsap_bind(x)) {
 				ftdm_log (FTDM_LOG_ERROR ,"Control request to bind DLSAP[%d] between NIF and M2UA: NOT OK\n", x);
@@ -1261,6 +1254,7 @@ int ftmod_ss7_m2ua_start(void){
 			}else {
 				ftdm_log (FTDM_LOG_INFO ,"Control request to bind DLSAP[%d] between NIF and MTP2 : OK\n", x);
 			}
+			g_ftdm_sngss7_data.cfg.g_m2ua_cfg.nif[x].flags |= SNGSS7_ACTIVE;
 		}
 		x++;
 	}/* END - NIF Interfaces for loop*/
@@ -1270,7 +1264,7 @@ int ftmod_ss7_m2ua_start(void){
 	x = 1;
 	while(x<MW_MAX_NUM_OF_INTF){
 		if ((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].id !=0) && 
-				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_CONFIGURED))) {
+				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].end_point_opened))) {
 			/* Send a control request to open endpoint */
 			if(ftmod_open_endpoint(x)) {
 				ftdm_log (FTDM_LOG_ERROR ,"ftmod_open_endpoint FAIL  \n");
@@ -1278,6 +1272,7 @@ int ftmod_ss7_m2ua_start(void){
 			}else {
 				ftdm_log (FTDM_LOG_INFO ,"ftmod_open_endpoint SUCCESS  \n");
 			}
+			g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].end_point_opened = 0x01;
 		}
 		x++;
 	}
@@ -1288,7 +1283,7 @@ int ftmod_ss7_m2ua_start(void){
 	x = 1;
 	while (x < (MW_MAX_NUM_OF_PEER)) {
 		if ((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[x].id !=0) &&
-				((g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[x].flags & SNGSS7_CONFIGURED)) && 
+				(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[x].flags & SNGSS7_M2UA_INIT_ASSOC_DONE)) && 
 				(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[x].init_sctp_assoc)) {
 			if(ftmod_init_sctp_assoc(x)) {
 				ftdm_log (FTDM_LOG_ERROR ,"ftmod_init_sctp_assoc FAIL for peerId[%d] \n", x);
@@ -1296,12 +1291,13 @@ int ftmod_ss7_m2ua_start(void){
 			}else {
 				ftdm_log (FTDM_LOG_INFO ,"ftmod_init_sctp_assoc SUCCESS for peerId[%d] \n", x);
 			}
+			g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[x].flags |= SNGSS7_M2UA_INIT_ASSOC_DONE;
 		}
 		x++;
 	}
 
 
-
+	
 
 	return 0;
 }
@@ -1676,7 +1672,6 @@ int ftmod_m2ua_ssta_req(int elemt, int id, MwMgmt* cfm)
 	Pst pst;
 	sng_m2ua_cfg_t* 	 m2ua  = NULL; 
 	sng_m2ua_cluster_cfg_t*  clust = NULL; 
-	sng_m2ua_peer_cfg_t* 	 peer  = NULL; 
 
 	memset((U8 *)&pst, 0, sizeof(Pst));
 	memset((U8 *)&ssta, 0, sizeof(MwMgmt));
@@ -1714,8 +1709,7 @@ int ftmod_m2ua_ssta_req(int elemt, int id, MwMgmt* cfm)
                 }
           case STMWPEER:
                 {
-		   peer  = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[id];
-                   ssta.t.ssta.id.peerId = peer->id ; /* peer Id */            
+                   ssta.t.ssta.id.peerId = id ; /* peer Id */            
                    break;
                 }
           case STMWCLUSTER:
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.h b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.h
index 8e22e47b97..c7ce2e74eb 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.h
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.h
@@ -60,6 +60,7 @@ typedef struct sng_m2ua_cfg{
 	uint32_t    		 flags;
 	uint32_t    		 id;		/* ID */
 	uint8_t    		 nodeType; 	/*Node Type SG/ASP */
+	uint8_t    		 end_point_opened; /* flag to check is end-point already opened */	
 	uint16_t    		 clusterId;	/* idx to m2ua_cluster profile */
 }sng_m2ua_cfg_t;
 
@@ -122,6 +123,7 @@ int ftmod_ss7_m2ua_start(void);
 void ftmod_ss7_m2ua_free(void);
 
 ftdm_status_t ftmod_ss7_m2ua_cfg(void);
+ftdm_status_t ftmod_ss7_m2ua_init(void);
 
 int ftmod_sctp_ssta_req(int elemt, int id, SbMgmt* cfm);
 int ftmod_m2ua_ssta_req(int elemt, int id, MwMgmt* cfm);
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua_xml.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua_xml.c
index 57bca70e61..b9ae986402 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua_xml.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua_xml.c
@@ -146,9 +146,6 @@ static int ftmod_ss7_parse_nif_interface(ftdm_conf_node_t *nif_interface)
 	/**************************************************************************/
 	} /* for (i = 0; i < num_parms; i++) */
 
-	/* default the interface to paused state */
-	sngss7_set_flag(&sng_nif, SNGSS7_PAUSED);
-
 	/* fill in the nif interface */
 	ftmod_ss7_fill_in_nif_interface(&sng_nif);
 
@@ -259,9 +256,6 @@ static int ftmod_ss7_parse_m2ua_interface(ftdm_conf_node_t *m2ua_interface)
 
 	sng_m2ua.nodeType = SNG_M2UA_NODE_TYPE_SGP;
 
-	/* default the interface to paused state */
-	sngss7_set_flag(&sng_m2ua, SNGSS7_PAUSED);
-
 	/* fill in the nif interface */
 	ftmod_ss7_fill_in_m2ua_interface(&sng_m2ua);
 
@@ -421,9 +415,6 @@ static int ftmod_ss7_parse_m2ua_peer_interface(ftdm_conf_node_t *m2ua_peer_inter
 	/**************************************************************************/
 	} /* for (i = 0; i < num_parms; i++) */
 
-	/* default the interface to paused state */
-	sngss7_set_flag(&sng_m2ua_peer, SNGSS7_PAUSED);
-
 	/* fill in the sng_m2ua_peer interface */
 	ftmod_ss7_fill_in_m2ua_peer_interface(&sng_m2ua_peer);
 
@@ -576,9 +567,6 @@ static int ftmod_ss7_parse_m2ua_clust_interface(ftdm_conf_node_t *m2ua_cluster_i
 	/**************************************************************************/
 	} /* for (i = 0; i < num_parms; i++) */
 
-	/* default the interface to paused state */
-	sngss7_set_flag(&sng_m2ua_cluster, SNGSS7_PAUSED);
-
 	/* fill in the sng_m2ua_peer interface */
 	ftmod_ss7_fill_in_m2ua_clust_interface(&sng_m2ua_cluster);
 
@@ -663,7 +651,7 @@ static int ftmod_ss7_parse_sctp_link(ftdm_conf_node_t *node)
 			t_link.id = atoi(param->val);
 			SS7_DEBUG("SCTP - Parsing <sng_sctp_interface> with id = %s\n", param->val);
 		}
-		else if (!strcasecmp(param->var, "src-addr")) {
+		else if (!strcasecmp(param->var, "address")) {
 			if (t_link.numSrcAddr < SCT_MAX_NET_ADDRS) {
 				t_link.srcAddrList[t_link.numSrcAddr+1] = iptoul (param->val);
 				t_link.numSrcAddr++;
@@ -671,7 +659,7 @@ static int ftmod_ss7_parse_sctp_link(ftdm_conf_node_t *node)
 			} else {
 				SS7_ERROR("SCTP - too many source address configured. dropping %s \n", param->val);
 			}
-		} else if (!strcasecmp(param->var, "src-port")) {
+		} else if (!strcasecmp(param->var, "source-port")) {
 			t_link.port = atoi(param->val);
 			SS7_DEBUG("SCTP - Parsing <sng_sctp_interface> with port = %s\n", param->val);
 		}
@@ -683,7 +671,6 @@ static int ftmod_ss7_parse_sctp_link(ftdm_conf_node_t *node)
 	g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[t_link.id].id 		= t_link.id;
 	g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[t_link.id].port   	= t_link.port;
 	strncpy((char*)g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[t_link.id].name, t_link.name, strlen(t_link.name) );
-	g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[t_link.id].flags		= 0;
 	g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[t_link.id].numSrcAddr = t_link.numSrcAddr;
 	for (i=1; i<=t_link.numSrcAddr; i++) {
 		g_ftdm_sngss7_data.cfg.sctpCfg.linkCfg[t_link.id].srcAddrList[i] = t_link.srcAddrList[i];
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
index 0e52f88710..9a5a8cbe95 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
@@ -768,9 +768,10 @@ typedef enum {
 	SNGSS7_M2UA_PRESENT	 = (1 << 18),
 	SNGSS7_M2UA_STARTED      = (1 << 19),
 	SNGSS7_M2UA_EP_OPENED    = (1 << 20),
+	SNGSS7_M2UA_INIT_ASSOC_DONE    = (1 << 21),
 
-	SNGSS7_NIF_PRESENT	 = (1 << 21),
-	SNGSS7_NIF_STARTED       = (1 << 22),
+	SNGSS7_NIF_PRESENT	 = (1 << 22),
+	SNGSS7_NIF_STARTED       = (1 << 23),
 
 } sng_task_flag_t;
 /******************************************************************************/