hi,

steve and me experienced a problem with dissecting a "packet resource request" at pcu. the patch i attached will show the following output:

$ make && src/osmo-pcu

PayloadType = 1 | spare = 0 | R = 0 | MESSAGE_TYPE = 5 | Exist_ACCESS_TYPE = 1 | ACCESS_TYPE = 3 |  : ID | Choice PacketResourceRequestID = 1 | u.TLLI = 0x7ee0e8fd | : End ID | Exist_MS_Radio_Access_capability = 1 |  : MS_Radio_Access_capability | MS_RA_capability_value { | Choice MS_RA_capability_value_Choice = 1 | u.Content length = 34 | RF_Power_Capability = 4 | Exist_A5_bits = 1 | A5_bits = 96 | 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 = 10 ....

this is all correct, but then i patched the get_ms_class_by_capability() function at grps_rlcmac_data.c:

...
printf("we have = %d\n", cap->Count_MS_RA_capability_value);
        for (i = 0; i < cap->Count_MS_RA_capability_value; i++) {
printf("index=%d\n", cap->MS_RA_capability_value[i].IndexOfAccTech);
printf("exists multislot capability %d\n", cap->MS_RA_capability_value[i].u.Content.Exist_Multislot_capability);
printf("exists class %d\n", cap->MS_RA_capability_value[i].u.Content.Multislot_capability.Exist_GPRS_multislot_class);
printf("class %d\n", cap->MS_RA_capability_value[i].u.Content.Multislot_capability.GPRS_multislot_class);
...

the output continues as this:

we have = 2
index=2
exists multislot capability 0
exists class 1
class 10
index=0
exists multislot capability 0
exists class 0
class 0

the "class 10" is correct, also it is correct that the class only exists in the first entry of the capability array. the output of the dissector states that multislot capability exists (Exist_Multislot_capability = 1), but if i look at the structure, this field is not set.

i looked at the dissector code, but don't really understand why CSN_NEXT_EXIST works for some elements and not for others.

any ideas?

regards,

andreas