%%%=======================================================================
%%%
%%% Test from Mats Cronqvist <[email protected]>. The
%%% analysis crasched due to the handling of tuples-as-funs in
%%% hipe_icode_type.erl, and it also exposed a bug when a control flow
%%% path is first analyzed and then shown to be infeasible.
%%%
-file("./spvcOrig.erl", 1).
-module(spvcOrig).
-author(qamarma).
-id('3/190 55-CNA 121 64').
-vsn('/main/Inc4/R2A/R4A/R6A/R7A/R7D/R8B/R10A/R11A/2').
-date('2004-10-26').
-export([gen_set/3,gen_set/4,connect/3,release_comp_nu/3,release_nu/3,timeout/2,restart_spvc/1,restart_multi_spvcs/1,forced_release/1,error_handler/3,get_backoff_table/2,timeout_event/1]).
-export([release_incumbent/2,switch_over/2]).
-export([call_failure/1,get_backoff_table/2]).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/pchTables.hrl", 1).
-hrl_id('2/190 55-CNA 121 08').
-hrl_vsn('/main/Inc3/Inc4/R2A/R3A/R3B/R5A/R6A/R7A/R7D/R8B/13').
-hrl_date('2003-01-24').
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../derived_hrl/mib/AXD301-PCH-MIB.hrl", 1).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/pchTables.hrl", 58).
-record(pchVp, {vplEntry,
vplLastChange,
vplReceiveTrafficDescrIndex = 0,
vplTransmitTrafficDescrIndex = 0,
vplCcIdentifier,
vplConnId,
vplMpId,
vplLeafId,
vplChargingIndicator = 1,
vplRemoteChargingInd = 1,
vplChargablePartyIdentifier,
vplSegmentEndPoint = 2,
vplRowStatus,
vplCastType = 1,
vplConnKind = 1,
vplServiceType = 2,
vplEndPointData,
vplContinuityCheck = 1,
vplUpcNpcMode = 2,
vplPreventInbandCc = 1,
vplMonAisRdi = 2,
vpcAdminStatus = 2,
vplSpvcAutoTarget = 2,
vplSchedulingFlag = 2,
vplApplication,
vplRemoteData,
vpccAdminStatus = 2,
vplContCheckSearch = 1,
vplPmSearch = 1,
vplLastBuffFlagRead,
vplShapingMode = 1,
vplGroupShapingId}).
-record(pchVpDb, {vplEntry,
vplLastChange,
vplReceiveTrafficDescrIndex = 0,
vplTransmitTrafficDescrIndex = 0,
vplCcIdentifier,
vplConnId,
vplMpId,
vplLeafId,
vplAttributes,
vplChargablePartyIdentifier,
vplRowStatus,
vplEndPointData,
vplApplication,
vplRemoteData,
vplLastBuffFlagRead,
vplShapingMode,
vplGroupShapingId}).
-record(pchVpExt, {vplExtEntry,
vplExtReceiveTdIndex,
vplExtTransmitTdIndex,
vplExtUserName = [],
vplExtProviderName = [],
vplExtUserOperator}).
-record(pchVc, {vclEntry,
vclLastChange,
vclReceiveTrafficDescrIndex = 0,
vclTransmitTrafficDescrIndex = 0,
vclCcIdentifier,
vclConnId,
vclMpId,
vclLeafId,
vclChargingIndicator = 1,
vclRemoteChargingInd = 1,
vclChargablePartyIdentifier,
vclPacketDiscard = 2,
vclSegmentEndPoint = 2,
vclRowStatus,
vclCastType = 1,
vclConnKind = 1,
vclContinuityCheck = 1,
vclUpcNpcMode = 2,
vclEndPointData,
vclPreventInbandCc = 1,
vclMonAisRdi = 2,
vclSpvcAutoTarget = 2,
vclSchedulingFlag = 2,
vclApplication,
vclRemoteData,
vcccAdminStatus = 2,
vclContCheckSearch = 1,
vclPmSearch = 1,
vclLastBuffFlagRead,
vclChargingIfChanid,
vclShapingMode = 1}).
-record(pchVcDb, {vclEntry,
vclLastChange,
vclReceiveTrafficDescrIndex = 0,
vclTransmitTrafficDescrIndex = 0,
vclCcIdentifier,
vclConnId,
vclMpId,
vclLeafId,
vclAttributes,
vclChargablePartyIdentifier,
vclRowStatus,
vclEndPointData,
vclApplication,
vclRemoteData,
vclLastBuffFlagRead,
vclChargingIfChanid,
vclShapingMode}).
-record(pchAtd, {tdIndex,
tdType,
tdParam1 = 0,
tdParam2 = 0,
tdParam3 = 0,
tdParam4 = 0,
tdParam5 = 0,
tdTrafficQoSClass = 0,
tdRowStatus = 1,
tdServiceCategory = 6,
tdVcCapability = 1,
tdName = [],
tdUserCounter = 0,
tdUser = []}).
-record(pchAbr, {abrIndex,
abrIcr,
abrTbe = 16277215,
abrFrtt = 0,
abrRdf = 11,
abrRif = 11,
abrNrm = 4,
abrTrm = 7,
abrCdf = 3,
abrAdtf = 50,
abrRowStatus = 1}).
-record(pchIndexNext, {key,
tdIndexNext,
vpccIndexNext,
vcccIndexNext,
scheduledVpCcIndexNext,
scheduledVcCcIndexNext}).
-record(pchSchedVpCc, {schedVpCcIndex,
schedVpCcTarget,
schedVpCcReceiveTdIndex,
schedVpCcTransmitTdIndex,
schedVpCcOpTime,
schedVpCcOpInd,
schedVpCcOpStatus,
schedVpCcTimerRef,
schedVpCcRowStatus,
schedVpCcErrorCode,
schedVpCcUserName = [],
schedVpCcProviderName = []}).
-record(pchVpCc, {vpccId,
vpccUserName = [],
vpccAdminStatus,
vpccApplication,
vpccProviderName = []}).
-record(pchSchedVcCc, {schedVcCcIndex,
schedVcCcTarget,
schedVcCcReceiveTdIndex,
schedVcCcTransmitTdIndex,
schedVcCcOpTime,
schedVcCcOpInd,
schedVcCcOpStatus,
schedVcCcTimerRef,
schedVcCcRowStatus,
schedVcCcErrorCode,
schedVcCcUserName = [],
schedVcCcProviderName = []}).
-record(pchVcCc, {vcccId,
vcccUserName = [],
vcccAdminStatus,
vcccApplication,
vcccProviderName = []}).
-record(pchSigChannels, {et_entry,
cp_entry,
sb_cp_entry,
membership,
status,
sb_status,
application = {0,[]}}).
-record(pchSigChannelExt, {et_entry,
user_name,
provider_name}).
-record(pchApplication, {key,
application,
rights}).
-record(pchCurrAlarm, {key,
type_of_fault,
fault_id}).
-record(pchIfAddress, {ifAddressEntry,
ifAddressRowStatus}).
-record(pchAddressToIf, {address,
if_index}).
-record(pchPreferences, {key,
if_format}).
-record(pchSigChannelCallback, {key,
callback,
function,
args,
data}).
-record(pchTermHcId, {hcId,
vclEntry}).
-record(pchChg, {chgEntry,
chgStatus}).
-record(pchCommState, {key,
ccid,
request,
low_cp_state,
high_cp_state,
et_side,
application,
data,
timestamp,
timer_id,
callback}).
-record(pchBufferedCmd, {key,
resource,
module,
function,
arguments,
data}).
-record(pchAnswerCh, {conn_id,
chg_data,
call_back_cp,
old_rtd,
old_ttd,
old_EpData,
action,
resource,
data,
fail_cause}).
-record(pchAnswerOm, {conn_id}).
-record(ccPch, {rowInd,
admState = 2}).
-record(pchIf, {ilmiVpi = 0,
ilmiVci = 0,
ilmiS = 1,
ilmiT = 5,
ilmiK = 4,
neighborIfName = [],
neighborIpAddr = [0,0,0,0],
maxVciSvc,
overbookingFactor = {0,0},
shapingMode = 0,
maxVpiSvc,
cdvtMultFactor = 100,
scBandwidth1 = 0,
scBandwidth2 = 0,
scBandwidth3 = 0,
scBandwidth4 = 0}).
-record(pchMpTemp, {key,
data}).
-record(pchLatestErrorCode, {key,
errorCode}).
-record(pchRangeTable, {node,
tdIndexRange,
vpccIndexRange,
vcccIndexRange}).
-record(pchIndexBitmaps, {key,
available,
bitmap}).
-record(pchLinkState, {key,
op_state,
last_change}).
-record(pchFailedVpl, {vplEntry,
vplLastChange}).
-record(pchFailedVcl, {vclEntry,
vclLastChange}).
-record(pchStatCounters, {key,
ingress,
egress}).
-record(pchEtStatTable, {index,
value = 0}).
-record(pchAuditResult, {key,
passed,
not_passed,
sizes,
obj_keys}).
-record(pch_fault_reqc, {fault_type,
fault_location}).
-record(pch_cid, {conn_id,
mp_id,
leaf_id}).
-file("./spvcOrig.erl", 207).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/pchI.hrl", 1).
-hrl_id('52/190 55-CNA 121 08 Ux').
-hrl_vsn('/main/R6A/R7A/R7D/R8B/3').
-hrl_date('2002-10-14').
-hrl_author(uabdomo).
-record(pch_vc_rec, {ifIndex,
vpi,
vci,
application}).
-record(pch_vp_rec, {ifIndex,
vpi}).
-record(pch_td_index, {rtd_index,
ttd_index}).
-record(pch_td, {service_cat,
pcr,
scr,
mbs,
mcr,
cdvt,
tagging,
clp_significance}).
-record(pch_call_back_req, {module,
function,
user_data}).
-record(pch_chg_rec, {chg_type,
chg_interface,
chg_chan_id,
chg_party_name}).
-record(pch_polic_rec, {policing,
packet_discard}).
-record(pch_user_name_rec, {user_name}).
-record(pch_shaping_rec, {shaping}).
-record(pch_audit_callback, {mod,
arg}).
-file("./spvcOrig.erl", 208).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/plc.hrl", 1).
-hrl_id('12/190 55-CNA 121 45 Ux').
-hrl_vsn('/main/R6A/R6B/R7A/R7D/R8B/R9A/R11A/4').
-hrl_date('2004-12-07').
-hrl_author(ethrba).
-record(plcQueues, {name,
type,
weight,
maxlength,
owner}).
-record(plcSettings, {flag,
value}).
-record(plcAlarm, {flag,
value}).
-file("./spvcOrig.erl", 209).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/spvcTables.hrl", 1).
-hrl_id('10/190 55-CNA 121 64').
-hrl_vsn('/main/Inc4/R2A/R3A/R3B/R5A/R6A/R7A/R7D/R8B/4').
-hrl_date('2003-02-12').
-hrl_author(etxovp).
-record(spvcVpc, {spvcVpcEntry,
spvcVpcTargetAddress,
spvcVpcTargetSelectType,
spvcVpcTargetVpi,
spvcVpcLastReleaseCause,
spvcVpcLastReleaseDiagnostic,
spvcVpcRetryInterval = 1000,
spvcVpcRetryTimer = 0,
spvcVpcRetryThreshold = 1,
spvcVpcRetryFailures = 0,
spvcVpcRetryLimit = 15,
spvcVpcRowStatus,
spvcVpcUserName = [],
spvcVpcProviderName = [],
currentState,
crankBackCounter = 0,
spvcVpcApplication,
spvcRerCap = false,
spvcRerStatus = false}).
-record(spvcVpcOpState, {state,
timeOfChange}).
-record(spvcVpcPerm, {spvcVpcEntry,
spvcVpcTargetAddress,
spvcVpcTargetSelectType,
spvcVpcTargetVpi,
spvcVpcRetryInterval = 1000,
spvcVpcRetryThreshold = 1,
spvcVpcRetryLimit = 15,
spvcVpcRowStatus,
spvcVpcUserName,
spvcVpcProviderName,
spvcVpcApplication}).
-record(spvcVpcDyn, {spvcVpcEntry,
spvcVpcLastReleaseCause,
spvcVpcLastReleaseDiagnostic,
spvcVpcRetryTimer = 0,
spvcVpcRetryFailures = 0,
currentState,
crankBackCounter = 0}).
-record(spvcVcc, {spvcVccEntry,
spvcVccTargetAddress,
spvcVccTargetSelectType,
spvcVccTargetVpi,
spvcVccTargetVci,
spvcVccLastReleaseCause,
spvcVccLastReleaseDiagnostic,
spvcVccRetryInterval = 1000,
spvcVccRetryTimer = 0,
spvcVccRetryThreshold = 1,
spvcVccRetryFailures = 0,
spvcVccRetryLimit = 15,
spvcVccRowStatus,
spvcVccUserName = [],
spvcVccProviderName = [],
currentState,
crankBackCounter = 0,
spvcVccTargetDlci,
spvcVccTargetType,
spvcVccApplication,
spvcVccFrKey,
spvcVccTranslationMode,
spvcRerCap = false,
spvcRerStatus = false}).
-record(spvcVccOpState, {state,
timeOfChange}).
-record(spvcVccPerm, {spvcVccEntry,
spvcVccTargetAddress,
spvcVccTargetSelectType,
spvcVccTargetVpi,
spvcVccTargetVci,
spvcVccRetryInterval = 1000,
spvcVccRetryThreshold = 1,
spvcVccRetryLimit = 15,
spvcVccRowStatus,
spvcVccUserName,
spvcVccProviderName,
spvcVccTargetDlci,
spvcVccTargetType,
spvcVccApplication,
spvcVccFrKey,
spvcVccTranslationMode = 2}).
-record(spvcVccDyn, {spvcVccEntry,
spvcVccLastReleaseCause,
spvcVccLastReleaseDiagnostic,
spvcVccRetryTimer = 0,
spvcVccRetryFailures = 0,
currentState,
crankBackCounter = 0}).
-record(spvcFailures, {dummy_key,
spvcCallFailuresTrapEnable = 2,
spvcNotificationInterval = 30,
backoff_interval = 0.100000,
delay_factor = 2,
max_delay = 200000}).
-record(spvcCounters, {key,
value}).
-record(spvcEventIndicator, {dummy_key,
spvcTimerInd = 2,
spvcSendEventInd = 2}).
-record(spvcIndexNext, {dummy_key,
schedVccIndexNext = 1,
schedVpcIndexNext = 1}).
-record(spvcHcIdToTp, {hcId,
tpEntry}).
-record(spvcTpToHcId, {tpEntry,
hcId,
orig_number,
orig_vpi,
orig_vci,
orig_dlci,
frKey}).
-record(spvcSchedVpc, {schedVpcIndex,
schedVpcSource,
schedVpcTargetAddr,
schedVpcTargetSelType,
schedVpcTargetVpi,
schedVpcRetryInt,
schedVpcRetryThres,
schedVpcRetryLimit,
schedVpcOpTime,
schedVpcOpInd,
schedVpcOpStatus,
schedVpcTimerRef,
schedVpcRowStatus,
schedVpcUserName,
schedVpcProviderName,
schedVpcFaultCause,
schedVpcRerCap = false}).
-record(spvcSchedVcc, {schedVccIndex,
schedVccSource,
schedVccTargetAddr,
schedVccTargetSelType,
schedVccTargetVpi,
schedVccTargetVci,
schedVccRetryInt,
schedVccRetryThres,
schedVccRetryLimit,
schedVccOpTime,
schedVccOpInd,
schedVccOpStatus,
schedVccTimerRef,
schedVccRowStatus,
schedVccUserName,
schedVccProviderName,
schedVccFaultCause,
schedVccRerCap = false}).
-record(spvcCurrAlarm, {key,
fault_id,
data}).
-record(spvcChg, {key,
data}).
-record(spvcBackoff, {key,
delay_time,
flag}).
-record(spvcAutoVp, {entry,
lastChange,
receiveTrafficDescrIndex,
transmitTrafficDescrIndex,
ccIdentifier,
connId,
mpId,
leafId,
chargingIndicator = 1,
remoteChargingInd = 1,
chargablePartyIdentifier,
segmentEndPoint = 2,
rowStatus,
castType = 1,
connKind,
serviceType = 2,
endPointData,
continuityCheck = 1,
upcNpcMode = 2,
preventInbandCc = 1,
monAisRdi = 2,
adminStatus,
autoTarget = 1,
schedulingFlag = 2,
application = [],
remoteData,
vpccAdminStatus = 2,
contCheckSearch = 1,
pmSearch = 1,
lastBuffFlagRead,
shapingMode = 1,
groupShapingId}).
-record(spvcAutoVc, {entry,
lastChange,
receiveTrafficDescrIndex,
transmitTrafficDescrIndex,
ccIdentifier,
connId,
mpId,
leafId,
chargingIndicator = 1,
remoteChargingInd = 1,
chargablePartyIdentifier,
packetDiscard = 2,
segmentEndPoint = 2,
rowStatus,
castType = 1,
connKind,
continuityCheck = 1,
upcNpcMode = 2,
endPointData,
preventInbandCc = 1,
monAisRdi = 2,
autoTarget = 1,
schedulingFlag = 2,
application = [],
remoteData,
vcccAdminStatus = 2,
contCheckSearch = 1,
pmSearch = 1,
lastBuffFlagRead,
chargingIfChanid,
shapingMode = 1}).
-record(spvcAutoAtd, {index,
type,
param1 = 0,
param2 = 0,
param3 = 0,
param4 = 0,
param5 = 0,
trafficQoSClass = 0,
rowStatus = 1,
serviceCategory = 6,
vcCapability = 1,
name = [],
userCounter = 0}).
-record(spvcAutoAbr, {index,
icr,
tbe = 16277215,
frtt = 0,
rdf = 11,
rif = 11,
nrm = 4,
trm = 7,
cdf = 3,
adtf = 50,
rowStatus = 1}).
-record(spvcLatestErrorCode, {key,
errorCode}).
-record(spvcVcDyn, {vclEntry,
vclCcIdentifier,
vclConnId,
vclMpId,
vclLeafId}).
-record(spvcVpDyn, {vplEntry,
vplCcIdentifier,
vplConnId,
vplMpId,
vplLeafId}).
-record(spvcObj, {spvcEntry,
spvcTargetAddress,
spvcTargetSelectType,
spvcTargetVpi,
spvcTargetVci,
spvcLastReleaseCause,
spvcLastReleaseDiagnostic,
spvcRetryInterval = 1000,
spvcRetryTimer = 0,
spvcRetryThreshold = 1,
spvcRetryFailures = 0,
spvcRetryLimit = 15,
spvcRowStatus,
spvcUserName,
spvcProviderName,
currentState,
spvcTargetDlci,
spvcTargetType,
spvcApplication,
spvcFrKey,
spvcVccTranslationMode = 2,
spvcRerCap = false,
spvcRerStatus = false}).
-record(spvcTargetVc, {entry,
userName = [],
providerName = [],
opState,
rowStatus}).
-record(spvcTargetVp, {entry,
userName = [],
providerName = [],
opState,
rowStatus}).
-record(spvcReestablishTimer, {time,
timer_id,
module,
function,
args}).
-record(spvcRerVp, {entry,
rerCap,
rerData}).
-record(spvcRerVc, {entry,
rerCap,
rerData}).
-record(spvcHcEtStat, {key,
counter = 0}).
-record(spvcSaEtStat, {key,
counter = 0}).
-file("./spvcOrig.erl", 210).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/spvcDefines.hrl", 1).
-hrl_id('41/190 55-CNA 121 64 Ux').
-hrl_vsn('/main/R6A/R7A/R7D/R8B/3').
-hrl_date('2003-02-21').
-hrl_author(etxhebl).
-file("./spvcOrig.erl", 211).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/spvcFr.hrl", 1).
-hrl_id('48/190 55-CNA 121 64 Ux').
-hrl_vsn('/main/R7A/R7D/2').
-hrl_date('2001-12-06').
-hrl_author(etxhtb).
-record(spvcFr, {spvcFrEntry,
spvcFrAtmEntry,
spvcFrTargetAddress,
spvcFrTargetSelectType,
spvcFrTargetIdentifier,
spvcFrTargetVpi,
spvcFrTargetVci,
spvcFrAtmTranslation,
spvcFrLastReleaseCause,
spvcFrLastReleaseDiagnostic,
spvcFrAdminStatus,
spvcFrRetryInterval = 1000,
spvcFrRetryTimer = 0,
spvcFrRetryThreshold = 1,
spvcFrRetryFailures = 0,
spvcFrRetryLimit = 15,
spvcFrRowStatus,
spvcFrUserName,
spvcFrProviderName,
currentState}).
-record(spvcFrPerm, {spvcFrEntry,
spvcFrAtmEntry,
spvcFrAtmTranslation,
spvcFrAdminStatus,
spvcFrConnect}).
-record(spvcFrAddress, {addressEntry,
addressRowStatus}).
-record(spvcFrAddressToIf, {address,
if_index}).
-record(fr_end_point, {ifIndex,
dlci}).
-record(fr_atm_translation, {routedIp = off,
routedOsi = off,
otherRouted = off,
arpTranslation = off}).
-record(link_layer_core_parameters, {outgoing_max_ifs,
incoming_max_ifs}).
-record(priority_and_service_class, {outgoing_transfer_priority,
incoming_transfer_priority,
outgoing_discard_priority,
incoming_discard_priority}).
-file("./spvcOrig.erl", 212).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../derived_hrl/mib/AXD301-PCH-MIB.hrl", 1).
-file("./spvcOrig.erl", 213).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../derived_hrl/mib/AXD301-SPVC-MIB.hrl", 1).
-file("./spvcOrig.erl", 214).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../derived_hrl/mib/AXD301-FRSPVC-MIB.hrl", 1).
-file("./spvcOrig.erl", 215).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/sysDefines.hrl", 1).
-hrl_id('3/190 55-CNA 121 70').
-hrl_vsn('/main/Inc3/Inc4/Inc5/R3B/R4A/R5B/R6A/R7A/R8B/2').
-hrl_date('2002-06-07').
-hrl_author(etxjotj).
-file("./spvcOrig.erl", 216).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/hciMsg.hrl", 1).
-hrl_id('4/190 55-CNA 121 159 Ux').
-hrl_vsn('/main/R7A/R8B/10').
-hrl_date('2003-02-21').
-hrl_author(etxmexa).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/hciComp.hrl", 1).
-hrl_id('3/190 55-CNA 121 159 Ux').
-hrl_vsn('/main/R7A/1').
-hrl_date('00-03-22').
-hrl_author(etxmexa).
-record(hci_comp_info, {required_FC = 0,
desired_FC = 0}).
-record(hci_comp_res, {not_supported_required_FCs,
not_supported_desired_FCs,
all_supported_FCs}).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/hciMsg.hrl", 14).
-record(hci_add_party, {hci_cpn,
hci_aal,
hci_bhli,
hci_blli,
hci_blli_bici,
hci_bsco,
hci_epr,
hci_e2etd,
hci_noti,
hci_cpsa,
hci_clpn,
hci_clpsa,
hci_cpn_soft,
hci_clpn_soft,
hci_geidt_list = [],
hci_dtl_bin_list = [],
hci_pa_list = [],
hci_gat_list = [],
hci_data,
hci_prot_comp}).
-record(hci_add_party_ack, {hci_epr,
hci_aal,
hci_blli,
hci_blli_bici,
hci_e2etd,
hci_noti,
hci_cpn_soft,
hci_cnosa,
hci_cno,
hci_geidt_list = [],
hci_pa_list = [],
hci_gat_list = [],
hci_data,
hci_prot_comp}).
-record(hci_add_party_rej, {hci_cause,
hci_epr,
hci_geidt_list = [],
hci_cb,
hci_pa_list = [],
hci_internal_rel_info,
hci_gat_list = [],
hci_data,
hci_prot_comp}).
-record(hci_alerting, {hci_mci,
hci_unrps,
hci_cdpi,
hci_epr,
hci_prog_list = [],
hci_nbc,
hci_nbhlc,
hci_noti,
hci_geidt_list = [],
hci_pa_list = [],
hci_gat_list = [],
hci_ssie,
hci_data,
hci_prot_comp}).
-record(hci_b_resources, {hci_rem_dataB,
hci_vpiB,
hci_vciB,
hci_data,
hci_prot_comp}).
-record(hci_connect, {hci_mci,
hci_unrps,
hci_aal,
hci_blli,
hci_blli_bici,
hci_epr,
hci_atd,
hci_e2etd,
hci_noti,
hci_abrs,
hci_abra,
hci_nbc,
hci_nbhlc,
hci_nbllc,
hci_prog_list = [],
hci_geidt_list = [],
hci_eqos,
hci_cpn_soft,
hci_cnosa,
hci_cno,
hci_pa_list = [],
hci_gat_list = [],
hci_rem_dataB,
hci_con_dir = both,
hci_ssie,
hci_rer_services,
hci_rer,
hci_opt_traf,
hci_data,
hci_prot_comp}).
-record(hci_drop_party, {hci_cause,
hci_epr,
hci_noti,
hci_geidt_list = [],
hci_pa_list = [],
hci_internal_rel_info,
hci_gat_list = [],
hci_data,
hci_prot_comp}).
-record(hci_local_connect, {hci_rem_data,
hci_con_dir,
hci_data,
hci_prot_comp}).
-record(hci_local_connected, {hci_rem_data,
hci_con_dir,
hci_data,
hci_prot_comp}).
-record(hci_local_disconnect, {hci_discon_dir,
hci_data,
hci_prot_comp}).
-record(hci_local_disconnected, {hci_data,
hci_prot_comp}).
-record(hci_notify, {hci_epr,
hci_noti,
hci_pa_list = [],
hci_gat_list = [],
hci_data,
hci_prot_comp}).
-record(hci_party_alerting, {hci_epr,
hci_noti,
hci_geidt_list = [],
hci_pa_list = [],
hci_gat_list = [],
hci_data,
hci_prot_comp}).
-record(hci_progress, {hci_mci,
hci_unrps,
hci_cdpi,
hci_prog_list = [],
hci_nbc,
hci_nbhlc,
hci_noti,
hci_pa_list = [],
hci_gat_list = [],
hci_data,
hci_prot_comp}).
-record(hci_release, {hci_mci,
hci_unrps,
hci_cause_list = [],
hci_noti,
hci_prog_list = [],
hci_geidt_list = [],
hci_cb,
hci_pa_list = [],
hci_internal_rel_info,
hci_gat_list = [],
hci_ssie,
hci_rer_cause,
hci_data,
hci_prot_comp,
hci_internal_dbg_cc,
hci_internal_dbg_l3}).
-record(hci_setup, {hci_mci,
hci_unrps,
hci_atd,
hci_bbc,
hci_qos,
hci_cpn,
hci_aal,
hci_bhli,
hci_blli_brep,
hci_blli_bici,
hci_bsco,
hci_epr,
hci_lpt,
hci_e2etd,
hci_noti,
hci_abrs,
hci_abra,
hci_prog_list = [],
hci_eqos,
hci_cpsa_list = [],
hci_clpn,
hci_bici_clpn,
hci_clpsa_list = [],
hci_cgpc,
hci_nbc_brep,
hci_nbhlc_list = [],
hci_nbllc_brep,
hci_conss,
hci_geidt_list = [],
hci_cpn_soft,
hci_clpn_soft,
hci_dtl_bin_list = [],
hci_pa_list = [],
hci_ncci,
hci_routing_address,
hci_protocol_internal_info,
hci_gat_list = [],
hci_con_dir = both,
hci_ssie,
hci_rer_services,
hci_rer,
hci_opt_traf,
hci_data_setup,
hci_prot_comp}).
-record(hci_setup_ack, {hci_assign,
hci_rem_dataB,
hci_con_dir = both,
hci_vpiB,
hci_vciB,
hci_data,
hci_prot_comp}).
-record(hci_status, {hci_state,
hci_data,
hci_prot_comp}).
-record(hci_status_enq, {hci_state,
hci_data,
hci_prot_comp}).
-record(hci_remote_data, {hci_prot_type,
hci_data,
hci_dummy1,
hci_dummy2}).
-record(hci_unrec, {hci_mci,
hci_head,
hci_binary,
hci_data,
hci_prot_comp}).
-record(hci_atd, {hci_pci,
hci_apci,
hci_fwd_pcr_clp_0,
hci_bwd_pcr_clp_0,
hci_fwd_pcr_clp_0_1,
hci_bwd_pcr_clp_0_1,
hci_fwd_scr_clp_0,
hci_bwd_scr_clp_0,
hci_fwd_scr_clp_0_1,
hci_bwd_scr_clp_0_1,
hci_fwd_mbs_clp_0,
hci_bwd_mbs_clp_0,
hci_fwd_mbs_clp_0_1,
hci_bwd_mbs_clp_0_1,
hci_best_effort_ind = 0,
hci_fwd_frame_discard = 0,
hci_bwd_frame_discard = 0,
hci_tagging_bwd = 0,
hci_tagging_fwd = 0,
hci_fwd_abr_mcr,
hci_bwd_abr_mcr,
hci_binary}).
-record(hci_bbc, {hci_pci,
hci_bearer_class,
hci_atm_transfer_capability,
hci_user_plane_connection_configuration,
hci_susceptibility_to_clipping,
hci_binary}).
-record(hci_cause, {hci_pci,
hci_location,
hci_cause_value,
hci_diagnostics_list = [],
hci_binary}).
-record(hci_cpn, {hci_pci,
hci_type_of_number,
hci_intern_netw_numb_indic,
hci_numbering_plan_indicator,
hci_number_digits,
hci_orig_native = false}).
-record(hci_clpn, {hci_pci,
hci_type_of_number,
hci_numbering_plan_indicator,
hci_presentation_indicator,
hci_screening_indicator,
hci_number_digits,
hci_incomplete_indicator = 0,
hci_binary}).
-record(hci_cno, {hci_type_of_number,
hci_numbering_plan_indicator,
hci_presentation_indicator,
hci_screening_indicator,
hci_number_digits,
hci_binary}).
-record(hci_cnosa, {hci_binary}).
-record(hci_cpn_soft, {hci_select_type,
hci_soft_vpi,
hci_soft_vci,
hci_soft_dlci,
hci_binary}).
-record(hci_clpn_soft, {hci_soft_vpi,
hci_soft_vci,
hci_soft_dlci,
hci_binary}).
-record(hci_rer_services, {hci_inter_req_hard,
hci_inter_cap_hard,
hci_intra_req_soft,
hci_intra_req_hard,
hci_intra_cap_asym,
hci_intra_cap_sym,
hci_intra_cap_hard,
hci_binary}).
-record(hci_rer, {hci_func_addr,
hci_endpoint_key,
hci_switchover,
hci_incarnation,
hci_pnni_cumul_fw_max_cell_td,
hci_cumul_fw_p2p_cdv,
hci_cumul_bw_p2p_cdv,
hci_binary}).
-record(hci_rer_cause, {hci_rer_rel_cause,
hci_binary}).
-record(hci_opt_traf, {hci_origin,
hci_cumul_fw_aw,
hci_cumul_bw_aw,
hci_binary}).
-record(hci_qos, {hci_pci,
hci_qos_class_fwd,
hci_qos_class_bwd,
hci_binary}).
-record(hci_aal, {hci_pci,
hci_binary}).
-record(hci_bhli, {hci_pci,
hci_binary}).
-record(hci_blli_brep, {hci_brep,
hci_blli_list = []}).
-record(hci_blli, {hci_binary}).
-record(hci_blli_bici, {hci_repeated,
hci_priority,
hci_pci,
hci_binary}).
-record(hci_cpsa, {hci_pci,
hci_binary}).
-record(hci_clpsa, {hci_pci,
hci_binary}).
-record(hci_gat, {hci_binary}).
-record(hci_epr, {hci_epr_type,
hci_epr_value,
hci_epr_flag,
hci_binary}).
-record(hci_eqos, {hci_origin,
hci_acc_fwd_p2p_cdv,
hci_acc_bwd_p2p_cdv,
hci_cum_fwd_p2p_cdv,
hci_cum_bwd_p2p_cdv,
hci_acc_fwd_clr,
hci_acc_bwd_clr,
hci_binary}).
-record(hci_brep, {hci_binary}).
-record(hci_bsco, {hci_binary}).
-record(hci_noti, {hci_binary}).
-record(hci_abrs, {hci_fwd_abr_icr,
hci_bwd_abr_icr,
hci_fwd_abr_tbe,
hci_bwd_abr_tbe,
hci_cum_rm_fix_round_trip,
hci_fwd_rif,
hci_bwd_rif,
hci_fwd_rdf,
hci_bwd_rdf,
hci_binary}).
-record(hci_abra, {hci_fwd_nrm,
hci_fwd_trm,
hci_fwd_cdf,
hci_fwd_atdf,
hci_bwd_nrm,
hci_bwd_trm,
hci_bwd_cdf,
hci_bwd_atdf,
hci_binary}).
-record(hci_prog, {hci_coding_std,
hci_location,
hci_prog_desc,
hci_binary}).
-record(hci_nbc_brep, {hci_brep,
hci_nbc_list = []}).
-record(hci_nbc, {hci_binary}).
-record(hci_nbhlc, {hci_binary}).
-record(hci_nbllc_brep, {hci_brep,
hci_nbllc_list = []}).
-record(hci_nbllc, {hci_binary}).
-record(hci_geidt, {hci_binary}).
-record(hci_conss, {hci_type_of_conn_scope,
hci_conn_scope,
hci_binary}).
-record(hci_e2etd, {hci_pci,
hci_cumul_td,
hci_max_td,
hci_pnni_cumul_td,
hci_pnni_accept_fwd_max_td,
hci_netw_gen}).
-record(hci_cdpi, {hci_pci,
hci_cdpci,
hci_cdpsi,
hci_binary}).
-record(hci_cgpc, {hci_pci,
hci_binary}).
-record(hci_lpt, {hci_pci,
hci_ptype}).
-record(hci_cb, {hci_cb_level,
hci_bl_transit_type,
hci_bl_node_id,
hci_bl_link_proc_node_id,
hci_bl_link_port_id,
hci_bl_link_succ_node_id,
cause_value,
hci_cb_diagnostics,
hci_binary}).
-record(hci_pa, {hci_ie_id,
hci_coding,
hci_action,
hci_length,
hci_binary,
hci_error_type}).
-record(hci_ncci, {hci_pci,
hci_ni,
hci_point_code,
hci_call_id}).
-record(hci_ssie, {hci_ssie_sas = [],
hci_binary}).
-record(hci_sas, {hci_sas_vsn,
hci_sas_transp_ind,
hci_sas_flow_ind,
hci_sas_discard,
hci_sas_scope,
hci_sas_relative_id,
hci_binary}).
-record(hci_data, {hci_hcid,
hci_sender_ifindex,
hci_sender_hcid}).
-record(hci_data_setup, {hci_hcidA,
hci_pidA,
hci_protA,
hci_protB,
hci_portB,
hci_hcidB,
hci_rem_dataA,
hci_assign,
hci_ifindexB,
hci_node_id,
hci_succ_node_id,
hci_ifindexA,
hci_vpiA,
hci_vciA,
hci_cpA,
hci_cpB}).
-record(hci_prot_comp, {hci_requiredFC = 0,
hci_desiredFC = 0}).
-file("./spvcOrig.erl", 217).
-file("/export/localhome/locmacr/wrk/axd_r11/ATS_CRA12002/SPVC_CNA12164/src/../../../inc/ccCd.hrl", 1).
-hrl_id('13/190 55-CNA 121 101 Ux').
-hrl_vsn('/main/R6A/R7A/R8A/R8B/8').
-hrl_date('2003-02-21').
-hrl_author(etxmexa).
-record(ccCdRR, {hcid,
vpi,
vci,
ifindexA,
call_type,
spvc = false,
reserve = yes,
etA,
destdata,
leafdata,
loopdata,
l3,
l3_loop,
cc}).
-record(ccCdRD, {destid,
loopdata,
cc}).
-record(ccCdRL, {leafid,
protTypeB,
loopdata,
l3,
l3_loop,
cc}).
-record(ccCdDD, {hcid,
hcidA,
vpi,
vci,
ifindexB,
portB,
call_type,
spvc = false,
reserve = yes,
protTypeA,
etB,
leafdata,
loopdata,
l3,
l3_loop,
cc}).
-record(ccCdDL, {leafid,
loopdata,
l3,
l3_loop,
cc}).
-record(ccRR, {protTypeA,
remote_dataA,
remote_dataB,
chg_counters,
sc,
chg_decision = on,
cc_loop}).
-record(ccRL, {hcidB,
charging,
cc_loop}).
-record(ccRD, {portB,
ifindexB,
cpB,
vpiB,
vciB,
cc_loop}).
-record(ccDD, {protTypeB,
remote_dataA,
remote_dataB,
ifindexA,
cpA,
vpiA,
vciA,
chg_counters,
sc,
chg_decision = on,
cc_loop}).
-record(ccDL, {cc_loop}).
-record(loopRR, {vpList,
nodeid,
succ_nodeid,
connection_type,
policing,
delay_contrib,
charging = on,
prev_routing_data}).
-record(loopRD, {}).
-record(loopRL, {msg_rec,
providerName,
userName,
partyId,
serviceIfA,
serviceIdA,
serviceIfB,
serviceIdB,
estAw,
dtlLevels}).
-record(loopDD, {nodeid,
succ_nodeid,
vpList,
connection_type,
policing,
assign,
delay_contrib,
charging = on}).
-record(loopDL, {msg_rec,
providerName,
userName,
partyId,
serviceIfA,
serviceIdA,
serviceIfB,
serviceIdB}).
-record(ccLoopRR, {pidB,
qos,
atd,
bbc,
cscope,
e2etd,
eqos,
con_state = none,
con_order = both,
mr_flag,
catch_up_id,
cpA}).
-record(ccLoopRD, {}).
-record(ccLoopRL, {route,
linklist,
routelist,
failurelist = [],
nodeidlist,
cb,
cpn,
dtl,
routing_state,
assign,
timer_counter = 0,
timer_ref,
status_enq_ind,
link_CB,
node_CB,
pnnir_rlp,
pnni_only}).
-record(ccLoopDD, {pidA,
con_state = none,
con_order = both,
mr_flag,
catch_up_id,
cpB}).
-record(ccLoopDL, {timer_counter = 0,
timer_ref,
status_enq_ind}).
-file("./spvcOrig.erl", 218).
-file("/export/localhome/locmacr/built/lib/erlang/lib/snmp-4.1.2/include/STANDARD-MIB.hrl", 1).
-file("./spvcOrig.erl", 219).
error_handler({From,Tag},{M,F,Args},EXITReason) ->
spvcLib:do_report(sccm,M,F,Args,"",EXITReason).
connect(HcId,Connect,Key) ->
debug_disabled,
Obj = spvcDataBase:db_read({spvcObj,Key}),
orig_state_machine(Obj#spvcObj.currentState,connect_nu,Obj,[HcId,Connect]).
release_nu(HcId,Release,Key) ->
debug_disabled,
Obj = spvcDataBase:db_read({spvcObj,Key}),
spvcDataBase:db_delete({spvcHcIdToTp,HcId}),
orig_state_machine(Obj#spvcObj.currentState,release_nu,Obj,[HcId,Release]).
release_comp_nu(HcId,Release_comp,Key) ->
debug_disabled,
Obj = spvcDataBase:db_read({spvcObj,Key}),
spvcDataBase:db_delete({spvcHcIdToTp,HcId}),
orig_state_machine(Obj#spvcObj.currentState,release_comp_nu,Obj,[HcId,Release_comp]).
release_incumbent(HcId,Release) ->
debug_disabled,
release_incumbent2(spvcDataBase:db_read({spvcHcIdToTp,HcId}),Release).
release_incumbent2(SpvcHcIdToTp,Release) ->
release_incumbent3(SpvcHcIdToTp#spvcHcIdToTp.tpEntry,Release).
release_incumbent3({orig,If,Vpi,Vci,Leaf},Release) ->
release_incumbent4({If,Vpi,Vci,Leaf},Release);
release_incumbent3({orig,If,Vpi,Leaf},Release) ->
release_incumbent4({If,Vpi,Leaf},Release).
release_incumbent4(TpKey,Release) ->
Spvc = spvcDataBase:db_read({spvcObj,TpKey}),
active = Spvc#spvcObj.currentState,
orig_state_machine(active,release_incumbent,Spvc,[Release]).
switch_over(HcId,{If,Vpi,Vci}) ->
Key = case {If,Vpi,Vci} of
{If_Value,Vpi_Value,Vci_Value} when integer(Vci_Value) ->
{If_Value,Vpi_Value,Vci_Value,1};
{If_Value,Vpi_Value,_} ->
{If_Value,Vpi_Value,1};
{If_Value,Vpi_Value} ->
{If_Value,Vpi_Value,1}
end,
Spvc = spvcDataBase:db_read({spvcObj,Key}),
do_switch_over(HcId,Spvc);
switch_over(HcId,{If,Vpi}) ->
Key = case {If,Vpi,no_vc} of
{If_Value,Vpi_Value,Vci_Value} when integer(Vci_Value) ->
{If_Value,Vpi_Value,Vci_Value,1};
{If_Value,Vpi_Value,_} ->
{If_Value,Vpi_Value,1};
{If_Value,Vpi_Value} ->
{If_Value,Vpi_Value,1}
end,
Spvc = spvcDataBase:db_read({spvcObj,Key}),
do_switch_over(HcId,Spvc).
do_switch_over(HcId,Spvc) ->
State = Spvc#spvcObj.currentState,
orig_state_machine(State,switch_over,Spvc,[HcId]).
gen_set(Type,Row,Cols) ->
debug_disabled,
gen_set(Type,Row,Cols,undefined).
gen_set(Type,Row,Cols,FrKey) ->
debug_disabled,
case lists:keysearch(case {case Row of
{_,_,_,_} ->
spvcVcc;
{_,_,_} ->
spvcVpc;
{_,_} ->
spvcFr;
[_,_,_,_] ->
spvcVcc;
[_,_,_] ->
spvcVpc;
[_,_] ->
spvcFr
end,rowStatus} of
{spvcVcc,targetAddress} ->
2;
{spvcVcc,selectType} ->
3;
{spvcVcc,targetVpi} ->
18;
{spvcVcc,targetVci} ->
5;
{spvcVcc,releaseCause} ->
6;
{spvcVcc,releaseDiagnostic} ->
7;
{spvcVcc,retryInterval} ->
10;
{spvcVcc,retryTimer} ->
11;
{spvcVcc,retryThreshold} ->
12;
{spvcVcc,retryFailures} ->
13;
{spvcVcc,retryLimit} ->
14;
{spvcVcc,rowStatus} ->
15;
{spvcVcc,restart} ->
9;
{spvcVcc,targetSelectType_any} ->
2;
{spvcVcc,targetSelectType_required} ->
1;
{spvcVpc,targetAddress} ->
2;
{spvcVpc,selectType} ->
3;
{spvcVpc,targetVpi} ->
15;
{spvcVpc,releaseCause} ->
5;
{spvcVpc,releaseDiagnostic} ->
6;
{spvcVpc,retryInterval} ->
9;
{spvcVpc,retryTimer} ->
10;
{spvcVpc,retryThreshold} ->
11;
{spvcVpc,retryFailures} ->
12;
{spvcVpc,retryLimit} ->
13;
{spvcVpc,rowStatus} ->
14;
{spvcVpc,restart} ->
8;
{spvcVpc,targetSelectType_any} ->
2;
{spvcVpc,targetSelectType_required} ->
1;
{spvcFr,targetAddress} ->
3;
{spvcFr,selectType} ->
5;
{spvcFr,identifier} ->
6;
{spvcFr,targetVpi} ->
7;
{spvcFr,targetVci} ->
8;
{spvcFr,translation} ->
9;
{spvcFr,releaseCause} ->
10;
{spvcFr,releaseDiagnostic} ->
11;
{spvcFr,operStatus} ->
12;
{spvcFr,adminStatus} ->
13;
{spvcFr,restart} ->
14;
{spvcFr,retryInterval} ->
15;
{spvcFr,retryTimer} ->
16;
{spvcFr,retryThreshold} ->
17;
{spvcFr,retryFailures} ->
18;
{spvcFr,retryLimit} ->
19;
{spvcFr,lastChange} ->
20;
{spvcFr,rowStatus} ->
21
end,1,Cols) of
{value,{_,4}} ->
debug_disabled,
mnesia:dirty_update_counter(spvcHcEtStat,spvcLib:get_board(hd(Row)),1),
case get_link_state(case Row of
Row when record(Row,spvcObj) ->
case Row#spvcObj.spvcEntry of
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value
end;
Row when record(Row,spvcVcc) ->
{If_Value,_,_,_} = Row#spvcVcc.spvcVccEntry,
If_Value;
Row when record(Row,spvcVpc) ->
{If_Value,_,_} = Row#spvcVpc.spvcVpcEntry,
If_Value;
Row when record(Row,spvcVpcPerm) ->
{If_Value,_,_} = Row#spvcVpcPerm.spvcVpcEntry,
If_Value;
Row when record(Row,spvcVccPerm) ->
{If_Value,_,_,_} = Row#spvcVccPerm.spvcVccEntry,
If_Value;
Row when record(Row,spvcTargetVc) ->
{If_Value,_,_} = Row#spvcTargetVc.entry,
If_Value;
Row when record(Row,spvcTargetVp) ->
{If_Value,_} = Row#spvcTargetVp.entry,
If_Value;
Row when record(Row,pchVc) ->
{If_Value,_,_} = Row#pchVc.vclEntry,
If_Value;
Row when record(Row,pchVp) ->
{If_Value,_} = Row#pchVp.vplEntry,
If_Value;
Row when record(Row,spvcFr) ->
{If_Value,_} = Row#spvcFr.spvcFrEntry,
If_Value;
Row when record(Row,spvcFrPerm) ->
{If_Value,_} = Row#spvcFrPerm.spvcFrEntry,
If_Value;
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value;
{If_Value,_} ->
If_Value;
[If_Value|_] ->
If_Value;
_ ->
error
end) of
disabled ->
orig_state_machine(null,createAndGo_disabled,[],[Row,Cols,Type,FrKey]);
enabled ->
orig_state_machine(null,createAndGo_enabled,[],[Row,Cols,Type,FrKey])
end;
{value,{_,5}} ->
debug_disabled,
mnesia:dirty_update_counter(spvcHcEtStat,spvcLib:get_board(hd(Row)),1),
orig_state_machine(null,createAndWait,[],[Row,Cols,Type,FrKey]);
{value,{_,1}} ->
debug_disabled,
case spvcDataBase:db_read({spvcObj,list_to_tuple(Row)}) of
[] ->
ok;
Spvc ->
case get_link_state(case Row of
Row when record(Row,spvcObj) ->
case Row#spvcObj.spvcEntry of
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value
end;
Row when record(Row,spvcVcc) ->
{If_Value,_,_,_} = Row#spvcVcc.spvcVccEntry,
If_Value;
Row when record(Row,spvcVpc) ->
{If_Value,_,_} = Row#spvcVpc.spvcVpcEntry,
If_Value;
Row when record(Row,spvcVpcPerm) ->
{If_Value,_,_} = Row#spvcVpcPerm.spvcVpcEntry,
If_Value;
Row when record(Row,spvcVccPerm) ->
{If_Value,_,_,_} = Row#spvcVccPerm.spvcVccEntry,
If_Value;
Row when record(Row,spvcTargetVc) ->
{If_Value,_,_} = Row#spvcTargetVc.entry,
If_Value;
Row when record(Row,spvcTargetVp) ->
{If_Value,_} = Row#spvcTargetVp.entry,
If_Value;
Row when record(Row,pchVc) ->
{If_Value,_,_} = Row#pchVc.vclEntry,
If_Value;
Row when record(Row,pchVp) ->
{If_Value,_} = Row#pchVp.vplEntry,
If_Value;
Row when record(Row,spvcFr) ->
{If_Value,_} = Row#spvcFr.spvcFrEntry,
If_Value;
Row when record(Row,spvcFrPerm) ->
{If_Value,_} = Row#spvcFrPerm.spvcFrEntry,
If_Value;
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value;
{If_Value,_} ->
If_Value;
[If_Value|_] ->
If_Value;
_ ->
error
end) of
disabled ->
orig_state_machine(Spvc#spvcObj.currentState,activate_disabled,Spvc,Cols);
enabled ->
orig_state_machine(Spvc#spvcObj.currentState,activate_enabled,Spvc,Cols)
end
end;
{value,{_,6}} ->
debug_disabled,
case spvcDataBase:db_read({spvcObj,list_to_tuple(Row)}) of
[] ->
ok;
Spvc ->
mnesia:dirty_update_counter(spvcHcEtStat,spvcLib:get_board(hd(Row)),- 1),
orig_state_machine(Spvc#spvcObj.currentState,destroy,Spvc,Cols)
end;
{value,{_,2}} ->
debug_disabled,
case spvcDataBase:db_read({spvcObj,list_to_tuple(Row)}) of
[] ->
mnesia:dirty_update_counter(spvcHcEtStat,spvcLib:get_board(hd(Row)),1),
ok;
Spvc ->
orig_state_machine(Spvc#spvcObj.currentState,not_in_service,Spvc,Cols)
end;
false ->
debug_disabled,
Spvc = spvcDataBase:db_read({spvcObj,list_to_tuple(Row)}),
CurrentState = Spvc#spvcObj.currentState,
NewSpvc = set_attrs(Spvc,Cols),
Restart = case {case Row of
{_,_,_,_} ->
spvcVcc;
{_,_,_} ->
spvcVpc;
{_,_} ->
spvcFr;
[_,_,_,_] ->
spvcVcc;
[_,_,_] ->
spvcVpc;
[_,_] ->
spvcFr
end,restart} of
{spvcVcc,targetAddress} ->
2;
{spvcVcc,selectType} ->
3;
{spvcVcc,targetVpi} ->
18;
{spvcVcc,targetVci} ->
5;
{spvcVcc,releaseCause} ->
6;
{spvcVcc,releaseDiagnostic} ->
7;
{spvcVcc,retryInterval} ->
10;
{spvcVcc,retryTimer} ->
11;
{spvcVcc,retryThreshold} ->
12;
{spvcVcc,retryFailures} ->
13;
{spvcVcc,retryLimit} ->
14;
{spvcVcc,rowStatus} ->
15;
{spvcVcc,restart} ->
9;
{spvcVcc,targetSelectType_any} ->
2;
{spvcVcc,targetSelectType_required} ->
1;
{spvcVpc,targetAddress} ->
2;
{spvcVpc,selectType} ->
3;
{spvcVpc,targetVpi} ->
15;
{spvcVpc,releaseCause} ->
5;
{spvcVpc,releaseDiagnostic} ->
6;
{spvcVpc,retryInterval} ->
9;
{spvcVpc,retryTimer} ->
10;
{spvcVpc,retryThreshold} ->
11;
{spvcVpc,retryFailures} ->
12;
{spvcVpc,retryLimit} ->
13;
{spvcVpc,rowStatus} ->
14;
{spvcVpc,restart} ->
8;
{spvcVpc,targetSelectType_any} ->
2;
{spvcVpc,targetSelectType_required} ->
1;
{spvcFr,targetAddress} ->
3;
{spvcFr,selectType} ->
5;
{spvcFr,identifier} ->
6;
{spvcFr,targetVpi} ->
7;
{spvcFr,targetVci} ->
8;
{spvcFr,translation} ->
9;
{spvcFr,releaseCause} ->
10;
{spvcFr,releaseDiagnostic} ->
11;
{spvcFr,operStatus} ->
12;
{spvcFr,adminStatus} ->
13;
{spvcFr,restart} ->
14;
{spvcFr,retryInterval} ->
15;
{spvcFr,retryTimer} ->
16;
{spvcFr,retryThreshold} ->
17;
{spvcFr,retryFailures} ->
18;
{spvcFr,retryLimit} ->
19;
{spvcFr,lastChange} ->
20;
{spvcFr,rowStatus} ->
21
end,
case lists:keysearch(Restart,1,Cols) of
{value,{Restart,1}} ->
orig_state_machine(CurrentState,restart,NewSpvc,Cols);
_ ->
spvcDataBase:db_write(NewSpvc),
ok
end
end,
{noError,0}.
restart_spvc(Key) ->
debug_disabled,
Spvc = spvcDataBase:db_read({spvcObj,Key}),
handle_restart_spvc(Spvc#spvcObj.currentState,Spvc),
ok.
handle_restart_spvc(rest_in_peace,Spvc) ->
debug_disabled,
rest_in_peace(restart,Spvc,undefined);
handle_restart_spvc(_,_) ->
ok.
restart_multi_spvcs(Key) ->
debug_disabled,
Spvc = spvcDataBase:db_read({spvcObj,Key}),
handle_restart_multi_spvcs(Spvc#spvcObj.currentState,Spvc),
ok.
handle_restart_multi_spvcs(rest_in_peace,Spvc) ->
debug_disabled,
handle_restart_spvc(rest_in_peace,Spvc);
handle_restart_multi_spvcs(active,Spvc) ->
debug_disabled,
active(restart,Spvc,undefined);
handle_restart_multi_spvcs(outgoing_callproceeding,Spvc) ->
debug_disabled,
outgoing_callproceeding(restart,Spvc,undefined);
handle_restart_multi_spvcs(release_at_restart,Spvc) ->
debug_disabled,
release_at_restart(restart,Spvc,undefined);
handle_restart_multi_spvcs(wait,Spvc) ->
debug_disabled,
wait(restart,Spvc,undefined);
handle_restart_multi_spvcs(rest_in_peace,Spvc) ->
debug_disabled,
rest_in_peace(restart,Spvc,undefined);
handle_restart_multi_spvcs(_,_) ->
ok.
orig_state_machine(null,createAndGo_enabled,Spvc,Attrs) ->
null(createAndGo_enabled,Spvc,Attrs);
orig_state_machine(null,createAndGo_disabled,Spvc,Attrs) ->
null(createAndGo_disabled,Spvc,Attrs);
orig_state_machine(null,createAndWait,Spvc,Attrs) ->
null(createAndWait,Spvc,Attrs);
orig_state_machine(created,activate_disabled,Spvc,Attrs) ->
created(activate_disabled,Spvc,Attrs);
orig_state_machine(created,activate_enabled,Spvc,Attrs) ->
created(activate_enabled,Spvc,Attrs);
orig_state_machine(created,destroy,Spvc,Attrs) ->
created(destroy,Spvc,Attrs);
orig_state_machine(outgoing_callproceeding,connect_nu,Spvc,Attrs) ->
outgoing_callproceeding(connect_nu,Spvc,Attrs);
orig_state_machine(outgoing_callproceeding,destroy,Spvc,Attrs) ->
outgoing_callproceeding(destroy,Spvc,Attrs);
orig_state_machine(outgoing_callproceeding,restart,Spvc,Attrs) ->
outgoing_callproceeding(restart,Spvc,Attrs);
orig_state_machine(outgoing_callproceeding,release_nu,Spvc,Attrs) ->
case get_link_state_intf(case Spvc of
Spvc when record(Spvc,spvcObj) ->
case Spvc#spvcObj.spvcEntry of
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value
end;
Spvc when record(Spvc,spvcVcc) ->
{If_Value,_,_,_} = Spvc#spvcVcc.spvcVccEntry,
If_Value;
Spvc when record(Spvc,spvcVpc) ->
{If_Value,_,_} = Spvc#spvcVpc.spvcVpcEntry,
If_Value;
Spvc when record(Spvc,spvcVpcPerm) ->
{If_Value,_,_} = Spvc#spvcVpcPerm.spvcVpcEntry,
If_Value;
Spvc when record(Spvc,spvcVccPerm) ->
{If_Value,_,_,_} = Spvc#spvcVccPerm.spvcVccEntry,
If_Value;
Spvc when record(Spvc,spvcTargetVc) ->
{If_Value,_,_} = Spvc#spvcTargetVc.entry,
If_Value;
Spvc when record(Spvc,spvcTargetVp) ->
{If_Value,_} = Spvc#spvcTargetVp.entry,
If_Value;
Spvc when record(Spvc,pchVc) ->
{If_Value,_,_} = Spvc#pchVc.vclEntry,
If_Value;
Spvc when record(Spvc,pchVp) ->
{If_Value,_} = Spvc#pchVp.vplEntry,
If_Value;
Spvc when record(Spvc,spvcFr) ->
{If_Value,_} = Spvc#spvcFr.spvcFrEntry,
If_Value;
Spvc when record(Spvc,spvcFrPerm) ->
{If_Value,_} = Spvc#spvcFrPerm.spvcFrEntry,
If_Value;
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value;
{If_Value,_} ->
If_Value;
[If_Value|_] ->
If_Value;
_ ->
error
end,release_nu) of
disabled ->
outgoing_callproceeding(release_nu_disabled,Spvc,Attrs);
enabled ->
outgoing_callproceeding(release_nu_enabled,Spvc,Attrs)
end;
orig_state_machine(outgoing_callproceeding,release_comp_nu,Spvc,Attrs) ->
case get_link_state_intf(tuple_to_list(Spvc#spvcObj.spvcEntry),release_comp_nu) of
disabled ->
outgoing_callproceeding(release_comp_nu_disabled,Spvc,Attrs);
enabled ->
outgoing_callproceeding(release_comp_nu_enabled,Spvc,Attrs)
end;
orig_state_machine(outgoing_callproceeding,not_in_service,Spvc,Attrs) ->
outgoing_callproceeding(not_in_service,Spvc,Attrs);
orig_state_machine(outgoing_callproceeding,activate_enabled,Spvc,Attrs) ->
ok;
orig_state_machine(outgoing_callproceeding,activate_disabled,Spvc,Attrs) ->
ok;
orig_state_machine(active,destroy,Spvc,Attrs) ->
active(destroy,Spvc,Attrs);
orig_state_machine(active,restart,Spvc,Attrs) ->
active(restart,Spvc,Attrs);
orig_state_machine(active,release_nu,Spvc,Attrs) ->
case cnhChi:get_link_opstate(case Spvc of
Spvc when record(Spvc,spvcObj) ->
case Spvc#spvcObj.spvcEntry of
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value
end;
Spvc when record(Spvc,spvcVcc) ->
{If_Value,_,_,_} = Spvc#spvcVcc.spvcVccEntry,
If_Value;
Spvc when record(Spvc,spvcVpc) ->
{If_Value,_,_} = Spvc#spvcVpc.spvcVpcEntry,
If_Value;
Spvc when record(Spvc,spvcVpcPerm) ->
{If_Value,_,_} = Spvc#spvcVpcPerm.spvcVpcEntry,
If_Value;
Spvc when record(Spvc,spvcVccPerm) ->
{If_Value,_,_,_} = Spvc#spvcVccPerm.spvcVccEntry,
If_Value;
Spvc when record(Spvc,spvcTargetVc) ->
{If_Value,_,_} = Spvc#spvcTargetVc.entry,
If_Value;
Spvc when record(Spvc,spvcTargetVp) ->
{If_Value,_} = Spvc#spvcTargetVp.entry,
If_Value;
Spvc when record(Spvc,pchVc) ->
{If_Value,_,_} = Spvc#pchVc.vclEntry,
If_Value;
Spvc when record(Spvc,pchVp) ->
{If_Value,_} = Spvc#pchVp.vplEntry,
If_Value;
Spvc when record(Spvc,spvcFr) ->
{If_Value,_} = Spvc#spvcFr.spvcFrEntry,
If_Value;
Spvc when record(Spvc,spvcFrPerm) ->
{If_Value,_} = Spvc#spvcFrPerm.spvcFrEntry,
If_Value;
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value;
{If_Value,_} ->
If_Value;
[If_Value|_] ->
If_Value;
_ ->
error
end) of
disabled ->
active(release_nu_disabled,Spvc,Attrs);
enabled ->
active(release_nu_enabled,Spvc,Attrs)
end;
orig_state_machine(active,release_comp_nu,Spvc,Attrs) ->
release_at_restart(release_comp_nu,Spvc,Attrs);
orig_state_machine(active,not_in_service,Spvc,Attrs) ->
active(not_in_service,Spvc,Attrs);
orig_state_machine(active,activate_enabled,Spvc,Attrs) ->
ok;
orig_state_machine(active,activate_disabled,Spvc,Attrs) ->
ok;
orig_state_machine(active,release_incumbent,Spvc,Attrs) ->
active(release_incumbent,Spvc,Attrs);
orig_state_machine(wait,destroy,Spvc,Attrs) ->
wait(destroy,Spvc,Attrs);
orig_state_machine(wait,timeout,Spvc,Attrs) ->
wait(timeout,Spvc,Attrs);
orig_state_machine(wait,restart,Spvc,Attrs) ->
wait(restart,Spvc,Attrs);
orig_state_machine(wait,release_nu,Spvc,Attrs) ->
ok;
orig_state_machine(wait,not_in_service,Spvc,Attrs) ->
wait(not_in_service,Spvc,Attrs);
orig_state_machine(wait,activate_enabled,Spvc,Attrs) ->
wait(timeout,Spvc,Attrs);
orig_state_machine(wait,activate_disabled,Spvc,Attrs) ->
ok;
orig_state_machine(release_at_restart,release_comp_nu,Spvc,Attrs) ->
release_at_restart(release_comp_nu,Spvc,Attrs);
orig_state_machine(release_at_restart,release_nu,Spvc,Attrs) ->
release_at_restart(release_nu,Spvc,Attrs);
orig_state_machine(release_at_restart,connect_nu,Spvc,Attrs) ->
release_at_restart(connect_nu,Spvc,Attrs);
orig_state_machine(release_at_restart,destroy,Spvc,Attrs) ->
release_at_restart(destroy,Spvc,Attrs);
orig_state_machine(release_at_restart,not_in_service,Spvc,Attrs) ->
release_at_restart(not_in_service,Spvc,Attrs);
orig_state_machine(release_at_restart,activate_enabled,Spvc,Attrs) ->
ok;
orig_state_machine(release_at_restart,activate_disabled,Spvc,Attrs) ->
ok;
orig_state_machine(release_request,release_comp_nu,Spvc,Attrs) ->
release_request(release_comp_nu,Spvc,Attrs);
orig_state_machine(release_request,release_nu,Spvc,Attrs) ->
release_request(release_nu,Spvc,Attrs);
orig_state_machine(release_request,destroy,Spvc,Attrs) ->
release_request(destroy,Spvc,Attrs);
orig_state_machine(release_request,not_in_service,Spvc,Attrs) ->
release_request(not_in_service,Spvc,Attrs);
orig_state_machine(release_request,activate_enabled,Spvc,Attrs) ->
ok;
orig_state_machine(release_request,activate_disabled,Spvc,Attrs) ->
ok;
orig_state_machine(rest_in_peace,restart,Spvc,Attrs) ->
rest_in_peace(restart,Spvc,Attrs);
orig_state_machine(rest_in_peace,destroy,Spvc,Attrs) ->
rest_in_peace(destroy,Spvc,Attrs);
orig_state_machine(rest_in_peace,not_in_service,Spvc,Attrs) ->
rest_in_peace(not_in_service,Spvc,Attrs);
orig_state_machine(rest_in_peace,connect_nu,Spvc,Attrs) ->
rest_in_peace(connect_nu,Spvc,Attrs);
orig_state_machine(rest_in_peace,activate_enabled,Spvc,Attrs) ->
rest_in_peace(restart,Spvc,Attrs);
orig_state_machine(rest_in_peace,activate_disabled,Spvc,Attrs) ->
ok;
orig_state_machine(rest_in_peace,release_nu,Spvc,Attrs) ->
ok;
orig_state_machine(rest_in_peace,release_comp_nu,Spvc,Attrs) ->
ok;
orig_state_machine(not_in_service,activate_enabled,Spvc,Attrs) ->
not_in_service(activate_enabled,Spvc,Attrs);
orig_state_machine(not_in_service,activate_disabled,Spvc,Attrs) ->
not_in_service(activate_disabled,Spvc,Attrs);
orig_state_machine(not_in_service,destroy,Spvc,Attrs) ->
not_in_service(destroy,Spvc,Attrs);
orig_state_machine(not_in_service,connect_nu,Spvc,Attrs) ->
not_in_service(connect_nu,Spvc,Attrs);
orig_state_machine(not_in_service,_,Spvc,Attrs) ->
ok;
orig_state_machine(awaiting_switch_over,switch_over,Spvc,[HcId]) ->
awaiting_switch_over(switch_over,Spvc,[HcId]);
orig_state_machine(awaiting_switch_over,activate_disabled,Spvc,Attrs) ->
awaiting_switch_over(activate_disabled,Spvc,Attrs);
orig_state_machine(awaiting_switch_over,destroy,Spvc,Attrs) ->
awaiting_switch_over(destroy,Spvc,Attrs);
orig_state_machine(awaiting_switch_over,restart,Spvc,Attrs) ->
awaiting_switch_over(restart,Spvc,Attrs);
orig_state_machine(awaiting_switch_over,_,Spvc,Attrs) ->
ok;
orig_state_machine(undefined,destroy,Spvc,Attrs) ->
rest_in_peace(destroy,Spvc,Attrs).
null(createAndGo_enabled,[],[Row,Cols,Type,FrKey]) ->
debug_disabled,
Key = list_to_tuple(Row),
Spvc = #spvcObj{spvcEntry = Key,
spvcApplication = Type,
spvcRowStatus = 1,
spvcFrKey = FrKey},
Spvc1 = set_attrs(Spvc,Cols),
{Spvc2,HcId,Setup} = new_state_outgoing_call_proceeding(Spvc1),
pchTpUpdate(case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end),
spvcDataBase:db_write(Spvc2),
setup(HcId,Setup,Spvc2);
null(createAndGo_disabled,[],[Row,Cols,Type,FrKey]) ->
debug_disabled,
case get_link_state_intf(Row,null_createAndGo_disabled) of
disabled ->
Key = list_to_tuple(Row),
Spvc = #spvcObj{spvcEntry = Key,
spvcRowStatus = 1,
currentState = rest_in_peace,
spvcApplication = Type,
spvcFrKey = FrKey},
Spvc1 = set_attrs(Spvc,Cols),
pchTpUpdate(case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end),
set_call_failure_data_and_send_spvcFailingAlarm(Key),
spvcDataBase:db_write(Spvc1);
enabled ->
null(createAndGo_enabled,[],[Row,Cols,Type,FrKey])
end;
null(createAndWait,[],[Row,Cols,Type,FrKey]) ->
debug_disabled,
Key = list_to_tuple(Row),
Spvc = #spvcObj{spvcEntry = Key,
spvcApplication = Type,
spvcFrKey = FrKey},
Spvc1 = new_state_created(Spvc,Cols),
pchTpUpdate(case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end),
spvcDataBase:db_write(Spvc1).
pchTpUpdate({If,Vpi,Vci}) ->
spvcDataBase:db_write(#spvcVcDyn{vclEntry = {If,Vpi,Vci},
vclCcIdentifier = 0});
pchTpUpdate({If,Vpi}) ->
spvcDataBase:db_write(#spvcVpDyn{vplEntry = {If,Vpi},
vplCcIdentifier = 0}).
created(activate_enabled,Spvc,Attrs) ->
debug_disabled,
Spvc1 = set_attrs(Spvc,Attrs),
Spvc2 = Spvc1#spvcObj{spvcRowStatus = 1},
{Spvc3,HcId,HciMsg} = new_state_outgoing_call_proceeding(Spvc1),
spvcDataBase:db_write(Spvc3),
setup(HcId,HciMsg,Spvc3);
created(activate_disabled,Spvc,Attrs) ->
debug_disabled,
Spvc1 = set_attrs(Spvc,Attrs),
Spvc2 = Spvc1#spvcObj{currentState = rest_in_peace,
spvcRowStatus = 1},
update_state(Spvc,4),
spvcDataBase:db_write(Spvc2);
created(destroy,Spvc,Attrs) ->
debug_disabled,
clear(Spvc).
outgoing_callproceeding(connect_nu,Spvc,[HcId,Connect]) ->
debug_disabled,
Spvc1 = new_state_active(Spvc),
case Spvc#spvcObj.spvcTargetSelectType of
2 ->
Cpn = Connect#hci_connect.hci_cpn_soft,
TargetVpi = Cpn#hci_cpn_soft.hci_soft_vpi,
TargetVci = Cpn#hci_cpn_soft.hci_soft_vci,
TargetDlci = Cpn#hci_cpn_soft.hci_soft_dlci,
Spvc2 = Spvc1#spvcObj{spvcTargetSelectType = 1,
spvcTargetVpi = TargetVpi,
spvcTargetVci = TargetVci,
spvcTargetDlci = TargetDlci},
spvcDataBase:db_write(Spvc2);
1 ->
spvcDataBase:db_write(ets,Spvc1);
2 ->
Cpn = Connect#hci_connect.hci_cpn_soft,
TargetVpi = Cpn#hci_cpn_soft.hci_soft_vpi,
TargetDlci = Cpn#hci_cpn_soft.hci_soft_dlci,
Spvc2 = Spvc1#spvcObj{spvcTargetSelectType = 1,
spvcTargetVpi = TargetVpi,
spvcTargetDlci = TargetDlci},
spvcDataBase:db_write(Spvc2);
1 ->
spvcDataBase:db_write(ets,Spvc1)
end,
Key = Spvc#spvcObj.spvcEntry,
PchKey = case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end,
SpvcDyn = case PchKey of
{_,_,_} ->
case spvcDataBase:db_read({spvcVcDyn,PchKey}) of
[] ->
#spvcVcDyn{vclEntry = PchKey,
vclCcIdentifier = 0,
vclConnId = HcId};
SpvcVcDyn ->
SpvcVcDyn#spvcVcDyn{vclEntry = PchKey,
vclConnId = HcId}
end;
{_,_} ->
case spvcDataBase:db_read({spvcVpDyn,PchKey}) of
[] ->
#spvcVpDyn{vplEntry = PchKey,
vplCcIdentifier = 0,
vplConnId = HcId};
SpvcVpDyn ->
SpvcVpDyn#spvcVpDyn{vplEntry = PchKey,
vplConnId = HcId}
end
end,
spvcDataBase:db_write(SpvcDyn),
CbCValue = get(no_of_rerouting),
CbC = case CbCValue of
undefined ->
debug_disabled,
0;
_ ->
CbCValue
end,
SpvcDyn2 = case Key of
{_,_,_,_} ->
case spvcDataBase:db_read({spvcVccDyn,Key}) of
[] ->
#spvcVccDyn{spvcVccEntry = Key,
crankBackCounter = CbC};
SpvcVccDyn ->
SpvcVccDyn#spvcVccDyn{spvcVccEntry = Key,
crankBackCounter = CbC}
end;
{_,_,_} ->
case spvcDataBase:db_read({spvcVpcDyn,Key}) of
[] ->
#spvcVpcDyn{spvcVpcEntry = Key,
crankBackCounter = CbC};
SpvcVpcDyn ->
SpvcVpcDyn#spvcVpcDyn{spvcVpcEntry = Key,
crankBackCounter = CbC}
end
end,
spvcDataBase:db_write(SpvcDyn2),
NewPch = spvcDataBase:db_read({pch,PchKey}),
spvcLib:clear_spvcStillTryingAlarm(Key),
case Spvc#spvcObj.spvcFrKey of
undefined ->
spvcLib:ilmi_change(PchKey,1),
ok;
FrEndPoint ->
SpvcFrObj = spvcDataBase:db_read({spvcFrPerm,FrEndPoint}),
NewSpvcFrObj = SpvcFrObj#spvcFrPerm{spvcFrConnect = 3},
spvcDataBase:db_write(NewSpvcFrObj),
spvcLib:ilmi_change(PchKey,1),
set_fr_atm_iw_admin_state(FrEndPoint,up,Spvc)
end;
outgoing_callproceeding(restart,Spvc,_) ->
Key = Spvc#spvcObj.spvcEntry,
debug_disabled,
Spvc1 = new_state_release_at_restart(Spvc),
spvcDataBase:db_write(ets,Spvc1),
spvcLib:clear_spvcStillTryingAlarm(Key);
outgoing_callproceeding(release_nu_enabled,Spvc,[HcId,HciMsg]) ->
debug_disabled,
Spvc1 = new_state_rest_in_peace_or_wait(Spvc,[HcId,HciMsg]),
[CcCause|_] = HciMsg#hci_release.hci_cause_list,
Spvc2 = Spvc1#spvcObj{spvcLastReleaseCause = CcCause#hci_cause.hci_cause_value,
spvcLastReleaseDiagnostic = CcCause#hci_cause.hci_diagnostics_list},
spvcDataBase:db_write(ets,Spvc2);
outgoing_callproceeding(release_nu_disabled,Spvc,[HcId,Release]) ->
debug_disabled,
Spvc1 = new_state_rest_in_peace(Spvc),
[CcCause|_] = Release#hci_release.hci_cause_list,
Spvc2 = Spvc1#spvcObj{spvcLastReleaseCause = CcCause#hci_cause.hci_cause_value,
spvcLastReleaseDiagnostic = CcCause#hci_cause.hci_diagnostics_list},
spvcDataBase:db_write(ets,Spvc2),
spvcLib:clear_spvcStillTryingAlarm(Spvc#spvcObj.spvcEntry);
outgoing_callproceeding(release_comp_nu_enabled,Spvc,[HcId,Release_complete]) ->
debug_disabled,
Spvc1 = new_state_rest_in_peace_or_wait(Spvc,[HcId,Release_complete]),
spvcDataBase:db_write(ets,Spvc1);
outgoing_callproceeding(release_comp_nu_disabled,Spvc,[HcId,Release_complete]) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = new_state_rest_in_peace(Spvc),
spvcDataBase:db_write(ets,Spvc1),
spvcLib:clear_spvcStillTryingAlarm(Key);
outgoing_callproceeding(destroy,Spvc,_) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = new_state_release_request(Spvc),
spvcDataBase:db_write(ets,Spvc1),
SpvcTpToHcId = read_spvcTpToHcId(Key),
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(a_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc1),
spvcLib:clear_spvcStillTryingAlarm(Key);
outgoing_callproceeding(not_in_service,Spvc,_) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = new_state_not_in_service(Spvc),
spvcDataBase:db_write(Spvc1),
SpvcTpToHcId = read_spvcTpToHcId(Key),
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(a_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc1),
spvcLib:clear_spvcStillTryingAlarm(Key).
active(restart,Spvc,_) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = new_state_release_at_restart(Spvc),
spvcDataBase:db_write(ets,Spvc1),
PchKey = case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end,
spvcLib:ilmi_change(PchKey,2),
case Spvc#spvcObj.spvcFrKey of
undefined ->
ok;
FrEndPoint ->
set_fr_atm_iw_admin_state(FrEndPoint,down,Spvc)
end;
active(release_nu_enabled,Spvc,[HcId,Release]) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = new_state_rest_in_peace_or_wait(Spvc,[HcId,Release]),
[CcCause|_] = Release#hci_release.hci_cause_list,
Spvc2 = Spvc1#spvcObj{spvcLastReleaseCause = CcCause#hci_cause.hci_cause_value,
spvcLastReleaseDiagnostic = CcCause#hci_cause.hci_diagnostics_list},
spvcDataBase:db_write(ets,Spvc2),
PchKey = case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end,
spvcLib:ilmi_change(PchKey,2),
case Spvc#spvcObj.spvcFrKey of
undefined ->
ok;
FrEndPoint ->
set_fr_atm_iw_admin_state(FrEndPoint,down,Spvc)
end;
active(release_nu_disabled,Spvc,[HcId,Release]) ->
debug_disabled,
case get_link_state_intf(case Spvc of
Spvc when record(Spvc,spvcObj) ->
case Spvc#spvcObj.spvcEntry of
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value
end;
Spvc when record(Spvc,spvcVcc) ->
{If_Value,_,_,_} = Spvc#spvcVcc.spvcVccEntry,
If_Value;
Spvc when record(Spvc,spvcVpc) ->
{If_Value,_,_} = Spvc#spvcVpc.spvcVpcEntry,
If_Value;
Spvc when record(Spvc,spvcVpcPerm) ->
{If_Value,_,_} = Spvc#spvcVpcPerm.spvcVpcEntry,
If_Value;
Spvc when record(Spvc,spvcVccPerm) ->
{If_Value,_,_,_} = Spvc#spvcVccPerm.spvcVccEntry,
If_Value;
Spvc when record(Spvc,spvcTargetVc) ->
{If_Value,_,_} = Spvc#spvcTargetVc.entry,
If_Value;
Spvc when record(Spvc,spvcTargetVp) ->
{If_Value,_} = Spvc#spvcTargetVp.entry,
If_Value;
Spvc when record(Spvc,pchVc) ->
{If_Value,_,_} = Spvc#pchVc.vclEntry,
If_Value;
Spvc when record(Spvc,pchVp) ->
{If_Value,_} = Spvc#pchVp.vplEntry,
If_Value;
Spvc when record(Spvc,spvcFr) ->
{If_Value,_} = Spvc#spvcFr.spvcFrEntry,
If_Value;
Spvc when record(Spvc,spvcFrPerm) ->
{If_Value,_} = Spvc#spvcFrPerm.spvcFrEntry,
If_Value;
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value;
{If_Value,_} ->
If_Value;
[If_Value|_] ->
If_Value;
_ ->
error
end,active_release_nu_disabled) of
disabled ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = Spvc#spvcObj{currentState = rest_in_peace},
[CcCause|_] = Release#hci_release.hci_cause_list,
Spvc2 = Spvc1#spvcObj{spvcLastReleaseCause = CcCause#hci_cause.hci_cause_value,
spvcLastReleaseDiagnostic = CcCause#hci_cause.hci_diagnostics_list},
PchKey = case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end,
spvcLib:ilmi_change(PchKey,2),
update_state(Spvc,4),
spvcDataBase:db_write(ets,Spvc2),
case Spvc#spvcObj.spvcFrKey of
undefined ->
ok;
FrEndPoint ->
set_fr_atm_iw_admin_state(FrEndPoint,down,Spvc)
end;
enabled ->
active(release_nu_enabled,Spvc,[HcId,Release])
end;
active(destroy,Spvc,_) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = new_state_release_request(Spvc),
spvcDataBase:db_write(ets,Spvc1),
PchKey = case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end,
spvcLib:ilmi_change(PchKey,2),
SpvcTpToHcId = read_spvcTpToHcId(Key),
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(a_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc);
active(not_in_service,Spvc,_) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = new_state_not_in_service(Spvc),
spvcDataBase:db_write(Spvc1),
PchKey = case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end,
spvcLib:ilmi_change(PchKey,2),
SpvcTpToHcId = read_spvcTpToHcId(Key),
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(a_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc1),
case Spvc#spvcObj.spvcFrKey of
undefined ->
ok;
FrEndPoint ->
set_fr_atm_iw_admin_state(FrEndPoint,down,Spvc)
end;
active(release_incumbent,Spvc,[Release]) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = new_state_awaiting_switch_over(Spvc),
spvcDataBase:db_write(Spvc1),
SpvcTpToHcId = read_spvcTpToHcId(Key),
spvcManager:release_un(a_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc1).
read_spvcTpToHcId({If,Vpi,Vci,Leaf}) ->
spvcDataBase:db_read({spvcTpToHcId,{orig,If,Vpi,Vci,Leaf}});
read_spvcTpToHcId({If,Vpi,Leaf}) ->
spvcDataBase:db_read({spvcTpToHcId,{orig,If,Vpi,Leaf}}).
release_request(release_nu,Spvc,[HcId,Release]) ->
debug_disabled,
clear(Spvc);
release_request(release_comp_nu,Spvc,[HcId,Release_comp]) ->
debug_disabled,
clear(Spvc);
release_request(destroy,Spvc,_) ->
debug_disabled,
case Spvc#spvcObj.spvcEntry of
{If,Vpi,Vci,Leaf} ->
case spvcDataBase:db_read({spvcTpToHcId,{orig,If,Vpi,Vci,Leaf}}) of
SpvcTpToHcId ->
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(a_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc),
clear(Spvc);
_ ->
ok
end;
{If,Vpi,Leaf} ->
case spvcDataBase:db_read({spvcTpToHcId,{orig,If,Vpi,Leaf}}) of
SpvcTpToHcId ->
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(a_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc),
clear(Spvc);
_ ->
ok
end
end,
ok;
release_request(not_in_service,Spvc,_) ->
debug_disabled,
ok.
release_at_restart(release_nu,Spvc,[HcId,Release]) ->
debug_disabled,
{Spvc1,NewHcId,Setup} = new_state_outgoing_call_proceeding(Spvc),
[CcCause|_] = Release#hci_release.hci_cause_list,
Spvc2 = Spvc1#spvcObj{spvcLastReleaseCause = CcCause#hci_cause.hci_cause_value,
spvcLastReleaseDiagnostic = CcCause#hci_cause.hci_diagnostics_list},
spvcDataBase:db_write(ets,Spvc2),
timer:sleep(500),
setup(NewHcId,Setup,Spvc2);
release_at_restart(release_comp_nu,Spvc,[HcId,Release_complete]) ->
debug_disabled,
{Spvc1,NewHcId,Setup} = new_state_outgoing_call_proceeding(Spvc),
Spvc2 = Spvc1#spvcObj{spvcLastReleaseCause = 31,
spvcLastReleaseDiagnostic = []},
spvcDataBase:db_write(ets,Spvc2),
timer:sleep(500),
setup(NewHcId,Setup,Spvc1);
release_at_restart(connect_nu,Spvc,_) ->
debug_disabled,
ok;
release_at_restart(destroy,Spvc,_) ->
debug_disabled,
Spvc1 = new_state_release_request(Spvc),
spvcDataBase:db_write(ets,Spvc1);
release_at_restart(restart,Spvc,_) ->
debug_disabled,
Spvc1 = new_state_release_at_restart(Spvc);
release_at_restart(not_in_service,Spvc,_) ->
debug_disabled,
Spvc1 = new_state_not_in_service(Spvc),
spvcDataBase:db_write(Spvc1).
wait(timeout,Spvc,_) ->
debug_disabled,
{Spvc1,HcId,Setup} = new_state_outgoing_call_proceeding(Spvc),
spvcDataBase:db_write(ets,Spvc1),
setup(HcId,Setup,Spvc1);
wait(destroy,Spvc,_) ->
debug_disabled,
spvcLib:clear_spvcStillTryingAlarm(Spvc#spvcObj.spvcEntry),
clear(Spvc);
wait(restart,Spvc,_) ->
debug_disabled,
{Spvc1,HcId,Setup} = new_state_outgoing_call_proceeding(Spvc#spvcObj{spvcRetryFailures = 0}),
spvcDataBase:db_write(ets,Spvc1),
spvcReestablishTimer:cancel(Spvc#spvcObj.spvcEntry),
spvcLib:clear_spvcStillTryingAlarm(Spvc#spvcObj.spvcEntry),
setup(HcId,Setup,Spvc1);
wait(not_in_service,Spvc,_) ->
debug_disabled,
Spvc1 = new_state_not_in_service(Spvc),
spvcDataBase:db_write(Spvc1),
spvcLib:clear_spvcStillTryingAlarm(Spvc#spvcObj.spvcEntry).
rest_in_peace(restart,Spvc,_) ->
debug_disabled,
{Spvc1,HcId,Setup} = new_state_outgoing_call_proceeding(Spvc#spvcObj{spvcRetryFailures = 0}),
spvcDataBase:db_write(ets,Spvc1),
setup(HcId,Setup,Spvc1),
sccmManager:cast_to_sccm(spvcLib:get_cp(om_node),spvcLib,clear_spvcFailingAlarm,[spvcLib:get_membership(node())]);
rest_in_peace(destroy,Spvc,_) ->
debug_disabled,
sccmManager:cast_to_sccm(spvcLib:get_cp(om_node),spvcLib,clear_spvcFailingAlarm,[spvcLib:get_membership(node())]),
clear(Spvc);
rest_in_peace(connect_nu,Spvc,_) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
SpvcTpToHcId = read_spvcTpToHcId(Key),
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(b_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc);
rest_in_peace(not_in_service,Spvc,_) ->
debug_disabled,
Spvc1 = new_state_not_in_service(Spvc),
spvcDataBase:db_write(Spvc1),
sccmManager:cast_to_sccm(spvcLib:get_cp(om_node),spvcLib,clear_spvcFailingAlarm,[spvcLib:get_membership(node())]).
not_in_service(activate_enabled,Spvc,_) ->
debug_disabled,
{Spvc1,HcId,Setup} = new_state_outgoing_call_proceeding(Spvc#spvcObj{spvcRetryFailures = 0}),
spvcDataBase:db_write(Spvc1#spvcObj{spvcRowStatus = 1}),
setup(HcId,Setup,Spvc1);
not_in_service(activate_disabled,Spvc,_) ->
debug_disabled,
Spvc1 = new_state_rest_in_peace(Spvc),
spvcDataBase:db_write(Spvc1#spvcObj{spvcRowStatus = 1});
not_in_service(connect_nu,Spvc,_) ->
debug_disabled,
Spvc1 = new_state_rest_in_peace(Spvc),
spvcDataBase:db_write(Spvc1#spvcObj{spvcRowStatus = 1}),
Key = Spvc#spvcObj.spvcEntry,
SpvcTpToHcId = read_spvcTpToHcId(Key),
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(b_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc1);
not_in_service(destroy,Spvc,_) ->
debug_disabled,
clear(Spvc).
awaiting_switch_over(switch_over,Spvc,[HcId]) ->
debug_disabled,
Spvc1 = Spvc#spvcObj{currentState = active},
Index = Spvc#spvcObj.spvcEntry,
TpIndex = create_tp_index(Index),
spvcDataBase:db_write(Spvc1),
ets:insert(spvcTpToHcId,#spvcTpToHcId{tpEntry = TpIndex,
hcId = HcId}),
ets:insert(spvcHcIdToTp,#spvcHcIdToTp{tpEntry = TpIndex,
hcId = HcId}),
update_dyn_table_hcid(Index,HcId),
ok;
awaiting_switch_over(activate_disabled,Spvc,Attrs) ->
Spvc1 = new_state_rest_in_peace(Spvc),
spvcDataBase:db_write(Spvc1),
ok;
awaiting_switch_over(restart,Spvc,Attrs) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Spvc1 = new_state_release_at_restart(Spvc),
spvcDataBase:db_write(ets,Spvc1),
PchKey = case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end,
spvcLib:ilmi_change(PchKey,2),
case Spvc#spvcObj.spvcFrKey of
undefined ->
ok;
FrEndPoint ->
set_fr_atm_iw_admin_state(FrEndPoint,down,Spvc)
end;
awaiting_switch_over(destroy,Spvc,Attrs) ->
clear(Spvc).
create_tp_index({If,Vpi,Vci,Leaf}) ->
list_to_tuple([orig,If,Vpi,Vci,Leaf]);
create_tp_index({If,Vpi,Leaf}) ->
list_to_tuple([orig,If,Vpi,Leaf]).
update_dyn_table_hcid({If,Vpi,Vci,Leaf},HcId) ->
[VcDyn] = ets:lookup(spvcVcDyn,{If,Vpi,Vci}),
ets:insert(spvcVcDyn,VcDyn#spvcVcDyn{vclConnId = HcId});
update_dyn_table_hcid({If,Vpi,Leaf},HcId) ->
[VpDyn] = ets:lookup(spvcVpDyn,{If,Vpi}),
ets:insert(spvcVpDyn,VpDyn#spvcVpDyn{vplConnId = HcId}).
new_state_outgoing_call_proceeding(Spvc) ->
debug_disabled,
Spvc1 = Spvc#spvcObj{spvcRowStatus = 1,
currentState = outgoing_callproceeding},
Key = Spvc1#spvcObj.spvcEntry,
update_state(Spvc,outgoing_callproceeding),
PchKey = case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end,
{FwdAtdIndex,BwdAtdIndex} = case PchKey of
{_,_,_} ->
Vc = spvcDataBase:db_read({pchVc,PchKey}),
{Vc#pchVc.vclReceiveTrafficDescrIndex,Vc#pchVc.vclTransmitTrafficDescrIndex};
{_,_} ->
Vp = spvcDataBase:db_read({pchVp,PchKey}),
{Vp#pchVp.vplReceiveTrafficDescrIndex,Vp#pchVp.vplTransmitTrafficDescrIndex}
end,
FwdPchAtd = spvcDataBase:db_read({pchAtd,FwdAtdIndex}),
BwdPchAtd = spvcDataBase:db_read({pchAtd,BwdAtdIndex}),
Row = tuple_to_list(Key),
HcId = spvcLib:create_hcid(Row,case Row of
Row when record(Row,spvcObj) ->
case Row#spvcObj.spvcEntry of
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value
end;
Row when record(Row,spvcVcc) ->
{If_Value,_,_,_} = Row#spvcVcc.spvcVccEntry,
If_Value;
Row when record(Row,spvcVpc) ->
{If_Value,_,_} = Row#spvcVpc.spvcVpcEntry,
If_Value;
Row when record(Row,spvcVpcPerm) ->
{If_Value,_,_} = Row#spvcVpcPerm.spvcVpcEntry,
If_Value;
Row when record(Row,spvcVccPerm) ->
{If_Value,_,_,_} = Row#spvcVccPerm.spvcVccEntry,
If_Value;
Row when record(Row,spvcTargetVc) ->
{If_Value,_,_} = Row#spvcTargetVc.entry,
If_Value;
Row when record(Row,spvcTargetVp) ->
{If_Value,_} = Row#spvcTargetVp.entry,
If_Value;
Row when record(Row,pchVc) ->
{If_Value,_,_} = Row#pchVc.vclEntry,
If_Value;
Row when record(Row,pchVp) ->
{If_Value,_} = Row#pchVp.vplEntry,
If_Value;
Row when record(Row,spvcFr) ->
{If_Value,_} = Row#spvcFr.spvcFrEntry,
If_Value;
Row when record(Row,spvcFrPerm) ->
{If_Value,_} = Row#spvcFrPerm.spvcFrEntry,
If_Value;
{If_Value,_,_,_} ->
If_Value;
{If_Value,_,_} ->
If_Value;
{If_Value,_} ->
If_Value;
[If_Value|_] ->
If_Value;
_ ->
error
end),
Setup = spvcEncode:encode_cc_setup(Row,Spvc1,FwdPchAtd,BwdPchAtd),
debug_disabled,
debug_disabled,
debug_disabled,
{Spvc1,HcId,Setup}.
new_state_release_request(Spvc) ->
debug_disabled,
update_state(Spvc,release_request),
Spvc#spvcObj{currentState = release_request}.
new_state_release_at_restart(Spvc) ->
debug_disabled,
Spvc1 = Spvc#spvcObj{spvcRetryFailures = 0,
currentState = release_at_restart},
update_state(Spvc,release_at_restart),
HcId = spvcEncode:encode_cc_hcid(Spvc1#spvcObj.spvcEntry),
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(a_side,HcId,Release,Spvc1),
Spvc1.
new_state_rest_in_peace_or_wait(Spvc,[HcId,HciMsg]) ->
debug_disabled,
Spvc1 = Spvc#spvcObj{spvcRetryFailures = Spvc#spvcObj.spvcRetryFailures + 1},
case check_limits(Spvc1) of
{ok,ok,no_retries} ->
send_spvcFailingAlarm(Spvc#spvcObj.spvcEntry),
update_state(Spvc,4),
spvcLib:clear_spvcStillTryingAlarm(Spvc#spvcObj.spvcEntry),
Spvc1#spvcObj{currentState = rest_in_peace};
{ok,ok,_} ->
Spvc2 = Spvc1#spvcObj{spvcRetryTimer = time(),
currentState = wait},
update_state(Spvc,wait),
start_timer(wait,Spvc2),
Spvc2;
{retry_threshold,ok,no_retries} ->
Spvc2 = Spvc1#spvcObj{currentState = rest_in_peace},
update_state(Spvc,4),
send_call_failure(Spvc),
send_spvcFailingAlarm(Spvc#spvcObj.spvcEntry),
spvcLib:clear_spvcStillTryingAlarm(Spvc#spvcObj.spvcEntry),
Spvc2;
{retry_threshold,ok,_} ->
Spvc2 = Spvc1#spvcObj{spvcRetryTimer = time(),
currentState = wait},
update_state(Spvc,wait),
send_call_failure(Spvc2),
start_timer(wait,Spvc2),
Spvc2;
{ok,retry_limit,_} ->
send_spvcFailingAlarm(Spvc#spvcObj.spvcEntry),
update_state(Spvc,4),
spvcLib:clear_spvcStillTryingAlarm(Spvc#spvcObj.spvcEntry),
Spvc1#spvcObj{currentState = rest_in_peace};
{retry_threshold,retry_limit,_} ->
Spvc2 = Spvc1#spvcObj{currentState = rest_in_peace},
update_state(Spvc,4),
send_call_failure(Spvc2),
send_spvcFailingAlarm(Spvc#spvcObj.spvcEntry),
spvcLib:clear_spvcStillTryingAlarm(Spvc#spvcObj.spvcEntry),
Spvc2
end.
send_call_failure(Spvc) ->
case Spvc#spvcObj.spvcRetryThreshold of
0 ->
ok;
_ ->
sccmManager:cast_to_sccm(spvcLib:get_cp(om_node),spvcOrig,call_failure,[Spvc])
end.
new_state_rest_in_peace(Spvc) ->
debug_disabled,
update_state(Spvc,4),
Spvc1 = Spvc#spvcObj{spvcRetryFailures = Spvc#spvcObj.spvcRetryFailures + 1},
send_spvcFailingAlarm(Spvc#spvcObj.spvcEntry),
case check_limits(Spvc1) of
{ok,_,_} ->
Spvc1#spvcObj{currentState = rest_in_peace};
{retry_threshold,_,_} ->
Spvc2 = Spvc1#spvcObj{currentState = rest_in_peace},
case Spvc2#spvcObj.spvcRetryThreshold of
0 ->
ok;
_ ->
sccmManager:cast_to_sccm(spvcLib:get_cp(om_node),spvcOrig,call_failure,[Spvc2])
end,
Spvc2
end.
new_state_active(Spvc) ->
debug_disabled,
update_state(Spvc,3),
Spvc#spvcObj{spvcRetryFailures = 0,
currentState = active}.
new_state_created(Spvc,SetCols) ->
debug_disabled,
update_state(Spvc,created),
case spvcSNMP:is_all_values(case Spvc#spvcObj.spvcEntry of
{_,_,_,_} ->
spvcVcc;
{_,_,_} ->
spvcVpc;
{_,_} ->
spvcFr;
[_,_,_,_] ->
spvcVcc;
[_,_,_] ->
spvcVpc;
[_,_] ->
spvcFr
end,SetCols) of
true ->
Spvc1 = Spvc#spvcObj{spvcRowStatus = 2,
currentState = created},
set_attrs(Spvc1,SetCols);
false ->
Spvc1 = Spvc#spvcObj{spvcRowStatus = 3,
currentState = created},
set_attrs(Spvc1,SetCols)
end.
new_state_not_in_service(Spvc) ->
debug_disabled,
update_state(Spvc,not_in_service),
Spvc#spvcObj{currentState = not_in_service,
spvcRowStatus = 2}.
new_state_awaiting_switch_over(Spvc) ->
debug_disabled,
Spvc#spvcObj{currentState = awaiting_switch_over}.
update_state(Spvc,NewState) ->
State = Spvc#spvcObj.currentState,
SpvcEntry = Spvc#spvcObj.spvcEntry,
debug_disabled,
spvcLib:update_state({State,SpvcEntry},NewState).
send_spvcFailingAlarm(Key) ->
debug_disabled,
rpc:cast(spvcLib:get_cp(om_node),spvcLib,send_spvcFailingAlarm,[Key]).
set_call_failure_data_and_send_spvcFailingAlarm({If,Vpi,Leaf}) ->
debug_disabled,
Spvc = spvcDataBase:db_read({spvcObj,{If,Vpi,Leaf}}),
if
Spvc == [] ->
ok;
true ->
spvcLib:update_state({Spvc#spvcObj.currentState,{If,Vpi,Leaf}},4)
end;
set_call_failure_data_and_send_spvcFailingAlarm({If,Vpi,Vci,Leaf}) ->
debug_disabled,
Spvc = spvcDataBase:db_read({spvcObj,{If,Vpi,Vci,Leaf}}),
if
Spvc == [] ->
ok;
true ->
spvcLib:update_state({Spvc#spvcObj.currentState,{If,Vpi,Vci,Leaf}},4)
end.
set_attrs(Spvc,SetCols) ->
case Spvc#spvcObj.spvcEntry of
{_,_,_,_} ->
set_attrs_spvcc(Spvc,SetCols);
{_,_,_} ->
set_attrs_spvpc(Spvc,SetCols)
end.
set_attrs_spvcc(Spvc,[{2,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetAddress = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{3,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetSelectType = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{18,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetVpi = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{4,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetVpi = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{5,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetVci = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{6,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcLastReleaseCause = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{7,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcLastReleaseDiagnostic = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{10,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryInterval = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{11,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryTimer = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{12,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryThreshold = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{13,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryFailures = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{14,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryLimit = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{16,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetDlci = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[{17,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetType = Value},
set_attrs_spvcc(Spvc1,T);
set_attrs_spvcc(Spvc,[_|T]) ->
set_attrs_spvcc(Spvc,T);
set_attrs_spvcc(Spvc,[]) ->
debug_disabled,
Spvc.
set_attrs_spvpc(Spvc,[{2,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetAddress = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{3,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetSelectType = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{15,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetVpi = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{4,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcTargetVpi = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{5,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcLastReleaseCause = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{6,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcLastReleaseDiagnostic = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{9,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryInterval = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{10,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryTimer = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{11,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryThreshold = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{12,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryFailures = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[{13,Value}|T]) ->
Spvc1 = Spvc#spvcObj{spvcRetryLimit = Value},
set_attrs_spvpc(Spvc1,T);
set_attrs_spvpc(Spvc,[_|T]) ->
set_attrs_spvpc(Spvc,T);
set_attrs_spvpc(Spvc,[]) ->
Spvc.
call_failure(Spvc) ->
debug_disabled,
Key = case Spvc#spvcObj.spvcFrKey of
undefined ->
spvcLib:update_counter(callFailures,1,spvcLib:get_membership(node())),
atm_spvc;
_ ->
spvcLib:update_counter(callFrFailures,1,spvcLib:get_membership(node())),
fr_spvc
end,
Obj = spvcDataBase:db_read({spvcFailures,Key}),
case Obj#spvcFailures.spvcCallFailuresTrapEnable of
1 ->
EventIndObj = spvcDataBase:db_read({spvcEventIndicator,Key}),
case EventIndObj#spvcEventIndicator.spvcTimerInd of
1 ->
spvcDataBase:db_write(EventIndObj#spvcEventIndicator{spvcSendEventInd = 1}),
NI = Obj#spvcFailures.spvcNotificationInterval,
sysTimer:apply_after(1000 * NI,spvcOrig,timeout_event,[EventIndObj]);
_ ->
spvcManager:send_event(Key),
NI = Obj#spvcFailures.spvcNotificationInterval,
sysTimer:apply_after(1000 * NI,spvcManager,timeout,[Key]),
spvcDataBase:db_write(EventIndObj#spvcEventIndicator{spvcTimerInd = 1,
spvcSendEventInd = 2})
end;
_ ->
ok
end.
timeout_event(EventIndObj) ->
spvcDataBase:db_write(EventIndObj#spvcEventIndicator{spvcTimerInd = 2}).
check_limits(Spvc) ->
debug_disabled,
T = Spvc#spvcObj.spvcRetryThreshold,
L = Spvc#spvcObj.spvcRetryLimit,
F = Spvc#spvcObj.spvcRetryFailures,
I = Spvc#spvcObj.spvcRetryInterval,
{check_threshold(F,T),check_limit(F,L),check_interval(I)}.
check_threshold(Failures,Threshold) when Failures == Threshold ->
debug_disabled,
retry_threshold;
check_threshold(Failures,Threshold) ->
debug_disabled,
ok.
check_limit(Failures,0) ->
debug_disabled,
ok;
check_limit(Failures,Limit) when Failures < Limit ->
debug_disabled,
ok;
check_limit(Failures,Limit) ->
debug_disabled,
retry_limit.
check_interval(0) ->
no_retries;
check_interval(I) ->
I.
start_timer(wait,Spvc) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
Id = spvcReestablishTimer:apply_after(backoff_delay(Key),spvcServer,cast_to_spvc,[node(),spvcOrig,timeout,[wait,Key]]).
timeout(wait,Key) ->
debug_disabled,
case spvcDataBase:db_read({spvcObj,Key}) of
[] ->
debug_disabled,
ok;
Spvc ->
case Spvc#spvcObj.currentState of
wait ->
IfIndex = element(1,Key),
case spvcOam:is_reassign_et_in_progress(IfIndex) of
true ->
ok;
_ ->
orig_state_machine(wait,timeout,Spvc,[])
end;
_ ->
ok
end
end;
timeout(X,Y) ->
debug_disabled,
ok.
clear(Spvc) ->
debug_disabled,
Key = Spvc#spvcObj.spvcEntry,
PchKey = case Key of
{IfIndex_Value,Vpi_Value,Vci_Value,_} ->
{IfIndex_Value,Vpi_Value,Vci_Value};
{IfIndex_Value,Vpi_Value,_} ->
{IfIndex_Value,Vpi_Value};
[IfIndex_Value,Vpi_Value,Vci_Value,_] ->
[IfIndex_Value,Vpi_Value,Vci_Value];
[IfIndex_Value,Vpi_Value,_] ->
[IfIndex_Value,Vpi_Value]
end,
spvcEndPoint:free_tp_spvc(PchKey),
spvcDataBase:db_delete({spvcObj,Key}),
update_state(Spvc,clear),
OrigKey = list_to_tuple([orig] ++ tuple_to_list(Key)),
case Spvc#spvcObj.currentState of
created ->
ok;
_ ->
case spvcDataBase:db_read({spvcTpToHcId,OrigKey}) of
[] ->
ok;
#spvcTpToHcId{hcId = HcId} ->
spvcDataBase:db_delete({spvcHcIdToTp,HcId})
end,
ets:delete(spvcTpToHcId,OrigKey),
spvcReestablishTimer:cancel(Key),
ets:delete(spvcBackoff,Spvc#spvcObj.spvcEntry)
end,
case Spvc#spvcObj.spvcFrKey of
undefined ->
sccmManager:cast_to_sccm(spvcLib:get_cp(om_node),spvcEndPoint,remove_tp,[tuple_to_list(PchKey)]);
FrKey ->
spvcFr:clean_up(FrKey)
end,
case {Spvc#spvcObj.spvcRerCap,Spvc#spvcObj.spvcEntry} of
{false,_} ->
ok;
{true,Entry} when size(Entry) == 3 ->
spvcDataBase:db_delete({spvcRerVp,Entry});
{true,Entry} when size(Entry) == 4 ->
spvcDataBase:db_delete({spvcRerVc,Entry})
end.
get_link_state(If) when integer(If) ->
debug_disabled,
cnhChi:get_link_opstate(If);
get_link_state(Other) ->
debug_disabled,
disabled.
get_link_state_intf(If,Msg) when integer(If) ->
debug_disabled,
case cnhChi:get_link_opstate(If) of
enabled ->
enabled;
_ ->
Om_Node = spvcLib:get_cp(om_node),
case rpc:call(Om_Node,intfI,get_link_op_state,[If]) of
{ok,enabled} ->
enabled;
Result ->
disabled
end
end;
get_link_state_intf(Other,Msg) ->
debug_disabled,
disabled.
setup(HcId,Setup,Spvc) ->
case spvcDataBase:db_read({spvcObj,Spvc#spvcObj.spvcEntry}) of
[] ->
ok;
Spvc1 ->
case Spvc#spvcObj.currentState == Spvc1#spvcObj.currentState of
true ->
spvcLib:increase_counter(spvcSaEtStat,Spvc),
case Spvc#spvcObj.spvcFrKey of
undefined ->
do_setup(HcId,Setup,Spvc#spvcObj.spvcRerCap);
FrKey ->
do_setup(HcId,Setup,FrKey)
end;
_ ->
ok
end
end.
do_setup(HcId,Setup,Type) when Type == undefined; Type == false ->
debug_disabled,
ReturnData = {0,HcId},
L3Data = {0,[HcId,Setup]},
mdisp:msg(node(),{plcOperator,1,infinity},{HcId,{spvcI,ReturnData}},{ccI,l3_msg,[HcId,spvcI,L3Data]});
do_setup(HcId,Setup,true) ->
debug_disabled,
ReturnData = {0,HcId},
L3Data = {0,[HcId,Setup]},
mdisp:msg(node(),{plcOperator,1,infinity},{HcId,{spvcRerI,ReturnData}},{ccI,l3_msg,[HcId,spvcRerI,L3Data]});
do_setup(HcId,Setup,FrKey) ->
debug_disabled,
ReturnData = {0,HcId},
L3Data = {0,[HcId,Setup]},
mdisp:msg(node(),{plcOperator,1,infinity},{HcId,{spvcFrI,ReturnData}},{ccI,l3_msg,[HcId,spvcFrI,L3Data]}).
backoff_delay(Key) ->
debug_disabled,
Obj = spvcDataBase:db_read({spvcObj,Key}),
Var = spvcDataBase:db_read({spvcFailures,atm_spvc}),
{Delay,Flag} = case Obj#spvcObj.spvcRetryFailures of
0 ->
{100,no_alarm};
1 ->
{Obj#spvcObj.spvcRetryInterval,no_alarm};
_ ->
Table = get_backoff_table(Key,Obj),
Max_Delay = Var#spvcFailures.max_delay,
case Var#spvcFailures.delay_factor * Table#spvcBackoff.delay_time of
DelayValue when DelayValue < Max_Delay ->
{DelayValue,no_alarm};
_ ->
Org_Retry_Interval = Obj#spvcObj.spvcRetryInterval,
if
Org_Retry_Interval < Max_Delay ->
spvcLib:send_spvcStillTryingAlarm(Key,Table#spvcBackoff.flag),
{Max_Delay,alarm};
true ->
spvcLib:send_spvcStillTryingAlarm(Key,Table#spvcBackoff.flag),
{Org_Retry_Interval,alarm}
end
end
end,
ets:insert(spvcBackoff,#spvcBackoff{key = Key,
delay_time = Delay,
flag = Flag}),
round(Delay).
get_backoff_table(Index,Spvc) ->
case ets:lookup(spvcBackoff,Index) of
[Obj] ->
Obj;
_ ->
#spvcBackoff{key = Spvc#spvcObj.spvcEntry,
delay_time = Spvc#spvcObj.spvcRetryInterval,
flag = no_alarm}
end.
set_fr_atm_iw_admin_state(FrEndPoint,up,Spvc) ->
ok;
set_fr_atm_iw_admin_state(FrEndPoint,NewStatus,Spvc) ->
ok.
forced_release(FrEndPoint) ->
FrPerm = spvcDataBase:db_read({spvcFr,FrEndPoint}),
case FrPerm of
[] ->
{error,no_fr_spvc};
_ ->
Key = FrPerm#spvcFr.spvcFrAtmEntry,
Spvc = spvcDataBase:db_read({spvcObj,Key}),
SpvcFrObj = spvcDataBase:db_read({spvcFrPerm,FrEndPoint}),
case SpvcFrObj#spvcFrPerm.spvcFrConnect of
3 ->
SpvcTpToHcId = read_spvcTpToHcId(Key),
Release = spvcEncode:encode_cc_release(31),
spvcManager:release_un(b_side,SpvcTpToHcId#spvcTpToHcId.hcId,Release,Spvc);
_ ->
{error,target_not_owned_by_this_connection}
end
end.