/**************************************************************************/
if (check_arg_count(argc, 2)) {
- cli_ss7_show_general(stream);
- return FTDM_SUCCESS;
+ stream->write_function(stream, "Unknown \"xmlshow\" command\n");
+ goto handle_cli_error;
}
c++;
/**************************************************************************/
static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream)
{
char* xmlhdr = (char*)"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
- char buf[2048];
+ char buf[6144];
int x = 0x00;
int idx = 0x00;
int len = 0x00;
(!(g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x].flags & SNGSS7_CONFIGURED))) {
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);
if(ftmod_m2ua_ssta_req(STMWDLSAP,x,&cfm)) {
stream->write_function(stream," Request to Trillium SCTP layer failed \n");
}
}
- if(ftmod_m2ua_ssta_req(STMWSCTSAP,x,&cfm)) {
- stream->write_function(stream," Request to Trillium SCTP layer failed \n");
- return FTDM_FAIL;
- } else {
- 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> %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");
- }
+ if(ftmod_m2ua_ssta_req(STMWSCTSAP,x,&cfm)) {
+ stream->write_function(stream," Request to Trillium SCTP layer failed \n");
+ return FTDM_FAIL;
+ } else {
+ 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> %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");
+ }
len = len + sprintf(buf + len, "</m2ua_profile>\n");
}
static ftdm_status_t handle_show_m2ua_profile(ftdm_stream_handle_t *stream, char* m2ua_profile_name)
{
char* xmlhdr = (char*)"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
- char buf[2048];
+ char buf[4096];
int x = 0x00;
int idx = 0x00;
int found = 0x00;
len = len + sprintf(buf + len, "<m2ua_profile>\n");
+ len = len + sprintf(buf + len, "<name> %s </name>\n", m2ua_profile_name);
if(ftmod_m2ua_ssta_req(STMWDLSAP,x,&cfm)) {
stream->write_function(stream," Request to Trillium SCTP layer failed \n");
len = len + sprintf(buf + len, "</m2ua_dlsap>\n");
}
- if(ftmod_m2ua_ssta_req(STMWCLUSTER,x,&cfm)) {
+ 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;
} else {
static ftdm_status_t handle_show_sctp_profiles(ftdm_stream_handle_t *stream)
{
char* xmlhdr = (char*)"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
- char buf[2048];
+ char buf[4096];
int x = 0x00;
int len = 0x00;
SbMgmt cfm;
}
if(ftmod_sctp_ssta_req(STSBASSOC,x,&cfm)) {
- stream->write_function(stream," Request to Trillium SCTP layer failed \n");
- return FTDM_FAIL;
+ if(LCM_REASON_INVALID_PAR_VAL == cfm.cfm.reason){
+ len = len + sprintf(buf + len, "<sctp_association>\n");
+ len = len + sprintf(buf + len, " <status> SCT_ASSOC_STATE_CLOSED </status>\n");
+ len = len + sprintf(buf + len, "</sctp_association>\n");
+ }else{
+ stream->write_function(stream," Request to Trillium SCTP layer failed \n");
+ return FTDM_FAIL;
+ }
} else {
len = len + sprintf(buf + len, "<sctp_association>\n");
len = len + get_assoc_resp_buf(buf + len, &cfm);
static ftdm_status_t handle_show_sctp_profile(ftdm_stream_handle_t *stream, char* sctp_profile_name)
{
char* xmlhdr = (char*)"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
- char buf[2048];
+ char buf[4096];
int x = 0x00;
int len = 0x00;
SbMgmt cfm;
}
if(ftmod_sctp_ssta_req(STSBASSOC,x,&cfm)) {
- stream->write_function(stream," Request to Trillium SCTP layer failed \n");
- return FTDM_FAIL;
+ /* it means assoc id not yet allocated */
+ if(LCM_REASON_INVALID_PAR_VAL == cfm.cfm.reason){
+ len = len + sprintf(buf + len, "<sctp_association>\n");
+ len = len + sprintf(buf + len, " <status> SCT_ASSOC_STATE_CLOSED </status>\n");
+ len = len + sprintf(buf + len, "</sctp_association>\n");
+ }else{
+ stream->write_function(stream," Request to Trillium SCTP layer failed \n");
+ return FTDM_FAIL;
+ }
} else {
len = len + sprintf(buf + len, "<sctp_association>\n");
len = len + get_assoc_resp_buf(buf + len, &cfm);
static ftdm_status_t handle_show_nif_profiles(ftdm_stream_handle_t *stream)
{
char* xmlhdr = (char*)"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
- char buf[2048];
+ char buf[4096];
int x = 0x00;
int len = 0x00;
NwMgmt cfm;
static ftdm_status_t handle_show_nif_profile(ftdm_stream_handle_t *stream, char* nif_profile_name)
{
char* xmlhdr = (char*)"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
- char buf[2048];
+ char buf[4096];
int x = 0x00;
int found = 0x00;
int len = 0x00;
static ftdm_status_t handle_show_m2ua_peer_status(ftdm_stream_handle_t *stream, char* m2ua_profile_name)
{
char* xmlhdr = (char*)"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>";
- char buf[2048];
+ char buf[4096];
int x = 0x00;
int found = 0x00;
int len = 0x00;
static ftdm_status_t ftmod_sctp_sap_config(int id);
static ftdm_status_t ftmod_sctp_tsap_config(int id);
static int ftmod_m2ua_gen_config(void);
-static int ftmod_m2ua_sctsap_config(int m2ua_inf_id, int sctp_id);
+static int ftmod_m2ua_sctsap_config(int sct_sap_id, int sctp_id);
static int ftmod_m2ua_peer_config(int id);
static int ftmod_m2ua_peer_config1(int m2ua_inf_id, int peer_id);
static int ftmod_m2ua_cluster_config(int idx);
sng_m2ua_cluster_cfg_t* clust = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_clus[m2ua->clusterId];
sng_m2ua_peer_cfg_t* peer = NULL;
+ if((clust->flags & SNGSS7_CONFIGURED)){
+ ftdm_log (FTDM_LOG_INFO, " ftmod_m2ua_peer_config: Cluster [%s] is already configured \n", clust->name);
+ return 0x00;
+ }
+
+ /*NOTE : SCTSAP is based on per source address , so if we have same Cluster / peer shared across many <m2ua_interface> then
+ * we dont have do configuration for each time */
+
/* loop through peer list from cluster to configure SCTSAP */
for(x = 0; x < clust->numOfPeers;x++){
ftdm_log (FTDM_LOG_INFO, " ftmod_m2ua_peer_config1: M2UA Peer configuration for M2UA Intf Id[%d] config SUCCESS \n", id);
}
+ clust->sct_sap_id = id;
+ /* set configured flag for cluster and peer */
+ clust->flags |= SNGSS7_CONFIGURED;
+ peer->flags |= SNGSS7_CONFIGURED;
}
return 0x0;;
}
-static int ftmod_m2ua_sctsap_config(int m2ua_inf_id, int sctp_id)
+
+static int ftmod_m2ua_sctsap_config(int sct_sap_id, int sctp_id)
{
int i;
Pst pst;
cfg.t.cfg.s.sctSapCfg.reConfig.selector = 0;
/* service user SAP ID */
- cfg.t.cfg.s.sctSapCfg.suId = m2ua_inf_id;
+ cfg.t.cfg.s.sctSapCfg.suId = sct_sap_id;
/* service provider ID */
cfg.t.cfg.s.sctSapCfg.spId = sctp_id;
/* source port number */
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_CONFIGURED)) &&
(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);
static int ftmod_open_endpoint(int id)
{
+ int ret = 0x00;
Pst pst;
MwMgmt cntrl;
sng_m2ua_cfg_t* m2ua = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[id];
+ sng_m2ua_cluster_cfg_t* clust = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_clus[m2ua->clusterId];
+
+ if(clust->flags & SNGSS7_M2UA_EP_OPENED) {
+ ftdm_log (FTDM_LOG_INFO ," END-POINT already opened\n");
+ return ret;
+ }
memset((U8 *)&pst, 0, sizeof(Pst));
memset((U8 *)&cntrl, 0, sizeof(MwMgmt));
cntrl.t.cntrl.action = AMWENDPOPEN;
cntrl.t.cntrl.s.suId = m2ua->id; /* M2UA sct sap Id */
- return (sng_cntrl_m2ua (&pst, &cntrl));
+
+ if(0 == (ret = sng_cntrl_m2ua (&pst, &cntrl))){
+ clust->flags |= SNGSS7_M2UA_EP_OPENED;
+ }
+ return ret;
+
}
/***********************************************************************************************************************/
static int ftmod_m2ua_sctp_sctsap_bind(int id)
{
+ int ret = 0x00;
Pst pst;
MwMgmt cntrl;
sng_m2ua_cfg_t* m2ua = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[id];
+ sng_m2ua_cluster_cfg_t* clust = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_clus[m2ua->clusterId];
+
+ if(clust->flags & SNGSS7_ACTIVE) {
+ ftdm_log (FTDM_LOG_INFO ," SCT-SAP is already enabled\n");
+ return ret;
+ }
+
memset((U8 *)&pst, 0, sizeof(Pst));
memset((U8 *)&cntrl, 0, sizeof(MwMgmt));
cntrl.t.cntrl.action = ABND;
cntrl.t.cntrl.s.suId = m2ua->id;
- return (sng_cntrl_m2ua (&pst, &cntrl));
-
+ if(0 == (ret = sng_cntrl_m2ua (&pst, &cntrl))){
+ clust->flags |= SNGSS7_ACTIVE;
+ }
+ return ret;
}
/***********************************************************************************************************************/
static int ftmod_nif_m2ua_dlsap_bind(int id)
case STMWSCTSAP:
{
m2ua = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[id];
- ssta.t.ssta.id.suId = m2ua->id ; /* lower sap Id */
+ clust = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_clus[m2ua->clusterId];
+ ssta.t.ssta.id.suId = clust->sct_sap_id ; /* lower sap Id */
break;
}
case STMWDLSAP: