bssgp_rim: move bssgp_parse_rim_ri and bssgp_create_rim_ri to gprs_bssgp_rim

The function bssgp_parse_rim_ri() and bssgp_create_rim_ri() are located
in gprs_bssgp.c, since there is now a gprs_bssgp_rim.c module it makes
more sense to put them there. Also adjust the code a bit so that its
more intuitive to read.

Change-Id: Icd667f41d5735de56cd9fb257670337c679dd258
Related: SYS#5103
This commit is contained in:
Philipp Maier 2021-01-06 20:56:43 +01:00
parent 9828d28fc3
commit 7450f77f57
8 changed files with 312 additions and 311 deletions

View File

@ -178,37 +178,6 @@ uint16_t bssgp_parse_cell_id(struct gprs_ra_id *raid, const uint8_t *buf);
int bssgp_create_cell_id(uint8_t *buf, const struct gprs_ra_id *raid,
uint16_t cid);
enum bssgp_rim_routing_info_discr {
BSSGP_RIM_ROUTING_INFO_GERAN,
BSSGP_RIM_ROUTING_INFO_UTRAN,
BSSGP_RIM_ROUTING_INFO_EUTRAN,
};
/*! BSSGP RIM Routing information, see also 3GPP TS 48.018, section 11.3.70 */
struct bssgp_rim_routing_info {
enum bssgp_rim_routing_info_discr discr;
union {
struct {
struct gprs_ra_id raid;
uint16_t cid;
} geran;
struct {
struct gprs_ra_id raid;
uint16_t rncid;
} utran;
struct {
struct osmo_eutran_tai tai;
/* See also 3GPP TS 36.413 9.2.1.37 and 3GPP TS 36.401 */
uint8_t global_enb_id[8];
uint8_t global_enb_id_len;
} eutran;
};
};
int bssgp_parse_rim_ri(struct bssgp_rim_routing_info *ri, const uint8_t *buf,
unsigned int len);
int bssgp_create_rim_ri(uint8_t *buf, const struct bssgp_rim_routing_info *ri);
/* Wrapper around TLV parser to parse BSSGP IEs */
static inline int bssgp_tlv_parse(struct tlv_parsed *tp, const uint8_t *buf, int len)
{

View File

@ -27,6 +27,36 @@
#include <osmocom/gprs/protocol/gsm_08_18.h>
enum bssgp_rim_routing_info_discr {
BSSGP_RIM_ROUTING_INFO_GERAN,
BSSGP_RIM_ROUTING_INFO_UTRAN,
BSSGP_RIM_ROUTING_INFO_EUTRAN,
};
/*! BSSGP RIM Routing information, see also 3GPP TS 48.018, section 11.3.70 */
struct bssgp_rim_routing_info {
enum bssgp_rim_routing_info_discr discr;
union {
struct {
struct gprs_ra_id raid;
uint16_t cid;
} geran;
struct {
struct gprs_ra_id raid;
uint16_t rncid;
} utran;
struct {
struct osmo_eutran_tai tai;
/* See also 3GPP TS 36.413 9.2.1.37 and 3GPP TS 36.401 */
uint8_t global_enb_id[8];
uint8_t global_enb_id_len;
} eutran;
};
};
int bssgp_parse_rim_ri(struct bssgp_rim_routing_info *ri, const uint8_t *buf, unsigned int len);
int bssgp_create_rim_ri(uint8_t *buf, const struct bssgp_rim_routing_info *ri);
/* 3GPP TS 48.018, table 11.3.63.1.1: RAN-INFORMATION-REQUEST Application Container coding for NACC */
struct bssgp_ran_inf_req_app_cont_nacc {
struct osmo_cell_global_id_ps reprt_cell;

View File

@ -326,97 +326,6 @@ int bssgp_create_cell_id(uint8_t *buf, const struct gprs_ra_id *raid,
return 8;
}
/*! Parse a RIM Routing information IE (3GPP TS 48.018, chapter 11.3.70).
* \param[out] ri user provided memory to store the parsed results.
* \param[in] buf input buffer of the value part of the IE.
* \returns length of parsed octets, -EINVAL on error. */
int bssgp_parse_rim_ri(struct bssgp_rim_routing_info *ri, const uint8_t *buf,
unsigned int len)
{
struct gprs_ra_id raid_temp;
memset(ri, 0, sizeof(*ri));
if (len < 2)
return -EINVAL;
ri->discr = buf[0] & 0x0f;
switch (ri->discr) {
case BSSGP_RIM_ROUTING_INFO_GERAN:
if (len < 9)
return -EINVAL;
ri->geran.cid = bssgp_parse_cell_id(&ri->geran.raid, buf + 1);
return 9;
case BSSGP_RIM_ROUTING_INFO_UTRAN:
if (len < 9)
return -EINVAL;
gsm48_parse_ra(&ri->utran.raid, buf + 1);
ri->utran.rncid = osmo_load16be(buf + 7);
return 9;
case BSSGP_RIM_ROUTING_INFO_EUTRAN:
if (len < 7 || len > 14)
return -EINVAL;
/* Note: 3GPP TS 24.301 Figure 9.9.3.32.1 and 3GPP TS 24.008
* Figure 10.5.130 specify MCC/MNC encoding in the same way,
* so we can re-use gsm48_parse_ra() for that. */
gsm48_parse_ra(&raid_temp, buf + 1);
ri->eutran.tai.mcc = raid_temp.mcc;
ri->eutran.tai.mnc = raid_temp.mnc;
ri->eutran.tai.mnc_3_digits = raid_temp.mnc_3_digits;
ri->eutran.tai.tac = osmo_load16be(buf + 4);
memcpy(ri->eutran.global_enb_id, buf + 6, len - 6);
ri->eutran.global_enb_id_len = len - 6;
return len;
default:
return -EINVAL;
}
}
/*! Encode a RIM Routing information IE (3GPP TS 48.018, chapter 11.3.70).
* \param[out] buf user provided memory (at least 14 byte) for the generated value part of the IE.
* \param[in] ri user provided input data struct.
* \returns length of encoded octets, -EINVAL on error. */
int bssgp_create_rim_ri(uint8_t *buf, const struct bssgp_rim_routing_info *ri)
{
int rc;
struct gprs_ra_id raid_temp;
buf[0] = ri->discr & 0x0f;
buf++;
switch (ri->discr) {
case BSSGP_RIM_ROUTING_INFO_GERAN:
rc = bssgp_create_cell_id(buf, &ri->geran.raid, ri->geran.cid);
if (rc < 0)
return -EINVAL;
return rc + 1;
case BSSGP_RIM_ROUTING_INFO_UTRAN:
gsm48_encode_ra((struct gsm48_ra_id *)buf, &ri->utran.raid);
osmo_store16be(ri->utran.rncid, buf + 6);
return 9;
case BSSGP_RIM_ROUTING_INFO_EUTRAN:
/* Note: 3GPP TS 24.301 Figure 9.9.3.32.1 and 3GPP TS 24.008
* Figure 10.5.130 specify MCC/MNC encoding in the same way,
* so we can re-use gsm48_encode_ra() for that. */
raid_temp = (struct gprs_ra_id) {
.mcc = ri->eutran.tai.mcc,
.mnc = ri->eutran.tai.mnc,
.mnc_3_digits = ri->eutran.tai.mnc_3_digits,
/* TAC is encoded in the same way as LAC */
.lac = ri->eutran.tai.tac,
};
gsm48_encode_ra((struct gsm48_ra_id *)buf, &raid_temp);
OSMO_ASSERT(ri->eutran.global_enb_id_len <=
sizeof(ri->eutran.global_enb_id));
memcpy(buf + 5, ri->eutran.global_enb_id,
ri->eutran.global_enb_id_len);
return ri->eutran.global_enb_id_len + 6;
default:
return -EINVAL;
}
}
/* Chapter 8.4 BVC-Reset Procedure */
static int bssgp_rx_bvc_reset(struct msgb *msg, struct tlv_parsed *tp,
uint16_t ns_bvci)

View File

@ -41,6 +41,97 @@
* (3GPP TS 48.018, sub-clause 11.3.9) but without IE and length octets. */
#define REP_CELL_ID_LEN 8
/*! Parse a RIM Routing information IE (3GPP TS 48.018, chapter 11.3.70).
* \param[out] ri user provided memory to store the parsed results.
* \param[in] buf input buffer of the value part of the IE.
* \returns length of parsed octets, -EINVAL on error. */
int bssgp_parse_rim_ri(struct bssgp_rim_routing_info *ri, const uint8_t *buf,
unsigned int len)
{
struct gprs_ra_id raid_temp;
memset(ri, 0, sizeof(*ri));
if (len < 2)
return -EINVAL;
ri->discr = buf[0] & 0x0f;
buf++;
switch (ri->discr) {
case BSSGP_RIM_ROUTING_INFO_GERAN:
if (len < 9)
return -EINVAL;
ri->geran.cid = bssgp_parse_cell_id(&ri->geran.raid, buf);
return 9;
case BSSGP_RIM_ROUTING_INFO_UTRAN:
if (len < 9)
return -EINVAL;
gsm48_parse_ra(&ri->utran.raid, buf);
ri->utran.rncid = osmo_load16be(buf + 6);
return 9;
case BSSGP_RIM_ROUTING_INFO_EUTRAN:
if (len < 7 || len > 14)
return -EINVAL;
/* Note: 3GPP TS 24.301 Figure 9.9.3.32.1 and 3GPP TS 24.008
* Figure 10.5.130 specify MCC/MNC encoding in the same way,
* so we can re-use gsm48_parse_ra() for that. */
gsm48_parse_ra(&raid_temp, buf);
ri->eutran.tai.mcc = raid_temp.mcc;
ri->eutran.tai.mnc = raid_temp.mnc;
ri->eutran.tai.mnc_3_digits = raid_temp.mnc_3_digits;
ri->eutran.tai.tac = osmo_load16be(buf + 3);
memcpy(ri->eutran.global_enb_id, buf + 5, len - 6);
ri->eutran.global_enb_id_len = len - 6;
return len;
default:
return -EINVAL;
}
}
/*! Encode a RIM Routing information IE (3GPP TS 48.018, chapter 11.3.70).
* \param[out] buf user provided memory (at least 14 byte) for the generated value part of the IE.
* \param[in] ri user provided input data struct.
* \returns length of encoded octets, -EINVAL on error. */
int bssgp_create_rim_ri(uint8_t *buf, const struct bssgp_rim_routing_info *ri)
{
int rc;
struct gprs_ra_id raid_temp;
buf[0] = ri->discr & 0x0f;
buf++;
switch (ri->discr) {
case BSSGP_RIM_ROUTING_INFO_GERAN:
rc = bssgp_create_cell_id(buf, &ri->geran.raid, ri->geran.cid);
if (rc < 0)
return -EINVAL;
return rc + 1;
case BSSGP_RIM_ROUTING_INFO_UTRAN:
gsm48_encode_ra((struct gsm48_ra_id *)buf, &ri->utran.raid);
osmo_store16be(ri->utran.rncid, buf + 6);
return 9;
case BSSGP_RIM_ROUTING_INFO_EUTRAN:
/* Note: 3GPP TS 24.301 Figure 9.9.3.32.1 and 3GPP TS 24.008
* Figure 10.5.130 specify MCC/MNC encoding in the same way,
* so we can re-use gsm48_encode_ra() for that. */
raid_temp = (struct gprs_ra_id) {
.mcc = ri->eutran.tai.mcc,
.mnc = ri->eutran.tai.mnc,
.mnc_3_digits = ri->eutran.tai.mnc_3_digits,
};
gsm48_encode_ra((struct gsm48_ra_id *)buf, &raid_temp);
osmo_store16be(ri->eutran.tai.tac, buf + 3);
OSMO_ASSERT(ri->eutran.global_enb_id_len <=
sizeof(ri->eutran.global_enb_id));
memcpy(buf + 5, ri->eutran.global_enb_id,
ri->eutran.global_enb_id_len);
return ri->eutran.global_enb_id_len + 6;
default:
return -EINVAL;
}
}
/*! Decode a RAN Information Request Application Container for NACC (3GPP TS 48.018, section 11.3.63.1.1).
* \param[out] user provided memory for decoded data struct.
* \param[in] buf user provided memory with the encoded value data of the IE.

View File

@ -24,6 +24,137 @@
#include <string.h>
#include <unistd.h>
void dump_rim_ri(struct bssgp_rim_routing_info *ri)
{
switch (ri->discr) {
case BSSGP_RIM_ROUTING_INFO_GERAN:
printf("GERAN cell identifier\n");
printf(" * mcc: %u\n", ri->geran.raid.mcc);
printf(" mnc: %u\n", ri->geran.raid.mnc);
printf(" mnc 3 digits: %u\n", ri->geran.raid.mnc_3_digits);
printf(" lac: %u\n", ri->geran.raid.lac);
printf(" rac: %u\n", ri->geran.raid.rac);
printf(" * cell id: %04x\n", ri->geran.cid);
break;
case BSSGP_RIM_ROUTING_INFO_UTRAN:
printf("UTRAN RNC identifier\n");
printf(" * mcc: %u\n", ri->utran.raid.mcc);
printf(" mnc: %u\n", ri->utran.raid.mnc);
printf(" mnc 3 digits: %u\n", ri->utran.raid.mnc_3_digits);
printf(" lac: %u\n", ri->utran.raid.lac);
printf(" rac: %u\n", ri->utran.raid.rac);
printf(" * rnc id: %04x\n", ri->utran.rncid);
break;
case BSSGP_RIM_ROUTING_INFO_EUTRAN:
printf("EUTRAN eNB identifier\n");
printf(" * mcc: %u\n", ri->eutran.tai.mcc);
printf(" mnc: %u\n", ri->eutran.tai.mnc);
printf(" mnc 3 digits: %u\n", ri->eutran.tai.mnc_3_digits);
printf(" tac: %u\n", ri->eutran.tai.tac);
printf(" * global_enb_id: %s\n",
osmo_hexdump_nospc(ri->eutran.global_enb_id,
ri->eutran.global_enb_id_len));
break;
default:
OSMO_ASSERT(false);
}
}
static void test_bssgp_parse_rim_ri()
{
int rc;
struct bssgp_rim_routing_info result;
uint8_t testvec_geran[] =
{ 0x00, 0x62, 0xf2, 0x24, 0x33, 0x90, 0x00, 0x51, 0xe1 };
uint8_t testvec_utran[] =
{ 0x01, 0x62, 0xf2, 0x24, 0x33, 0x90, 0x00, 0x51, 0xe1 };
uint8_t testvec_eutran[] =
{ 0x02, 0x62, 0xf2, 0x24, 0x33, 0x90, 0x00, 0x51, 0xe1 };
printf("----- %s START\n", __func__);
rc = bssgp_parse_rim_ri(&result, testvec_geran,
sizeof(testvec_geran));
printf("rc=%d\n", rc);
dump_rim_ri(&result);
printf("\n");
rc = bssgp_parse_rim_ri(&result, testvec_utran,
sizeof(testvec_utran));
printf("rc=%d\n", rc);
dump_rim_ri(&result);
printf("\n");
rc = bssgp_parse_rim_ri(&result, testvec_eutran,
sizeof(testvec_eutran));
printf("rc=%d\n", rc);
dump_rim_ri(&result);
printf("\n");
printf("----- %s END\n", __func__);
}
static void test_bssgp_create_rim_ri()
{
int rc;
struct bssgp_rim_routing_info ri;
uint8_t result[15];
printf("----- %s START\n", __func__);
memset(&ri, 0, sizeof(ri));
memset(result, 0, sizeof(result));
ri.discr = BSSGP_RIM_ROUTING_INFO_GERAN;
ri.geran.raid.mcc = 262;
ri.geran.raid.mnc = 42;
ri.geran.raid.mnc_3_digits = false;
ri.geran.raid.lac = 13200;
ri.geran.raid.rac = 0;
ri.geran.cid = 0x51e1;
dump_rim_ri(&ri);
rc = bssgp_create_rim_ri(result, &ri);
printf("rc=%d, ", rc);
if (rc > 0)
printf("result=%s", osmo_hexdump_nospc(result, rc));
printf("\n\n");
memset(&ri, 0, sizeof(ri));
memset(result, 0, sizeof(result));
ri.discr = BSSGP_RIM_ROUTING_INFO_UTRAN;
ri.utran.raid.mcc = 262;
ri.utran.raid.mnc = 42;
ri.utran.raid.mnc_3_digits = 0;
ri.utran.raid.lac = 13200;
ri.utran.raid.rac = 0;
ri.utran.rncid = 0x51e1;
dump_rim_ri(&ri);
rc = bssgp_create_rim_ri(result, &ri);
printf("rc=%d, ", rc);
if (rc > 0)
printf("result=%s", osmo_hexdump_nospc(result, rc));
printf("\n\n");
memset(&ri, 0, sizeof(ri));
memset(result, 0, sizeof(result));
ri.discr = BSSGP_RIM_ROUTING_INFO_EUTRAN;
ri.eutran.tai.mcc = 262;
ri.eutran.tai.mnc = 42;
ri.eutran.tai.mnc_3_digits = 0;
ri.eutran.tai.tac = 13200;
ri.eutran.global_enb_id[0] = 0x00;
ri.eutran.global_enb_id[1] = 0x51;
ri.eutran.global_enb_id[2] = 0xe1;
ri.eutran.global_enb_id_len = 3;
dump_rim_ri(&ri);
rc = bssgp_create_rim_ri(result, &ri);
printf("rc=%d, ", rc);
if (rc > 0)
printf("result=%s", osmo_hexdump_nospc(result, rc));
printf("\n\n");
printf("----- %s END\n", __func__);
}
void dump_bssgp_ran_inf_req_app_cont_nacc(struct bssgp_ran_inf_req_app_cont_nacc *app_cont)
{
printf(" app_cont: bssgp_ran_inf_req_app_cont_nacc:\n");
@ -636,6 +767,10 @@ int main(int argc, char **argv)
{
printf("===== BSSGP RIM test START\n");
/* RIM routing information */
test_bssgp_parse_rim_ri();
test_bssgp_create_rim_ri();
/* RIM containers */
test_bssgp_dec_ran_inf_req_rim_cont_nacc();
test_bssgp_enc_ran_inf_req_rim_cont_nacc();

View File

@ -1,4 +1,60 @@
===== BSSGP RIM test START
----- test_bssgp_parse_rim_ri START
rc=9
GERAN cell identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
lac: 13200
rac: 0
* cell id: 51e1
rc=9
UTRAN RNC identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
lac: 13200
rac: 0
* rnc id: 51e1
rc=9
EUTRAN eNB identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
tac: 13200
* global_enb_id: 0051e1
----- test_bssgp_parse_rim_ri END
----- test_bssgp_create_rim_ri START
GERAN cell identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
lac: 13200
rac: 0
* cell id: 51e1
rc=9, result=0062f22433900051e1
UTRAN RNC identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
lac: 13200
rac: 0
* rnc id: 51e1
rc=9, result=0162f22433900051e1
EUTRAN eNB identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
tac: 13200
* global_enb_id: 0051e1
rc=9, result=0262f22433900051e1
----- test_bssgp_create_rim_ri END
----- test_bssgp_dec_ran_inf_req_rim_cont_nacc START
rc=0, bssgp_ran_inf_req_rim_cont:
app_id = 01

View File

@ -289,137 +289,6 @@ static void test_bssgp_msgb_copy()
printf("----- %s END\n", __func__);
}
void dump_rim_ri(struct bssgp_rim_routing_info *ri)
{
switch (ri->discr) {
case BSSGP_RIM_ROUTING_INFO_GERAN:
printf("GERAN cell identifier\n");
printf(" * mcc: %u\n", ri->geran.raid.mcc);
printf(" mnc: %u\n", ri->geran.raid.mnc);
printf(" mnc 3 digits: %u\n", ri->geran.raid.mnc_3_digits);
printf(" lac: %u\n", ri->geran.raid.lac);
printf(" rac: %u\n", ri->geran.raid.rac);
printf(" * cell id: %04x\n", ri->geran.cid);
break;
case BSSGP_RIM_ROUTING_INFO_UTRAN:
printf("UTRAN RNC identifier\n");
printf(" * mcc: %u\n", ri->utran.raid.mcc);
printf(" mnc: %u\n", ri->utran.raid.mnc);
printf(" mnc 3 digits: %u\n", ri->utran.raid.mnc_3_digits);
printf(" lac: %u\n", ri->utran.raid.lac);
printf(" rac: %u\n", ri->utran.raid.rac);
printf(" * rnc id: %04x\n", ri->utran.rncid);
break;
case BSSGP_RIM_ROUTING_INFO_EUTRAN:
printf("EUTRAN eNB identifier\n");
printf(" * mcc: %u\n", ri->eutran.tai.mcc);
printf(" mnc: %u\n", ri->eutran.tai.mnc);
printf(" mnc 3 digits: %u\n", ri->eutran.tai.mnc_3_digits);
printf(" tac: %u\n", ri->eutran.tai.tac);
printf(" * global_enb_id: %s\n",
osmo_hexdump_nospc(ri->eutran.global_enb_id,
ri->eutran.global_enb_id_len));
break;
default:
OSMO_ASSERT(false);
}
}
static void test_bssgp_parse_rim_ri()
{
int rc;
struct bssgp_rim_routing_info result;
uint8_t testvec_geran[] =
{ 0x00, 0x62, 0xf2, 0x24, 0x33, 0x90, 0x00, 0x51, 0xe1 };
uint8_t testvec_utran[] =
{ 0x01, 0x62, 0xf2, 0x24, 0x33, 0x90, 0x00, 0x51, 0xe1 };
uint8_t testvec_eutran[] =
{ 0x02, 0x62, 0xf2, 0x24, 0x33, 0x90, 0x00, 0x51, 0xe1 };
printf("----- %s START\n", __func__);
rc = bssgp_parse_rim_ri(&result, testvec_geran,
sizeof(testvec_geran));
printf("rc=%d\n", rc);
dump_rim_ri(&result);
printf("\n");
rc = bssgp_parse_rim_ri(&result, testvec_utran,
sizeof(testvec_utran));
printf("rc=%d\n", rc);
dump_rim_ri(&result);
printf("\n");
rc = bssgp_parse_rim_ri(&result, testvec_eutran,
sizeof(testvec_eutran));
printf("rc=%d\n", rc);
dump_rim_ri(&result);
printf("\n");
printf("----- %s END\n", __func__);
}
static void test_bssgp_create_rim_ri()
{
int rc;
struct bssgp_rim_routing_info ri;
uint8_t result[15];
printf("----- %s START\n", __func__);
memset(&ri, 0, sizeof(ri));
memset(result, 0, sizeof(result));
ri.discr = BSSGP_RIM_ROUTING_INFO_GERAN;
ri.geran.raid.mcc = 262;
ri.geran.raid.mnc = 42;
ri.geran.raid.mnc_3_digits = false;
ri.geran.raid.lac = 13200;
ri.geran.raid.rac = 0;
ri.geran.cid = 0x51e1;
dump_rim_ri(&ri);
rc = bssgp_create_rim_ri(result, &ri);
printf("rc=%d, ", rc);
if (rc > 0)
printf("result=%s", osmo_hexdump_nospc(result, rc));
printf("\n\n");
memset(&ri, 0, sizeof(ri));
memset(result, 0, sizeof(result));
ri.discr = BSSGP_RIM_ROUTING_INFO_UTRAN;
ri.utran.raid.mcc = 262;
ri.utran.raid.mnc = 42;
ri.utran.raid.mnc_3_digits = 0;
ri.utran.raid.lac = 13200;
ri.utran.raid.rac = 0;
ri.utran.rncid = 0x51e1;
dump_rim_ri(&ri);
rc = bssgp_create_rim_ri(result, &ri);
printf("rc=%d, ", rc);
if (rc > 0)
printf("result=%s", osmo_hexdump_nospc(result, rc));
printf("\n\n");
memset(&ri, 0, sizeof(ri));
memset(result, 0, sizeof(result));
ri.discr = BSSGP_RIM_ROUTING_INFO_EUTRAN;
ri.eutran.tai.mcc = 262;
ri.eutran.tai.mnc = 42;
ri.eutran.tai.mnc_3_digits = 0;
ri.eutran.tai.tac = 13200;
ri.eutran.global_enb_id[0] = 0x00;
ri.eutran.global_enb_id[1] = 0x51;
ri.eutran.global_enb_id[2] = 0xe1;
ri.eutran.global_enb_id_len = 3;
dump_rim_ri(&ri);
rc = bssgp_create_rim_ri(result, &ri);
printf("rc=%d, ", rc);
if (rc > 0)
printf("result=%s", osmo_hexdump_nospc(result, rc));
printf("\n\n");
printf("----- %s END\n", __func__);
}
static struct log_info info = {};
int main(int argc, char **argv)
@ -448,8 +317,6 @@ int main(int argc, char **argv)
test_bssgp_bad_reset();
test_bssgp_flow_control_bvc();
test_bssgp_msgb_copy();
test_bssgp_parse_rim_ri();
test_bssgp_create_rim_ri();
printf("===== BSSGP test END\n\n");
exit(EXIT_SUCCESS);

View File

@ -17,61 +17,5 @@ Got message: 26 1e 81 2a 05 82 10 22 03 82 c0 40 01 82 08 11 1c 82 60 20 3c 81 7
Old msgb: [L3]> 22 04 82 00 02 07 81 08
New msgb: [L3]> 22 04 82 00 02 07 81 08
----- test_bssgp_msgb_copy END
----- test_bssgp_parse_rim_ri START
rc=9
GERAN cell identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
lac: 13200
rac: 0
* cell id: 51e1
rc=9
UTRAN RNC identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
lac: 13200
rac: 0
* rnc id: 51e1
rc=9
EUTRAN eNB identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
tac: 13200
* global_enb_id: 0051e1
----- test_bssgp_parse_rim_ri END
----- test_bssgp_create_rim_ri START
GERAN cell identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
lac: 13200
rac: 0
* cell id: 51e1
rc=9, result=0062f22433900051e1
UTRAN RNC identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
lac: 13200
rac: 0
* rnc id: 51e1
rc=9, result=0162f22433900051e1
EUTRAN eNB identifier
* mcc: 262
mnc: 42
mnc 3 digits: 0
tac: 13200
* global_enb_id: 0051e1
rc=9, result=0262f22433900051e1
----- test_bssgp_create_rim_ri END
===== BSSGP test END