25#pragma region HEADER_FILES
27#include "LTENR_GNBRRC.h"
31#include "LTENR_Core.h"
35#pragma region ADD_PACKET_INTO_BUFFER
36void fn_NetSim_NAS_ADD_PACKET_INTO_BUUFER(
void* msg) {
37 NETSIM_ID d = pstruEventDetails->nDeviceId;
38 NETSIM_ID in = pstruEventDetails->nInterfaceId;
40 if (DEVICE(d)->nNumOfInterface > 2) isCopy =
true;
41 NetSim_PACKET* p = pstruEventDetails->pPacket;
47 if (isCopy) p = fn_NetSim_Packet_CopyPacket(pstruEventDetails->pPacket);
48 NETSIM_ID outIn = fn_NetSim_Stack_GetInterfaceIdByName(d,
"LTE_S1");
49 NetSim_BUFFER* buf = DEVICE_ACCESSBUFFER(d, outIn);
50 if (!fn_NetSim_GetBufferStatus(buf))
52 NetSim_EVENTDETAILS pevent;
53 memset(&pevent, 0,
sizeof pevent);
54 pevent.dEventTime = pstruEventDetails->dEventTime;
55 pevent.dPacketSize =
sizeof(msg);
57 pevent.nDeviceType = DEVICE_TYPE(d);
58 pevent.nEventType = MAC_OUT_EVENT;
59 pevent.nInterfaceId = outIn;
60 pevent.nPacketId = p->nPacketId;
61 pevent.nProtocolId = DEVICE_MACLAYER(d, outIn)->nMacProtocolId;
64 fn_NetSim_Packet_AddPacketToList(buf, p, 0);
67 if (isCopy) fn_NetSim_Packet_FreePacket(pstruEventDetails->pPacket);
71#pragma region HANDOVER_COMPLETE
72void fn_NetSim_LTENR_NAS_HANDOVER_COMPLETE(ptrLTENR_HANDOVER_Hdr hdr) {
73 NetSim_EVENTDETAILS pevent;
74 memset(&pevent, 0,
sizeof pevent);
75 pevent.dEventTime = pstruEventDetails->dEventTime;
76 pevent.nDeviceId = hdr->serveringCellID;
77 pevent.nDeviceType = DEVICE_TYPE(hdr->serveringCellID);
78 pevent.nEventType = TIMER_EVENT;
79 pevent.nInterfaceId = hdr->serveringCellIF;
80 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(hdr->serveringCellID, hdr->serveringCellIF);
81 LTENR_SET_SUBEVENT(pd, &pevent, LTENR_SUBEVENT_GENERATE_HANDOVER_COMPLETE);
82 pevent.pPacket = LTENR_PACKET_CREATE(hdr->serveringCellID, hdr->targetCellID, pstruEventDetails->dEventTime, LTENR_MSG_NAS_HANDOVER_COMPLETE);
83 ptrLTENR_MSG msg = pevent.pPacket->pstruMacData->Packet_MACProtocol;
84 msg->logicalChannel = LTENR_LOGICALCHANNEL_CCCH;
85 msg->physicalChannel = LTENR_PHYSICALCHANNEL_PDCCH;
86 msg->transportChannel = LTENR_TRANSPORTCHANNEL_DL_SCH;
87 msg->rlcMode = LTENR_RLCMODE_TM;
88 fn_NetSIm_LTENR_NAS_ADD_HDR_INTO_PACKET(pevent.pPacket, hdr, nasHandoverComplete, LTENR_MSG_NAS_HANDOVER_COMPLETE);
91void fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_COMPLETE() {
92 ptrLTENR_HANDOVER_Hdr hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasHandoverComplete);
93 hdr->msgType = LTENR_MSG_NAS_HANDOVER_COMPLETE;
96void fn_NetSim_LTENR_NAS_HANDOVER_COMPLETE_RECV() {
101#pragma region UE_CONTEXT_RELEASE_ACK
102void fn_NetSim_LTENR_NAS_UE_CONTEXT_RELEASE_ACK(ptrLTENR_HANDOVER_Hdr hdr) {
103 NetSim_EVENTDETAILS pevent;
104 memset(&pevent, 0,
sizeof pevent);
105 pevent.dEventTime = pstruEventDetails->dEventTime;
106 pevent.nDeviceId = hdr->serveringCellID;
107 pevent.nDeviceType = DEVICE_TYPE(hdr->serveringCellID);
108 pevent.nEventType = TIMER_EVENT;
109 pevent.nInterfaceId = hdr->serveringCellIF;
110 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(hdr->serveringCellID, hdr->serveringCellIF);
111 LTENR_SET_SUBEVENT(pd, &pevent, LTENR_SUBEVENT_GENERATE_UECONTEXTRELEASE_ACK);
112 pevent.pPacket = LTENR_PACKET_CREATE(hdr->serveringCellID, hdr->targetCellID, pstruEventDetails->dEventTime, LTENR_MSG_NAS_HANDOVER_UE_CONTEXT_RELEASE_ACK);
113 ptrLTENR_MSG msg = pevent.pPacket->pstruMacData->Packet_MACProtocol;
114 msg->logicalChannel = LTENR_LOGICALCHANNEL_CCCH;
115 msg->physicalChannel = LTENR_PHYSICALCHANNEL_PDCCH;
116 msg->transportChannel = LTENR_TRANSPORTCHANNEL_DL_SCH;
117 msg->rlcMode = LTENR_RLCMODE_TM;
118 fn_NetSIm_LTENR_NAS_ADD_HDR_INTO_PACKET(pevent.pPacket, hdr, nasUEContextReleaseACK, LTENR_MSG_NAS_HANDOVER_UE_CONTEXT_RELEASE_ACK);
119 fnpAddEvent(&pevent);
121void fn_NetSim_LTENR_NAS_GENERATE_UE_CONTEXT_RELEASE_ACK() {
122 ptrLTENR_HANDOVER_Hdr hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasUEContextReleaseACK);
123 hdr->msgType = LTENR_MSG_NAS_HANDOVER_UE_CONTEXT_RELEASE_ACK;
124 ptrLTENR_NAS_UECONTEXTRELEASECOMMAND msg = calloc(1,
sizeof * msg);
125 msg->ueID = hdr->UEID;
126 msg->outCome = HANDOVER_OUTCOME_SUCESSFUL;
127 msg->cause = HANDOVER_CAUSE_RADIO_NETWORK;
129 pstruEventDetails->pPacket->pstruMacData->dontFree =
true;
130 fn_NetSim_NAS_ADD_PACKET_INTO_BUUFER(msg);
132void fn_NetSim_LTENR_NAS_UE_CONTEXT_RELEASE_ACK_RECV(ptrLTENR_HANDOVER_Hdr hdr) {
133 ptrLTENR_NAS_UECONTEXTRELEASECOMMAND msg = hdr->msg;
134 if (msg->outCome != HANDOVER_OUTCOME_SUCESSFUL) {
135 fnNetSimError(
"UE context release outcome is unsuccessful.");
140#pragma region UE_CONTEXT_RELEASE
141void fn_NetSim_LTENR_NAS_UE_CONTEXT_RELEASE(ptrLTENR_HANDOVER_Hdr hdr) {
142 NetSim_EVENTDETAILS pevent;
143 memset(&pevent, 0,
sizeof pevent);
144 pevent.dEventTime = pstruEventDetails->dEventTime;
145 pevent.nDeviceId = hdr->targetCellID;
146 pevent.nDeviceType = DEVICE_TYPE(hdr->targetCellID);
147 pevent.nEventType = TIMER_EVENT;
148 pevent.nInterfaceId = hdr->targetCellIF;
149 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(hdr->targetCellID, hdr->targetCellIF);
150 LTENR_SET_SUBEVENT(pd, &pevent, LTENR_SUBEVENT_GENERATE_UECONTEXTRELEASE);
151 pevent.pPacket = LTENR_PACKET_CREATE(hdr->targetCellID, hdr->serveringCellID, pstruEventDetails->dEventTime, LTENR_MSG_NAS_HANDOVER_UE_CONTEXT_RELEASE);
152 ptrLTENR_MSG msg = pevent.pPacket->pstruMacData->Packet_MACProtocol;
153 msg->logicalChannel = LTENR_LOGICALCHANNEL_CCCH;
154 msg->physicalChannel = LTENR_PHYSICALCHANNEL_PDCCH;
155 msg->transportChannel = LTENR_TRANSPORTCHANNEL_DL_SCH;
156 msg->rlcMode = LTENR_RLCMODE_TM;
157 fn_NetSIm_LTENR_NAS_ADD_HDR_INTO_PACKET(pevent.pPacket, hdr, nasUEContextRelease, LTENR_MSG_NAS_HANDOVER_UE_CONTEXT_RELEASE);
158 fnpAddEvent(&pevent);
160void fn_NetSim_LTENR_NAS_GENERATE_UE_CONTEXT_RELEASE() {
161 ptrLTENR_HANDOVER_Hdr hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasUEContextRelease);
162 hdr->msgType = LTENR_MSG_NAS_HANDOVER_UE_CONTEXT_RELEASE;
163 ptrLTENR_NAS_UECONTEXTRELEASEREQUEST msg = calloc(1,
sizeof * msg);
164 msg->cause = HANDOVER_CAUSE_RADIO_NETWORK;
165 msg->gnb_UE_ID = hdr->targetCellIF;
166 msg->mme_UE_ID = hdr->AMFID;
168 pstruEventDetails->pPacket->pstruMacData->dontFree =
true;
169 fn_NetSim_NAS_ADD_PACKET_INTO_BUUFER(msg);
171void fn_NetSim_LTENR_NAS_UE_CONTEXT_RELEASE_RECV(ptrLTENR_HANDOVER_Hdr hdr) {
172 fn_NetSim_LTENR_NAS_UE_CONTEXT_RELEASE_ACK(hdr);
176#pragma region PATH_SWITCH_ACK
177void fn_NetSim_LTENR_NAS_PATH_SWITCH_ACK(ptrLTENR_HANDOVER_Hdr hdr) {
178 NetSim_EVENTDETAILS pevent;
179 memset(&pevent, 0,
sizeof pevent);
180 pevent.dEventTime = pstruEventDetails->dEventTime;
181 pevent.nDeviceId = hdr->AMFID;
182 pevent.nDeviceType = DEVICE_TYPE(hdr->AMFID);
183 pevent.nEventType = TIMER_EVENT;
184 pevent.nInterfaceId = LTENR_NSA_EPC_HLR_FindOutInterface_FOR_GNB(hdr->AMFID, hdr->UEID, hdr->targetCellID);
185 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(hdr->AMFID, hdr->AMFIF);
186 LTENR_SET_SUBEVENT(pd, &pevent, LTENR_SUBEVENT_GENERATE_PATH_SWITCH_ACK);
187 pevent.pPacket = LTENR_PACKET_CREATE(hdr->AMFID, hdr->targetCellID, pstruEventDetails->dEventTime, LTENR_MSG_NAS_HANDOVER_PATH_SWITCH_ACK);
188 ptrLTENR_MSG msg = pevent.pPacket->pstruMacData->Packet_MACProtocol;
189 msg->logicalChannel = LTENR_LOGICALCHANNEL_CCCH;
190 msg->physicalChannel = LTENR_PHYSICALCHANNEL_PDCCH;
191 msg->transportChannel = LTENR_TRANSPORTCHANNEL_DL_SCH;
192 msg->rlcMode = LTENR_RLCMODE_TM;
193 fn_NetSIm_LTENR_NAS_ADD_HDR_INTO_PACKET(pevent.pPacket, hdr, naspathSwitchAck, LTENR_MSG_NAS_HANDOVER_PATH_SWITCH_ACK);
194 fnpAddEvent(&pevent);
196void fn_NetSim_LTENR_NAS_GENERATE_PATH_SWITCH_REQUEST_ACK() {
197 ptrLTENR_HANDOVER_Hdr hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, naspathSwitchAck);
198 ptrLTENR_NAS_PATH_SWITCH_REQUEST msg = calloc(1,
sizeof * msg);
199 hdr->msgType = LTENR_MSG_NAS_HANDOVER_PATH_SWITCH_ACK;
205 pstruEventDetails->pPacket->pstruMacData->dontFree =
true;
207 NetSim_BUFFER* buf = DEVICE_ACCESSBUFFER(pstruEventDetails->nDeviceId, pstruEventDetails->nInterfaceId);
208 NetSim_PACKET* p = pstruEventDetails->pPacket;
209 if (!fn_NetSim_GetBufferStatus(buf))
211 NetSim_EVENTDETAILS pevent;
212 memset(&pevent, 0,
sizeof pevent);
213 pevent.dEventTime = pstruEventDetails->dEventTime;
214 pevent.dPacketSize =
sizeof(msg);
215 pevent.nDeviceId = pstruEventDetails->nDeviceId;
216 pevent.nDeviceType = DEVICE_TYPE(pstruEventDetails->nDeviceId);
217 pevent.nEventType = MAC_OUT_EVENT;
218 pevent.nInterfaceId = pstruEventDetails->nInterfaceId;
219 pevent.nPacketId = p->nPacketId;
220 pevent.nProtocolId = DEVICE_MACLAYER(pstruEventDetails->nDeviceId, pstruEventDetails->nInterfaceId)->nMacProtocolId;
221 fnpAddEvent(&pevent);
223 fn_NetSim_Packet_AddPacketToList(buf, p, 0);
224 pstruEventDetails->pPacket = NULL;
226void fn_NetSim_LTENR_NAS_PATH_SWITCH_ACK_RECV(ptrLTENR_HANDOVER_Hdr hdr) {
227 if (fn_NetSim_LTENR_CORE_INTERFACE(hdr->serveringCellID, nGC_INTERFACE_XN)) {
228 LTENR_HANDOVER_UE_CONTEXT_RELEASE(hdr);
231 fn_NetSim_LTENR_NAS_UE_CONTEXT_RELEASE(hdr);
236#pragma region PATH_SWITCH_REQUEST
237void fn_NetSim_LTENR_NAS_PATH_SWITCH_REQUEST(ptrLTENR_HANDOVER_Hdr hdr) {
238 NetSim_EVENTDETAILS pevent;
239 memset(&pevent, 0,
sizeof pevent);
240 pevent.dEventTime = pstruEventDetails->dEventTime;
241 pevent.nDeviceId = hdr->targetCellID;
242 pevent.nDeviceType = DEVICE_TYPE(hdr->targetCellID);
243 pevent.nEventType = TIMER_EVENT;
244 pevent.nInterfaceId = hdr->targetCellIF;
245 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(hdr->targetCellID, hdr->targetCellIF);
246 LTENR_SET_SUBEVENT(pd, &pevent, LTENR_SUBEVENT_GENERATE_PATH_SWITCH);
247 pevent.pPacket = LTENR_PACKET_CREATE(hdr->targetCellID, hdr->AMFID, pstruEventDetails->dEventTime, LTENR_MSG_NAS_HANDOVER_PATH_SWITCH);
248 ptrLTENR_MSG msg = pevent.pPacket->pstruMacData->Packet_MACProtocol;
249 msg->logicalChannel = LTENR_LOGICALCHANNEL_CCCH;
250 msg->physicalChannel = LTENR_PHYSICALCHANNEL_PDCCH;
251 msg->transportChannel = LTENR_TRANSPORTCHANNEL_DL_SCH;
252 msg->rlcMode = LTENR_RLCMODE_TM;
253 fn_NetSIm_LTENR_NAS_ADD_HDR_INTO_PACKET(pevent.pPacket, hdr, nasPathSwitch, LTENR_MSG_NAS_HANDOVER_PATH_SWITCH);
254 fnpAddEvent(&pevent);
256void fn_NetSim_LTENR_NAS_GENERATE_PATH_SWITCH_REQUEST() {
257 ptrLTENR_HANDOVER_Hdr hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasPathSwitch);
258 ptrLTENR_NAS_PATH_SWITCH_REQUEST msg = calloc(1,
sizeof * msg);
259 msg->targetGNBID = hdr->targetCellID;
261 hdr->msgType = LTENR_MSG_NAS_HANDOVER_PATH_SWITCH;
262 pstruEventDetails->pPacket->pstruMacData->dontFree =
true;
264 NETSIM_ID d = pstruEventDetails->nDeviceId;
265 NETSIM_ID in = fn_NetSim_LTENR_CORE_INTERFACE(d, nGC_INTERFACE_LTE_S1);
266 NetSim_BUFFER* buf = DEVICE_ACCESSBUFFER(d, in);
267 NetSim_PACKET* p = pstruEventDetails->pPacket;
268 if (!fn_NetSim_GetBufferStatus(buf))
270 NetSim_EVENTDETAILS pevent;
271 memset(&pevent, 0,
sizeof pevent);
272 pevent.dEventTime = pstruEventDetails->dEventTime;
273 pevent.dPacketSize =
sizeof(msg);
274 pevent.nDeviceId = pstruEventDetails->nDeviceId;
275 pevent.nDeviceType = DEVICE_TYPE(d);
276 pevent.nEventType = MAC_OUT_EVENT;
277 pevent.nInterfaceId = in;
278 pevent.nPacketId = p->nPacketId;
279 pevent.nProtocolId = DEVICE_MACLAYER(d, in)->nMacProtocolId;
280 fnpAddEvent(&pevent);
282 fn_NetSim_Packet_AddPacketToList(buf, p, 0);
283 pstruEventDetails->pPacket = NULL;
285void fn_NetSim_LTENR_NAS_PATH_SWITCH_REQUEST_RECV(ptrLTENR_HANDOVER_Hdr hdr) {
286 pstruEventDetails->pPacket = NULL;
287 fn_NetSim_LTENR_NAS_PATH_SWITCH_ACK(hdr);
291#pragma region BUFFER_TRANSFER
292void fn_NetSim_LTENR_NAS_PDCP_BUFFER_TRANSFER(ptrLTENR_PDCPENTITY ser, ptrLTENR_PDCPENTITY tar,
int flag) {
298 tar->transmissionBuffer = ser->transmissionBuffer;
299 if (tar->transmissionBuffer->headPacket != NULL) {
300 ptrLTENR_BUFFEREDPACKET buf = tar->transmissionBuffer->headPacket;
301 NetSim_PACKET* head = tar->transmissionBuffer->headPacket->packet;
302 NetSim_PACKET* packet = NULL;
304 packet = buf->packet;
307 packet->nTransmitterId = tar->enbId;
309 packet->nReceiverId = tar->enbId;
310 packet = packet->pstruNextPacket;
314 tar->transmissionBuffer->headPacket->packet = head;
317 ser->transmissionBuffer = NULL;
318 tar->receiveBuffer = ser->receiveBuffer;
319 ser->receiveBuffer = NULL;
320 tar->TX_NEXT = ser->TX_NEXT;
326void fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(ptrLTENR_RLCENTITY ser, ptrLTENR_RLCENTITY tar,
int flag) {
332 tar->transmissionBuffer = ser->transmissionBuffer;
333 ser->transmissionBuffer = NULL;
335 if (tar->AM.receptionBuffer != NULL) {
336 ptrLTENR_RLC_RECEPTIONBUFFER buf = tar->AM.receptionBuffer;
337 NetSim_PACKET* head = tar->AM.receptionBuffer->head;
338 NetSim_PACKET* packet = NULL;
343 packet->nReceiverId = tar->d;
345 packet->nTransmitterId = tar->peerId;
346 packet = packet->pstruNextPacket;
348 buf = LTENR_RLC_RECEPTIONBUFFER_NEXT(buf);
350 tar->AM.receptionBuffer->head = head;
352 ser->AM.receptionBuffer = NULL;
354 if (tar->UM.receptionBuffer != NULL) {
355 ptrLTENR_RLC_RECEPTIONBUFFER buf = tar->UM.receptionBuffer;
356 NetSim_PACKET* head = tar->UM.receptionBuffer->head;
357 NetSim_PACKET* packet = NULL;
362 packet->nReceiverId = tar->d;
364 packet->nTransmitterId = tar->peerId;
365 packet = packet->pstruNextPacket;
367 buf = LTENR_RLC_RECEPTIONBUFFER_NEXT(buf);
369 tar->UM.receptionBuffer->head = head;
371 ser->UM.receptionBuffer = NULL;
372 tar->retransmissionBuffer = ser->retransmissionBuffer;
373 ser->retransmissionBuffer = NULL;
374 tar->rlcMode = ser->rlcMode;
375 tar->transmittedBuffer = ser->transmittedBuffer;
376 tar->pollRetransmitTimerId = ser->pollRetransmitTimerId;
377 tar->isPollRetransmitTimerStarted = ser->isPollRetransmitTimerStarted;
378 tar->reassemblyTimerId = ser->reassemblyTimerId;
379 if (ser->isPollRetransmitTimerStarted) {
380 LTENR_RLCAM_Stop_t_PollRetransmitTimer(ser);
381 LTENR_RLCAM_Start_t_PollRetransmitTimer(tar);
383 tar->isReassemblyTimerStarted = ser->isReassemblyTimerStarted;
384 if (ser->isReassemblyTimerStarted) {
385 fnDeleteEvent(ser->reassemblyTimerId);
386 LTENR_RLCAM_Start_t_ReassemblyTimer(tar);
388 tar->statusProhibitTimerId = ser->statusProhibitTimerId;
389 tar->isStatusProhibitTimerStarted = ser->isStatusProhibitTimerStarted;
390 ser->transmittedBuffer = NULL;
391 for (
int i = 0; i < LTENR_LOGICALCHANNEL_LAST; i++)
392 tar->bufferStatus[i] = ser->bufferStatus[i];
395void fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_TRANSMISSION_ID(ptrLTENR_RLCENTITY entity, NETSIM_ID t)
400 ptrLTENR_RLCBUFFER_DATA buf = entity->transmissionBuffer->head;
403 buf->packet->nTransmitterId = t;
407 ptrLTENR_RLCBUFFER_DATA rxbuf = entity->retransmissionBuffer->head;
410 rxbuf->packet->nTransmitterId = t;
415void fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_RECEIVER_ID(ptrLTENR_RLCENTITY entity, NETSIM_ID t)
420 ptrLTENR_RLCBUFFER_DATA buf = entity->transmissionBuffer->head;
423 buf->packet->nReceiverId = t;
427 ptrLTENR_RLCBUFFER_DATA rxbuf = entity->retransmissionBuffer->head;
430 rxbuf->packet->nReceiverId = t;
435void fn_NetSim_LTENR_NAS_RLC_UE_BUFFER_TRANSFER(NETSIM_ID d, NETSIM_ID in,
436 NETSIM_ID r, NETSIM_ID rin,
437 NETSIM_ID t, NETSIM_ID tin) {
439 ptrLTENR_RLCENTITY SerEntity = LTENR_RLC_FINDENTITY(r, rin, d, in, LTENR_RLCMODE_TM,
true,
false);
440 ptrLTENR_RLCENTITY TarEntity = LTENR_RLC_FINDENTITY(r, rin, t, tin, LTENR_RLCMODE_TM,
true,
false);
441 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 1);
442 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_RECEIVER_ID(TarEntity, t);
444 SerEntity = LTENR_RLC_FINDENTITY(r, rin, d, in, LTENR_RLCMODE_TM,
false,
true);
445 TarEntity = LTENR_RLC_FINDENTITY(r, rin, t, tin, LTENR_RLCMODE_TM,
false,
true);
446 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 1);
447 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_RECEIVER_ID(TarEntity, t);
449 SerEntity = LTENR_RLC_FINDENTITY(r, rin, d, in, LTENR_RLCMODE_UM,
true,
false);
450 TarEntity = LTENR_RLC_FINDENTITY(r, rin, t, tin, LTENR_RLCMODE_UM,
true,
false);
451 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 1);
452 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_RECEIVER_ID(TarEntity, t);
454 SerEntity = LTENR_RLC_FINDENTITY(r, rin, d, in, LTENR_RLCMODE_UM,
false,
true);
455 TarEntity = LTENR_RLC_FINDENTITY(r, rin, t, tin, LTENR_RLCMODE_UM,
false,
true);
456 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 1);
457 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_RECEIVER_ID(TarEntity, t);
459 SerEntity = LTENR_RLC_FINDENTITY(r, rin, d, in, LTENR_RLCMODE_AM,
true,
true);
460 TarEntity = LTENR_RLC_FINDENTITY(r, rin, t, tin, LTENR_RLCMODE_AM,
true,
true);
461 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 1);
462 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_RECEIVER_ID(TarEntity, t);
465void fn_NetSim_LTENR_NAS_RLC_GNB_BUFFER_TRANSFER(NETSIM_ID d, NETSIM_ID in,
466 NETSIM_ID r, NETSIM_ID rin,
467 NETSIM_ID t, NETSIM_ID tin) {
469 ptrLTENR_RLCENTITY SerEntity = LTENR_RLC_FINDENTITY(d, in, r, rin, LTENR_RLCMODE_TM,
true,
false);
470 ptrLTENR_RLCENTITY TarEntity = LTENR_RLC_FINDENTITY(t, tin, r, rin, LTENR_RLCMODE_TM,
true,
false);
471 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 0);
472 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_TRANSMISSION_ID(TarEntity, t);
473 SerEntity = LTENR_RLC_FINDENTITY(d, in, r, rin, LTENR_RLCMODE_TM,
false,
true);
474 TarEntity = LTENR_RLC_FINDENTITY(t, tin, r, rin, LTENR_RLCMODE_TM,
false,
true);
475 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 0);
476 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_TRANSMISSION_ID(TarEntity, t);
477 SerEntity = LTENR_RLC_FINDENTITY(d, in, r, rin, LTENR_RLCMODE_UM,
true,
false);
478 TarEntity = LTENR_RLC_FINDENTITY(t, tin, r, rin, LTENR_RLCMODE_UM,
true,
false);
479 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 0);
480 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_TRANSMISSION_ID(TarEntity, t);
481 SerEntity = LTENR_RLC_FINDENTITY(d, in, r, rin, LTENR_RLCMODE_UM,
false,
true);
482 TarEntity = LTENR_RLC_FINDENTITY(t, tin, r, rin, LTENR_RLCMODE_UM,
false,
true);
483 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 0);
484 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_TRANSMISSION_ID(TarEntity, t);
485 SerEntity = LTENR_RLC_FINDENTITY(d, in, r, rin, LTENR_RLCMODE_AM,
true,
true);
486 TarEntity = LTENR_RLC_FINDENTITY(t, tin, r, rin, LTENR_RLCMODE_AM,
true,
true);
487 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER(SerEntity, TarEntity, 0);
488 fn_NetSim_LTENR_NAS_RLC_BUFFER_TRANSFER_CHANGE_TRANSMISSION_ID(TarEntity, t);
492#pragma region HANDOVER_COMMAND
493void fn_NetSim_LTENR_NAS_HANDOVER_COMMAND(ptrLTENR_HANDOVER_Hdr hdr) {
494 NetSim_EVENTDETAILS pevent;
495 memset(&pevent, 0,
sizeof pevent);
496 pevent.dEventTime = pstruEventDetails->dEventTime;
497 pevent.nDeviceId = hdr->serveringCellID;
498 pevent.nDeviceType = DEVICE_TYPE(hdr->serveringCellID);
499 pevent.nEventType = TIMER_EVENT;
500 pevent.nInterfaceId = hdr->serveringCellIF;
501 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(hdr->serveringCellID, hdr->serveringCellIF);
502 LTENR_SET_SUBEVENT(pd, &pevent, LTENR_SUBEVENT_GENERATE_HANDOVER_COMMAND);
503 pevent.pPacket = LTENR_PACKET_CREATE(hdr->serveringCellID, hdr->UEID, pstruEventDetails->dEventTime, LTENR_MSG_NAS_HANDOVER_COMMAND);
504 ptrLTENR_MSG msg = pevent.pPacket->pstruMacData->Packet_MACProtocol;
505 msg->logicalChannel = LTENR_LOGICALCHANNEL_CCCH;
506 msg->physicalChannel = LTENR_PHYSICALCHANNEL_PDCCH;
507 msg->transportChannel = LTENR_TRANSPORTCHANNEL_DL_SCH;
508 msg->rlcMode = LTENR_RLCMODE_TM;
509 fn_NetSIm_LTENR_NAS_ADD_HDR_INTO_PACKET(pevent.pPacket, hdr, nasHandoverTrigger, LTENR_MSG_NAS_HANDOVER_COMMAND);
510 fnpAddEvent(&pevent);
512void fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_COMMAND() {
513 ptrLTENR_HANDOVER_Hdr hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasHandoverTrigger);
514 ptrLTENR_NAS_HANDOVER_COMMAND msg = calloc(1,
sizeof * msg);
515 msg->E_RADataForwading_DL_TransportLayerAddress = DEVICE_NWADDRESS(hdr->targetCellID, hdr->targetCellIF);
516 msg->MME_UE_ID = hdr->AMFID;
517 msg->type = HANDOVER_TYPE_INTRA_LTENR;
519 hdr->msgType = LTENR_MSG_NAS_HANDOVER_COMMAND;
520 pstruEventDetails->pPacket->pstruMacData->dontFree =
true;
524void fn_NetSim_LTENR_NAS_HANDOVER_COMMAND_HANDLE(ptrLTENR_HANDOVER_Hdr hdr) {
525 NetSim_EVENTDETAILS pevent;
526 memset(&pevent, 0,
sizeof pevent);
527 NETSIM_ID sin = fn_NetSim_LTENR_SEC_INTEFACE_FOR_UE(hdr->UEID, hdr->UEIF);
528 ptrLTENR_UERRC uerrc_secondary = LTENR_UERRC_GET(hdr->UEID, sin);
529 ptrLTENR_UERRC uerrc = LTENR_UERRC_GET(hdr->UEID, hdr->UEIF);
530 ptrLTENR_GNBRRC gNBrrc = LTENR_GNBRRC_GET(hdr->serveringCellID, hdr->serveringCellIF);
532 uerrc->isMNHandoverComplete =
true;
533 uerrc->ueRRCState = UERRC_INACTIVE;
534 if (uerrc_secondary->isSecondaryAssociated)
535 uerrc_secondary->ueRRCState = UERRC_INACTIVE;
537 double T1 = pstruEventDetails->dEventTime;
538 double Time_Diff = pstruEventDetails->dEventTime - hdr->HandoverStartTime;
539 double Time_added = max((gNBrrc->InterruptionTime - Time_Diff), 0);
540 uerrc->InteruptionInterval = Time_added;
541 pevent.dEventTime = pstruEventDetails->dEventTime +Time_added;
542 pevent.nDeviceId = pstruEventDetails->nDeviceId;
543 pevent.nDeviceType = DEVICE_TYPE(pstruEventDetails->nDeviceId);
544 pevent.nEventType = TIMER_EVENT;
545 pevent.nInterfaceId = pstruEventDetails->nInterfaceId;
546 pevent.szOtherDetails = hdr;
547 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(pstruEventDetails->nDeviceId, pstruEventDetails->nInterfaceId);
548 LTENR_SET_SUBEVENT(pd, &pevent, LTENR_SUBEVENT_GENERATE_HANDOVER_COMMAND_HANDLE);
549 fnpAddEvent(&pevent);
552void fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_COMMAND_HANDLE()
554 ptrLTENR_HANDOVER_Hdr hdr = pstruEventDetails->szOtherDetails;
555 NETSIM_ID d = hdr->serveringCellID;
556 NETSIM_ID in = hdr->serveringCellIF;
557 NETSIM_ID r = hdr->UEID;
558 NETSIM_ID rin = hdr->UEIF;
559 NETSIM_ID t = hdr->targetCellID;
560 NETSIM_ID tin = hdr->targetCellIF;
563 ptrLTENR_UERRC ueRRC = LTENR_UERRC_GET(r, rin);
564 NETSIM_ID sin = fn_NetSim_LTENR_SEC_INTEFACE_FOR_UE(r,rin);
566 ptrLTENR_UERRC uerrc_secondary = LTENR_UERRC_GET(hdr->UEID, sin);
567 uerrc_secondary->ueRRCState = UERRC_CONNECTED;
568 ueRRC->ueRRCState = UERRC_CONNECTED;
569 ueRRC->ueCMState = UE_CM_CONNECTED;
571 LTENR_ASSOCIATEINFO_REMOVE(d, in, r, rin);
572 LTENR_ASSOCIATEINFO_ADD(t, tin, r, rin);
574 LTENR_PHY_ASSOCIATION(t, tin, r, rin,
true);
575 LTENR_PDCP_ASSOCIATION(t, tin, r, rin,
true);
576 LTENR_RLC_ASSOCIATION(t, tin, r, rin,
true);
578 ptrLTENR_PROTODATA data = LTENR_PROTODATA_GET(r, rin);
580 ptrLTENR_PDCPVAR serPDCPVar = LTENR_GNBPDCP_GET(d, in);
581 ptrLTENR_PDCPVAR tarPDCPVar = LTENR_GNBPDCP_GET(t, tin);
582 ptrLTENR_PDCPVAR uePDCPVar = LTENR_UEPDCP_GET(r, rin);
585 ptrLTENR_PDCPENTITY serentity = LTENR_PDCP_FindEntity(serPDCPVar, d, in, r, rin, LTENR_RLCMODE_TM);
586 ptrLTENR_PDCPENTITY tarentity = LTENR_PDCP_FindEntity(tarPDCPVar, t, tin, r, rin, LTENR_RLCMODE_TM);
587 fn_NetSim_LTENR_NAS_PDCP_BUFFER_TRANSFER(serentity, tarentity, 0);
589 serentity = LTENR_PDCP_FindEntity(serPDCPVar, d, in, r, rin, LTENR_RLCMODE_UM);
590 tarentity = LTENR_PDCP_FindEntity(tarPDCPVar, t, tin, r, rin, LTENR_RLCMODE_UM);
591 fn_NetSim_LTENR_NAS_PDCP_BUFFER_TRANSFER(serentity, tarentity, 0);
593 serentity = LTENR_PDCP_FindEntity(serPDCPVar, d, in, r, rin, LTENR_RLCMODE_AM);
594 tarentity = LTENR_PDCP_FindEntity(tarPDCPVar, t, tin, r, rin, LTENR_RLCMODE_AM);
595 fn_NetSim_LTENR_NAS_PDCP_BUFFER_TRANSFER(serentity, tarentity, 0);
598 serentity = LTENR_PDCP_FindEntity(uePDCPVar, d, in, r, rin, LTENR_RLCMODE_TM);
599 tarentity = LTENR_PDCP_FindEntity(uePDCPVar, t, tin, r, rin, LTENR_RLCMODE_TM);
600 fn_NetSim_LTENR_NAS_PDCP_BUFFER_TRANSFER(serentity, tarentity, 1);
602 serentity = LTENR_PDCP_FindEntity(uePDCPVar, d, in, r, rin, LTENR_RLCMODE_UM);
603 tarentity = LTENR_PDCP_FindEntity(uePDCPVar, t, tin, r, rin, LTENR_RLCMODE_UM);
604 fn_NetSim_LTENR_NAS_PDCP_BUFFER_TRANSFER(serentity, tarentity, 1);
606 serentity = LTENR_PDCP_FindEntity(uePDCPVar, d, in, r, rin, LTENR_RLCMODE_AM);
607 tarentity = LTENR_PDCP_FindEntity(uePDCPVar, t, tin, r, rin, LTENR_RLCMODE_AM);
608 fn_NetSim_LTENR_NAS_PDCP_BUFFER_TRANSFER(serentity, tarentity, 1);
610 fn_NetSim_LTENR_NAS_RLC_GNB_BUFFER_TRANSFER(d, in, r, rin, t, tin);
611 fn_NetSim_LTENR_NAS_RLC_UE_BUFFER_TRANSFER(d, in, r, rin, t, tin);
614 ueRRC->SelectedCellID = hdr->targetCellID;
615 ueRRC->SelectedCellIF = hdr->targetCellIF;
618 LTENR_PHY_ASSOCIATION(d, in, r, rin,
false);
619 LTENR_PDCP_ASSOCIATION(d, in, r, rin,
false);
620 LTENR_RLC_ASSOCIATION(d, in, r, rin,
false);
623 if (fn_NetSim_LTENR_IS_S1_INTERFACE_EXISTS(d)) {
624 NETSIM_ID epcIn = LTENR_NSA_EPC_HLR_FindOutInterface_FOR_GNB(hdr->AMFID, hdr->UEID, hdr->serveringCellID);
625 ptrLTENR_EPC_HLR hlr = LTENR_EPC_FindHLR_For_GNB(hdr->AMFID, epcIn, hdr->UEID, hdr->serveringCellID);
626 ptrLTENR_EPC epc = LTENR_EPC_GET(hdr->AMFID, epcIn);
627 LTENR_EPC_HLR_REMOVE(epc, hlr);
629 hlr = LTENR_EPC_FindHLR_For_GNB(hdr->AMFID, epcIn, hdr->UEID, hdr->serveringCellID);
631 LTENR_EPC_HLR_REMOVE(epc, hlr);
635 fn_NetSim_Stack_RemoveDeviceFromlink(r, rin, DEVICE_PHYLAYER(d, in)->nLinkId);
636 fn_NetSim_Stack_AddDeviceTolink(r, rin, DEVICE_PHYLAYER(t, tin)->nLinkId);
637 fn_NetSim_LTENR_RRC_RECONFIGURATION(r, rin, t, tin);
638 if (!fn_NetSim_LTENR_IS_S1_INTERFACE_EXISTS(d))
639 fn_NetSim_LTENR_GNB_CORE_PATH_SWITCH_MSG(hdr);
641 fn_NetSim_LTENR_NAS_PATH_SWITCH_REQUEST(hdr);
644void fn_NetSim_LTENR_NAS_HANDOVER_COMMAND_RECV(ptrLTENR_HANDOVER_Hdr hdr) {
645 fn_NetSim_LTENR_NAS_HANDOVER_COMMAND_HANDLE(hdr);
649#pragma region Handover_Request_ACK
650void fn_NetSim_LTENR_NAS_HANDOVER_REQUEST_ACK(ptrLTENR_HANDOVER_Hdr hdr) {
651 NetSim_EVENTDETAILS pevent;
652 memset(&pevent, 0,
sizeof pevent);
653 pevent.dEventTime = pstruEventDetails->dEventTime;
654 pevent.nDeviceId = hdr->targetCellID;
655 pevent.nDeviceType = DEVICE_TYPE(hdr->targetCellID);
656 pevent.nEventType = TIMER_EVENT;
657 pevent.nInterfaceId = hdr->targetCellIF;
658 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(hdr->targetCellID, hdr->targetCellIF);
659 LTENR_SET_SUBEVENT(pd, &pevent, LTENR_SUBEVENT_GENERATE_HANDOVER_REQUEST_ACK);
660 pevent.pPacket = LTENR_PACKET_CREATE(hdr->targetCellID, hdr->serveringCellID, pstruEventDetails->dEventTime, LTENR_MSG_NAS_HANDOVER_REQUEST_ACK);
661 ptrLTENR_MSG msg = pevent.pPacket->pstruMacData->Packet_MACProtocol;
662 msg->logicalChannel = LTENR_LOGICALCHANNEL_CCCH;
663 msg->physicalChannel = LTENR_PHYSICALCHANNEL_PDCCH;
664 msg->transportChannel = LTENR_TRANSPORTCHANNEL_DL_SCH;
665 msg->rlcMode = LTENR_RLCMODE_TM;
666 fn_NetSIm_LTENR_NAS_ADD_HDR_INTO_PACKET(pevent.pPacket, hdr, nasHandoverRequestAck, LTENR_MSG_NAS_HANDOVER_REQUEST_ACK);
667 fnpAddEvent(&pevent);
669void fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_REQUEST_ACK() {
670 ptrLTENR_HANDOVER_Hdr hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasHandoverRequestAck);
671 ptrLTENR_NAS_HANDOVER_REQUEST_ACK msg = calloc(1,
sizeof * msg);
672 msg->GNB_UE_ID = hdr->serveringCellID;
673 msg->MME_UE_ID = hdr->AMFID;
674 hdr->msgType = LTENR_MSG_NAS_HANDOVER_REQUEST_ACK;
675 msg->outCome = HANDOVER_OUTCOME_SUCESSFUL;
677 pstruEventDetails->pPacket->pstruMacData->dontFree =
true;
678 fn_NetSim_NAS_ADD_PACKET_INTO_BUUFER(msg);
680void fn_NetSim_LTENR_NAS_HANDOVER_REQUEST_ACK_RECV(ptrLTENR_HANDOVER_Hdr hdr) {
681 fn_NetSim_LTENR_NAS_HANDOVER_COMMAND(hdr);
685#pragma region Handover_Request
686void fn_NetSim_LTENR_NAS_HANDOVER_REQUEST(ptrLTENR_HANDOVER_Hdr hdr) {
687 NetSim_EVENTDETAILS pevent;
688 memset(&pevent, 0,
sizeof pevent);
689 pevent.dEventTime = pstruEventDetails->dEventTime;
690 pevent.nDeviceId = hdr->serveringCellID;
691 pevent.nDeviceType = DEVICE_TYPE(hdr->serveringCellID);
692 pevent.nEventType = TIMER_EVENT;
693 pevent.nInterfaceId = hdr->serveringCellIF;
694 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(hdr->serveringCellID, hdr->serveringCellIF);
695 LTENR_SET_SUBEVENT(pd, &pevent, LTENR_SUBEVENT_GENERATE_HANDOVER_REQUEST);
696 pevent.pPacket = LTENR_PACKET_CREATE(hdr->serveringCellID, hdr->targetCellID, pstruEventDetails->dEventTime, LTENR_MSG_NAS_HANDOVER_REQUEST);
697 ptrLTENR_MSG msg = pevent.pPacket->pstruMacData->Packet_MACProtocol;
698 msg->logicalChannel = LTENR_LOGICALCHANNEL_CCCH;
699 msg->physicalChannel = LTENR_PHYSICALCHANNEL_PDCCH;
700 msg->transportChannel = LTENR_TRANSPORTCHANNEL_DL_SCH;
701 msg->rlcMode = LTENR_RLCMODE_TM;
702 fn_NetSIm_LTENR_NAS_ADD_HDR_INTO_PACKET(pevent.pPacket, hdr, nasHandoverRequest, LTENR_MSG_NAS_HANDOVER_REQUEST);
703 fnpAddEvent(&pevent);
705void fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_REQUEST() {
706 ptrLTENR_HANDOVER_Hdr hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasHandoverRequest);
707 ptrLTENR_NAS_HANDOVER_REQUEST msg = calloc(1,
sizeof * msg);
708 msg->MME_UE_ID = hdr->AMFID;
709 msg->type = HANDOVER_TYPE_INTRA_LTENR;
710 msg->cause = HANDOVER_CAUSE_RADIO_NETWORK;
711 msg->targetID = hdr->targetCellID;
712 msg->lastVisitedCellID = hdr->serveringCellID;
713 msg->LastVisitedCellType = CELL_TYPE_LARGE;
715 hdr->msgType = LTENR_MSG_NAS_HANDOVER_REQUEST;
716 pstruEventDetails->pPacket->pstruMacData->dontFree =
true;
718 fn_NetSim_NAS_ADD_PACKET_INTO_BUUFER(msg);
720void fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_REQUEST_RECV(ptrLTENR_HANDOVER_Hdr hdr) {
721 fn_NetSim_LTENR_NAS_HANDOVER_REQUEST_ACK(hdr);
725#pragma region EPC_ROUTE
726void fn_NetSim_LTENR_EPC_RouteHOPacket() {
727 NetSim_EVENTDETAILS pevent;
728 NetSim_BUFFER* buffer;
729 NetSim_PACKET* packet = pstruEventDetails->pPacket;
730 ptrLTENR_EPC epc = LTENR_EPC_GET(pstruEventDetails->nDeviceId, pstruEventDetails->nInterfaceId);
731 memcpy(&pevent, pstruEventDetails,
sizeof pevent);
734 NETSIM_ID gnbId = get_first_dest_from_packet(pevent.pPacket);
737 for (i = 0; i < NETWORK->ppstruDeviceList[pstruEventDetails->nDeviceId - 1]->nNumOfInterface; i++)
739 fn_NetSim_Stack_GetConnectedDevice(pstruEventDetails->nDeviceId, i + 1, &j, &k);
742 pevent.nInterfaceId = i + 1;
747 buffer = DEVICE_ACCESSBUFFER(pevent.nDeviceId, pevent.nInterfaceId);
749 if (!fn_NetSim_GetBufferStatus(buffer))
752 pevent.nEventType = MAC_OUT_EVENT;
753 pevent.nPacketId = packet->nPacketId;
754 pevent.nProtocolId = fn_NetSim_Stack_GetMacProtocol(pstruEventDetails->nDeviceId, pstruEventDetails->nInterfaceId);
755 pevent.nSubEventType = 0;
756 pevent.pPacket = NULL;
757 pevent.szOtherDetails = NULL;
758 fnpAddEvent(&pevent);
760 packet->nTransmitterId = pevent.nDeviceId;
761 fn_NetSim_Packet_AddPacketToList(buffer, packet, 0);
762 pstruEventDetails->pPacket = NULL;
765void fn_NetSim_LTENR_EPC_RoutePacket()
767 NetSim_BUFFER* buffer;
768 NetSim_PACKET* packet = pstruEventDetails->pPacket;
770 buffer = DEVICE_ACCESSBUFFER(pstruEventDetails->nDeviceId, pstruEventDetails->nInterfaceId);
772 if (!fn_NetSim_GetBufferStatus(buffer))
775 if (packet->pstruAppData)
777 pstruEventDetails->nApplicationId = packet->pstruAppData->nApplicationId;
778 pstruEventDetails->nSegmentId = packet->pstruAppData->nSegmentId;
780 pstruEventDetails->nEventType = MAC_OUT_EVENT;
781 pstruEventDetails->nPacketId = packet->nPacketId;
782 pstruEventDetails->nProtocolId = fn_NetSim_Stack_GetMacProtocol(pstruEventDetails->nDeviceId, pstruEventDetails->nInterfaceId);
783 pstruEventDetails->nSubEventType = 0;
784 pstruEventDetails->pPacket = NULL;
785 pstruEventDetails->szOtherDetails = NULL;
786 fnpAddEvent(pstruEventDetails);
788 fn_NetSim_Packet_AddPacketToList(buffer, packet, 0);
792#pragma region NAS_INIT
793void fn_NetSim_LTENR_NAS_Init() {
794 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_HANDOVER_REQUEST,
795 "LTENR_GENERATE_NAS_HANDOVER_REQUEST",
796 fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_REQUEST);
797 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_HANDOVER_REQUEST_ACK,
798 "HANDOVER_REQUEST_ACK",
799 fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_REQUEST_ACK);
800 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_HANDOVER_COMMAND,
801 "HANDOVER_REQUEST_COMMAND",
802 fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_COMMAND);
803 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_HANDOVER_COMMAND_HANDLE,
804 "HANDOVER_REQUEST_COMMAND_HANDLE",
805 fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_COMMAND_HANDLE);
806 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_PATH_SWITCH,
808 fn_NetSim_LTENR_NAS_GENERATE_PATH_SWITCH_REQUEST);
809 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_PATH_SWITCH_ACK,
811 fn_NetSim_LTENR_NAS_GENERATE_PATH_SWITCH_REQUEST_ACK);
812 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_UECONTEXTRELEASE,
813 "UE_CONTEXT_RELEASE",
814 fn_NetSim_LTENR_NAS_GENERATE_UE_CONTEXT_RELEASE);
815 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_UECONTEXTRELEASE_ACK,
816 "UE_CONTEXT_RELEASE_ACK",
817 fn_NetSim_LTENR_NAS_GENERATE_UE_CONTEXT_RELEASE_ACK);
818 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_HANDOVER_COMPLETE,
820 fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_COMPLETE);
825void fn_NetSim_NAS_IN() {
826 NetSim_PACKET* packet = pstruEventDetails->pPacket;
827 ptrLTENR_HANDOVER_Hdr hdr = NULL;
828 switch (packet->nControlDataType) {
829 case LTENR_MSG_NAS_HANDOVER_REQUEST:
830 hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasHandoverRequest);
831 fn_NetSim_LTENR_NAS_GENERATE_HANDOVER_REQUEST_RECV(hdr);
834 case LTENR_MSG_NAS_HANDOVER_REQUEST_ACK:
835 hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasHandoverRequestAck);
836 fn_NetSim_LTENR_NAS_HANDOVER_REQUEST_ACK_RECV(hdr);
839 case LTENR_MSG_NAS_HANDOVER_COMMAND:
840 hdr = LTENR_NAS_HDR_GET(packet, nasHandoverTrigger);
841 fn_NetSim_LTENR_NAS_HANDOVER_COMMAND_RECV(hdr);
844 case LTENR_MSG_NAS_HANDOVER_PATH_SWITCH:
845 hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasPathSwitch);
846 fn_NetSim_LTENR_NAS_PATH_SWITCH_REQUEST_RECV(hdr);
849 case LTENR_MSG_NAS_HANDOVER_PATH_SWITCH_ACK:
850 hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, naspathSwitchAck);
851 fn_NetSim_LTENR_NAS_PATH_SWITCH_ACK_RECV(hdr);
854 case LTENR_MSG_NAS_HANDOVER_UE_CONTEXT_RELEASE:
855 hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasUEContextRelease);
856 fn_NetSim_LTENR_NAS_UE_CONTEXT_RELEASE_RECV(hdr);
859 case LTENR_MSG_NAS_HANDOVER_UE_CONTEXT_RELEASE_ACK:
860 hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasUEContextReleaseACK);
861 fn_NetSim_LTENR_NAS_UE_CONTEXT_RELEASE_ACK_RECV(hdr);
864 case LTENR_MSG_NAS_HANDOVER_COMPLETE:
865 hdr = LTENR_NAS_HDR_GET(pstruEventDetails->pPacket, nasHandoverComplete);
866 fn_NetSim_LTENR_NAS_HANDOVER_COMPLETE_RECV();
874#pragma region NAS_HANDER
875void fn_NetSIm_LTENR_NAS_ADD_HDR_INTO_PACKET(NetSim_PACKET* packet, ptrLTENR_HANDOVER_Hdr hdr, UINT hdrID, LTENR_MSGTYPE type) {
876 LTENR_RRC_HDR_ADD_TO_PACKET(packet, hdr, hdrID,
sizeof(hdr), type);
879ptrLTENR_HANDOVER_Hdr LTENR_NAS_HDR_GET(NetSim_PACKET* packet, UINT hdrID)
881 return (ptrLTENR_HANDOVER_Hdr)LTENR_HDR_GET_FROM_PACKET(packet, hdrID);
884void LTENR_NAS_HDR_REMOVE(NetSim_PACKET* packet, UINT hdrID)
886 LTENR_HDR_FREE_FROM_PACKET(packet, hdrID);