]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
freetdm: ss7 - update to configuration
authorKonrad Hammel <konrad@sangoma.com>
Fri, 10 Sep 2010 00:55:38 +0000 (20:55 -0400)
committerKonrad Hammel <konrad@sangoma.com>
Fri, 10 Sep 2010 00:55:38 +0000 (20:55 -0400)
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_cfg.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.c
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_main.h
libs/freetdm/src/ftmod/ftmod_sangoma_ss7/ftmod_sangoma_ss7_xml.c

index 93bd3154b3fea88d9babc373456736c526d39a26..9c9947dfa44470ca1f376e94af7f22f7be617a0c 100644 (file)
@@ -925,6 +925,7 @@ int ftmod_ss7_mtp3_linkset_config(int id)
 {
        Pst                             pst;
        SnMngmt                 cfg;
+       int                             c;
        sng_link_set_t  *k = &g_ftdm_sngss7_data.cfg.mtpLinkSet[id];
 
        /* initalize the post structure */
@@ -951,9 +952,11 @@ int ftmod_ss7_mtp3_linkset_config(int id)
        cfg.t.cfg.s.snLnkSet.lnkSetType         = k->linkType;          /* link type */
        cfg.t.cfg.s.snLnkSet.adjDpc                     = k->apc;                       /* adjacent DPC */
        cfg.t.cfg.s.snLnkSet.nmbActLnkReqd      = k->minActive;         /* minimum number of active links */
-       cfg.t.cfg.s.snLnkSet.nmbCmbLnkSet       = 1;                            /* number of combined link sets */
-       cfg.t.cfg.s.snLnkSet.cmbLnkSet[0].cmbLnkSetId = k->cmbLinkSetId;
-       cfg.t.cfg.s.snLnkSet.cmbLnkSet[0].lnkSetPrior = 0;
+       cfg.t.cfg.s.snLnkSet.nmbCmbLnkSet       = k->numLinks;                          /* number of combined link sets */
+       for(c = 0; c < k->numLinks;c++) {
+               cfg.t.cfg.s.snLnkSet.cmbLnkSet[c].cmbLnkSetId = k->links[c];
+               cfg.t.cfg.s.snLnkSet.cmbLnkSet[c].lnkSetPrior = 0;
+       }
 
 
        return(sng_cfg_mtp3(&pst, &cfg));
index 9986b29b2ca0a25d158b9d54c7e793d0d0bc4034..a47656f70e4ab22c1b0c380c4e44ec69b991d54b 100644 (file)
@@ -1390,6 +1390,8 @@ static FIO_SIG_LOAD_FUNCTION(ftdm_sangoma_ss7_init)
 
        sngss7_id = 0;
 
+       cmbLinkSetId = 1;
+
        /* initalize the global gen_config flag */
        g_ftdm_sngss7_data.gen_config = 0;
 
index f76a56099f258221aa2ec5bb82113c51af92c34c..555c0d97a01aaa0671b8861227c447526dfc2164 100644 (file)
@@ -162,7 +162,8 @@ typedef struct sng_link_set {
        uint32_t                flags;
        uint32_t                apc;
        uint32_t                linkType;
-       uint32_t                cmbLinkSetId;
+       uint32_t                switchType;
+       uint32_t                ssf;
        uint32_t                minActive;
        uint32_t                numLinks;
        uint32_t                links[16];
@@ -174,6 +175,7 @@ typedef struct sng_route {
        uint32_t                flags;
        uint32_t                dpc;
        uint32_t                cmbLinkSetId;
+       uint32_t                linkSetId;
        uint32_t                linkType;
        uint32_t                switchType;
        uint32_t                ssf;
@@ -421,6 +423,7 @@ typedef enum {
 extern ftdm_sngss7_data_t   g_ftdm_sngss7_data;
 extern uint32_t                         sngss7_id;
 extern ftdm_sched_t             *sngss7_sched;
+extern int                             cmbLinkSetId;
 /******************************************************************************/
 
 /* PROTOTYPES *****************************************************************/
index 66907e78bacc2e59f51971dd8e98740787dbe139..4c1832d8125f4399eefe09da64723ed0b981bc93 100644 (file)
@@ -46,6 +46,8 @@ typedef struct sng_timeslot
        int      gap;
        int      hole;
 }sng_timeslot_t;
+
+int cmbLinkSetId;
 /******************************************************************************/
 
 /* PROTOTYPES *****************************************************************/
@@ -385,8 +387,6 @@ static int ftmod_ss7_parse_mtp_linkset(ftdm_conf_node_t *mtp_linkset)
        if (count < 1 || count > 15 ) {
                SS7_ERROR("Invalid number of mtp_links found (%d)\n", count);
                return FTDM_FAIL;
-       } else {
-               mtpLinkSet.numLinks = count;
        }
 
        /* now we need to see if this linkset exists already or not and grab an Id */
@@ -418,8 +418,7 @@ static int ftmod_ss7_parse_mtp_linkset(ftdm_conf_node_t *mtp_linkset)
                mtpLink[i].mtp3.apc                     = mtpLinkSet.apc;
                mtpLink[i].mtp3.linkSetId       = mtpLinkSet.id;
 
-               /* fill in the mtplink structure */
-               mtpLinkSet.links[count] = ftmod_ss7_fill_in_mtpLink(&mtpLink[i]);
+               ftmod_ss7_fill_in_mtpLink(&mtpLink[i]);
 
                /* increment the links counter */
                count++;
@@ -428,6 +427,10 @@ static int ftmod_ss7_parse_mtp_linkset(ftdm_conf_node_t *mtp_linkset)
                i++;
        }
 
+       mtpLinkSet.linkType             = mtpLink[0].mtp3.linkType;
+       mtpLinkSet.switchType   = mtpLink[0].mtp3.switchType;
+       mtpLinkSet.ssf                  = mtpLink[0].mtp3.ssf;
+
        ftmod_ss7_fill_in_mtpLinkSet(&mtpLinkSet);
 
        return FTDM_SUCCESS;
@@ -658,14 +661,17 @@ static int ftmod_ss7_parse_mtp_route(ftdm_conf_node_t *mtp_route)
                                /* check if the name matches */
                                if (!strcasecmp((char *)g_ftdm_sngss7_data.cfg.mtpLinkSet[x].name, parm->val)) {
 
-                                       /* grab the mtpLink id value first*/
-                                       int id = g_ftdm_sngss7_data.cfg.mtpLinkSet[x].links[0];
-
                                        /* now, harvest the required infomormation from the global structure */
-                                       mtpRoute.linkType               = g_ftdm_sngss7_data.cfg.mtpLink[id].mtp3.linkType;
-                                       mtpRoute.switchType             = g_ftdm_sngss7_data.cfg.mtpLink[id].mtp3.switchType;
-                                       mtpRoute.ssf                    = g_ftdm_sngss7_data.cfg.mtpLink[id].mtp3.ssf;
-                                       mtpRoute.cmbLinkSetId   = g_ftdm_sngss7_data.cfg.mtpLinkSet[x].cmbLinkSetId;
+                                       mtpRoute.linkType               = g_ftdm_sngss7_data.cfg.mtpLinkSet[x].linkType;
+                                       mtpRoute.switchType             = g_ftdm_sngss7_data.cfg.mtpLinkSet[x].switchType;
+                                       mtpRoute.ssf                    = g_ftdm_sngss7_data.cfg.mtpLinkSet[x].ssf;
+                                       mtpRoute.linkSetId              = g_ftdm_sngss7_data.cfg.mtpLinkSet[x].id;
+                                       cmbLinkSetId++;
+                                       mtpRoute.cmbLinkSetId   = cmbLinkSetId;
+
+                                       /* update the linkset with the new cmbLinkSet value */
+                                       g_ftdm_sngss7_data.cfg.mtpLinkSet[x].numLinks++;
+                                       g_ftdm_sngss7_data.cfg.mtpLinkSet[x].links[g_ftdm_sngss7_data.cfg.mtpLinkSet[x].numLinks-1] = mtpRoute.cmbLinkSetId;
                                        break;
                                }
                                x++;
@@ -701,9 +707,11 @@ static int ftmod_ss7_parse_mtp_route(ftdm_conf_node_t *mtp_route)
                parm = parm + 1;
        }
 
+       ftmod_ss7_fill_in_nsap(&mtpRoute);
+
        ftmod_ss7_fill_in_mtp3_route(&mtpRoute);
 
-       ftmod_ss7_fill_in_nsap(&mtpRoute);
+
 
        return FTDM_SUCCESS;
 }
@@ -747,7 +755,6 @@ static int ftmod_ss7_parse_isup_interface(ftdm_conf_node_t *isup_interface)
        int                                             num_parms = isup_interface->n_parameters;
        int                                             i;
        int                                             linkSetId;
-       int                                             linkId;
 
        memset(&sng_isup, 0x0, sizeof(sng_isup));
        memset(&sng_isap, 0x0, sizeof(sng_isap));
@@ -844,10 +851,15 @@ static int ftmod_ss7_parse_isup_interface(ftdm_conf_node_t *isup_interface)
        }
 
        /* trickle down the SPC to all sub entities */
-       linkSetId = g_ftdm_sngss7_data.cfg.mtpRoute[sng_isup.mtpRouteId].cmbLinkSetId;
-       for (i = 0; i < g_ftdm_sngss7_data.cfg.mtpLinkSet[linkSetId].numLinks; i ++) {
-               linkId = g_ftdm_sngss7_data.cfg.mtpLinkSet[linkSetId].links[i];
-               g_ftdm_sngss7_data.cfg.mtpLink[linkId].mtp3.spc = g_ftdm_sngss7_data.cfg.spc;
+       linkSetId = g_ftdm_sngss7_data.cfg.mtpRoute[sng_isup.mtpRouteId].linkSetId;
+
+       i = 1;
+       while (g_ftdm_sngss7_data.cfg.mtpLink[i].id != 0) {
+               if (g_ftdm_sngss7_data.cfg.mtpLink[i].mtp3.linkSetId == linkSetId) {
+                       g_ftdm_sngss7_data.cfg.mtpLink[i].mtp3.spc = g_ftdm_sngss7_data.cfg.spc;
+               }
+
+               i++;
        }
 
        ftmod_ss7_fill_in_isap(&sng_isap);
@@ -1053,22 +1065,19 @@ static int ftmod_ss7_fill_in_mtpLink(sng_mtp_link_t *mtpLink)
 /******************************************************************************/
 static int ftmod_ss7_fill_in_mtpLinkSet(sng_link_set_t *mtpLinkSet)
 {
-       int     count;
        int     i = mtpLinkSet->id;
 
        strcpy((char *)g_ftdm_sngss7_data.cfg.mtpLinkSet[i].name, (char *)mtpLinkSet->name);
 
        g_ftdm_sngss7_data.cfg.mtpLinkSet[i].id                 = mtpLinkSet->id;
        g_ftdm_sngss7_data.cfg.mtpLinkSet[i].apc                = mtpLinkSet->apc;
-       g_ftdm_sngss7_data.cfg.mtpLinkSet[i].linkType   = g_ftdm_sngss7_data.cfg.mtpLink[1].mtp3.linkType; /* KONRAD FIX ME */
-       g_ftdm_sngss7_data.cfg.mtpLinkSet[i].cmbLinkSetId = mtpLinkSet->id;
-       g_ftdm_sngss7_data.cfg.mtpLinkSet[i].minActive  = mtpLinkSet->minActive;
-       g_ftdm_sngss7_data.cfg.mtpLinkSet[i].numLinks   = mtpLinkSet->numLinks;
-
-       for (count = 0; count < mtpLinkSet->numLinks; count++) {
-               g_ftdm_sngss7_data.cfg.mtpLinkSet[i].links[count]       = mtpLinkSet->links[count];
-       }
+       g_ftdm_sngss7_data.cfg.mtpLinkSet[i].linkType   = mtpLinkSet->linkType;
+       g_ftdm_sngss7_data.cfg.mtpLinkSet[i].switchType = mtpLinkSet->switchType;
+       g_ftdm_sngss7_data.cfg.mtpLinkSet[i].ssf                = mtpLinkSet->ssf;
 
+       /* these values are filled in as we find routes and start allocating cmbLinkSetIds */
+       g_ftdm_sngss7_data.cfg.mtpLinkSet[i].minActive  = mtpLinkSet->minActive;
+       g_ftdm_sngss7_data.cfg.mtpLinkSet[i].numLinks   = 0;
        return 0;
 }
 
@@ -1104,6 +1113,8 @@ static int ftmod_ss7_fill_in_mtp3_route(sng_route_t *mtp3_route)
        g_ftdm_sngss7_data.cfg.mtpRoute[i].switchType   = mtp3_route->switchType;
        g_ftdm_sngss7_data.cfg.mtpRoute[i].cmbLinkSetId = mtp3_route->cmbLinkSetId;
        g_ftdm_sngss7_data.cfg.mtpRoute[i].isSTP                = mtp3_route->isSTP;
+       g_ftdm_sngss7_data.cfg.mtpRoute[i].nwId                 = mtp3_route->nwId;
+       g_ftdm_sngss7_data.cfg.mtpRoute[i].linkSetId    = mtp3_route->linkSetId;
        g_ftdm_sngss7_data.cfg.mtpRoute[i].ssf                  = mtp3_route->ssf;
        if (mtp3_route->t6 != 0) {
                g_ftdm_sngss7_data.cfg.mtpRoute[i].t6           = mtp3_route->t6;
@@ -1185,15 +1196,17 @@ static int ftmod_ss7_fill_in_nsap(sng_route_t *mtp3_route)
 
        if (g_ftdm_sngss7_data.cfg.nsap[i].id == 0) {
                g_ftdm_sngss7_data.cfg.nsap[i].id = i;
+                mtp3_route->nwId = i;
                SS7_DEBUG("found new mtp3_isup interface, id is = %d\n", g_ftdm_sngss7_data.cfg.nsap[i].id);
        } else {
                g_ftdm_sngss7_data.cfg.nsap[i].id = i;
+                mtp3_route->nwId = i;
                SS7_DEBUG("found existing mtp3_isup interface, id is = %d\n", g_ftdm_sngss7_data.cfg.nsap[i].id);
        }
        
        g_ftdm_sngss7_data.cfg.nsap[i].spId                     = g_ftdm_sngss7_data.cfg.nsap[i].id;
        g_ftdm_sngss7_data.cfg.nsap[i].suId                     = g_ftdm_sngss7_data.cfg.nsap[i].id;
-       g_ftdm_sngss7_data.cfg.nsap[i].nwId                     = g_ftdm_sngss7_data.cfg.nsap[i].id;
+       g_ftdm_sngss7_data.cfg.nsap[i].nwId                     = mtp3_route->nwId;
        g_ftdm_sngss7_data.cfg.nsap[i].linkType         = mtp3_route->linkType;
        g_ftdm_sngss7_data.cfg.nsap[i].switchType       = mtp3_route->switchType;
        g_ftdm_sngss7_data.cfg.nsap[i].ssf                      = mtp3_route->ssf;