#include "oranE2/GlobalE2node-ng-eNB-ID.h"
#include "oranE2/GlobalE2node-eNB-ID.h"
-/**
- * return the size of the string
+/** 02 F8 29
+ * return the size of the string //
*/
static int translatePlmnId(char * plmnId, const unsigned char *data, const char* type) {
auto mcc1 = (unsigned char)((unsigned char)data[0] & (unsigned char)0x0F);
auto mcc2 = (unsigned char)(((unsigned char)((unsigned char)data[0] & (unsigned char)0xF0)) >> (unsigned char)4);
- auto mcc3 = (unsigned char)((data[1] & (unsigned char)0xF0) >> (unsigned char)4);
+ ///auto mcc3 = (unsigned char)((data[1] & (unsigned char)0xF0) >> (unsigned char)4);
+ auto mcc3 = (unsigned char)((unsigned char)(data[1] & (unsigned char)0x0F));
- auto mnc1 = (unsigned char)(data[2] & (unsigned char)0x0F);
- auto mnc2 = (unsigned char)(((unsigned char)(data[2] & (unsigned char)0xF0) >> (unsigned char)4));
- auto mnc3 = (unsigned char)(((unsigned char)(data[1] & (unsigned char)0x0F) >> (unsigned char)4) );
+ auto mnc1 = (unsigned char)(((unsigned char)((unsigned char)data[1] & (unsigned char)0xF0)) >> (unsigned char)4);
+ auto mnc2 = (unsigned char)((unsigned char)data[2] & (unsigned char)0x0F) ;
+ //auto mnc3 = (unsigned char)(((unsigned char)(data[1] & (unsigned char)0x0F) >> (unsigned char)4) );
+ auto mnc3 = (unsigned char)(((unsigned char)((unsigned char)data[2] & (unsigned char)0xF0)) >> (unsigned char)4);
int j = 0;
- if (mnc3 != 15) {
- j = snprintf(plmnId, 20, "%s%1d%1d%1d-%1d%1d%1d", type, mcc1, mcc2, mcc3, mnc1, mnc2, mnc3);
+ if (mnc1 != 15) {
+ j = snprintf(plmnId, 20, "%s%1d%1d%1d_%1d%1d%1d", type, mcc1, mcc2, mcc3, mnc1, mnc2, mnc3);
}
else {
- j = snprintf(plmnId, 20, "%s%1d%1d%1d-0%1d%1d", type, mcc1, mcc2, mcc3, mnc1, mnc2);
+ j = snprintf(plmnId, 20, "%s%1d%1d%1d_0%1d%1d", type, mcc1, mcc2, mcc3, mnc2, mnc3);
}
return j;
static int translateBitStringToChar(char *ranName, BIT_STRING_t &data) {
// dont care of last unused bits
char buffer[256] {};
- auto j = snprintf(buffer, 256, "%s-", ranName);
+ auto j = snprintf(buffer, 256, "%s_", ranName);
+
+ memcpy(ranName, buffer, j);
+/*
+ // ran name decimal
+ unsigned long bitValue = 0;
+ for (auto i = 0; i < (int)data.size; i++) {
+ bitValue <<= (unsigned long)8;
+ bitValue += data.buf[i];
+ }
+
+ j = snprintf(buffer, 256, "%s%ld", ranName, bitValue);
+
memcpy(ranName, buffer, j);
+*/
+
unsigned b1 = 0;
unsigned b2 = 0;
+ unsigned tmp_digit=0;
for (auto i = 0; i < (int)data.size; i++) {
- b1 = data.buf[i] & (unsigned)0xF0;
+ //
+ // we need to shift trailing zeros in the bit string (from asn1c) to leading zeros
+ //
+ tmp_digit = (0==i ? (uint8_t) 0: (uint8_t) data.buf[i-1])<<(8-data.bits_unused);
+ tmp_digit = tmp_digit | ((unsigned) data.buf[i] >> data.bits_unused);
+
+ b1 = tmp_digit & (unsigned)0xF0;
b1 = b1 >> (unsigned)4;
j = snprintf(buffer, 256, "%s%1x", ranName, b1);
memcpy(ranName, buffer, j);
- b2 = data.buf[i] & (unsigned)0x0F;
+ b2 = tmp_digit & (unsigned)0x0F;
j = snprintf(buffer, 256, "%s%1x", ranName, b2);
memcpy(ranName, buffer, j);
}
switch (ie->value.choice.GlobalE2node_ID.present) {
case GlobalE2node_ID_PR_gNB: {
auto *gnb = ie->value.choice.GlobalE2node_ID.choice.gNB;
- translatePlmnId(ranName, (const unsigned char *)gnb->global_gNB_ID.plmn_id.buf, (const char *)"gnb:");
+ translatePlmnId(ranName, (const unsigned char *)gnb->global_gNB_ID.plmn_id.buf, (const char *)"gnb_");
if (gnb->global_gNB_ID.gnb_id.present == GNB_ID_Choice_PR_gnb_ID) {
translateBitStringToChar(ranName, gnb->global_gNB_ID.gnb_id.choice.gnb_ID);
}
case GlobalE2node_ID_PR_en_gNB: {
auto *enGnb = ie->value.choice.GlobalE2node_ID.choice.en_gNB;
translatePlmnId(ranName,
- (const unsigned char *)enGnb->global_gNB_ID.pLMN_Identity.buf,
- (const char *)"en-gnb:");
- if (enGnb->global_gNB_ID.gNB_ID.present == ENGNB_ID_PR_gNB_ID) {
- translateBitStringToChar(ranName, enGnb->global_gNB_ID.gNB_ID.choice.gNB_ID);
+ (const unsigned char *)enGnb->global_en_gNB_ID.pLMN_Identity.buf,
+ (const char *)"en_gnb_");
+ if (enGnb->global_en_gNB_ID.gNB_ID.present == ENGNB_ID_PR_gNB_ID) {
+ translateBitStringToChar(ranName, enGnb->global_en_gNB_ID.gNB_ID.choice.gNB_ID);
}
break;
}
case GlobalE2node_ID_PR_ng_eNB: {
auto *ngEnb = ie->value.choice.GlobalE2node_ID.choice.ng_eNB;
- char *buf = (char *)ngEnb->global_ng_eNB_ID.plmn_id.buf;
- char str[20] = {};
- BIT_STRING_t *data = nullptr;
switch (ngEnb->global_ng_eNB_ID.enb_id.present) {
case ENB_ID_Choice_PR_enb_ID_macro: {
- strncpy(str, (const char *)"ng-enB-macro:", 13);
- data = &ngEnb->global_ng_eNB_ID.enb_id.choice.enb_ID_macro;
+ translatePlmnId(ranName, (const unsigned char *)ngEnb->global_ng_eNB_ID.plmn_id.buf, (const char *)"ng_enB_macro_");
+ translateBitStringToChar(ranName, ngEnb->global_ng_eNB_ID.enb_id.choice.enb_ID_macro);
break;
}
case ENB_ID_Choice_PR_enb_ID_shortmacro: {
- strncpy(str, (const char *)"ng-enB-shortmacro:", 18);
- data = &ngEnb->global_ng_eNB_ID.enb_id.choice.enb_ID_shortmacro;
+ translatePlmnId(ranName, (const unsigned char *)ngEnb->global_ng_eNB_ID.plmn_id.buf, (const char *)"ng_enB_shortmacro_");
+ translateBitStringToChar(ranName, ngEnb->global_ng_eNB_ID.enb_id.choice.enb_ID_shortmacro);
break;
}
case ENB_ID_Choice_PR_enb_ID_longmacro: {
- strncpy(str, (const char *)"ng-enB-longmacro:", 17);
- data = &ngEnb->global_ng_eNB_ID.enb_id.choice.enb_ID_longmacro;
+ translatePlmnId(ranName, (const unsigned char *)ngEnb->global_ng_eNB_ID.plmn_id.buf, (const char *)"ng_enB_longmacro_");
+ translateBitStringToChar(ranName, ngEnb->global_ng_eNB_ID.enb_id.choice.enb_ID_longmacro);
+ break;
}
case ENB_ID_Choice_PR_NOTHING: {
break;
default:
break;
}
- translatePlmnId(ranName, (const unsigned char *)buf, (const char *)str);
- translateBitStringToChar(ranName, *data);
- break;
+ break;
}
case GlobalE2node_ID_PR_eNB: {
auto *enb = ie->value.choice.GlobalE2node_ID.choice.eNB;
- char *buf = (char *)enb->global_eNB_ID.pLMN_Identity.buf;
- char str[20] = {};
- BIT_STRING_t *data = nullptr;
-
switch (enb->global_eNB_ID.eNB_ID.present) {
case ENB_ID_PR_macro_eNB_ID: {
- strncpy(str, (const char *)"enB-macro:", 10);
- data = &enb->global_eNB_ID.eNB_ID.choice.macro_eNB_ID;
+ translatePlmnId(ranName, (const unsigned char *)enb->global_eNB_ID.pLMN_Identity.buf, (const char *)"enB_macro_");
+ translateBitStringToChar(ranName, enb->global_eNB_ID.eNB_ID.choice.macro_eNB_ID);
break;
}
case ENB_ID_PR_home_eNB_ID: {
- strncpy(str, (const char *)"enB-home:", 9);
- data = &enb->global_eNB_ID.eNB_ID.choice.home_eNB_ID;
+ translatePlmnId(ranName, (const unsigned char *)enb->global_eNB_ID.pLMN_Identity.buf, (const char *)"enB_home_");
+ translateBitStringToChar(ranName, enb->global_eNB_ID.eNB_ID.choice.home_eNB_ID);
break;
}
case ENB_ID_PR_short_Macro_eNB_ID: {
- strncpy(str, (const char *)"enB-shortmacro:", 15);
- data = &enb->global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID;
+ translatePlmnId(ranName, (const unsigned char *)enb->global_eNB_ID.pLMN_Identity.buf, (const char *)"enB_shortmacro_");
+ translateBitStringToChar(ranName, enb->global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID);
break;
}
case ENB_ID_PR_long_Macro_eNB_ID: {
- strncpy(str, (const char *)"enB-longmacro:", 14);
- data = &enb->global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID;
+ translatePlmnId(ranName, (const unsigned char *)enb->global_eNB_ID.pLMN_Identity.buf, (const char *)"enB_longmacro_");
+ translateBitStringToChar(ranName, enb->global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID);
+ break;
+ }
+ case ENB_ID_PR_NOTHING: {
break;
}
- case ENB_ID_PR_NOTHING:
default: {
break;
}
}
- translatePlmnId(ranName, (const unsigned char *)buf, (const char *)str);
- translateBitStringToChar(ranName, *data);
- break;
+ break;
}
case GlobalE2node_ID_PR_NOTHING:
default: