aboutsummaryrefslogtreecommitdiffstats
path: root/src/gsm_rlcmac.h
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-03-21 00:13:33 +0100
committerPau Espin Pedrol <pespin@sysmocom.de>2020-03-23 19:01:58 +0100
commit7faa5da209d0ef48fe593603c217615f09fb61fb (patch)
treeba4505c4be921aa0221815884e9fa08b43f6698c /src/gsm_rlcmac.h
parentefad80bfbffb2a35d2516e56dc40979f19c6c370 (diff)
rlcmac: Fix bug receiving RA cap
It seems the assumptions regarding maximum number of RA capabilitites in one message were wrong. Doing some rough calculations, each RA capabilitiy value (without extensions) can take around 20ish bits, which means for a message containing up to 52 bytes that quite a lot of different values could be theoretically fed in. Let's be safe and increase the array size to be able to handle all different access technologies listed in See TS 24.008 table 10.5.146 following restrictions: * "The MS Radio Access capability is a type 4 information element, with a maximum length of 52 octets." * "Among the three Access Type Technologies GSM 900-P, GSM 900-E and GSM 900-R only one shall be present." * "the mobile station should provide the relevant radio access capability for either GSM 1800 band OR GSM 1900 band, not both". Wireshark requires similar fix (it's not important though because it currently uses another ad-hoc decoder for RAcap). Related: OS#4463 Change-Id: I5334eaacfbc238fae8bea50c9e9667c2117f81ff
Diffstat (limited to 'src/gsm_rlcmac.h')
-rw-r--r--src/gsm_rlcmac.h21
1 files changed, 6 insertions, 15 deletions
diff --git a/src/gsm_rlcmac.h b/src/gsm_rlcmac.h
index 10bb6afb..9e38966a 100644
--- a/src/gsm_rlcmac.h
+++ b/src/gsm_rlcmac.h
@@ -1224,10 +1224,6 @@ typedef struct
} Content_t;
-#define ABSOLUTE_MAX_BANDS 2 /* New fields for R4 extend the length of the capabilities message so we can only send 2 */
-
-#define MAX_ACCESS_TECHNOLOGIES_COUNT 16 /* No more than 16 instances */
-
typedef enum
{/* See TS 24.008 table 10.5.146 */
AccTech_GSMP = 0x0,
@@ -1246,14 +1242,9 @@ typedef enum
AccTech_GSMT810 = 0xd,
AccTech_GSMOther = 0xf
} AccessTechnology_t;
-
-#if 0
-typedef struct
-{
- guint8 CountAccessTechnologies;
- AccessTechnology_t AccessTechnologies[MAX_ACCESS_TECHNOLOGIES_COUNT];
-} AccessTechnologiesRequest_t;
-#endif
+/* Maximum entries in one message, Enum above, appying restrictions from section
+ 12.30 "MS Radio Access Capability 2": */
+#define MAX_ACCESS_TECHNOLOGIES_COUNT 11
typedef struct
{
@@ -1266,8 +1257,8 @@ typedef struct
{
guint8 Count_additional_access_technologies;
/* The value 0xf cannot be set for the first ATT, therefore we can only have
- ABSOLUTE_MAX_BANDS-1 additional access technologies. */
- Additional_access_technologies_struct_t Additional_access_technologies[ABSOLUTE_MAX_BANDS-1];
+ MAX_ACCESS_TECHNOLOGIES_COUNT-1 additional access technologies. */
+ Additional_access_technologies_struct_t Additional_access_technologies[MAX_ACCESS_TECHNOLOGIES_COUNT-1];
} Additional_access_technologies_t;
typedef struct
@@ -1285,7 +1276,7 @@ typedef struct
typedef struct
{
guint8 Count_MS_RA_capability_value; /* Recursive */
- MS_RA_capability_value_t MS_RA_capability_value[ABSOLUTE_MAX_BANDS];
+ MS_RA_capability_value_t MS_RA_capability_value[MAX_ACCESS_TECHNOLOGIES_COUNT];
} MS_Radio_Access_capability_t;