Implement SystemInformation13 Rest Octets types

Related: SYS#5358
Change-Id: Id8845ebe28a9a6ed79d2d408dc7c1ad8a275b809
This commit is contained in:
Pau Espin Pedrol 2021-02-09 20:20:17 +01:00 committed by Pau Espin Pedrol
parent dd9fb84b58
commit 28652d8724
4 changed files with 134 additions and 6 deletions

View File

@ -165,8 +165,7 @@ type record SystemInformationConfig {
SI2quaterRestOctetsList si2quater optional,
SystemInformationType3 si3 optional,
SystemInformationType4 si4 optional,
/* TODO: replace with proper decoding of SI13, implement SI13 in GSM_SystemInformation.ttcn */
octetstring si13 optional,
SystemInformationType13 si13 optional,
SystemInformationType5 si5 optional,
SystemInformationType5bis si5bis optional,
SystemInformationType5ter si5ter optional,
@ -371,7 +370,44 @@ template SystemInformationConfig SystemInformationConfig_default := {
s := omit
}
},
si13 := '9000185A6FC9E08410AB2B2B2B2B2B2B2B2B2B2B'O,
si13 := {
rest_octets := {
presence := '1'B,
bcch_change_mark := ?,
si_change_field := '0000'B,
presence2 := '0'B,
si13_change_mark := omit,
gprs_ma := omit,
zero := '0'B, /* PBCCH not present in cell */
rac := 0,
spgc_ccch_sup := '0'B,
priority_access_thr := '110'B,
network_control_order := '00'B,
gprs_cell_opts := {
nmo := '01'B,
t3168 := '011'B,
t3192 := '010'B,
drx_timer_max := '011'B,
access_burst_type := '0'B,
control_ack_type := '1'B,
bs_cv_max := 15,
pan_presence := '1'B,
pan_dec := 1,
pan_inc := 1,
pan_max := '111'B,
ext_info_presence := ?,
ext_info_length := *,
ext_info := *
},
gprs_pwr_ctrl_params := {
alpha := 0,
t_avg_w := '10000'B,
t_avg_t := '10000'B,
pc_meas_chan := '0'B,
n_avg_i := '1000'B
}
}
},
si5 := {
bcch_freq_list := '10000000000000000000000000000000'O
},
@ -480,7 +516,7 @@ function f_sysinfo_dec_raw(inout SystemInformationConfig si, RSL_Message rsl)
if (not isbound(data)) {
si.si13 := omit;
} else {
si.si13 := dec_SystemInformation(data).payload.other;
si.si13 := dec_SystemInformation(data).payload.si13;
}
} else {
handled := false;

View File

@ -15,6 +15,7 @@ module GSM_RestOctets {
import from General_Types all;
import from Osmocom_Types all;
import from RLCMAC_CSN1_Types all;
/* 10.5.2.33b SI 2quater Rest Octets */
type record SI2quaterRestOctets {
@ -692,6 +693,34 @@ type record SI4RestOctets {
variant "PADDING(yes), PADDING_PATTERN('00101011'B)"
};
/* 10.5.2.37b SI 13 Rest Octets (O & S) */
type record SI13RestOctets {
BIT1 presence, // L/H
uint3_t bcch_change_mark,
BIT4 si_change_field,
BIT1 presence2,
BIT2 si13_change_mark optional,
GprsMobileAllocation gprs_ma optional,
BIT1 zero ('0'B), /* PBCCH not present in cell */
uint8_t rac,
BIT1 spgc_ccch_sup,
BIT3 priority_access_thr,
BIT2 network_control_order,
GprsCellOptions gprs_cell_opts,
GprsPowerControlParameters gprs_pwr_ctrl_params
/* TODO: Additions in release 99 */
} with {
variant (presence) "CSN.1 L/H"
/* TODO: for all fields after presencte: variant (<field>) "PRESENCE(presence = '1'B)" */
variant (si13_change_mark) "PRESENCE(presence2 = '1'B)"
variant (gprs_ma) "PRESENCE(presence2 = '1'B)"
/* The TITAN's RAW encoder generates an octet-aligned octetstring,
* so we should make sure that unused bits contain proper padding. */
variant "PADDING(yes), PADDING_PATTERN('00101011'B)"
};
/* Selection Parameters */
type record SelectionParams {
boolean cbq,
@ -777,6 +806,11 @@ external function enc_SI4RestOctets(in SI4RestOctets ro) return octetstring
external function dec_SI4RestOctets(in octetstring stream) return SI4RestOctets
with { extension "prototype(convert) decode(RAW)" };
external function enc_SI13RestOctets(in SI13RestOctets ro) return octetstring
with { extension "prototype(convert) encode(RAW)" };
external function dec_SI13RestOctets(in octetstring stream) return SI13RestOctets
with { extension "prototype(convert) decode(RAW)" };
/* Basic templates to be extended in place */
template (value) SI3RestOctets ts_SI3RestOctets := {

View File

@ -196,6 +196,11 @@ module GSM_SystemInformation {
RestOctets rest_octets length(0..7)
} with { variant "" };
/* 44.018 9.1.43a */
type record SystemInformationType13 {
SI13RestOctets rest_octets
} with { variant "" };
type union SystemInformationUnion {
SystemInformationType1 si1,
SystemInformationType2 si2,
@ -208,6 +213,7 @@ module GSM_SystemInformation {
SystemInformationType5bis si5bis,
SystemInformationType5ter si5ter,
SystemInformationType6 si6,
SystemInformationType13 si13,
octetstring other
} with { variant "" };
@ -225,6 +231,7 @@ module GSM_SystemInformation {
si5bis, header.message_type = SYSTEM_INFORMATION_TYPE_5bis;
si5ter, header.message_type = SYSTEM_INFORMATION_TYPE_5ter;
si6, header.message_type = SYSTEM_INFORMATION_TYPE_6;
si13, header.message_type = SYSTEM_INFORMATION_TYPE_13;
other, OTHERWISE;
)" };

View File

@ -929,7 +929,7 @@ module RLCMAC_CSN1_Types {
};
type record FreqDirect1 {
uint6_t maio,
GprsMobileAllication mobile_allocation
GprsMobileAllocation mobile_allocation
}
type record FreqDirect2 {
uint6_t maio,
@ -953,6 +953,15 @@ module RLCMAC_CSN1_Types {
variant (direct2) "PRESENCE(presence = '11'B)"
};
/* 12.9a GPRS Power Control Parameters */
type record GprsPowerControlParameters {
uint4_t alpha,
BIT5 t_avg_w,
BIT5 t_avg_t,
BIT1 pc_meas_chan,
BIT4 n_avg_i
};
/* 12.10 Global TFI */
type record GlobalTfi {
boolean is_dl_tfi,
@ -967,7 +976,7 @@ module RLCMAC_CSN1_Types {
} with {
variant (rfl_number_list) "PRESENCE(presence = '1'B)"
};
type record GprsMobileAllication {
type record GprsMobileAllocation {
uint6_t hsn,
BIT1 rfl_number_list_present,
RflNumberList rfl_number_list optional,
@ -1036,6 +1045,48 @@ module RLCMAC_CSN1_Types {
variant (relative_k) "PRESENCE(presence = '1'B)"
};
/* 12.24 GPRS Cell Options */
type record ExtensionInformation {
BIT1 egprs_supported,
BIT1 egprs_pkt_channel_req optional,
BIT4 bep_period optional,
BIT1 pfc_feature_mode,
BIT1 dtm_support,
BIT1 bss_paging_coordination,
/* REL-4 extension */
BIT1 ccn_active optional,
BIT1 nw_ext_utbf optional
/* TODO: REL-6 extension */
/* TODO: REL-7 extension */
/* TODO: REL-10 extension */
} with {
variant (egprs_pkt_channel_req) "PRESENCE(egprs_supported = '1'B)"
variant (bep_period) "PRESENCE(egprs_supported = '1'B)"
};
type record GprsCellOptions {
BIT2 nmo,
BIT3 t3168,
BIT3 t3192,
BIT3 drx_timer_max,
BIT1 access_burst_type,
BIT1 control_ack_type,
uint4_t bs_cv_max,
BIT1 pan_presence,
uint3_t pan_dec optional,
uint3_t pan_inc optional,
BIT3 pan_max optional,
BIT1 ext_info_presence,
BIT6 ext_info_length optional,
ExtensionInformation ext_info optional
} with {
variant (pan_dec) "PRESENCE(pan_presence = '1'B)"
variant (pan_inc) "PRESENCE(pan_presence = '1'B)"
variant (pan_max) "PRESENCE(pan_presence = '1'B)"
variant (ext_info_length) "PRESENCE(ext_info_presence = '1'B)"
variant (ext_info) "PRESENCE(ext_info_presence = '1'B)"
/* TODO: mark REL-4 and upwards in ext_info as omit based on ext_info_length ? */
};
/* 3GPP TS 44.060, table 11.2.5a.2 "EGPRS PACKET CHANNEL REQUEST" */
type union EGPRSPktChRequest {
EGPRSPktChRequest_MC5P2RB3 one_phase,