diff options
author | Richard Mudgett <rmudgett@digium.com> | 2011-08-17 16:18:27 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2011-08-17 16:18:27 +0000 |
commit | 265102faf89e95381910eb0b69a47e338f3baf63 (patch) | |
tree | e5c59012da77a192f34408ef69041697c1cc7da3 /channels | |
parent | 606ca8ee8c3d357d0e7fc162955957ec4585949b (diff) |
Merged revisions 332265 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10
................
r332265 | rmudgett | 2011-08-17 11:01:29 -0500 (Wed, 17 Aug 2011) | 33 lines
Merged revisions 332264 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
........
r332264 | rmudgett | 2011-08-17 10:51:08 -0500 (Wed, 17 Aug 2011) | 26 lines
Outgoing BRI calls fail when using Asterisk 1.8 with HA8, HB8, and B410P cards.
France Telecom brings layer 2 and layer 1 down on BRI lines when the line
is idle. When layer 1 goes down Asterisk cannot make outgoing calls and
the HA8 and HB8 cards also get IRQ misses.
The inability to make outgoing calls is because the line is in red alarm
and Asterisk will not make calls over a line it considers unavailable.
The IRQ misses for the HA8 and HB8 card are because the hardware is
switching clock sources from the line which just brought layer 1 down to
internal timing.
There is a DAHDI option for the B410P card to not tell Asterisk that layer
1 went down so Asterisk will allow outgoing calls: "modprobe wcb4xxp
teignored=1". There is a similar DAHDI option for the HA8 and HB8 cards:
"modprobe wctdm24xxp bri_teignored=1". Unfortunately that will not clear
up the IRQ misses when the telco brings layer 1 down.
* Add layer 2 persistence option to customize the layer 2 behavior on BRI
PTMP lines. The new option has three settings: 1) Use libpri default
layer 2 setting. 2) Keep layer 2 up. Bring layer 2 back up when the peer
brings it down. 3) Leave layer 2 down when the peer brings it down.
Layer 2 will be brought up as needed for outgoing calls.
JIRA AST-598
........
................
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@332270 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_dahdi.c | 13 | ||||
-rw-r--r-- | channels/sig_pri.c | 3 | ||||
-rw-r--r-- | channels/sig_pri.h | 4 |
3 files changed, 20 insertions, 0 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index ab9e85513..6fe89ba66 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -12555,6 +12555,9 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf, #endif /* defined(HAVE_PRI_CALL_WAITING) */ pris[span].pri.transfer = conf->chan.transfer; pris[span].pri.facilityenable = conf->pri.pri.facilityenable; +#if defined(HAVE_PRI_L2_PERSISTENCE) + pris[span].pri.l2_persistence = conf->pri.pri.l2_persistence; +#endif /* defined(HAVE_PRI_L2_PERSISTENCE) */ #if defined(HAVE_PRI_AOC_EVENTS) pris[span].pri.aoc_passthrough_flag = conf->pri.pri.aoc_passthrough_flag; pris[span].pri.aoce_delayhangup = conf->pri.pri.aoce_delayhangup; @@ -17782,6 +17785,16 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct } else if (!strcasecmp(v->name, "datetime_send")) { confp->pri.pri.datetime_send = dahdi_datetime_send_option(v->value); #endif /* defined(HAVE_PRI_DATETIME_SEND) */ +#if defined(HAVE_PRI_L2_PERSISTENCE) + } else if (!strcasecmp(v->name, "layer2_persistence")) { + if (!strcasecmp(v->value, "keep_up")) { + confp->pri.pri.l2_persistence = PRI_L2_PERSISTENCE_KEEP_UP; + } else if (!strcasecmp(v->value, "leave_down")) { + confp->pri.pri.l2_persistence = PRI_L2_PERSISTENCE_LEAVE_DOWN; + } else { + confp->pri.pri.l2_persistence = PRI_L2_PERSISTENCE_DEFAULT; + } +#endif /* defined(HAVE_PRI_L2_PERSISTENCE) */ #endif /* HAVE_PRI */ #if defined(HAVE_SS7) } else if (!strcasecmp(v->name, "ss7type")) { diff --git a/channels/sig_pri.c b/channels/sig_pri.c index f3d2a3800..312737132 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -8593,6 +8593,9 @@ int sig_pri_start_pri(struct sig_pri_span *pri) #if defined(HAVE_PRI_DATETIME_SEND) pri_date_time_send_option(pri->pri, pri->datetime_send); #endif /* defined(HAVE_PRI_DATETIME_SEND) */ +#if defined(HAVE_PRI_L2_PERSISTENCE) + pri_persistent_layer2_option(pri->pri, pri->l2_persistence); +#endif /* defined(HAVE_PRI_L2_PERSISTENCE) */ pri->resetpos = -1; if (ast_pthread_create_background(&pri->master, NULL, pri_dchannel, pri)) { diff --git a/channels/sig_pri.h b/channels/sig_pri.h index d2e844138..6700a06fd 100644 --- a/channels/sig_pri.h +++ b/channels/sig_pri.h @@ -405,6 +405,10 @@ struct sig_pri_span { int qsigchannelmapping; /*!< QSIG channel mapping type */ int discardremoteholdretrieval; /*!< shall remote hold or remote retrieval notifications be discarded? */ int facilityenable; /*!< Enable facility IEs */ +#if defined(HAVE_PRI_L2_PERSISTENCE) + /*! Layer 2 persistence option. */ + int l2_persistence; +#endif /* defined(HAVE_PRI_L2_PERSISTENCE) */ 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 */ |