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.

(issue AST-598)
Reported by: Trey Blancher


git-svn-id: https://origsvn.digium.com/svn/libpri/branches/1.4@2273 2fbb986a-6c06-0410-b554-c9c1f0a7f128
This commit is contained in:
Richard Mudgett
2011-08-17 15:48:54 +00:00
parent 092811da55
commit c5ec479bd2
5 changed files with 187 additions and 27 deletions

View File

@@ -1892,6 +1892,31 @@ int pri_transfer_rsp(struct pri *ctrl, q931_call *call, int invoke_id, int is_su
*/
void pri_aoc_events_enable(struct pri *ctrl, int enable);
enum pri_layer2_persistence {
PRI_L2_PERSISTENCE_DEFAULT,
/*! Immediately bring layer 2 back up if the peer brings layer 2 down. */
PRI_L2_PERSISTENCE_KEEP_UP,
/*! Leave layer 2 down if the peer brings layer 2 down. */
PRI_L2_PERSISTENCE_LEAVE_DOWN,
#if 0 /* Possible future option. Would need to define how long to idle before dropping. */
/*! Drop layer 2 on D channel idle. */
PRI_L2_PERSISTENCE_IDLE_DROP,
#endif
};
/*!
* \brief Set the layer2 persistence option.
*
* \param ctrl D channel controller.
* \param option Layer 2 persistence to apply.
*
* \note
* Not all values are supported by all modes.
*
* \return Nothing
*/
void pri_persistent_layer2_option(struct pri *ctrl, enum pri_layer2_persistence option);
#define PRI_DISPLAY_OPTION_BLOCK (1 << 0) /*!< Do not pass display text. */
#define PRI_DISPLAY_OPTION_NAME_INITIAL (1 << 1) /*!< Use display in SETUP/CONNECT for name. */
#define PRI_DISPLAY_OPTION_NAME_UPDATE (1 << 2) /*!< Use display in FACILITY/NOTIFY for COLP name if appropriate. */