diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c
index 7c664d292d..99f60a1660 100644
--- a/openair2/RRC/NR_UE/rrc_UE.c
+++ b/openair2/RRC/NR_UE/rrc_UE.c
@@ -2597,14 +2597,22 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
//-----------------------------------------------------------------------------
{
asn_enc_rval_t enc_rval;
+ asn_dec_rval_t dec_rval;
NR_UL_DCCH_Message_t ul_dcch_msg;
NR_UE_CapabilityRAT_Container_t ue_CapabilityRAT_Container;
+ char UE_NR_Capability_xer_fname[1024];
+ char UE_NR_Capability_xer[8192];
+ size_t size;
uint8_t buffer[200];
int i;
LOG_I(NR_RRC,"[UE %d] Frame %d: Receiving from SRB1 (DL-DCCH), Processing UECapabilityEnquiry (gNB %d)\n",
ctxt_pP->module_id,
ctxt_pP->frame,
gNB_index);
+
+ sprintf(UE_NR_Capability_xer_fname,"%stargets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml",getenv("OPENAIR_HOME"));
+ FILE *f = fopen(UE_NR_Capability_xer_fname, "r");
+
memset((void *)&ul_dcch_msg,0,sizeof(NR_UL_DCCH_Message_t));
memset((void *)&ue_CapabilityRAT_Container,0,sizeof(NR_UE_CapabilityRAT_Container_t));
ul_dcch_msg.message.present = NR_UL_DCCH_MessageType_PR_c1;
@@ -2613,14 +2621,26 @@ nr_rrc_ue_process_ueCapabilityEnquiry(
ul_dcch_msg.message.choice.c1->choice.ueCapabilityInformation = CALLOC(1, sizeof(struct NR_UECapabilityInformation));
ul_dcch_msg.message.choice.c1->choice.ueCapabilityInformation->rrc_TransactionIdentifier = UECapabilityEnquiry->rrc_TransactionIdentifier;
ue_CapabilityRAT_Container.rat_Type = NR_RAT_Type_nr;
- NR_UE_NR_Capability_t* UE_Capability_nr;
+ NR_UE_NR_Capability_t* UE_Capability_nr;
UE_Capability_nr = CALLOC(1,sizeof(NR_UE_NR_Capability_t));
- NR_BandNR_t *nr_bandnr;
- nr_bandnr = CALLOC(1,sizeof(NR_BandNR_t));
- nr_bandnr->bandNR = 1;
- ASN_SEQUENCE_ADD(
- &UE_Capability_nr->rf_Parameters.supportedBandListNR.list,
- nr_bandnr);
+
+ if(f){
+ size = fread(UE_NR_Capability_xer, 1, sizeof UE_NR_Capability_xer, f);
+ if (size == 0 || size == sizeof UE_NR_Capability_xer) {
+ LOG_E(NR_RRC,"UE Capabilities XER file %s is too large\n", UE_NR_Capability_xer_fname);
+ free(UE_Capability_nr);
+ return;
+ }
+ dec_rval = xer_decode(0, &asn_DEF_NR_UE_NR_Capability, (void *)UE_Capability_nr, UE_NR_Capability_xer, size);
+ assert(dec_rval.code == RC_OK);
+ }
+ else {
+ NR_BandNR_t *nr_bandnr;
+ nr_bandnr = CALLOC(1,sizeof(NR_BandNR_t));
+ nr_bandnr->bandNR = 1;
+ ASN_SEQUENCE_ADD(&UE_Capability_nr->rf_Parameters.supportedBandListNR.list,
+ nr_bandnr);
+ }
OAI_NR_UECapability_t *UECap;
UECap = CALLOC(1,sizeof(OAI_NR_UECapability_t));
UECap->UE_NR_Capability = UE_Capability_nr;
diff --git a/targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml b/targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml
index 00d74af54b..994b64e4ae 100644
--- a/targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml
+++ b/targets/PROJECTS/GENERIC-NR-5GC/CONF/uecap.xml
@@ -1,1375 +1,1356 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 11
-
-
-
-
-
-
- 01
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8
- 64
-
-
-
- 4
- 32
-
-
- 2
- 2
- 0
- 2
- 2
-
-
-
- 0
- 4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 78
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2
- 8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8
- 64
-
-
-
-
-
- 8
- 32
-
-
-
-
-
- 4
- 64
-
-
-
-
-
- 2
- 64
-
-
-
-
-
- 4
-
-
-
-
- 8
- 64
-
-
-
- 4
- 32
-
-
- 2
- 2
- 0
- 2
- 2
-
-
-
- 0
- 4
-
-
- 2
- 1
- 8
- 16
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0000000000
- 0001011111
- 0000000000
-
-
-
-
- 0000000000
- 0001011111
- 0000000000
-
-
-
-
-
-
-
- 1000000000000000
-
-
-
-
- 1000000000000000
-
-
-
-
-
-
-
-
- 78
-
-
-
-
-
-
-
-
- 0
-
-
-
-
-
-
-
- 78
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 8
- 64
-
- 8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
- 2
-
-
-
-
-
-
-
- 3
-
-
-
-
-
-
-
- 4
-
-
-
-
-
-
-
- 5
-
-
-
-
-
-
-
- 6
-
-
-
-
-
-
-
- 7
-
-
-
-
-
-
-
- 8
-
-
-
-
-
-
-
- 9
-
-
-
-
-
-
-
- 10
-
-
-
-
-
-
-
- 11
-
-
-
-
-
-
-
- 12
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 2
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 3
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 4
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 5
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 6
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 7
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 8
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 9
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 10
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 11
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 12
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
- 11
-
-
-
-
-
- 6
-
-
-
- 6
-
-
-
- 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2
- 2
-
-
-
-
-
-
-
-
- 7
- 38
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 11
+
+
+
+
+
+
+ 01
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 8
+ 64
+
+
+
+ 4
+ 32
+
+
+ 2
+ 2
+ 0
+ 2
+ 2
+
+
+
+ 0
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 78
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 8
+ 64
+
+
+
+
+
+ 8
+ 32
+
+
+
+
+
+ 4
+ 64
+
+
+
+
+
+ 2
+ 64
+
+
+
+
+
+ 4
+
+
+
+
+ 8
+ 64
+
+
+
+ 4
+ 32
+
+
+ 2
+ 2
+ 0
+ 2
+ 2
+
+
+
+ 0
+ 4
+
+
+ 2
+ 1
+ 8
+ 16
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0000000000
+ 0001011111
+ 0000000000
+
+
+
+
+ 0000000000
+ 0001011111
+ 0000000000
+
+
+
+
+
+
+
+ 1000000000000000
+
+
+
+
+ 1000000000000000
+
+
+
+
+
+
+
+
+ 78
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+ 78
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 8
+ 64
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+
+ 3
+
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
+
+
+ 6
+
+
+
+
+
+
+
+ 7
+
+
+
+
+
+
+
+ 8
+
+
+
+
+
+
+
+ 9
+
+
+
+
+
+
+
+ 10
+
+
+
+
+
+
+
+ 11
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 3
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 4
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 6
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 7
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 8
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 9
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 10
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 11
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 12
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+ 11
+
+
+
+
+
+ 6
+
+
+
+ 6
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+ 2
+
+
+
+
+
+
+
+
+ 7
+ 38
+
+
+
+
+
+
+
+
+
+
+
+
+