osmo-ttcn3-hacks/library/RLCMAC_Types.ttcn

201 lines
5.2 KiB
Plaintext

/* TITAN REW encode/decode definitions for 3GPP TS 44.060 RLC/MAC Blocks */
module RLCMAC_Types {
import from General_Types all;
import from Osmocom_Types all;
import from GSM_Types all;
/* TS 44.060 10.4.7 */
type enumerated MacPayloadType {
MAC_PT_RLC_DATA ('00'B),
MAC_PT_RLCMAC_NO_OPT ('01'B),
MAC_PT_RLCMAC_OPT ('10'B),
MAC_PT_RESERVED ('11'B)
} with { variant "FIELDLENGTH(2)" };
/* TS 44.060 10.4.5 */
type enumerated MacRrbp {
RRBP_Nplus13_mod_2715648 ('00'B),
RRBP_Nplus17_or_18_mod_2715648 ('01'B),
RRBP_Nplus22_or_22_mod_2715648 ('10'B),
RRBP_Nplus26_mod_2715648 ('11'B)
} with { variant "FIELDLENGTH(2)" };
/* Partof DL RLC data block and DL RLC/MAC ctrl block */
type record DlMacHeader {
MacPayloadType payload_type,
MacRrbp rrbp,
boolean rrbp_valid,
uint3_t usf
} with {
variant (rrbp_valid) "FIELDLENGTH(1)"
};
/* TS 44.060 10.4.10a */
type enumerated PowerReduction {
PWR_RED_0_to_3dB ('00'B),
PWR_RED_3_to_7dB ('01'B),
PWR_RED_7_to_10dB ('10'B),
PWR_RED_RESERVED ('11'B)
} with { variant "FIELDLENGTH(2)" };
/* TS 44.060 10.4.9d */
type enumerated DirectionBit {
DIR_UPLINK_TBF ('0'B),
DIR_DOWNLINK_TBF ('1'B)
} with { variant "FIELDLENGTH(1)" };
type record TfiOctet {
/* PR, TFI, D */
PowerReduction pr,
uint5_t tfi,
DirectionBit d
} with { variant "" };
type record RbsnExtOctet {
uint3_t rbsn_e,
BIT1 fs_e,
BIT4 spare
} with { variant "" };
type record DlCtrlOptOctets {
/* RBSN, RTI, FS, AC (optional, depending on mac_hdr.payload_type) */
BIT1 rbsn,
uint5_t rti,
boolean fs,
boolean tfi_octet_present,
TfiOctet tfi optional,
RbsnExtOctet rbsn_ext optional
} with {
variant (fs) "FIELDLENGTH(1)"
variant (tfi_octet_present) "FIELDLENGTH(1)"
variant (tfi) "PRESENCE(tfi_octet_present = true)"
variant (rbsn_ext) "PRESENCE(rbsn='1'B, fs=false)"
};
/* TS 44.060 10.3.1 Downlink RLC/MAC control block */
type record RlcmacDlCtrlBlock {
DlMacHeader mac_hdr,
DlCtrlOptOctets opt optional,
octetstring payload
} with {
variant (opt) "PRESENCE(mac_hdr.payload_type = MAC_PT_RLCMAC_OPT)"
};
external function enc_RlcmacDlCtrlBlock(in RlcmacDlCtrlBlock si) return octetstring
with { extension "prototype(convert) encode(RAW)" };
external function dec_RlcmacDlCtrlBlock(in octetstring stream) return RlcmacDlCtrlBlock
with { extension "prototype(convert) decode(RAW)" };
type record UlMacCtrlHeader {
MacPayloadType pt,
BIT5 spare,
boolean retry
} with { variant (retry) "FIELDLENGTH(1)" };
/* TS 44.060 10.3.2 UplinkRLC/MAC control block */
type record RlcmacUlCtrlBlock {
UlMacCtrlHeader mac_hdr,
octetstring payload
} with { variant "" };
external function enc_RlcmacUlCtrlBlock(in RlcmacUlCtrlBlock si) return octetstring
with { extension "prototype(convert) encode(RAW)" };
external function dec_RlcmacUlCtrlBlock(in octetstring stream) return RlcmacUlCtrlBlock
with { extension "prototype(convert) decode(RAW)" };
/* a single RLC block / LLC-segment */
type record RlcBlockHdr {
uint6_t length_ind,
/* 1 = new LLC PDU starts */
BIT1 more,
/* 0 = another extension octet after LLC PDU, 1 = no more extension octets */
BIT1 e
} with { variant "" };
type record RlcBlock {
uint6_t length_ind,
BIT1 more,
BIT1 e,
octetstring rlc optional
} with {
variant (rlc) "PRESENCE (more = '1'B)"
variant (length_ind) "LENGTHTO(length_ind, more, e, rlc)"
};
type record of RlcBlock RlcBlocks;
/* TS 44.060 10.2.1 Downlink RLC data block */
type record RlcmacDlDataBlock {
/* Octet 1 */
DlMacHeader mac_hdr,
/* Octet 2 */
PowerReduction pr,
BIT1 spare,
uint4_t tfi, /* 3 or 4? */
boolean fbi,
/* Octet 3 */
uint7_t bsn,
BIT1 e ('1'B),
RlcBlocks rlc_blocks
} with { variant "" };
external function enc_RlcmacDlDataBlock(in RlcmacDlDataBlock si) return octetstring
with { extension "prototype(convert) encode(RAW)" };
external function dec_RlcmacDlDataBlock(in octetstring stream) return RlcmacDlDataBlock
with { extension "prototype(convert) decode(RAW)" };
/* TS 44.060 10.2.2 */
type record UlMacDataHeader {
MacPayloadType pt,
uint4_t countdown,
boolean stall_ind,
boolean retry
} with {
variant (stall_ind) "FIELDLENGTH(1)"
variant (retry) "FIELDLENGTH(1)"
};
type record RlcMacUlTlli {
RlcBlockHdr hdr,
uint32_t tlli
} with {
variant ""
}
type record RlcMacUlPfi {
uint7_t pfi,
boolean m
} with {
variant (m) "FIELDLENGTH(1)"
};
/* TS 44.060 10.2.2 */
type record RlcmacUlDataBlock {
/* MAC header */
UlMacDataHeader mac_hdr,
/* Octet 1 */
BIT1 spare,
boolean pfi_ind,
uint5_t tfi,
boolean tlli_ind,
/* Octet 2 */
uint7_t bsn,
BIT1 e ('1'B),
/* Octet 3 (optional) */
RlcMacUlTlli tlli,
RlcMacUlPfi pfi,
RlcBlocks blocks
} with {
variant (tlli) "PRESENCE(tlli_ind = true)"
variant (pfi) "PRESENCE(pfi_ind = true)"
};
external function enc_RlcmacUlDataBlock(in RlcmacUlDataBlock si) return octetstring
with { extension "prototype(convert) encode(RAW)" };
external function dec_RlcmacUlDataBlock(in octetstring stream) return RlcmacUlDataBlock
with { extension "prototype(convert) decode(RAW)" };
} with { encode "RAW"; variant "FIELDORDER(msb)" }