Import gsm48_construct_ra() from openbsc
This commit is contained in:
parent
debf955074
commit
35a939463e
|
@ -29,5 +29,6 @@ int gsm48_mi_to_string(char *string, const int str_len,
|
|||
|
||||
/* Parse Routeing Area Identifier */
|
||||
void gsm48_parse_ra(struct gprs_ra_id *raid, const uint8_t *buf);
|
||||
int gsm48_construct_ra(uint8_t *buf, const struct gprs_ra_id *raid);
|
||||
|
||||
#endif
|
||||
|
|
25
src/gsm48.c
25
src/gsm48.c
|
@ -326,3 +326,28 @@ void gsm48_parse_ra(struct gprs_ra_id *raid, const uint8_t *buf)
|
|||
raid->lac = ntohs(*(uint16_t *)(buf + 3));
|
||||
raid->rac = buf[5];
|
||||
}
|
||||
|
||||
int gsm48_construct_ra(uint8_t *buf, const struct gprs_ra_id *raid)
|
||||
{
|
||||
uint16_t mcc = raid->mcc;
|
||||
uint16_t mnc = raid->mnc;
|
||||
|
||||
buf[0] = ((mcc / 100) % 10) | (((mcc / 10) % 10) << 4);
|
||||
buf[1] = (mcc % 10);
|
||||
|
||||
/* I wonder who came up with the stupidity of encoding the MNC
|
||||
* differently depending on how many digits its decimal number has! */
|
||||
if (mnc < 100) {
|
||||
buf[1] |= 0xf0;
|
||||
buf[2] = ((mnc / 10) % 10) | ((mnc % 10) << 4);
|
||||
} else {
|
||||
buf[1] |= (mnc % 10) << 4;
|
||||
buf[2] = ((mnc / 100) % 10) | (((mcc / 10) % 10) << 4);
|
||||
}
|
||||
|
||||
*(uint16_t *)(buf+3) = htons(raid->lac);
|
||||
|
||||
buf[5] = raid->rac;
|
||||
|
||||
return 6;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue