mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-20 08:00:31 +00:00
add function to fill MIB_SL
This commit is contained in:
@@ -76,6 +76,8 @@
|
||||
#include "SIB-Type.h"
|
||||
|
||||
#include "BCCH-DL-SCH-Message.h"
|
||||
#include "SBCCH-SL-BCH-MessageType.h"
|
||||
#include "SBCCH-SL-BCH-Message.h"
|
||||
|
||||
#include "PHY/defs.h"
|
||||
|
||||
@@ -285,6 +287,67 @@ uint8_t do_MIB(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_t phich
|
||||
return((enc_rval.encoded+7)/8);
|
||||
}
|
||||
|
||||
//TTN for D2D
|
||||
// 3GPP 36.331 (Section 5.10.7.4)
|
||||
uint8_t do_MIB_SL(const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, uint32_t frame, uint8_t subframe, uint8_t in_coverage, uint8_t mode)
|
||||
{
|
||||
|
||||
asn_enc_rval_t enc_rval;
|
||||
SBCCH_SL_BCH_MessageType_t *mib_sl = &UE_rrc_inst[ctxt_pP->module_id].mib_sl[eNB_index];
|
||||
uint8_t sfn = (uint8_t)((frame>>2)&0xff);
|
||||
UE_rrc_inst[ctxt_pP->module_id].MIB = (uint8_t*) malloc16(4);
|
||||
|
||||
if (in_coverage > 0 ){
|
||||
//in coverage
|
||||
mib_sl->inCoverage_r12 = TRUE;
|
||||
mib_sl->sl_Bandwidth_r12 = UE_rrc_inst[ctxt_pP->module_id].sib2[eNB_index]->freqInfo.ul_Bandwidth;
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]->tdd_Config) {
|
||||
mib_sl->tdd_ConfigSL_r12.subframeAssignmentSL_r12 = UE_rrc_inst[ctxt_pP->module_id].sib1[eNB_index]->tdd_Config->subframeAssignment;
|
||||
} else {
|
||||
mib_sl->tdd_ConfigSL_r12.subframeAssignmentSL_r12 = TDD_ConfigSL_r12__subframeAssignmentSL_r12_none;
|
||||
}
|
||||
//if triggered by sl communication
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].sib18[eNB_index]->commConfig_r12->commSyncConfig_r12->list.array[0]->txParameters_r12->syncInfoReserved_r12){
|
||||
mib_sl->reserved_r12 = *UE_rrc_inst[ctxt_pP->module_id].sib18[eNB_index]->commConfig_r12->commSyncConfig_r12->list.array[0]->txParameters_r12->syncInfoReserved_r12;
|
||||
}
|
||||
//if triggered by sl discovery
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].sib19[eNB_index]->discConfig_r12->discSyncConfig_r12->list.array[0]->txParameters_r12->syncInfoReserved_r12){
|
||||
mib_sl->reserved_r12 = *UE_rrc_inst[ctxt_pP->module_id].sib19[eNB_index]->discConfig_r12->discSyncConfig_r12->list.array[0]->txParameters_r12->syncInfoReserved_r12;
|
||||
}
|
||||
//Todo - if triggered by v2x
|
||||
} else {
|
||||
//Todo - out of coverage for V2X
|
||||
// Todo - UE has a selected SyncRef UE
|
||||
mib_sl->inCoverage_r12 = FALSE;
|
||||
//set sl-Bandwidth, subframeAssignmentSL and reserved from the pre-configured parameters
|
||||
}
|
||||
|
||||
//set FrameNumber, subFrameNumber
|
||||
mib_sl->directFrameNumber_r12.buf = &sfn;
|
||||
mib_sl->directFrameNumber_r12.size = 1;
|
||||
mib_sl->directFrameNumber_r12.bits_unused=0;
|
||||
mib_sl->directSubframeNumber_r12 = subframe;
|
||||
|
||||
|
||||
LOG_I(RRC,"[MIB-SL] sfn %x, subframe %x\n", (uint32_t)sfn, (uint8_t)subframe);
|
||||
|
||||
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_SBCCH_SL_BCH_Message,
|
||||
(void*)mib_sl,
|
||||
UE_rrc_inst[ctxt_pP->module_id].MIB,
|
||||
24);
|
||||
AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n",
|
||||
enc_rval.failed_type->name, enc_rval.encoded);
|
||||
|
||||
|
||||
if (enc_rval.encoded==-1) {
|
||||
return(-1);
|
||||
}
|
||||
|
||||
return((enc_rval.encoded+7)/8);
|
||||
}
|
||||
|
||||
|
||||
uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
|
||||
int Mod_id,int CC_id
|
||||
#if defined(ENABLE_ITTI)
|
||||
@@ -1361,7 +1424,7 @@ uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv)
|
||||
|
||||
|
||||
//TTN for D2D - 3GPP TS 36.331 (Section 5.10.2.3)
|
||||
uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_DestinationInfoList_r12_t *destinationInfoList, long *discTxResourceReq, uint8_t mode)
|
||||
uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_DestinationInfoList_r12_t *destinationInfoList, long *discTxResourceReq, SL_TRIGGER_t mode)
|
||||
{
|
||||
|
||||
asn_enc_rval_t enc_rval;
|
||||
@@ -1381,28 +1444,28 @@ uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_Destinatio
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.present = SidelinkUEInformation_r12__criticalExtensions__c1_PR_sidelinkUEInformation_r12;
|
||||
switch(mode) {
|
||||
//if SIB18 is available case 1,2,3,4
|
||||
case 1: // to receive sidelink communication
|
||||
case SL_RECEIVE_COMMUNICATION: // to receive sidelink communication
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commRxInterestedFreq_r12 = &carrierFreq[0];
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commRxInterestedFreq_r12[0] = carrierFreq[0];
|
||||
break;
|
||||
case 2: //to transmit non-relay related one-to-many sidelink communication
|
||||
case SL_TRANSMIT_NON_RELAY_ONE_TO_MANY: //to transmit non-relay related one-to-many sidelink communication
|
||||
//commTxResourceReq
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commTxResourceReq_r12->carrierFreq_r12 = &carrierFreq[0];
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commTxResourceReq_r12->destinationInfoList_r12 = *destinationInfoList;
|
||||
break;
|
||||
case 3://transmit non-relay related one-to-one sidelink communication
|
||||
case SL_TRANSMIT_NON_RELAY_ONE_TO_ONE://transmit non-relay related one-to-one sidelink communication
|
||||
//if commTxResourceUC-ReqAllowed is included in SIB18
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceReqUC_r13->carrierFreq_r12 = &carrierFreq[0];
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceReqUC_r13->destinationInfoList_r12 = *destinationInfoList;
|
||||
break;
|
||||
case 4: //transmit relay related one-to-one sidelink communication
|
||||
case SL_TRANSMIT_RELAY_ONE_TO_ONE: //transmit relay related one-to-one sidelink communication
|
||||
//if SIB19 includes discConfigRelay and UE acts a relay or UE has a selected relay
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12 = *destinationInfoList;
|
||||
//set ue-type to relayUE or remoteUE
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->ue_Type_r13 =SidelinkUEInformation_v1310_IEs__commTxResourceInfoReqRelay_r13__ue_Type_r13_relayUE;
|
||||
//sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12->nonCriticalExtension->commTxResourceInfoReqRelay_r13->ue_Type_r13 =SidelinkUEInformation_v1310_IEs__commTxResourceInfoReqRelay_r13__ue_Type_r13_remoteUE;
|
||||
break;
|
||||
case 5: //transmit relay related one-to-many sidelink communication
|
||||
case SL_TRANSMIT_RELAY_ONE_TO_MANY: //transmit relay related one-to-many sidelink communication
|
||||
//if SIB19 includes discConfigRelay and UE acts a relay
|
||||
//set ue-type to relayUE
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->ue_Type_r13 =SidelinkUEInformation_v1310_IEs__commTxResourceInfoReqRelay_r13__ue_Type_r13_relayUE;
|
||||
@@ -1411,22 +1474,28 @@ uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_Destinatio
|
||||
|
||||
//if SIB19 is available
|
||||
//TTN - for case 6,7, and 8, we consider only one frequency - a serving frequency
|
||||
case 6: //receive sidelink discovery announcements
|
||||
case SL_RECEIVE_DISCOVERY: //receive sidelink discovery announcements
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.discRxInterest_r12 = SidelinkUEInformation_r12_IEs__discRxInterest_r12_true;
|
||||
break;
|
||||
case 7://to transmit non-PS related sidelink discovery announcements
|
||||
case SL_TRANSMIT_NON_PS_DISCOVERY://to transmit non-PS related sidelink discovery announcements
|
||||
//for the first frequency
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.discTxResourceReq_r12 = discTxResourceReq;
|
||||
//for additional frequency
|
||||
break;
|
||||
case 8://to transmit PS related sidelink discovery announcements
|
||||
case SL_TRANSMIT_PS_DISCOVERY://to transmit PS related sidelink discovery announcements
|
||||
//if to transmit non-relay PS related discovery announcements and SIB19 includes discConfigPS
|
||||
//if UE is acting as relay UE and SIB includes discConfigRelay (relay threshold condition)
|
||||
//if relay UE/has a selected relay UE and if SIB19 includes discConfigRelay
|
||||
sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->discTxResourceReqPS_r13->discTxResourceReq_r13 = discTxResourceReq;
|
||||
//sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12->nonCriticalExtension->discTxResourceReqPS_r13->carrierFreqDiscTx_r13
|
||||
break;
|
||||
//TODO: SIB21
|
||||
//SIB21
|
||||
case SL_RECEIVE_V2X:
|
||||
//TODO
|
||||
break;
|
||||
case SL_TRANSMIT_V2X:
|
||||
//TODO
|
||||
break;
|
||||
//TODO: request sidelink discovery transmission/reception gaps
|
||||
//TODO: report the system information parameters related to sidelink discovery of carriers other than the primary
|
||||
default:
|
||||
@@ -2286,12 +2355,12 @@ do_RRCConnectionReconfiguration(
|
||||
|
||||
//TTN for D2D
|
||||
//allocate dedicated resource pools for SL communication (sl_CommConfig_r12)
|
||||
if (sl_CommConfig) {
|
||||
if (sl_CommConfig != NULL) {
|
||||
rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->sl_CommConfig_r12 = sl_CommConfig;
|
||||
rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->sl_CommConfig_r12[0] = sl_CommConfig[0];
|
||||
}
|
||||
//allocate dedicated resource pools for SL discovery (sl_DiscConfig)
|
||||
if (sl_DiscConfig){
|
||||
if (sl_DiscConfig != NULL){
|
||||
rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->sl_DiscConfig_r12 = sl_DiscConfig;
|
||||
rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->sl_DiscConfig_r12[0] = sl_DiscConfig[0];
|
||||
}
|
||||
|
||||
@@ -112,9 +112,9 @@ uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv);
|
||||
\brief Generate an SidelinkUEInformation UL-DCCH-Message (UE).
|
||||
@param destinationInfoList Pointer to a list of destination for which UE requests E-UTRAN to assign dedicated resources
|
||||
@param discTxResourceReq Pointer to number of discovery messages for discovery announcements for which UE requests E-UTRAN to assign dedicated resources
|
||||
@param mode Indicates different requests from UE
|
||||
@param mode Indicates different requests from upper layers
|
||||
@returns Size of encoded bit stream in bytes*/
|
||||
uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_DestinationInfoList_r12_t *destinationInfoList, long *discTxResourceReq, uint8_t mode);
|
||||
uint8_t do_SidelinkUEInformation(uint8_t Mod_id, uint8_t *buffer, SL_DestinationInfoList_r12_t *destinationInfoList, long *discTxResourceReq, SL_TRIGGER_t mode);
|
||||
|
||||
/** \brief Generate an RRCConnectionSetupComplete UL-DCCH-Message (UE)
|
||||
@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
#include "RRCConnectionRequest.h"
|
||||
#include "RRCConnectionReestablishmentRequest.h"
|
||||
#include "BCCH-DL-SCH-Message.h"
|
||||
#include "SBCCH-SL-BCH-MessageType.h"
|
||||
#include "BCCH-BCH-Message.h"
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
#include "MCCH-Message.h"
|
||||
@@ -224,6 +225,21 @@ typedef enum HO_STATE_e {
|
||||
HO_COMPLETE // initiated by the target eNB
|
||||
} HO_STATE_t;
|
||||
|
||||
typedef enum SL_TRIGGER_e {
|
||||
SL_RECEIVE_COMMUNICATION=0,
|
||||
SL_TRANSMIT_RELAY_ONE_TO_ONE,
|
||||
SL_TRANSMIT_RELAY_ONE_TO_MANY,
|
||||
SL_TRANSMIT_NON_RELAY_ONE_TO_ONE,
|
||||
SL_TRANSMIT_NON_RELAY_ONE_TO_MANY,
|
||||
SL_RECEIVE_DISCOVERY,
|
||||
SL_TRANSMIT_NON_PS_DISCOVERY,
|
||||
SL_TRANSMIT_PS_DISCOVERY,
|
||||
SL_RECEIVE_V2X,
|
||||
SL_TRANSMIT_V2X,
|
||||
SL_REQUEST_DISCOVERY_TRANSMISSION_GAPS,
|
||||
SL_REQUEST_DISCOVERY_RECEPTION_GAPS
|
||||
} SL_TRIGGER_t;
|
||||
|
||||
//#define NUMBER_OF_UE_MAX MAX_MOBILES_PER_RG
|
||||
#define RRM_FREE(p) if ( (p) != NULL) { free(p) ; p=NULL ; }
|
||||
#define RRM_MALLOC(t,n) (t *) malloc16( sizeof(t) * n )
|
||||
@@ -593,6 +609,8 @@ typedef struct UE_RRC_INST_s {
|
||||
//TTN - SIB18
|
||||
SystemInformationBlockType18_r12_t *sib18[NB_CNX_UE];
|
||||
SystemInformationBlockType19_r12_t *sib19[NB_CNX_UE];
|
||||
uint8_t *MIB;
|
||||
SBCCH_SL_BCH_MessageType_t mib_sl[NB_CNX_UE];
|
||||
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
uint8_t MBMS_flag;
|
||||
|
||||
@@ -288,29 +288,38 @@ rrc_eNB_generate_RRCConnectionReconfiguration_handover(
|
||||
);
|
||||
|
||||
/**\brief Generate/decode the RRCConnectionReconfiguration for Sidelink at eNB
|
||||
\param module_idP Instance ID for eNB/CH
|
||||
\param frame Frame index
|
||||
\param ue_module_idP Index of UE transmitting the messages*/
|
||||
\param ctxt_pP Running context
|
||||
\param ue_context_pP RRC UE context
|
||||
\param destinationInfoList List of the destinations
|
||||
\param n_discoveryMessages Number of discovery messages*/
|
||||
int
|
||||
rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
|
||||
const protocol_ctxt_t* const ctxt_pP,
|
||||
rrc_eNB_ue_context_t* const ue_context_pP,
|
||||
SL_DestinationIdentity_r12_t* SL_DestinationIdentity,
|
||||
int n_destinations,
|
||||
SL_DestinationInfoList_r12_t *destinationInfoList,
|
||||
int n_discoveryMessages
|
||||
);
|
||||
|
||||
/** \brief process the received SidelinkUEInformation message at UE
|
||||
/** \brief process the received SidelinkUEInformation message at eNB
|
||||
\param ctxt_pP Running context
|
||||
\param *rrcConnectionReconfiguration pointer to the sturcture
|
||||
\param eNB_index Index of corresponding eNB/CH*/
|
||||
void
|
||||
\param sidelinkUEInformation sidelinkUEInformation message from UE*/
|
||||
uint8_t
|
||||
rrc_eNB_process_SidelinkUEInformation(
|
||||
const protocol_ctxt_t* const ctxt_pP,
|
||||
rrc_eNB_ue_context_t* ue_context_pP,
|
||||
SidelinkUEInformation_r12_t* sidelinkUEInformation
|
||||
);
|
||||
|
||||
/** \brief Get a Resource Pool for TX
|
||||
\param ctxt_pP Running context
|
||||
\param ue_context_pP UE context
|
||||
\param destinationInfoList Pointer to the list of SL destinations*/
|
||||
SL_CommConfig_r12_t rrc_eNB_get_sidelink_commTXPool(
|
||||
const protocol_ctxt_t* const ctxt_pP,
|
||||
rrc_eNB_ue_context_t* const ue_context_pP,
|
||||
SL_DestinationInfoList_r12_t *destinationInfoList
|
||||
);
|
||||
|
||||
//L2_interface.c
|
||||
int8_t
|
||||
mac_rrc_data_req(
|
||||
|
||||
@@ -4880,24 +4880,70 @@ rrc_top_cleanup_ue(
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void rrc_ue_generate_SidelinkUEInformation( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index,SL_DestinationInfoList_r12_t *destinationInfoList, long *discTxResourceReq, uint8_t mode )
|
||||
void rrc_ue_generate_SidelinkUEInformation( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index,SL_DestinationInfoList_r12_t *destinationInfoList, long *discTxResourceReq, SL_TRIGGER_t mode)
|
||||
{
|
||||
uint8_t size;
|
||||
uint8_t buffer[100];
|
||||
|
||||
//Generate SidelinkUEInformation
|
||||
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&8192) != 0) {//if SIB18 is available
|
||||
if (((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&8192) > 0) && (destinationInfoList != NULL)) {//if SIB18 is available
|
||||
size = do_SidelinkUEInformation(ctxt_pP->module_id, buffer, destinationInfoList, NULL, mode);
|
||||
LOG_I(RRC,"[UE %d][RRC_UE] Frame %d : Logical Channel UL-DCCH, Generating SidelinkUEInformation (bytes%d, eNB %d)\n",
|
||||
ctxt_pP->module_id,ctxt_pP->frame, size, eNB_index);
|
||||
}
|
||||
if ((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&16384) != 0) {//if SIB19 is available
|
||||
if (((UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus&16384) > 0) && (discTxResourceReq != NULL)) {//if SIB19 is available
|
||||
size = do_SidelinkUEInformation(ctxt_pP->module_id, buffer, NULL, discTxResourceReq, mode);
|
||||
LOG_I(RRC,"[UE %d][RRC_UE] Frame %d : Logical Channel UL-DCCH, Generating SidelinkUEInformation (bytes%d, eNB %d)\n",
|
||||
ctxt_pP->module_id,ctxt_pP->frame, size, eNB_index);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 3GPP 36.331 (Section 5.10.7.3)
|
||||
uint8_t fill_SLSS(const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index, SLSSID_r12_t *slss_id, uint8_t *subframe, uint8_t mode)
|
||||
{
|
||||
long syncOffsetIndicator = 0;
|
||||
switch(mode) {
|
||||
case 1: //if triggered by SL discovery announcement and in-coverage
|
||||
//discSyncConfig_r12 contains only one element
|
||||
*slss_id = UE_rrc_inst[ctxt_pP->module_id].sib19[eNB_index]->discConfig_r12->discSyncConfig_r12->list.array[0]->slssid_r12;
|
||||
syncOffsetIndicator = UE_rrc_inst[ctxt_pP->module_id].sib19[eNB_index]->discConfig_r12->discSyncConfig_r12->list.array[0]->syncOffsetIndicator_r12;
|
||||
//select subframe for SLSS
|
||||
break;
|
||||
case 2: //if triggered by SL communication and in-coverage
|
||||
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].sib18[eNB_index]->commConfig_r12->commSyncConfig_r12->list.array[0]->txParameters_r12) {
|
||||
*slss_id = UE_rrc_inst[ctxt_pP->module_id].sib18[eNB_index]->commConfig_r12->commSyncConfig_r12->list.array[0]->slssid_r12;
|
||||
syncOffsetIndicator = UE_rrc_inst[ctxt_pP->module_id].sib18[eNB_index]->commConfig_r12->commSyncConfig_r12->list.array[0]->syncOffsetIndicator_r12;
|
||||
|
||||
//if RRC_CONNECTED (Todo: and if networkControlledSyncTx is configured and set to On)
|
||||
if (UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].State == RRC_CONNECTED){
|
||||
//select subframe(s) indicated by syncOffsetIndicator
|
||||
subframe = syncOffsetIndicator;
|
||||
} else {
|
||||
//select subframe(s) indicated by syncOffsetIndicator within SC period
|
||||
}
|
||||
break;
|
||||
case 3: //if triggered by V2X communication and in coverage
|
||||
|
||||
break;
|
||||
case 4: //if triggered by V2X communication and out-of-coverage
|
||||
|
||||
break;
|
||||
case 5: //if triggered by V2X communication and UE has GNSS as the synchronization reference
|
||||
|
||||
default:
|
||||
//if UE has a selected SyncRefUE
|
||||
//TODO
|
||||
//else (no SyncRefUE Selected)
|
||||
//Todo if trigger by V2X
|
||||
//else randomly select an SLSSID from the set defined for out-of-coverage
|
||||
*slss_id = 170;//hardcoded
|
||||
//select the subframe according to syncOffsetIndicator1/2 from the preconfigured parameters
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -5249,75 +5249,103 @@ rrc_top_cleanup_eNB(
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
//TTN - for D2D
|
||||
void
|
||||
uint8_t
|
||||
rrc_eNB_process_SidelinkUEInformation(
|
||||
const protocol_ctxt_t* const ctxt_pP,
|
||||
rrc_eNB_ue_context_t* ue_context_pP,
|
||||
SidelinkUEInformation_r12_t * sidelinkUEInformation
|
||||
const protocol_ctxt_t* const ctxt_pP,
|
||||
rrc_eNB_ue_context_t* ue_context_pP,
|
||||
SidelinkUEInformation_r12_t * sidelinkUEInformation
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
SL_DestinationIdentity_r12_t sl_DestinationIdentityList[16];
|
||||
int n_destinations = 0;
|
||||
int ue_type = 0;
|
||||
int n_discoveryMessages = 0;
|
||||
//SL_DestinationIdentity_r12_t sl_DestinationIdentityList[16];
|
||||
SL_DestinationInfoList_r12_t *destinationInfoList;
|
||||
int n_destinations = 0;
|
||||
int ue_type = 0;
|
||||
int n_discoveryMessages = 0;
|
||||
|
||||
LOG_I(RRC,
|
||||
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, " "processing SidelinkUEInformation from UE (SRB1 Active)\n",
|
||||
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
|
||||
LOG_I(RRC,
|
||||
PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, " "processing SidelinkUEInformation from UE (SRB1 Active)\n",
|
||||
PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP));
|
||||
|
||||
//For SL Commmunication
|
||||
// express its interest to receive SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commRxInterestedFreq_r12){
|
||||
//For SL Communication
|
||||
// express its interest to receive SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commRxInterestedFreq_r12){
|
||||
|
||||
}
|
||||
// express its interest to transmit non-relay one-to-many SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commTxResourceReq_r12->carrierFreq_r12){
|
||||
n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commTxResourceReq_r12->destinationInfoList_r12.list.count;
|
||||
for (int i=0; i< n_destinations; i++ ){
|
||||
sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commTxResourceReq_r12->destinationInfoList_r12.list.array[i]);
|
||||
}
|
||||
}
|
||||
// express its interest to transmit non-relay one-to-one SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceReqUC_r13->carrierFreq_r12){
|
||||
n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceReqUC_r13->destinationInfoList_r12.list.count;
|
||||
for (int i=0; i< n_destinations; i++ ){
|
||||
sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceReqUC_r13->destinationInfoList_r12.list.array[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// express its interest to transmit relay related one-to-one SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.count>0){
|
||||
n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.count;
|
||||
ue_type = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->ue_Type_r13;
|
||||
for (int i=0; i< n_destinations; i++ ){
|
||||
sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.array[i]);
|
||||
}
|
||||
}
|
||||
// express its interest to transmit non-relay one-to-many SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commTxResourceReq_r12->carrierFreq_r12){
|
||||
n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commTxResourceReq_r12->destinationInfoList_r12.list.count;
|
||||
destinationInfoList = CALLOC(1, sizeof(SL_DestinationInfoList_r12_t));
|
||||
for (int i=0; i< n_destinations; i++ ){
|
||||
//sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commTxResourceReq_r12->destinationInfoList_r12.list.array[i]);
|
||||
ASN_SEQUENCE_ADD(&destinationInfoList->list, sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.commTxResourceReq_r12->destinationInfoList_r12.list.array[i]);
|
||||
}
|
||||
|
||||
//express its interest to transmit relay related one-to-many SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.count>0){
|
||||
n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.count;
|
||||
ue_type = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->ue_Type_r13;
|
||||
for (int i=0; i< n_destinations; i++ ){
|
||||
sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.array[i]);
|
||||
}
|
||||
}
|
||||
//For SL Discovery
|
||||
//express its interest to receive SL discovery announcements
|
||||
//generate RRC Reconfiguration
|
||||
rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(ctxt_pP, ue_context_pP, destinationInfoList, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//express its interest to transmit non-PS related discovery announcements
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.discTxResourceReq_r12 > 0){
|
||||
n_discoveryMessages = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.discTxResourceReq_r12;
|
||||
}
|
||||
//express its interest to transmit PS related discovery announcements
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->discTxResourceReqPS_r13->discTxResourceReq_r13 > 0){
|
||||
n_discoveryMessages = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->discTxResourceReqPS_r13->discTxResourceReq_r13;
|
||||
}
|
||||
// express its interest to transmit non-relay one-to-one SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceReqUC_r13->carrierFreq_r12){
|
||||
n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceReqUC_r13->destinationInfoList_r12.list.count;
|
||||
destinationInfoList = CALLOC(1, sizeof(SL_DestinationInfoList_r12_t));
|
||||
for (int i=0; i< n_destinations; i++ ){
|
||||
//sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceReqUC_r13->destinationInfoList_r12.list.array[i]);
|
||||
ASN_SEQUENCE_ADD(&destinationInfoList->list,sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceReqUC_r13->destinationInfoList_r12.list.array[i]);
|
||||
}
|
||||
//generate RRC Reconfiguration
|
||||
rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(ctxt_pP, ue_context_pP, destinationInfoList, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//generate RRC Reconfiguration
|
||||
rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(ctxt_pP, ue_context_pP, sl_DestinationIdentityList, n_destinations, n_discoveryMessages);
|
||||
// express its interest to transmit relay related one-to-one SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.count>0){
|
||||
n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.count;
|
||||
ue_type = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->ue_Type_r13;
|
||||
destinationInfoList = CALLOC(1, sizeof(SL_DestinationInfoList_r12_t));
|
||||
for (int i=0; i< n_destinations; i++ ){
|
||||
//sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.array[i]);
|
||||
ASN_SEQUENCE_ADD(&destinationInfoList->list, sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelayUC_r13->destinationInfoList_r12.list.array[i]);
|
||||
}
|
||||
//generate RRC Reconfiguration
|
||||
rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(ctxt_pP, ue_context_pP, destinationInfoList, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//express its interest to transmit relay related one-to-many SL communication
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.count>0){
|
||||
n_destinations = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.count;
|
||||
ue_type = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->ue_Type_r13;
|
||||
destinationInfoList = CALLOC(1, sizeof(SL_DestinationInfoList_r12_t));
|
||||
for (int i=0; i< n_destinations; i++ ){
|
||||
//sl_DestinationIdentityList[i] = *(sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.array[i]);
|
||||
ASN_SEQUENCE_ADD(&destinationInfoList->list,sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->commTxResourceInfoReqRelay_r13->commTxResourceReqRelay_r13->destinationInfoList_r12.list.array[i]);
|
||||
}
|
||||
//generate RRC Reconfiguration
|
||||
rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(ctxt_pP, ue_context_pP, destinationInfoList, 0);
|
||||
return 0;
|
||||
}
|
||||
//For SL Discovery
|
||||
//express its interest to receive SL discovery announcements
|
||||
|
||||
//express its interest to transmit non-PS related discovery announcements
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.discTxResourceReq_r12 > 0){
|
||||
n_discoveryMessages = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.discTxResourceReq_r12;
|
||||
//generate RRC Reconfiguration
|
||||
rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(ctxt_pP, ue_context_pP, NULL, n_discoveryMessages);
|
||||
return 0;
|
||||
}
|
||||
//express its interest to transmit PS related discovery announcements
|
||||
if (sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->discTxResourceReqPS_r13->discTxResourceReq_r13 > 0){
|
||||
n_discoveryMessages = sidelinkUEInformation->criticalExtensions.choice.c1.choice.sidelinkUEInformation_r12.nonCriticalExtension->discTxResourceReqPS_r13->discTxResourceReq_r13;
|
||||
//generate RRC Reconfiguration
|
||||
rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(ctxt_pP, ue_context_pP, NULL, n_discoveryMessages);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -5325,8 +5353,7 @@ int
|
||||
rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
|
||||
const protocol_ctxt_t* const ctxt_pP,
|
||||
rrc_eNB_ue_context_t* const ue_context_pP,
|
||||
SL_DestinationIdentity_r12_t *SL_DestinationIdentity,
|
||||
int n_destinations,
|
||||
SL_DestinationInfoList_r12_t *destinationInfoList,
|
||||
int n_discoveryMessages
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -5338,11 +5365,11 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
|
||||
|
||||
// allocate dedicated pools for UE -sl-CommConfig/sl-DiscConfig (sl-V2X-ConfigDedicated)
|
||||
//populate dedicated resources for SL communication (sl-CommConfig)
|
||||
if (n_destinations > 0) {
|
||||
if (destinationInfoList->list.count > 0) {
|
||||
//get dedicated resources from available pool and assign to the UE
|
||||
SL_CommConfig_r12_t sl_CommConfig[n_destinations];
|
||||
SL_CommConfig_r12_t sl_CommConfig[destinationInfoList->list.count];
|
||||
//get a RP from the available RPs
|
||||
//sl_CommConfig[0] = rrc_eNB_get_sidelink_commTXPool(ctxt_pP, ue_context_pP, SL_DestinationIdentity, n_destinations );
|
||||
sl_CommConfig[0] = rrc_eNB_get_sidelink_commTXPool(ctxt_pP, ue_context_pP, destinationInfoList);
|
||||
|
||||
size = do_RRCConnectionReconfiguration(ctxt_pP,
|
||||
buffer,
|
||||
@@ -5354,7 +5381,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
|
||||
NULL, NULL, NULL, NULL,NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)NULL,
|
||||
(SL_CommConfig_r12_t*)sl_CommConfig,
|
||||
(SL_CommConfig_r12_t*)&sl_CommConfig,
|
||||
(SL_DiscConfig_r12_t*)NULL
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
, (SCellToAddMod_r10_t*)NULL
|
||||
@@ -5378,7 +5405,7 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
|
||||
NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)NULL,
|
||||
(SL_CommConfig_r12_t*)NULL,
|
||||
(SL_DiscConfig_r12_t*)sl_DiscConfig
|
||||
(SL_DiscConfig_r12_t*)&sl_DiscConfig
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
, (SCellToAddMod_r10_t*)NULL
|
||||
#endif
|
||||
@@ -5394,4 +5421,8 @@ rrc_eNB_generate_RRCConnectionReconfiguration_Sidelink(
|
||||
return(0);
|
||||
}
|
||||
|
||||
SL_CommConfig_r12_t rrc_eNB_get_sidelink_commTXPool( const protocol_ctxt_t* const ctxt_pP, rrc_eNB_ue_context_t* const ue_context_pP, SL_DestinationInfoList_r12_t *destinationInfoList ){
|
||||
SL_CommConfig_r12_t sl_CommConfig;
|
||||
return sl_CommConfig;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user