diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2018-02-21 00:39:07 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2018-03-11 00:47:14 +0100 |
commit | bdc55fad62e333951a0eb1fc7b96aaaec16dd6ff (patch) | |
tree | 2dde9a0de875f3e21e4e461df5bcb8f74c6c9496 /src/gprs_bssgp_pcu.cpp | |
parent | 8343b4adbbe9afd4294232429696ee9736ec1004 (diff) |
implement support for 3-digit MNC with leading zeros
Receive the mnc_3_digits flag from the PCU interface.
Bump the PCU interface to 9.
This is one part of the three identical pcuif_proto.h patches:
- I49cd762c3c9d7ee6a82451bdf3ffa2a060767947 (osmo-bts)
- I787fed84a7b613158a5618dd5cffafe4e4927234 (osmo-pcu)
- I78f30aef7aa224b2e9db54c3a844d8f520b3aee0 (osmo-bsc)
Add 3-digit flags and use the new RAI and LAI API from libosmocore throughout
the code base to be able to handle an MNC < 100 that has three digits (leading
zeros).
Depends: Id2240f7f518494c9df6c8bda52c0d5092f90f221 (libosmocore),
Ib7176b1d65a03b76f41f94bc9d3293a8a07d24c6 (libosmocore)
Change-Id: I787fed84a7b613158a5618dd5cffafe4e4927234
Diffstat (limited to 'src/gprs_bssgp_pcu.cpp')
-rw-r--r-- | src/gprs_bssgp_pcu.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp index 3cc86e25..67277358 100644 --- a/src/gprs_bssgp_pcu.cpp +++ b/src/gprs_bssgp_pcu.cpp @@ -44,6 +44,7 @@ static struct gprs_bssgp_pcu the_pcu = { 0, }; extern void *tall_pcu_ctx; extern uint16_t spoof_mcc, spoof_mnc; +extern bool spoof_mnc_3_digits; static void bvc_timeout(void *_priv); @@ -876,16 +877,12 @@ int gprs_ns_reconnect(struct gprs_nsvc *nsvc) struct gprs_bssgp_pcu *gprs_bssgp_create_and_connect(struct gprs_rlcmac_bts *bts, uint16_t local_port, uint32_t sgsn_ip, uint16_t sgsn_port, uint16_t nsei, uint16_t nsvci, uint16_t bvci, - uint16_t mcc, uint16_t mnc, uint16_t lac, uint16_t rac, + uint16_t mcc, uint16_t mnc, bool mnc_3_digits, uint16_t lac, uint16_t rac, uint16_t cell_id) { struct sockaddr_in dest; int rc; - mcc = ((mcc & 0xf00) >> 8) * 100 + ((mcc & 0x0f0) >> 4) * 10 + (mcc & 0x00f); - mnc = ((mnc & 0xf00) >> 8) * 100 + ((mnc & 0x0f0) >> 4) * 10 + (mnc & 0x00f); - cell_id = ntohs(cell_id); - /* if already created... return the current address */ if (the_pcu.bctx) return &the_pcu; @@ -930,7 +927,13 @@ struct gprs_bssgp_pcu *gprs_bssgp_create_and_connect(struct gprs_rlcmac_bts *bts return NULL; } the_pcu.bctx->ra_id.mcc = spoof_mcc ? : mcc; - the_pcu.bctx->ra_id.mnc = spoof_mnc ? : mnc; + if (spoof_mnc) { + the_pcu.bctx->ra_id.mnc = spoof_mnc; + the_pcu.bctx->ra_id.mnc_3_digits = spoof_mnc_3_digits; + } else { + the_pcu.bctx->ra_id.mnc = mnc; + the_pcu.bctx->ra_id.mnc_3_digits = mnc_3_digits; + } the_pcu.bctx->ra_id.lac = lac; the_pcu.bctx->ra_id.rac = rac; the_pcu.bctx->cell_id = cell_id; |