NS_Emulation: Add [optional] support for FrameRelay transport
This adds a NS_Provider_FR which interfaces between FrameRelay_Emulation and NS_Emulation. Include support for it only if enabled at compile time to avoid pulling in a dependency on the FrameRelay stack for every user of NS_Emulation. Change-Id: I42ca811d23e383e362d2527c8ff2c916a62a5b42
This commit is contained in:
parent
8c0f2fc0b0
commit
867243a3ec
|
@ -12,9 +12,12 @@
|
||||||
module NS_Emulation {
|
module NS_Emulation {
|
||||||
import from NS_Types all;
|
import from NS_Types all;
|
||||||
import from BSSGP_Types all;
|
import from BSSGP_Types all;
|
||||||
|
import from Osmocom_Types all;
|
||||||
import from Osmocom_Gb_Types all;
|
import from Osmocom_Gb_Types all;
|
||||||
import from NS_Provider_IPL4 all;
|
import from NS_Provider_IPL4 all;
|
||||||
import from Osmocom_Types all;
|
#ifdef NS_EMULATION_FR
|
||||||
|
import from NS_Provider_FR all;
|
||||||
|
#endif
|
||||||
import from IPL4asp_Types all;
|
import from IPL4asp_Types all;
|
||||||
|
|
||||||
type record NsUnitdataRequest {
|
type record NsUnitdataRequest {
|
||||||
|
@ -91,10 +94,18 @@ module NS_Emulation {
|
||||||
private function f_init() runs on NS_CT {
|
private function f_init() runs on NS_CT {
|
||||||
var Result res;
|
var Result res;
|
||||||
|
|
||||||
/* Connect the UDP socket */
|
if (ischosen(config.provider.ip)) {
|
||||||
vc_NSP_IP := NS_Provider_IPL4_CT.create;
|
/* Connect the UDP socket */
|
||||||
connect(self:NSCP, vc_NSP_IP:NSE);
|
vc_NSP_IP := NS_Provider_IPL4_CT.create;
|
||||||
vc_NSP_IP.start(NS_Provider_IPL4.main(config));
|
connect(self:NSCP, vc_NSP_IP:NSE);
|
||||||
|
vc_NSP_IP.start(NS_Provider_IPL4.main(config));
|
||||||
|
#ifdef NS_EMULATION_FR
|
||||||
|
} else if (ischosen(config.provider.fr)) {
|
||||||
|
vc_NSP_FR := NS_Provider_FR_CT.create;
|
||||||
|
connect(self:NSCP, vc_NSP_FR:NSE);
|
||||||
|
vc_NSP_FR.start(NS_Provider_FR.main(config));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
f_change_state(NSE_S_DEAD_BLOCKED);
|
f_change_state(NSE_S_DEAD_BLOCKED);
|
||||||
/* Send the first NS-ALIVE to test the connection */
|
/* Send the first NS-ALIVE to test the connection */
|
||||||
|
@ -118,6 +129,9 @@ module NS_Emulation {
|
||||||
/* UDP port towards the bottom (IUT) */
|
/* UDP port towards the bottom (IUT) */
|
||||||
port NS_PROVIDER_PT NSCP;
|
port NS_PROVIDER_PT NSCP;
|
||||||
var NS_Provider_IPL4_CT vc_NSP_IP;
|
var NS_Provider_IPL4_CT vc_NSP_IP;
|
||||||
|
#ifdef NS_EMULATION_FR
|
||||||
|
var NS_Provider_FR_CT vc_NSP_FR;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* NS-User SAP towards the user */
|
/* NS-User SAP towards the user */
|
||||||
port NS_SP_PT NS_SP;
|
port NS_SP_PT NS_SP;
|
||||||
|
@ -138,8 +152,13 @@ module NS_Emulation {
|
||||||
PortNumber remote_udp_port,
|
PortNumber remote_udp_port,
|
||||||
charstring remote_ip
|
charstring remote_ip
|
||||||
};
|
};
|
||||||
|
type record NSConfigurationFR {
|
||||||
|
charstring netdev, /* HDLC net-device for AF_PACKET socket */
|
||||||
|
integer dlci
|
||||||
|
};
|
||||||
type union NSConfigurationP {
|
type union NSConfigurationP {
|
||||||
NSConfigurationIP ip
|
NSConfigurationIP ip,
|
||||||
|
NSConfigurationFR fr
|
||||||
};
|
};
|
||||||
type record NSConfiguration {
|
type record NSConfiguration {
|
||||||
NSConfigurationP provider,
|
NSConfigurationP provider,
|
|
@ -0,0 +1,67 @@
|
||||||
|
/* NS Provider for NS/FR/E1
|
||||||
|
* (C) 2020 Harald Welte <laforge@gnumonks.org>
|
||||||
|
* contributions by sysmocom - s.f.m.c. GmbH
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Released under the terms of GNU General Public License, Version 2 or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
module NS_Provider_FR {
|
||||||
|
|
||||||
|
import from NS_Emulation all;
|
||||||
|
import from NS_Types all;
|
||||||
|
|
||||||
|
import from AF_PACKET_PortType all;
|
||||||
|
import from FrameRelay_Types all;
|
||||||
|
import from FrameRelay_Emulation all;
|
||||||
|
|
||||||
|
|
||||||
|
type component NS_Provider_FR_CT extends NS_Provider_CT, FR_Client_CT {
|
||||||
|
/* component reference to Frame Relay emulation */
|
||||||
|
var FR_Emulation_CT vc_FREMU;
|
||||||
|
};
|
||||||
|
|
||||||
|
function main(NSConfiguration config) runs on NS_Provider_FR_CT system af_packet {
|
||||||
|
|
||||||
|
/* start Frame Relay Emulation */
|
||||||
|
vc_FREMU := FR_Emulation_CT.create();
|
||||||
|
var Q933em_Config q933_cfg := valueof(ts_Q933em_Config(ats_is_user := not config.role_sgsn, bidirectional := false));
|
||||||
|
map(vc_FREMU:FR, system:AF_PACKET) param (config.provider.fr.netdev);
|
||||||
|
vc_FREMU.start(FrameRelay_Emulation.main(q933_cfg));
|
||||||
|
|
||||||
|
/* connect ourselves to frame relay emulation */
|
||||||
|
connect(self:FR, vc_FREMU:CLIENT);
|
||||||
|
connect(self:FR_PROC, vc_FREMU:PROC);
|
||||||
|
|
||||||
|
/* register ourselves for the specified DLCI */
|
||||||
|
f_fremu_register(config.provider.fr.dlci);
|
||||||
|
|
||||||
|
/* transceive between user-facing port and FR socket */
|
||||||
|
while (true) {
|
||||||
|
var FrameRelayFrame rx_fr;
|
||||||
|
var FRemu_Event rx_frevt;
|
||||||
|
var PDU_NS rx_pdu;
|
||||||
|
alt {
|
||||||
|
|
||||||
|
[] FR.receive(FrameRelayFrame:?) -> value rx_fr {
|
||||||
|
NSE.send(dec_PDU_NS(rx_fr.payload));
|
||||||
|
}
|
||||||
|
|
||||||
|
[] FR.receive(FRemu_Event:?) -> value rx_frevt {
|
||||||
|
/* TODO: dispatch to user */
|
||||||
|
}
|
||||||
|
[] NSE.receive(PDU_NS:?) -> value rx_pdu {
|
||||||
|
FR.send(ts_FR(config.provider.fr.dlci, enc_PDU_NS(rx_pdu), true));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* main */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} /* module */
|
|
@ -51,7 +51,7 @@ gen_links $DIR $FILES
|
||||||
DIR=../library
|
DIR=../library
|
||||||
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_Types.ttcn RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc "
|
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_Types.ttcn RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc "
|
||||||
FILES+="StatsD_Types.ttcn StatsD_CodecPort.ttcn StatsD_CodecPort_CtrlFunct.ttcn StatsD_CodecPort_CtrlFunctdef.cc StatsD_Checker.ttcn "
|
FILES+="StatsD_Types.ttcn StatsD_CodecPort.ttcn StatsD_CodecPort_CtrlFunct.ttcn StatsD_CodecPort_CtrlFunctdef.cc StatsD_Checker.ttcn "
|
||||||
FILES+="NS_Provider_IPL4.ttcn NS_Emulation.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "
|
FILES+="NS_Provider_IPL4.ttcn NS_Emulation.ttcnpp NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "
|
||||||
FILES+="BSSGP_Emulation.ttcnpp Osmocom_Gb_Types.ttcn "
|
FILES+="BSSGP_Emulation.ttcnpp Osmocom_Gb_Types.ttcn "
|
||||||
FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn "
|
FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn "
|
||||||
FILES+="PCUIF_Types.ttcn PCUIF_CodecPort.ttcn RAW_NS.ttcn "
|
FILES+="PCUIF_Types.ttcn PCUIF_CodecPort.ttcn RAW_NS.ttcn "
|
||||||
|
|
|
@ -84,7 +84,7 @@ gen_links $DIR $FILES
|
||||||
|
|
||||||
DIR=../library
|
DIR=../library
|
||||||
FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_Types.ttcn RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc "
|
FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_Types.ttcn RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc "
|
||||||
FILES+="NS_Provider_IPL4.ttcn NS_Emulation.ttcn PCUIF_Types.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "
|
FILES+="NS_Provider_IPL4.ttcn NS_Emulation.ttcnpp PCUIF_Types.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "
|
||||||
FILES+="BSSGP_Emulation.ttcnpp Osmocom_Gb_Types.ttcn "
|
FILES+="BSSGP_Emulation.ttcnpp Osmocom_Gb_Types.ttcn "
|
||||||
FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn "
|
FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn "
|
||||||
FILES+="Osmocom_VTY_Functions.ttcn "
|
FILES+="Osmocom_VTY_Functions.ttcn "
|
||||||
|
|
Loading…
Reference in New Issue