[svn-commits] rmudgett: trunk r260435 - in /trunk/channels: chan_dahdi.c sig_pri.c sig_pri.h

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Apr 30 17:24:32 CDT 2010


Author: rmudgett
Date: Fri Apr 30 17:24:28 2010
New Revision: 260435

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=260435
Log:
Separate the uses of NUM_DCHANS and MAX_CHANNELS into PRI, SS7, and MFCR2 users.

Created
SIG_PRI_MAX_CHANNELS, SIG_PRI_NUM_DCHANS
SIG_SS7_MAX_CHANNELS, SIG_SS7_NUM_DCHANS
SIG_MFCR2_MAX_CHANNELS

Also fixed the declaration of pollers[] in mfcr2_monitor().  It was
dimensioned to the number of bytes in struct dahdi_mfcr2.pvts[] and not to
the same dimension of the struct dahdi_mfcr2.pvts[].

Modified:
    trunk/channels/chan_dahdi.c
    trunk/channels/sig_pri.c
    trunk/channels/sig_pri.h

Modified: trunk/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/chan_dahdi.c?view=diff&rev=260435&r1=260434&r2=260435
==============================================================================
--- trunk/channels/chan_dahdi.c (original)
+++ trunk/channels/chan_dahdi.c Fri Apr 30 17:24:28 2010
@@ -75,12 +75,14 @@
 
 #ifdef HAVE_SS7
 /* put this here until sig_ss7 comes along */
-#define NUM_DCHANS		4		/*!< No more than 4 d-channels */
-#define MAX_CHANNELS	672		/*!< No more than a DS3 per trunk group */
+#define SIG_SS7_NUM_DCHANS		4		/*!< No more than 4 d-channels */
+#define SIG_SS7_MAX_CHANNELS	672		/*!< No more than a DS3 per trunk group */
 #include <libss7.h>
 #endif
 
 #ifdef HAVE_OPENR2
+/* put this here until sig_mfcr2 comes along */
+#define SIG_MFCR2_MAX_CHANNELS	672		/*!< No more than a DS3 per trunk group */
 #include <openr2.h>
 #endif
 
@@ -528,9 +530,9 @@
 struct dahdi_ss7 {
 	pthread_t master;						/*!< Thread of master */
 	ast_mutex_t lock;
-	int fds[NUM_DCHANS];
+	int fds[SIG_SS7_NUM_DCHANS];
 	int numsigchans;
-	int linkstate[NUM_DCHANS];
+	int linkstate[SIG_SS7_NUM_DCHANS];
 	int numchans;
 	int type;
 	enum {
@@ -544,7 +546,7 @@
 	char subscriberprefix[20];					/*!< area access code + area code ('0'+area code for european dialplans) */
 	char unknownprefix[20];						/*!< for unknown dialplans */
 	struct ss7 *ss7;
-	struct dahdi_pvt *pvts[MAX_CHANNELS];				/*!< Member channel pvt structs */
+	struct dahdi_pvt *pvts[SIG_SS7_MAX_CHANNELS];	/*!< Member channel pvt structs */
 	int flags;							/*!< Linkset flags */
 };
 
@@ -563,7 +565,7 @@
 struct dahdi_mfcr2 {
 	pthread_t r2master;		       /*!< Thread of master */
 	openr2_context_t *protocol_context;    /*!< OpenR2 context handle */
-	struct dahdi_pvt *pvts[MAX_CHANNELS];     /*!< Member channel pvt structs */
+	struct dahdi_pvt *pvts[SIG_MFCR2_MAX_CHANNELS];     /*!< Member channel pvt structs */
 	int numchans;                          /*!< Number of channels in this R2 block */
 	int monitored_count;                   /*!< Number of channels being monitored */
 };
@@ -601,8 +603,8 @@
 #ifdef HAVE_PRI
 
 struct dahdi_pri {
-	int dchannels[NUM_DCHANS];					/*!< What channel are the dchannels on */
-	int mastertrunkgroup;						/*!< What trunk group is our master */
+	int dchannels[SIG_PRI_NUM_DCHANS];		/*!< What channel are the dchannels on */
+	int mastertrunkgroup;					/*!< What trunk group is our master */
 	int prilogicalspan;						/*!< Logical span number within trunk group */
 	struct sig_pri_pri pri;
 };
@@ -11186,7 +11188,7 @@
 			return -1;
 		}
 	}
-	for (y = 0; y < NUM_DCHANS; y++) {
+	for (y = 0; y < SIG_PRI_NUM_DCHANS; y++) {
 		if (!channels[y])
 			break;
 		memset(&si, 0, sizeof(si));
@@ -11552,7 +11554,7 @@
 					destroy_dahdi_pvt(tmp);
 					return NULL;
 				}
-				if (r2_link->numchans == (sizeof(r2_link->pvts)/sizeof(r2_link->pvts[0]))) {
+				if (r2_link->numchans == ARRAY_LEN(r2_link->pvts)) {
 					ast_log(LOG_ERROR, "Cannot add more channels to this link!\n");
 					destroy_dahdi_pvt(tmp);
 					return NULL;
@@ -11622,7 +11624,7 @@
 					/* Make sure this isn't a d-channel */
 					matchesdchan=0;
 					for (x = 0; x < NUM_SPANS; x++) {
-						for (y = 0; y < NUM_DCHANS; y++) {
+						for (y = 0; y < SIG_PRI_NUM_DCHANS; y++) {
 							if (pris[x].dchannels[y] == tmp->channel) {
 								matchesdchan = 1;
 								break;
@@ -11665,7 +11667,7 @@
 							destroy_dahdi_pvt(tmp);
 							return NULL;
 						}
-						if (pris[span].pri.numchans >= MAX_CHANNELS) {
+						if (pris[span].pri.numchans >= ARRAY_LEN(pris[span].pri.pvts)) {
 							ast_log(LOG_ERROR, "Unable to add channel %d: Too many channels in trunk group %d!\n", channel,
 								pris[span].pri.trunkgroup);
 							destroy_dahdi_pvt(tmp);
@@ -12278,7 +12280,7 @@
 		}
 	}
 	if (pri->numchans == pvt_idx) {
-		if (MAX_CHANNELS <= pvt_idx) {
+		if (ARRAY_LEN(pri->pvts) <= pvt_idx) {
 			ast_log(LOG_ERROR, "Unable to add a no-B-channel interface!\n");
 			return -1;
 		}
@@ -13128,7 +13130,7 @@
 	ss7_event *e = NULL;
 	struct dahdi_pvt *p;
 	int chanpos;
-	struct pollfd pollers[NUM_DCHANS];
+	struct pollfd pollers[SIG_SS7_NUM_DCHANS];
 	int cic;
 	unsigned int dpc;
 	int nextms = 0;
@@ -13693,7 +13695,7 @@
 	   I think do_monitor() could be leaking, since it
 	   could be cancelled at any time and is not
 	   using thread keys, why?, */
-	struct pollfd pollers[sizeof(mfcr2->pvts)];
+	struct pollfd pollers[ARRAY_LEN(mfcr2->pvts)];
 	int res = 0;
 	int i = 0;
 	int oldstate = 0;
@@ -13773,7 +13775,7 @@
 
 	if (pri) {
 		for (x = 0; x < NUM_SPANS; x++) {
-			for (y = 0; y < NUM_DCHANS; y++) {
+			for (y = 0; y < SIG_PRI_NUM_DCHANS; y++) {
 				if (pris[x].pri.dchans[y])
 					dchancount++;
 
@@ -13816,7 +13818,7 @@
 
 	if (pri) {
 		for (x = 0; x < NUM_SPANS; x++) {
-			for (y = 0; y < NUM_DCHANS; y++) {
+			for (y = 0; y < SIG_PRI_NUM_DCHANS; y++) {
 				if (pris[x].pri.dchans[y])
 					dchancount++;
 
@@ -13860,7 +13862,7 @@
 
 	pri->pri.calls = &dahdi_pri_callbacks;
 
-	for (i = 0; i < NUM_DCHANS; i++) {
+	for (i = 0; i < SIG_PRI_NUM_DCHANS; i++) {
 		if (!pri->dchannels[i])
 			break;
 		pri->pri.fds[i] = open("/dev/dahdi/channel", O_RDWR);
@@ -14010,7 +14012,7 @@
 		ast_cli(a->fd, "No PRI running on span %d\n", span);
 		return CLI_SUCCESS;
 	}
-	for (x = 0; x < NUM_DCHANS; x++) {
+	for (x = 0; x < SIG_PRI_NUM_DCHANS; x++) {
 		if (pris[span-1].pri.dchans[x]) {
 			if (level == 1) {
 				pri_set_debug(pris[span-1].pri.dchans[x], SIG_PRI_DEBUG_NORMAL);
@@ -14072,7 +14074,7 @@
 
 	/* either servicing a D-Channel */
 	for (x = 0; x < NUM_SPANS; x++) {
-		for (y = 0; y < NUM_DCHANS; y++) {
+		for (y = 0; y < SIG_PRI_NUM_DCHANS; y++) {
 			if (pris[x].dchannels[y] == channel) {
 				pri = pris + x;
 				if (pri->pri.enable_service_message_support) {
@@ -14260,7 +14262,7 @@
 
 	for (span = 0; span < NUM_SPANS; span++) {
 		if (pris[span].pri.pri) {
-			for (x = 0; x < NUM_DCHANS; x++) {
+			for (x = 0; x < SIG_PRI_NUM_DCHANS; x++) {
 				debug = 0;
 				if (pris[span].pri.dchans[x]) {
 					debug = pri_get_debug(pris[span].pri.dchans[x]);
@@ -14777,7 +14779,7 @@
 
 #ifdef HAVE_PRI
 	for (i = 0; i < NUM_SPANS; i++) {
-		for (j = 0; j < NUM_DCHANS; j++)
+		for (j = 0; j < SIG_PRI_NUM_DCHANS; j++)
 			dahdi_close_pri_fd(&(pris[i]), j);
 	}
 
@@ -14785,7 +14787,7 @@
 	for (i = 0; i < NUM_SPANS; i++) {
 		ast_mutex_init(&pris[i].pri.lock);
 		pris[i].pri.master = AST_PTHREADT_NULL;
-		for (j = 0; j < NUM_DCHANS; j++)
+		for (j = 0; j < SIG_PRI_NUM_DCHANS; j++)
 			pris[i].pri.fds[j] = -1;
 		}
 	pri_set_error(dahdi_pri_error);
@@ -14793,7 +14795,7 @@
 #endif
 #ifdef HAVE_SS7
 	for (i = 0; i < NUM_SPANS; i++) {
-		for (j = 0; j < NUM_DCHANS; j++)
+		for (j = 0; j < SIG_SS7_NUM_DCHANS; j++)
 			dahdi_close_ss7_fd(&(linksets[i]), j);
 	}
 
@@ -14801,7 +14803,7 @@
 	for (i = 0; i < NUM_SPANS; i++) {
 		ast_mutex_init(&linksets[i].lock);
 		linksets[i].master = AST_PTHREADT_NULL;
-		for (j = 0; j < NUM_DCHANS; j++)
+		for (j = 0; j < SIG_SS7_NUM_DCHANS; j++)
 			linksets[i].fds[j] = -1;
 	}
 	ss7_set_error(dahdi_ss7_error);
@@ -15743,7 +15745,7 @@
 		ast_log(LOG_ERROR, "Invalid sigchan!\n");
 		return -1;
 	} else {
-		if (link->numsigchans >= NUM_DCHANS) {
+		if (link->numsigchans >= SIG_SS7_NUM_DCHANS) {
 			ast_log(LOG_ERROR, "Too many sigchans on linkset %d\n", cur_linkset);
 			return -1;
 		}
@@ -16312,7 +16314,7 @@
 	for (i = 0; i < NUM_SPANS; i++) {
 		if (pris[i].pri.master && (pris[i].pri.master != AST_PTHREADT_NULL))
 			pthread_join(pris[i].pri.master, NULL);
-		for (j = 0; j < NUM_DCHANS; j++) {
+		for (j = 0; j < SIG_PRI_NUM_DCHANS; j++) {
 			dahdi_close_pri_fd(&(pris[i]), j);
 		}
 	}
@@ -16327,7 +16329,7 @@
 	for (i = 0; i < NUM_SPANS; i++) {
 		if (linksets[i].master && (linksets[i].master != AST_PTHREADT_NULL))
 			pthread_join(linksets[i].master, NULL);
-		for (j = 0; j < NUM_DCHANS; j++) {
+		for (j = 0; j < SIG_SS7_NUM_DCHANS; j++) {
 			dahdi_close_ss7_fd(&(linksets[i]), j);
 		}
 	}
@@ -17535,7 +17537,7 @@
 	int i;
 	int logicalspan;
 	int trunkgroup;
-	int dchannels[NUM_DCHANS];
+	int dchannels[SIG_PRI_NUM_DCHANS];
 #endif
 
 	cfg = ast_config_load(config, config_flags);
@@ -17583,7 +17585,7 @@
 					if ((c = strchr(v->value, ','))) {
 						i = 0;
 						memset(dchannels, 0, sizeof(dchannels));
-						while (c && (i < NUM_DCHANS)) {
+						while (c && (i < SIG_PRI_NUM_DCHANS)) {
 							dchannels[i] = atoi(c + 1);
 							if (dchannels[i] < 0) {
 								ast_log(LOG_WARNING, "D-channel for trunk group %d must be a postiive number at line %d of chan_dahdi.conf\n", trunkgroup, v->lineno);
@@ -17820,7 +17822,7 @@
 	for (y = 0; y < NUM_SPANS; y++) {
 		ast_mutex_init(&linksets[y].lock);
 		linksets[y].master = AST_PTHREADT_NULL;
-		for (i = 0; i < NUM_DCHANS; i++)
+		for (i = 0; i < SIG_SS7_NUM_DCHANS; i++)
 			linksets[y].fds[i] = -1;
 	}
 	ss7_set_error(dahdi_ss7_error);

Modified: trunk/channels/sig_pri.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/sig_pri.c?view=diff&rev=260435&r1=260434&r2=260435
==============================================================================
--- trunk/channels/sig_pri.c (original)
+++ trunk/channels/sig_pri.c Fri Apr 30 17:24:28 2010
@@ -820,7 +820,7 @@
 int pri_is_up(struct sig_pri_pri *pri)
 {
 	int x;
-	for (x = 0; x < NUM_DCHANS; x++) {
+	for (x = 0; x < SIG_PRI_NUM_DCHANS; x++) {
 		if (pri->dchanavail[x] == DCHAN_AVAILABLE)
 			return 1;
 	}
@@ -848,7 +848,7 @@
 {
 	int x;
 
-	for (x = 0; x < NUM_DCHANS; x++) {
+	for (x = 0; x < SIG_PRI_NUM_DCHANS; x++) {
 		if ((pri->dchans[x] == pri->pri))
 			return x;
 	}
@@ -864,7 +864,7 @@
 	int newslot = -1;
 	int x;
 	old = pri->pri;
-	for (x = 0; x < NUM_DCHANS; x++) {
+	for (x = 0; x < SIG_PRI_NUM_DCHANS; x++) {
 		if ((pri->dchanavail[x] == DCHAN_AVAILABLE) && (newslot < 0))
 			newslot = x;
 		if (pri->dchans[x] == old) {
@@ -2609,7 +2609,7 @@
 {
 	struct sig_pri_pri *pri = vpri;
 	pri_event *e;
-	struct pollfd fds[NUM_DCHANS];
+	struct pollfd fds[SIG_PRI_NUM_DCHANS];
 	int res;
 	int chanpos = 0;
 	int x;
@@ -2654,7 +2654,7 @@
 			ast_log(LOG_WARNING, "Idle dial string '%s' lacks '@context'\n", pri->idleext);
 	}
 	for (;;) {
-		for (i = 0; i < NUM_DCHANS; i++) {
+		for (i = 0; i < SIG_PRI_NUM_DCHANS; i++) {
 			if (!pri->dchans[i])
 				break;
 			fds[i].fd = pri->fds[i];
@@ -2729,7 +2729,7 @@
 		}
 		/* Start with reasonable max */
 		lowest = ast_tv(60, 0);
-		for (i = 0; i < NUM_DCHANS; i++) {
+		for (i = 0; i < SIG_PRI_NUM_DCHANS; i++) {
 			/* Find lowest available d-channel */
 			if (!pri->dchans[i])
 				break;
@@ -2771,7 +2771,7 @@
 
 		ast_mutex_lock(&pri->lock);
 		if (!res) {
-			for (which = 0; which < NUM_DCHANS; which++) {
+			for (which = 0; which < SIG_PRI_NUM_DCHANS; which++) {
 				if (!pri->dchans[which])
 					break;
 				/* Just a timeout, run the scheduler */
@@ -2780,7 +2780,7 @@
 					break;
 			}
 		} else if (res > -1) {
-			for (which = 0; which < NUM_DCHANS; which++) {
+			for (which = 0; which < SIG_PRI_NUM_DCHANS; which++) {
 				if (!pri->dchans[which])
 					break;
 				if (fds[which].revents & POLLPRI) {
@@ -4018,7 +4018,7 @@
 	ast_mutex_init(&pri->lock);
 
 	pri->master = AST_PTHREADT_NULL;
-	for (i = 0; i < NUM_DCHANS; i++)
+	for (i = 0; i < SIG_PRI_NUM_DCHANS; i++)
 		pri->fds[i] = -1;
 }
 
@@ -4772,7 +4772,7 @@
 
 	ast_mutex_init(&pri->lock);
 
-	for (i = 0; i < NUM_DCHANS; i++) {
+	for (i = 0; i < SIG_PRI_NUM_DCHANS; i++) {
 		if (pri->fds[i] == -1) {
 			break;
 		}
@@ -4839,7 +4839,7 @@
 
 	pri->resetpos = -1;
 	if (ast_pthread_create_background(&pri->master, NULL, pri_dchannel, pri)) {
-		for (i = 0; i < NUM_DCHANS; i++) {
+		for (i = 0; i < SIG_PRI_NUM_DCHANS; i++) {
 			if (!pri->dchans[i])
 				break;
 			if (pri->fds[i] > 0)
@@ -4934,7 +4934,7 @@
 {
 	char status[256];
 	int x;
-	for (x = 0; x < NUM_DCHANS; x++) {
+	for (x = 0; x < SIG_PRI_NUM_DCHANS; x++) {
 		if (pri->dchans[x]) {
 			build_status(status, sizeof(status), pri->dchanavail[x], pri->dchans[x] == pri->pri);
 			ast_cli(fd, "PRI span %d/%d: %s\n", span, x, status);
@@ -4947,7 +4947,7 @@
 	int x;
 	char status[256];
 
-	for (x = 0; x < NUM_DCHANS; x++) {
+	for (x = 0; x < SIG_PRI_NUM_DCHANS; x++) {
 		if (pri->dchans[x]) {
 #ifdef PRI_DUMP_INFO_STR
 			char *info_str = NULL;

Modified: trunk/channels/sig_pri.h
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/sig_pri.h?view=diff&rev=260435&r1=260434&r2=260435
==============================================================================
--- trunk/channels/sig_pri.h (original)
+++ trunk/channels/sig_pri.h Fri Apr 30 17:24:28 2010
@@ -120,8 +120,8 @@
 	void (*module_unref)(void);
 };
 
-#define NUM_DCHANS		4	/*!< No more than 4 d-channels */
-#define MAX_CHANNELS	672		/*!< No more than a DS3 per trunk group */
+#define SIG_PRI_NUM_DCHANS		4		/*!< No more than 4 d-channels */
+#define SIG_PRI_MAX_CHANNELS	672		/*!< No more than a DS3 per trunk group */
 
 #define SIG_PRI		DAHDI_SIG_CLEAR
 #define SIG_BRI		(0x2000000 | DAHDI_SIG_CLEAR)
@@ -237,11 +237,11 @@
 	struct ast_cc_config_params *cc_params;			/*!< CC config parameters for each new call. */
 	int	pritimers[PRI_MAX_TIMERS];
 	int overlapdial;								/*!< In overlap dialing mode */
-	int qsigchannelmapping;                     	/*!< QSIG channel mapping type */
-    int discardremoteholdretrieval;                 /*!< shall remote hold or remote retrieval notifications be discarded? */
+	int qsigchannelmapping;							/*!< QSIG channel mapping type */
+	int discardremoteholdretrieval;					/*!< shall remote hold or remote retrieval notifications be discarded? */
 	int facilityenable;								/*!< Enable facility IEs */
-	int dchan_logical_span[NUM_DCHANS];				/*!< Logical offset the DCHAN sits in */
-	int fds[NUM_DCHANS];							/*!< FD's for d-channels */
+	int dchan_logical_span[SIG_PRI_NUM_DCHANS];		/*!< Logical offset the DCHAN sits in */
+	int fds[SIG_PRI_NUM_DCHANS];					/*!< FD's for d-channels */
 #if defined(HAVE_PRI_SERVICE_MESSAGES)
 	unsigned int enable_service_message_support:1;	/*!< enable SERVICE message support */
 #endif	/* defined(HAVE_PRI_SERVICE_MESSAGES) */
@@ -276,16 +276,16 @@
 	int cc_qsig_signaling_link_rsp;			/*!< CC Q.SIG signaling link retention (Party B) release(0), retain(1) */
 #endif	/* defined(HAVE_PRI_CCSS) */
 
-	int dchanavail[NUM_DCHANS];				/*!< Whether each channel is available */
+	int dchanavail[SIG_PRI_NUM_DCHANS];		/*!< Whether each channel is available */
 	int debug;								/*!< set to true if to dump PRI event info (tested but never set) */
-	int span;                               /*!< span number put into user output messages */
+	int span;								/*!< span number put into user output messages */
 	int resetting;							/*!< true if span is being reset/restarted */
 	int resetpos;							/*!< current position during a reset (-1 if not started) */
 	int sig;								/*!< ISDN signalling type (SIG_PRI, SIG_BRI, SIG_BRI_PTMP, etc...) */
 	int new_chan_seq;						/*!< New struct ast_channel sequence number */
 
 	/* Everything after here is internally set */
-	struct pri *dchans[NUM_DCHANS];				/*!< Actual d-channels */
+	struct pri *dchans[SIG_PRI_NUM_DCHANS];		/*!< Actual d-channels */
 	struct pri *pri;							/*!< Currently active D-channel */
 	/*!
 	 * List of private structures of the user of this module for no B channel
@@ -298,7 +298,7 @@
 	 */
 	void *no_b_chan_end;
 	int numchans;								/*!< Num of channels we represent */
-	struct sig_pri_chan *pvts[MAX_CHANNELS];	/*!< Member channel pvt structs */
+	struct sig_pri_chan *pvts[SIG_PRI_MAX_CHANNELS];/*!< Member channel pvt structs */
 	pthread_t master;							/*!< Thread of master */
 	ast_mutex_t lock;							/*!< libpri access Mutex */
 	time_t lastreset;							/*!< time when unused channels were last reset */




More information about the svn-commits mailing list