L1CTL: Add message segmentation helper via getMsgLen()
As L1CTL is using a stream socket, we need to give the UNIX_DOMAIN port some clue as to where our L1CTL message boundaries are in the stream. This requires a patched UNIX_DOMAIN_SOCKETasp test port with the following commit applied: commit 655cb4ab2ac006b3a73d1b679c83081d9743410a Author: Harald Welte <laforge@gnumonks.org> Date: Sun Feb 25 23:25:46 2018 +0100 Add "getMsgLen" function similar to IPL4asp_PT Change-Id: Iab33f57cb4311180e521a76307a552d16287b062changes/22/6922/3
parent
48494ca245
commit
6fc784e3c8
|
@ -36,7 +36,7 @@ FILES="MobileL3_CC_Types.ttcn MobileL3_CommonIE_Types.ttcn MobileL3_GMM_SM_Types
|
|||
gen_links $DIR $FILES
|
||||
|
||||
DIR=../library
|
||||
FILES="General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn GSM_SystemInformation.ttcn Osmocom_Types.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc L1CTL_Types.ttcn L1CTL_PortType.ttcn LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn "
|
||||
FILES="General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn GSM_SystemInformation.ttcn Osmocom_Types.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc L1CTL_Types.ttcn L1CTL_PortType.ttcn L1CTL_PortType_CtrlFunct.ttcn L1CTL_PortType_CtrlFunctDef.cc LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn "
|
||||
#FILES+="NS_Emulation.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "
|
||||
#FILES+="BSSGP_Emulation.ttcn Osmocom_Gb_Types.ttcn "
|
||||
FILES+="IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp IPA_CodecPort.ttcn RSL_Types.ttcn RSL_Emulation.ttcn "
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
FILES="*.ttcn *.ttcnpp IPA_CodecPort_CtrlFunctDef.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc
|
||||
TCCInterface.cc UD_PT.cc RLCMAC_EncDec.cc Native_FunctionDefs.cc TRXC_CodecPort_CtrlFunctDef.cc"
|
||||
TCCInterface.cc UD_PT.cc RLCMAC_EncDec.cc Native_FunctionDefs.cc TRXC_CodecPort_CtrlFunctDef.cc L1CTL_PortType_CtrlFunctDef.cc"
|
||||
|
||||
export CPPFLAGS_TTCN3="-DIPA_EMULATION_RSL"
|
||||
|
||||
|
|
|
@ -20,8 +20,7 @@ ECLIPSEGIT_REPOS= titan.Libraries.TCCUsefulFunctions \
|
|||
titan.TestPorts.SIPmsg \
|
||||
titan.TestPorts.TCPasp \
|
||||
titan.TestPorts.TELNETasp \
|
||||
titan.TestPorts.UDPasp \
|
||||
titan.TestPorts.UNIX_DOMAIN_SOCKETasp
|
||||
titan.TestPorts.UDPasp
|
||||
|
||||
ECLIPSEGIT2_REPOS= titan.ProtocolModules.GRE \
|
||||
titan.ProtocolModules.M2PA \
|
||||
|
@ -40,7 +39,8 @@ ECLIPSEGIT2_REPOS= titan.ProtocolModules.GRE \
|
|||
titan.ProtocolModules.NS_v7.3.0 \
|
||||
titan.ProtocolModules.SNDCP_v7.0.0
|
||||
|
||||
OSMOGITHUB_REPOS= titan.TestPorts.SCTPasp
|
||||
OSMOGITHUB_REPOS= titan.TestPorts.SCTPasp \
|
||||
titan.TestPorts.UNIX_DOMAIN_SOCKETasp
|
||||
|
||||
ALL_REPOS=$(ECLIPSEGIT_REPOS) $(ECLIPSEGIT2_REPOS) $(OSMOGITHUB_REPOS)
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ gen_links $DIR $FILES
|
|||
|
||||
|
||||
DIR=../library
|
||||
FILES="General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_Types.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc L1CTL_Types.ttcn L1CTL_PortType.ttcn LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn "
|
||||
FILES="General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_Types.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc L1CTL_Types.ttcn L1CTL_PortType.ttcn L1CTL_PortType_CtrlFunct.ttcn L1CTL_PortType_CtrlFunctDef.cc LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn "
|
||||
FILES+="NS_Emulation.ttcn NS_CodecPort.ttcn NS_CodecPort_CtrlFunct.ttcn NS_CodecPort_CtrlFunctDef.cc "
|
||||
FILES+="BSSGP_Emulation.ttcn Osmocom_Gb_Types.ttcn "
|
||||
FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn "
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
FILES="*.ttcn BSSGP_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc NS_CodecPort_CtrlFunctDef.cc UD_PT.cc RLCMAC_EncDec.cc LLC_EncDec.cc"
|
||||
FILES="*.ttcn BSSGP_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc NS_CodecPort_CtrlFunctDef.cc UD_PT.cc RLCMAC_EncDec.cc LLC_EncDec.cc L1CTL_PortType_CtrlFunctDef.cc"
|
||||
|
||||
../regen-makefile.sh Test.ttcn $FILES
|
||||
|
|
|
@ -15,8 +15,11 @@ DIR=$BASEDIR/titan.TestPorts.UNIX_DOMAIN_SOCKETasp/src
|
|||
FILES="UD_PT.cc UD_PT.hh UD_PortType.ttcn UD_Types.ttcn"
|
||||
gen_links $DIR $FILES
|
||||
|
||||
DIR=$BASEDIR/titan.TestPorts.Common_Components.Socket-API/src
|
||||
FILES="Socket_API_Definitions.ttcn"
|
||||
gen_links $DIR $FILES
|
||||
|
||||
|
||||
DIR=../library
|
||||
FILES="General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn RLCMAC_CSN1_Types.ttcn Osmocom_Types.ttcn L1CTL_PortType.ttcn L1CTL_Types.ttcn LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn RLCMAC_Types.ttcn RLCMAC_EncDec.cc"
|
||||
FILES="General_Types.ttcn GSM_Types.ttcn GSM_RR_Types.ttcn RLCMAC_CSN1_Types.ttcn Osmocom_Types.ttcn L1CTL_PortType.ttcn L1CTL_PortType_CtrlFunct.ttcn L1CTL_PortType_CtrlFunctDef.cc L1CTL_Types.ttcn LAPDm_RAW_PT.ttcn LAPDm_Types.ttcn RLCMAC_Types.ttcn RLCMAC_EncDec.cc"
|
||||
gen_links $DIR $FILES
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
FILES="*.ttcn UD_PT.cc UD_PT.hh RLCMAC_EncDec.cc"
|
||||
FILES="*.ttcn UD_PT.cc UD_PT.hh RLCMAC_EncDec.cc L1CTL_PortType_CtrlFunctDef.cc"
|
||||
|
||||
../regen-makefile.sh L1CTL_Test.ttcn $FILES
|
||||
|
|
|
@ -6,6 +6,7 @@ module L1CTL_PortType {
|
|||
import from Osmocom_Types all;
|
||||
import from GSM_Types all;
|
||||
import from GSM_RR_Types all;
|
||||
import from L1CTL_PortType_CtrlFunct all;
|
||||
|
||||
type record L1CTL_connect {
|
||||
charstring path
|
||||
|
@ -20,6 +21,18 @@ module L1CTL_PortType {
|
|||
charstring m_l1ctl_sock_path := "/tmp/osmocom_l2";
|
||||
}
|
||||
|
||||
function f_L1CTL_getMsgLen(in octetstring stream, inout ro_integer args) return integer {
|
||||
var integer stream_len := lengthof(stream);
|
||||
var integer len;
|
||||
if (stream_len < 2) {
|
||||
log("getMsgLen(", stream, ",", args, ")=-1");
|
||||
return -1;
|
||||
}
|
||||
len := 2 + oct2int(substr(stream, 0, 2));
|
||||
log("getMsgLen(", stream, ",", args, ")=", len);
|
||||
return len;
|
||||
}
|
||||
|
||||
function f_L1CTL_FBSB(L1CTL_PT pt, Arfcn arfcn, L1ctlCcchMode ccch_mode := CCCH_MODE_COMBINED) {
|
||||
timer T := 5.0;
|
||||
pt.send(t_L1CTL_FBSB_REQ(arfcn, t_L1CTL_FBSB_F_ALL, 0, ccch_mode, 0));
|
||||
|
@ -88,8 +101,11 @@ module L1CTL_PortType {
|
|||
}
|
||||
|
||||
function f_connect_reset(L1CTL_PT pt, charstring l1ctl_sock_path := m_l1ctl_sock_path) {
|
||||
var f_UD_getMsgLen vl_f := refers(f_L1CTL_getMsgLen);
|
||||
f_L1CTL_setGetMsgLen(pt, -1, vl_f, {});
|
||||
pt.send(L1CTL_connect:{path:=l1ctl_sock_path});
|
||||
pt.receive(L1CTL_connect_result:{result_code := SUCCESS, err:=omit});
|
||||
f_L1CTL_setGetMsgLen(pt, 0, vl_f, {});
|
||||
|
||||
pt.send(t_L1ctlResetReq(L1CTL_RES_T_SCHED));
|
||||
pt.receive;
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
module L1CTL_PortType_CtrlFunct {
|
||||
|
||||
import from L1CTL_PortType all;
|
||||
import from UD_Types all;
|
||||
|
||||
external function f_L1CTL_setGetMsgLen(
|
||||
inout L1CTL_PT portRef,
|
||||
in integer id,
|
||||
inout f_UD_getMsgLen f,
|
||||
in ro_integer msgLenArgs
|
||||
);
|
||||
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#include "UD_PortType.hh"
|
||||
#include "L1CTL_PortType.hh"
|
||||
#include "UD_PT.hh"
|
||||
|
||||
namespace L1CTL__PortType__CtrlFunct {
|
||||
|
||||
void f__L1CTL__setGetMsgLen(
|
||||
L1CTL__PortType::L1CTL__PT& portRef,
|
||||
const INTEGER& id,
|
||||
Socket__API__Definitions::f__getMsgLen& f,
|
||||
const Socket__API__Definitions::ro__integer& msgLenArgs) {
|
||||
f__UD__PT_PROVIDER__setGetMsgLen(portRef, id, f, msgLenArgs);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue