Fix hole in layer2_persistence option for TE PTMP links.
If the network stops responding, according to Q.921 we are supposed to remove the TEI. With the layer2_persistence option enabled, we are supposed to keep trying to bring layer 2 back up. Unfortunately, when the network stops responding, we stopped the restart timer and removed the TEI. As a result, layer 2 does not immediately come back up. * Made not stop the restart timer if we are removing the TEI on the CPE side. Also handle the timer expiration in relevant unassigned TEI states. (closes issue LIBPRI-72) Reported by: Trey Blancher Patches: jira_dahdi_1001_libpri_v1.4.patch (license #5621) patch uploaded by rmudgett git-svn-id: https://origsvn.digium.com/svn/libpri/branches/1.4@2315 2fbb986a-6c06-0410-b554-c9c1f0a7f128
This commit is contained in:
parent
28553ff8cb
commit
84b2560da5
8
q921.c
8
q921.c
@ -557,7 +557,7 @@ static void kick_start_link(struct q921_link *link)
|
|||||||
break;
|
break;
|
||||||
case Q921_ASSIGN_AWAITING_TEI:
|
case Q921_ASSIGN_AWAITING_TEI:
|
||||||
if (ctrl->debug & PRI_DEBUG_Q921_STATE) {
|
if (ctrl->debug & PRI_DEBUG_Q921_STATE) {
|
||||||
pri_message(ctrl, "Kick starting link when get TEI.\n");
|
pri_message(ctrl, "Kick starting link when awaiting TEI.\n");
|
||||||
}
|
}
|
||||||
q921_setstate(link, Q921_ESTABLISH_AWAITING_TEI);
|
q921_setstate(link, Q921_ESTABLISH_AWAITING_TEI);
|
||||||
break;
|
break;
|
||||||
@ -586,6 +586,8 @@ static void restart_timer_expire(void *vlink)
|
|||||||
link->restart_timer = 0;
|
link->restart_timer = 0;
|
||||||
|
|
||||||
switch (link->state) {
|
switch (link->state) {
|
||||||
|
case Q921_TEI_UNASSIGNED:
|
||||||
|
case Q921_ASSIGN_AWAITING_TEI:
|
||||||
case Q921_TEI_ASSIGNED:
|
case Q921_TEI_ASSIGNED:
|
||||||
/* Try to bring layer 2 up. */
|
/* Try to bring layer 2 up. */
|
||||||
kick_start_link(link);
|
kick_start_link(link);
|
||||||
@ -1911,7 +1913,9 @@ static void q921_mdl_remove(struct q921_link *link)
|
|||||||
|
|
||||||
switch (link->state) {
|
switch (link->state) {
|
||||||
case Q921_TEI_ASSIGNED:
|
case Q921_TEI_ASSIGNED:
|
||||||
restart_timer_stop(link);
|
if (mdl_free_me) {
|
||||||
|
restart_timer_stop(link);
|
||||||
|
}
|
||||||
/* XXX: deviation! Since we don't have a UI queue, we just discard our I-queue */
|
/* XXX: deviation! Since we don't have a UI queue, we just discard our I-queue */
|
||||||
q921_discard_iqueue(link);
|
q921_discard_iqueue(link);
|
||||||
q921_setstate(link, Q921_TEI_UNASSIGNED);
|
q921_setstate(link, Q921_TEI_UNASSIGNED);
|
||||||
|
Loading…
Reference in New Issue
Block a user