aboutsummaryrefslogtreecommitdiffstats
path: root/library/NS_Provider_FR.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'library/NS_Provider_FR.ttcn')
-rw-r--r--library/NS_Provider_FR.ttcn24
1 files changed, 19 insertions, 5 deletions
diff --git a/library/NS_Provider_FR.ttcn b/library/NS_Provider_FR.ttcn
index 5387b0fe..b664b5e5 100644
--- a/library/NS_Provider_FR.ttcn
+++ b/library/NS_Provider_FR.ttcn
@@ -27,11 +27,11 @@ type component NS_Provider_FR_CT extends NS_Provider_CT, FR_Client_CT {
var boolean pvc_active := false;
};
-function main(NSConfiguration config, charstring id) runs on NS_Provider_FR_CT system af_packet {
+function main(NSVCConfiguration config, NSConfiguration nsconfig, charstring id) runs on NS_Provider_FR_CT system af_packet {
/* start Frame Relay Emulation */
- vc_FREMU := FR_Emulation_CT.create(id & "-FRemu");
- var Q933em_Config q933_cfg := valueof(ts_Q933em_Config(ats_is_user := not config.role_sgsn, bidirectional := false));
+ vc_FREMU := FR_Emulation_CT.create(id & "-FRemu") alive;
+ var Q933em_Config q933_cfg := valueof(ts_Q933em_Config(ats_is_user := not nsconfig.role_sgsn, bidirectional := false));
q933_cfg.T391 := 1.0;
map(vc_FREMU:FR, system:AF_PACKET) param (config.provider.fr.netdev);
vc_FREMU.start(FrameRelay_Emulation.main(q933_cfg));
@@ -50,8 +50,21 @@ function main(NSConfiguration config, charstring id) runs on NS_Provider_FR_CT s
var PDU_NS rx_pdu;
alt {
- [] FR.receive(FrameRelayFrame:?) -> value rx_fr {
- NSE.send(dec_PDU_NS(rx_fr.payload));
+ [not link_available] FR.receive(FrameRelayFrame:?) -> value rx_fr {
+ log("Dropping Rx Msg because FR link not yet available", rx_fr);
+ /* this can happen if the remote side has not yet recognized the
+ * link is dead; don' fail here */
+ }
+ [link_available and pvc_active] FR.receive(tr_FR(config.provider.fr.dlci)) -> value rx_fr {
+ var PDU_NS ns := dec_PDU_NS(rx_fr.payload);
+ NSE.send(ns);
+ }
+ [not pvc_active] FR.receive(tr_FR(config.provider.fr.dlci)) -> value rx_fr {
+ log("Dropping Rx Msg because FR DLC not yet available", rx_fr);
+ }
+ [] FR.receive(tr_FR(?)) -> value rx_fr {
+ log("Dropping Rx Msg because DLCI unknown", rx_fr);
+ setverdict(fail);
}
[] FR.receive(FRemu_Event:{link_status:=FR_LINK_STS_AVAILABLE}) -> value rx_frevt {
@@ -62,6 +75,7 @@ function main(NSConfiguration config, charstring id) runs on NS_Provider_FR_CT s
}
[] FR.receive(FRemu_Event:{link_status:=FR_LINK_STS_UNAVAILABLE}) -> value rx_frevt {
link_available := false;
+ pvc_active := false;
NSE.send(NS_Provider_Evt:{link_status := NS_PROV_LINK_STATUS_DOWN});
}
[] FR.receive(tr_FRemu_PvcStatusAct(config.provider.fr.dlci, true)) -> value rx_frevt {