2 * Copyright 2020 AT&T Intellectual Property
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
19 #ifndef E2_BUILDRUNNAME_H
20 #define E2_BUILDRUNNAME_H
22 #include <3rdparty/oranE2/ProtocolIE-Field.h>
23 #include "oranE2/ProtocolIE-Container.h"
24 #include "oranE2/ProtocolIE-Field.h"
25 #include "oranE2/GlobalE2node-gNB-ID.h"
26 #include "oranE2/GlobalE2node-en-gNB-ID.h"
27 #include "oranE2/GlobalE2node-ng-eNB-ID.h"
28 #include "oranE2/GlobalE2node-eNB-ID.h"
31 * return the size of the string //
33 static int translatePlmnId(char * plmnId, const unsigned char *data, const char* type) {
34 auto mcc1 = (unsigned char)((unsigned char)data[0] & (unsigned char)0x0F);
35 auto mcc2 = (unsigned char)(((unsigned char)((unsigned char)data[0] & (unsigned char)0xF0)) >> (unsigned char)4);
36 ///auto mcc3 = (unsigned char)((data[1] & (unsigned char)0xF0) >> (unsigned char)4);
37 auto mcc3 = (unsigned char)((unsigned char)(data[1] & (unsigned char)0x0F));
39 auto mnc1 = (unsigned char)(data[2] & (unsigned char)0x0F);
40 auto mnc2 = (unsigned char)(((unsigned char)(data[2] & (unsigned char)0xF0) >> (unsigned char)4));
41 //auto mnc3 = (unsigned char)(((unsigned char)(data[1] & (unsigned char)0x0F) >> (unsigned char)4) );
42 auto mnc3 = (unsigned char)((data[1] & (unsigned char)0xF0) >> (unsigned char)4);
46 j = snprintf(plmnId, 20, "%s%1d%1d%1d_%1d%1d%1d", type, mcc1, mcc2, mcc3, mnc1, mnc2, mnc3);
49 j = snprintf(plmnId, 20, "%s%1d%1d%1d_0%1d%1d", type, mcc1, mcc2, mcc3, mnc1, mnc2);
55 static int translateBitStringToChar(char *ranName, BIT_STRING_t &data) {
56 // dont care of last unused bits
58 auto j = snprintf(buffer, 256, "%s_", ranName);
60 memcpy(ranName, buffer, j);
63 unsigned long bitValue = 0;
64 for (auto i = 0; i < (int)data.size; i++) {
65 bitValue <<= (unsigned long)8;
66 bitValue += data.buf[i];
69 j = snprintf(buffer, 256, "%s%ld", ranName, bitValue);
71 memcpy(ranName, buffer, j);
77 for (auto i = 0; i < (int)data.size; i++) {
78 b1 = data.buf[i] & (unsigned)0xF0;
79 b1 = b1 >> (unsigned)4;
80 j = snprintf(buffer, 256, "%s%1x", ranName, b1);
81 memcpy(ranName, buffer, j);
82 b2 = data.buf[i] & (unsigned)0x0F;
83 j = snprintf(buffer, 256, "%s%1x", ranName, b2);
84 memcpy(ranName, buffer, j);
90 int buildRanName(char *ranName, E2setupRequestIEs_t *ie) {
91 switch (ie->value.choice.GlobalE2node_ID.present) {
92 case GlobalE2node_ID_PR_gNB: {
93 auto *gnb = ie->value.choice.GlobalE2node_ID.choice.gNB;
94 translatePlmnId(ranName, (const unsigned char *)gnb->global_gNB_ID.plmn_id.buf, (const char *)"gnb_");
95 if (gnb->global_gNB_ID.gnb_id.present == GNB_ID_Choice_PR_gnb_ID) {
96 translateBitStringToChar(ranName, gnb->global_gNB_ID.gnb_id.choice.gnb_ID);
100 case GlobalE2node_ID_PR_en_gNB: {
101 auto *enGnb = ie->value.choice.GlobalE2node_ID.choice.en_gNB;
102 translatePlmnId(ranName,
103 (const unsigned char *)enGnb->global_gNB_ID.pLMN_Identity.buf,
104 (const char *)"en_gnb_");
105 if (enGnb->global_gNB_ID.gNB_ID.present == ENGNB_ID_PR_gNB_ID) {
106 translateBitStringToChar(ranName, enGnb->global_gNB_ID.gNB_ID.choice.gNB_ID);
110 case GlobalE2node_ID_PR_ng_eNB: {
111 auto *ngEnb = ie->value.choice.GlobalE2node_ID.choice.ng_eNB;
112 switch (ngEnb->global_ng_eNB_ID.enb_id.present) {
113 case ENB_ID_Choice_PR_enb_ID_macro: {
114 translatePlmnId(ranName, (const unsigned char *)ngEnb->global_ng_eNB_ID.plmn_id.buf, (const char *)"ng_enB_macro_");
115 translateBitStringToChar(ranName, ngEnb->global_ng_eNB_ID.enb_id.choice.enb_ID_macro);
118 case ENB_ID_Choice_PR_enb_ID_shortmacro: {
119 translatePlmnId(ranName, (const unsigned char *)ngEnb->global_ng_eNB_ID.plmn_id.buf, (const char *)"ng_enB_shortmacro_");
120 translateBitStringToChar(ranName, ngEnb->global_ng_eNB_ID.enb_id.choice.enb_ID_shortmacro);
123 case ENB_ID_Choice_PR_enb_ID_longmacro: {
124 translatePlmnId(ranName, (const unsigned char *)ngEnb->global_ng_eNB_ID.plmn_id.buf, (const char *)"ng_enB_longmacro_");
125 translateBitStringToChar(ranName, ngEnb->global_ng_eNB_ID.enb_id.choice.enb_ID_longmacro);
128 case ENB_ID_Choice_PR_NOTHING: {
135 case GlobalE2node_ID_PR_eNB: {
136 auto *enb = ie->value.choice.GlobalE2node_ID.choice.eNB;
137 switch (enb->global_eNB_ID.eNB_ID.present) {
138 case ENB_ID_PR_macro_eNB_ID: {
139 translatePlmnId(ranName, (const unsigned char *)enb->global_eNB_ID.pLMN_Identity.buf, (const char *)"enB_macro_");
140 translateBitStringToChar(ranName, enb->global_eNB_ID.eNB_ID.choice.macro_eNB_ID);
143 case ENB_ID_PR_home_eNB_ID: {
144 translatePlmnId(ranName, (const unsigned char *)enb->global_eNB_ID.pLMN_Identity.buf, (const char *)"enB_home_");
145 translateBitStringToChar(ranName, enb->global_eNB_ID.eNB_ID.choice.home_eNB_ID);
148 case ENB_ID_PR_short_Macro_eNB_ID: {
149 translatePlmnId(ranName, (const unsigned char *)enb->global_eNB_ID.pLMN_Identity.buf, (const char *)"enB_shortmacro_");
150 translateBitStringToChar(ranName, enb->global_eNB_ID.eNB_ID.choice.short_Macro_eNB_ID);
153 case ENB_ID_PR_long_Macro_eNB_ID: {
154 translatePlmnId(ranName, (const unsigned char *)enb->global_eNB_ID.pLMN_Identity.buf, (const char *)"enB_longmacro_");
155 translateBitStringToChar(ranName, enb->global_eNB_ID.eNB_ID.choice.long_Macro_eNB_ID);
158 case ENB_ID_PR_NOTHING: {
166 case GlobalE2node_ID_PR_NOTHING:
174 #endif //E2_BUILDRUNNAME_H