aboutsummaryrefslogtreecommitdiffstats
path: root/library/RSL_Types.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'library/RSL_Types.ttcn')
-rw-r--r--library/RSL_Types.ttcn857
1 files changed, 745 insertions, 112 deletions
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index 2bbbd3b8..1940b096 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -4,7 +4,7 @@ module RSL_Types {
*
* RSL is a 3GPP standard protocol used between BTS and BSC in a GSM network.
*
- * (C) 2017 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2017-2023 by Harald Welte <laforge@gnumonks.org>
* All rights reserved.
*
* Released under the terms of GNU General Public License, Version 2 or
@@ -206,7 +206,7 @@ module RSL_Types {
RSL_IE_CBCH_LOAD_INFO ('00101101'B),
RSL_IE_SMSCB_CHAN_INDICATOR ('00101110'B),
RSL_IE_GROUP_CALL_REF ('00101111'B),
- RSL_IE_CHAN_DESC ('00110000'B),
+ RSL_IE_GROUP_CHAN_DESC ('00110000'B),
RSL_IE_NCH_DRX_INFO ('00110001'B),
RSL_IE_CMD_INDICATOR ('00110010'B),
RSL_IE_EMLPP_PRIO ('00110011'B),
@@ -220,6 +220,12 @@ module RSL_Types {
RSL_IE_TFO_STATUS ('00111011'B),
RSL_IE_LLP_APDU ('00111100'B),
+ /* Osmocom extensions */
+ RSL_IE_OSMO_REP_ACCH_CAP ('01100000'B),
+ RSL_IE_OSMO_TRAINING_SEQUENCE ('01100001'B),
+ RSL_IE_OSMO_TOP_ACCH_CAP ('01100010'B),
+ RSL_IE_OSMO_OSMUX_CID ('01100011'B),
+
/* ip.access */
RSL_IE_IPAC_SRTP_CONFIG ('11100000'B),
RSL_IE_IPAC_PROXY_UDP ('11100001'B),
@@ -314,7 +320,7 @@ module RSL_Types {
}
/* osmocom-style dynamic PDCH */
- const RSL_IE_ActivationType t_RSL_IE_ActType_PDCH := {
+ const RSL_IE_ActivationType c_RSL_IE_ActType_PDCH := {
reactivation := false,
reserved := 1,
a_bits := ACT_REL_TO_OSMO_PDCH
@@ -376,10 +382,14 @@ module RSL_Types {
RSL_CHRT_TCH_F_GROUP ('00011000'B),
RSL_CHRT_TCH_H_GROUP ('00011001'B),
RSL_CHRT_TCH_F_BCAST ('00101000'B),
- RSL_CHRT_TCH_H_BCAST ('00101001'B)
+ RSL_CHRT_TCH_H_BCAST ('00101001'B),
+ RSL_CHRT_OSMO_TCH_F_VAMOS ('10001000'B),
+ RSL_CHRT_OSMO_TCH_H_VAMOS ('10001001'B)
+ } with { variant "FIELDLENGTH(8)" };
+ type enumerated RSL_ChanModeOct6Signalling {
+ RSL_CMOD_NO_RESOURCE ('00000000'B)
} with { variant "FIELDLENGTH(8)" };
- type enumerated RSL_SpeechAlgo {
- RSL_CMOD_NO_RESOURCE ('00000000'B),
+ type enumerated RSL_ChanModeOct6SpeechAlgo {
RSL_CMOD_SP_GSM1 ('00000001'B),
RSL_CMOD_SP_GSM2 ('00010001'B),
RSL_CMOD_SP_GSM3 ('00100001'B),
@@ -387,6 +397,33 @@ module RSL_Types {
RSL_CMOD_SP_GSM5 ('00001001'B),
RSL_CMOD_SP_GSM6 ('00001101'B)
} with { variant "FIELDLENGTH(8)" };
+ type enumerated RSL_ChanModeOct6DataRate {
+ RSL_CMOD_CSD_NTA_43k5_14k5 ('01100001'B),
+ RSL_CMOD_CSD_NTA_29k0_14k5 ('01100010'B),
+ RSL_CMOD_CSD_NTA_43k5_29k0 ('01100011'B),
+ RSL_CMOD_CSD_NTA_14k5_43k5 ('01101001'B),
+ RSL_CMOD_CSD_NTA_14k5_29k0 ('01101010'B),
+ RSL_CMOD_CSD_NTA_29k0_43k5 ('01101011'B),
+ RSL_CMOD_CSD_NT_43k5 ('01110100'B),
+ RSL_CMOD_CSD_NT_28k8 ('01110001'B),
+ RSL_CMOD_CSD_NT_14k5 ('01011000'B),
+ RSL_CMOD_CSD_NT_12k0 ('01010000'B),
+ RSL_CMOD_CSD_NT_6k0 ('01010001'B),
+ RSL_CMOD_CSD_T_32k0 ('00111000'B),
+ RSL_CMOD_CSD_T_29k0 ('00111001'B),
+ RSL_CMOD_CSD_T_14k4 ('00011000'B),
+ RSL_CMOD_CSD_T_9k6 ('00010000'B),
+ RSL_CMOD_CSD_T_4k8 ('00010001'B),
+ RSL_CMOD_CSD_T_2k4 ('00010010'B),
+ RSL_CMOD_CSD_T_1k2 ('00010011'B),
+ RSL_CMOD_CSD_T_600 ('00010100'B),
+ RSL_CMOD_CSD_T_1200_75 ('00010101'B)
+ } with { variant "FIELDLENGTH(8)" };
+ type union RSL_ChanModeOct6 {
+ RSL_ChanModeOct6Signalling sign,
+ RSL_ChanModeOct6SpeechAlgo speech,
+ RSL_ChanModeOct6DataRate data
+ };
type record RSL_IE_ChannelMode {
uint8_t len,
BIT6 reserved,
@@ -394,21 +431,67 @@ module RSL_Types {
boolean dtx_u,
RSL_SpeechDataInd spd_ind,
RSL_ChanRateType ch_rate_type,
- RSL_SpeechAlgo coding_alg_rate
- } with { variant (len) "LENGTHTO(reserved,dtx_d,dtx_u,spd_ind,ch_rate_type,coding_alg_rate)" }
-
- template (value) RSL_IE_ChannelMode ts_RSL_ChanMode_SIGN(RSL_ChanRateType t := RSL_CHRT_SDCCH,
- boolean dtx_downlink := false) := {
+ RSL_ChanModeOct6 u
+ } with { variant (len) "LENGTHTO(reserved,dtx_d,dtx_u,spd_ind,ch_rate_type,u)"
+ variant (u) "CROSSTAG(
+ sign, spd_ind = RSL_SPDI_SIGN;
+ speech, spd_ind = RSL_SPDI_SPEECH;
+ data, spd_ind = RSL_SPDI_DATA;
+ )"}
+
+ template (value) RSL_IE_ChannelMode
+ ts_RSL_ChanMode_SIGN(template (value) RSL_ChanRateType t := RSL_CHRT_SDCCH,
+ template (value) boolean dtxd := false,
+ template (value) boolean dtxu := false) := {
len := 0, /* overwritten */
reserved := '000000'B,
- dtx_d := dtx_downlink,
- dtx_u := false,
+ dtx_d := dtxd,
+ dtx_u := dtxu,
+ spd_ind := RSL_SPDI_SIGN,
+ ch_rate_type := t,
+ u := { sign := RSL_CMOD_NO_RESOURCE }
+ }
+ template RSL_IE_ChannelMode
+ tr_RSL_ChanMode_SIGN(template (present) RSL_ChanRateType t := ?,
+ template (present) boolean dtxd := ?,
+ template (present) boolean dtxu := ?) := {
+ len := ?,
+ reserved := ?,
+ dtx_d := dtxd,
+ dtx_u := dtxu,
spd_ind := RSL_SPDI_SIGN,
ch_rate_type := t,
- coding_alg_rate := RSL_CMOD_NO_RESOURCE
+ u := { sign := RSL_CMOD_NO_RESOURCE }
+ }
+
+ template (value) RSL_IE_ChannelMode
+ ts_RSL_ChanMode_DATA(template (value) RSL_ChanRateType t,
+ template (value) RSL_ChanModeOct6DataRate r,
+ template (value) boolean dtxd := false,
+ template (value) boolean dtxu := false) := {
+ len := 0, /* overwritten */
+ reserved := '000000'B,
+ dtx_d := dtxd,
+ dtx_u := dtxu,
+ spd_ind := RSL_SPDI_DATA,
+ ch_rate_type := t,
+ u := { data := r }
+ }
+ template RSL_IE_ChannelMode
+ tr_RSL_ChanMode_DATA(template (present) RSL_ChanRateType t := ?,
+ template (present) RSL_ChanModeOct6DataRate r := ?,
+ template (present) boolean dtxd := ?,
+ template (present) boolean dtxu := ?) := {
+ len := ?,
+ reserved := ?,
+ dtx_d := dtxd,
+ dtx_u := dtxu,
+ spd_ind := RSL_SPDI_DATA,
+ ch_rate_type := t,
+ u := { data := r }
}
- template (value) RSL_IE_ChannelMode ts_RSL_ChanMode(RSL_ChanRateType t, RSL_SpeechAlgo alg,
+ template (value) RSL_IE_ChannelMode ts_RSL_ChanMode(RSL_ChanRateType t, RSL_ChanModeOct6SpeechAlgo alg,
boolean dtx_downlink := false) := {
len := 0, /* overwritten */
reserved := '000000'B,
@@ -416,17 +499,17 @@ module RSL_Types {
dtx_u := false,
spd_ind := RSL_SPDI_SPEECH,
ch_rate_type := t,
- coding_alg_rate := alg
+ u := { speech := alg }
}
template RSL_IE_ChannelMode tr_RSL_ChanMode(template RSL_ChanRateType t,
- template RSL_SpeechAlgo alg) := {
+ template RSL_ChanModeOct6SpeechAlgo alg) := {
len := ?,
reserved := '000000'B,
dtx_d := ?,
dtx_u := ?,
spd_ind := RSL_SPDI_SPEECH,
ch_rate_type := t,
- coding_alg_rate := alg
+ u := { speech := alg }
}
/* 9.3.4 BS Power IE */
@@ -444,6 +527,15 @@ module RSL_Types {
fpc := fpc,
power_level := power_level
}
+ template RSL_IE_BS_Power
+ tr_RSL_IE_BS_Power(template (present) uint4_t power_level,
+ template (present) boolean epc := ?,
+ template (present) boolean fpc := ?) := {
+ reserved := ?,
+ epc := epc,
+ fpc := fpc,
+ power_level := power_level
+ }
/* 9.3.7 */
type enumerated RSL_AlgId {
@@ -493,6 +585,13 @@ module RSL_Types {
uint8_t actual_ta
}
+ template (value) RSL_IE_L1Info ts_RSL_IE_L1Info := {
+ ms_power_lvl := 0,
+ fpc := false,
+ reserved := 0,
+ actual_ta := 0
+ };
+
/* 9.3.13 */
type record RSL_IE_MS_Power {
uint2_t reserved,
@@ -567,6 +666,34 @@ module RSL_Types {
frame_nr := tr_RSL_IE_FrameNumber(frame_nr)
}
+ /* 9.3.21 Resource Information */
+ type record RSL_IE_ResourceInfo {
+ uint8_t len,
+ RSL_ResourceInfo info
+ } with { variant (len) "LENGTHTO(info)" };
+
+ type record of RSL_ResourceInfoItem RSL_ResourceInfo;
+ type record RSL_ResourceInfoItem {
+ RslChannelNr chan_nr,
+ uint3_t interf_band,
+ BIT5 rfu ('00000'B)
+ };
+
+ template (value) RSL_ResourceInfoItem
+ ts_RSL_ResourceInfoItem(template (value) RslChannelNr chan_nr,
+ template (value) uint3_t interf_band := 0) := {
+ chan_nr := chan_nr,
+ interf_band := interf_band,
+ rfu := '00000'B
+ }
+ template RSL_ResourceInfoItem
+ tr_RSL_ResourceInfoItem(template (present) RslChannelNr chan_nr := ?,
+ template (present) uint3_t interf_band := ?) := {
+ chan_nr := chan_nr,
+ interf_band := interf_band,
+ rfu := ? /* Tolerate unknown values */
+ }
+
/* Osmocom Extension */
type record RSL_IE_UplinkMeasSuppMeasInfo {
int16_t toa256_mean,
@@ -589,6 +716,19 @@ module RSL_Types {
RSL_IE_UplinkMeasSuppMeasInfo supp_meas_info optional
} with { variant (len) "LENGTHTO(rfu,dtx_d,rxlev_f_u,reserved1,rxlev_s_u,reserved2,rxq_f_u,rxq_s_u,supp_meas_info)" };
+ template (value) RSL_IE_UplinkMeas ts_RSL_IE_UplinkMeas(uint6_t rxlev := 12, uint3_t rxqual := 0) := {
+ len := 0, /* overwritten */
+ rfu := '0'B,
+ dtx_d := false,
+ rxlev_f_u := rxlev,
+ reserved1 := '00'B,
+ rxlev_s_u := rxlev,
+ reserved2 := '00'B,
+ rxq_f_u := rxqual,
+ rxq_s_u := rxqual,
+ supp_meas_info := omit
+ };
+
/* 9.3.26 */
type enumerated RSL_Cause {
/* normal event */
@@ -751,6 +891,104 @@ module RSL_Types {
slot_count := slot_count
}
+ /* 9.3.45 Group Call Reference */
+ type record RSL_IE_GroupCallReference {
+ uint8_t len,
+ GroupCallRef group_or_bcast_call_ref
+ } with {
+ variant (len) "LENGTHTO(group_or_bcast_call_ref)"
+ };
+ template (value) RSL_IE_GroupCallReference ts_GroupCallRef(template (value) GroupCallRef gcr) := {
+ len := 0, // overwritten
+ group_or_bcast_call_ref := gcr
+ }
+ template (present) RSL_IE_GroupCallReference tr_GroupCallRef(template (present) GroupCallRef gcr := ?) := {
+ len := ?,
+ group_or_bcast_call_ref := gcr
+ }
+
+ /* 9.3.46 Channel description */
+ type record RSL_IE_GroupChannelDescription {
+ uint8_t len,
+ octetstring chan_desc
+ } with {
+ variant (len) "LENGTHTO(chan_desc)"
+ };
+ template (value) RSL_IE_GroupChannelDescription ts_GroupChanDesc(template (value) octetstring cd) := {
+ len := 0, // overwritten
+ chan_desc := cd
+ }
+ template (present) RSL_IE_GroupChannelDescription tr_GroupChanDesc(template (present) octetstring cd) := {
+ len := ?,
+ chan_desc := cd
+ }
+
+ /* 9.3.47 NCH DRX Information */
+ type record RSL_IE_NchDrxInformation {
+ uint8_t len,
+ BIT2 spare,
+ BIT1 nln_status,
+ BIT3 emlpp_priority,
+ BIT2 nln
+ } with {
+ variant (len) "LENGTHTO(spare,nln_status,emlpp_priority,nln)"
+ };
+
+ /* 9.3.48 Command Indicator */
+ type enumerated RSL_CommandIndicator {
+ CMD_IND_START (0),
+ CMD_IND_STOP (1)
+ } with { variant "FIELDLENGTH(8)" };
+ type record RSL_IE_CommandIndicator {
+ uint8_t len,
+ RSL_CommandIndicator command_value
+ } with {
+ variant (len) "LENGTHTO(command_value)"
+ };
+ template (value) RSL_IE_CommandIndicator ts_CommandInd(template (value) RSL_CommandIndicator ci) := {
+ len := 0, // overwritten
+ command_value := ci
+ }
+ template (present) RSL_IE_CommandIndicator tr_CommandInd(template (present) RSL_CommandIndicator ci) := {
+ len := ?,
+ command_value := ci
+ }
+
+ /* 9.3.50 UIC */
+ type record RSL_IE_Uic {
+ uint8_t len,
+ BIT2 spare,
+ uint6_t uic
+ } with {
+ variant (len) "LENGTHTO(spare,uic)"
+ };
+
+ /* 9.3.52, 3GPP TS 44.018 10.5.2.21aa */
+ type record RSL_IE_MultirateCfg {
+ uint8_t len,
+ uint3_t mr_speech_ver,
+ boolean nscb,
+ boolean icmi,
+ BIT1 spare,
+ uint2_t start_mode,
+ BIT8 codec_modes,
+ octetstring parameters
+ } with {
+ variant (len) "LENGTHTO(mr_speech_ver,nscb,icmi,spare,start_mode,codec_modes,parameters)"
+ };
+ template (value) RSL_IE_MultirateCfg ts_RSL_MultirateCfg(boolean icmi := true, uint2_t start_mode := 0,
+ BIT8 codec_modes := '00000100'B /* 5,90k */,
+ octetstring params := ''O) := {
+ len := 2 + lengthof(params),
+ mr_speech_ver := 1,
+ nscb := false,
+ icmi := icmi,
+ spare := '0'B,
+ start_mode := start_mode,
+ codec_modes := codec_modes,
+ parameters := params
+ }
+
/* 9.3.53 */
type record RSL_IE_MultirateCtrl {
uint3_t spare,
@@ -820,11 +1058,102 @@ module RSL_Types {
RSL_IPA_Codec codec
}
+ type enumerated RSL_IPA_RTP_CSD_FMT_D {
+ RSL_IPA_RTP_CSD_EXT_TRAU ('0000'B),
+ RSL_IPA_RTP_CSD_NON_TRAU ('0001'B),
+ RSL_IPA_RTP_CSD_TRAU_BTS ('0010'B),
+ RSL_IPA_RTP_CSD_IWF_FREE ('0011'B)
+ } with { variant "FIELDLENGTH(4)" }
+
+ type enumerated RSL_IPA_RTP_CSD_FMT_IR {
+ RSL_IPA_RTP_CSD_8k ('0000'B),
+ RSL_IPA_RTP_CSD_16k ('0001'B),
+ RSL_IPA_RTP_CSD_32k ('0010'B),
+ RSL_IPA_RTP_CSD_64 ('0011'B)
+ } with { variant "FIELDLENGTH(4)" }
+
+ type record RSL_IE_IPA_RTP_CSD_FMT {
+ RSL_IPA_RTP_CSD_FMT_IR ir,
+ RSL_IPA_RTP_CSD_FMT_D d
+ }
+
/* 9.3.20 */
type enumerated RSL_IE_ReleaseMode {
RSL_REL_MODE_NORMAL ('00'B),
- REL_REL_MODE_LOCAL ('01'B)
+ RSL_REL_MODE_LOCAL ('01'B)
+ }
+
+ type record RSL_IE_OSMO_TrainingSequence {
+ uint8_t len,
+ uint8_t tsc_set,
+ uint8_t tsc
+ } with { variant (len) "LENGTHTO(tsc_set,tsc)" }
+
+ type record RSL_IE_OSMO_RepAcchCap {
+ uint8_t len,
+ BIT1 rfu ('0'B),
+ uint3_t rxqual,
+ boolean ul_sacch,
+ boolean dl_sacch,
+ boolean dl_facch_all,
+ boolean dl_facch_cmd
+ } with { variant (len) "LENGTHTO(rfu,rxqual,ul_sacch,dl_sacch,dl_facch_all,dl_facch_cmd)" }
+
+ type record RSL_IE_OSMO_TopAcchCap {
+ uint8_t len,
+ boolean sacch_enable,
+ boolean facch_enable,
+ uint3_t rxqual,
+ uint3_t overpower_db
+ } with { variant (len) "LENGTHTO(sacch_enable,facch_enable,rxqual,overpower_db)" }
+
+ template (value) RSL_IE_OSMO_TopAcchCap
+ ts_RSL_IE_OSMO_TopAcchCap(template (value) uint3_t overpower := 2,
+ template (value) uint3_t rxqual := 4,
+ boolean facch_enable := true,
+ boolean sacch_enable := true) := {
+ len := 0, /* overwritten */
+ sacch_enable := sacch_enable,
+ facch_enable := facch_enable,
+ rxqual := rxqual,
+ overpower_db := overpower
+ };
+ template RSL_IE_OSMO_TopAcchCap
+ tr_RSL_IE_OSMO_TopAcchCap(template (present) uint3_t overpower := ?,
+ template (present) uint3_t rxqual := ?,
+ template (present) boolean facch_enable := ?,
+ template (present) boolean sacch_enable := ?) := {
+ len := ?, /* overwritten */
+ sacch_enable := sacch_enable,
+ facch_enable := facch_enable,
+ rxqual := rxqual,
+ overpower_db := overpower
+ };
+
+ type record RSL_IE_OSMO_Osmux_CID {
+ uint8_t len,
+ uint8_t cid
+ } with { variant (len) "LENGTHTO(cid)" }
+
+ template (present) RSL_IE_OSMO_Osmux_CID
+ tr_RSL_IE_OSMO_Osmux_CID(template (present) uint8_t osmux_cid := ?) := {
+ len := ?, /* overwritten */
+ cid := osmux_cid
+ };
+ function f_tr_RSL_IE_OSMO_Osmux_CID(template uint8_t osmux_cid := *)
+ return template RSL_IE_OSMO_Osmux_CID {
+ var template RSL_IE_OSMO_Osmux_CID ie := omit;
+ if (not istemplatekind(osmux_cid, "omit")) {
+ ie := tr_RSL_IE_OSMO_Osmux_CID(osmux_cid);
+ }
+ return ie;
}
+ template (value) RSL_IE_OSMO_Osmux_CID
+ ts_RSL_IE_OSMO_Osmux_CID(template (value) uint8_t osmux_cid) := {
+ len := 0, /* overwritten */
+ cid := osmux_cid
+ };
+
/* union of all IE bodies */
type union RSL_IE_Body {
@@ -838,9 +1167,11 @@ module RSL_Types {
RSL_IE_ChannelMode chan_mode,
uint8_t handover_ref,
RSL_IE_BS_Power bs_power,
+ RSL_LV bs_power_params,
RSL_IE_MS_Power ms_power,
RSL_IE_MS_Power_Parameters ms_power_params,
uint8_t timing_adv,
+ RSL_IE_MultirateCfg multirate_cfg,
RSL_IE_MultirateCtrl multirate_ctrl,
uint8_t msg_id,
RSL_IE_FrameNumber frame_nr,
@@ -858,6 +1189,7 @@ module RSL_Types {
RSL_IE_CbCommandType cb_cmd_type,
RSL_LV smscb_message,
RSL_IE_CbchLoadInfo cbch_load_info,
+ RSL_IE_ResourceInfo resource_info,
RSL_SacchInfo sacch_info,
RSL_IE_StartingTime starting_time,
@@ -867,15 +1199,27 @@ module RSL_Types {
RSL_LV full_imm_ass_info,
MobileIdentityLV ms_identity,
+ RSL_IE_GroupCallReference group_call_ref,
+ RSL_IE_GroupChannelDescription group_chan_desc,
+ RSL_IE_NchDrxInformation nch_drx_info,
+ RSL_IE_CommandIndicator cmd_indicator,
+ RSL_IE_Uic uic,
+
uint16_t ipa_conn_id,
uint16_t ipa_local_port,
uint16_t ipa_remote_port,
- uint32_t ipa_local_ip,
- uint32_t ipa_remote_ip,
+ OCT4 ipa_local_ip,
+ OCT4 ipa_remote_ip,
uint8_t ipa_rtp_pt,
uint8_t ipa_rtp_pt2,
RSL_IE_IPA_ConnectionStats ipa_stats,
RSL_IE_IPA_SpeechMode ipa_speech_mode,
+ RSL_IE_IPA_RTP_CSD_FMT ipa_rtp_csd_fmt,
+
+ RSL_IE_OSMO_TrainingSequence osmo_training_sequence,
+ RSL_IE_OSMO_RepAcchCap rep_acch_cap,
+ RSL_IE_OSMO_TopAcchCap top_acch_cap,
+ RSL_IE_OSMO_Osmux_CID osmux_cid,
RSL_LV other
}
@@ -894,9 +1238,11 @@ module RSL_Types {
chan_mode, iei = RSL_IE_CHAN_MODE;
handover_ref, iei = RSL_IE_HANDO_REF;
bs_power, iei = RSL_IE_BS_POWER;
+ bs_power_params, iei = RSL_IE_BS_POWER_PARAM;
ms_power, iei = RSL_IE_MS_POWER;
ms_power_params, iei = RSL_IE_MS_POWER_PARAM;
timing_adv, iei = RSL_IE_TIMING_ADVANCE;
+ multirate_cfg, iei = RSL_IE_MR_CONFIG;
multirate_ctrl, iei = RSL_IE_MR_CONTROL;
msg_id, iei = RSL_IE_MSG_ID;
@@ -915,6 +1261,7 @@ module RSL_Types {
cb_cmd_type, iei = RSL_IE_CB_CMD_TYPE;
smscb_message, iei = RSL_IE_SMSCB_MSG;
cbch_load_info, iei = RSL_IE_CBCH_LOAD_INFO;
+ resource_info, iei = RSL_IE_RESOURCE_INFO;
sacch_info, iei = RSL_IE_SACCH_INFO;
starting_time, iei = RSL_IE_STARTNG_TIME;
encr_info, iei = RSL_IE_ENCR_INFO;
@@ -925,6 +1272,12 @@ module RSL_Types {
ms_identity, iei = RSL_IE_MS_IDENTITY;
other, iei = RSL_IE_FULL_BCCH_INFO;
+ group_call_ref, iei = RSL_IE_GROUP_CALL_REF;
+ group_chan_desc, iei = RSL_IE_GROUP_CHAN_DESC;
+ nch_drx_info, iei = RSL_IE_NCH_DRX_INFO;
+ cmd_indicator, iei = RSL_IE_CMD_INDICATOR;
+ uic, iei = RSL_IE_UIC;
+
ipa_conn_id, iei = RSL_IE_IPAC_CONN_ID;
ipa_remote_ip, iei = RSL_IE_IPAC_REMOTE_IP;
ipa_remote_port, iei = RSL_IE_IPAC_REMOTE_PORT;
@@ -934,6 +1287,12 @@ module RSL_Types {
ipa_rtp_pt2, iei = RSL_IE_IPAC_RTP_PAYLOAD2;
ipa_stats, iei = RSL_IE_IPAC_CONN_STAT;
ipa_speech_mode, iei = RSL_IE_IPAC_SPEECH_MODE;
+ ipa_rtp_csd_fmt, iei = RSL_IE_IPAC_RTP_CSD_FMT;
+
+ osmo_training_sequence, iei = RSL_IE_OSMO_TRAINING_SEQUENCE;
+ rep_acch_cap, iei = RSL_IE_OSMO_REP_ACCH_CAP;
+ top_acch_cap, iei = RSL_IE_OSMO_TOP_ACCH_CAP;
+ osmux_cid, iei = RSL_IE_OSMO_OSMUX_CID;
other, OTHERWISE;
)" };
@@ -1001,7 +1360,7 @@ template RSL_Message tr_RSL_MsgTypeD(template RSL_MessageType msg_type) modifies
msg_disc := { RSL_MDISC_DCHAN, ? }
}
-/* Dedicated Channel Management */
+/* TRX Management */
template RSL_Message tr_RSL_MsgTypeT(template RSL_MessageType msg_type) modifies tr_RSL_MsgType := {
msg_disc := { RSL_MDISC_TRX_MGMT, ? }
}
@@ -1278,13 +1637,23 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
*
}
}
- template RSL_Message tr_RSL_CHAN_ACT_PDCH(template RslChannelNr chan_nr,
- template RSL_IE_ChannelMode mode) := {
+
+ template (value) RSL_Message
+ ts_RSL_CHAN_ACT_PDCH(template (value) RslChannelNr chan_nr) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_CHAN_ACTIV,
+ ies :={
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_ACT_TYPE, RSL_IE_Body:{act_type := c_RSL_IE_ActType_PDCH})
+ }
+ }
+ template RSL_Message
+ tr_RSL_CHAN_ACT_PDCH(template (present) RslChannelNr chan_nr) := {
msg_disc := tr_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
msg_type := RSL_MT_CHAN_ACTIV,
ies :={
tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
- tr_RSL_IE(RSL_IE_Body:{act_type := t_RSL_IE_ActType_PDCH}),
+ tr_RSL_IE(RSL_IE_Body:{act_type := c_RSL_IE_ActType_PDCH}),
/* lots of optional IEs */
*
}
@@ -1410,12 +1779,27 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
}
- /* Receive template for a measurement report that lacks the measurement report
+ /* Templates for a measurement report that lacks the measurement report
* from the MS (l1_info, l3_info and ms timing offset */
- template RSL_Message tr_RSL_MEAS_RES_EMPTY(template RslChannelNr chan_nr,
- template uint8_t meas_res_nr := ?,
- template RSL_IE_UplinkMeas ul_meas := ?,
- template RSL_IE_BS_Power bs_power := ?) := {
+ template (value) RSL_Message
+ ts_RSL_MEAS_RES_EMPTY(template (value) RslChannelNr chan_nr,
+ template (value) uint8_t meas_res_nr,
+ template (value) RSL_IE_UplinkMeas ul_meas,
+ template (value) RSL_IE_BS_Power bs_power) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_MEAS_RES,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_MEAS_RES_NR, RSL_IE_Body:{meas_res_nr := meas_res_nr}),
+ t_RSL_IE(RSL_IE_UPLINK_MEAS, RSL_IE_Body:{uplink_meas := ul_meas}),
+ t_RSL_IE(RSL_IE_BS_POWER, RSL_IE_Body:{bs_power := bs_power})
+ }
+ }
+ template RSL_Message
+ tr_RSL_MEAS_RES_EMPTY(template (present) RslChannelNr chan_nr,
+ template uint8_t meas_res_nr := ?,
+ template RSL_IE_UplinkMeas ul_meas := ?,
+ template RSL_IE_BS_Power bs_power := ?) := {
msg_disc := tr_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
msg_type := RSL_MT_MEAS_RES,
ies := {
@@ -1447,6 +1831,26 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
}
+ template (value) RSL_Message ts_RSL_MEAS_RES(template (value) RslChannelNr chan_nr,
+ uint8_t meas_res_nr,
+ template (value) RSL_IE_UplinkMeas ul_meas,
+ template (value) RSL_IE_BS_Power bs_power,
+ template (value) RSL_IE_L1Info l1_info,
+ octetstring l3_info,
+ uint8_t ms_to) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_MEAS_RES,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_MEAS_RES_NR, RSL_IE_Body:{meas_res_nr := meas_res_nr}),
+ t_RSL_IE(RSL_IE_UPLINK_MEAS, RSL_IE_Body:{uplink_meas := ul_meas}),
+ t_RSL_IE(RSL_IE_BS_POWER, RSL_IE_Body:{bs_power := bs_power}),
+ t_RSL_IE(RSL_IE_L1_INFO, RSL_IE_Body:{l1_info := l1_info}),
+ t_RSL_IE(RSL_IE_L3_INFO, RSL_IE_Body:{l3_info := ts_RSL_L16V(l3_info)}),
+ t_RSL_IE(RSL_IE_MS_TIMING_OFFSET, RSL_IE_Body:{ms_timing_offset := ms_to})
+ }
+ }
+
/* 8.4.9 BSC -> BTS */
template (value) RSL_Message ts_RSL_MODE_MODIFY_REQ(template (value) RslChannelNr chan_nr,
template (value) RSL_IE_ChannelMode mode) := {
@@ -1469,7 +1873,25 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
*
}
}
-
+
+ template RSL_Message tr_RSL_MODE_MODIFY_REQ_with_OSMO_TSC(template RslChannelNr chan_nr,
+ template RSL_IE_ChannelMode mode,
+ template uint8_t tsc_set := ?,
+ template uint8_t tsc := ?) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_MODE_MODIFY_REQ,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ tr_RSL_IE(RSL_IE_Body:{chan_mode := mode}),
+ tr_RSL_IE(RSL_IE_Body:{osmo_training_sequence := {
+ len := ?,
+ tsc_set := tsc_set,
+ tsc := tsc
+ }
+ })
+ }
+ };
+
/* 8.4.10 BTS -> BSC */
template (value) RSL_Message ts_RSL_MODE_MODIFY_ACK(template (value) RslChannelNr chan_nr) := {
msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
@@ -1558,6 +1980,16 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
/* One optional IE: BS POWER PARAMETERS */
}
}
+ template RSL_Message tr_RSL_BS_PWR_CTRL(template (present) RslChannelNr chan_nr,
+ template (present) RSL_IE_BS_Power bs_power) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_BS_POWER_CONTROL,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ tr_RSL_IE(RSL_IE_Body:{bs_power := bs_power})
+ /* One optional IE: BS POWER PARAMETERS */
+ }
+ }
/* 8.4.19 BTS -> BSC */
template (value) RSL_Message ts_RSL_RF_CHAN_REL_ACK(template (value) RslChannelNr chan_nr) :=
@@ -1585,6 +2017,17 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
t_RSL_IE(RSL_IE_L3_INFO, RSL_IE_Body:{l3_info := ts_RSL_L16V(l3_info)})
}
}
+ template RSL_Message tr_RSL_SACCH_INF_MOD(template RslChannelNr chan_nr,
+ template RSL_IE_SysinfoType si_type := ?,
+ template octetstring l3_info := ?) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_SACCH_INFO_MODIFY,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ tr_RSL_IE(RSL_IE_Body:{sysinfo_type := si_type}),
+ tr_RSL_IE(RSL_IE_Body:{l3_info := tr_RSL_L16V(l3_info)})
+ }
+ }
/* 8.4.7 BTS -> BSC */
template (value) RSL_Message ts_RSL_HANDO_DET(template (value) RslChannelNr chan_nr) := {
@@ -1604,6 +2047,42 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
}
+ /* 8.4.21 BTS -> BSC */
+ template (value) RSL_Message ts_RSL_TALKER_DET(template (value) RslChannelNr chan_nr) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_TALKER_DET,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr})
+ }
+ }
+ template RSL_Message tr_RSL_TALKER_DET(template RslChannelNr chan_nr,
+ template uint8_t acc_delay := ?) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_TALKER_DET,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ tr_RSL_IE(RSL_IE_Body:{access_delay := acc_delay})
+ }
+ }
+
+ /* 8.4.22 BTS -> BSC */
+ template (value) RSL_Message ts_RSL_LISTENER_DET(template (value) RslChannelNr chan_nr) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_LISTENER_DET,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr})
+ }
+ }
+ template RSL_Message tr_RSL_LISTENER_DET(template RslChannelNr chan_nr,
+ template uint8_t acc_delay := ?) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
+ msg_type := RSL_MT_LISTENER_DET,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ tr_RSL_IE(RSL_IE_Body:{access_delay := acc_delay})
+ }
+ }
+
/* COMMON CHANNEL MANAGEMENT MESSAGES */
@@ -1762,12 +2241,6 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
}
- template RSL_Message tr_RSL_RF_RES_IND := {
- msg_disc := tr_RSL_MsgDisc(RSL_MDISC_TRX_MGMT, false),
- msg_type := RSL_MT_RF_RES_IND,
- ies := *
- }
-
/* 8.5.8 BTS <- BSC SMS BROADCAST COMMAND */
template RSL_Message tr_RSL_SMSCB_CMD(template RSL_IE_CbCommandType cb_cmd := ?,
template octetstring msg := ?,
@@ -1840,6 +2313,35 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
+ /* 8.6.1 BTS -> BSC */
+ template (value) RSL_Message
+ ts_RSL_RF_RES_IND(template (value) RSL_ResourceInfo info) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_TRX_MGMT, false),
+ msg_type := RSL_MT_RF_RES_IND,
+ ies := {
+ t_RSL_IE(RSL_IE_RESOURCE_INFO, RSL_IE_Body:{
+ resource_info := {
+ len := 0, /* overwritten */
+ info := info
+ }
+ })
+ }
+ }
+ template RSL_Message
+ tr_RSL_RF_RES_IND(template (present) RSL_ResourceInfo info := ?) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_TRX_MGMT, false),
+ msg_type := RSL_MT_RF_RES_IND,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{
+ resource_info := {
+ len := ?,
+ info := info
+ }
+ })
+ }
+ }
+
+
/* 8.6.2 BTS <- BSC */
template (value) RSL_Message ts_RSL_SACCH_FILL(RSL_IE_SysinfoType si_type, octetstring l3_info) := {
msg_disc := ts_RSL_MsgDisc(RSL_MDISC_TRX_MGMT, false),
@@ -1889,6 +2391,49 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
/* Abis/IP specific messages */
+ private function f_ts_RSL_IPA_CRCX_IEs(template (value) RslChannelNr chan_nr,
+ template (omit) OCT4 remote_ip,
+ template (omit) uint16_t remote_port,
+ template (omit) uint8_t osmux_cid)
+ return RSL_IE_List {
+ var RSL_IE_List ies;
+
+ /* Channel Number is a mandatory IE */
+ ies := {
+ valueof(RSL_IE:{
+ iei := RSL_IE_CHAN_NR,
+ body := { chan_nr := chan_nr }
+ })
+ };
+ /* Remote IP / Port are optional IEs */
+ if (not istemplatekind(remote_ip, "omit")) {
+ ies := ies & {
+ valueof(RSL_IE:{
+ iei := RSL_IE_IPAC_REMOTE_IP,
+ body := { ipa_remote_ip := remote_ip }
+ })
+ };
+ }
+ if (not istemplatekind(remote_port, "omit")) {
+ ies := ies & {
+ valueof(RSL_IE:{
+ iei := RSL_IE_IPAC_REMOTE_PORT,
+ body := { ipa_remote_port := remote_port }
+ })
+ };
+ }
+ /* Osmux CID extension IE is optional: */
+ if (not istemplatekind(osmux_cid, "omit")) {
+ ies := ies & {
+ valueof(RSL_IE:{
+ iei := RSL_IE_OSMO_OSMUX_CID,
+ body := { osmux_cid := ts_RSL_IE_OSMO_Osmux_CID(osmux_cid) }
+ })
+ };
+ }
+
+ return ies;
+ }
template RSL_Message tr_RSL_IPA_CRCX(template RslChannelNr chan_nr) := {
msg_disc := tr_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
msg_type := RSL_MT_IPAC_CRCX,
@@ -1897,41 +2442,59 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
*
}
}
- template (value) RSL_Message ts_RSL_IPA_CRCX(template (value) RslChannelNr chan_nr) := {
+ template (value) RSL_Message
+ ts_RSL_IPA_CRCX(template (value) RslChannelNr chan_nr,
+ template (omit) OCT4 remote_ip := omit,
+ template (omit) uint16_t remote_port := omit,
+ template (omit) uint8_t osmux_cid := omit) := {
msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
msg_type := RSL_MT_IPAC_CRCX,
- ies := {
- t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr})
+ ies := f_ts_RSL_IPA_CRCX_IEs(chan_nr, remote_ip, remote_port, osmux_cid)
+ }
+
+ function ts_RSL_IPA_CRCX_ACK(template (value) RslChannelNr chan_nr,
+ uint16_t ipa_conn_id, OCT4 local_ip,
+ uint16_t local_port, uint7_t rtp_pt2,
+ template (omit) uint8_t osmux_cid := omit)
+ return template (value) RSL_Message {
+ var template (value) RSL_Message msg := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_CRCX_ACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ t_RSL_IE(RSL_IE_IPAC_LOCAL_IP, RSL_IE_Body:{ipa_local_ip := local_ip}),
+ t_RSL_IE(RSL_IE_IPAC_LOCAL_PORT, RSL_IE_Body:{ipa_local_port := local_port}),
+ t_RSL_IE(RSL_IE_IPAC_RTP_PAYLOAD2, RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ }
}
- }
-
-
- template (value) RSL_Message ts_RSL_IPA_CRCX_ACK(template (value) RslChannelNr chan_nr,
- uint16_t ipa_conn_id, uint32_t local_ip,
- uint16_t local_port, uint7_t rtp_pt2) := {
- msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
- msg_type := RSL_MT_IPAC_CRCX_ACK,
- ies := {
- t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
- t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
- t_RSL_IE(RSL_IE_IPAC_LOCAL_IP, RSL_IE_Body:{ipa_local_ip := local_ip}),
- t_RSL_IE(RSL_IE_IPAC_LOCAL_PORT, RSL_IE_Body:{ipa_local_port := local_port}),
- t_RSL_IE(RSL_IE_IPAC_RTP_PAYLOAD2, RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ if (not istemplatekind(osmux_cid, "omit")) {
+ msg.ies[lengthof(msg.ies)] := t_RSL_IE(RSL_IE_OSMO_OSMUX_CID, RSL_IE_Body:{osmux_cid := ts_RSL_IE_OSMO_Osmux_CID(osmux_cid)});
+ }
+ return msg;
+ }
+
+ function tr_RSL_IPA_CRCX_ACK(template RslChannelNr chan_nr,
+ template uint16_t ipa_conn_id,
+ template OCT4 local_ip,
+ template uint16_t local_port,
+ template uint8_t osmux_cid := omit)
+ return template RSL_Message {
+ var template RSL_Message msg := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_CRCX_ACK,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ tr_RSL_IE(RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ tr_RSL_IE(RSL_IE_Body:{ipa_local_ip := local_ip}),
+ tr_RSL_IE(RSL_IE_Body:{ipa_local_port := local_port})
+ /* Optional: RTP Payload Type 2 IE */
+ }
}
- }
- template RSL_Message tr_RSL_IPA_CRCX_ACK(template RslChannelNr chan_nr,
- template uint16_t ipa_conn_id,
- template uint32_t local_ip,
- template uint16_t local_port) := {
- msg_disc := tr_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
- msg_type := RSL_MT_IPAC_CRCX_ACK,
- ies := {
- tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
- tr_RSL_IE(RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
- tr_RSL_IE(RSL_IE_Body:{ipa_local_ip := local_ip}),
- tr_RSL_IE(RSL_IE_Body:{ipa_local_port := local_port})
- /* Optional: RTP Payload Type 2 IE */
+ if (not istemplatekind(osmux_cid, "omit")) {
+ msg.ies[lengthof(msg.ies)] := tr_RSL_IE(RSL_IE_Body:{osmux_cid := f_tr_RSL_IE_OSMO_Osmux_CID(osmux_cid)});
}
+ return msg;
}
template (value) RSL_Message ts_RSL_IPA_CRCX_NACK(template (value) RslChannelNr chan_nr,
@@ -1953,20 +2516,28 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
}
- template (value) RSL_Message ts_RSL_IPA_MDCX(template (value) RslChannelNr chan_nr,
- uint16_t ipa_conn_id,
- uint32_t remote_ip, uint16_t remote_port,
- uint7_t rtp_pt2) := {
- msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
- msg_type := RSL_MT_IPAC_MDCX,
- ies := {
- t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
- t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
- t_RSL_IE(RSL_IE_IPAC_REMOTE_IP, RSL_IE_Body:{ipa_remote_ip := remote_ip}),
- t_RSL_IE(RSL_IE_IPAC_REMOTE_PORT, RSL_IE_Body:{ipa_remote_port := remote_port}),
- /* optional: RTP Payload Type */
- t_RSL_IE(RSL_IE_IPAC_RTP_PAYLOAD2, RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ function ts_RSL_IPA_MDCX(template (value) RslChannelNr chan_nr,
+ uint16_t ipa_conn_id,
+ OCT4 remote_ip, uint16_t remote_port,
+ uint7_t rtp_pt2,
+ template (omit) uint8_t osmux_cid := omit)
+ return template (value) RSL_Message {
+ var template (value) RSL_Message msg := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_MDCX,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ t_RSL_IE(RSL_IE_IPAC_REMOTE_IP, RSL_IE_Body:{ipa_remote_ip := remote_ip}),
+ t_RSL_IE(RSL_IE_IPAC_REMOTE_PORT, RSL_IE_Body:{ipa_remote_port := remote_port}),
+ /* optional: RTP Payload Type */
+ t_RSL_IE(RSL_IE_IPAC_RTP_PAYLOAD2, RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ }
}
+ if (not istemplatekind(osmux_cid, "omit")) {
+ msg.ies[lengthof(msg.ies)] := t_RSL_IE(RSL_IE_OSMO_OSMUX_CID, RSL_IE_Body:{osmux_cid := ts_RSL_IE_OSMO_Osmux_CID(osmux_cid)});
+ }
+ return msg;
}
template RSL_Message tr_RSL_IPA_MDCX(template RslChannelNr chan_nr,
template uint16_t ipa_conn_id) := {
@@ -1979,38 +2550,54 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
}
- template (value) RSL_Message ts_RSL_IPA_MDCX_ACK(template (value) RslChannelNr chan_nr,
- uint16_t ipa_conn_id,
- uint32_t local_ip, uint16_t local_port,
- uint7_t rtp_pt2) := {
- msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
- msg_type := RSL_MT_IPAC_MDCX_ACK,
- ies := {
- t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
- /* optional */
- t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
- t_RSL_IE(RSL_IE_IPAC_LOCAL_IP, RSL_IE_Body:{ipa_local_ip := local_ip}),
- t_RSL_IE(RSL_IE_IPAC_LOCAL_PORT, RSL_IE_Body:{ipa_local_port := local_port}),
- /* optional: RTP Payload Type */
- t_RSL_IE(RSL_IE_IPAC_RTP_PAYLOAD2, RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ function ts_RSL_IPA_MDCX_ACK(template (value) RslChannelNr chan_nr,
+ uint16_t ipa_conn_id,
+ OCT4 local_ip, uint16_t local_port,
+ uint7_t rtp_pt2,
+ template (omit) uint8_t osmux_cid := omit)
+ return template (value) RSL_Message {
+ var template (value) RSL_Message msg := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_MDCX_ACK,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr}),
+ /* optional */
+ t_RSL_IE(RSL_IE_IPAC_CONN_ID, RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ t_RSL_IE(RSL_IE_IPAC_LOCAL_IP, RSL_IE_Body:{ipa_local_ip := local_ip}),
+ t_RSL_IE(RSL_IE_IPAC_LOCAL_PORT, RSL_IE_Body:{ipa_local_port := local_port}),
+ /* optional: RTP Payload Type */
+ t_RSL_IE(RSL_IE_IPAC_RTP_PAYLOAD2, RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ }
}
- }
- template RSL_Message tr_RSL_IPA_MDCX_ACK(template RslChannelNr chan_nr,
- template uint16_t ipa_conn_id,
- template uint32_t local_ip,
- template uint16_t local_port,
- template uint7_t rtp_pt2) := {
- msg_disc := tr_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
- msg_type := RSL_MT_IPAC_MDCX_ACK,
- ies := {
- tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
- /* optional */
- tr_RSL_IE(RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
- tr_RSL_IE(RSL_IE_Body:{ipa_local_ip := local_ip}),
- tr_RSL_IE(RSL_IE_Body:{ipa_local_port := local_port}),
- /* optional: RTP Payload Type */
- tr_RSL_IE(RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ if (not istemplatekind(osmux_cid, "omit")) {
+ msg.ies[lengthof(msg.ies)] := t_RSL_IE(RSL_IE_OSMO_OSMUX_CID, RSL_IE_Body:{osmux_cid := ts_RSL_IE_OSMO_Osmux_CID(osmux_cid)});
+ }
+ return msg;
+ }
+ function tr_RSL_IPA_MDCX_ACK(template RslChannelNr chan_nr,
+ template uint16_t ipa_conn_id,
+ template OCT4 local_ip,
+ template uint16_t local_port,
+ template uint7_t rtp_pt2,
+ template uint8_t osmux_cid := omit)
+ return template RSL_Message {
+ var template RSL_Message msg := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_IPACCESS, false),
+ msg_type := RSL_MT_IPAC_MDCX_ACK,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := chan_nr}),
+ /* optional */
+ tr_RSL_IE(RSL_IE_Body:{ipa_conn_id := ipa_conn_id}),
+ tr_RSL_IE(RSL_IE_Body:{ipa_local_ip := local_ip}),
+ tr_RSL_IE(RSL_IE_Body:{ipa_local_port := local_port}),
+ /* optional: RTP Payload Type */
+ tr_RSL_IE(RSL_IE_Body:{ipa_rtp_pt2 := rtp_pt2})
+ }
}
+ if (not istemplatekind(osmux_cid, "omit")) {
+ msg.ies[lengthof(msg.ies)] := tr_RSL_IE(RSL_IE_Body:{osmux_cid := f_tr_RSL_IE_OSMO_Osmux_CID(osmux_cid)});
+ }
+ return msg;
}
template (value) RSL_Message ts_RSL_IPA_MDCX_NACK(template (value) RslChannelNr chan_nr,
@@ -2122,14 +2709,16 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
- template (value) RSL_Message ts_RSL_IPA_PDCH_ACT(RslChannelNr chan_nr) := {
+ template (value) RSL_Message
+ ts_RSL_IPA_PDCH_ACT(template (value) RslChannelNr chan_nr) := {
msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
msg_type := RSL_MT_IPAC_PDCH_ACT,
ies := {
t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := chan_nr})
}
}
- template RSL_Message tr_RSL_IPA_PDCH_ACT(template RslChannelNr chan_nr) := {
+ template RSL_Message
+ tr_RSL_IPA_PDCH_ACT(template (present) RslChannelNr chan_nr) := {
msg_disc := ts_RSL_MsgDisc(RSL_MDISC_DCHAN, false),
msg_type := RSL_MT_IPAC_PDCH_ACT,
ies := {
@@ -2242,6 +2831,50 @@ template RSL_Message tr_RSL_MsgTypeDR(template RSL_MessageType msg_type) modifie
}
}
+ template (value) RSL_Message ts_RSL_NOTIF_CMD_START(template (value) GroupCallRef group_call_ref,
+ template (value) octetstring chan_desc) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+ msg_type := RSL_MT_NOT_CMD,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := ts_RslChanNr_PCH_AGCH(0)}),
+ t_RSL_IE(RSL_IE_CMD_INDICATOR, RSL_IE_Body:{cmd_indicator := ts_CommandInd(CMD_IND_START)}),
+ t_RSL_IE(RSL_IE_GROUP_CALL_REF, RSL_IE_Body:{group_call_ref := ts_GroupCallRef(group_call_ref)}),
+ t_RSL_IE(RSL_IE_GROUP_CHAN_DESC, RSL_IE_Body:{group_chan_desc := ts_GroupChanDesc(chan_desc)})
+ }
+ }
+ template RSL_Message tr_RSL_NOTIF_CMD_START(template (present) GroupCallRef group_call_ref,
+ template (present) octetstring chan_desc := ?) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+ msg_type := RSL_MT_NOT_CMD,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(0)}),
+ tr_RSL_IE(RSL_IE_Body:{cmd_indicator := tr_CommandInd(CMD_IND_START)}),
+ tr_RSL_IE(RSL_IE_Body:{group_call_ref := tr_GroupCallRef(group_call_ref)}),
+ tr_RSL_IE(RSL_IE_Body:{group_chan_desc := tr_GroupChanDesc(chan_desc)}),
+ *
+ }
+ }
+
+ template (value) RSL_Message ts_RSL_NOTIF_CMD_STOP(template (value) GroupCallRef group_call_ref) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+ msg_type := RSL_MT_NOT_CMD,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := ts_RslChanNr_PCH_AGCH(0)}),
+ t_RSL_IE(RSL_IE_CMD_INDICATOR, RSL_IE_Body:{cmd_indicator := ts_CommandInd(CMD_IND_STOP)}),
+ t_RSL_IE(RSL_IE_GROUP_CALL_REF, RSL_IE_Body:{group_call_ref := ts_GroupCallRef(group_call_ref)})
+ }
+ }
+ template RSL_Message tr_RSL_NOTIF_CMD_STOP(template (present) GroupCallRef group_call_ref) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+ msg_type := RSL_MT_NOT_CMD,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(0)}),
+ tr_RSL_IE(RSL_IE_Body:{cmd_indicator := tr_CommandInd(CMD_IND_STOP)}),
+ tr_RSL_IE(RSL_IE_Body:{group_call_ref := tr_GroupCallRef(group_call_ref)}),
+ *
+ }
+ }
+
function f_rsl_find_ie(RSL_Message msg, RSL_IE_Type iei, out RSL_IE_Body ret) return boolean {