diff options
author | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2020-04-04 03:44:35 +0700 |
---|---|---|
committer | Vadim Yanitskiy <vyanitskiy@sysmocom.de> | 2020-05-23 19:38:35 +0700 |
commit | a2d972a38a4ad39ed318cb3f9ff63d0ff51df7b3 (patch) | |
tree | b4610b29a06a37506374a7806eb3e89a04ba284d | |
parent | 3f2022e2cbe532c80035e1b86c037603404f5522 (diff) |
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 adds
CSN.1 definitions for 11 bit EGPRS Packet Channel Request as per
3GPP TS 44.060, table 11.2.5a.2.
Change-Id: I96df3352856933c9140177b2801a2c71f4134183
Related: OS#1548
-rw-r--r-- | src/gsm_rlcmac.c | 96 | ||||
-rw-r--r-- | src/gsm_rlcmac.h | 43 | ||||
-rw-r--r-- | tests/rlcmac/RLCMACTest.cpp | 56 | ||||
-rw-r--r-- | tests/rlcmac/RLCMACTest.err | 9 | ||||
-rw-r--r-- | tests/rlcmac/RLCMACTest.ok | 18 |
5 files changed, 222 insertions, 0 deletions
diff --git a/src/gsm_rlcmac.c b/src/gsm_rlcmac.c index 9b5ecfea..c4ac4b12 100644 --- a/src/gsm_rlcmac.c +++ b/src/gsm_rlcmac.c @@ -5249,6 +5249,59 @@ CSN_DESCR_BEGIN (SI6_RestOctet_t) CSN_DESCR_END (SI6_RestOctet_t) #endif +/* EGPRS Packet Channel Request (see 3GPP TS 44.060, table 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_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_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_ChoiceElement_t EGPRS_PacketChannelRequest_Choice[] = +{ + {1, 0x00, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_MC5P2RB3_t)}, + {3, 0x04, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_NOB3P2RB3_t)}, + {3, 0x05, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_MCG3P2RB3_t)}, + {6, 0x30, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_P2RB3_t)}, + {6, 0x33, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)}, + {6, 0x35, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)}, + {6, 0x36, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)}, + {6, 0x37, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_RB5_t)}, + {6, 0x38, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, PacketChannelRequest_P2RB3_t)}, + {6, 0x39, 0, M_TYPE(EGPRS_PacketChannelRequest_t, Content, 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 +6206,46 @@ int encode_gsm_ra_cap(struct bitvec *vector, MS_Radio_Access_capability_t *data) return ret; } + +struct value_string egprs_pkt_ch_req_type_names[] = { + { EGPRS_PKT_CHAN_REQ_ONE_PHASE, "One Phase Access" }, + { EGPRS_PKT_CHAN_REQ_SHORT, "Short Access" }, + { EGPRS_PKT_CHAN_REQ_ONE_PHASE_RED_LATENCY, "One Phase Access (Reduced Latency MS)" }, + { EGPRS_PKT_CHAN_REQ_TWO_PHASE, "Two Phase Access" }, + { EGPRS_PKT_CHAN_REQ_SIGNALLING, "Signalling" }, + { EGPRS_PKT_CHAN_REQ_ONE_PHASE_UNACK, "One Phase Access (RLC unack mode)" }, + { EGPRS_PKT_CHAN_REQ_DEDICATED_CHANNEL, "Dedicated Channel Request" }, + { EGPRS_PKT_CHAN_REQ_EMERGENCY_CALL, "Emergency call" }, + { EGPRS_PKT_CHAN_REQ_TWO_PHASE_IPA, "Two Phase Access (by IPA capable MS)" }, + { EGPRS_PKT_CHAN_REQ_SIGNALLING_IPA, "Signalling (by IPA capable MS)" }, + { 0, NULL } +}; + +int decode_egprs_pkt_ch_req(guint16 ra, EGPRS_PacketChannelRequest_t *req) +{ + 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, + }; + + /* Unpack the bits: xxxxxxxx xxx..... */ + bv_data[0] = (guint8) (ra >> 3); + bv_data[1] = (guint8) ((ra & 0x07) << 5); + + csnStreamInit(&ar, 0, 11); + + /* Recursive csnStreamDecoder call uses LOGPC everywhere, so we need to start the log somewhere... */ + LOGP(DCSN1, LOGL_DEBUG, "csnStreamDecoder (EGPRS Packet Channel Request): "); + ret = csnStreamDecoder(&ar, CSNDESCR(EGPRS_PacketChannelRequest_t), + &bv, &readIndex, (void *) req); + LOGPC(DCSN1, LOGL_DEBUG, "\n"); + + return ret; +} diff --git a/src/gsm_rlcmac.h b/src/gsm_rlcmac.h index 9d859f33..642530f7 100644 --- a/src/gsm_rlcmac.h +++ b/src/gsm_rlcmac.h @@ -5330,6 +5330,47 @@ typedef struct } EnhancedMeasurementReport_t; +/* EGPRS Packet Channel Request (see 3GPP TS 44.060, table 11.2.5a.2) */ +typedef struct +{ + guint8 MultislotClassGroup; + guint8 MultislotClass; + guint8 NumberOfBlocks; + guint8 Priority; + guint8 RandomBits; +} EGPRS_PacketChannelRequestContent_t; + +/* HACK: we don't really want separate structures for each sub-type, because + * they all have a similar set of fields, so here we basically create a few + * aliases to EGPRS_PacketChannelRequestContent_t. This makes the API simpler. */ +typedef EGPRS_PacketChannelRequestContent_t PacketChannelRequest_MC5P2RB3_t; +typedef EGPRS_PacketChannelRequestContent_t PacketChannelRequest_MCG3P2RB3_t; +typedef EGPRS_PacketChannelRequestContent_t PacketChannelRequest_NOB3P2RB3_t; +typedef EGPRS_PacketChannelRequestContent_t PacketChannelRequest_P2RB3_t; +typedef EGPRS_PacketChannelRequestContent_t PacketChannelRequest_RB5_t; + +typedef struct +{ + /* NOTE: some fields may be uninitialized (always check Type) */ + guint8 Type; + EGPRS_PacketChannelRequestContent_t Content; +} EGPRS_PacketChannelRequest_t; + +typedef enum { + EGPRS_PKT_CHAN_REQ_ONE_PHASE = 0, + EGPRS_PKT_CHAN_REQ_SHORT, + EGPRS_PKT_CHAN_REQ_ONE_PHASE_RED_LATENCY, + EGPRS_PKT_CHAN_REQ_TWO_PHASE, + EGPRS_PKT_CHAN_REQ_SIGNALLING, + EGPRS_PKT_CHAN_REQ_ONE_PHASE_UNACK, + EGPRS_PKT_CHAN_REQ_DEDICATED_CHANNEL, + EGPRS_PKT_CHAN_REQ_EMERGENCY_CALL, + EGPRS_PKT_CHAN_REQ_TWO_PHASE_IPA, + EGPRS_PKT_CHAN_REQ_SIGNALLING_IPA, +} EGPRS_PacketChannelRequestType_t; + +extern struct value_string egprs_pkt_ch_req_type_names[]; + 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 +5378,6 @@ typedef struct 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_egprs_pkt_ch_req(guint16 ra, EGPRS_PacketChannelRequest_t *data); + #endif /* __PACKET_GSM_RLCMAC_H__ */ diff --git a/tests/rlcmac/RLCMACTest.cpp b/tests/rlcmac/RLCMACTest.cpp index 0215cc8d..f1b65088 100644 --- a/tests/rlcmac/RLCMACTest.cpp +++ b/tests/rlcmac/RLCMACTest.cpp @@ -471,6 +471,59 @@ MS Radio Access Capability bitvec_free(bv_dec); } +void testEGPRSPktChReq(void *test_ctx) +{ + EGPRS_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, + /* < Unknown (test) : '111111'B + < RandomBits : '01010'B > > */ + 0x7ea, + }; + + for (size_t i = 0; i < ARRAY_SIZE(EGPRSPktChReqs); i++) { + rc = decode_egprs_pkt_ch_req(EGPRSPktChReqs[i], &req); + printf("decode_egprs_pkt_ch_req(0x%03x) returns %d\n", EGPRSPktChReqs[i], rc); + if (rc == 0) + printf(" ==> %s\n", get_value_string(egprs_pkt_ch_req_type_names, req.Type)); + } +} + int main(int argc, char *argv[]) { void *ctx = talloc_named_const(NULL, 1, "RLCMACTest"); @@ -490,5 +543,8 @@ int main(int argc, char *argv[]) testRAcap(ctx); testMalformedRAcap(ctx); testRAcap2(ctx); + + testEGPRSPktChReq(ctx); + talloc_free(ctx); } diff --git a/tests/rlcmac/RLCMACTest.err b/tests/rlcmac/RLCMACTest.err index 83d416c9..3a2b370c 100644 --- a/tests/rlcmac/RLCMACTest.err +++ b/tests/rlcmac/RLCMACTest.err @@ -37,3 +37,12 @@ DCSN1 INFO csnStreamEncoder (RAcap): MS_RA_capability_value { | u.Content = 1 | DCSN1 INFO csnStreamDecoder (RAcap): MS_RA_capability_value { | Choice MS_RA_capability_value_Choice = 1 | u.Content length = 21 | offset = 1 | 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 = 1 | 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 = 1 | 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 = 1 | 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 = 1 | 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 DEBUG csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 0 | : Content | MultislotClass = 21 | Priority = 2 | RandomBits = 5 | : End Content | +DCSN1 DEBUG csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 0 | : Content | MultislotClass = 10 | Priority = 1 | RandomBits = 2 | : End Content | +DCSN1 DEBUG csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 4 | : Content | NumberOfBlocks = 1 | Priority = 1 | RandomBits = 0 | : End Content | +DCSN1 DEBUG csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 48 | : Content | Priority = 0 | RandomBits = 0 | : End Content | +DCSN1 DEBUG csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 48 | : Content | Priority = 3 | RandomBits = 7 | : End Content | +DCSN1 DEBUG csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 51 | : Content | RandomBits = 21 | : End Content | +DCSN1 DEBUG csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 51 | : Content | RandomBits = 17 | : End Content | +DCSN1 DEBUG csnStreamDecoder (EGPRS Packet Channel Request): Choice EGPRS_PacketChannelRequest_Choice = 55 | : Content | RandomBits = 25 | : End Content | +DCSN1 DEBUG csnStreamDecoder (EGPRS Packet Channel Request): DCSN1 ERROR csnStreamDecoder: error STREAM_NOT_SUPPORTED (-8) at EGPRS_PacketChannelRequest_Choice (idx 0) diff --git a/tests/rlcmac/RLCMACTest.ok b/tests/rlcmac/RLCMACTest.ok index 4e4967be..861b1b98 100644 --- a/tests/rlcmac/RLCMACTest.ok +++ b/tests/rlcmac/RLCMACTest.ok @@ -149,3 +149,21 @@ decode_gsm_ra_cap() returns 0 decode_gsm_ra_cap() returns 0 GPRS multislot class = 12 EGPRS multislot class = 12 +*** testEGPRSPktChReq *** +decode_egprs_pkt_ch_req(0x2b5) returns 0 + ==> One Phase Access +decode_egprs_pkt_ch_req(0x14a) returns 0 + ==> One Phase Access +decode_egprs_pkt_ch_req(0x428) returns 0 + ==> Short Access +decode_egprs_pkt_ch_req(0x600) returns 0 + ==> Two Phase Access +decode_egprs_pkt_ch_req(0x61f) returns 0 + ==> Two Phase Access +decode_egprs_pkt_ch_req(0x675) returns 0 + ==> Signalling +decode_egprs_pkt_ch_req(0x671) returns 0 + ==> Signalling +decode_egprs_pkt_ch_req(0x6f9) returns 0 + ==> Emergency call +decode_egprs_pkt_ch_req(0x7ea) returns -8 |