lte/nr x2ap: fix content of SgNBAdditionRequest
Wireshark (version 3.3.2) was not happy. https://asn1.io/asn1playground/ was not happy. Let's make them happy. So then everyone is happy.
This commit is contained in:
+26
-33
@@ -4428,9 +4428,9 @@ static int encode_CG_ConfigInfo(
|
||||
int RRC_OK = 1;
|
||||
int index = 0;
|
||||
char temp_buff[ASN_MAX_ENCODE_SIZE];
|
||||
LTE_UE_CapabilityRAT_ContainerList_t *ue_cap_rat_container_list = NULL;
|
||||
LTE_UE_CapabilityRAT_Container_t ue_cap_rat_container_MRDC;
|
||||
LTE_UE_CapabilityRAT_Container_t ue_cap_rat_container_nr;
|
||||
NR_UE_CapabilityRAT_ContainerList_t *ue_cap_rat_container_list = NULL;
|
||||
NR_UE_CapabilityRAT_Container_t *ue_cap_rat_container_MRDC = NULL;
|
||||
NR_UE_CapabilityRAT_Container_t *ue_cap_rat_container_nr = NULL;
|
||||
int RAT_Container_count = 0;
|
||||
rb_config = calloc(1,sizeof(struct NR_RadioBearerConfig));
|
||||
AssertFatal(rb_config != NULL,"failed to allocate memory for rb_config");
|
||||
@@ -4503,10 +4503,6 @@ static int encode_CG_ConfigInfo(
|
||||
= calloc(1,sizeof(struct NR_CG_ConfigInfo_IEs));
|
||||
AssertFatal(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo != NULL,
|
||||
"failed to allocate memory for cg_configinfo_IEs");
|
||||
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo
|
||||
= calloc(1,sizeof( OCTET_STRING_t));
|
||||
AssertFatal(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->
|
||||
ue_CapabilityInfo != NULL, "failed to allocate memory for ue_capabilityinfo");
|
||||
|
||||
if(ue_context_pP->ue_context.UE_Capability_MRDC) {
|
||||
RAT_Container_count++;
|
||||
@@ -4514,8 +4510,10 @@ static int encode_CG_ConfigInfo(
|
||||
(void *)ue_context_pP->ue_context.UE_Capability_MRDC,temp_buff,ASN_MAX_ENCODE_SIZE);
|
||||
AssertFatal(enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
||||
enc_rval.failed_type->name, enc_rval.encoded);
|
||||
ue_cap_rat_container_MRDC.rat_Type = LTE_RAT_Type_eutra_nr;
|
||||
OCTET_STRING_fromBuf(&ue_cap_rat_container_MRDC.ueCapabilityRAT_Container,
|
||||
ue_cap_rat_container_MRDC = calloc(1, sizeof(*ue_cap_rat_container_MRDC));
|
||||
AssertFatal(ue_cap_rat_container_MRDC != NULL,"failed to allocate memory for ue_cap_rat_container_MRDC");
|
||||
ue_cap_rat_container_MRDC->rat_Type = NR_RAT_Type_eutra_nr;
|
||||
OCTET_STRING_fromBuf(&ue_cap_rat_container_MRDC->ue_CapabilityRAT_Container,
|
||||
(const char *)temp_buff,(enc_rval.encoded+7)>>3);
|
||||
memset((void *)temp_buff,0,sizeof(temp_buff));
|
||||
}
|
||||
@@ -4526,35 +4524,30 @@ static int encode_CG_ConfigInfo(
|
||||
(void *)ue_context_pP->ue_context.UE_Capability_nr,temp_buff,ASN_MAX_ENCODE_SIZE);
|
||||
AssertFatal(enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
||||
enc_rval.failed_type->name, enc_rval.encoded);
|
||||
ue_cap_rat_container_nr.rat_Type = LTE_RAT_Type_nr;
|
||||
OCTET_STRING_fromBuf(&ue_cap_rat_container_nr.ueCapabilityRAT_Container,
|
||||
ue_cap_rat_container_nr = calloc(1, sizeof(*ue_cap_rat_container_nr));
|
||||
AssertFatal(ue_cap_rat_container_nr != NULL,"failed to allocate memory for ue_cap_rat_container_nr");
|
||||
ue_cap_rat_container_nr->rat_Type = NR_RAT_Type_nr;
|
||||
OCTET_STRING_fromBuf(&ue_cap_rat_container_nr->ue_CapabilityRAT_Container,
|
||||
(const char *)temp_buff,(enc_rval.encoded+7)>>3);
|
||||
memset((void *)temp_buff,0,sizeof(temp_buff));
|
||||
}
|
||||
|
||||
ue_cap_rat_container_list = calloc(1,sizeof(LTE_UE_CapabilityRAT_ContainerList_t));
|
||||
ue_cap_rat_container_list->list.count = RAT_Container_count;
|
||||
ue_cap_rat_container_list->list.size = RAT_Container_count * sizeof(LTE_UE_CapabilityRAT_Container_t);
|
||||
ue_cap_rat_container_list->list.array = calloc(RAT_Container_count,sizeof(LTE_UE_CapabilityRAT_Container_t *));
|
||||
|
||||
if(ue_context_pP->ue_context.UE_Capability_MRDC) {
|
||||
ue_cap_rat_container_list->list.array[0] = calloc(1,sizeof(LTE_UE_CapabilityRAT_Container_t));
|
||||
memcpy(ue_cap_rat_container_list->list.array[0],&ue_cap_rat_container_MRDC,sizeof(LTE_UE_CapabilityRAT_Container_t));
|
||||
if (RAT_Container_count) {
|
||||
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo = calloc(1,sizeof( OCTET_STRING_t));
|
||||
AssertFatal(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo-> ue_CapabilityInfo != NULL, "failed to allocate memory for ue_capabilityinfo");
|
||||
ue_cap_rat_container_list = calloc(1,sizeof(NR_UE_CapabilityRAT_ContainerList_t));
|
||||
if (ue_cap_rat_container_MRDC != NULL)
|
||||
ASN_SEQUENCE_ADD(&ue_cap_rat_container_list->list, ue_cap_rat_container_MRDC);
|
||||
if (ue_cap_rat_container_nr != NULL)
|
||||
ASN_SEQUENCE_ADD(&ue_cap_rat_container_list->list, ue_cap_rat_container_nr);
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_UE_CapabilityRAT_ContainerList,NULL,
|
||||
(void *)ue_cap_rat_container_list,temp_buff,ASN_MAX_ENCODE_SIZE);
|
||||
AssertFatal(enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
||||
enc_rval.failed_type->name, enc_rval.encoded);
|
||||
OCTET_STRING_fromBuf(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo,
|
||||
(const char *)temp_buff, (enc_rval.encoded+7)>>3);
|
||||
}
|
||||
|
||||
if(ue_context_pP->ue_context.UE_Capability_nr) {
|
||||
ue_cap_rat_container_list->list.array[1] = calloc(1,sizeof(LTE_UE_CapabilityRAT_Container_t));
|
||||
memcpy(ue_cap_rat_container_list->list.array[1],&ue_cap_rat_container_nr,sizeof(LTE_UE_CapabilityRAT_Container_t));
|
||||
}
|
||||
|
||||
//this xer_fprint logs can be enabled for additional debugging logs
|
||||
//xer_fprint(stdout,&asn_DEF_LTE_UE_CapabilityRAT_ContainerList,ue_cap_rat_container_list);
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_UE_CapabilityRAT_ContainerList,NULL,
|
||||
(void *)ue_cap_rat_container_list,temp_buff,ASN_MAX_ENCODE_SIZE);
|
||||
AssertFatal(enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %jd)!\n",
|
||||
enc_rval.failed_type->name, enc_rval.encoded);
|
||||
OCTET_STRING_fromBuf(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->ue_CapabilityInfo,
|
||||
(const char *)temp_buff, (enc_rval.encoded+7)>>3);
|
||||
cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->mcg_RB_Config
|
||||
= calloc(1,sizeof(OCTET_STRING_t));
|
||||
AssertFatal(cg_configinfo->criticalExtensions.choice.c1->choice.cg_ConfigInfo->
|
||||
@@ -4573,7 +4566,7 @@ static int encode_CG_ConfigInfo(
|
||||
*enc_size = (enc_rval.encoded+7)/8;
|
||||
ASN_STRUCT_FREE(asn_DEF_NR_RadioBearerConfig,rb_config);
|
||||
ASN_STRUCT_FREE(asn_DEF_NR_CG_ConfigInfo,cg_configinfo);
|
||||
ASN_STRUCT_FREE(asn_DEF_LTE_UE_CapabilityRAT_ContainerList,ue_cap_rat_container_list);
|
||||
ASN_STRUCT_FREE(asn_DEF_NR_UE_CapabilityRAT_ContainerList,ue_cap_rat_container_list);
|
||||
return RRC_OK;
|
||||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -65,7 +65,7 @@ void rrc_gNB_generate_SgNBAdditionRequestAcknowledge(
|
||||
|
||||
struct rrc_gNB_ue_context_s *rrc_gNB_allocate_new_UE_context(gNB_RRC_INST *rrc_instance_pP);
|
||||
|
||||
void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc,LTE_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m, NR_CG_ConfigInfo_IEs_t * cg_config_info);
|
||||
void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc,NR_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m, NR_CG_ConfigInfo_IEs_t * cg_config_info);
|
||||
|
||||
void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_p, x2ap_ENDC_sgnb_addition_req_t *m);
|
||||
|
||||
|
||||
@@ -47,10 +47,10 @@ int parse_CG_ConfigInfo(gNB_RRC_INST *rrc, NR_CG_ConfigInfo_t *CG_ConfigInfo, x2
|
||||
|
||||
if (cg_ConfigInfo->ue_CapabilityInfo) {
|
||||
// Decode UE-CapabilityRAT-ContainerList
|
||||
LTE_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList=NULL;
|
||||
UE_CapabilityRAT_ContainerList = calloc(1,sizeof(LTE_UE_CapabilityRAT_ContainerList_t));
|
||||
NR_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList=NULL;
|
||||
UE_CapabilityRAT_ContainerList = calloc(1,sizeof(NR_UE_CapabilityRAT_ContainerList_t));
|
||||
asn_dec_rval_t dec_rval = uper_decode(NULL,
|
||||
&asn_DEF_LTE_UE_CapabilityRAT_ContainerList,
|
||||
&asn_DEF_NR_UE_CapabilityRAT_ContainerList,
|
||||
(void **)&UE_CapabilityRAT_ContainerList,
|
||||
cg_ConfigInfo->ue_CapabilityInfo->buf,
|
||||
cg_ConfigInfo->ue_CapabilityInfo->size, 0, 0);
|
||||
|
||||
@@ -62,7 +62,7 @@ extern rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * con
|
||||
const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP,
|
||||
struct NR_CellGroupConfig__rlc_BearerToAddModList *rlc_bearer2add_list);
|
||||
|
||||
void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, LTE_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m, NR_CG_ConfigInfo_IEs_t *cg_config_info) {
|
||||
void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, NR_UE_CapabilityRAT_ContainerList_t *UE_CapabilityRAT_ContainerList, x2ap_ENDC_sgnb_addition_req_t *m, NR_CG_ConfigInfo_IEs_t *cg_config_info) {
|
||||
struct rrc_gNB_ue_context_s *ue_context_p = NULL;
|
||||
|
||||
OCTET_STRING_t *ueCapabilityRAT_Container_nr=NULL;
|
||||
@@ -74,8 +74,8 @@ void rrc_parse_ue_capabilities(gNB_RRC_INST *rrc, LTE_UE_CapabilityRAT_Container
|
||||
AssertFatal((list_size=UE_CapabilityRAT_ContainerList->list.count) >= 2, "UE_CapabilityRAT_ContainerList->list.size %d < 2\n",UE_CapabilityRAT_ContainerList->list.count);
|
||||
|
||||
for (int i=0; i<list_size; i++) {
|
||||
if (UE_CapabilityRAT_ContainerList->list.array[i]->rat_Type == LTE_RAT_Type_nr) ueCapabilityRAT_Container_nr = &UE_CapabilityRAT_ContainerList->list.array[i]->ueCapabilityRAT_Container;
|
||||
else if (UE_CapabilityRAT_ContainerList->list.array[i]->rat_Type == LTE_RAT_Type_eutra_nr) ueCapabilityRAT_Container_MRDC = &UE_CapabilityRAT_ContainerList->list.array[i]->ueCapabilityRAT_Container;
|
||||
if (UE_CapabilityRAT_ContainerList->list.array[i]->rat_Type == NR_RAT_Type_nr) ueCapabilityRAT_Container_nr = &UE_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container;
|
||||
else if (UE_CapabilityRAT_ContainerList->list.array[i]->rat_Type == NR_RAT_Type_eutra_nr) ueCapabilityRAT_Container_MRDC = &UE_CapabilityRAT_ContainerList->list.array[i]->ue_CapabilityRAT_Container;
|
||||
}
|
||||
|
||||
// decode and store capabilities
|
||||
|
||||
@@ -1675,7 +1675,7 @@ int x2ap_eNB_generate_ENDC_x2_SgNB_addition_request(
|
||||
for (int i=0;i<e_rabs_tobeadded;i++) {
|
||||
e_RABS_ToBeAdded_SgNBAddReq_ItemIEs = (X2AP_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_t *)calloc(1,sizeof(X2AP_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs_t));
|
||||
e_RABS_ToBeAdded_SgNBAddReq_ItemIEs->id = X2AP_ProtocolIE_ID_id_E_RABs_ToBeAdded_SgNBAddReq_Item;
|
||||
e_RABS_ToBeAdded_SgNBAddReq_ItemIEs->criticality = X2AP_Criticality_ignore;
|
||||
e_RABS_ToBeAdded_SgNBAddReq_ItemIEs->criticality = X2AP_Criticality_reject;
|
||||
e_RABS_ToBeAdded_SgNBAddReq_ItemIEs->value.present = X2AP_E_RABs_ToBeAdded_SgNBAddReq_ItemIEs__value_PR_E_RABs_ToBeAdded_SgNBAddReq_Item;
|
||||
e_RABS_ToBeAdded_SgNBAddReq_Item = &e_RABS_ToBeAdded_SgNBAddReq_ItemIEs->value.choice.E_RABs_ToBeAdded_SgNBAddReq_Item;
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user