%%% $Id$ %%%--------------------------------------------------------------------- %%% @author Vance Shipley %%% @copyright (c) 2001-2007, Vance Shipley %%% @end %%% %%% All rights reserved. %%% %%% Redistribution and use in source and binary forms, with or without %%% modification, are permitted provided that the following conditions %%% are met: %%% %%% Redistributions of source code must retain the above copyright %%% notice, this list of conditions and the following disclaimer. %%% %%% - Redistributions in binary form must reproduce the above %%% copyright notice, this list of conditions and the following %%% disclaimer in the documentation and/or other materials %%% provided with the distribution. %%% - Neither the name of Motivity Telecom nor the names of its %%% contributors may be used to endorse or promote products %%% derived from this software without specific prior written %%% permission. %%% %%% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS %%% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT %%% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS %%% FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE %%% COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, %%% INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, %%% BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; %%% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER %%% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT %%% LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN %%% ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE %%% POSSIBILITY OF SUCH DAMAGE. %%% %%%--------------------------------------------------------------------- %%% @doc Conversion routines for the API of the netaccess application. %%% %%%

This module provides functions which convert the records used %%% in the API to the binary format of data exchanged with the boards. %%% The erlang driver passes L4L3m messages to the board and receives %%% L3L4m messages from the board. These binary messages are specified %%% in a C language API using structures, arrays, longs etc.

%%% %%%

This module uses a record for each of the C structures documented %%% in the Instant ISDN™ SMI Reference Guide and appearing in the %%% iisdn.h header file provided with the board's drivers. %%% The records are defined in iisdn.hrl. Each record has a %%% corresponding function in this module of the same name which %%% takes the record and returns a properly packed binary which is %%% equivalent to what the C API would have created. This binary is %%% passed to the board as received by the driver. This is quite %%% effecient as the memory is allocated once in the emulator and %%% reference passed to the driver which sends it down the stream to %%% the board. Portability between architectures is handled in the %%% driver's build system using GNU autotools (autoconf, automake, %%% etc.). The iisdn.hrl header file is generated automatically during %%% the build process.

%%% %%%

Some functions encode a record into a binary, others decode %%% a binary into a record. Others work both ways, if you pass it %%% a record it will return a binary but if you pass it a binary it %%% will return a record. The choice is determined by the context %%% in which the function is used.

%%% %%% @reference Instant ISDN™ SMI Programmer's Guide %%% @reference Instant ISDN™ SMI Reference Guide %%% -module(iisdn). -copyright('Copyright (c) 2001-2007 Vance Shipley'). -author('vances@motivity.ca'). -vsn('$Revision$'). -export([l3_to_l4/1, l4_to_l3/1]). -export([error_code/1]). -export([ena_proto_data/1]). -export([hardware_data/1, line_data/1]). -export([tsi_data/1, tsi_map/1]). -export([q931_timers/1]). -export([level1/1, level2/1, level3/1]). -export([l2_lap_params/1, l2_ss7_params/1, l2_udpip_params/1, l2_tcpip_params/1, l2_dpnss_params/1, l2_v110_params/1]). -export([data_interface/1]). -export([q931/1, bonding_data/1, x25/1, pm/1, relay/1, dpnss/1, dass/1, q933a/1]). -export([l2_lap_consts/1, l2_ss7_consts/1, l2_ip_consts/1, l2_dpnss_consts/1]). -export([relay_rule/1, match/1, relay_stats/1]). -export([protocol_stat/1, q933a_pvc_status/1]). -export([board_id/1]). -export([l2_stats/1, mtp2_stats/1, l2_mtp2_stats/1]). -export([alarm_status/1, line_status/1]). -export([pp/1, pm_req_data/1, pm_rsp_data/1, pm_threshold_xing_data/1, pm_fdl_msg_data/1, pm_alert_data/1]). -include("iisdn.hrl"). %% @type l4_to_l3(). L4L3 SMI Message sent from host to board. %%

A record which includes the following fields:

%%
%%
lapdid
integer() %% Identifies the physical HDLC channel to be used.
%%
msgtype
integer() %% Identifies the L4L3m message being sent.
%%
l4_ref
integer() %% Reference assigned to outgoing calls by the host application. %% Subsequent L3L4m for the call will use this value. Used in %% call control applications only.
%%
call_ref
integer() %% Call reference assigned by the board. Used in %% call control applications only.
%%
lli
integer() %% Logical Link ID or DLCI. Used wth LAPD, LAPB and V.120.
%%
data
binary() %% The message specific data.
%%
%% %% @spec (L4L3mRec) -> L4L3mBin %% L4L3mRec = l4_to_l3() %% L4L3mBin = binary() %% l4_to_l3(R) when is_record(R, l4_to_l3) -> <<(R#l4_to_l3.lapdid):?IISDNu8bit, (R#l4_to_l3.msgtype):?IISDNu8bit, (R#l4_to_l3.l4_ref):?IISDNu16bit, (R#l4_to_l3.call_ref):?IISDNu16bit, (R#l4_to_l3.lli):?IISDNu16bit, (R#l4_to_l3.data)/binary>>. %% @type l3_to_l4(). L3L4 SMI Message sent from board to host. %%

A record which includes the following fields:

%%
%%
lapdid
integer() %% Identifies the physical HDLC channel to be used.
%%
msgtype
integer() %% Identifies the L3L4m message being received.
%%
l4_ref
integer() %% Reference previously assigned to outgoing calls by the host application. %% Used in call control applications only. 16#ffff if unused.
%%
call_ref
integer() %% Call reference assigned by the board. Used in %% call control applications only.
%%
bchanel
integer() %% Identifies the bearer channel.
%%
interface
integer() %% Non-Facility Associated Signaling (NFAS) interface (0-19). %% Used in Q.931 NFAS applications only. 16#ff if unused.
%%
bchannel_mask
integer() %% B-channel bit mask. Used in mutirate ISDN calls only.
%%
lli
integer() %% Logical Link ID or DLCI. Used wth LAPD, LAPB and V.120.
%%
data_channel
integer() %% Identifies the data stream. Unused in Solaris driver implementation.
%%
data
binary() %% The message specific data.
%%
%% %% @spec (L3L4mBin) -> L3L4mRec %% L3L4mBin = binary() %% L3L4mRec = l3_to_l4() %% l3_to_l4(Bin) when is_binary(Bin) -> <> = Bin, #l3_to_l4{lapdid=Lapdid, msgtype=Msgtype, l4_ref=L4_ref, call_ref=Call_ref, bchanel=Bchanel, interface=Iface, bchannel_mask=Bchannel_mask, lli=Lli, data_channel=Data_channel, data=Data}. %% @type error_code(). L3L4mERROR error code. %%

A record which includes the following fields:

%%
%%
error_code
no_error | lapdid_out_of_range | lapdid_not_established | invalid_called_number %% | no_crv_available | no_crstruct_available | call_ref_error | invalid_b_channel %% | b_chanel_restarting | b_chanel_oos | invalid_call_type | invalid_conn_type %% | protocol_not_disabled invalid_hdlc_maping | invalid_data_queue | invalid_comand_args %% | invalid_msg_for_state | data_packet_lost | pm_not_esf | invalid_interface %% | b_channel_inuse | invalid_lli | vc_table_full | lli_not_found | blocked %% | no_hardware | invalid_spid_len | non_nfas | invalid_state | service_not_offered %% | dchan_temp_unavail | too_many_q931_stacks | service_not_offered %% | data_interface_required data_interface_invalid | sym_mode_not_supported %% | invalid_bufsz | bond_chan_not_cnfg | bond_chan_bit_conflict %% | bond_wrong_spyder_chip | bond_too_many_channels | bond_dup_addon_chan %% | dchan_odd_pointer_error | dchan_too_few_buffers | dchan_too_many_buffers %% | dchan_give_take_nonzero | dchan_zero_rxbuf_len | sym_mode_required %% | dlci_manditory | chan_kbit_rate_bad | invalid_mem_size | not_enough_memory %% | tx_buffer_misaligned | x_buffer_misaligned | too_many_dlcis | bond_bad_state %% | spid_rejected | tei_ident_remove_req | spid2_rejected | invalid_smi_msgid %% | invalid_clock_mode | no_overflow_queue | too_many_cas_dest | segment_too_large %% | segment_message_expected | segment_message_invalid | segment_timer_expired %% | invalid_download_msg | protocol_disabled | invalid_variant | too_many_links %% | too_many_headers | fatal_error | hot_swap_extraction | dchan_out_of_range %% | ether_already_configured | tsi_verification_failed | status_ignored %% | bad_call_ref | glare | integer()
%%
offending_message
Msgtype value of the offending L3L4 message
%%
%% %% @spec (ErrorCodeBin) -> ErrorCodeRec %% ErrorCodeBin = binary() %% ErrorCodeRec = error_code() %% error_code(B) when is_binary(B) -> <> = B, ErrorCodes = [{0, no_error}, {1, lapdid_out_of_range}, {2, lapdid_not_established}, {3, invalid_called_number}, {4, no_crv_available}, {5, no_crstruct_available}, {6, call_ref_error}, {7, invalid_b_channel}, {8, b_chanel_restarting}, {9, b_chanel_oos}, {10, invalid_call_type}, {11, invalid_conn_type}, {12, protocol_not_disabled}, {13, invalid_hdlc_maping}, {14, invalid_data_queue}, {15, invalid_comand_args}, {16, invalid_msg_for_state}, {17, data_packet_lost}, {18, pm_not_esf}, {19, invalid_interface}, {20, b_channel_inuse}, {21, invalid_lli}, {22, vc_table_full}, {23, lli_not_found}, {24, blocked}, {25, no_hardware}, {26, invalid_spid_len}, {27, non_nfas}, {28, invalid_state}, {29, service_not_offered}, {30, dchan_temp_unavail}, {31, too_many_q931_stacks}, {32, service_not_offered}, {33, data_interface_required}, {34, data_interface_invalid}, {35, sym_mode_not_supported}, {36, invalid_bufsz}, {37, bond_chan_not_cnfg}, {38, bond_chan_bit_conflict}, {39, bond_wrong_spyder_chip}, {40, bond_too_many_channels}, {41, bond_dup_addon_chan}, {42, dchan_odd_pointer_error}, {43, dchan_too_few_buffers}, {44, dchan_too_many_buffers}, {45, dchan_give_take_nonzero}, {46, dchan_zero_rxbuf_len}, {47, sym_mode_required}, {48, dlci_manditory}, {49, chan_kbit_rate_bad}, {50, invalid_mem_size}, {51, not_enough_memory}, {52, tx_buffer_misaligned}, {53, x_buffer_misaligned}, {54, too_many_dlcis}, {55, bond_bad_state}, {56, spid_rejected}, {57, tei_ident_remove_req}, {58, spid2_rejected}, {59, invalid_smi_msgid}, {60, invalid_clock_mode}, {61, no_overflow_queue}, {62, too_many_cas_dest}, {63, segment_too_large}, {64, segment_message_expected}, {65, segment_message_invalid}, {66, segment_timer_expired}, {67, invalid_download_msg}, {68, protocol_disabled}, {69, invalid_variant}, {70, too_many_links}, {71, too_many_headers}, {72, fatal_error}, {73, hot_swap_extraction}, {74, dchan_out_of_range}, {75, ether_already_configured}, {76, tsi_verification_failed}, {100, status_ignored}, {101, bad_call_ref}, {102, glare}], ErrorName = case element(2, element(2, lists:keysearch(ErrorCode, 1, ErrorCodes))) of Atom when is_atom(Atom) -> Atom; false -> ErrorCode end, #error_code{error_code = ErrorName, offending_message = OffendingMessage}. %% @type board_id(). Board identification. %%

A record which includes the following fields:

%%
%%
iisdn_ver
string()
%%
banner
string()
%%
date
string()
%%
model
string()
%%
rev
string()
%%
board_type
integer()
%%
num_lines
integer()
%%
num_hdlc_chan
integer()
%%
num_modem_chan
integer()
%%
line_type
[line_type()]
%%
kernel_ram_size
integer()
%%
mezz_ram_size
integer()
%%
num_bfio_devices
integer()
%%
%% %% @spec(BoardIdBin) -> BoardIdRec %% BoardIdBin = binary() %% BoardIdRec = board_id() %% board_id(B) when is_binary(B) -> Size_32 = (32 * ?SIZEOF_IISDNu8bit), Size_16 = (16 * ?SIZEOF_IISDNu8bit), Size_12 = (12 * ?SIZEOF_IISDNu8bit), Size_lines = (?IISDN_MAX_LINES * ?SIZEOF_IISDNu8bit), <> = B, #board_id{iisdn_ver = lists:takewhile(fun(I) -> I /= 0 end, binary_to_list(IISDNVer)), banner = lists:takewhile(fun(I) -> I /= 0 end, binary_to_list(Banner)), date = lists:takewhile(fun(I) -> I /= 0 end, binary_to_list(Date)), model = lists:takewhile(fun(I) -> I /= 0 end, binary_to_list(Model)), rev = lists:takewhile(fun(I) -> I /= 0 end, binary_to_list(Rev)), board_type = Board_type, num_lines = Num_lines, num_hdlc_chan = Num_hdlc_chan, num_modem_chan = Num_modem_chan, line_type = lists:takewhile(fun(I) -> I /= 0 end, line_type(Line_type)), kernel_ram_size = Kernel_ram_size, mezz_ram_size = Mezz_ram_size, num_bfio_devices = Num_bfio_devices}. %% @type level1(). Layer 1 configuration. %%

A record which includes the following fields:

%%
%%
l1_mode
integer()
%%
invert_hdlc
integer()
%%
num_txbuf
integer()
%%
num_rxbuf
integer()
%%
buffsz
integer()
%%
chain
integer()
%%
device
integer()
%%
bit_reverse
integer()
%%
vme_lock
integer()
%%
hdlc_channels
integer()
%%
chan_kbit_rate
integer()
%%
crc_bytes
integer()
%%
crc_ignore_errs
integer()
%%
crc_ignore_errs
integer()
%%
rate_adapt
rate_adapt()
%%
raw_fillchar
raw_fillchar()
%%
hdlc_flag_fill
hdlc_flag_fill()
%%
modem
modem()
%%
v110
v110()
%%
%% %% @spec (Level1Rec) -> Level1Bin %% Level1Rec = level1() %% Level1Bin = binary() %% level1(L1) when is_record(L1, level1) -> Digit32 = fun(Digit32, Bin) -> <> end, AmfParms = lists:foldl(Digit32, <<>>, (L1#level1.modem)#modem.amf_params), <<(L1#level1.l1_mode):?IISDNu8bit, (L1#level1.invert_hdlc):?IISDNu8bit, (L1#level1.num_txbuf):?IISDNu16bit, (L1#level1.num_rxbuf):?IISDNu16bit, (L1#level1.buffsz):?IISDNu16bit, (L1#level1.chain):?IISDNu8bit, (L1#level1.device):?IISDNu8bit, (L1#level1.bit_reverse):?IISDNu8bit, (L1#level1.vme_lock):?IISDNu8bit, (L1#level1.hdlc_channels):?IISDNu32bit, (L1#level1.chan_kbit_rate):?IISDNu16bit, (L1#level1.crc_bytes):?IISDNu8bit, (L1#level1.crc_ignore_errs):?IISDNu8bit, ((L1#level1.rate_adapt)#rate_adapt.enable):?IISDNu8bit, ((L1#level1.rate_adapt)#rate_adapt.rate_adapt_value):?IISDNu8bit, 0:?IISDNu16bit, ((L1#level1.raw_fillchar)#raw_fillchar.enable):?IISDNu8bit, ((L1#level1.raw_fillchar)#raw_fillchar.fill_value):?IISDNu8bit, 0:?IISDNu16bit, ((L1#level1.hdlc_flag_fill)#hdlc_flag_fill.enable):?IISDNu8bit, ((L1#level1.hdlc_flag_fill)#hdlc_flag_fill.mode):?IISDNu8bit, ((L1#level1.hdlc_flag_fill)#hdlc_flag_fill.value):?IISDNu16bit, ((L1#level1.modem)#modem.originate):?IISDNu8bit, ((L1#level1.modem)#modem.faxClass):?IISDNu8bit, ((L1#level1.modem)#modem.encoding):?IISDNu8bit, ((L1#level1.modem)#modem.amf):?IISDNu8bit, AmfParms/binary, ((L1#level1.modem)#modem.minBPS):?IISDNu32bit, ((L1#level1.modem)#modem.maxBPS):?IISDNu32bit, ((L1#level1.v110)#v110.bit_rate):?IISDNu32bit, ((L1#level1.v110)#v110.auto_detect):?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit>>. %% @type level2(). Layer 2 configuration. %%

A record which includes the following fields:

%%
%%
par
l2_lap_params() | l2_udpip_params() %% | l2_tcpip_params() | l2_dpnss_params() | l2_ss7_params %% | l2_v110_params()
%%
data_interface
data_interface()
%%
consts
l2_lap_consts() | l2_ip_consts() %% | l2_dpnss_consts() | l2_ss7_consts()
%%
%% %% @spec (Level2Rec) -> Level1Bin %% Level2Rec = level2() %% Level2Bin = binary() %% level2(L2) when is_record(L2, level2), is_record(L2#level2.par, l2_lap_params) -> level2(L2#level2{ par = l2_lap_params(L2#level2.par)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.par, l2_udpip_params) -> level2(L2#level2{ par = l2_udpip_params(L2#level2.par)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.par, l2_tcpip_params) -> level2(L2#level2{ par = l2_tcpip_params(L2#level2.par)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.par, l2_dpnss_params) -> level2(L2#level2{ par = l2_dpnss_params(L2#level2.par)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.par, l2_ss7_params) -> level2(L2#level2{ par = l2_ss7_params(L2#level2.par)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.par, l2_v110_params) -> level2(L2#level2{ par = l2_v110_params(L2#level2.par)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.data_interface, data_interface) -> level2(L2#level2{ data_interface = data_interface(L2#level2.data_interface)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.consts, l2_lap_consts) -> level2(L2#level2{ consts = l2_lap_consts(L2#level2.consts)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.consts, l2_ip_consts) -> level2(L2#level2{ consts = l2_ip_consts(L2#level2.consts)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.consts, l2_dpnss_consts) -> level2(L2#level2{ consts = l2_dpnss_consts(L2#level2.consts)}); level2(L2) when is_record(L2, level2), is_record(L2#level2.consts, l2_ss7_consts) -> level2(L2#level2{ consts = l2_ss7_consts(L2#level2.consts)}); level2(L2) when is_record(L2, level2), is_binary(L2#level2.par); is_binary(L2#level2.data_interface); is_binary(L2#level2.consts) -> <<(L2#level2.par)/binary, (L2#level2.data_interface)/binary, (L2#level2.consts)/binary>>. %% @type data_interface(). Data interface configuration. %%

A record which includes the following fields:

%%
%%
enable
integer()
%%
fillandspill
integer()
%%
allow_buffer_preload
integer()
%%
%% %% @spec (DataInterfaceRec) -> DataInterfaceBin %% DataInterfaceRec = data_interface() %% DataInterfaceBin = binary() %% data_interface(DataIf) when is_record(DataIf, data_interface) -> <<(DataIf#data_interface.enable):?IISDNu8bit, (DataIf#data_interface.data_channel):?IISDNu8bit, (DataIf#data_interface.fillandspill):?IISDNu8bit, (DataIf#data_interface.allow_buffer_preload):?IISDNu8bit>>. %% @type l2_lap_params(). Layer 2 LAP parameters. %%

A record which includes the following fields:

%%
%%
mode
integer()
%%
dce_dte
integer()
%%
tei_mode
integer()
%%
no_sabme
integer()
%%
l2_detail
integer()
%%
timestamp
integer()
%%
ui_mode
integer()
%%
priority
integer()
%%
no_reestab
integer()
%%
mode_1tr6
integer()
%%
mode_tei_1
integer()
%%
no_piggyback
integer()
%%
%% %% @spec (L2LapParamsRec) -> L2LapParamsBin %% L2LapParamsRec = l2_lap_params() %% L2LapParamsBin = binary() %% l2_lap_params(Lap) when is_record(Lap, l2_lap_params) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_PARAMS, ?SIZEOF_IISDN_L2_UDPIP_PARAMS, ?SIZEOF_IISDN_L2_TCPIP_PARAMS, ?SIZEOF_IISDN_L2_DPNSS_PARAMS, ?SIZEOF_IISDN_L2_SS7_PARAMS, ?SIZEOF_IISDN_L2_V110_PARAMS]) - ?SIZEOF_IISDN_L2_LAP_PARAMS, <<(Lap#l2_lap_params.mode):?IISDNu8bit, (Lap#l2_lap_params.dce_dte):?IISDNu8bit, (Lap#l2_lap_params.tei_mode):?IISDNu8bit, (Lap#l2_lap_params.no_sabme):?IISDNu8bit, (Lap#l2_lap_params.l2_detail):?IISDNu8bit, (Lap#l2_lap_params.timestamp):?IISDNu8bit, (Lap#l2_lap_params.ui_mode):?IISDNu8bit, (Lap#l2_lap_params.priority):?IISDNu8bit, (Lap#l2_lap_params.no_reestab):?IISDNu8bit, (Lap#l2_lap_params.mode_1tr6):?IISDNu8bit, (Lap#l2_lap_params.mode_tei_1):?IISDNu8bit, (Lap#l2_lap_params.no_piggyback):?IISDNu8bit, 0:Pad/integer-unit:8>>. %% @type l2_udpip_params(). Layer 2 UDP/IP parameters. %%

A record which includes the following fields:

%%
%%
mode
integer()
%%
dstport
integer()
%%
dstipaddr
integer()
%%
%% %% @spec (L2UdpIpParamsRec) -> L2UdpIpParamsBin %% L2UdpIpParamsRec = l2_udpip_params() %% L2UdpIpParamsBin = binary() %% l2_udpip_params(Udpip) when is_record(Udpip, l2_udpip_params) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_PARAMS, ?SIZEOF_IISDN_L2_UDPIP_PARAMS, ?SIZEOF_IISDN_L2_TCPIP_PARAMS, ?SIZEOF_IISDN_L2_DPNSS_PARAMS, ?SIZEOF_IISDN_L2_SS7_PARAMS, ?SIZEOF_IISDN_L2_V110_PARAMS]) - ?SIZEOF_IISDN_L2_UDPIP_PARAMS, <<(Udpip#l2_udpip_params.mode):?IISDNu8bit, 0:?IISDNu8bit, (Udpip#l2_udpip_params.dstport):?IISDNu16bit, (Udpip#l2_udpip_params.dstipaddr):?IISDNu32bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:Pad/integer-unit:8>>. %% @type l2_tcpip_params(). Layer 2 TCP/IP parameters. %%

A record which includes the following fields:

%%
%%
mode
integer()
%%
dstport
integer()
%%
dstipaddr
integer()
%%
%% %% @spec (L2TcpIpParamsRec) -> L2TcpIpParamsBin %% L2TcpIpParamsRec = l2_tcpip_params() %% L2UTcIpParamsBin = binary() %% l2_tcpip_params(Tcpip) when is_record(Tcpip, l2_tcpip_params) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_PARAMS, ?SIZEOF_IISDN_L2_UDPIP_PARAMS, ?SIZEOF_IISDN_L2_TCPIP_PARAMS, ?SIZEOF_IISDN_L2_DPNSS_PARAMS, ?SIZEOF_IISDN_L2_SS7_PARAMS, ?SIZEOF_IISDN_L2_V110_PARAMS]) - ?SIZEOF_IISDN_L2_TCPIP_PARAMS, <<(Tcpip#l2_tcpip_params.mode):?IISDNu8bit, 0:?IISDNu8bit, (Tcpip#l2_tcpip_params.dstport):?IISDNu16bit, (Tcpip#l2_tcpip_params.dstipaddr):?IISDNu32bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:Pad/integer-unit:8>>. %% @type l2_dpnss_params(). Layer 2 DPNSS parameters. %%

A record which includes the following fields:

%%
%%
mode
integer()
%%
pbx_b
integer()
%%
sabmr_as_ack
integer()
%%
tie_line_mode
integer()
%%
%% %% @spec (L2DpnssParamsRec) -> L2DpnssParamsBin %% L2DpnssParamsRec = l2_dpnss_params() %% L2DpnssParamsBin = binary() %% l2_dpnss_params(Dpnss) when is_record(Dpnss, l2_dpnss_params) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_PARAMS, ?SIZEOF_IISDN_L2_UDPIP_PARAMS, ?SIZEOF_IISDN_L2_TCPIP_PARAMS, ?SIZEOF_IISDN_L2_DPNSS_PARAMS, ?SIZEOF_IISDN_L2_SS7_PARAMS, ?SIZEOF_IISDN_L2_V110_PARAMS]) - ?SIZEOF_IISDN_L2_DPNSS_PARAMS, <<(Dpnss#l2_dpnss_params.mode):?IISDNu8bit, (Dpnss#l2_dpnss_params.pbx_b):?IISDNu8bit, (Dpnss#l2_dpnss_params.sabmr_as_ack):?IISDNu8bit, (Dpnss#l2_dpnss_params.tie_line_mode):?IISDNu8bit, 0:Pad/integer-unit:8>>. %% @type l2_ss7_params(). Layer 2 SS7 parameters. %%

A record which includes the following fields:

%%
%%
mode
integer()
%%
variant
integer()
%%
%% %% @spec (L2Ss7ParamsRec) -> L2Ss7ParamsBin %% L2Ss7ParamsRec = l2_ss7_params() %% L2Ss7ParamsBin = binary() %% l2_ss7_params(Mtp2) when is_record(Mtp2, l2_ss7_params) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_PARAMS, ?SIZEOF_IISDN_L2_UDPIP_PARAMS, ?SIZEOF_IISDN_L2_TCPIP_PARAMS, ?SIZEOF_IISDN_L2_DPNSS_PARAMS, ?SIZEOF_IISDN_L2_SS7_PARAMS, ?SIZEOF_IISDN_L2_V110_PARAMS]) - ?SIZEOF_IISDN_L2_SS7_PARAMS, <<(Mtp2#l2_ss7_params.mode):?IISDNu8bit, (Mtp2#l2_ss7_params.variant):?IISDNu8bit, 0:?IISDNu16bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:Pad/integer-unit:8>>. %% @type l2_v110_params(). Layer 2 V.110 parameters. %%

A record which includes the following fields:

%%
%%
mode
integer()
%%
ebits
integer()
%%
flow_control
integer()
%%
nine_byte_rx_frames
integer()
%%
num_tx_idle_frames
integer()
%%
max_rx_frame_size
integer()
%%
stale_rx_data_timer
integer()
%%
filter_status_messages
integer()
%%
%% %% @spec (L2V110ParamsRec) -> L2V110ParamsBin %% L2V110ParamsRec = l2_v110_params() %% L2V110ParamsBin = binary() %% l2_v110_params(V110) when is_record(V110, l2_v110_params) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_PARAMS, ?SIZEOF_IISDN_L2_UDPIP_PARAMS, ?SIZEOF_IISDN_L2_TCPIP_PARAMS, ?SIZEOF_IISDN_L2_DPNSS_PARAMS, ?SIZEOF_IISDN_L2_SS7_PARAMS, ?SIZEOF_IISDN_L2_V110_PARAMS]) - ?SIZEOF_IISDN_L2_V110_PARAMS, <<(V110#l2_v110_params.mode):?IISDNu8bit, (V110#l2_v110_params.ebits):?IISDNu8bit, (V110#l2_v110_params.flow_control):?IISDNu8bit, (V110#l2_v110_params.nine_byte_rx_frames):?IISDNu8bit, (V110#l2_v110_params.num_tx_idle_frames):?IISDNu16bit, (V110#l2_v110_params.max_rx_frame_size):?IISDNu16bit, (V110#l2_v110_params.stale_rx_data_timer):?IISDNu16bit, (V110#l2_v110_params.filter_status_messages):?IISDNu8bit, 0:?IISDNu8bit, 0:Pad/integer-unit:8>>. %% @type l2_lap_consts(). Layer 2 LAP constants. %%

A record which includes the following fields:

%%
%%
t200
integer()
%%
t201
integer()
%%
t202
integer()
%%
t203
integer()
%%
n200
integer()
%%
n201
integer()
%%
n202
integer()
%%
k
integer()
%%
%% %% @spec (L2LapConstsRec) -> L2LapConstsBin %% L2LapConstsRec = l2_lap_consts() %% L2LapConstsBin = binary() %% l2_lap_consts(L2) when is_record(L2, l2_lap_consts) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_CONSTS, ?SIZEOF_IISDN_L2_IP_CONSTS, ?SIZEOF_IISDN_L2_DPNSS_CONSTS, ?SIZEOF_IISDN_L2_SS7_CONSTS]) - ?SIZEOF_IISDN_L2_LAP_CONSTS, <<(L2#l2_lap_consts.t200):?IISDNu16bit, (L2#l2_lap_consts.t201):?IISDNu16bit, (L2#l2_lap_consts.t202):?IISDNu16bit, (L2#l2_lap_consts.t203):?IISDNu16bit, (L2#l2_lap_consts.n200):?IISDNu16bit, (L2#l2_lap_consts.n201):?IISDNu16bit, (L2#l2_lap_consts.n202):?IISDNu16bit, (L2#l2_lap_consts.k):?IISDNu16bit, 0:Pad/integer-unit:8>>. %% @type l2_ip_consts(). Layer 2 IP constants. %%

A record which includes the following fields:

%%
%%
no_dhcp
integer()
%%
ipaddr
integer()
%%
gwaddr
integer()
%%
subnet_mask
integer()
%%
%% %% @spec (L2IpConsts) -> L2IpConsts %% L2IpConsts = l2_ip_consts() | binary() %% l2_ip_consts(Ip) when is_record(Ip, l2_ip_consts) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_CONSTS, ?SIZEOF_IISDN_L2_IP_CONSTS, ?SIZEOF_IISDN_L2_DPNSS_CONSTS, ?SIZEOF_IISDN_L2_SS7_CONSTS]) - ?SIZEOF_IISDN_L2_IP_CONSTS, <<(Ip#l2_ip_consts.no_dhcp):?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, (Ip#l2_ip_consts.ipaddr):?IISDNu32bit, (Ip#l2_ip_consts.gwaddr):?IISDNu32bit, (Ip#l2_ip_consts.subnet_mask):?IISDNu32bit, 0:Pad/integer-unit:8>>; l2_ip_consts(Ip) when is_binary(Ip) -> <> = Ip, #l2_ip_consts{no_dhcp = No_dhcp, ipaddr = Ipaddr, gwaddr = Gwaddr, subnet_mask = Subnet_mask}. %% @type l2_dpnss_consts(). Layer 2 DPNSS constants. %%

A record which includes the following fields:

%%
%%
nl
integer()
%%
nt1
integer()
%%
nt2
integer()
%%
%% %% @spec (L2DpnssConstsRec) -> L2DpnssConstsBin %% L2DpnssConstsRec = l2_dpnss_consts() %% L2DpnssConstsBin = binary() %% l2_dpnss_consts(Dpnss) when is_record(Dpnss, l2_dpnss_consts) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_CONSTS, ?SIZEOF_IISDN_L2_IP_CONSTS, ?SIZEOF_IISDN_L2_DPNSS_CONSTS, ?SIZEOF_IISDN_L2_SS7_CONSTS]) - ?SIZEOF_IISDN_L2_DPNSS_CONSTS, <<(Dpnss#l2_dpnss_consts.nl):?IISDNu16bit, 0:?IISDNu16bit, (Dpnss#l2_dpnss_consts.nt1):?IISDNu32bit, (Dpnss#l2_dpnss_consts.nt2):?IISDNu32bit, 0:Pad/integer-unit:8>>. %% @type l2_ss7_consts(). Layer 2 SS7 constants. %%

A record which includes the following fields:

%%
%%
t1
integer()
%%
t2
integer()
%%
t3
integer()
%%
t4n
integer()
%%
t4e
integer()
%%
t5
integer()
%%
t6
integer()
%%
t7
integer()
%%
%% %% @spec (L2Ss7ConstsRec) -> L2Ss7ConstsRecBin %% L2Ss7ConstsRec = l2_ss7_consts() %% L2Ss7ConstsRecBin = binary() %% l2_ss7_consts(Mtp2) when is_record(Mtp2, l2_ss7_consts) -> Pad = lists:max([?SIZEOF_IISDN_L2_LAP_CONSTS, ?SIZEOF_IISDN_L2_IP_CONSTS, ?SIZEOF_IISDN_L2_DPNSS_CONSTS, ?SIZEOF_IISDN_L2_SS7_CONSTS]) - ?SIZEOF_IISDN_L2_SS7_CONSTS, <<(Mtp2#l2_ss7_consts.t1):?IISDNu16bit, (Mtp2#l2_ss7_consts.t2):?IISDNu16bit, (Mtp2#l2_ss7_consts.t3):?IISDNu16bit, (Mtp2#l2_ss7_consts.t4n):?IISDNu16bit, (Mtp2#l2_ss7_consts.t4e):?IISDNu16bit, (Mtp2#l2_ss7_consts.t5):?IISDNu16bit, (Mtp2#l2_ss7_consts.t6):?IISDNu16bit, (Mtp2#l2_ss7_consts.t7):?IISDNu16bit, 0:Pad/integer-unit:8>>. %% @type level3(). Layer 3 configuration. %%

A record which includes the following fields:

%%
%%
l3_mode
integer()
%%
cnfg
q931() | bonding_data() %% | x25() | pm() | relay() | dpnss() | dass() %% | q933a
%%
%% %% @spec (Level3Rec) -> Level3Bin %% Level3Rec = level3() %% Level3Bin = binary() %% level3(L3) when is_record(L3, level3), is_record(L3#level3.cnfg, q931) -> Bin = q931(L3#level3.cnfg), level3(L3#level3{cnfg = Bin}); level3(L3) when is_record(L3, level3), is_record(L3#level3.cnfg, bonding_data) -> Bin = bonding_data(L3#level3.cnfg), level3(L3#level3{cnfg = Bin}); level3(L3) when is_record(L3, level3), is_record(L3#level3.cnfg, x25) -> Bin = x25(L3#level3.cnfg), level3(L3#level3{cnfg = Bin}); level3(L3) when is_record(L3, level3), is_record(L3#level3.cnfg, pm) -> Bin = pm(L3#level3.cnfg), level3(L3#level3{cnfg = Bin}); level3(L3) when is_record(L3, level3), is_record(L3#level3.cnfg, relay) -> Bin = relay(L3#level3.cnfg), level3(L3#level3{cnfg = Bin}); level3(L3) when is_record(L3, level3), is_record(L3#level3.cnfg, dpnss) -> Bin = dpnss(L3#level3.cnfg), level3(L3#level3{cnfg = Bin}); level3(L3) when is_record(L3, level3), is_record(L3#level3.cnfg, dass) -> Bin = dass(L3#level3.cnfg), level3(L3#level3{cnfg = Bin}); level3(L3) when is_record(L3, level3), is_record(L3#level3.cnfg, q933a) -> Bin = q933a(L3#level3.cnfg), level3(L3#level3{cnfg = Bin}); level3(L3) when is_record(L3, level3), is_binary(L3#level3.cnfg) -> <<(L3#level3.l3_mode):?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu16bit, (L3#level3.cnfg)/binary>>. %% @type q931(). Q.931 call control configuration. %%

A record which includes the following fields:

%%
%%
switch_type
integer()
%%
variant
integer()
%%
call_filtering
integer()
%%
q931_timers
q931_timers()
%%
b_channel_service_state
[integer()]
%%
nfas
integer()
%%
e1_30_bchan
integer()
%%
basic_rate
integer()
%%
net_side_emul
integer()
%%
b_chan_negot
integer()
%%
proc_on_exclusv
integer()
%%
chanid_slot_map
integer()
%%
sprs_chanid_callproc
integer()
%%
no_chanid_callproc
integer()
%%
append_raw_qmsg
integer()
%%
ccitt_mode
integer()
%%
raw_qmsg
integer()
%%
no_ie_errcheck
integer()
%%
user_ie_encode
integer()
%%
user_ie_encode
integer()
%%
overlap_rcv
integer()
%%
send_l3l4_callproc
integer()
%%
sending_cmplt
integer()
%%
require_send_complete
integer()
%%
report_incoming_callproc
integer()
%%
no_tx_conn_ack
integer()
%%
no_rx_conn_ack
integer()
%%
sprs_chanid_setupack
integer()
%%
no_chanid_setupack
integer()
%%
no_canned_spid_rej
integer()
%%
call_reject_notify
integer()
%%
advice_of_charge
integer()
%%
message_segmentation
integer()
%%
no_bc_user_info
integer()
%%
incoming_call_slot_map
integer()
%%
release_complete_control
integer()
%%
primary_lapdid
integer()
%%
backup_lapdid
integer()
%%
primary_ifnum
integer()
%%
backup_ifnum
integer()
%%
backup_control
integer()
%%
backup_control
integer()
%%
spid_len
integer()
%%
spid_1_len
integer()
%%
dn_len
integer()
%%
dn_1_len
integer()
%%
spid
[integer()]
%%
spid_1
[integer()]
%%
dn
[integer()]
%%
dn_1
[integer()]
%%
chan_id_high_bit
integer()
%%
att_cust_bri_ekts
integer()
%%
subscribe_connack
integer()
%%
suppress_auto_spid
integer()
%%
accept_all_bri_calls
integer()
%%
%% %% @spec(Q931Rec) -> Q931Bin %% Q931Rec = q931() %% Q931Bin = binary() %% q931(Q931) when is_record(Q931, q931) -> Q931_Timers = q931_timers(Q931#q931.q931_timers), Digit32 = fun(Digit, Bin) -> <> end, BCSSPad = ?IISDN_NUM_DS1_INTERFACES - length(Q931#q931.b_channel_service_state), BCSSList = Q931#q931.b_channel_service_state ++ lists:duplicate(BCSSPad, 0), B_channel_service_state = lists:foldl(Digit32, <<>>, BCSSList), Digit8 = fun(Digit, Bin) -> <> end, SpidPad = ?IISDN_MAX_SPID_LEN - length(Q931#q931.spid), SpidList = Q931#q931.spid ++ lists:duplicate(SpidPad, 0), Spid = lists:foldl(Digit8, <<>>, SpidList), SpidPad_1 = ?IISDN_MAX_SPID_LEN - length(Q931#q931.spid_1), SpidList_1 = Q931#q931.spid_1 ++ lists:duplicate(SpidPad_1, 0), Spid_1 = lists:foldl(Digit8, <<>>, SpidList_1), DnPad = ?IISDN_MAX_DN_LEN - length(Q931#q931.dn), DnList = Q931#q931.dn ++ lists:duplicate(DnPad, 0), Dn = lists:foldl(Digit8, <<>>, DnList), DnPad_1 = ?IISDN_MAX_DN_LEN - length(Q931#q931.dn_1), DnList_1 = Q931#q931.dn_1 ++ lists:duplicate(DnPad_1, 0), Dn_1 = lists:foldl(Digit8, <<>>, DnList_1), Pad = lists:max([?SIZEOF_IISDN_Q931_CNFG, ?SIZEOF_IISDN_BONDING_DATA, ?SIZEOF_IISDN_X25_CONFIG, ?SIZEOF_IISDN_PM_CONFIG, ?SIZEOF_IISDN_RELAY_CONFIG, ?SIZEOF_IISDN_DPNSSCC_CONFIG, ?SIZEOF_IISDN_DASSCC_CONFIG, ?SIZEOF_IISDN_Q933A_CONFIG]) - ?SIZEOF_IISDN_Q931_CNFG, <<(Q931#q931.switch_type):?IISDNu16bit, (Q931#q931.variant):?IISDNu16bit, (Q931#q931.call_filtering):?IISDNu32bit, Q931_Timers/binary, B_channel_service_state/binary, (Q931#q931.nfas):?IISDNu8bit, (Q931#q931.e1_30_bchan):?IISDNu8bit, (Q931#q931.basic_rate):?IISDNu8bit, (Q931#q931.net_side_emul):?IISDNu8bit, (Q931#q931.b_chan_negot):?IISDNu8bit, (Q931#q931.proc_on_exclusv):?IISDNu8bit, (Q931#q931.chanid_slot_map):?IISDNu8bit, (Q931#q931.sprs_chanid_callproc):?IISDNu8bit, (Q931#q931.no_chanid_callproc):?IISDNu8bit, (Q931#q931.append_raw_qmsg):?IISDNu8bit, (Q931#q931.ccitt_mode):?IISDNu8bit, (Q931#q931.raw_qmsg):?IISDNu8bit, (Q931#q931.no_ie_errcheck):?IISDNu8bit, (Q931#q931.user_ie_encode):?IISDNu8bit, (Q931#q931.overlap_rcv):?IISDNu8bit, (Q931#q931.send_l3l4_callproc):?IISDNu8bit, (Q931#q931.sending_cmplt):?IISDNu8bit, (Q931#q931.require_send_complete):?IISDNu8bit, (Q931#q931.report_incoming_callproc):?IISDNu8bit, (Q931#q931.no_tx_conn_ack):?IISDNu8bit, (Q931#q931.no_rx_conn_ack):?IISDNu8bit, (Q931#q931.sprs_chanid_setupack):?IISDNu8bit, (Q931#q931.no_chanid_setupack):?IISDNu8bit, (Q931#q931.no_canned_spid_rej):?IISDNu8bit, (Q931#q931.call_reject_notify):?IISDNu8bit, (Q931#q931.advice_of_charge):?IISDNu8bit, (Q931#q931.message_segmentation):?IISDNu8bit, (Q931#q931.no_bc_user_info):?IISDNu8bit, (Q931#q931.incoming_call_slot_map):?IISDNu8bit, (Q931#q931.release_complete_control):?IISDNu8bit, (Q931#q931.primary_lapdid):?IISDNu8bit, (Q931#q931.backup_lapdid):?IISDNu8bit, 0:?IISDNu16bit, (Q931#q931.primary_ifnum):?IISDNu8bit, (Q931#q931.backup_ifnum):?IISDNu8bit, (Q931#q931.backup_control):?IISDNu8bit, (Q931#q931.spid_len):?IISDNu8bit, (Q931#q931.spid_1_len):?IISDNu8bit, (Q931#q931.dn_len):?IISDNu8bit, (Q931#q931.dn_1_len):?IISDNu8bit, Spid/binary, Spid_1/binary, Dn/binary, Dn_1/binary, (Q931#q931.chan_id_high_bit):?IISDNu8bit, (Q931#q931.att_cust_bri_ekts):?IISDNu8bit, (Q931#q931.subscribe_connack):?IISDNu8bit, (Q931#q931.suppress_auto_spid):?IISDNu8bit, (Q931#q931.accept_all_bri_calls):?IISDNu8bit, 0:?IISDNu16bit, 0:Pad/integer-unit:8>>. %% @type x25(). X.25 configuration. %%

A record which includes the following fields:

%%
%%
cfg_msk
integer()
%%
t10
integer()
%%
t11
integer()
%%
t12
integer()
%%
t13
integer()
%%
t28
integer()
%%
p
integer()
%%
w
integer()
%%
max_clr_retry
integer()
%%
max_svcs
integer()
%%
max_pvcs
integer()
%%
%% %% @spec(X25Rec) -> X25Bin %% X25Rec = x25() %% X25Bin = binary() %% x25(X25) when is_record(X25, x25) -> Pad = lists:max([?SIZEOF_IISDN_Q931_CNFG, ?SIZEOF_IISDN_BONDING_DATA, ?SIZEOF_IISDN_X25_CONFIG, ?SIZEOF_IISDN_PM_CONFIG, ?SIZEOF_IISDN_RELAY_CONFIG, ?SIZEOF_IISDN_DPNSSCC_CONFIG, ?SIZEOF_IISDN_DASSCC_CONFIG, ?SIZEOF_IISDN_Q933A_CONFIG]) - ?SIZEOF_IISDN_X25_CONFIG, <<(X25#x25.cfg_msk):?IISDNu32bit, (X25#x25.t10):?IISDNu16bit, (X25#x25.t11):?IISDNu16bit, (X25#x25.t12):?IISDNu16bit, (X25#x25.t13):?IISDNu16bit, (X25#x25.t28):?IISDNu16bit, (X25#x25.p):?IISDNu16bit, (X25#x25.w):?IISDNu8bit, (X25#x25.max_clr_retry):?IISDNu8bit, (X25#x25.max_svcs):?IISDNu8bit, (X25#x25.max_pvcs):?IISDNu8bit, 0:Pad/integer-unit:8>>. %% @type bonding_data(). Bandwidth On Demand configuration. %%

A record which includes the following fields:

%%
%%
mode
integer()
%%
destination
integer()
%%
num_tx_buf
integer()
%%
num_rx_buf
integer()
%%
data_channel
integer()
%%
txinit
integer()
%%
txadd01
integer()
%%
txfa
integer()
%%
txdisc
integer()
%%
tcid
integer()
%%
tanull
integer()
%%
channels
integer()
%%
directory
[integer()]
%%
%% %% @spec(BondingDataRec) -> BondingDataBin %% BondingDataRec = bonding_data() %% BondingDataBin = binary() %% bonding_data(Bond) when is_record(Bond, bonding_data) -> Digit32 = fun(Digit, Bin) -> <> end, DirectoryPad = ?IISDN_MAX_BOND_CHAN - length(Bond#bonding_data.directory), DirectoryList = Bond#bonding_data.directory ++ lists:duplicate(DirectoryPad, 0), Directory = lists:foldl(Digit32, <<>>, DirectoryList), Pad = lists:max([?SIZEOF_IISDN_Q931_CNFG, ?SIZEOF_IISDN_BONDING_DATA, ?SIZEOF_IISDN_X25_CONFIG, ?SIZEOF_IISDN_PM_CONFIG, ?SIZEOF_IISDN_RELAY_CONFIG, ?SIZEOF_IISDN_DPNSSCC_CONFIG, ?SIZEOF_IISDN_DASSCC_CONFIG, ?SIZEOF_IISDN_Q933A_CONFIG]) - ?SIZEOF_IISDN_BONDING_DATA, <<(Bond#bonding_data.mode):?IISDNu16bit, (Bond#bonding_data.destination):?IISDNu8bit, (Bond#bonding_data.num_tx_buf):?IISDNu8bit, (Bond#bonding_data.num_rx_buf):?IISDNu8bit, (Bond#bonding_data.data_channel):?IISDNu8bit, (Bond#bonding_data.txinit):?IISDNu16bit, (Bond#bonding_data.txadd01):?IISDNu16bit, (Bond#bonding_data.txfa):?IISDNu16bit, (Bond#bonding_data.txdisc):?IISDNu16bit, (Bond#bonding_data.txdeq):?IISDNu16bit, (Bond#bonding_data.tcid):?IISDNu16bit, (Bond#bonding_data.tanull):?IISDNu16bit, (Bond#bonding_data.channels):?IISDNu16bit, Directory/binary, 0:Pad/integer-unit:8>>. %% @type pm(). Performance Monitoring configuration. %%

A record which includes the following fields:

%%
%%
mode
integer()
%%
carrier
integer()
%%
fdl_alert
integer()
%%
equipmentid
[integer()]
%%
locationid
[integer()]
%%
frameid
[integer()]
%%
unitid
[integer()]
%%
facilityid
[integer()]
%%
%% %% @spec(PMRec) -> PMBin %% PMRec = pm() %% PMBin = binary() %% pm(PM) when is_record(PM, pm) -> Digit8 = fun(Digit, Bin) -> <> end, EidPad = 10 - length(PM#pm.equipmentid), EidList = PM#pm.equipmentid ++ lists:duplicate(EidPad, 0), Equipmentid = lists:foldl(Digit8, <<>>, EidList), LidPad = 11 - length(PM#pm.locationid), LidList = PM#pm.locationid++ lists:duplicate(LidPad, 0), Locationid = lists:foldl(Digit8, <<>>, LidList), FridPad = 10 - length(PM#pm.facilityid), FridList = PM#pm.frameid ++ lists:duplicate(FridPad, 0), Frameid = lists:foldl(Digit8, <<>>, FridList), UidPad = 6 - length(PM#pm.unitid), UidList = PM#pm.unitid ++ lists:duplicate(UidPad, 0), Unitid = lists:foldl(Digit8, <<>>, UidList), FacIdPad = 38 - length(PM#pm.facilityid), FacIdList = PM#pm.facilityid ++ lists:duplicate(FacIdPad, 0), Facilityid = lists:foldl(Digit8, <<>>, FacIdList), Pad = lists:max([?SIZEOF_IISDN_Q931_CNFG, ?SIZEOF_IISDN_BONDING_DATA, ?SIZEOF_IISDN_X25_CONFIG, ?SIZEOF_IISDN_PM_CONFIG, ?SIZEOF_IISDN_RELAY_CONFIG, ?SIZEOF_IISDN_DPNSSCC_CONFIG, ?SIZEOF_IISDN_DASSCC_CONFIG, ?SIZEOF_IISDN_Q933A_CONFIG]) - ?SIZEOF_IISDN_PM_CONFIG, <<(PM#pm.mode):?IISDNu8bit, (PM#pm.carrier):?IISDNu8bit, (PM#pm.fdl_alert):?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, Equipmentid/binary, Locationid/binary, Frameid/binary, Unitid/binary, Facilityid/binary, 0:Pad/integer-unit:8>>. %% @type relay(). On board packet relay and routing configuration. %%

A record which includes the following fields:

%%
%%
default_dest
integer()
%%
default_dest_id
integer()
%%
default_root_idx
integer()
%%
%% %% @spec(RelayRec) -> RelayBin %% RelayRec = relay() %% RelayBin = binary() %% relay(Relay) when is_record(Relay, relay) -> Pad = lists:max([?SIZEOF_IISDN_Q931_CNFG, ?SIZEOF_IISDN_BONDING_DATA, ?SIZEOF_IISDN_X25_CONFIG, ?SIZEOF_IISDN_PM_CONFIG, ?SIZEOF_IISDN_RELAY_CONFIG, ?SIZEOF_IISDN_DPNSSCC_CONFIG, ?SIZEOF_IISDN_DASSCC_CONFIG, ?SIZEOF_IISDN_Q933A_CONFIG]) - ?SIZEOF_IISDN_RELAY_CONFIG, <<(Relay#relay.default_dest):?IISDNu8bit, (Relay#relay.default_dest_id):?IISDNu8bit, (Relay#relay.default_root_idx):?IISDNu8bit, 0:?IISDNu8bit, 0:Pad/integer-unit:8>>. %% @type dpnss(). Digital Private Network Signaling System (DPNSS) configuration. %%

A record which includes the following fields:

%%
%%
pbx_y
integer()
%%
no_virtual_channels
integer()
%%
dest_addr_len
integer()
%%
b_channel_service_state
integer()
%%
v_channel_service_state
integer()
%%
t_i_msg
integer()
%%
t_guard
integer()
%%
%% %% @spec(DpnssRec) -> DpnssBin %% DpnssRec = dpnss() %% DpnssBin = binary() %% dpnss(Dpnss) when is_record(Dpnss, dpnss) -> Pad = lists:max([?SIZEOF_IISDN_Q931_CNFG, ?SIZEOF_IISDN_BONDING_DATA, ?SIZEOF_IISDN_X25_CONFIG, ?SIZEOF_IISDN_PM_CONFIG, ?SIZEOF_IISDN_RELAY_CONFIG, ?SIZEOF_IISDN_DPNSSCC_CONFIG, ?SIZEOF_IISDN_DASSCC_CONFIG, ?SIZEOF_IISDN_Q933A_CONFIG]) - ?SIZEOF_IISDN_DPNSSCC_CONFIG, <<(Dpnss#dpnss.pbx_y):?IISDNs8bit, (Dpnss#dpnss.no_virtual_channels):?IISDNs8bit, (Dpnss#dpnss.dest_addr_len):?IISDNs8bit, 0:?IISDNu8bit, (Dpnss#dpnss.b_channel_service_state):?IISDNu32bit, (Dpnss#dpnss.v_channel_service_state):?IISDNu32bit, (Dpnss#dpnss.t_i_msg):?IISDNs32bit, (Dpnss#dpnss.t_guard):?IISDNs32bit, 0:Pad/integer-unit:8>>. %% @type dass(). Digital Access Signaling System (DASS) configuration. %%

A record which includes the following fields:

%%
%%
b_channel_service_state
integer()
%%
t_digit_racking
integer()
%%
n_clear_retries
integer()
%%
%% %% @spec(DassRec) -> DassBin %% DassRec = dass() %% DassBin = binary() %% dass(Dass) when is_record(Dass, dass) -> Pad = lists:max([?SIZEOF_IISDN_Q931_CNFG, ?SIZEOF_IISDN_BONDING_DATA, ?SIZEOF_IISDN_X25_CONFIG, ?SIZEOF_IISDN_PM_CONFIG, ?SIZEOF_IISDN_RELAY_CONFIG, ?SIZEOF_IISDN_DPNSSCC_CONFIG, ?SIZEOF_IISDN_DASSCC_CONFIG, ?SIZEOF_IISDN_Q933A_CONFIG]) - ?SIZEOF_IISDN_DASSCC_CONFIG, <<(Dass#dass.b_channel_service_state):?IISDNu32bit, (Dass#dass.t_digit_racking):?IISDNs32bit, (Dass#dass.n_clear_retries):?IISDNs8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:?IISDNu8bit, 0:Pad/integer-unit:8>>. %% @type q933a(). Q.933 (Frame Realy) Annex A configuration. %%

A record which includes the following fields:

%%
%%
network_side
integer()
%%
n391
integer()
%%
n392
integer()
%%
n393
integer()
%%
t391
integer()
%%
t392
integer()
%%
%% %% @spec(Q933aRec) -> Q933aBin %% Q933aRec = q933a() %% Q933aBin = binary() %% q933a(Q933a) when is_record(Q933a, q933a) -> Pad = lists:max([?SIZEOF_IISDN_Q931_CNFG, ?SIZEOF_IISDN_BONDING_DATA, ?SIZEOF_IISDN_X25_CONFIG, ?SIZEOF_IISDN_PM_CONFIG, ?SIZEOF_IISDN_RELAY_CONFIG, ?SIZEOF_IISDN_DPNSSCC_CONFIG, ?SIZEOF_IISDN_DASSCC_CONFIG, ?SIZEOF_IISDN_Q933A_CONFIG]) - ?SIZEOF_IISDN_Q933A_CONFIG, <<(Q933a#q933a.network_side):?IISDNu8bit, (Q933a#q933a.n391):?IISDNu8bit, (Q933a#q933a.n392):?IISDNu8bit, (Q933a#q933a.n393):?IISDNu8bit, (Q933a#q933a.t391):?IISDNu16bit, (Q933a#q933a.t392):?IISDNu16bit, 0:Pad/integer-unit:8>>. %% @type ena_proto_data(). Enable protocol configuration. %%

A record which includes the following fields:

%%
%%
command
integer() %% Send a command to a protocol. Used only after a %% protocol was previously successfully configured.
%%
command_parameter
integer() %% Command parameter. Unused.
%%
level1
level1() %% Specifies the layer 1 configuration (e.g. HDLC).
%%
level2
level2() %% Specifies the layer 2 configuration (e.g. LAPD). Optional.
%%
level3
level3() %% Specifies the layer 3 configuration (e.g. Q.931). Optional.
%%
%% %% @spec(EnaProtoDataRec) -> EnaProtoDataBin %% EnaProtoDataRec = ena_proto_data() %% EnaProtoDataBin = binary() %% ena_proto_data(Proto) when is_record(Proto, ena_proto_data), is_record(Proto#ena_proto_data.level1, level1) -> ena_proto_data(Proto#ena_proto_data{ level1 = level1(Proto#ena_proto_data.level1)}); ena_proto_data(Proto) when is_record(Proto, ena_proto_data), is_record(Proto#ena_proto_data.level2, level2) -> ena_proto_data(Proto#ena_proto_data{ level2 = level2(Proto#ena_proto_data.level2)}); ena_proto_data(Proto) when is_record(Proto, ena_proto_data), is_record(Proto#ena_proto_data.level3, level3) -> ena_proto_data(Proto#ena_proto_data{ level3 = level3(Proto#ena_proto_data.level3)}); ena_proto_data(Proto) when is_record(Proto, ena_proto_data), is_binary(Proto#ena_proto_data.level1); is_binary(Proto#ena_proto_data.level2); is_binary(Proto#ena_proto_data.level3) -> <<(Proto#ena_proto_data.command):?IISDNu16bit, (Proto#ena_proto_data.command_parameter):?IISDNu16bit, (Proto#ena_proto_data.level1)/binary, (Proto#ena_proto_data.level2)/binary, (Proto#ena_proto_data.level3)/binary>>. %% @type match(). On board packet relay and routing match specification. %%

A record which includes the following fields:

%%
%%
idx
integer()Offset into packet at which comparison is performed.
%%
msk
integer()Bit mask to apply on octet at the idx offset. 0 ends list.
%%
val
integer()Value to expect in octet at idx offset.
%%
%% %% @spec(MatchRec) -> MatchBin %% MatchRec = match() %% MatchBin = binary() %% %% @see relay_rule(). %% match(MatchRec) when is_record(MatchRec, match) -> <<(MatchRec#match.idx):?IISDNu8bit, (MatchRec#match.msk):?IISDNu8bit, (MatchRec#match.val):?IISDNu8bit, 0:?IISDNu8bit>>. %% @type relay_rule(). On board packet relay and routing rule. %%

A record which includes the following fields:

%%
%%
match
[match()]List of match specifications.
%%
dest
integer()Delivery behaviour when match is successful.
%%
dest_id
integer()Destination lapdid or data_channel.
%%
delBytes
integer()Number of bytes to delete from head of packet.
%%
insBytes
integer()Number of bytes to insert at head of packet 0..16.
%%
insHeader
[integer()]Bytes to insert when insBytes > 0.
%%
insTimeStamp
integer()0 for no timestamp, 1, 2, 4 bytes wide.
%%
insTimeStampOffset
integer()Offset into final packet for timestamp insertion.
%%
%% %% @spec(RelayRuleRec) -> RelayRuleBin %% RelayRuleRec = relay_rule() %% RelayRuleBin = binary() %% relay_rule(RelayRuleRec) when is_record(RelayRuleRec, relay_rule), is_list(RelayRuleRec#relay_rule.match), length(RelayRuleRec#relay_rule.match) =< ?IISDN_RELAY_MAX_MATCHES -> MatchPad = ?IISDN_RELAY_MAX_MATCHES - length(RelayRuleRec#relay_rule.match), MatchList = RelayRuleRec#relay_rule.match ++ lists:duplicate(MatchPad, #match{}), LtoBin = fun(MatchRec, Bin) -> B = match(MatchRec), <> end, MatchBin = lists:foldl(LtoBin, <<>>, MatchList), NewRelayRuleRec = RelayRuleRec#relay_rule{match = MatchBin}, relay_rule(NewRelayRuleRec); relay_rule(RelayRuleRec) when is_record(RelayRuleRec, relay_rule), is_binary(RelayRuleRec#relay_rule.match) -> Digit8 = fun(Digit8, Bin) -> <> end, InsHeader = lists:foldl(Digit8, <<>>, RelayRuleRec#relay_rule.insHeader), <<(RelayRuleRec#relay_rule.match)/binary, (RelayRuleRec#relay_rule.dest):?IISDNu8bit, (RelayRuleRec#relay_rule.dest_id):?IISDNu8bit, 0:?IISDNu16bit, (RelayRuleRec#relay_rule.delBytes):?IISDNu8bit, (RelayRuleRec#relay_rule.insBytes):?IISDNu8bit, InsHeader/binary, (RelayRuleRec#relay_rule.insTimeStamp):?IISDNu8bit, (RelayRuleRec#relay_rule.insTimeStampOffset):?IISDNu8bit>>. %% @type relay_stats(). On board packet relay and routing statistics. %%

A record which includes the following fields:

%%
%%
recv_cnt
integer()Number of packets received on lapdid.
%%
recv_bytes
integer()Number of bytes received on lapdid.
%%
drop_cnt
integer()Number of packets received and dropped.
%%
xmit_cnt
integer()Number of packets sent on lapdid.
%%
xmit_bytes
integer()Number of bytes sent on lapdid.
%%
xmit_deferred_cnt
integer()Number of packets sent from deferred queue.
%%
xmit_overflow_cnt
integer()Number of packets discarded because transmit queue full.
%%
current_deferred_queue_depth
integer()Number of packets in deferred queue.
%%
%% %% @spec(RelayStatsBin) -> RelayStatsRec %% RelayStatsBin = binary() %% RelayStatsRec = relay_stats() %% relay_stats(RS) when is_binary(RS) -> <> = RS, #relay_stats{recv_cnt = RcvCnt, recv_bytes = RcvBytes, drop_cnt = DropCnt, xmit_cnt = XmitCnt, xmit_bytes = XmitBytes, xmit_deferred_cnt = XmitDeferredCnt, xmit_overflow_cnt = XmitOverflowCnt, current_deferred_queue_depth = CurrentDeferredQueueDepth}. %% @type hardware_data(). A record which includes the following fields: %%
%%
clocking
integer()
%%
clocking2
integer()
%%
enable_clocking2
integer()
%%
netref_clocking
integer()
%%
netref_rate
integer()
%%
ctbus_mode
integer()
%%
force_framer_init
integer()
%%
tdm_rate
integer()
%%
enable_8370_rliu_monitor
integer()
%%
dbcount
integer()
%%
enable_t810x_snap_mode
integer()
%%
clk_status
integer()
%%
line_data
[line_data()]
%%
csu
[boolean()]
%%
%% %% @spec(HardwareData) -> HardwareData %% HardwareData = hardware_data() | binary() %% hardware_data(HW) when is_record(HW, hardware_data), is_binary(HW#hardware_data.line_data), is_binary(HW#hardware_data.csu) -> <<(HW#hardware_data.clocking):?IISDNu8bit, (HW#hardware_data.clocking2):?IISDNu8bit, (HW#hardware_data.enable_clocking2):?IISDNu8bit, (HW#hardware_data.netref_clocking):?IISDNu8bit, (HW#hardware_data.netref_rate):?IISDNu8bit, (HW#hardware_data.ctbus_mode):?IISDNu8bit, (HW#hardware_data.force_framer_init):?IISDNu8bit, (HW#hardware_data.tdm_rate):?IISDNu8bit, (HW#hardware_data.enable_8370_rliu_monitor):?IISDNu8bit, (HW#hardware_data.dbcount):?IISDNu8bit, (HW#hardware_data.enable_t810x_snap_mode):?IISDNu8bit, (HW#hardware_data.clk_status):?IISDNu8bit, (HW#hardware_data.line_data)/binary, (HW#hardware_data.csu)/binary>>; hardware_data(HW) when is_record(HW, hardware_data), is_list(HW#hardware_data.csu), length(HW#hardware_data.csu) =< ?IISDN_MAX_LINES -> CsuPad = ?IISDN_MAX_LINES - length(HW#hardware_data.csu), CsuList = HW#hardware_data.csu ++ lists:duplicate(CsuPad, 0), LtoBin = fun(Line, Bin) -> <> end, CSU = lists:foldl(LtoBin, <<>>, CsuList), NewHW = HW#hardware_data{csu = CSU}, hardware_data(NewHW); hardware_data(HW) when is_record(HW, hardware_data), is_list(HW#hardware_data.line_data), length(HW#hardware_data.line_data) =< ?IISDN_MAX_LINES -> LinesPad = ?IISDN_MAX_LINES - length(HW#hardware_data.line_data), LinesList = HW#hardware_data.line_data ++ lists:duplicate(LinesPad, #line_data{}), LtoBin = fun(Line, Bin) -> B = line_data(Line), <> end, LD = lists:foldl(LtoBin, <<>>, LinesList), NewHW = HW#hardware_data{line_data=LD}, hardware_data(NewHW); hardware_data(HW) when is_binary(HW) -> Size_line = (?IISDN_MAX_LINES * ?SIZEOF_IISDN_LINE_DATA), Size_csu = (?IISDN_MAX_LINES * ?SIZEOF_IISDNu8bit), <> = HW, U8toL = fun (_Iter, <<>>, List) -> List; (Iter, <>, Acc) -> Iter(Iter, Rest, Acc ++ [Digit]) end, LinetoL = fun (_Iter, <<>>, List) -> List; (Iter, <>, Acc) -> Iter(Iter, Rest, Acc ++ [line_data(LD)]) end, #hardware_data{clocking=Clocking, clocking2=Clocking2, enable_clocking2=Enable_clocking2, netref_clocking=Netref_clocking, netref_rate=Netref_rate, ctbus_mode=Ctbus_mode, force_framer_init=Force_framer_init, tdm_rate=Tdm_rate, enable_8370_rliu_monitor=Enable_8370_rliu_monitor, dbcount=Dbcount, enable_t810x_snap_mode=Enable_t810x_snap_mode, clk_status=Clk_status, line_data = LinetoL(LinetoL, LineData, []), csu = U8toL(U8toL, Csu, [])}. %% @type line_data(). A record which includes the following fields: %%
%%
framing
integer()
%%
line_code
integer()
%%
pm_mode
integer()
%%
line_length
integer()
%%
term
integer()
%%
line_type
integer()
%%
integrate_alarms
integer()
%%
filter_unsolicited
integer()
%%
filter_yellow
integer()
%%
bri_l1mode
integer()
%%
briL1_cmd
integer()
%%
bri_loop
integer()
%%
briL1_T3
integer()
%%
briL1_T4
integer()
%%
%% %% @spec(LineData) -> LineData %% LineData = line_data() | binary() %% line_data(LD) when is_record(LD, line_data), is_atom(LD#line_data.line_type) -> line_data(LD#line_data{line_type = line_type(LD#line_data.line_type)}); line_data(LD) when is_record(LD, line_data) -> <<(LD#line_data.framing):?IISDNu8bit, (LD#line_data.line_code):?IISDNu8bit, (LD#line_data.pm_mode):?IISDNu8bit, (LD#line_data.line_length):?IISDNu8bit, (LD#line_data.term):?IISDNu8bit, (LD#line_data.line_type):?IISDNu8bit, (LD#line_data.integrate_alarms):?IISDNu8bit, (LD#line_data.filter_unsolicited):?IISDNu8bit, 0:?IISDNu8bit, (LD#line_data.filter_yellow):?IISDNu8bit, (LD#line_data.bri_l1mode):?IISDNu8bit, (LD#line_data.briL1_cmd):?IISDNu8bit, (LD#line_data.bri_loop):?IISDNu8bit, (LD#line_data.bril1_t3):?IISDNu8bit, (LD#line_data.bril1_t4):?IISDNu16bit>>; line_data(LD) when is_binary(LD) -> <> = LD, #line_data{framing=Framing, line_code=Line_code, pm_mode=Pm_mode, line_length=Line_length, term=Term, line_type=line_type(Line_type), integrate_alarms=Integrate_alarms, filter_unsolicited=Filter_unsolicited, filter_yellow=Filter_yellow, bri_l1mode=Bri_l1mode, briL1_cmd=BriL1_cmd, bri_loop=Bri_loop, bril1_t3=Bril1_t3, bril1_t4=Bril1_t4}. %% @type line_type(). t1 | t1_csu | pri_e1 | bri_u | bri_st | integer() %% %% @spec(LineType) -> LineType %% LineType = line_type() | binary() | [line_type()] %% line_type(1) -> t1; line_type(2) -> t1_csu; line_type(3) -> pri_e1; line_type(4) -> bri_u; line_type(5) -> bri_st; line_type(t1) -> 1; line_type(t1_csu) -> 2; line_type(pri_e1) -> 3; line_type(bri_u) -> 4; line_type(bri_st) -> 5; line_type(Bin) when is_binary(Bin) -> line_type(Bin, []); line_type(Other) -> Other. line_type(<<>>, List) -> List; line_type(<>, List) -> line_type(Rest, List ++ [line_type(Type)]). %% @type tsi_data(). A record which includes the following fields: %%
%%
tsi_ack_enable
integer()
%%
num_mappings
integer()
%%
granularity
integer()
%%
last
integer()
%%
tsi_map
[tsi_map()]
%%
%% %% @spec(TsiData) -> TsiData %% TsiData = tsi_data() | binary() %% tsi_data(TS) when is_record(TS, tsi_data), is_binary(TS#tsi_data.tsi_map) -> <<(TS#tsi_data.tsi_ack_enable):?IISDNu8bit, (TS#tsi_data.num_mappings):?IISDNu8bit, (TS#tsi_data.granularity):?IISDNu8bit, (TS#tsi_data.last):?IISDNu8bit, (TS#tsi_data.tsi_map)/binary>>; tsi_data(TS) when is_record(TS, tsi_data) -> FunMap = fun(M, Bin) -> <> end, MAP = lists:foldl(FunMap, <<>>, TS#tsi_data.tsi_map), tsi_data(TS#tsi_data{tsi_map = MAP}); tsi_data(TS) when is_binary(TS) -> <> = TS, MapList = tsi_data(NumMappings, Map, []), #tsi_data{tsi_ack_enable = TsiAckEnable, num_mappings = NumMappings, granularity = Granularity, last = Last, tsi_map = MapList}. tsi_data(0, _, MapList) -> MapList; tsi_data(_, <<>>, MapList) -> MapList; tsi_data(N, <>, MapList) -> tsi_data(N - 1, Rest, MapList ++ [tsi_map(<>)]). %% @type tsi_map(). A unidirectional timeslot mapping. %%

A record which contains the following fields:

%%
%%
destination
integer()
%%
source
integer()
%%
%% %% @spec(TsiMap) -> TsiMap %% TsiMap = tsi_map() | binary() %% tsi_map(MAP) when is_record(MAP, tsi_map) -> <<(MAP#tsi_map.destination):?IISDNu16bit, (MAP#tsi_map.source):?IISDNu16bit>>; tsi_map(MAP) when is_binary(MAP) -> <> = MAP, #tsi_map{destination = Destination, source = Source}. %% @type q931_timers(). Q.931 timers configuration. %%

A record which contains the following fields:

%%
%%
t302
integer()
%%
t305
integer()
%%
t308
integer()
%%
t313
integer()
%%
t314
integer()
%%
t316
integer()
%%
t318
integer()
%%
t319
integer()
%%
t3m1
integer()
%%
t321
integer()
%%
%% %% @spec (Q931TimersRec) -> Q931TimersBin %% Q931TimersRec = q931_timers() %% Q931TimersBin = binary() %% q931_timers(T) when is_record(T, q931_timers) -> <<(T#q931_timers.t302):?IISDNu16bit, (T#q931_timers.t305):?IISDNu16bit, (T#q931_timers.t308):?IISDNu16bit, (T#q931_timers.t313):?IISDNu16bit, (T#q931_timers.t314):?IISDNu16bit, (T#q931_timers.t316):?IISDNu16bit, (T#q931_timers.t318):?IISDNu16bit, (T#q931_timers.t319):?IISDNu16bit, (T#q931_timers.t3m1):?IISDNu16bit, (T#q931_timers.t321):?IISDNu16bit>>. %% @type protocol_stat(). Protocol status. %%

A record which contains the following fields:

%%
%%
status
integer()
%%
l2_state
integer()
%%
l2_error
integer()
%%
l2_errpt
integer()
%%
b_channels
integer()
%%
b_chan_req
integer()
%%
txcount
integer()
%%
rxcount
integer()
%%
l2_detail
integer()
%%
l2_detail_data
integer()
%%
all_calls_dropped
integer()
%%
num_q933a_pvcs
integer()
%%
n_b_channels
[integer()]
%%
n_b_chan_req
[integer()]
%%
nfas_primary_dchan_status
integer()
%%
nfas_backup_dchan_status
integer()
%%
ethernet_speed
integer()
%%
ethernet_mode
integer()
%%
connectBPS
integer()
%%
connectTyp
integer()
%%
ip
l2_ip_consts()
%%
q933a_pvcs
[q933a_pvc_status()]
%%
amf_status
[integer()]
%%
%% %% @spec (ProtocolStateBin) -> ProtocolStateRec %% ProtocolStateBin = binary() %% ProtocolStateRec = protocol_stat() %% protocol_stat(P) when is_binary(P) -> Size_bchans = (?IISDN_NUM_DS1_INTERFACES * ?SIZEOF_IISDNu32bit), Size_q933a = ((?IISDN_MAX_VC_PER_CHAN - 1) * ?SIZEOF_IISDN_Q933A_PVC_STATUS), Size_amf = (4 * ?SIZEOF_IISDNu32bit), <> = P, U32toL = fun (_Iter, <<>>, List) -> List; (Iter, <>, Acc) -> Iter(Iter, Rest, Acc ++ [Digit]) end, N_b_channels = U32toL(U32toL, Nbchans, []), N_b_chan_req = U32toL(U32toL, Nbreq, []), QList = q933a_pvc_status(Q933a, []), Amf_status = U32toL(U32toL, Amf, []), #protocol_stat{status = Status, l2_state = L2_state, l2_error = L2_error, l2_errpt = L2_errpt, b_channels = B_channels, b_chan_req = B_chan_req, txcount = Txcount, rxcount = Rxcount, l2_detail = L2_detail, l2_detail_data = L2_detail_data, all_calls_dropped = All_calls_dropped, num_q933a_pvcs = Num_q933a_pvcs, n_b_channels = N_b_channels, n_b_chan_req = N_b_chan_req, nfas_primary_dchan_status = Nfas_primary_dchan_status, nfas_backup_dchan_status = Nfas_backup_dchan_status, ethernet_speed = Ethernet_speed, ethernet_mode = Ethernet_mode, connectBPS = ConnectBPS, connectTyp = ConnectTyp, ip = l2_ip_consts(L2IpConsts), q933a_pvcs = QList, amf_status = Amf_status}. %% @type q933a_pvc_status(). Q.933 (Frame Relay) Annex A PVC status. %%

A record which includes the following fields:

%%
%%
lli
integer()
%%
status
integer()
%%
%% @spec (Q933aPvcStatusBin) -> Q933aPvcStatusRec %% Q933aPvcStatusBin = binary() %% Q933aPvcStatusRec = q933a_pvc_status() %% q933a_pvc_status(Q) when is_binary(Q) -> <> = Q, #q933a_pvc_status{lli = Lli, status = Status}. %% @hidden q933a_pvc_status(<<>>, QList) -> QList; q933a_pvc_status(<>, QList) -> q933a_pvc_status(Rest, QList ++ [q933a_pvc_status(Q)]). %% @type l2_stats(). Level 2 statitics counts for an LAP channel. %%

A record which includes the following fields:

%%
%%
iframe_tx
integer() Count of IFRAME commands sent
%%
rr_cmd_tx
integer() Count of RR commands sent
%%
rnr_cmd_tx
integer() Count of RNR commands sent
%%
rej_cmd_tx
integer() Count of REJ commands sent
%%
sabm_tx
integer() Count of SABM commands sent
%%
sabme_tx
integer() Count of SABME commands sent
%%
disc_tx
integer() Count of DISC commands sent
%%
rr_rsp_tx
integer() Count of RR responses sent
%%
rnr_rsp_tx
integer() Count of RNR responses sent
%%
rej_rsp_tx
integer() Count of REJ responses sent
%%
dm_tx
integer() Count of DM responses sent
%%
ua_tx
integer() Count of UA responses sent
%%
frmr_tx
integer() Count of FRMR responses sent
%%
iframe_rx
integer() Count of IFRAME commands received
%%
rr_cmd_rx
integer() Count of RR commands received
%%
rnr_cmd_rx
integer() Count of RNR commands received
%%
rej_cmd_rx
integer() Count of REJ commands received
%%
sabm_rx
integer() Count of SABM commands received
%%
sabme_rx
integer() Count of SABME commands received
%%
disc_rx
integer() Count of DISC commands received
%%
rr_rsp_rx
integer() Count of RR responses received
%%
rnr_rsp_rx
integer() Count of RNR responses received
%%
rej_rsp_rx
integer() Count of REJ responses received
%%
dm_rx
integer() Count of DM responses received
%%
ua_rx
integer() Count of UA responses received
%%
frmr_rx
integer() Count of FRMR responses received
%%
crc_errors
integer() Count of CRC errors (RX)
%%
rcv_errors
integer() Count of non-CRC errors (RX)
%%
retrans_cnt
integer() Count of retransmitted IFRAMES
%%
poll_errors
integer() Count of polls not responded to
%%
ui_tx
integer() Count of UI frames transmitted
%%
ui_rx
integer() Count of UI frames received
%%
%% @spec (L2StatsBin) -> L2StatsRec %% L2StatsBin = binary() %% L2StatsRec = l2_stats() %% l2_stats(L2StatsBin) when is_binary(L2StatsBin) -> <> = L2StatsBin, #l2_stats{iframe_tx=IframeTx, rr_cmd_tx=RrCmdTx, rnr_cmd_tx=RnrCmdTx, rej_cmd_tx=RejCmdTx, sabm_tx=SabmTx, sabme_tx=SabmeTx, disc_tx=DiscTx, rr_rsp_tx=RrRspTx, rnr_rsp_tx=RnrRspTx, rej_rsp_tx=RejRspTx, dm_tx=DmTx, ua_tx=UaTx, frmr_tx=FrmrTx, iframe_rx=IframeRx, rr_cmd_rx=RrCmdRx, rnr_cmd_rx=RnrCmdRx, rej_cmd_rx=RejCmdRx, sabm_rx=SabmRx, sabme_rx=SabmeRx, disc_rx=DiscRx, rr_rsp_rx=RrRspRx, rnr_rsp_rx=RnrRspRx, rej_rsp_rx=RejRspRx, dm_rx=DmRx, ua_rx=UaRx, frmr_rx=FrmrRx, crc_errors=CrcErrors, rcv_errors=RcvErrors, retrans_cnt=RetransCnt, poll_errors=PollErrors, ui_tx=UiTx, ui_rx=UiRx}. %% @type mtp2_stats(). Level 2 statitics counts for an MTP2 channel. %%

A record which includes the following fields:

%%
%%
msu_rx
integer() Count of MSU received
%%
msu_tx
integer() Count of MSU transmitted
%%
msu_rx_err
integer() Count of MSU receive errors
%%
msu_re_tx
integer() Count of MSU retransmitted
%%
neg_ack
integer() Count of negatove acknowledgement
%%
octet_rx
integer() Count of octets received
%%
octet_tx
integer() Count of octets transmitted
%%
%% @spec (MTP2StatsBin) -> MTP2StatsRec %% MTP2StatsBin = binary() %% MTP2StatsRec = mtp2_stats() %% mtp2_stats(MTP2StatsBin) when is_binary(MTP2StatsBin) -> <> = MTP2StatsBin, #mtp2_stats{msu_rx=MsuRx, msu_tx=MsuTx, msu_rx_err=MsuRxErr, msu_re_tx=MsuReTx, neg_ack=NegAck, octet_rx=OctetRx, octet_tx=OctetTx}. %% @type l2_mtp2_stats(). Level 2 statistics for an HDLC channel. %%

A record which includes the following fields:

%%
%%
mode
integer() LAP=0, MTP2=1
%%
stats
integer() l2_stats() or mtp2_stats()
%%
%% @spec (L2MTP2StatsBin) -> L2MTP2StatsRec %% l2_mtp2_stats(L2MTP2StatsBin) when is_binary(L2MTP2StatsBin) -> <> = L2MTP2StatsBin, #l2_mtp2_stats{mode = Mode, stats = Stats}. %% @type line_status(). T1/E1 Line status. %%

A record which includes the following fields:

%%
%%
alarm_status
[alarm_status()]
%%
l1_state
[integer()]
%%
line_type
[integer()]
%%
mph_msg
[integer()]
%%
error_point
integer()
%%
%% %% @spec (LineStatusBin) -> LineStatusRec %% LineStatusBin = binary() %% LineStatusRec = line_status() %% line_status(LineStatusBin) when is_binary(LineStatusBin) -> Sizeof_AlarmStatus = (?IISDN_MAX_LINES * ?SIZEOF_IISDN_ALARM_STATUS), Sizeof_L1State = (?IISDN_MAX_LINES * ?SIZEOF_IISDNu8bit), Sizeof_LineType = (?IISDN_MAX_LINES * ?SIZEOF_IISDNs8bit), Sizeof_MphMsg = (?IISDN_MAX_LINES * ?SIZEOF_IISDNs8bit), <> = LineStatusBin, AlarmtoL = fun (_Iter, <<>>, List) -> List; (Iter, <>, Acc) -> Iter(Iter, Rest, Acc ++ [alarm_status(AS)]) end, U8toL = fun (_Iter, <<>>, List) -> List; (Iter, <>, Acc) -> Iter(Iter, Rest, Acc ++ [Digit]) end, S8toL = fun (_Iter, <<>>, List) -> List; (Iter, <>, Acc) -> Iter(Iter, Rest, Acc ++ [Digit]) end, #line_status{alarm_status = AlarmtoL(AlarmtoL, Alarm_status, []), l1_state = U8toL(U8toL, L1State, []), line_type = S8toL(S8toL, LineType, []), mph_msg = S8toL(S8toL, MphMsg, []), error_point = ErrorPoint}. %% @type alarm_status(). T1/E1 Line alarm status. %%

A record which includes the following fields:

%%
%%
rcv_yellow
integer()
%%
rcv_blue
integer()
%%
rcv_red
integer()
%%
snd_yellow
integer()
%%
%% %% @spec (AlarmStatusBin) -> AlarmStatusRec %% AlarmStatusBin = binary() %% AlarmStatusRec = alarm_status() %% alarm_status(AlarmStatusBin) when is_binary(AlarmStatusBin) -> <> = AlarmStatusBin, #alarm_status{rcv_yellow=RcvYellow, rcv_blue=RcvBlue, rcv_red=RcvRed, snd_yellow=SndYellow}. %% @type pp(). Combined Performance Parameters. %%

A record which includes the following fields:

%%
%%
bpv
integer() bipolar violations
%%
exz
integer() excessive zeroes
%%
lcv
integer() line code violations
%%
pcv
integer() path coding violations
%%
cs
integer() controlled slips
%%
oofs
integer() controlled slips
%%
aiss
integer() alarm indication signal seconds
%%
les
integer() line errored seconds
%%
css
integer() controlled slip seconds
%%
es
integer() errored seconds
%%
bes
integer() bursty errored seconds
%%
ses
integer() severely errored seconds
%%
sefs
integer() severely errored framing seconds
%%
dm
integer() degraded minutes
%%
uas
integer() unavailable seconds
%%
%% %% @spec (PP) -> PP %% PP = binary() | pp() %% %% @doc Combined Performance Parameters. %%

The 15 minute guages defined in RFC1406.

%% pp(PP) when is_binary(PP) -> <> = PP, #pp{bpv=BPV, exz=EXZ, lcv=LCV, pcv=PCV, cs=CS, oofs=OOFS, aiss=AISS, les=LES, css=CSS, es=ES, bes=BES, ses=SES, sefs=SEFS, dm=DM, uas=UAS}; pp(PP) when is_record(PP, pp) -> <<(PP#pp.bpv):?IISDNu32bit, (PP#pp.exz):?IISDNu32bit, (PP#pp.lcv):?IISDNu32bit, (PP#pp.pcv):?IISDNu32bit, (PP#pp.cs):?IISDNu32bit, (PP#pp.oofs):?IISDNu32bit, (PP#pp.aiss):?IISDNu32bit, (PP#pp.les):?IISDNu32bit, (PP#pp.css):?IISDNu32bit, (PP#pp.es):?IISDNu32bit, (PP#pp.bes):?IISDNu32bit, (PP#pp.ses):?IISDNu32bit, (PP#pp.sefs):?IISDNu32bit, (PP#pp.dm):?IISDNu32bit, (PP#pp.uas):?IISDNu32bit>>. %% @type pm_req_data(). Performance Monitoring request data. %%

A record which includes the following fields:

%%
%%
line
?IISDNlineX
%%
endx
?IISDNpmeNEAR_END or ?IISDNpmeFAR_END
%%
pm_cmd
?IISDNpmcGET_THRSHLDS_15MIN, %% ?IISDNpmcSET_THRSHLDS_15MIN?IISDNpmcGET_THRSHLDS_24HR %% ?IISDNpmcSET_THRSHLDS_24HR?IISDNpmcRESET_PM_COUNTERS %% ?IISDNpmcGET_15MIN_DATA?IISDNpmcGET_24HR_DATA %% ?IISDNpmcPLB_ACTIVATE?IISDNpmcPLB_DEACTIVATE %% ?IISDNpmcLLB_ACTIVATE?IISDNpmcLLB_DEACTIVATE %% ?IISDNpmcSEND_FDL_REQUEST
%%
fdl_request
integer()
%%
interval_id
integer() 0-95 or 255 for current interval
%%
num_intervals
integer() 0-?IISDN_PP_NUM_INTERVALS_PER_PACKET
%%
threshold
pp() 0 entries are disabled
%%
%% %% @spec (PM::pm_req_data()) -> binary() %% pm_req_data(PM) when is_record(PM, pm_req_data) -> PP = pp(PM#pm_req_data.threshold), <<(PM#pm_req_data.line):?IISDNu8bit, (PM#pm_req_data.endx):?IISDNu8bit, (PM#pm_req_data.pm_cmd):?IISDNu8bit, (PM#pm_req_data.fdl_request):?IISDNu8bit, (PM#pm_req_data.interval_id):?IISDNu8bit, (PM#pm_req_data.num_intervals):?IISDNu8bit, 0:?IISDNu16bit, PP/binary>>. %% @type pm_rsp_data(). Performance Monitoring response data. %%

A record which includes the following fields:

%%
%%
line
?IISDNlineX
%%
endx
?IISDNpmeNEAR_END or ?IISDNpmeFAR_END
%%
pm_cmd
?IISDNpmcGET_THRSHLDS_15MIN, %% ?IISDNpmcSET_THRSHLDS_15MIN?IISDNpmcGET_THRSHLDS_24HR %% ?IISDNpmcSET_THRSHLDS_24HR?IISDNpmcRESET_PM_COUNTERS %% ?IISDNpmcGET_15MIN_DATA?IISDNpmcGET_24HR_DATA %% ?IISDNpmcPLB_ACTIVATE?IISDNpmcPLB_DEACTIVATE %% ?IISDNpmcLLB_ACTIVATE?IISDNpmcLLB_DEACTIVATE %% ?IISDNpmcSEND_FDL_REQUEST
%%
requested_interval_id
integer() 0-95 or 255 %% for interval in progress
%%
pm_status
?IISDNpmsSUCCESS, ?IISDNpmsFAIL_GENERAL, %% ?IISDNpmsFAIL_UNKNOWN_REQUEST
%%
current_interval_id
integer()0-95
%%
seconds_in_current_interval
integer()0-899 (15 mins)
%%
num_valid_intervals
integer()0-96
%%
num_intervals
integer() 0-?IISDN_PP_NUM_INTERVALS_PER_PACKET
%%
pp
pp()
%%
%% %% @spec (PM::binary()) -> pm_rsp_data() %% pm_rsp_data(PM) when is_binary(PM) -> <> = PM, #pm_rsp_data{line=Line, endx=Endx, pm_cmd=Pm_cmd, requested_interval_id=Requested_interval_id, pm_status=Pm_status, current_interval_id=Current_interval_id, seconds_in_current_interval=Seconds_in_current_interval, num_valid_intervals=Num_valid_intervals, num_intervals=Num_intervals, pp=pp(PP)}. %% @type pm_threshold_xing_data(). Performance Monitoring threshold crossing data. %%

A record which includes the following fields:

%%
%%
line
?IISDNlineX
%%
endx
?IISDNpmeNEAR_END or ?IISDNpmeFAR_END
%%
interval_size
IISDNpmi15MIN or IISDNpmi24HR
%%
interval_id
integer()0-95 or 0 for 24hrs
%%
threshold_crossing_mask
?IISDNpmtcmBPV,?IISDNpmtcmEXZ, %% ?IISDNpmtcmLCV, ?IISDNpmtcmPCV, ?IISDNpmtcmCS, %% ?IISDNpmtcmOOFS, ?IISDNpmtcmAISS, ?IISDNpmtcmLES, %% ?IISDNpmtcmCSS, ?IISDNpmtcmES, ?IISDNpmtcmBES, %% ?IISDNpmtcmSES, ?IISDNpmtcmSEFS, ?IISDNpmtcmDM, %% ?IISDNpmtcmUAS
%%
interval
pp()
%%
threshold
pp()
%%
%% %% @spec (PM::binary()) -> pm_rsp_data() %% pm_threshold_xing_data(PM) when is_binary(PM) -> <> = PM, #pm_threshold_xing_data{line=Line, endx=Endx, interval_size=Interval_size, interval_id=Interval_id, threshold_crossing_mask=Threshold_crossing_mask, interval=pp(Interval), threshold=pp(Threshold)}. %% @type pm_fdl_msg_data(). Performance Monitoring message data. %%

A record which includes the following fields:

%%
%%
line
?IISDNlineX
%%
msg_code
integer()FDL maintenance response message
%%
data
binary()
%%
%% %% @spec (FDL::binary()) -> pm_fdl_msg_data() %% pm_fdl_msg_data(FDL) when is_binary(FDL) -> <> = FDL, <> = More, #pm_fdl_msg_data{line=Line, msg_code=MsgCode, data=Data}. %% @type pm_alert_data(). Performance Monitoring alert data. %%

A record which includes the following fields:

%%
%%
alert_type
?IISDNpmaTHRESHOLD_XING, ?IISDNpmaFDL_RX_MOP, %% ?IISDNpmaFDL_RX_BOP
%%
a
pm_threshold_xing_data() %% pm_fdl_msg_data()
%%
%% %% @spec (AD::binary()) -> pm_alert_data() %% pm_alert_data(AD) when is_binary(AD) -> <> = AD, case Alert_type of ?IISDNpmaTHRESHOLD_XING -> #pm_alert_data{alert_type = Alert_type, a = pm_threshold_xing_data(A)}; ?IISDNpmaFDL_RX_MOP -> #pm_alert_data{alert_type = Alert_type, a = pm_fdl_msg_data(A)}; ?IISDNpmaFDL_RX_BOP -> #pm_alert_data{alert_type = Alert_type, a = pm_fdl_msg_data(A)} end.