[libpri-commits] mattf: branch mattf/libpri-1.4-q921-rewrite r1309 - /team/mattf/libpri-1.4-q9...

SVN commits to the libpri project libpri-commits at lists.digium.com
Fri Nov 13 13:44:19 CST 2009


Author: mattf
Date: Fri Nov 13 13:44:16 2009
New Revision: 1309

URL: http://svnview.digium.com/svn/libpri?view=rev&rev=1309
Log:
Layer 2 transients tested and working properly with TE-PTMP mode

Modified:
    team/mattf/libpri-1.4-q921-rewrite/q921.c

Modified: team/mattf/libpri-1.4-q921-rewrite/q921.c
URL: http://svnview.digium.com/svn/libpri/team/mattf/libpri-1.4-q921-rewrite/q921.c?view=diff&rev=1309&r1=1308&r2=1309
==============================================================================
--- team/mattf/libpri-1.4-q921-rewrite/q921.c (original)
+++ team/mattf/libpri-1.4-q921-rewrite/q921.c Fri Nov 13 13:44:16 2009
@@ -1275,6 +1275,7 @@
 {
 	int ri;
 	struct pri *sub = pri;
+	pri_event *res = NULL;
 	int tei;
 
 	if (!BRI_NT_PTMP(pri) && !BRI_TE_PTMP(pri)) {
@@ -1350,6 +1351,8 @@
 		switch (pri->q921_state) {
 		case Q921_ASSIGN_AWAITING_TEI:
 			q921_setstate(pri, Q921_TEI_ASSIGNED);
+			pri->ev.gen.e = PRI_EVENT_DCHAN_UP;
+			res = &pri->ev;
 			break;
 		case Q921_ESTABLISH_AWAITING_TEI:
 			q921_establish_data_link(pri);
@@ -1385,10 +1388,10 @@
 		pri->txqueue = NULL;
 
 		switch (pri->subchannel->q921_state) {
+		case Q921_ASSIGN_AWAITING_TEI:
+			q921_setstate(pri->subchannel, Q921_TEI_ASSIGNED);
+			break;
 		case Q921_ESTABLISH_AWAITING_TEI:
-			q921_setstate(pri->subchannel, Q921_TEI_ASSIGNED);
-			break;
-		case Q921_ASSIGN_AWAITING_TEI:
 			q921_establish_data_link(pri->subchannel);
 			pri->subchannel->l3initiated = 1;
 			q921_setstate(pri->subchannel, Q921_AWAITING_ESTABLISHMENT);
@@ -1423,7 +1426,7 @@
 			q921_tei_release_and_reacquire(pri);
 		}
 	}
-	return NULL;	/* Do we need to return something??? */
+	return res;	/* Do we need to return something??? */
 }
 
 static int is_command(struct pri *pri, q921_h *h)
@@ -2201,16 +2204,19 @@
 		return NULL;
 	}
 
-	if (pri->debug & PRI_DEBUG_Q921_DUMP) {
-		pri_message(pri,
-			"Could not find candidate subchannel for received frame with SAPI/TEI of %d/%d.\n",
-			h->h.sapi, h->h.tei);
-		pri_message(pri, "Sending TEI release, in order to re-establish TEI state\n");
-	}
-
-	/* Q.921 says we should send the remove message twice, in case of link corruption */
-	q921_send_tei(pri, Q921_TEI_IDENTITY_REMOVE, 0, h->h.tei, 1);
-	q921_send_tei(pri, Q921_TEI_IDENTITY_REMOVE, 0, h->h.tei, 1);
+	/* If we're NT-PTMP, this means an unrecognized TEI that we'll kill */
+	if (BRI_NT_PTMP(pri)) {
+		if (pri->debug & PRI_DEBUG_Q921_DUMP) {
+			pri_message(pri,
+				"Could not find candidate subchannel for received frame with SAPI/TEI of %d/%d.\n",
+				h->h.sapi, h->h.tei);
+			pri_message(pri, "Sending TEI release, in order to re-establish TEI state\n");
+		}
+	
+		/* Q.921 says we should send the remove message twice, in case of link corruption */
+		q921_send_tei(pri, Q921_TEI_IDENTITY_REMOVE, 0, h->h.tei, 1);
+		q921_send_tei(pri, Q921_TEI_IDENTITY_REMOVE, 0, h->h.tei, 1);
+	}
 
 	return NULL;
 }
@@ -2235,7 +2241,7 @@
 			return q921_receive_MDL(pri->subchannel, (q921_u *)h, len);
 	}
 
-	if (!((h->h.sapi == pri->sapi) && (h->h.tei == pri->tei))) {
+	if (!((h->h.sapi == pri->sapi) && ((BRI_TE_PTMP(pri) && (h->h.tei == Q921_TEI_GROUP)) || (h->h.tei == pri->tei)))) {
 		/* Check for SAPIs we don't yet handle */
 		/* If it's not us, try any subchannels we have */
 		if (pri->subchannel)




More information about the libpri-commits mailing list