]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
adding code based on modified xml and cli code changes (rename the m2ua cli command to
authorkapil <kgupta@sangoma.com>
Tue, 12 Jun 2012 13:13:01 +0000 (18:43 +0530)
committerkapil <kgupta@sangoma.com>
Tue, 12 Jun 2012 13:13:01 +0000 (18:43 +0530)
"xmlshow" and adding cli code to show sctp state also in m2ua peerstatus command)

libs/freetdm/mod_freetdm/mod_freetdm.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cli.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_logger.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua.h
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_m2ua_xml.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c

index 9896e932aa73430845bea9e77fc7849d5f55fd28..6751175cb5e4d0edd09ef30d9ca0af6fbfd02ef7 100755 (executable)
@@ -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.
+ * <list_name>
+ *   <list_element_name>
+ *    <param name="xxx" value="xxx"/>
+ *    <sub-list>
+ *     <param name="xxx" value="xxx"/>
+ *    </sub-list>
+ *   </list_element_name>
+ * </list_name>   
+ * */
+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;
index bec6e020ac0ce8fa699bb8cd7666735621a6aa1a..6fece294ccd6b05a72101a8649906f8b3c57592f 100644 (file)
@@ -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 <profile-name> */
-                               {
-                                       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);
+                                       {
+                                               c++;
+                                               handle_show_m2ua_profile(stream, argv[c]);
+                                               break;
                                        }
-                                       else{
-                                               stream->write_function(stream, "Unknown \"show m2ua \" command..\n");
-                                               goto handle_cli_error_argc;
+                               case 4:
+                                       {
+                                               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;
                                        }
-                                       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 <sctp_interface_name>\n");
-       stream->write_function(stream, "ftdm ss7 show m2ua \n");
-       stream->write_function(stream, "ftdm ss7 show m2ua <m2ua_interface_name>\n");
-       stream->write_function(stream, "ftdm ss7 show m2ua <m2ua_interface_name> peerstatus\n");
-       stream->write_function(stream, "ftdm ss7 show nif \n");
-       stream->write_function(stream, "ftdm ss7 show nif <nif_interface_name>\n");
+       stream->write_function(stream, "ftdm ss7 xmlshow sctp \n");
+       stream->write_function(stream, "ftdm ss7 xmlshow sctp <sctp_interface_name>\n");
+       stream->write_function(stream, "ftdm ss7 xmlshow m2ua \n");
+       stream->write_function(stream, "ftdm ss7 xmlshow m2ua <m2ua_interface_name>\n");
+       stream->write_function(stream, "ftdm ss7 xmlshow m2ua <m2ua_interface_name> peerstatus\n");
+       stream->write_function(stream, "ftdm ss7 xmlshow nif \n");
+       stream->write_function(stream, "ftdm ss7 xmlshow nif <nif_interface_name>\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, "</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 {
@@ -3122,21 +3138,30 @@ static ftdm_status_t handle_show_m2ua_profiles(ftdm_stream_handle_t *stream)
                                 len = len + sprintf(buf + len, "</m2ua_cluster>\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, "<m2ua_peer>\n");
-                                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");
+                        memcpy((U8 *)&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> %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");
+                                }
                         }
 
                         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, "</m2ua_cluster>\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, "<m2ua_peer>\n");
-               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);
+       memcpy((U8 *)&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));
 
-               len = len + sprintf(buf + len, "</m2ua_peer>\n");
+               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> %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");
+               }
        }
 
        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, "<m2ua_peer>\n");
-               len = len + sprintf(buf + len," <state> %s </state>\n", PRNT_M2UA_PEER_STATE(cfm.t.ssta.s.peerSta.state));
-               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, "</m2ua_peer>\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, "<m2ua_peer>\n");
+                       len = len + sprintf(buf + len, "<name> %s </name>\n",peer->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, " <connected_status> %s </connected_status>\n",(cfm.t.ssta.s.peerSta.assocSta.connected)?"CONNECTED":"NOT CONNECTED");*/
+                       len = len + sprintf(buf + len, "</m2ua_peer>\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, "<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 + sprintf(buf + len, " <status> %s </status>\n", PRNT_SCTP_ASSOC_STATE(sctp_cfm.t.ssta.s.assocSta.assocState));
+                       len = len + sprintf(buf + len, "</sctp_association>\n");
+               }
        }
 
        stream->write_function(stream,"\n%s\n",buf); 
index 922200629fe424210080481d65e136093ab74677..e9b370a1516effc72ceffd4f83a280807ba2420f 100644 (file)
@@ -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");
index c1566d77586c1d06136a75c8af1f5f790d6f2444..0639165e978d8d263c32c92bcdd2fdfd377724c8 100644 (file)
@@ -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;
                 }
index d87b9d6c0477249f7f94537d6b4399d91df893de..2b44426102471d640da5833cde94c7fca2fdba7f 100644 (file)
@@ -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;
index be8cbe4a8518bf3463e9ba09cda62740b8b1e522..46f7fd7d19a7e210147965b73c17fd07f4143afd 100644 (file)
@@ -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 <sng_sctp_interface> 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 <sng_sctp_interface> with port = %s\n", param->val);
                }
index 4b51bfc0e72bb5f992430b16afdd531d0e8afe28..41364232571524e405cb93f17afecc59e68a0d76 100644 (file)
@@ -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 <sctp_links>!\n");
                                        return FTDM_FAIL;