From 58dc659fbbaa734b37149840ce3e2f55a8585105 Mon Sep 17 00:00:00 2001 From: kapil Date: Tue, 12 Jun 2012 18:43:01 +0530 Subject: [PATCH] adding code based on modified xml and cli code changes (rename the m2ua cli command to "xmlshow" and adding cli code to show sctp state also in m2ua peerstatus command) --- libs/freetdm/mod_freetdm/mod_freetdm.c | 102 ++++++-- .../ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c | 222 ++++++++++++------ .../ftmod_sangoma_ss7_logger.c | 5 + .../ftmod_sangoma_ss7_m2ua.c | 14 +- .../ftmod_sangoma_ss7_m2ua.h | 4 +- .../ftmod_sangoma_ss7_m2ua_xml.c | 62 ++--- .../ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c | 13 +- 7 files changed, 273 insertions(+), 149 deletions(-) diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c index 9896e932aa..6751175cb5 100755 --- a/libs/freetdm/mod_freetdm/mod_freetdm.c +++ b/libs/freetdm/mod_freetdm/mod_freetdm.c @@ -2867,6 +2867,77 @@ static int add_config_list_nodes(switch_xml_t swnode, ftdm_conf_node_t *rootnode return 0; } +/* create ftdm_conf_node_t tree based on a fixed pattern XML configuration list + * last arg is to specify if we have any sublist for e.g. + * + * + * + * + * + * + * + * + * */ +static int add_config_nodes(switch_xml_t swnode, ftdm_conf_node_t *rootnode, + const char *list_name, const char *list_element_name, const char *sub_list_name) +{ + char *var, *val; + switch_xml_t list; + switch_xml_t sub_list; + switch_xml_t element; + switch_xml_t param; + + ftdm_conf_node_t *n_list; + ftdm_conf_node_t *n_element; + + list = switch_xml_child(swnode, list_name); + if (!list) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "no list %s found\n", list_name); + return -1; + } + + if ((FTDM_SUCCESS != ftdm_conf_node_create(list_name, &n_list, rootnode))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to create %s node\n", list_name); + return -1; + } + + for (element = switch_xml_child(list, list_element_name); element; element = element->next) { + char *element_name = (char *) switch_xml_attr(element, "name"); + + if (!element_name) { + continue; + } + + if ((FTDM_SUCCESS != ftdm_conf_node_create(list_element_name, &n_element, n_list))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to create %s node for %s\n", list_element_name, element_name); + return -1; + } + ftdm_conf_node_add_param(n_element, "name", element_name); + + for (param = switch_xml_child(element, "param"); param; param = param->next) { + var = (char *) switch_xml_attr_soft(param, "name"); + val = (char *) switch_xml_attr_soft(param, "value"); + ftdm_conf_node_add_param(n_element, var, val); + } + + /*If we have single node list */ + if (sub_list_name ) { + sub_list = switch_xml_child(element, sub_list_name); + if (!sub_list) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "no sub_list %s found\n", sub_list_name); + return -1; + } + for (param = switch_xml_child(sub_list, "param"); param; param = param->next) { + var = (char *) switch_xml_attr_soft(param, "name"); + val = (char *) switch_xml_attr_soft(param, "value"); + ftdm_conf_node_add_param(n_element, var, val); + } + } + } + + return 0; +} + static ftdm_conf_node_t *_get_ss7_config_node(switch_xml_t cfg, const char *confname, const char *operatingMode) { switch_xml_t signode, ss7configs, isup, gen, param; @@ -2998,23 +3069,21 @@ static ftdm_conf_node_t *_get_ss7_config_node(switch_xml_t cfg, const char *conf ftdm_conf_node_destroy(rootnode); return NULL; } - } - /* add mtp linksets */ - if (add_config_list_nodes(isup, rootnode, "mtp_linksets", "mtp_linkset", NULL, NULL)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to process mtp_linksets for sng_isup config %s\n", confname); - ftdm_conf_node_destroy(rootnode); - return NULL; - } + /* add mtp linksets */ + if (add_config_list_nodes(isup, rootnode, "mtp_linksets", "mtp_linkset", NULL, NULL)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to process mtp_linksets for sng_isup config %s\n", confname); + ftdm_conf_node_destroy(rootnode); + return NULL; + } - /* add mtp routes */ - if (add_config_list_nodes(isup, rootnode, "mtp_routes", "mtp_route", "linksets", "linkset")) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to process mtp_routes for sng_isup config %s\n", confname); - ftdm_conf_node_destroy(rootnode); - return NULL; - } + /* add mtp routes */ + if (add_config_list_nodes(isup, rootnode, "mtp_routes", "mtp_route", "linksets", "linkset")) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to process mtp_routes for sng_isup config %s\n", confname); + ftdm_conf_node_destroy(rootnode); + return NULL; + } - if(is_isup) { /* add isup interfaces */ if (add_config_list_nodes(isup, rootnode, "isup_interfaces", "isup_interface", NULL, NULL)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to process isup_interfaces for sng_isup config %s\n", confname); @@ -3049,13 +3118,14 @@ static ftdm_conf_node_t *_get_ss7_config_node(switch_xml_t cfg, const char *conf return NULL; } - if (add_config_list_nodes(isup, rootnode, "sng_m2ua_peer_interfaces", "sng_m2ua_peer_interface", NULL, NULL)) { + if (add_config_nodes(isup, rootnode, "sng_m2ua_peer_interfaces", "sng_m2ua_peer_interface", "sng_destination_addresses")) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "failed to process sng_m2ua_peer_interfaces for sng_isup config %s\n", confname); ftdm_conf_node_destroy(rootnode); return NULL; } - if (add_config_list_nodes(isup, rootnode, "sng_m2ua_cluster_interfaces", "sng_m2ua_cluster_interface", NULL, 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; 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 bec6e020ac..6fece294cc 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 @@ -393,64 +393,78 @@ ftdm_status_t ftdm_sngss7_handle_cli_cmd(ftdm_stream_handle_t *stream, const cha handle_show_procId(stream); /**********************************************************************/ - } else if (!strcasecmp(argv[c], "m2ua")) { - /**********************************************************************/ + } else{ + /**********************************************************************/ + stream->write_function(stream, "Unknown \"show\" command\n"); + goto handle_cli_error; + } + /**************************************************************************/ + } else if (!strcasecmp(argv[c], "xmlshow")) { + /**************************************************************************/ + + if (check_arg_count(argc, 2)) { + cli_ss7_show_general(stream); + return FTDM_SUCCESS; + } + c++; + /**************************************************************************/ + if (!strcasecmp(argv[c], "m2ua")) { + /**************************************************************************/ switch(argc) { case 2: /* show m2ua */ - { - handle_show_m2ua_profiles(stream); - break; - } + { + handle_show_m2ua_profiles(stream); + break; + } case 3: /* show m2ua */ - { - c++; - handle_show_m2ua_profile(stream, argv[c]); - break; - } + { + c++; + handle_show_m2ua_profile(stream, argv[c]); + break; + } case 4: - { - char* profile_name = argv[++c]; - c++; - if(!strcasecmp(argv[c],"peerstatus")){ - handle_show_m2ua_peer_status(stream, profile_name); + { + char* profile_name = argv[++c]; + c++; + if(!strcasecmp(argv[c],"peerstatus")){ + handle_show_m2ua_peer_status(stream, profile_name); + } + else{ + stream->write_function(stream, "Unknown \"show m2ua \" command..\n"); + goto handle_cli_error_argc; + } + break; } - else{ - stream->write_function(stream, "Unknown \"show m2ua \" command..\n"); - goto handle_cli_error_argc; - } - break; - } default: - goto handle_cli_error_argc; + goto handle_cli_error_argc; } - /**********************************************************************/ + /**********************************************************************/ } else if (!strcasecmp(argv[c], "nif")) { - /**********************************************************************/ + /**********************************************************************/ if (check_arg_count(argc, 3)){ handle_show_nif_profiles(stream); }else{ c++; handle_show_nif_profile(stream, argv[c]); } - /**********************************************************************/ + /**********************************************************************/ } else if (!strcasecmp(argv[c], "sctp")) { - /**********************************************************************/ + /**********************************************************************/ if (check_arg_count(argc, 3)){ handle_show_sctp_profiles(stream); }else{ c++; handle_show_sctp_profile(stream, argv[c]); } - /**********************************************************************/ + /**********************************************************************/ } else { - /**********************************************************************/ - stream->write_function(stream, "Unknown \"show\" command\n"); + /**********************************************************************/ + stream->write_function(stream, "Unknown \"xmlshow\" command\n"); goto handle_cli_error; - /**********************************************************************/ } - /**************************************************************************/ + /**********************************************************************/ } else if (!strcasecmp(argv[c], "set")) { /**************************************************************************/ if (check_arg_count(argc, 4)) goto handle_cli_error_argc; @@ -914,13 +928,13 @@ static ftdm_status_t handle_print_usage(ftdm_stream_handle_t *stream) stream->write_function(stream, "\n"); stream->write_function(stream, "ftmod_sangoma_ss7 M2UA :\n"); - stream->write_function(stream, "ftdm ss7 show sctp \n"); - stream->write_function(stream, "ftdm ss7 show sctp \n"); - stream->write_function(stream, "ftdm ss7 show m2ua \n"); - stream->write_function(stream, "ftdm ss7 show m2ua \n"); - stream->write_function(stream, "ftdm ss7 show m2ua peerstatus\n"); - stream->write_function(stream, "ftdm ss7 show nif \n"); - stream->write_function(stream, "ftdm ss7 show nif \n"); + stream->write_function(stream, "ftdm ss7 xmlshow sctp \n"); + stream->write_function(stream, "ftdm ss7 xmlshow sctp \n"); + stream->write_function(stream, "ftdm ss7 xmlshow m2ua \n"); + stream->write_function(stream, "ftdm ss7 xmlshow m2ua \n"); + stream->write_function(stream, "ftdm ss7 xmlshow m2ua peerstatus\n"); + stream->write_function(stream, "ftdm ss7 xmlshow nif \n"); + stream->write_function(stream, "ftdm ss7 xmlshow nif \n"); stream->write_function(stream, "\n"); @@ -3062,8 +3076,10 @@ static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream) int idx = 0x00; int len = 0x00; MwMgmt cfm; + MwMgmt rsp; memset((U8 *)&cfm, 0, sizeof(MwMgmt)); + memset((U8 *)&rsp, 0, sizeof(MwMgmt)); memset(&buf[0], 0, sizeof(buf)); len = len + sprintf(buf + len, "%s\n", xmlhdr); @@ -3103,7 +3119,7 @@ static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream) len = len + sprintf(buf + len, "\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 { @@ -3122,21 +3138,30 @@ static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream) len = len + sprintf(buf + len, "\n"); } - if(ftmod_m2ua_ssta_req(STMWPEER,x,&cfm)) { - stream->write_function(stream," Request to Trillium SCTP layer failed \n"); - return FTDM_FAIL; - } else { - len = len + sprintf(buf + len, "\n"); - len = len + sprintf(buf + len," %s \n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state)); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.retryCount); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.spAssocId); - len = len + sprintf(buf + len, " %s \n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED"); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.flcInProg); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.flcLevel); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.sctpHBeatEnb); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.locOutStrms); + memcpy((U8 *)&rsp, &cfm, sizeof(MwMgmt)); - len = len + sprintf(buf + len, "\n"); + /* 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, "\n"); + len = len + sprintf(buf + len, " %s \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," %s \n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state)); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.retryCount); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.spAssocId); + len = len + sprintf(buf + len, " %s \n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED"); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.flcInProg); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.flcLevel); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.sctpHBeatEnb); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.locOutStrms); + + len = len + sprintf(buf + len, "\n"); + } } if(ftmod_m2ua_ssta_req(STMWSCTSAP,x,&cfm)) { @@ -3180,8 +3205,10 @@ static ftdm_status_t handle_show_m2ua_profile(ftdm_stream_handle_t *stream, char int found = 0x00; int len = 0x00; MwMgmt cfm; + MwMgmt rsp; memset((U8 *)&cfm, 0, sizeof(MwMgmt)); + memset((U8 *)&rsp, 0, sizeof(MwMgmt)); memset(&buf[0], 0, sizeof(buf)); len = len + sprintf(buf + len, "%s\n", xmlhdr); @@ -3240,21 +3267,30 @@ static ftdm_status_t handle_show_m2ua_profile(ftdm_stream_handle_t *stream, char len = len + sprintf(buf + len, "\n"); } - if(ftmod_m2ua_ssta_req(STMWPEER,x,&cfm)) { - stream->write_function(stream," Request to Trillium SCTP layer failed \n"); - return FTDM_FAIL; - } else { - len = len + sprintf(buf + len, "\n"); - len = len + sprintf(buf + len," %s \n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state)); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.retryCount); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.spAssocId); - len = len + sprintf(buf + len, " %s \n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED"); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.flcInProg); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.flcLevel); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.sctpHBeatEnb); - len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.locOutStrms); + memcpy((U8 *)&rsp, &cfm, sizeof(MwMgmt)); - len = len + sprintf(buf + len, "\n"); + /* 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, "\n"); + len = len + sprintf(buf + len, " %s \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," %s \n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state)); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.retryCount); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.spAssocId); + len = len + sprintf(buf + len, " %s \n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED"); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.flcInProg); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.flcLevel); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.sctpHBeatEnb); + len = len + sprintf(buf + len, " %d \n",cfm.t.ssta.s.peerSta.assocSta.locOutStrms); + + len = len + sprintf(buf + len, "\n"); + } } if(ftmod_m2ua_ssta_req(STMWSCTSAP,x,&cfm)) { @@ -3706,8 +3742,15 @@ static ftdm_status_t handle_show_m2ua_peer_status(ftdm_stream_handle_t *stream, int found = 0x00; int len = 0x00; MwMgmt cfm; + SbMgmt sctp_cfm; + sng_m2ua_cluster_cfg_t* clust = NULL; + sng_m2ua_cfg_t* m2ua = NULL; + sng_m2ua_peer_cfg_t* peer = NULL; + int peer_id = 0; + int sctp_id = 0; memset((U8 *)&cfm, 0, sizeof(MwMgmt)); + memset((U8 *)&sctp_cfm, 0, sizeof(SbMgmt)); memset(&buf[0], 0, sizeof(buf)); len = len + sprintf(buf + len, "%s\n", xmlhdr); @@ -3731,14 +3774,41 @@ static ftdm_status_t handle_show_m2ua_peer_status(ftdm_stream_handle_t *stream, return FTDM_FAIL; } - if(ftmod_m2ua_ssta_req(STMWPEER,x,&cfm)) { - stream->write_function(stream," Request to Trillium M2UA layer failed \n"); - return FTDM_FAIL; - } else { - len = len + sprintf(buf + len, "\n"); - len = len + sprintf(buf + len," %s \n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state)); - len = len + sprintf(buf + len, " %s \n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED"); - len = len + sprintf(buf + len, "\n"); + m2ua = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[x]; + clust = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_clus[m2ua->clusterId]; + + for(x = 0; x < clust->numOfPeers;x++){ + peer_id = clust->peerIdLst[x]; + peer = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[peer_id]; + + if(ftmod_m2ua_ssta_req(STMWPEER, peer_id, &cfm)) { + stream->write_function(stream," Request to Trillium M2UA layer failed \n"); + return FTDM_FAIL; + } else { + len = len + sprintf(buf + len, "\n"); + len = len + sprintf(buf + len, " %s \n",peer->name); + len = len + sprintf(buf + len," %s \n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state)); + /*len = len + sprintf(buf + len, " %s \n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED");*/ + len = len + sprintf(buf + len, "\n"); + } + + sctp_id = peer->sctpId; + + if(ftmod_sctp_ssta_req(STSBASSOC, sctp_id, &sctp_cfm)) { + if(LMW_PEER_DOWN == cfm.t.ssta.s.peerSta.state){ + /* If there is no association established so far, it will return fail..*/ + len = len + sprintf(buf + len, "\n"); + len = len + sprintf(buf + len, " SCT_ASSOC_STATE_CLOSED \n"); + len = len + sprintf(buf + len, "\n"); + }else{ + stream->write_function(stream," Request to Trillium SCTP layer failed \n"); + return FTDM_FAIL; + } + } else { + len = len + sprintf(buf + len, "\n"); + len = len + sprintf(buf + len, " %s \n", PRNT_SCTP_ASSOC_STATE(sctp_cfm.t.ssta.s.assocSta.assocState)); + len = len + sprintf(buf + len, "\n"); + } } stream->write_function(stream,"\n%s\n",buf); diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c index 922200629f..e9b370a151 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c @@ -870,6 +870,11 @@ void handle_sng_m2ua_alarm(Pst *pst, MwMgmt *sta) /* To print the event specific information */ switch(sta->t.usta.alarm.event) { + case LMW_EVENT_TERM_OK: + { + ftdm_log(FTDM_LOG_INFO," M2UA : LMW_EVENT_TERM_OK: Association Terminated with PeerId[%d] \n",sta->t.usta.s.peerId); + break; + } case LMW_EVENT_ENDPOPEN_OK: { ftdm_log(FTDM_LOG_INFO," M2UA : LMW_EVENT_ENDPOPEN_OK: \n"); 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 c1566d7758..0639165e97 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 @@ -791,13 +791,13 @@ static int ftmod_m2ua_peer_config(int id) ftdm_log (FTDM_LOG_ERROR, " ftmod_m2ua_sctsap_config: M2UA SCTSAP for M2UA Intf Id[%d] config FAILED \n", id); return 0x01; }else{ - ftdm_log (FTDM_LOG_ERROR, " ftmod_m2ua_sctsap_config: M2UA SCTSAP for M2UA Intf Id[%d] config SUCCESS \n", id); + ftdm_log (FTDM_LOG_INFO, " ftmod_m2ua_sctsap_config: M2UA SCTSAP for M2UA Intf Id[%d] config SUCCESS \n", id); } if(ftmod_m2ua_peer_config1(id, peer_id)){ ftdm_log (FTDM_LOG_ERROR, " ftmod_m2ua_peer_config1: M2UA Peer configuration for M2UA Intf Id[%d] config FAILED \n", id); return 0x01; }else{ - ftdm_log (FTDM_LOG_ERROR, " ftmod_m2ua_peer_config1: M2UA Peer configuration for M2UA Intf Id[%d] config SUCCESS \n", id); + ftdm_log (FTDM_LOG_INFO, " ftmod_m2ua_peer_config1: M2UA Peer configuration for M2UA Intf Id[%d] config SUCCESS \n", id); } @@ -1639,10 +1639,9 @@ int ftmod_m2ua_ssta_req(int elemt, int id, MwMgmt* cfm) { MwMgmt ssta; Pst pst; - int peerId = 0x01; - 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]; - sng_m2ua_peer_cfg_t* peer = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[peerId]; /*TODO - KAPIL - need to add proper peerId*/ + 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)); @@ -1668,6 +1667,7 @@ int ftmod_m2ua_ssta_req(int elemt, int id, MwMgmt* cfm) { case STMWSCTSAP: { + m2ua = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua[id]; ssta.t.ssta.id.suId = m2ua->id ; /* lower sap Id */ break; } @@ -1678,11 +1678,13 @@ 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 */ break; } case STMWCLUSTER: { + clust = &g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_clus[id]; ssta.t.ssta.id.clusterId = clust->id ; /* cluster Id */ break; } 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 d87b9d6c04..2b44426102 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 @@ -71,8 +71,8 @@ typedef struct sng_m2ua_peer_cfg{ uint16_t selfAspId; /* Self ASP ID. ASP identifier for this ASP node if the aspIdFlag is TRUE. */ uint32_t numDestAddr; /* Number of destination address defined */ uint16_t sctpId; /* idx to sctp profile */ - uint16_t port; /* port */ - uint32_t destAddrList[SCT_MAX_NET_ADDRS+1]; /* Destination adddress list */ + uint16_t port; + uint32_t destAddrList[SCT_MAX_NET_ADDRS+1]; /* Destination adddress list */ uint16_t locOutStrms; /*Number of outgoing streams supported by this association*/ int init_sctp_assoc; /* flag to tell if we need to initiate SCTP association */ }sng_m2ua_peer_cfg_t; 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 be8cbe4a85..46f7fd7d19 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 @@ -38,6 +38,7 @@ /* INCLUDE ********************************************************************/ #include "ftmod_sangoma_ss7_main.h" +#include "switch_utils.h" /******************************************************************************/ /* DEFINES ********************************************************************/ @@ -123,16 +124,16 @@ static int ftmod_ss7_parse_nif_interface(ftdm_conf_node_t *nif_interface) sng_nif.id = atoi(parm->val); SS7_DEBUG("Found an nif id = %d\n", sng_nif.id); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "m2ua_link_nmb")) { + } else if (!strcasecmp(parm->var, "m2ua-interface-id")) { /**********************************************************************/ sng_nif.m2uaLnkNmb = atoi(parm->val); - SS7_DEBUG("Found an nif m2ua_link_nmb = %d\n", sng_nif.m2uaLnkNmb); + SS7_DEBUG("Found an nif m2ua-interface-id = %d\n", sng_nif.m2uaLnkNmb); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "mtp2_link_nmb")) { + } else if (!strcasecmp(parm->var, "mtp2-interface-id")) { /**********************************************************************/ sng_nif.mtp2LnkNmb=atoi(parm->val); - SS7_DEBUG("Found an nif mtp2_link_nmb = %d\n", sng_nif.mtp2LnkNmb); + SS7_DEBUG("Found an nif mtp2-interface-id = %d\n", sng_nif.mtp2LnkNmb); /**********************************************************************/ } else { /**********************************************************************/ @@ -239,21 +240,7 @@ static int ftmod_ss7_parse_m2ua_interface(ftdm_conf_node_t *m2ua_interface) sng_m2ua.id = atoi(parm->val); SS7_DEBUG("Found an m2ua id = %d\n", sng_m2ua.id); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "node_type")) { - /**********************************************************************/ - if(!strcasecmp(parm->val, "SGP")){ - sng_m2ua.nodeType = SNG_M2UA_NODE_TYPE_SGP; - } else if(!strcasecmp(parm->val, "ASP")){ - SS7_ERROR(" NodeType = ASP Not Supported Yet \n"); - return FTDM_FAIL; - } else { - SS7_ERROR("Found an invalid NodeType Parameter Value[%s]\n", parm->val); - return FTDM_FAIL; - } - SS7_DEBUG("Found an nif node_type = %d\n", sng_m2ua.nodeType); - /**********************************************************************/ - /**********************************************************************/ - } else if (!strcasecmp(parm->var, "cluster_id")) { + } else if (!strcasecmp(parm->var, "m2ua-cluster-interface-id")) { /**********************************************************************/ sng_m2ua.clusterId=atoi(parm->val); @@ -271,6 +258,8 @@ static int ftmod_ss7_parse_m2ua_interface(ftdm_conf_node_t *m2ua_interface) /**************************************************************************/ } /* for (i = 0; i < num_parms; i++) */ + sng_m2ua.nodeType = SNG_M2UA_NODE_TYPE_SGP; + /* default the interface to paused state */ sngss7_set_flag(&sng_m2ua, SNGSS7_PAUSED); @@ -348,7 +337,6 @@ static int ftmod_ss7_parse_m2ua_peer_interface(ftdm_conf_node_t *m2ua_peer_inter SS7_DEBUG("Parsing \"m2ua_peer_interface\"...\n"); } - for (i = 0; i < num_parms; i++) { /**************************************************************************/ @@ -363,7 +351,7 @@ static int ftmod_ss7_parse_m2ua_peer_interface(ftdm_conf_node_t *m2ua_peer_inter sng_m2ua_peer.id = atoi(parm->val); SS7_DEBUG("Found an sng_m2ua_peer id = %d\n", sng_m2ua_peer.id); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "asp_id_flag")) { + } else if (!strcasecmp(parm->var, "include-asp-identifier")) { /**********************************************************************/ if(!strcasecmp(parm->val, "TRUE")){ sng_m2ua_peer.aspIdFlag = 0x01; @@ -375,41 +363,41 @@ static int ftmod_ss7_parse_m2ua_peer_interface(ftdm_conf_node_t *m2ua_peer_inter } SS7_DEBUG("Found an sng_m2ua_peer aspIdFlag = %d\n", sng_m2ua_peer.aspIdFlag); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "self_asp_id")) { + } else if (!strcasecmp(parm->var, "asp-identifier")) { /**********************************************************************/ sng_m2ua_peer.selfAspId=atoi(parm->val); SS7_DEBUG("Found an sng_m2ua_peer self_asp_id = %d\n", sng_m2ua_peer.selfAspId); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "sctp_id")) { + } else if (!strcasecmp(parm->var, "sctp-interface-id")) { /**********************************************************************/ sng_m2ua_peer.sctpId = atoi(parm->val); SS7_DEBUG("Found an sng_m2ua_peer sctp_id = %d\n", sng_m2ua_peer.sctpId); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "dest_port")) { + } else if (!strcasecmp(parm->var, "destination-port")) { /**********************************************************************/ sng_m2ua_peer.port = atoi(parm->val); SS7_DEBUG("Found an sng_m2ua_peer port = %d\n", sng_m2ua_peer.port); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "dest_addr")) { + } else if (!strcasecmp(parm->var, "address")) { /**********************************************************************/ if (sng_m2ua_peer.numDestAddr < SCT_MAX_NET_ADDRS) { sng_m2ua_peer.destAddrList[sng_m2ua_peer.numDestAddr] = iptoul (parm->val); sng_m2ua_peer.numDestAddr++; - SS7_DEBUG("sng_m2ua_peer - Parsing with dest IP Address = %s\n", parm->val); + SS7_DEBUG("sng_m2ua_peer - Parsing with dest IP Address = %s \n", parm->val); } else { SS7_ERROR("sng_m2ua_peer - too many dest address configured. dropping %s \n", parm->val); } /**********************************************************************/ - } else if (!strcasecmp(parm->var, "loc_out_strms")) { + } else if (!strcasecmp(parm->var, "number-of-outgoing-streams")) { /**********************************************************************/ sng_m2ua_peer.locOutStrms=atoi(parm->val); - SS7_DEBUG("Found an sng_m2ua_peer loc_out_strms = %d\n", sng_m2ua_peer.locOutStrms); + SS7_DEBUG("Found an sng_m2ua_peer number-of-outgoing-streams = %d\n", sng_m2ua_peer.locOutStrms); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "init_sctp_assoc")) { + } else if (!strcasecmp(parm->var, "init-sctp-association")) { /**********************************************************************/ if(!strcasecmp(parm->val, "TRUE")){ sng_m2ua_peer.init_sctp_assoc = 0x01; @@ -535,7 +523,7 @@ static int ftmod_ss7_parse_m2ua_clust_interface(ftdm_conf_node_t *m2ua_cluster_i sng_m2ua_cluster.id = atoi(parm->val); SS7_DEBUG("Found an sng_m2ua_cluster id = %d\n", sng_m2ua_cluster.id); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "trf_mode")) { + } else if (!strcasecmp(parm->var, "traffic-mode")) { /**********************************************************************/ if(!strcasecmp(parm->val, "loadshare")){ sng_m2ua_cluster.trfMode = SNG_M2UA_TRF_MODE_LOADSHARE; @@ -549,7 +537,7 @@ static int ftmod_ss7_parse_m2ua_clust_interface(ftdm_conf_node_t *m2ua_cluster_i } SS7_DEBUG("Found an sng_m2ua_cluster.trfMode = %d\n", sng_m2ua_cluster.trfMode); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "load_share_algo")) { + } else if (!strcasecmp(parm->var, "load-share-algorithm")) { /**********************************************************************/ if(!strcasecmp(parm->val, "roundrobin")){ sng_m2ua_cluster.loadShareAlgo = SNG_M2UA_LOAD_SHARE_ALGO_RR; @@ -564,14 +552,14 @@ static int ftmod_ss7_parse_m2ua_clust_interface(ftdm_conf_node_t *m2ua_cluster_i SS7_DEBUG("Found an sng_m2ua_cluster.loadShareAlgo = %d\n", sng_m2ua_cluster.loadShareAlgo); /**********************************************************************/ - } else if (!strcasecmp(parm->var, "peer_id")) { + } else if (!strcasecmp(parm->var, "m2ua-peer-interface-id")) { /**********************************************************************/ if(sng_m2ua_cluster.numOfPeers < MW_MAX_NUM_OF_PEER) { sng_m2ua_cluster.peerIdLst[sng_m2ua_cluster.numOfPeers] = atoi(parm->val); - sng_m2ua_cluster.numOfPeers++; SS7_DEBUG("Found an sng_m2ua_cluster peerId[%d], Total numOfPeers[%d] \n", sng_m2ua_cluster.peerIdLst[sng_m2ua_cluster.numOfPeers], - sng_m2ua_cluster.numOfPeers); + sng_m2ua_cluster.numOfPeers+1); + sng_m2ua_cluster.numOfPeers++; }else{ SS7_ERROR("Peer List excedding max[%d] limit \n", MW_MAX_NUM_OF_PEER); return FTDM_FAIL; @@ -603,7 +591,7 @@ static int ftmod_ss7_fill_in_m2ua_clust_interface(sng_m2ua_cluster_cfg_t *m2ua_c int k = 0x00; int i = m2ua_cluster_iface->id; - strncpy((char *)g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_peer[i].name, (char *)m2ua_cluster_iface->name, MAX_NAME_LEN-1); + strncpy((char *)g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_clus[i].name, (char *)m2ua_cluster_iface->name, MAX_NAME_LEN-1); g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_clus[i].id = m2ua_cluster_iface->id; g_ftdm_sngss7_data.cfg.g_m2ua_cfg.m2ua_clus[i].trfMode = m2ua_cluster_iface->trfMode; @@ -676,7 +664,7 @@ static int ftmod_ss7_parse_sctp_link(ftdm_conf_node_t *node) t_link.id = atoi(param->val); SS7_DEBUG("SCTP - Parsing with id = %s\n", param->val); } - else if (!strcasecmp(param->var, "src_addr")) { + else if (!strcasecmp(param->var, "src-addr")) { if (t_link.numSrcAddr < SCT_MAX_NET_ADDRS) { t_link.srcAddrList[t_link.numSrcAddr+1] = iptoul (param->val); t_link.numSrcAddr++; @@ -684,7 +672,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, "src-port")) { t_link.port = atoi(param->val); SS7_DEBUG("SCTP - Parsing with port = %s\n", param->val); } diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c index 4b51bfc0e7..4136423257 100644 --- a/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c +++ b/libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c @@ -223,7 +223,6 @@ int ftmod_ss7_parse_xml(ftdm_conf_parameter_t *ftdm_parameters, ftdm_span_t *spa var = ftdm_parameters[i].var; val = ftdm_parameters[i].val; - printf("var[%s], val[%s]\n",var,val); /* confirm that the first parameter is the "operatingMode" */ if(!strcasecmp(var, "operatingMode")){ /**********************************************************************/ @@ -275,7 +274,7 @@ int ftmod_ss7_parse_xml(ftdm_conf_parameter_t *ftdm_parameters, ftdm_span_t *spa /**********************************************************************/ /* don't care for now */ /**********************************************************************/ - } else if (!strcasecmp(var, "ccSpanId")) { + } else if (!strcasecmp(var, "span-id")) { /**********************************************************************/ sngSpan.ccSpanId = atoi(val); SS7_DEBUG("Found an ccSpanId = %d\n",sngSpan.ccSpanId); @@ -543,16 +542,6 @@ static int ftmod_ss7_parse_sng_isup(ftdm_conf_node_t *sng_isup) } case SNG_SS7_OPR_MODE_M2UA_SG: { - if (ftmod_ss7_parse_mtp_linksets(mtp_linksets)) { - SS7_ERROR("Failed to parse \"mtp_linksets\"!\n"); - return FTDM_FAIL; - } - - if (ftmod_ss7_parse_mtp_routes(mtp_routes)) { - SS7_ERROR("Failed to parse \"mtp_routes\"!\n"); - return FTDM_FAIL; - } - if (ftmod_ss7_parse_sctp_links(sctp_ifaces) != FTDM_SUCCESS) { SS7_ERROR("Failed to parse !\n"); return FTDM_FAIL;