#include <sys/types.h>
#include <error.h>
#include <algorithm>
+#include <3rdparty/oranE2SM/E2SM-gNB-NRT-RANfunction-Definition.h>
+#include <3rdparty/oranE2SM/RIC-InsertStyle-List.h>
+#include <3rdparty/oranE2SM/RANparameterDef-Item.h>
+#include <3rdparty/oranE2/GlobalE2node-en-gNB-ID.h>
//#include <mdclog/mdclog.h>
auto *e2SetupRequestIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t));
ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, e2SetupRequestIEs);
+ e2SetupRequestIEs->value.choice.GlobalE2node_ID.present = GlobalE2node_ID_PR_gNB;
e2SetupRequestIEs->value.choice.GlobalE2node_ID.choice.gNB = (GlobalE2node_gNB_ID_t *)calloc(1, sizeof(GlobalE2node_gNB_ID_t));
auto *globalE2NodeGNbId = e2SetupRequestIEs->value.choice.GlobalE2node_ID.choice.gNB;
ASN_STRUCT_RESET(asn_DEF_GlobalE2node_gNB_ID, globalE2NodeGNbId);
e2SetupRequestIEs->criticality = Criticality_reject;
e2SetupRequestIEs->id = ProtocolIE_ID_id_GlobalE2node_ID;
e2SetupRequestIEs->value.present = E2setupRequestIEs__value_PR_GlobalE2node_ID;
- e2SetupRequestIEs->value.choice.GlobalE2node_ID.present = GlobalE2node_ID_PR_gNB;
auto *e2SetupRequest = &initiatingMessage->value.choice.E2setupRequest;
pdu->present = E2AP_PDU_PR_initiatingMessage;
}
+void buildSetupRequesteenGNB(E2AP_PDU_t *pdu, int mcc, int mnc) {
+ ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu);
+
+ pdu->choice.initiatingMessage = (InitiatingMessage_t *)calloc(1, sizeof(InitiatingMessage_t));
+ auto *initiatingMessage = pdu->choice.initiatingMessage;
+ ASN_STRUCT_RESET(asn_DEF_InitiatingMessage, initiatingMessage);
+ initiatingMessage->procedureCode = ProcedureCode_id_E2setup;
+ initiatingMessage->criticality = Criticality_reject;
+ initiatingMessage->value.present = InitiatingMessage__value_PR_E2setupRequest;
+
+ auto *e2SetupRequestIEs = (E2setupRequestIEs_t *)calloc(1, sizeof(E2setupRequestIEs_t));
+ ASN_STRUCT_RESET(asn_DEF_E2setupRequestIEs, e2SetupRequestIEs);
+
+ e2SetupRequestIEs->value.choice.GlobalE2node_ID.present = GlobalE2node_ID_PR_en_gNB;
+ e2SetupRequestIEs->value.choice.GlobalE2node_ID.choice.en_gNB = (GlobalE2node_en_gNB_ID_t *)calloc(1, sizeof(GlobalE2node_en_gNB_ID_t));
+ auto *globalE2NodeEN_GNb = e2SetupRequestIEs->value.choice.GlobalE2node_ID.choice.en_gNB;
+ ASN_STRUCT_RESET(asn_DEF_GlobalE2node_en_gNB_ID, globalE2NodeEN_GNb);
+
+ globalE2NodeEN_GNb->global_gNB_ID.gNB_ID.present = ENGNB_ID_PR_gNB_ID;
+ createPLMN_IDByMCCandMNC(&globalE2NodeEN_GNb->global_gNB_ID.pLMN_Identity, mcc, mnc);
+ globalE2NodeEN_GNb->global_gNB_ID.gNB_ID.choice.gNB_ID.size = 4;
+ globalE2NodeEN_GNb->global_gNB_ID.gNB_ID.choice.gNB_ID.buf =
+ (uint8_t *) calloc(1, globalE2NodeEN_GNb->global_gNB_ID.gNB_ID.choice.gNB_ID.size); //22..32 bits
+ globalE2NodeEN_GNb->global_gNB_ID.gNB_ID.choice.gNB_ID.buf[0] = 0xC5;
+ globalE2NodeEN_GNb->global_gNB_ID.gNB_ID.choice.gNB_ID.buf[1] = 0xC6;
+ globalE2NodeEN_GNb->global_gNB_ID.gNB_ID.choice.gNB_ID.buf[2] = 0xC7;
+ globalE2NodeEN_GNb->global_gNB_ID.gNB_ID.choice.gNB_ID.buf[3] = 0xF8;
+ globalE2NodeEN_GNb->global_gNB_ID.gNB_ID.choice.gNB_ID.bits_unused = 0;
+ e2SetupRequestIEs->criticality = Criticality_reject;
+ e2SetupRequestIEs->id = ProtocolIE_ID_id_GlobalE2node_ID;
+ e2SetupRequestIEs->value.present = E2setupRequestIEs__value_PR_GlobalE2node_ID;
+
+
+ auto *e2SetupRequest = &initiatingMessage->value.choice.E2setupRequest;
+
+ ASN_STRUCT_RESET(asn_DEF_E2setupRequest, e2SetupRequest);
+ ASN_SEQUENCE_ADD(&e2SetupRequest->protocolIEs.list, e2SetupRequestIEs);
+
+ pdu->present = E2AP_PDU_PR_initiatingMessage;
+}
+
+
+
void buildSetupRequestWithFunc(E2AP_PDU_t *pdu, int mcc, int mnc) {
ASN_STRUCT_RESET(asn_DEF_E2AP_PDU, pdu);
auto *itemIes = (RANfunction_ItemIEs_t *)calloc(1, sizeof(RANfunction_ItemIEs_t));
ASN_STRUCT_RESET(asn_DEF_RANfunction_ItemIEs, itemIes);
- uint8_t buf[3] = {0x33, 0x44, 0x55};
+
+ E2SM_gNB_NRT_RANfunction_Definition_t ranFunDef;
+ uint8_t funcDes[] = "asdfghjklpoiuytrewq\0";
+ ranFunDef.ranFunction_Name.ranFunction_Description.buf = (uint8_t *)calloc(1, strlen((char *)funcDes));
+ ranFunDef.ranFunction_Name.ranFunction_Description.size = strlen((char *)funcDes);
+ memcpy(ranFunDef.ranFunction_Name.ranFunction_Description.buf, funcDes, strlen((char *)funcDes));
+
+ uint8_t funcOID[] = "ABCDEFGHIJ1234567890\0";
+ ranFunDef.ranFunction_Name.ranFunction_E2SM_OID.buf = (uint8_t *)calloc(1, strlen((char *)funcOID));
+ ranFunDef.ranFunction_Name.ranFunction_E2SM_OID.size = strlen((char *)funcOID);
+ memcpy(ranFunDef.ranFunction_Name.ranFunction_E2SM_OID.buf, funcOID, strlen((char *)funcOID));
+
+ uint8_t shortName[] = "Nothing to declare\0";
+ ranFunDef.ranFunction_Name.ranFunction_ShortName.buf = (uint8_t *)calloc(1, strlen((char *)shortName));
+ ranFunDef.ranFunction_Name.ranFunction_ShortName.size = strlen((char *)shortName);
+ memcpy(ranFunDef.ranFunction_Name.ranFunction_ShortName.buf, shortName, strlen((char *)shortName));
+
+
+ RIC_InsertStyle_List_t insertStyleList;
+ insertStyleList.ric_CallProcessIDFormat_Type = 28l;
+ insertStyleList.ric_IndicationHeaderFormat_Type = 29;
+ insertStyleList.ric_IndicationMessageFormat_Type = 30;
+ insertStyleList.ric_InsertActionFormat_Type = 31l;
+
+ uint8_t styleName[] = "What a style\0";
+
+ insertStyleList.ric_InsertStyle_Name.buf = (uint8_t *)calloc(1, strlen((char *)styleName));
+ insertStyleList.ric_InsertStyle_Name.size = strlen((char *)styleName);
+ memcpy(insertStyleList.ric_InsertStyle_Name.buf, styleName, strlen((char *)styleName));
+
+
+ insertStyleList.ric_InsertStyle_Type = 23;
+
+ RANparameterDef_Item_t raNparameterDefItem;
+ raNparameterDefItem.ranParameter_ID = 8;
+ raNparameterDefItem.ranParameter_Type = 12;
+
+ uint8_t ItemName[] = "What a style\0";
+ raNparameterDefItem.ranParameter_Name.buf = (uint8_t *)calloc(1, strlen((char *)ItemName));
+ raNparameterDefItem.ranParameter_Name.size = strlen((char *)ItemName);
+ memcpy(raNparameterDefItem.ranParameter_Name.buf, ItemName, strlen((char *)ItemName));
+
+ ASN_SEQUENCE_ADD(&insertStyleList.ric_InsertRanParameterDef_List.list, &raNparameterDefItem);
+
+ ASN_SEQUENCE_ADD(&ranFunDef.ric_InsertStyle_List->list, &insertStyleList);
+ //ranFunDef.ric_InsertStyle_List.
+
+ uint8_t buffer[8192];
+ size_t buffer_size = 8192;
+ auto *ranDef = &itemIes->value.choice.RANfunction_Item.ranFunctionDefinition;
+
+ auto er = asn_encode_to_buffer(nullptr, ATS_ALIGNED_BASIC_PER, &asn_DEF_E2SM_gNB_NRT_RANfunction_Definition, &ranFunDef, buffer, buffer_size);
+ if (er.encoded == -1) {
+ cerr << "encoding of " << asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name << " failed, " << strerror(errno) << endl;
+ exit(-1);
+ } else if (er.encoded > (ssize_t) buffer_size) {
+ cerr << "Buffer of size " << buffer_size << " is to small for " << asn_DEF_E2SM_gNB_NRT_RANfunction_Definition.name << endl;
+ exit(-1);
+ } else {
+ ranDef->buf = (uint8_t *)calloc(1, er.encoded);
+ ranDef->size = er.encoded;
+ memcpy(ranDef->buf, buffer, ranDef->size);
+ }
+
+
itemIes->id = ProtocolIE_ID_id_RANfunction_Item;
itemIes->criticality = Criticality_reject;
itemIes->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item;
itemIes->value.choice.RANfunction_Item.ranFunctionID = 1;
- auto *ranDef = &itemIes->value.choice.RANfunction_Item.ranFunctionDefinition;
- ranDef->size = 3;
- ranDef->buf = (uint8_t *)calloc(1, ranDef->size);
- memcpy(ranDef->buf, buf, ranDef->size);
+// auto *ranDef = &itemIes->value.choice.RANfunction_Item.ranFunctionDefinition;
+// ranDef->size = 3;
+// ranDef->buf = (uint8_t *)calloc(1, ranDef->size);
+// memcpy(ranDef->buf, buf, ranDef->size);
ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes);
itemIes1->value.present = RANfunction_ItemIEs__value_PR_RANfunction_Item;
itemIes1->value.choice.RANfunction_Item.ranFunctionID = 7;
ranDef = &itemIes1->value.choice.RANfunction_Item.ranFunctionDefinition;
- ranDef->size = 3;
- ranDef->buf = (uint8_t *)calloc(1, ranDef->size);
- memcpy(ranDef->buf, buf, ranDef->size);
+
+ ranDef->buf = (uint8_t *)calloc(1, er.encoded);
+ ranDef->size = er.encoded;
+ memcpy(ranDef->buf, buffer, ranDef->size);
+
ASN_SEQUENCE_ADD(&ranFlistIEs->value.choice.RANfunctions_List.list, itemIes1);
uns->criticality = Criticality_reject;
uns->value.present = UnsuccessfulOutcome__value_PR_E2setupFailure;
- auto *e2SetupFIE = (E2setupFailureIEs_t *)calloc(1, sizeof(E2setupFailureIEs_t));
- ASN_STRUCT_RESET(asn_DEF_E2setupFailureIEs, e2SetupFIE);
+ ASN_STRUCT_RESET(asn_DEF_E2setupFailure, &uns->value.choice.E2setupFailure);
+
- e2SetupFIE->criticality = Criticality_reject;
- e2SetupFIE->id = ProtocolIE_ID_id_GlobalRIC_ID;
- e2SetupFIE->value.present = E2setupFailureIEs__value_PR_Cause;
- e2SetupFIE->value.choice.Cause.present = Cause_PR_transport;
- e2SetupFIE->value.choice.Cause.choice.transport = CauseTransport_transport_resource_unavailable;
+ {
+ auto *e2SetupFIE = (E2setupFailureIEs_t *) calloc(1, sizeof(E2setupFailureIEs_t));
+ ASN_STRUCT_RESET(asn_DEF_E2setupFailureIEs, e2SetupFIE);
+ e2SetupFIE->criticality = Criticality_ignore;
+ e2SetupFIE->id = ProtocolIE_ID_id_Cause;
+ e2SetupFIE->value.present = E2setupFailureIEs__value_PR_Cause;
+ e2SetupFIE->value.choice.Cause.present = Cause_PR_transport;
+ e2SetupFIE->value.choice.Cause.choice.transport = CauseTransport_transport_resource_unavailable;
- ASN_STRUCT_RESET(asn_DEF_E2setupFailure, &uns->value.choice.E2setupFailure);
- ASN_SEQUENCE_ADD(&uns->value.choice.E2setupFailure.protocolIEs.list, e2SetupFIE);
+
+ ASN_SEQUENCE_ADD(&uns->value.choice.E2setupFailure.protocolIEs.list, e2SetupFIE);
+ }
+
+ {
+ auto *e2SetupFIE = (E2setupFailureIEs_t *) calloc(1, sizeof(E2setupFailureIEs_t));
+ ASN_STRUCT_RESET(asn_DEF_E2setupFailureIEs, e2SetupFIE);
+
+ e2SetupFIE->criticality = Criticality_ignore;
+ e2SetupFIE->id = ProtocolIE_ID_id_TimeToWait;
+ e2SetupFIE->value.present = E2setupFailureIEs__value_PR_TimeToWait;
+ e2SetupFIE->value.choice.TimeToWait = TimeToWait_v60s;
+
+ ASN_SEQUENCE_ADD(&uns->value.choice.E2setupFailure.protocolIEs.list, e2SetupFIE);
+ }
+ {
+ auto *e2SetupFIE = (E2setupFailureIEs_t *) calloc(1, sizeof(E2setupFailureIEs_t));
+ ASN_STRUCT_RESET(asn_DEF_E2setupFailureIEs, e2SetupFIE);
+
+ e2SetupFIE->criticality = Criticality_ignore;
+ e2SetupFIE->id = ProtocolIE_ID_id_CriticalityDiagnostics;
+ e2SetupFIE->value.present = E2setupFailureIEs__value_PR_CriticalityDiagnostics;
+ e2SetupFIE->value.choice.CriticalityDiagnostics.procedureCode = (ProcedureCode_t *)calloc(1,sizeof(ProcedureCode_t));
+ *e2SetupFIE->value.choice.CriticalityDiagnostics.procedureCode = ProcedureCode_id_E2setup;
+ e2SetupFIE->value.choice.CriticalityDiagnostics.triggeringMessage = (TriggeringMessage_t *)calloc(1,sizeof(TriggeringMessage_t));
+ *e2SetupFIE->value.choice.CriticalityDiagnostics.triggeringMessage = TriggeringMessage_initiating_message;
+ e2SetupFIE->value.choice.CriticalityDiagnostics.procedureCriticality = (Criticality_t *)calloc(1, sizeof(Criticality_t));
+ *e2SetupFIE->value.choice.CriticalityDiagnostics.procedureCriticality = Criticality_reject;
+ ASN_SEQUENCE_ADD(&uns->value.choice.E2setupFailure.protocolIEs.list, e2SetupFIE);
+ }
pdu->present = E2AP_PDU_PR_unsuccessfulOutcome;
}