update to RMR 4.8.5
[ric-plt/e2.git] / RIC-E2-TERMINATION / BuildRunName.h
index 3d4dc85..c3b2cef 100644 (file)
@@ -36,17 +36,17 @@ static int translatePlmnId(char * plmnId, const unsigned char *data, const char*
     ///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 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)((data[1] & (unsigned char)0xF0) >> (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) {
+    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;
@@ -74,12 +74,19 @@ static int translateBitStringToChar(char *ranName, BIT_STRING_t &data) {
 
     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);
     }
@@ -100,10 +107,10 @@ int buildRanName(char *ranName, E2setupRequestIEs_t *ie) {
         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 unsigned char *)enGnb->global_en_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);
+            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;
         }