This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
fixeria gerrit-no-reply at lists.osmocom.orgfixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-pcu/+/17718 ) Change subject: RLC/MAC: implement decoding of [EGPRS] Packet Channel Request ...................................................................... RLC/MAC: implement decoding of [EGPRS] Packet Channel Request According to 3GPP TS 44.004, section 7.4a, two alternative RACH block formats are specified: 8 bit (1 octet) and 11 bit. This change implements decoding of the following messages: - Packet Channel Request, 11 bit block format (table 11.2.5.1), - Packet Channel Request, 8 bit block format (table 11.2.5.2), and - EGPRS Packet Channel Request, 11 bit block format (table 11.2.5a.2) as specified in 3GPP TS 44.060. Change-Id: I96df3352856933c9140177b2801a2c71f4134183 Related: OS#1548 --- M src/gsm_rlcmac.c M src/gsm_rlcmac.h M tests/rlcmac/RLCMACTest.cpp M tests/rlcmac/RLCMACTest.err M tests/rlcmac/RLCMACTest.ok 5 files changed, 475 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/18/17718/1 diff --git a/src/gsm_rlcmac.c b/src/gsm_rlcmac.c index 9b5ecfe..2caf4f0 100644 --- a/src/gsm_rlcmac.c +++ b/src/gsm_rlcmac.c @@ -5249,6 +5249,159 @@ CSN_DESCR_END (SI6_RestOctet_t) #endif +/* Common (unified) fields for [EGPRS] Packet Channel Request + * (see 3GPP TS 44.060, tables 11.2.5.1, 11.2.5.2, and 11.2.5a.2) */ +static const +CSN_DESCR_BEGIN(PacketChannelRequest_MC5P2RB3_t) + M_UINT (PacketChannelRequest_MC5P2RB3_t, MultislotClass, 5), + M_UINT (PacketChannelRequest_MC5P2RB3_t, Priority, 2), + M_UINT (PacketChannelRequest_MC5P2RB3_t, RandomBits, 3), +CSN_DESCR_END (PacketChannelRequest_MC5P2RB3_t) + +static const +CSN_DESCR_BEGIN(PacketChannelRequest_MC5RB2_t) + M_UINT (PacketChannelRequest_MC5RB2_t, MultislotClass, 5), + M_UINT (PacketChannelRequest_MC5RB2_t, RandomBits, 2), +CSN_DESCR_END (PacketChannelRequest_MC5RB2_t) + +static const +CSN_DESCR_BEGIN(PacketChannelRequest_MCG3P2RB3_t) + M_UINT (PacketChannelRequest_MCG3P2RB3_t, MultislotClassGroup, 3), + M_UINT (PacketChannelRequest_MCG3P2RB3_t, Priority, 2), + M_UINT (PacketChannelRequest_MCG3P2RB3_t, RandomBits, 3), +CSN_DESCR_END (PacketChannelRequest_MCG3P2RB3_t) + +static const +CSN_DESCR_BEGIN(PacketChannelRequest_NOB3P2RB3_t) + M_UINT (PacketChannelRequest_NOB3P2RB3_t, NumberOfBlocks, 3), + M_UINT (PacketChannelRequest_NOB3P2RB3_t, Priority, 2), + M_UINT (PacketChannelRequest_NOB3P2RB3_t, RandomBits, 3), +CSN_DESCR_END (PacketChannelRequest_NOB3P2RB3_t) + +static const +CSN_DESCR_BEGIN(PacketChannelRequest_NOB3RB3_t) + M_UINT (PacketChannelRequest_NOB3RB3_t, NumberOfBlocks, 3), + M_UINT (PacketChannelRequest_NOB3RB3_t, RandomBits, 3), +CSN_DESCR_END (PacketChannelRequest_NOB3RB3_t) + +static const +CSN_DESCR_BEGIN(PacketChannelRequest_P2RB3_t) + M_UINT (PacketChannelRequest_P2RB3_t, Priority, 2), + M_UINT (PacketChannelRequest_P2RB3_t, RandomBits, 3), +CSN_DESCR_END (PacketChannelRequest_P2RB3_t) + +static const +CSN_DESCR_BEGIN(PacketChannelRequest_RB5_t) + M_UINT (PacketChannelRequest_RB5_t, RandomBits, 5), +CSN_DESCR_END (PacketChannelRequest_RB5_t) + +static const +CSN_DESCR_BEGIN(PacketChannelRequest_RB3_t) + M_UINT (PacketChannelRequest_RB3_t, RandomBits, 3), +CSN_DESCR_END (PacketChannelRequest_RB3_t) + +static const +CSN_DESCR_BEGIN(PacketChannelRequest_RB2_t) + M_UINT (PacketChannelRequest_RB2_t, RandomBits, 2), +CSN_DESCR_END (PacketChannelRequest_RB2_t) + +/* Packet Channel Request (11 bit block, see table 11.2.5.1) */ +static const +CSN_ChoiceElement_t PacketChannelRequest_11b_Choice[] = +{ + {1, 0x00, 0, M_TYPE(PacketChannelRequest_11b_t, u.OnePhase, + PacketChannelRequest_MC5P2RB3_t)}, + {3, 0x04, 0, M_TYPE(PacketChannelRequest_11b_t, u.Short, + PacketChannelRequest_NOB3P2RB3_t)}, + {6, 0x30, 0, M_TYPE(PacketChannelRequest_11b_t, u.TwoPhase, + PacketChannelRequest_P2RB3_t)}, + {6, 0x31, 0, M_TYPE(PacketChannelRequest_11b_t, u.PageResponse, + PacketChannelRequest_RB5_t)}, + {6, 0x32, 0, M_TYPE(PacketChannelRequest_11b_t, u.CellUpdate, + PacketChannelRequest_RB5_t)}, + {6, 0x33, 0, M_TYPE(PacketChannelRequest_11b_t, u.MMProcedure, + PacketChannelRequest_RB5_t)}, + {6, 0x34, 0, M_TYPE(PacketChannelRequest_11b_t, u.SingleBlockNoTBF, + PacketChannelRequest_RB5_t)}, + {6, 0x35, 0, M_TYPE(PacketChannelRequest_11b_t, u.OnePhaseUnack, + PacketChannelRequest_RB5_t)}, + {6, 0x36, 0, M_TYPE(PacketChannelRequest_11b_t, u.DedicatedChannel, + PacketChannelRequest_RB5_t)}, + {6, 0x37, 0, M_TYPE(PacketChannelRequest_11b_t, u.EmergencyCall, + PacketChannelRequest_RB5_t)}, + {6, 0x38, 0, M_TYPE(PacketChannelRequest_11b_t, u.SingleBlockMBMS, + PacketChannelRequest_RB5_t)}, +}; + +CSN_DESCR_BEGIN (PacketChannelRequest_11b_t) + M_CHOICE (PacketChannelRequest_11b_t, Type, + PacketChannelRequest_11b_Choice, ElementsOf(PacketChannelRequest_11b_Choice)), +CSN_DESCR_END (PacketChannelRequest_11b_t) + +/* Packet Channel Request (8 bit block, see table 11.2.5.2) */ +static const +CSN_ChoiceElement_t PacketChannelRequest_8b_Choice[] = +{ + {1, 0x01, 0, M_TYPE(PacketChannelRequest_8b_t, u.OnePhase, + PacketChannelRequest_MC5RB2_t)}, + {2, 0x00, 0, M_TYPE(PacketChannelRequest_8b_t, u.Short, + PacketChannelRequest_NOB3RB3_t)}, + {5, 0x08, 0, M_TYPE(PacketChannelRequest_8b_t, u.TwoPhase, + PacketChannelRequest_RB3_t)}, + {5, 0x09, 0, M_TYPE(PacketChannelRequest_8b_t, u.PageResponse, + PacketChannelRequest_RB3_t)}, + {5, 0x0a, 0, M_TYPE(PacketChannelRequest_8b_t, u.CellUpdate, + PacketChannelRequest_RB3_t)}, + {5, 0x0b, 0, M_TYPE(PacketChannelRequest_8b_t, u.MMProcedure, + PacketChannelRequest_RB3_t)}, + {5, 0x0c, 0, M_TYPE(PacketChannelRequest_8b_t, u.SingleBlockNoTBF, + PacketChannelRequest_RB3_t)}, + {6, 0x1a, 0, M_TYPE(PacketChannelRequest_8b_t, u.OnePhaseUnack, + PacketChannelRequest_RB2_t)}, + {6, 0x1b, 0, M_TYPE(PacketChannelRequest_8b_t, u.DedicatedChannel, + PacketChannelRequest_RB2_t)}, + {6, 0x1c, 0, M_TYPE(PacketChannelRequest_8b_t, u.EmergencyCall, + PacketChannelRequest_RB2_t)}, + {5, 0x0f, 0, M_TYPE(PacketChannelRequest_8b_t, u.SingleBlockMBMS, + PacketChannelRequest_RB3_t)}, +}; + +CSN_DESCR_BEGIN (PacketChannelRequest_8b_t) + M_CHOICE (PacketChannelRequest_8b_t, Type, + PacketChannelRequest_8b_Choice, ElementsOf(PacketChannelRequest_8b_Choice)), +CSN_DESCR_END (PacketChannelRequest_8b_t) + +/* EGPRS Packet Channel Request (11 bit block, see table 11.2.5a.2) */ +static const +CSN_ChoiceElement_t EGPRS_PacketChannelRequest_Choice[] = +{ + {1, 0x00, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.OnePhase, + PacketChannelRequest_MC5P2RB3_t)}, + {3, 0x04, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.Short, + PacketChannelRequest_NOB3P2RB3_t)}, + {3, 0x05, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.OnePhaseRedLatency, + PacketChannelRequest_MCG3P2RB3_t)}, + {6, 0x30, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.TwoPhase, + PacketChannelRequest_P2RB3_t)}, + {6, 0x33, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.Signalling, + PacketChannelRequest_RB5_t)}, + {6, 0x35, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.OnePhaseUnack, + PacketChannelRequest_RB5_t)}, + {6, 0x36, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.DedicatedChannel, + PacketChannelRequest_RB5_t)}, + {6, 0x37, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.EmergencyCall, + PacketChannelRequest_RB5_t)}, + {6, 0x38, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.TwoPhaseIPA, + PacketChannelRequest_P2RB3_t)}, + {6, 0x39, 0, M_TYPE(EGPRS_PacketChannelRequest_t, u.SignallingIPA, + PacketChannelRequest_RB5_t)}, +}; + +CSN_DESCR_BEGIN (EGPRS_PacketChannelRequest_t) + M_CHOICE (EGPRS_PacketChannelRequest_t, Type, + EGPRS_PacketChannelRequest_Choice, ElementsOf(EGPRS_PacketChannelRequest_Choice)), +CSN_DESCR_END (EGPRS_PacketChannelRequest_t) + // ---------------------------------------------------------------------------- // osmo-pcu RLCMAC APIs // ---------------------------------------------------------------------------- @@ -6153,3 +6306,54 @@ return ret; } + +int decode_pkt_ch_req(guint16 ra, PacketChannelRequest_t *req) +{ + const CSN_DESCR *descr; + unsigned readIndex = 0; + guint8 bv_data[2]; + csnStream_t ar; + int ret; + + /* Allocate a bitvector on stack */ + struct bitvec bv = { + .cur_bit = 0, + .data_len = 2, + .data = bv_data, + }; + + switch (req->type) { + case GSM_RLCMAC_PKT_CH_REQ_GPRS_11B: + case GSM_RLCMAC_PKT_CH_REQ_EGPRS: + /* Unpack the bits: xxxxxxxx xxx..... */ + bv_data[0] = (guint8) (ra >> 3); + bv_data[1] = (guint8) ((ra & 0x07) << 5); + + if (req->type == GSM_RLCMAC_PKT_CH_REQ_EGPRS) + descr = CSNDESCR(EGPRS_PacketChannelRequest_t); + else + descr = CSNDESCR(PacketChannelRequest_11b_t); + + csnStreamInit(&ar, 0, 11); + break; + case GSM_RLCMAC_PKT_CH_REQ_GPRS_8B: + /* Unpack the bits: xxxxxxxx ........ */ + bv_data[0] = (guint8) (ra & 0xff); + + descr = CSNDESCR(PacketChannelRequest_8b_t); + csnStreamInit(&ar, 0, 8); + break; + + default: + /* Type must be set by the caller */ + OSMO_ASSERT(0); + } + + /* Recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */ + LOGP(DCSN1, LOGL_INFO, "csnStreamDecoder (%sPacket Channel Request): ", + req->type == GSM_RLCMAC_PKT_CH_REQ_EGPRS ? "EGPRS " : ""); + ret = csnStreamDecoder(&ar, descr, &bv, &readIndex, (void *) &req->u); + LOGPC(DCSN1, LOGL_INFO, "\n"); + + return ret; +} diff --git a/src/gsm_rlcmac.h b/src/gsm_rlcmac.h index e9ae20a..d2fac1f 100644 --- a/src/gsm_rlcmac.h +++ b/src/gsm_rlcmac.h @@ -5330,6 +5330,125 @@ } EnhancedMeasurementReport_t; +/* Common (unified) fields for [EGPRS] Packet Channel Request + * (see 3GPP TS 44.060, tables 11.2.5.1, 11.2.5.2, and 11.2.5a.2) */ +typedef struct { + guint8 MultislotClass; + guint8 Priority; + guint8 RandomBits; +} PacketChannelRequest_MC5P2RB3_t; + +typedef struct { + guint8 MultislotClass; + guint8 RandomBits; +} PacketChannelRequest_MC5RB2_t; + +typedef struct { + guint8 MultislotClassGroup; + guint8 Priority; + guint8 RandomBits; +} PacketChannelRequest_MCG3P2RB3_t; + +typedef struct { + guint8 NumberOfBlocks; + guint8 Priority; + guint8 RandomBits; +} PacketChannelRequest_NOB3P2RB3_t; + +typedef struct { + guint8 NumberOfBlocks; + guint8 RandomBits; +} PacketChannelRequest_NOB3RB3_t; + +typedef struct { + guint8 Priority; + guint8 RandomBits; +} PacketChannelRequest_P2RB3_t; + +struct PacketChannelRequest_RB235_t { + guint8 RandomBits; +}; + +typedef struct PacketChannelRequest_RB235_t PacketChannelRequest_RB5_t; +typedef struct PacketChannelRequest_RB235_t PacketChannelRequest_RB3_t; +typedef struct PacketChannelRequest_RB235_t PacketChannelRequest_RB2_t; + +/* Packet Channel Request (11 bit block, see table 11.2.5.1) */ +typedef struct +{ + guint8 Type; + union + { + PacketChannelRequest_MC5P2RB3_t OnePhase; + PacketChannelRequest_NOB3P2RB3_t Short; + PacketChannelRequest_P2RB3_t TwoPhase; + PacketChannelRequest_RB5_t PageResponse; + PacketChannelRequest_RB5_t CellUpdate; + PacketChannelRequest_RB5_t MMProcedure; + PacketChannelRequest_RB5_t SingleBlockNoTBF; + PacketChannelRequest_RB5_t OnePhaseUnack; + PacketChannelRequest_RB5_t DedicatedChannel; + PacketChannelRequest_RB5_t EmergencyCall; + PacketChannelRequest_RB5_t SingleBlockMBMS; + } u; +} PacketChannelRequest_11b_t; + +/* Packet Channel Request (8 bit block, see table 11.2.5.2) */ +typedef struct +{ + guint8 Type; + union + { + PacketChannelRequest_MC5RB2_t OnePhase; + PacketChannelRequest_NOB3RB3_t Short; + PacketChannelRequest_RB3_t TwoPhase; + PacketChannelRequest_RB3_t PageResponse; + PacketChannelRequest_RB3_t CellUpdate; + PacketChannelRequest_RB3_t MMProcedure; + PacketChannelRequest_RB3_t SingleBlockNoTBF; + PacketChannelRequest_RB2_t OnePhaseUnack; + PacketChannelRequest_RB2_t DedicatedChannel; + PacketChannelRequest_RB2_t EmergencyCall; + PacketChannelRequest_RB3_t SingleBlockMBMS; + } u; +} PacketChannelRequest_8b_t; + +/* EGPRS Packet Channel Request (11 bit block, see table 11.2.5a.2) */ +typedef struct +{ + guint8 Type; + union + { + PacketChannelRequest_MC5P2RB3_t OnePhase; + PacketChannelRequest_NOB3P2RB3_t Short; + PacketChannelRequest_MCG3P2RB3_t OnePhaseRedLatency; + PacketChannelRequest_P2RB3_t TwoPhase; + PacketChannelRequest_RB5_t Signalling; + PacketChannelRequest_RB5_t OnePhaseUnack; + PacketChannelRequest_RB5_t DedicatedChannel; + PacketChannelRequest_RB5_t EmergencyCall; + PacketChannelRequest_P2RB3_t TwoPhaseIPA; + PacketChannelRequest_RB5_t SignallingIPA; + } u; +} EGPRS_PacketChannelRequest_t; + +/* Union of all possible Packet Channel Request types */ +typedef struct +{ + enum { + GSM_RLCMAC_PKT_CH_REQ_UNKNOWN = 0, + GSM_RLCMAC_PKT_CH_REQ_GPRS_11B, + GSM_RLCMAC_PKT_CH_REQ_GPRS_8B, + GSM_RLCMAC_PKT_CH_REQ_EGPRS, + } type; + union + { + PacketChannelRequest_11b_t gprs_11b; + PacketChannelRequest_8b_t gprs_8b; + EGPRS_PacketChannelRequest_t egprs; + } u; +} PacketChannelRequest_t; + int decode_gsm_rlcmac_uplink(struct bitvec *vector, RlcMacUplink_t *data); int decode_gsm_rlcmac_downlink(struct bitvec *vector, RlcMacDownlink_t *data); int encode_gsm_rlcmac_downlink(struct bitvec *vector, RlcMacDownlink_t *data); @@ -5337,4 +5456,6 @@ void decode_gsm_rlcmac_uplink_data(struct bitvec *vector, RlcMacUplinkDataBlock_t * data); void encode_gsm_rlcmac_downlink_data(struct bitvec *vector, RlcMacDownlinkDataBlock_t * data); int decode_gsm_ra_cap(struct bitvec *vector, MS_Radio_Access_capability_t * data); + int decode_pkt_ch_req(guint16 ra, PacketChannelRequest_t *data); + #endif /* __PACKET_GSM_RLCMAC_H__ */ diff --git a/tests/rlcmac/RLCMACTest.cpp b/tests/rlcmac/RLCMACTest.cpp index 0215cc8..fb5dbb5 100644 --- a/tests/rlcmac/RLCMACTest.cpp +++ b/tests/rlcmac/RLCMACTest.cpp @@ -471,6 +471,118 @@ bitvec_free(bv_dec); } +void testPktChReqGPRS(void *test_ctx) +{ + PacketChannelRequest_t req; + int rc; + + printf("*** %s ***\n", __func__); + + static const uint16_t GPRSPktCh11bReqs[] = { + /* < One Phase Access Request : '0'B + < MultislotClass : '01010'B > + < Priority : '10'B > + < RandomBits : '101'B > > */ + 0x155, + /* < Short Access Request : '100'B + < NumberOfBlocks : '101'B > + < Priority : '10'B > + < RandomBits : '010'B > > */ + 0x4b2, + /* < Two Phase Access Request : '110000'B + < Priority : '11'B > + < RandomBits : '000'B > > */ + 0x618, + /* < MM Procedure : '110011'B + < RandomBits : '11001'B > > */ + 0x679, + }; + + /* Indicate block type to decode_pkt_ch_req() */ + req.type = PacketChannelRequest_t::GSM_RLCMAC_PKT_CH_REQ_GPRS_11B; + + for (size_t i = 0; i < ARRAY_SIZE(GPRSPktCh11bReqs); i++) { + rc = decode_pkt_ch_req(GPRSPktCh11bReqs[i], &req); + printf("decode_pkt_ch_req(0x%03x) returns %d\n", GPRSPktCh11bReqs[i], rc); + } + + static const uint16_t GPRSPktCh8bReqs[] = { + /* < One Phase Access Request : '1'B + < MultislotClass : '01010'B > + < RandomBits : '10'B > > */ + 0xaa, + /* < Short Access Request : '00'B + < NumberOfBlocks : '101'B > + < RandomBits : '010'B > > */ + 0x2a, + /* < Two Phase Access Request : '01000'B + < RandomBits : '010'B > > */ + 0x42, + /* < Emergency call : '011100'B + < RandomBits : '11'B > > */ + 0x73, + }; + + /* Indicate block type to decode_pkt_ch_req() */ + req.type = PacketChannelRequest_t::GSM_RLCMAC_PKT_CH_REQ_GPRS_8B; + + for (size_t i = 0; i < ARRAY_SIZE(GPRSPktCh8bReqs); i++) { + rc = decode_pkt_ch_req(GPRSPktCh8bReqs[i], &req); + printf("decode_pkt_ch_req(0x%02x) returns %d\n", GPRSPktCh8bReqs[i], rc); + } +} + +void testPktChReqEGPRS(void *test_ctx) +{ + PacketChannelRequest_t req; + int rc; + + printf("*** %s ***\n", __func__); + + static const uint16_t EGPRSPktChReqs[] = { + /* < One Phase Access Request : '0'B + < MultislotClass : '10101'B > + < Priority : '10'B > + < RandomBits : '101'B > > */ + 0x2b5, + /* < One Phase Access Request : '0'B + < MultislotClass : '01010'B > + < Priority : '01'B > + < RandomBits : '010'B > > */ + 0x14a, + /* < Short Access Request : '100'B + < NumberOfBlocks : '001'B > + < Priority : '01'B > + < RandomBits : '000'B > > */ + 0x428, + /* < Two Phase Access Request : '110000'B + < Priority : '00'B > + < RandomBits : '000'B > > */ + 0x600, + /* < Two Phase Access Request : '110000'B + < Priority : '11'B > + < RandomBits : '111'B > > */ + 0x61f, + /* < Signalling : '110011'B + < RandomBits : '10101'B > > */ + 0x675, + /* < Signalling : '110011'B + < RandomBits : '10001'B > > */ + 0x671, + /* < Emergency call : '110111'B + < RandomBits : '11001'B > > */ + 0x6f9, + }; + + /* Indicate block type to decode_pkt_ch_req() */ + req.type = PacketChannelRequest_t::GSM_RLCMAC_PKT_CH_REQ_EGPRS; + + for (size_t i = 0; i < ARRAY_SIZE(EGPRSPktChReqs); i++) { + rc = decode_pkt_ch_req(EGPRSPktChReqs[i], &req); + printf("decode_pkt_ch_req(0x%03x) returns %d\n", EGPRSPktChReqs[i], rc); + } +} + int main(int argc, char *argv[]) { void *ctx = talloc_named_const(NULL, 1, "RLCMACTest"); @@ -490,5 +602,9 @@ testRAcap(ctx); testMalformedRAcap(ctx); testRAcap2(ctx); + + testPktChReqGPRS(ctx); + testPktChReqEGPRS(ctx); + talloc_free(ctx); } diff --git a/tests/rlcmac/RLCMACTest.err b/tests/rlcmac/RLCMACTest.err index c271e5c..469ec9e 100644 --- a/tests/rlcmac/RLCMACTest.err +++ b/tests/rlcmac/RLCMACTest.err @@ -37,3 +37,19 @@ DCSN1 INFO csnStreamDecoder (RAcap): MS_RA_capability_value { | Choice MS_RA_capability_value_Choice = 1 | u.Content length = 21 | offset = 4 | RF_Power_Capability = 1 | Exist_A5_bits = 0 | ES_IND = 1 | PS = 0 | VGCS = 0 | VBS = 0 | Exist_Multislot_capability = 1 | : Multislot_capability | Exist_HSCSD_multislot_class = 0 | Exist_GPRS_multislot_class = 1 | GPRS_multislot_class = 3 | GPRS_Extended_Dynamic_Allocation_Capability = 0 | Exist_SM = 0 | Exist_ECSD_multislot_class = 0 | Exist_EGPRS_multislot_class = 1 | DCSN1 ERROR csnStreamDecoder: error NEED_MORE BITS TO UNPACK (-5) at EGPRS_multislot_class (idx 31): End Multislot_capability | DCSN1 INFO csnStreamDecoder (RAcap): MS_RA_capability_value { | Choice MS_RA_capability_value_Choice = 1 | u.Content length = 29 | offset = 4 | RF_Power_Capability = 1 | Exist_A5_bits = 0 | ES_IND = 1 | PS = 0 | VGCS = 0 | VBS = 0 | Exist_Multislot_capability = 1 | : Multislot_capability | Exist_HSCSD_multislot_class = 0 | Exist_GPRS_multislot_class = 1 | GPRS_multislot_class = 3 | GPRS_Extended_Dynamic_Allocation_Capability = 0 | Exist_SM = 0 | Exist_ECSD_multislot_class = 0 | Exist_EGPRS_multislot_class = 1 | EGPRS_multislot_class = 0 | EGPRS_Extended_Dynamic_Allocation_Capability = 0 | Exist_DTM_GPRS_multislot_class = 0 | : End Multislot_capability | Exist_Eight_PSK_Power_Capability = 0 | COMPACT_Interference_Measurement_Capability = 0 | Revision_Level_Indicator = NULL | UMTS_FDD_Radio_Access_Technology_Capability = NULL | UMTS_384_TDD_Radio_Access_Technology_Capability = NULL | CDMA2000_Radio_Access_Technology_Capability = NULL | UMTS_128_TDD_Radio_Access_Technology_Capability = NULL | GERAN_Feature_Package_1 = NULL | Modulation_based_multislot_class_support = NULL | GMSK_MultislotPowerProfile = NULL | EightPSK_MultislotProfile = NULL | MultipleTBF_Capability = NULL | DownlinkAdvancedReceiverPerformance = NULL | ExtendedRLC_MAC_ControlMessageSegmentionsCapability = NULL | DTM_EnhancementsCapability = NULL | PS_HandoverCapability = NULL | DTM_Handover_Capability = NULL | FlexibleTimeslotAssignment = NULL | GAN_PS_HandoverCapability = NULL | RLC_Non_persistentMode = NULL | ReducedLatencyCapability = NULL | UplinkEGPRS2 = NULL | DownlinkEGPRS2 = NULL | EUTRA_FDD_Support = NULL | EUTRA_TDD_Support = NULL | GERAN_To_EUTRAN_supportInGERAN_PTM = NULL | PriorityBasedReselectionSupport = NULL | MS_RA_capability_value } | Padding = 0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0| DCSN1 INFO csnStreamDecoder (RAcap): MS_RA_capability_value { | Choice MS_RA_capability_value_Choice = 1 | u.Content length = 73 | offset = 4 | RF_Power_Capability = 4 | Exist_A5_bits = 1 | A5_bits = 80 | ES_IND = 1 | PS = 1 | VGCS = 0 | VBS = 0 | Exist_Multislot_capability = 1 | : Multislot_capability | Exist_HSCSD_multislot_class = 0 | Exist_GPRS_multislot_class = 1 | GPRS_multislot_class = 12 | GPRS_Extended_Dynamic_Allocation_Capability = 1 | Exist_SM = 1 | SMS_VALUE = 7 | SM_VALUE = 1 | Exist_ECSD_multislot_class = 0 | Exist_EGPRS_multislot_class = 1 | EGPRS_multislot_class = 12 | EGPRS_Extended_Dynamic_Allocation_Capability = 1 | Exist_DTM_GPRS_multislot_class = 1 | DTM_GPRS_multislot_class = 3 | Single_Slot_DTM = 0 | : DTM_EGPRS_Params | Exist_DTM_EGPRS_multislot_class = 1 | DTM_EGPRS_multislot_class = 3 | : End DTM_EGPRS_Params | : End Multislot_capability | Exist_Eight_PSK_Power_Capability = 1 | Eight_PSK_Power_Capability = 2 | COMPACT_Interference_Measurement_Capability = 0 | Revision_Level_Indicator = 1 | UMTS_FDD_Radio_Access_Technology_Capability = 0 | UMTS_384_TDD_Radio_Access_Technology_Capability = 0 | CDMA2000_Radio_Access_Technology_Capability = 0 | UMTS_128_TDD_Radio_Access_Technology_Capability = 0 | GERAN_Feature_Package_1 = 1 | Exist_Extended_DTM_multislot_class = 0 | Modulation_based_multislot_class_support = 0 | Exist_HighMultislotCapability = 0 | Exist_GERAN_lu_ModeCapability = 0 | GMSK_MultislotPowerProfile = 3 | EightPSK_MultislotProfile = 3 | MultipleTBF_Capability = 0 | DownlinkAdvancedReceiverPerformance = 1 | ExtendedRLC_MAC_ControlMessageSegmentionsCapability = 1 | DTM_EnhancementsCapability = 1 | Exist_DTM_GPRS_HighMultislotClass = 0 | PS_HandoverCapability = 0 | DTM_Handover_Capability = NULL | FlexibleTimeslotAssignment = NULL | GAN_PS_HandoverCapability = NULL | RLC_Non_persistentMode = NULL | ReducedLatencyCapability = NULL | UplinkEGPRS2 = NULL | DownlinkEGPRS2 = NULL | EUTRA_FDD_Support = NULL | EUTRA_TDD_Support = NULL | GERAN_To_EUTRAN_supportInGERAN_PTM = NULL | PriorityBasedReselectionSupport = NULL | MS_RA_capability_value } | MS_RA_capability_value { | Choice MS_RA_capability_value_Choice = 7 | u.Content length = 34 | offset = 4 | RF_Power_Capability = 4 | Exist_A5_bits = 0 | ES_IND = 1 | PS = 1 | VGCS = 0 | VBS = 0 | Exist_Multislot_capability = 0 | Exist_Eight_PSK_Power_Capability = 1 | Eight_PSK_Power_Capability = 2 | COMPACT_Interference_Measurement_Capability = 0 | Revision_Level_Indicator = 1 | UMTS_FDD_Radio_Access_Technology_Capability = 0 | UMTS_384_TDD_Radio_Access_Technology_Capability = 0 | CDMA2000_Radio_Access_Technology_Capability = 0 | UMTS_128_TDD_Radio_Access_Technology_Capability = 0 | GERAN_Feature_Package_1 = 1 | Exist_Extended_DTM_multislot_class = 0 | Modulation_based_multislot_class_support = 0 | Exist_HighMultislotCapability = 0 | Exist_GERAN_lu_ModeCapability = 0 | GMSK_MultislotPowerProfile = 3 | EightPSK_MultislotProfile = 3 | MultipleTBF_Capability = 0 | DownlinkAdvancedReceiverPerformance = 1 | ExtendedRLC_MAC_ControlMessageSegmentionsCapability = 1 | DTM_EnhancementsCapability = 1 | Exist_DTM_GPRS_HighMultislotClass = 0 | PS_HandoverCapability = 0 | DTM_Handover_Capability = NULL | FlexibleTimeslotAssignment = NULL | GAN_PS_HandoverCapability = NULL | RLC_Non_persistentMode = NULL | ReducedLatencyCapability = NULL | UplinkEGPRS2 = NULL | DownlinkEGPRS2 = NULL | EUTRA_FDD_Support = NULL | EUTRA_TDD_Support = NULL | GERAN_To_EUTRAN_supportInGERAN_PTM = NULL | PriorityBasedReselectionSupport = NULL | MS_RA_capability_value } | MS_RA_capability_value { | Choice MS_RA_capability_value_Choice = 3 | u.Content length = 34 | offset = 4 | RF_Power_Capability = 1 | Exist_A5_bits = 0 | ES_IND = 1 | PS = 1 | VGCS = 0 | VBS = 0 | Exist_Multislot_capability = 0 | Exist_Eight_PSK_Power_Capability = 1 | Eight_PSK_Power_Capability = 2 | COMPACT_Interference_Measurement_Capability = 0 | Revision_Level_Indicator = 1 | UMTS_FDD_Radio_Access_Technology_Capability = 0 | UMTS_384_TDD_Radio_Access_Technology_Capability = 0 | CDMA2000_Radio_Access_Technology_Capability = 0 | UMTS_128_TDD_Radio_Access_Technology_Capability = 0 | GERAN_Feature_Package_1 = 1 | Exist_Extended_DTM_multislot_class = 0 | Modulation_based_multislot_class_support = 0 | Exist_HighMultislotCapability = 0 | Exist_GERAN_lu_ModeCapability = 0 | GMSK_MultislotPowerProfile = 3 | EightPSK_MultislotProfile = 3 | MultipleTBF_Capability = 0 | DownlinkAdvancedReceiverPerformance = 1 | ExtendedRLC_MAC_ControlMessageSegmentionsCapability = 1 | DTM_EnhancementsCapability = 1 | Exist_DTM_GPRS_HighMultislotClass = 0 | PS_HandoverCapability = 0 | DTM_Handover_Capability = NULL | FlexibleTimeslotAssignment = NULL | GAN_PS_HandoverCapability = NULL | RLC_Non_persistentMode = NULL | ReducedLatencyCapability = NULL | UplinkEGPRS2 = NULL | DownlinkEGPRS2 = NULL | EUTRA_FDD_Support = NULL | EUTRA_TDD_Support = NULL | GERAN_To_EUTRAN_supportInGERAN_PTM = NULL | PriorityBasedReselectionSupport = NULL | MS_RA_capability_value } | Padding = 0| +DCSN1 INFO csnStreamDecoder (Packet Channel Request): Choice PacketChannelRequest_11b_Choice = 0 | : u.OnePhase | MultislotClass = 10 | Priority = 2 | RandomBits = 5 | : End u.OnePhase | +DCSN1 INFO csnStreamDecoder (Packet Channel Request): Choice PacketChannelRequest_11b_Choice = 4 | : u.Short | NumberOfBlocks = 5 | Priority = 2 | RandomBits = 2 | : End u.Short | +DCSN1 INFO csnStreamDecoder (Packet Channel Request): Choice PacketChannelRequest_11b_Choice = 48 | : u.TwoPhase | Priority = 3 | RandomBits = 0 | : End u.TwoPhase | +DCSN1 INFO csnStreamDecoder (Packet Channel Request): Choice PacketChannelRequest_11b_Choice = 51 | : u.MMProcedure | RandomBits = 25 | : End u.MMProcedure | +DCSN1 INFO csnStreamDecoder (Packet Channel Request): Choice PacketChannelRequest_8b_Choice = 1 | : u.OnePhase | MultislotClass = 10 | RandomBits = 2 | : End u.OnePhase | +DCSN1 INFO csnStreamDecoder (Packet Channel Request): Choice PacketChannelRequest_8b_Choice = 0 | : u.Short | NumberOfBlocks = 5 | RandomBits = 2 | : End u.Short | +DCSN1 INFO csnStreamDecoder (Packet Channel Request): Choice PacketChannelRequest_8b_Choice = 8 | : u.TwoPhase | RandomBits = 2 | : End u.TwoPhase | +DCSN1 INFO csnStreamDecoder (Packet Channel Request): Choice PacketChannelRequest_8b_Choice = 28 | : u.EmergencyCall | RandomBits = 3 | : End u.EmergencyCall | +DCSN1 INFO csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 0 | : u.OnePhase | MultislotClass = 21 | Priority = 2 | RandomBits = 5 | : End u.OnePhase | +DCSN1 INFO csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 0 | : u.OnePhase | MultislotClass = 10 | Priority = 1 | RandomBits = 2 | : End u.OnePhase | +DCSN1 INFO csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 4 | : u.Short | NumberOfBlocks = 1 | Priority = 1 | RandomBits = 0 | : End u.Short | +DCSN1 INFO csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 48 | : u.TwoPhase | Priority = 0 | RandomBits = 0 | : End u.TwoPhase | +DCSN1 INFO csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 48 | : u.TwoPhase | Priority = 3 | RandomBits = 7 | : End u.TwoPhase | +DCSN1 INFO csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 51 | : u.Signalling | RandomBits = 21 | : End u.Signalling | +DCSN1 INFO csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 51 | : u.Signalling | RandomBits = 17 | : End u.Signalling | +DCSN1 INFO csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 55 | : u.EmergencyCall | RandomBits = 25 | : End u.EmergencyCall | diff --git a/tests/rlcmac/RLCMACTest.ok b/tests/rlcmac/RLCMACTest.ok index 4e4967b..52db8f7 100644 --- a/tests/rlcmac/RLCMACTest.ok +++ b/tests/rlcmac/RLCMACTest.ok @@ -149,3 +149,21 @@ decode_gsm_ra_cap() returns 0 GPRS multislot class = 12 EGPRS multislot class = 12 +*** testPktChReqGPRS *** +decode_pkt_ch_req(0x155) returns 0 +decode_pkt_ch_req(0x4b2) returns 0 +decode_pkt_ch_req(0x618) returns 0 +decode_pkt_ch_req(0x679) returns 0 +decode_pkt_ch_req(0xaa) returns 0 +decode_pkt_ch_req(0x2a) returns 0 +decode_pkt_ch_req(0x42) returns 0 +decode_pkt_ch_req(0x73) returns 0 +*** testPktChReqEGPRS *** +decode_pkt_ch_req(0x2b5) returns 0 +decode_pkt_ch_req(0x14a) returns 0 +decode_pkt_ch_req(0x428) returns 0 +decode_pkt_ch_req(0x600) returns 0 +decode_pkt_ch_req(0x61f) returns 0 +decode_pkt_ch_req(0x675) returns 0 +decode_pkt_ch_req(0x671) returns 0 +decode_pkt_ch_req(0x6f9) returns 0 -- To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/17718 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-pcu Gerrit-Branch: master Gerrit-Change-Id: I96df3352856933c9140177b2801a2c71f4134183 Gerrit-Change-Number: 17718 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <axilirator at gmail.com> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200404/256c6a40/attachment.htm>