Index: channels/sig_pri.h =================================================================== --- channels/sig_pri.h (revision 207953) +++ channels/sig_pri.h (working copy) @@ -139,7 +139,6 @@ /* Internal variables -- Don't touch */ /* Probably will need DS0 number, DS1 number, and a few other things */ char dialdest[256]; /* Queued up digits for overlap dialing. They will be sent out as information messages when setup ACK is received */ - int mastertrunkgroup; unsigned int alerting:1; /*!< TRUE if channel is alerting/ringing */ unsigned int alreadyhungup:1; /*!< TRUE if the call has already gone/hungup */ @@ -159,6 +158,7 @@ int prioffset; /*!< channel number in span */ int logicalspan; /*!< logical span number within trunk group */ + int mastertrunkgroup; struct sig_pri_callback *calls; void *chan_pvt; @@ -245,7 +245,7 @@ struct ast_channel *sig_pri_request(struct sig_pri_chan *p, enum sig_pri_law law, const struct ast_channel *requestor); -struct sig_pri_chan *sig_pri_chan_new(void *pvt_data, struct sig_pri_callback *callback, struct sig_pri_pri *pri, int logicalspan, int channo); +struct sig_pri_chan *sig_pri_chan_new(void *pvt_data, struct sig_pri_callback *callback, struct sig_pri_pri *pri, int logicalspan, int channo, int trunkgroup); int pri_is_up(struct sig_pri_pri *pri); Index: channels/chan_dahdi.c =================================================================== --- channels/chan_dahdi.c (revision 207953) +++ channels/chan_dahdi.c (working copy) @@ -10658,7 +10658,7 @@ } ast_debug(4, "Adding callbacks %p to chan %d\n", &dahdi_pri_callbacks, tmp->channel); - pchan = sig_pri_chan_new(tmp, &dahdi_pri_callbacks, &pris[span].pri, tmp->logicalspan, p.chanpos); + pchan = sig_pri_chan_new(tmp, &dahdi_pri_callbacks, &pris[span].pri, tmp->logicalspan, p.chanpos, pris[span].mastertrunkgroup); if (!pchan) { destroy_dahdi_pvt(&tmp); return NULL; Index: channels/sig_pri.c =================================================================== --- channels/sig_pri.c (revision 207953) +++ channels/sig_pri.c (working copy) @@ -78,14 +78,11 @@ static unsigned int PVT_TO_CHANNEL(struct sig_pri_chan *p) { - int explicit; + ast_debug(5, "prioffset: %d mastertrunkgroup: %d p->logicalspan = %d, result %d\n", + p->prioffset, p->mastertrunkgroup, p->logicalspan, + (((p)->prioffset) | ((p)->logicalspan << 8) | (p->mastertrunkgroup ? 0x10000 : 0))); - if (p->pri->dchan_logical_span[pri_active_dchan_index(p->pri)] == p->logicalspan) - explicit = 1; - else - explicit = 0; - - return (((p)->prioffset) | ((p)->logicalspan << 8) | (explicit ? 0x10000 : 0)); + return (((p)->prioffset) | ((p)->logicalspan << 8) | (p->mastertrunkgroup ? 0x10000 : 0)); } static void sig_pri_handle_dchan_exception(struct sig_pri_pri *pri, int index) @@ -202,14 +199,15 @@ /* Returns index of the active dchan */ static int pri_active_dchan_index(struct sig_pri_pri *pri) { - int x = -1; + int x; for (x = 0; x < NUM_DCHANS; x++) { if ((pri->dchans[x] == pri->pri)) - break; + return x; } - return x; + ast_log(LOG_WARNING, "No active dchan found!\n"); + return -1; } static int pri_find_dchan(struct sig_pri_pri *pri) @@ -2330,7 +2328,7 @@ } } -struct sig_pri_chan *sig_pri_chan_new(void *pvt_data, struct sig_pri_callback *callback, struct sig_pri_pri *pri, int logicalspan, int channo) +struct sig_pri_chan *sig_pri_chan_new(void *pvt_data, struct sig_pri_callback *callback, struct sig_pri_pri *pri, int logicalspan, int channo, int trunkgroup) { struct sig_pri_chan *p; @@ -2341,6 +2339,7 @@ p->logicalspan = logicalspan; p->prioffset = channo; + p->mastertrunkgroup = trunkgroup; p->calls = callback; p->chan_pvt = pvt_data;