NetSim Source Code Help v14.4
All 13 Components
 
Loading...
Searching...
No Matches
LTENR_AMF.c
1/************************************************************************************
2* Copyright (C) 2023 *
3* TETCOS, Bangalore. India *
4* *
5* Tetcos owns the intellectual property rights in the Product and its content. *
6* The copying, redistribution, reselling or publication of any or all of the *
7* Product or its content without express prior written consent of Tetcos is *
8* prohibited. Ownership and / or any other right relating to the software and all *
9* intellectual property rights therein shall remain at all times with Tetcos. *
10* *
11* This source code is licensed per the NetSim license agreement. *
12* *
13* No portion of this source code may be used as the basis for a derivative work, *
14* or used, for any purpose other than its intended use per the NetSim license *
15* agreement. *
16* *
17* This source code and the algorithms contained within it are confidential trade *
18* secrets of TETCOS and may not be used as the basis for any other software, *
19* hardware, product or service. *
20* *
21* Author: Kumar Gaurav *
22* *
23* ----------------------------------------------------------------------------------*/
24
25#pragma region HEADER_FILES
26#include "stdafx.h"
27#include "LTENR_Core.h"
28#include "LTENR_SMF_UPF.h"
29#pragma endregion
30
31#pragma region FIND_AMF_VAR
32ptrLTENR_AMF_VAR LTENR_FIND_NGAP_AMF_VAR(NETSIM_ID AMFID, NETSIM_ID AMFIF) {
33 ptrLTENR_AMF_VAR var = LTENR_AMF_NGAP_GET(AMFID);
34 while (var) {
35 if (var->amfN2ID == AMFID && var->amfN2IF == AMFIF)
36 return var;
37 }
38 return NULL;
39}
40
41ptrLTENR_AMF_VAR LTENR_FIND_GTP_C_AMF_VAR(NETSIM_ID AMFID, NETSIM_ID AMFIF) {
42 ptrLTENR_AMF_VAR var = LTENR_AMF_NAS_MM_GET(AMFID);
43 while (var) {
44 if (var->amfN2ID == AMFID && var->amfN2IF == AMFIF)
45 return var;
46 }
47 return NULL;
48}
49#pragma endregion
50
51#pragma region AMF_SELECTION
52NETSIM_ID LTENR_AMF_GetUeConnectedAmf(NETSIM_ID UEID, NETSIM_ID UEIF) {
53 ptrLTENR_UERRC rrc = LTENR_UERRC_GET(UEID, UEIF);
54 return rrc->SelectedAMFID;
55}
56
57NETSIM_ID LTENR_AMF_GetNewAMF(NETSIM_ID UEID, NETSIM_ID UEIF) {
58 ptrLTENR_UERRC rrc = LTENR_UERRC_GET(UEID, UEIF);
59 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(rrc->SelectedCellID, rrc->SelectedCellIF);
60 return fn_NetSim_Stack_GetDeviceId_asName(pd->connectedAMFName);
61}
62#pragma endregion
63
64#pragma region ADDITION_OF_NODES
65void LTENR_AMF_AddgNB(NETSIM_ID AMFID, NETSIM_ID AMFIF,
66 NETSIM_ID gNBID, NETSIM_ID gNBIF) {
67 ptrLTENR_AMF_VAR AMFVar = LTENR_FIND_NGAP_AMF_VAR(AMFID, AMFIF);
68 ptrLTENR_AMF_INFO gnbInfo = LTENR_AMF_INFO_ALLOC();
69 gnbInfo->gnbN2ID = gNBID;
70 gnbInfo->gnbLTENRIF = fn_NetSim_LTENR_CORE_INTERFACE(gNBID, nGC_INTERFACE_RAN);
71 gnbInfo->gnbN2IF = gNBIF;
72 LTENR_AMF_INFO_ADD(AMFVar->info, gnbInfo);
73}
74
75void LTENR_AMF_AddSMF(NETSIM_ID AMFID, NETSIM_ID AMFIF,
76 NETSIM_ID SMFID, NETSIM_ID SMFIF, ptrLTENR_AMF_VAR AMFVar) {
77 ptrLTENR_AMF_SMF_Info smfInfo = calloc(1, sizeof * smfInfo);
78 smfInfo->SMFID = SMFID;
79 smfInfo->SMFIF = SMFID;
80 AMFVar->smfInfo = smfInfo;
81}
82
83ptrLTENR_AMF_INFO LTENR_AMF_Find_gNB_Info(NETSIM_ID AMFID, NETSIM_ID AMFIF,
84 NETSIM_ID gNBID, NETSIM_ID gNBIF) {
85 ptrLTENR_AMF_VAR AMFVar = LTENR_FIND_NGAP_AMF_VAR(AMFID, AMFIF);
86 ptrLTENR_AMF_INFO info = AMFVar->info;
87 while (info) {
88 if (info->gnbN2ID == gNBID && info->gnbN2IF == gNBIF)
89 return info;
90 info = LIST_NEXT(info);
91 }
92 return NULL;
93}
94
95void LTENR_AMF_AddUE(NETSIM_ID AMFID, NETSIM_ID AMFIF,
96 NETSIM_ID gNBID, NETSIM_ID gNBIF,
97 NETSIM_ID UEID, NETSIM_ID UEIF) {
98 ptrLTENR_AMF_INFO info = LTENR_AMF_Find_gNB_Info(AMFID, AMFIF, gNBID, gNBIF);
99 ptr_LTENR_AMF_UE_LIST list = LTENR_AMF_UE_LIST_ALLOC();
100 list->UEID = UEID;
101 list->UEIF = UEIF;
102 LTENR_AMF_UE_LIST_ADD(info->ueList,list);
103}
104
105void LTENR_AMF_DeleteUE(NETSIM_ID AMFID, NETSIM_ID AMFIF,
106 NETSIM_ID gNBID, NETSIM_ID gNBIF,
107 NETSIM_ID UEID, NETSIM_ID UEIF) {
108 ptrLTENR_AMF_INFO info = LTENR_AMF_Find_gNB_Info(AMFID, AMFIF, gNBID, gNBIF);
109 ptr_LTENR_AMF_UE_LIST list = info->ueList;
110 while (list) {
111 if (list->UEID == UEID && list->UEIF == UEIF)
112 LTENR_AMF_UE_LIST_REMOVE(info->ueList,list);
113 list = LIST_NEXT(list);
114 }
115}
116#pragma endregion
117
118#pragma region CREATE_SESSION_REQUEST
119void LTENR_AMF_CREATE_SESSION_REQUEST(ptrLTENR_CORE_HDR hdr, ptrLTENR_EPSBEARER bearer) {
120
121 ptrLTENR_AMF_SMF_CREATE_SESSION_REQUEST_MSG msg = calloc(1, sizeof * msg);
122 msg->AMFID = hdr->AMFID;
123 msg->AMFIF = hdr->AMFIF;
124 msg->gNBID = hdr->gNBID;
125 msg->gNBIF = hdr->gNBIF;
126 msg->UEID = hdr->UEID;
127 msg->UEIF = hdr->UEIF;
128 msg->uli = hdr->gNBID;
129 ptrLTENR_Bearer_Context bearerRequest = LTENR_Bearer_Context_ALLOC();
130 bearerRequest->epsBearer = bearer;
131 bearerRequest->epsBearerID = ++epsBearer;
132 LTENR_Bearer_Context_ADD(msg->bearer, bearerRequest);
133 hdr->msg = msg;
134 hdr->msgType = LTENR_MSG_CORE_CREATE_SESSION_REQUEST;
135
136 ptrLTENR_GTPC_HEADER apphdr = fn_NetSim_LTENR_GTPC_DEFAULT_HEADER();
137 hdr->apphdr = apphdr;
138
139 NETSIM_IPAddress srcIP = DEVICE_NWADDRESS(hdr->AMFID,
140 fn_NetSim_LTENR_CORE_INTERFACE(hdr->AMFID, nGC_INTERFACE_N11));
141 NETSIM_IPAddress destIP = DEVICE_NWADDRESS(hdr->SMFID, hdr->SMFIF);
142 LTENR_Core_Send_Packet(hdr->AMFID, hdr->SMFID, srcIP, destIP, hdr, sizeof * hdr,
143 LTENR_MSG_CORE_CREATE_SESSION_REQUEST,
144 strLTENR_MSGTYPE[LTENR_MSG_CORE_CREATE_SESSION_REQUEST % (MAC_PROTOCOL_LTE_NR * 100)],
145 CreateSessionRequestID);
146}
147#pragma endregion
148
149#pragma region INITIAL_MSG_RECV
150void fn_NetSim_LTENR_AMF_INITIAL_MSG_RECV(ptrLTENR_CORE_HDR hdr) {
151 NETSIM_ID d = pstruEventDetails->nDeviceId;
152 NETSIM_ID in = pstruEventDetails->nInterfaceId;
153 LTENR_AMF_AddUE(hdr->AMFID, hdr->AMFIF,
154 hdr->gNBID, hdr->gNBIF,
155 hdr->UEID, hdr->UEIF);
156
157 ptrLTENR_CORE_HDR msg = calloc(1, sizeof * msg);
158 memcpy(msg, hdr, sizeof * msg);
159 msg->msg = NULL;
160 //ACTIVATE BEARER
161 ptrLTENR_EPSBEARER bearer = LTENR_EPSBEARER_Create_Default();
162 LTENR_AMF_CREATE_SESSION_REQUEST(msg, bearer);
163}
164#pragma endregion
165
166#pragma region INITIAL_CONTEXT_SETUP_RESPONSE_RECV
167void fn_NetSim_LTENR_SEC_CELL_SelectionAddition(NETSIM_ID UE_ID, NETSIM_ID UE_IF) {
168 ptrLTENR_UERRC rrc = LTENR_UERRC_GET(UE_ID, UE_IF);
169 ptrLTENR_PROTODATA data = LTENR_PROTODATA_GET(UE_ID, UE_IF);
170 if (data->isDCEnable && !rrc->isSNSconnected) {
171 NETSIM_ID ueInterface = fn_NetSim_LTENR_SEC_INTEFACE_FOR_UE(UE_ID, UE_IF);
172 NETSIM_ID SNID = fn_NetSim_LTENR_FIND_BEST_SN_CELL_FOR_UE(UE_ID, ueInterface);
173 if (SNID != 0) {
174 NETSIM_ID SNIF = fn_NetSim_LTENR_INTERFACE_ID_FROM_CONNECTED_DEVICE(UE_ID, ueInterface, SNID);
175 fn_Netsim_NSA_Secondary_Cell_Addition(UE_ID, ueInterface, rrc->SelectedCellID,
176 rrc->SelectedCellIF, SNID, SNIF);
177 rrc->SNID = SNID;
178 rrc->SNIF = SNIF;
179 }
180 }
181}
182void fn_NetSim_LTENR_AMF_INITIAL_CONTEXT_SETUP_RESPONSE_RECV(ptrLTENR_CORE_HDR hdr) {
183 //yet to implement
184 //Add BearerInfoto setup into ue
185 ptrLTENR_UERRC rrc = LTENR_UERRC_GET(hdr->UEID, hdr->UEIF);
186 ptrLTENR_PROTODATA data = LTENR_PROTODATA_GET(hdr->UEID, hdr->UEIF);
187 rrc->ueCMState = UE_CM_CONNECTED;
188 NETSIM_ID UPFIF = fn_NetSim_LTENR_CORE_INTERFACE(hdr->UPFID, nGC_INTERFACE_N3);
189 iptable_add(IP_WRAPPER_GET(hdr->UPFID),
190 DEVICE_NWADDRESS(hdr->UEID, hdr->UEIF),
191 STR_TO_IP4("255.255.255.255"),
192 0,
193 DEVICE_NWADDRESS(hdr->gNBID, fn_NetSim_LTENR_CORE_INTERFACE(hdr->gNBID, nGC_INTERFACE_N3)),
194 1,
195 &DEVICE_NWADDRESS(hdr->UPFID, fn_NetSim_LTENR_CORE_INTERFACE(hdr->UPFID, nGC_INTERFACE_N3)),
196 &UPFIF,
197 1,
198 "LTE_NR");
199}
200#pragma endregion
201
202#pragma region INITIAL_CONTEXT_SETUP_REQUEST
203void fn_NetSim_LTENR_AMF_INITIAL_CONTEXT_SETUP_REQUEST(ptrLTENR_CORE_HDR hdr, ptrLTENR_Bearer_Setup bearer) {
204 hdr->msgType = LTENR_MSG_CORE_INITIAL_CONTEXT_SETUP_REQUEST;
205 ptrLTENR_AMF_INITIAL_CONTEXT_REQUEST msg = calloc(1, sizeof * msg);
206 msg->AMFID = hdr->AMFID;
207 msg->gNBID = hdr->gNBID;
208 msg->UEID = hdr->UEID;
209 msg->pduSessionID = ++pduSessionID;
210 msg->bearer = bearer;
211 hdr->msg = msg;
212
213 ptrLTENR_CORE_NGAP_HEADER apphdr = calloc(1, sizeof * apphdr);
214 apphdr->procedureCode = NGAP_PROCEDURECODE_INITIAL_CONTEXT_SETUP_REQUEST;
215 apphdr->lenghtofIEs = 0;
216 apphdr->noofIEs = 0;
217 hdr->apphdr = apphdr;
218
219 NETSIM_IPAddress srcIP = DEVICE_NWADDRESS(hdr->AMFID,
220 fn_NetSim_LTENR_CORE_INTERFACE(hdr->AMFID, nGC_INTERFACE_N1_N2));
221 NETSIM_IPAddress destIP = DEVICE_NWADDRESS(hdr->gNBID,hdr->gNBIF);
222
223 LTENR_Core_Send_Packet(hdr->AMFID, hdr->gNBID, srcIP, destIP, hdr, sizeof * hdr,
224 LTENR_MSG_CORE_INITIAL_CONTEXT_SETUP_REQUEST,
225 strLTENR_MSGTYPE[LTENR_MSG_CORE_INITIAL_CONTEXT_SETUP_REQUEST % (MAC_PROTOCOL_LTE_NR * 100)],
226 InitialContextSetupRequestID);
227}
228#pragma endregion
229
230#pragma region AMF_CREATE_SESSION_RESPONSE_RECV
231void fn_NetSim_LTENR_AMF_CREATE_SESSION_RESPONSE_RECV(ptrLTENR_CORE_HDR hdr) {
232 ptrLTENR_AMF_SMF_CREATE_SESSION_RESPONSE_MSG msg = hdr->msg;
233 ptrLTENR_Bearer_Activate bearer = msg->Bearer;
234
235 ptrLTENR_Bearer_Setup bearerSetup = LTENR_Bearer_Setup_ALLOC();
236 bearerSetup->epsBearerID = bearer->epsBearerID;
237 bearerSetup->epsBearer = LTENR_EPSBEARER_Copy_Bearer(bearer->epsBearer);
238 bearerSetup->smfteid = bearer->smfte->smfteid;
239 bearerSetup->transportLayerIP = bearer->smfte->TXaddress;
240
241 ptrLTENR_CORE_HDR temp_HDR = calloc(1, sizeof * temp_HDR);
242 memcpy(temp_HDR, hdr, sizeof * temp_HDR);
243 temp_HDR->msgType = LTENR_MSG_CORE_INITIAL_CONTEXT_SETUP_REQUEST;
244 temp_HDR->msg = NULL;
245 fn_NetSim_LTENR_AMF_INITIAL_CONTEXT_SETUP_REQUEST(temp_HDR, bearerSetup);
246}
247#pragma endregion
248
249#pragma region PATH_SWITCH_ACK
250void fn_NetSim_LTENR_GNB_CORE_PATH_SWITCH_ACK_MSG(ptrLTENR_HANDOVER_Hdr hdr) {
251 NETSIM_IPAddress destIP = DEVICE_NWADDRESS(hdr->targetCellID,
252 fn_NetSim_LTENR_CORE_INTERFACE(hdr->targetCellID, nGC_INTERFACE_N1_N2));
253 NETSIM_IPAddress srcIP = DEVICE_NWADDRESS(hdr->targetAMFID, hdr->targetAMFIF);
254 ptrLTENR_NAS_PATH_SWITCH_REQUEST_ACK msg = calloc(1, sizeof * msg);
255 msg->targetGNBID = hdr->targetCellID;
256 msg->associatedEPCtoTarget = hdr->targetAMFID;
257 hdr->msg = msg;
258 hdr->msgType = LTENR_MSG_NAS_HANDOVER_PATH_SWITCH_ACK;
259
260 ptrLTENR_CORE_NGAP_HEADER apphdr = calloc(1, sizeof * apphdr);
261 apphdr->procedureCode = NGAP_PROCEDURECODE_PATH_SWITCH_ACK;
262 apphdr->lenghtofIEs = 0;
263 apphdr->noofIEs = 0;
264 hdr->apphdr = apphdr;
265 iptable_add(IP_WRAPPER_GET(hdr->targetAMFID),
266 destIP,
267 STR_TO_IP4("255.255.255.255"),
268 0,
269 destIP,
270 1,
271 &srcIP,
272 &hdr->targetAMFIF,
273 1,
274 "LTE_NR");
275
276 LTENR_Core_Send_Packet(hdr->targetAMFID, hdr->targetCellID, srcIP, destIP, hdr, sizeof * hdr,
277 LTENR_MSG_NAS_HANDOVER_PATH_SWITCH_ACK,
278 strLTENR_MSGTYPE[LTENR_MSG_NAS_HANDOVER_PATH_SWITCH_ACK % (MAC_PROTOCOL_LTE_NR * 100)],
279 naspathSwitchAck);
280}
281#pragma endregion
282
283#pragma region MODIFY_BEARER_REQUEST
284void fn_NetSim_LTENR_AMF_MODIFY_BEARER_REQUEST(ptrLTENR_HANDOVER_Hdr hdr) {
285 ptrLTENR_UERRC rrc = LTENR_UERRC_GET(hdr->UEID, hdr->UEIF);
286 hdr->msgType = LTENR_MSG_CORE_MODIFY_BEARER_REQUEST;
287 ptrLTENR_AMF_MODIFY_BEARER_REQUEST msg = calloc(1, sizeof * msg);
288 msg->SAMFID = hdr->AMFID;
289 msg->SgNBID = hdr->serveringCellID;
290 msg->TgNBID = hdr->targetCellID;
291 msg->TAMFID = hdr->targetAMFID;
292 msg->UEID = hdr->UEID;
293 msg->bearer = (ptrLTENR_Bearer_Setup)rrc->bearer;
294 hdr->msg = msg;
295
296 NETSIM_ID SMFIF = fn_NetSim_LTENR_CORE_INTERFACE(hdr->associateSMFID, nGC_INTERFACE_N11);
297 NETSIM_ID AMFIF = fn_NetSim_LTENR_CORE_INTERFACE(hdr->targetAMFID, nGC_INTERFACE_N11);
298 NETSIM_IPAddress destIP = DEVICE_NWADDRESS(hdr->associateSMFID, SMFIF);
299 NETSIM_IPAddress srcIP = DEVICE_NWADDRESS(hdr->targetAMFID, AMFIF);
300
301 LTENR_Core_Send_Packet(hdr->targetAMFID, hdr->associateSMFID, srcIP, destIP, hdr, sizeof * hdr,
302 LTENR_MSG_CORE_MODIFY_BEARER_REQUEST,
303 strLTENR_MSGTYPE[LTENR_MSG_CORE_MODIFY_BEARER_REQUEST % (MAC_PROTOCOL_LTE_NR * 100)],
304 ModifyBearerRequestID);
305}
306#pragma endregion
307
308#pragma region PATH_SWITCH_RECV
309void fn_NetSim_SMF_UPF_LTENR_PATH_SWITCH_RECV(ptrLTENR_HANDOVER_Hdr hdr) {
310 ptrLTENR_HANDOVER_Hdr msg = calloc(1, sizeof * msg);
311 memcpy(msg, hdr, sizeof * msg);
312 msg->msg = NULL;
313 ptrLTENR_PROTODATA data = LTENR_PROTODATA_GET(hdr->targetCellID, hdr->targetCellIF);
314 NETSIM_ID UPFID = fn_NetSim_Stack_GetDeviceId_asName(data->connectedUPFName);
315 NETSIM_ID UPFIF = fn_NetSim_LTENR_CORE_INTERFACE(UPFID, nGC_INTERFACE_N3);
316 NETSIM_ID SgnbN2IF = fn_NetSim_LTENR_CORE_INTERFACE(hdr->serveringCellID, nGC_INTERFACE_N1_N2);
317 NETSIM_ID TgnbN2IF = fn_NetSim_LTENR_CORE_INTERFACE(hdr->targetCellID, nGC_INTERFACE_N1_N2);
318
319 if (!LTENR_AMF_Find_gNB_Info(hdr->targetAMFID, hdr->targetAMFIF, hdr->targetCellID, TgnbN2IF))
320 LTENR_AMF_AddgNB(hdr->targetAMFID, hdr->targetAMFIF, hdr->targetCellID, TgnbN2IF);
321
322 LTENR_AMF_DeleteUE(hdr->AMFID, hdr->AMFIF, hdr->serveringCellID, SgnbN2IF, hdr->UEID, hdr->UEIF);
323 LTENR_AMF_AddUE(hdr->targetAMFID, hdr->targetAMFIF, hdr->targetCellID, TgnbN2IF, hdr->UEID, hdr->UEIF);
324
325 iptable_delete(IP_WRAPPER_GET(UPFID),
326 DEVICE_NWADDRESS(hdr->UEID, hdr->UEIF),
327 DEVICE_NWADDRESS(UPFID, UPFIF), "LTE_NR");
328
329 iptable_add(IP_WRAPPER_GET(UPFID),
330 DEVICE_NWADDRESS(hdr->UEID, hdr->UEIF),
331 STR_TO_IP4("255.255.255.255"),
332 0,
333 DEVICE_NWADDRESS(hdr->targetCellID, fn_NetSim_LTENR_CORE_INTERFACE(hdr->targetCellID, nGC_INTERFACE_N3)),
334 1,
335 &DEVICE_NWADDRESS(UPFID, fn_NetSim_LTENR_CORE_INTERFACE(UPFID, nGC_INTERFACE_N3)),
336 &UPFIF,
337 1,
338 "LTE_NR");
339
340 fn_NetSim_LTENR_AMF_MODIFY_BEARER_REQUEST(msg);
341}
342#pragma endregion
343
344#pragma region MODIFY_BEARER_RESPONSE_RECV
345void fn_NetSim_SMF_UPF_LTENR_MODIFY_BEARER_RESPONSE_RECV(ptrLTENR_HANDOVER_Hdr hdr) {
346 ptrLTENR_HANDOVER_Hdr msg = calloc(1, sizeof * msg);
347 memcpy(msg, hdr, sizeof * msg);
348 msg->msg = NULL;
349 fn_NetSim_LTENR_GNB_CORE_PATH_SWITCH_ACK_MSG(msg);
350}
351#pragma endregion
352
353#pragma region AMF_OUT_AND_IN
354void fn_NetSim_LTENR_AMF_PACKET_HANDLER() {
355 NetSim_PACKET* packet = pstruEventDetails->pPacket;
356 NETSIM_ID d = pstruEventDetails->nDeviceId;
357 NETSIM_ID in = pstruEventDetails->nInterfaceId;
358 ptrLTENR_CORE_HDR hdr = NULL;
359 ptrLTENR_HANDOVER_Hdr handoverHdr = NULL;
360
361 switch (packet->nControlDataType)
362 {
363 case LTENR_MSG_CORE_INITIAL_UE_MESSAGE:
364 hdr = LTENR_CORE_HDR_GET_FROM_PACKET(packet, InitalUEMsgHDRID);
365 fn_NetSim_LTENR_AMF_INITIAL_MSG_RECV(hdr);
366 fn_NetSim_Packet_FreePacket(packet);
367 break;
368 case LTENR_MSG_CORE_CREATE_SESSION_RESPONSE:
369 hdr = LTENR_CORE_HDR_GET_FROM_PACKET(packet, CreateSessionResponseID);
370 fn_NetSim_LTENR_AMF_CREATE_SESSION_RESPONSE_RECV(hdr);
371 fn_NetSim_Packet_FreePacket(packet);
372 break;
373 case LTENR_MSG_CORE_INITIAL_CONTEXT_SETUP_RESPONSE:
374 hdr = LTENR_CORE_HDR_GET_FROM_PACKET(packet, InitialContextSetupResponseID);
375 fn_NetSim_LTENR_AMF_INITIAL_CONTEXT_SETUP_RESPONSE_RECV(hdr);
376 fn_NetSim_Packet_FreePacket(packet);
377 break;
378 case LTENR_MSG_NAS_HANDOVER_PATH_SWITCH:
379 handoverHdr = LTENR_CORE_HDR_GET_FROM_PACKET(packet, nasPathSwitch);
380 fn_NetSim_SMF_UPF_LTENR_PATH_SWITCH_RECV(handoverHdr);
381 fn_NetSim_Packet_FreePacket(packet);
382 break;
383 case LTENR_MSG_CORE_MODIFY_BEARER_RESPONSE:
384 handoverHdr = LTENR_CORE_HDR_GET_FROM_PACKET(packet, ModifyBearerResponseID);
385 fn_NetSim_SMF_UPF_LTENR_MODIFY_BEARER_RESPONSE_RECV(handoverHdr);
386 fn_NetSim_Packet_FreePacket(packet);
387 break;
388 default:
389 break;
390 }
391}
392#pragma endregion
393
394#pragma region AMF_INIT
395void LTENR_AMF_N2_INTERFACE_INIT(NETSIM_ID AMFID) {
396 ptrLTENR_PROTODATA data = LTENR_PROTODATA_GET(AMFID, 0);
397 ptrLTE_NR_NGAP_DATA list = data->NGAPDATA;
398 ptrLTENR_AMF_VAR var = NULL;
399 NETSIM_ID AMFIF;
400 while (list) {
401 list->in = fn_NetSim_LTENR_CORE_INTERFACE(AMFID, list->IFType);
402 AMFIF = list->in;
403 ptrLTENR_AMF_VAR info = LTENR_AMF_VAR_ALLOC();
404 info->amfN2ID = AMFID;
405 info->amfN2IF = AMFIF;
406 info->interfacetype = nGC_INTERFACE_N1_N2;
407 LTENR_AMF_VAR_ADD(var, info);
408
409 iptable_add(IP_WRAPPER_GET(AMFID),
410 list->destIPaddr,
411 STR_TO_IP4("255.255.255.255"),
412 0,
413 list->destIPaddr,
414 1,
415 &DEVICE_NWADDRESS(AMFID, AMFIF),
416 &AMFIF,
417 1,
418 "LTE_NR");
419 list = LTENR_NGAP_DATA_NEXT(list);
420 }
421 LTENR_AMF_NGAP_SET(AMFID, var);
422}
423
424void LTENR_AMF_N11_INTERFACE_INIT(NETSIM_ID AMFID) {
425 ptrLTENR_PROTODATA data = LTENR_PROTODATA_GET(AMFID, 0);
426 ptrLTE_NR_N11STACK_DATA list = data->N11STACKDATA;
427 ptrLTENR_AMF_VAR var = NULL;
428 NETSIM_ID AMFIF;
429 while (list) {
430 list->in = fn_NetSim_LTENR_CORE_INTERFACE(AMFID, list->IFType);
431 AMFIF = list->in;
432 ptrLTENR_AMF_VAR info = LTENR_AMF_VAR_ALLOC();
433 info->amfN2ID = AMFID;
434 info->amfN2IF = AMFIF;
435 info->interfacetype = nGC_INTERFACE_N11;
436 LTENR_AMF_VAR_ADD(var, info);
437 //AMF--N11--SMF coonected via p2p link
438 NETSIM_ID r, rin;
439 fn_NetSim_Stack_GetConnectedDevice(AMFID, AMFIF, &r, &rin);
440 LTENR_AMF_AddSMF(AMFID, AMFIF, r, rin, info);
441
442 iptable_add(IP_WRAPPER_GET(AMFID),
443 list->destIPaddr,
444 STR_TO_IP4("255.255.255.255"),
445 0,
446 list->destIPaddr,
447 1,
448 &DEVICE_NWADDRESS(AMFID, AMFIF),
449 &AMFIF,
450 1,
451 "LTE_NR");
452 list = LTENR_N11STACK_DATA_NEXT(list);
453 }
454 LTENR_AMF_NAS_MM_SET(AMFID, var);
455}
456
457void fn_NetSim_LTENR_AMF_INIT(NETSIM_ID AMFID) {
458 ptrLTENR_PROTODATA data = LTENR_PROTODATA_GET(AMFID, 0);
459
460 if (data->isN11STACK) {
461 LTENR_AMF_N11_INTERFACE_INIT(AMFID);
462 }
463 if (data->isNGAPDATA) {
464 LTENR_AMF_N2_INTERFACE_INIT(AMFID);
465 }
466}
467#pragma endregion
ptrLTENR_AMF_SMF_Info smfInfo
Definition LTENR_Core.h:186
ptrLTENR_AMF_INFO info
Definition LTENR_Core.h:185
ptrLTENR_EPSBEARER epsBearer
Definition LTENR_Core.h:106
ptrLTENR_FULLY_QUALIFIED_TEID smfte
Definition LTENR_Core.h:107
ptrLTENR_EPSBEARER epsBearer
Definition LTENR_Core.h:89
NETSIM_IPAddress transportLayerIP
Definition LTENR_Core.h:126
ptrLTENR_EPSBEARER epsBearer
Definition LTENR_Core.h:124
LTENR_MSGTYPE msgType
LTENR_CORE_NGAP_PROCEDURECODE procedureCode
Definition LTENR_Core.h:275