25#ifndef _NETSIM_LTE_NR_H_
26#define _NETSIM_LTE_NR_H_
28#pragma region HEADER_FILES_AND_WARNING_REMOVAL
30#pragma warning ( disable : 4090 )
31#pragma warning ( disable : 4100 )
32#pragma warning ( disable : 4189 )
33#pragma warning ( disable : 4244 )
40#pragma region LOG_MACRO
54#pragma region TYPEDEFS
60#pragma region DEVICE_TYPE
61 static bool isFastProcessing =
true;
66 typedef enum enum_LTE_NR_DEVICE_TYPE
68 LTENR_DEVICETYPE_UE = 0,
69 LTENR_DEVICETYPE_GNB = 1,
70 LTENR_DEVICETYPE_ENB = 1,
71 LTENR_DEVICETYPE_NTN_GNB = 1,
72 LTENR_DEVICETYPE_EPC = 2,
73 LTENR_DEVICETYPE_AMF = 3,
74 LTENR_DEVICETYPE_SMF = 4,
75 LTENR_DEVICETYPE_UPF = 5,
76 LTENR_DEVICETYPE_NTN_SATELLITE = 6,
77 LTENR_DEVICETYPE_LAST,
79 static const char* strLTENR_DEVICETYPE[] =
80 {
"UE",
"gNB",
"EPC",
"AMF",
"SMF",
"UPF",
"SATELLITE",
"Unknown" };
83#pragma region LTENR_LogicalChannel
88 typedef enum enum_LTENR_LogicalChannel
90 LTENR_LOGICALCHANNEL_NONE,
91 LTENR_LOGICALCHANNEL_PCCH,
92 LTENR_LOGICALCHANNEL_BCCH,
93 LTENR_LOGICALCHANNEL_CCCH,
94 LTENR_LOGICALCHANNEL_DCCH,
95 LTENR_LOGICALCHANNEL_DTCH,
96 LTENR_LOGICALCHANNEL_LAST,
97 }LTENR_LOGICALCHANNEL;
98 static const char* strLTENR_LOGICALCHANNEL[] =
99 {
"NONE",
"PCCH",
"BCCH",
"CCCH",
"DCCH",
"DTCH",
"Unknown" };
102#pragma region LTENR_SRB
107 typedef enum enum_LTENR_SRB
115 static const char* strLTENR_SRB[] =
116 {
"SRB0",
"SRB1",
"SRB2",
"N/A",
"Unknown" };
119#pragma region LTENR_TransportChannel
124 typedef enum enum_LTENR_TransportChannel
126 LTENR_TRANSPORTCHANNEL_NONE,
127 LTENR_TRANSPORTCHANNEL_BCH,
128 LTENR_TRANSPORTCHANNEL_PCH,
129 LTENR_TRANSPORTCHANNEL_DL_SCH,
130 LTENR_TRANSPORTCHANNEL_UL_SCH,
131 LTENR_TRANSPORTCHANNEL_RACH,
132 LTENR_TRANSPORTCHANNEL_LAST,
133 }LTENR_TRANSPORTCHANNEL;
134 static const char* strLTENR_TRANSPORTCHANNEL[] =
135 {
"NONE",
"BCH",
"PCH",
"DL-SCH",
"UL-SCH",
"RACH",
"Unknown" };
138#pragma region LTENR_PhysicalChannel
143 typedef enum enum_LTENR_PhysicalChannel
145 LTENR_PHYSICALCHANNEL_NONE,
146 LTENR_PHYSICALCHANNEL_PBCH,
147 LTENR_PHYSICALCHANNEL_PDCCH,
148 LTENR_PHYSICALCHANNEL_PDSCH,
149 LTENR_PHYSICALCHANNEL_PRACH,
150 LTENR_PHYSICALCHANNEL_PUSCH,
151 LTENR_PHYSICALCHANNEL_PUCCH,
152 LTENR_PHYSICALCHANNEL_LAST,
153 }LTENR_PHYSICALCHANNEL;
154 static const char* strLTENR_PHYSICALCHANNEL[] =
155 {
"NONE",
"PBCH",
"PDCCH",
"PDSCH",
"PRACH",
"PUSCH",
"PUCCH",
"Unknown" };
158#pragma region LTENR_RLCMode
163 typedef enum enum_LTENR_RLCMode
169 static const char* strLTENR_RLCMODE[] =
170 {
"Transparent Mode",
"Unacknowledged Mode",
"Acknowledged Mode" };
173#pragma region LTENR_INTERFACE_TYPE
178 typedef enum enum_LTENR_INTERFACE_TYPE {
188 nGC_INTERFACE_LTE_S1,
190 }LTENR_INTERFACE_TYPE;
191 static const char* strLTENR_DEVICEINTERFACETYPE[] =
192 {
"Invalid",
"LTE",
"5G_RAN",
"5G_N1_N2",
"5G_N3",
"5G_N4",
"5G_N11",
"5G_N6",
"5G_XN",
"LTE_S1",
"Unknown" };
195#pragma region LTE_NR_SUBLAYER
200 typedef enum enum_LTE_NR_SUBLAYER
203 LTENR_SUBLAYER_GTP_U,
204 LTENR_SUBLAYER_NAS_MM,
205 LTENR_SUBLAYER_NAS_SM,
213 LTENR_SUBLAYER_MACSCHEDULER,
220#pragma region FUN_DEF_OUT_AND_IN
222 void LTENR_EPC_NetworkOut();
225 void fn_NetSim_LTENR_AMF_PACKET_HANDLER();
226 void fn_NetSim_LTENR_SMF_UPF_PACKET_HANDLER();
227 void fn_NetSim_LTENR_GNB_CORE_PACKET_HANDLER();
230 void fn_NetSim_NAS_IN();
231 void fn_NetSim_LTENR_Handover_RECV();
234 void fn_NetSim_LTENR_PDCP_TransmitPDCPSDU();
235 void fn_NetSim_LTENR_PDCP_ReceivePDCPSDU();
238 void fn_NetSim_LTENR_RRC_MacOut();
239 void fn_NetSim_LTENR_RRC_MacIn();
242 void fn_NetSim_LTENR_RLC_HandlePDUFromUpperLayer();
243 void fn_NetSim_LTENR_RLC_HandleMACIN();
246 void fn_NetSim_LTENR_SDAP_HandleMacOut();
247 void fn_NetSim_LTENR_SDAP_HandleMacIn();
254 void fn_NetSim_LTENR_HARQ_Init();
255 void HARQAssociationHandler(NETSIM_ID gnbId, NETSIM_ID gnbIf, NETSIM_ID ueId, NETSIM_ID ueIf,
bool isAssociated);
256 void fn_NetSim_LTENR_HARQ_Finish();
257 void fn_NetSim_LTENR_HARQ_StoreDLPacket();
258 void fn_NetSim_LTENR_HARQ_StoreULPacket();
259 void fn_NetSim_LTENR_HARQ_HandleSlotStart(NETSIM_ID gnbId, NETSIM_ID gnbIf,
int caId);
260 void fn_NetSim_LTENR_HARQ_TransmitDownLinkCBG(NETSIM_ID gnbId, NETSIM_ID gnbIf, ptrLTENR_ASSOCIATEDUEPHYINFO info,
int caId);
261 void fn_NetSim_LTENR_HARQ_TransmitUpLinkCBG(NETSIM_ID gnbId, NETSIM_ID gnbIf, ptrLTENR_ASSOCIATEDUEPHYINFO info,
int caId);
262 void fn_NetSim_LTENR_HARQ_AllocateCBG(NETSIM_ID gnbId, NETSIM_ID gnbIf,
int caId);
263 void fn_NetSim_LTENR_HARQ_Transmit(NETSIM_ID gNBId, NETSIM_ID gNBIf,
int caId);
264 bool fn_NetSim_LTENR_HARQ_GetNDIFlag(ptrLTENR_ASSOCIATEDUEPHYINFO assocInfo,
bool isUplink,
int caId);
265 UINT fn_NetSim_LTENR_HARQ_GetPRBReqdForRetx(ptrLTENR_ASSOCIATEDUEPHYINFO assocInfo,
bool isUplink,
int caId);
268#pragma region OUT_AND_IN_MACROS
279#pragma region LTENR_SublayerInfo
282 LTENR_SUBLAYER subLayer;
286 }LTENR_SUBLAYERINFO, *ptrLTENR_SUBLAYERINFO;
287 static LTENR_SUBLAYERINFO subLayerInfo[LTENR_SUBLAYER_LAST] =
289 {LTENR_SUBLAYER_NGAP,
"NGAP",NULL,NULL},
290 {LTENR_SUBLAYER_GTP_U,
"GTP-U",NULL,NULL},
291 {LTENR_SUBLAYER_NAS_MM,
"NAS-MM",NULL,NULL},
292 {LTENR_SUBLAYER_NAS_SM,
"NAS-SM",NULL,NULL},
293 {LTENR_SUBLAYER_PFCP,
"PFCP",NULL,NULL},
294 {LTENR_SUBLAYER_EPC,
"EPC",LTENR_EPC_NetworkOut,NULL},
295 {LTENR_SUBLAYER_NAS,
"NAS",NULL,fn_NetSim_NAS_IN},
296 {LTENR_SUBLAYER_SDAP,
"SDAP",fn_NetSim_LTENR_SDAP_HandleMacOut,fn_NetSim_LTENR_SDAP_HandleMacIn},
297 {LTENR_SUBLAYER_RRC,
"RRC",fn_NetSim_LTENR_RRC_MacOut, fn_NetSim_LTENR_RRC_MacIn},
298 {LTENR_SUBLAYER_PDCP,
"PDCP",fn_NetSim_LTENR_PDCP_TransmitPDCPSDU,fn_NetSim_LTENR_PDCP_ReceivePDCPSDU},
299 {LTENR_SUBLAYER_RLC,
"RLC",fn_NetSim_LTENR_RLC_HandlePDUFromUpperLayer,fn_NetSim_LTENR_RLC_HandleMACIN},
300 {LTENR_SUBLAYER_MACSCHEDULER,
"MACSCHEDULER",NULL,NULL},
301 {LTENR_SUBLAYER_MAC,
"MAC",macOut,macIn},
302 {LTENR_SUBLAYER_PHY,
"PHY",NULL,NULL},
304 void fnCallSublayer(LTENR_SUBLAYER layer,
int c);
305#define LTENR_CallEPCOut() (fnCallSublayer(LTENR_SUBLAYER_EPC,OUT))
306#define LTENR_CallNASOut() (fnCallSublayer(LTENR_SUBLAYER_NAS,OUT))
307#define LTENR_CallNASIn() (fnCallSublayer(LTENR_SUBLAYER_NAS,IN))
308#define LTENR_CallSDAPOut() (fnCallSublayer(LTENR_SUBLAYER_SDAP,OUT))
309#define LTENR_CallSDAPIn() (fnCallSublayer(LTENR_SUBLAYER_SDAP,IN))
310#define LTENR_CallRRCOut() (fnCallSublayer(LTENR_SUBLAYER_RRC,OUT))
311#define LTENR_CallRRCIn() (fnCallSublayer(LTENR_SUBLAYER_RRC,IN))
312#define LTENR_CallPDCPOut() (fnCallSublayer(LTENR_SUBLAYER_PDCP,OUT))
313#define LTENR_CallPDCPIN() (fnCallSublayer(LTENR_SUBLAYER_PDCP,IN))
314#define LTENR_CallRLCOut() (fnCallSublayer(LTENR_SUBLAYER_RLC,OUT))
315#define LTENR_CallRLCIn() (fnCallSublayer(LTENR_SUBLAYER_RLC,IN))
316#define LTENR_CallMACSCHEDULEROut() (fnCallSublayer(LTENR_SUBLAYER_MACSCHEDULER,OUT))
317#define LTENR_CallMACSCHEDULERIn() (fnCallSublayer(LTENR_SUBLAYER_MACSCHEDULER,IN))
318#define LTENR_CallMACOut() (fnCallSublayer(LTENR_SUBLAYER_MAC,OUT))
319#define LTENR_CallMACIn() (fnCallSublayer(LTENR_SUBLAYER_MAC,IN))
322#pragma region ASSOCIATION_STRUCT_AND_APIs
328 }LTENR_ASSOCIATIONINFO, *ptrLTENR_ASSOCIATIONINFO;
329 void LTENR_ASSOCIATEINFO_ADD(NETSIM_ID d,
333 void LTENR_ASSOCIATEINFO_REMOVE(NETSIM_ID d,
337 ptrLTENR_ASSOCIATIONINFO LTENR_ASSOCIATEINFO_FIND(NETSIM_ID d,
341#define LTENR_ISASSOCIATED(d,in,rd,rin) (LTENR_ASSOCIATEINFO_FIND(d,in,rd,rin)!=NULL)
342 NETSIM_ID LTENR_FIND_ASSOCIATEINTERFACE(NETSIM_ID d, NETSIM_ID i, NETSIM_ID rd);
343#define LTENR_FIND_ASSOCIATEDGNB(ueId,ueIn) (isUE(ueId,ueIn)?LTENR_ASSOCIATEINFO_FIND(ueId,ueIn,0,0)->d:0)
344 void fn_NetSim_LTENR_InitAssociation();
345 void fn_NetSim_LTENR_RegisterCallBackForAssociation(
void(*fnCallBack)(NETSIM_ID gnbId,
352#pragma region NGAP_PROTODATA
356 NETSIM_IPAddress destIPaddr;
358 LTENR_INTERFACE_TYPE IFType;
360 }LTE_NR_NGAP_DATA, *ptrLTE_NR_NGAP_DATA;
361#define LTENR_NGAP_DATA_ALLOC() (list_alloc(sizeof(LTE_NR_NGAP_DATA),offsetof(LTE_NR_NGAP_DATA,ele)))
362#define LTENR_NGAP_DATA_NEXT(info) (LIST_NEXT(info))
363#define LTENR_NGAP_DATA_ADD(info,e) (LIST_ADD_LAST(&(info),e))
364#define LTENR_NGAP_DATA_REMOVE(info,e) (LIST_REMOVE(&(info),e))
367#pragma region PFCP_PROTODATA
371 NETSIM_IPAddress destIPaddr;
373 LTENR_INTERFACE_TYPE IFType;
375 }LTE_NR_PFCP_DATA, * ptrLTE_NR_PFCP_DATA;
376#define LTENR_PFCP_DATA_ALLOC() (list_alloc(sizeof(LTE_NR_PFCP_DATA),offsetof(LTE_NR_PFCP_DATA,ele)))
377#define LTENR_PFCP_DATA_NEXT(info) (LIST_NEXT(info))
378#define LTENR_PFCP_DATA_ADD(info,e) (LIST_ADD_LAST(&(info),e))
379#define LTENR_PFCP_DATA_REMOVE(info,e) (LIST_REMOVE(&(info),e))
382#pragma region GTPU_PROTODATA
386 NETSIM_IPAddress destIPaddr;
388 LTENR_INTERFACE_TYPE IFType;
390 }LTE_NR_GTPU_DATA, * ptrLTE_NR_GTPU_DATA;
391#define LTENR_GTPU_DATA_ALLOC() (list_alloc(sizeof(LTE_NR_GTPU_DATA),offsetof(LTE_NR_GTPU_DATA,ele)))
392#define LTENR_GTPU_DATA_NEXT(info) (LIST_NEXT(info))
393#define LTENR_GTPU_DATA_ADD(info,e) (LIST_ADD_LAST(&(info),e))
394#define LTENR_GTPU_DATA_REMOVE(info,e) (LIST_REMOVE(&(info),e))
397#pragma region GTPC_PROTODATA
401 NETSIM_IPAddress destIPaddr;
403 LTENR_INTERFACE_TYPE IFType;
405 }LTE_NR_N11STACK_DATA, * ptrLTE_NR_N11STACK_DATA;
406#define LTENR_N11STACK_DATA_ALLOC() (list_alloc(sizeof(LTE_NR_N11STACK_DATA),offsetof(LTE_NR_N11STACK_DATA,ele)))
407#define LTENR_N11STACK_DATA_NEXT(info) (LIST_NEXT(info))
408#define LTENR_N11STACK_DATA_ADD(info,e) (LIST_ADD_LAST(&(info),e))
409#define LTENR_N11STACK_DATA_REMOVE(info,e) (LIST_REMOVE(&(info),e))
413 typedef enum enum_LTENR_CELL_TYPES
417 NON_MMWAVE_CELL_TYPE,
420 typedef enum enum_LTENR_NSA_MODES {
431 static const char* strLTENR_NSA_MODES[] =
432 {
"OPTION_3",
"OPTION_3A",
"OPTION_3X",
"OPTION_4",
"OPTION_4A",
"OPTION_7",
433 "OPTION_7A",
"OPTION_7X",
"Unknown" };
436#pragma region BLER_MCS_SELECTION
442 static const char* strLTENR_BLER_MODEL[] =
443 {
"ZERO_BLER",
"BLER_ENABLE" };
447 LTENR_IDEAL_SHANNON_THEOREM_BASED_RATE,
448 LTENR_SHANNON_RATE_WITH_ATTENUATION_FACTOR,
449 }LTENR_MCS_SELECTION_MODEL;
450 static const char* strLTENR_MCS_SELECTION_MODEL[] =
451 {
"IDEAL_SHANNON_THEOREM_BASED_RATE",
"SHANNON_RATE_WITH_ATTENUATION_FACTOR", };
454#pragma region PROTODATA_AND_APIs
457 LTENR_DEVICETYPE deviceType;
459 NETSIM_ID interfaceId;
460 LTENR_INTERFACE_TYPE IFType;
461 MAC_LAYER_PROTOCOL macProtocol;
464 NETSIM_ID associateCount;
465 NETSIM_ID NGAP_COUNT;
467 ptrLTE_NR_NGAP_DATA NGAPDATA;
469 NETSIM_ID PFCP_COUNT;
471 ptrLTE_NR_PFCP_DATA PFCPDATA;
473 NETSIM_ID GTPU_COUNT;
475 ptrLTE_NR_GTPU_DATA GTPUDATA;
477 NETSIM_ID N11STACK_COUNT;
479 ptrLTE_NR_N11STACK_DATA N11STACKDATA;
481 char* connectedAMFName;
482 char* connectedSMFName;
483 char* connectedUPFName;
487 double ueMeasurementReportPeriod;
490 double InteruptionTime_ms;
493 bool isHdrCompression;
494 bool isoutOfOrderDelivery;
495 double t_reorderingTimer;
498 char* maxRetxThreshold;
502 char* t_pollRetransmit;
503 char* t_statusProhibit;
506 char* schedulingType;
507 double EWMA_Learning_Rate;
511 UINT HARQ_ProcessCount;
513 UINT HARQ_RetryLimit;
516 double HandoverMargin;
523 double GBRBiasLearningRate;
531 LTENR_BLER_MODEL blerModel;
534 LTENR_MCS_SELECTION_MODEL mcsSelctionModel;
537 ptrLTENR_ASSOCIATIONINFO associationInfo;
538 void* LTENR_LAYER_DATA[LTENR_DEVICETYPE_LAST][LTENR_SUBLAYER_LAST];
541 double CellIndividualOffset;
546 LTENR_CELL_TYPES MasterCellType;
547 LTENR_CELL_TYPES SecCellType;
548 LTENR_NSA_MODES NSA_MODE;
551 double DLrateGuarantee;
552 double ULrateGuarantee;
553 }LTENR_PROTODATA,*ptrLTENR_PROTODATA;
554 ptrLTENR_PROTODATA LTENR_PROTOCOLDATA_ALLOC(NETSIM_ID d,
556 void LTENR_PROTOCOLDATA_FREE(NETSIM_ID d,
558 void* LTENR_SUBLAYER_DATA_GET(NETSIM_ID d, NETSIM_ID in,
559 LTENR_DEVICETYPE devType,
560 LTENR_SUBLAYER subLayer);
561 void LTENR_SUBLAYER_DATA_SET(NETSIM_ID d, NETSIM_ID in,
562 LTENR_DEVICETYPE devType,
563 LTENR_SUBLAYER subLayer,
565 bool LTENR_SUBLAYER_DATA_IsInitialized(NETSIM_ID d, NETSIM_ID in,
566 LTENR_DEVICETYPE devType,
567 LTENR_SUBLAYER subLayer);
568 ptrLTENR_PROTODATA LTENR_PROTODATA_GET(NETSIM_ID d, NETSIM_ID in);
569#define LTENR_UEPHY_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_PHY))
570#define LTENR_UEMAC_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_MAC))
571#define LTENR_UERLC_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_RLC))
572#define LTENR_UEMACSCHEDULER_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_MACSCHEDULER))
573#define LTENR_UEPDCP_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_PDCP))
574#define LTENR_UERRC_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_RRC))
575#define LTENR_UESDAP_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_SDAP))
576#define LTENR_GNBPHY_GET(d,i) ((ptrLTENR_GNBPHY)(LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_PHY)))
577#define LTENR_GNBMAC_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_MAC))
578#define LTENR_GNBRLC_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_RLC))
579#define LTENR_GNBMACSCHEDULER_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_MACSCHEDULER))
580#define LTENR_GNBPDCP_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_PDCP))
581#define LTENR_GNBRRC_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_RRC))
582#define LTENR_GNBSDAP_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_SDAP))
583#define LTENR_EPC_GET(d,i) (LTENR_SUBLAYER_DATA_GET(d,i,LTENR_DEVICETYPE_EPC,LTENR_SUBLAYER_EPC))
586#define LTENR_AMF_NGAP_GET(d) (LTENR_SUBLAYER_DATA_GET(d,0,LTENR_DEVICETYPE_AMF,LTENR_SUBLAYER_NGAP))
587#define LTENR_AMF_NGAP_SET(d,data) (LTENR_SUBLAYER_DATA_SET(d,0,LTENR_DEVICETYPE_AMF,LTENR_SUBLAYER_NGAP,data))
588#define LTENR_AMF_NAS_MM_GET(d) (LTENR_SUBLAYER_DATA_GET(d,0,LTENR_DEVICETYPE_AMF,LTENR_SUBLAYER_NAS_MM))
589#define LTENR_AMF_NAS_MM_SET(d,data) (LTENR_SUBLAYER_DATA_SET(d,0,LTENR_DEVICETYPE_AMF,LTENR_SUBLAYER_NAS_MM,data))
592#define LTENR_SMF_GTP_U_GET(d) (LTENR_SUBLAYER_DATA_GET(d,0,LTENR_DEVICETYPE_SMF,LTENR_SUBLAYER_GTP_U))
593#define LTENR_SMF_GTP_U_SET(d,data) (LTENR_SUBLAYER_DATA_SET(d,0,LTENR_DEVICETYPE_SMF,LTENR_SUBLAYER_GTP_U,data))
594#define LTENR_SMF_NAS_SM_GET(d) (LTENR_SUBLAYER_DATA_GET(d,0,LTENR_DEVICETYPE_SMF,LTENR_SUBLAYER_NAS_SM))
595#define LTENR_SMF_NAS_SM_SET(d,data) (LTENR_SUBLAYER_DATA_SET(d,0,LTENR_DEVICETYPE_SMF,LTENR_SUBLAYER_NAS_SM,data))
596#define LTENR_SMF_PFCP_GET(d) (LTENR_SUBLAYER_DATA_GET(d,0,LTENR_DEVICETYPE_SMF,LTENR_SUBLAYER_PFCP))
597#define LTENR_SMF_PFCP_SET(d,data) (LTENR_SUBLAYER_DATA_SET(d,0,LTENR_DEVICETYPE_SMF,LTENR_SUBLAYER_PFCP,data))
600#define LTENR_UPF_GTP_U_GET(d) (LTENR_SUBLAYER_DATA_GET(d,0,LTENR_DEVICETYPE_UPF,LTENR_SUBLAYER_GTP_U))
601#define LTENR_UPF_GTP_U_SET(d,data) (LTENR_SUBLAYER_DATA_SET(d,0,LTENR_DEVICETYPE_UPF,LTENR_SUBLAYER_GTP_U,data))
602#define LTENR_UPF_PFCP_GET(d) (LTENR_SUBLAYER_DATA_GET(d,0,LTENR_DEVICETYPE_UPF,LTENR_SUBLAYER_PFCP))
603#define LTENR_UPF_PFCP_SET(d,data) (LTENR_SUBLAYER_DATA_SET(d,0,LTENR_DEVICETYPE_UPF,LTENR_SUBLAYER_PFCP,data))
606#define LTENR_GNB_NGAP_GET(d) (LTENR_SUBLAYER_DATA_GET(d,0,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_NGAP))
607#define LTENR_GNB_NGAP_SET(d,data) (LTENR_SUBLAYER_DATA_SET(d,0,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_NGAP,data))
608#define LTENR_GNB_GTP_U_GET(d) (LTENR_SUBLAYER_DATA_GET(d,0,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_GTP_U))
609#define LTENR_GNB_GTP_U_SET(d,data) (LTENR_SUBLAYER_DATA_SET(d,0,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_GTP_U,data))
611#define LTENR_UEPHY_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_PHY,data))
612#define LTENR_UEMAC_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_MAC,data))
613#define LTENR_UERLC_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_RLC,data))
614#define LTENR_UEMACSCHEDULER_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_MACSCHEDULER,data))
615#define LTENR_UEPDCP_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_PDCP,data))
616#define LTENR_UERRC_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_RRC,data))
617#define LTENR_UESDAP_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_SDAP,data))
618#define LTENR_GNBPHY_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_PHY,data))
619#define LTENR_GNBMAC_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_MAC,data))
620#define LTENR_GNBRLC_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_RLC,data))
621#define LTENR_GNBMACSCHEDULER_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_MACSCHEDULER,data))
622#define LTENR_GNBPDCP_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_PDCP,data))
623#define LTENR_GNBRRC_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_RRC,data))
624#define LTENR_GNBSDAP_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_SDAP,data))
625#define LTENR_EPC_SET(d,i,data) (LTENR_SUBLAYER_DATA_SET(d,i,LTENR_DEVICETYPE_EPC,LTENR_SUBLAYER_EPC,data))
626#define LTENR_DEVICETYPE_GET(d,i) (LTENR_PROTODATA_GET(d,i)->deviceType)
627#define LTENR_DEVICETYPE_SET(d,i,type) (LTENR_PROTODATA_GET(d,i)->deviceType=type)
628#define LTENR_GNBPDCP_ISINIT(d,i) (LTENR_SUBLAYER_DATA_IsInitialized(d,i,LTENR_DEVICETYPE_GNB,LTENR_SUBLAYER_PDCP))
629#define LTENR_UEPDCP_ISINIT(d,i) (LTENR_SUBLAYER_DATA_IsInitialized(d,i,LTENR_DEVICETYPE_UE,LTENR_SUBLAYER_PDCP))
630#define isUE(d,i) (LTENR_DEVICETYPE_GET(d,i) == LTENR_DEVICETYPE_UE)
631#define isGNB(d,i) (LTENR_DEVICETYPE_GET(d,i) == LTENR_DEVICETYPE_GNB)
632#define isEPC(d,i) (LTENR_DEVICETYPE_GET(d,i) == LTENR_DEVICETYPE_EPC)
633#define isAMF(d) (LTENR_DEVICETYPE_GET(d,0) == LTENR_DEVICETYPE_AMF)
634#define isSMF(d) (LTENR_DEVICETYPE_GET(d,0) == LTENR_DEVICETYPE_SMF)
635#define isUPF(d) (LTENR_DEVICETYPE_GET(d,0) == LTENR_DEVICETYPE_UPF)
636#define isNONRANGNB(d) (LTENR_DEVICETYPE_GET(d,0) == LTENR_DEVICETYPE_GNB)
637#define setUE(d,i) (LTENR_DEVICETYPE_SET(d,i,LTENR_DEVICETYPE_UE))
638#define setGNB(d,i) (LTENR_DEVICETYPE_SET(d,i,LTENR_DEVICETYPE_GNB))
639#define setEPC(d,i) (LTENR_DEVICETYPE_SET(d,i,LTENR_DEVICETYPE_EPC))
640#define setAMF(d) (LTENR_DEVICETYPE_SET(d,0,LTENR_DEVICETYPE_AMF))
641#define setSMF(d) (LTENR_DEVICETYPE_SET(d,0,LTENR_DEVICETYPE_SMF))
642#define setUPF(d) (LTENR_DEVICETYPE_SET(d,0,LTENR_DEVICETYPE_UPF))
643#define LTENR_PDCP_GET(d,i) (isUE(d,i)?LTENR_UEPDCP_GET(d,i):(isGNB(d,i)?LTENR_GNBPDCP_GET(d,i):NULL))
644#define LTENR_RLC_GET(d,i) (isUE(d,i)?LTENR_UERLC_GET(d,i):(isGNB(d,i)?LTENR_GNBRLC_GET(d,i):NULL))
645#define LTENR_SDAP_GET(d,i) (isUE(d,i)?LTENR_UESDAP_GET(d,i):(isGNB(d,i)?LTENR_GNBSDAP_GET(d,i):NULL))
648#pragma region INTERFERENCE_MODEL
650 typedef enum enum_LTENR_CELL_INTERFERENCE_TYPE {
652 LTENR_GRADED_DISTANCE_BASED_WYNER_MODEL_INTERFERENCE,
653 LTENR_EXACT_GEOMETRIC_MODEL_INTERFERENCE,
654 LTENR_INTERFERENCE_OVER_THERMAL_INTERFERENCE
655 }LTENR_CELL_INTERFERENCEACE_TYPE;
656 static const char* strLTENR_CELL_INTERFERENCEACE_TYPE[] =
657 {
"NO_INTERFERENCE",
"GRADED_DISTANCE_BASED_WYNER_MODEL",
"EXACT_GEOMETRIC_MODEL",
"INTERFERENCE_OVER_THERMAL" };
660 void free_interference();
663#pragma region FUN_DEF_FOR_CORE_INIT
665 void fn_NetSim_LTENR_AMF_INIT(NETSIM_ID AMFID);
666 void fn_NetSim_LTENR_SMF_INIT(NETSIM_ID SMFID);
667 void fn_NetSim_LTENR_UPF_INIT(NETSIM_ID UPFID);
668 void fn_NetSim_LTENR_NON_RAN_GNB_INIT(NETSIM_ID GNBID);
671#pragma region HELPER_APIs
673 bool isLTE_NRInterface(NETSIM_ID d, NETSIM_ID i);
674 bool isLTENR_RANInterface(NETSIM_ID d, NETSIM_ID in);
675 NETSIM_ID fn_NetSim_Get_LTENR_INTERFACE_ID_FROM_DEVICE_ID(NETSIM_ID r);
676 bool fn_NetSim_LTENR_IS_S1_INTERFACE_EXISTS(NETSIM_ID d);
677 NETSIM_ID fn_NetSim_LTENR_CORE_INTERFACE(NETSIM_ID d, LTENR_INTERFACE_TYPE type);
678 bool fn_NetSim_isDeviceLTENR(NETSIM_ID r, NETSIM_ID rin);
679 NETSIM_ID LTENR_HELPER_Get_connected_interface(NETSIM_ID d, NETSIM_ID r);
680 NETSIM_ID fn_NetSim_LTENR_INTERFACE_ID_FROM_CONNECTED_DEVICE(NETSIM_ID d, NETSIM_ID in, NETSIM_ID r);
681 NETSIM_ID fn_NetSim_FIND_LTENR_INTERFACE(NETSIM_ID r);
682 NETSIM_ID fn_NetSim_FIND_LTE_INTERFACE(NETSIM_ID r);
683 NETSIM_ID fn_NetSim_LTENR_SEC_INTEFACE_FOR_UE(NETSIM_ID d, NETSIM_ID in);
684 NETSIM_ID fn_NetSim_LTENR_MASTER_INTEFACE_FOR_UE(NETSIM_ID d, NETSIM_ID in);
685 bool fn_NetSim_LTENR_NSA_IS_CORE_SPLIT_EXISTS(NETSIM_ID d, NETSIM_ID in);
686 bool fn_NetSim_LTENR_NSA_IS_OPTION_X_EXISTS(NETSIM_ID d, NETSIM_ID in);
687 bool LTENR_GET_PACKET_FROM_ACCESS_BUFFER();
688 void fn_NetSim_LTENR_SNED_TO_XN_INTERFACE(NetSim_PACKET* packet, NETSIM_ID d, NETSIM_ID in,
689 NETSIM_ID r, NETSIM_ID rin,
char* gateway,
char* nexthop,
bool flag);
692#pragma region EPC_APIs
694 void LTENR_EPC_ASSOCIATION(NETSIM_ID epcId, NETSIM_ID epcIf,
695 NETSIM_ID gnbId, NETSIM_ID gnbIf,
696 NETSIM_ID ueId, NETSIM_ID ueIf);
697 void LTENR_EPC_ALLOC(NETSIM_ID d, NETSIM_ID in);
698 void LTENR_GNB_SETEPC(NETSIM_ID d, NETSIM_ID in,
699 NETSIM_ID* e, NETSIM_ID* ein);
702#pragma region FUN_DEF_FOR_INTI_METRICS_APIs
704 void LTENR_fn_InterferenceInit();
706 void fn_NetSim_LTENR_CORE_Init();
708 void fn_NetSim_LTENR_NAS_Init();
711 void fn_NetSim_LTENR_SDAP_Init();
712 void fn_NetSim_LTENR_UESDAP_Init(NETSIM_ID ueId, NETSIM_ID ueIf);
713 void fn_NetSim_LTENR_GNBSDAP_Init(NETSIM_ID gnbId, NETSIM_ID gnbIf);
714 int fn_NetSim_LTENR_SDAP_Metrics_F(PMETRICSWRITER metricsWriter);
715 int fn_NetSim_LTENR_Cell_Metrics_F(PMETRICSWRITER metricsWriter);
718 void fn_NetSim_LTENR_RRC_Init();
719 void fn_NetSim_LTENR_UERRC_Init(NETSIM_ID ueId,
720 NETSIM_ID ueInterface);
721 void fn_NetSim_LTENR_GNBRRC_Init(NETSIM_ID gnbId,
722 NETSIM_ID gnbInterface);
723 bool fn_NetSim_LTENR_RRC_isConnected(NETSIM_ID d, NETSIM_ID in,
724 NETSIM_ID r, NETSIM_ID rin);
725 bool fn_NetSim_LTENR_RRC_isActive(NETSIM_ID d, NETSIM_ID in,
726 NETSIM_ID r, NETSIM_ID rin);
729 void fn_NetSim_LTENR_Conditional_HO_TTT_Matrix_Add(NETSIM_ID gnbId, NETSIM_ID gnbIf,
730 NETSIM_ID ueId, NETSIM_ID ueIf);
731 void fn_NetSim_LTENR_Conditional_HO_TTT_Matrix_Remove(NETSIM_ID gnbId, NETSIM_ID gnbIf,
732 NETSIM_ID ueId, NETSIM_ID ueIf);
733 double fn_NetSim_LTENR_Conditional_HO_TTT_Matrix_Find(
void* list,
734 NETSIM_ID ueID, NETSIM_ID targetID);
735 void fn_NetSim_LTENR_Conditional_HO_TTT_Matrix_Set(
void* list,
736 NETSIM_ID ueID, NETSIM_ID targetID,
double value);
737 void fn_NetSim_LTENR_Conditional_HO_TTT_Matrix_Free(NETSIM_ID gnbId, NETSIM_ID gnbIf);
740 void fn_NetSim_LTENR_PDCP_Init();
741 void fn_NetSim_LTENR_UEPDCP_Init(NETSIM_ID ueId,
743 void fn_NetSim_LTENR_GNBPDCP_Init(NETSIM_ID gnbId,
747 void fn_NetSim_LTENR_RLC_Init();
748 void fn_NetSim_LTENR_UERLC_Init(NETSIM_ID ueId, NETSIM_ID ueIf);
749 void fn_NetSim_LTENR_GNBRLC_Init(NETSIM_ID gnbId, NETSIM_ID gnbIf);
750 UINT fn_NetSim_LTENR_RLC_BufferStatusNotificaton(NETSIM_ID d, NETSIM_ID in,
751 NETSIM_ID r, NETSIM_ID rin,
752 LTENR_LOGICALCHANNEL logicalChannel);
753 void fn_NetSim_LTENR_RLC_TransmissionStatusNotification(NETSIM_ID d, NETSIM_ID in,
754 NETSIM_ID r, NETSIM_ID rin,
755 UINT size, LTENR_LOGICALCHANNEL logicalChannel);
759 int LTENR_Mutiplexer_LDPC_SelectBaseGraph(
double TBS,
double R);
760 void LTENR_Multiplexer_ComputeCodeBlockSize(
int LDPCG, UINT TBS, UINT* C, UINT* cbs, UINT* cbs_);
763 void fn_NetSim_LTENR_MAC_Init();
764 void fn_NetSim_LTENR_GNBMAC_Init(NETSIM_ID gnbId, NETSIM_ID gnbIf);
765 void fn_NetSim_LTENR_UEMAC_Init(NETSIM_ID ueId, NETSIM_ID ueIf);
766 void LTENR_NotifyMACForStartingSlot();
769 void fn_NetSim_LTENR_GNBPHY_Init(NETSIM_ID gnbId, NETSIM_ID gnbIf);
770 void fn_NetSim_LTENR_UEPHY_Init(NETSIM_ID ueId, NETSIM_ID ueIf);
771 void fn_NetSim_LTENR_PHY_Init();
772 double LTENR_PHY_GetSlotEndTime(NETSIM_ID d, NETSIM_ID in);
773 void fn_NetSim_LTENR_HandlePhyOut();
776 void LTENR_FreeBLERTable();
777 double LTENR_GetBLER(
int tableId,
int mcsIndex,
int bg,
int cbs,
double sinr);
778 bool isBLEREnable(NETSIM_ID d, NETSIM_ID in);
781 void LTENR_RadioMeasurements_Init();
782 void LTENR_RadioMeasurements_Finish();
783 void LTENR_RadioMeasurements_PDSCH_Log(ptrLTENR_GNBPHY phy,
int CA_ID,
784 ptrLTENR_ASSOCIATEDUEPHYINFO info);
785 void LTENR_RadioMeasurements_PUSCH_Log(ptrLTENR_GNBPHY phy,
int CA_ID,
786 ptrLTENR_ASSOCIATEDUEPHYINFO info);
787 void LTENR_RadioMeasurements_PBSCH_Log(ptrLTENR_GNBPHY phy,
int CA_ID,
788 ptrLTENR_ASSOCIATEDUEPHYINFO info);
791 void LTENR_OLLA_Log_Init();
792 void LTENR_OLLA_Log_Finish();
795 void LTENR_MSG_WriteTrace(NetSim_PACKET* packet,
char* s);
796 void LTENR_MSG_WriteTrace_APP(NetSim_PACKET* packet,
char* s);
798 void fn_NetSim_LTENR_NSA_SN_HANDOVER_INIT();
799#define isLTENRControlPacket(packet) ((packet)->nPacketType == PacketType_Control && ((packet)->nControlDataType/100 == MAC_PROTOCOL_LTE_NR || (packet)->nControlDataType/100 == MAC_PROTOCOL_LTE))
802#pragma region FUN_DEF_LOGs_AND_APIs
804 void fn_NetSim_LTE_MAC_PRBLOG();
805 void close_ltenr_PRB_log();
806 bool get_ltenr_log_status();
807 void print_ltenr_log(
char* format, ...);
808 void print_ltenr_packet_log(NETSIM_ID d, NETSIM_ID in,
809 LTENR_SUBLAYER layer, NetSim_PACKET* packet,
811 void fn_NetSim_LTE_HandoverLOG();
812 void close_ltenr_handover_log();
815 void fn_NetSim_LTENR_EPC_RouteHOPacket();
816 void fn_NetSim_PHY_MOBILITY_HANDLE(NETSIM_ID d);
819 void init_PRBUtilization();
820 void LTENR_PRBUtilization_AddEntry(NETSIM_ID gnbId,
825 double slotStartTime,
829 void fn_NetSim_PRB_utilization_log_close();
831#define LTENR_SDAP_PRINT_PACKET_LOG_OUT() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_SDAP,pstruEventDetails->pPacket,true)
832#define LTENR_SDAP_PRINT_PACKET_LOG_IN() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_SDAP,pstruEventDetails->pPacket,false)
833#define LTENR_RRC_PRINT_PACKET_LOG_OUT() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_RRC,pstruEventDetails->pPacket,true)
834#define LTENR_RRC_PRINT_PACKET_LOG_IN() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_RRC,pstruEventDetails->pPacket,false)
835#define LTENR_PDCP_PRINT_PACKET_LOG_OUT() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_PDCP,pstruEventDetails->pPacket,true)
836#define LTENR_PDCP_PRINT_PACKET_LOG_IN() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_PDCP,pstruEventDetails->pPacket,false)
837#define LTENR_RLC_PRINT_PACKET_LOG_OUT() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_RLC,pstruEventDetails->pPacket,true)
838#define LTENR_RLC_PRINT_PACKET_LOG_IN() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_RLC,pstruEventDetails->pPacket,false)
839#define LTENR_MAC_PRINT_PACKET_LOG_OUT() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_MAC,pstruEventDetails->pPacket,true)
840#define LTENR_MAC_PRINT_PACKET_LOG_IN() print_ltenr_packet_log(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId,LTENR_SUBLAYER_MAC,pstruEventDetails->pPacket,false)
843#pragma region GLOBAL_VARIABLE_AND_UITILITY
845#define MAX_CA_COUNT (16*2)
849#define MAX_BWP_COUNT (4)
850#define MAX_LAYER_COUNT (16)
854 double str_to_time(
char* time);
855 UINT str_to_bytes(
char* bytes);
856#define CompareVal(arg0, arg1, op) \
858 (!_stricmp(op, ">")) ? (arg0 > arg1) :( \
859 (!_stricmp(op, ">=")) ? (arg0 >= arg1) :(\
860 (!_stricmp(op, "<")) ? (arg0 < arg1) :(\
861 (!_stricmp(op, "<=")) ? (arg0 <= arg1) :(\
862 (!_stricmp(op, "==")) ? (arg0 == arg1) :(\
863 (!_stricmp(op, "!=")) ? (arg0 != arg1) :false \
867#pragma region PACKET_APIs
869 void LTENR_Core_Send_Packet(NETSIM_ID src, NETSIM_ID dest,
870 NETSIM_IPAddress srcIP, NETSIM_IPAddress destIP,
871 void* hdr, UINT size,
872 NETSIM_ID packetType,
char* szPacketType, NETSIM_ID type);
873 void LTENR_Handover_Send_Packet(NETSIM_ID src, NETSIM_ID dest,
874 NETSIM_IPAddress srcIP, NETSIM_IPAddress destIP,
875 void* hdr, UINT size,
876 NETSIM_ID packetType,
char* szPacketType, NETSIM_ID type);
880 void gNB_N3_Forward_packet_to_RAN(NETSIM_ID d, NETSIM_ID in, NETSIM_ID rin, NetSim_PACKET* packet);
881 void gNB_N3_Forward_packet_to_MAC(NETSIM_ID d, NETSIM_ID rin, NetSim_PACKET* packet);
882 void fn_NetSim_LTENR_LTE_S1_CONTROL_PACKET_TO_RAN(NETSIM_ID d, NETSIM_ID RANIF, NetSim_PACKET* packet);
885#pragma region DEBUGGER_FUN
887 bool ltenr_validate_list(
void* ls, UINT size, UINT next,
char* file, UINT line);
890 void set_fast_performance();
891 void fn_NetSim_LTENR_GNB_XN_INTERFACE_INIT();
894#pragma region CELL_LIST
900 }LTENR_Cell_List, *ptrLTENR_Cell_List;
901 ptrLTENR_Cell_List gnbDCList;
902 ptrLTENR_Cell_List enbDCList;
903#define LTENR_Cell_List_ALLOC() (list_alloc(sizeof(LTENR_Cell_List),offsetof(LTENR_Cell_List,ele)))
904#define LTENR_Cell_List_NEXT(info) (LIST_NEXT(info))
905#define LTENR_Cell_List_ADD(info,e) (LIST_ADD_LAST(&(info),e))
906#define LTENR_Cell_List_REMOVE(info,e) (LIST_REMOVE(&(info),e))
909#pragma region DC_SN_FUN
910 void fn_NetSim_LTENR_NSA_RECV();
911 void fn_NetSim_SN_HANDOVER_PACKET_HANDLER();
912 void LTENR_NSA_XN_INTERFACE_TO_RAN(NETSIM_ID d, NETSIM_ID in, NetSim_PACKET* packet);
913 NETSIM_ID fn_NetSim_LTENR_NSA_Splitting_Alogrithm_For_EPC(NETSIM_ID dest);
916#pragma region XML_CONFIGURATION
917 int LTENR_ConvertStrToEnumWithErrorMsg(
const char** enumstr,
const char* str,
int length,
char* name);
918 #define LTENR_ConvertStrToEnum(enumName,val) LTENR_ConvertStrToEnumWithErrorMsg(str ## enumName, val, sizeof(str ## enumName)/sizeof(str ## enumName ## [0]), #enumName)
921#pragma region GUI_PROTOCOL_LOG_READER
922 bool get_protocol_log_status(
char* logname);
926 void LTENR_OLLA_MarkTBSError(NETSIM_ID gNBId, NETSIM_ID gNBIf,
927 NETSIM_ID ueId, NETSIM_ID ueIf,
bool isUplink,
928 UINT caId, UINT layerId);
929 void LTENR_OLLA_MarkTBSSuccess(NETSIM_ID gNBId, NETSIM_ID gNBIf,
930 NETSIM_ID ueId, NETSIM_ID ueIf,
bool isUplink,
931 UINT caId, UINT layerId);
932 double LTENR_OLLA_GetDeltaSINR(NETSIM_ID gNBId, NETSIM_ID gNBIf,
933 NETSIM_ID ueId, NETSIM_ID ueIf,
bool isUplink,
934 UINT caId, UINT layerId);
935 void test_olla(NETSIM_ID gNBId, NETSIM_ID gNBIf, NETSIM_ID ueId, NETSIM_ID ueIf);
938 double LTENR_Configure_Rate_Guarantee_GBR_UEs_Config(NETSIM_ID UEId,
bool isUplink);