25#pragma region HEADER_FILES
30#pragma region EPC_INIT
31void LTENR_EPC_ALLOC(NETSIM_ID d, NETSIM_ID in)
33 ptrLTENR_EPC epc = calloc(1,
sizeof * epc);
34 LTENR_EPC_SET(d, in, epc);
40#pragma region EPC_ASSOCIATION
41void LTENR_EPC_ASSOCIATION(NETSIM_ID epcId, NETSIM_ID epcIf,
42 NETSIM_ID gnbId, NETSIM_ID gnbIf,
43 NETSIM_ID ueId, NETSIM_ID ueIf)
45 ptrLTENR_EPC_HLR hlr = LTENR_EPC_HLR_ALLOC();
51 ptrLTENR_EPC epc = LTENR_EPC_GET(epcId, epcIf);
52 LTENR_EPC_HLR_ADD(epc, hlr);
55void LTENR_GNB_SETEPC(NETSIM_ID d, NETSIM_ID in,
56 NETSIM_ID* e, NETSIM_ID* ein)
62 for (i = 0; i < DEVICE(d)->nNumOfInterface; i++)
67 fn_NetSim_Stack_GetConnectedDevice(d, i + 1, &r, &rin);
69 if (DEVICE_INTERFACE(r, rin)->nLocalNetworkProtocol == MAC_PROTOCOL_LTE ||
70 DEVICE_INTERFACE(r, rin)->nLocalNetworkProtocol == MAC_PROTOCOL_LTE_NR)
80ptrLTENR_EPC_HLR LTENR_EPC_FindHLR(NETSIM_ID d, NETSIM_ID in, NETSIM_ID dest)
82 ptrLTENR_EPC epc = LTENR_EPC_GET(d, in);
83 ptrLTENR_EPC_HLR hlr = epc->hlr;
86 if (hlr->ueId == dest)
88 LTENR_EPC_HLR_NEXT(hlr);
93ptrLTENR_EPC_HLR LTENR_EPC_FindHLR_For_GNB(NETSIM_ID d, NETSIM_ID in, NETSIM_ID dest, NETSIM_ID gnbID)
95 ptrLTENR_EPC epc = LTENR_EPC_GET(d, in);
96 ptrLTENR_EPC_HLR hlr = epc->hlr;
99 if (hlr->ueId == dest && hlr->gnbId == gnbID)
101 LTENR_EPC_HLR_NEXT(hlr);
106NETSIM_ID LTENR_EPC_HLR_FindOutInterface(NETSIM_ID d, NETSIM_ID dest)
109 for (i = 0; i < DEVICE(d)->nNumOfInterface; i++)
111 if (DEVICE_INTERFACE(d, i + 1)->nLocalNetworkProtocol == MAC_PROTOCOL_LTE_NR ||
112 DEVICE_INTERFACE(d, i + 1)->nLocalNetworkProtocol == MAC_PROTOCOL_LTE)
114 if(LTENR_EPC_FindHLR(d, i + 1, dest))
121NETSIM_ID LTENR_NSA_EPC_HLR_FindOutInterface(NETSIM_ID d, NETSIM_ID dest)
124 NETSIM_ID splitID = fn_NetSim_LTENR_NSA_Splitting_Alogrithm_For_EPC(dest);
125 for (i = 0; i < DEVICE(d)->nNumOfInterface; i++)
127 if (DEVICE_INTERFACE(d, i + 1)->nLocalNetworkProtocol == MAC_PROTOCOL_LTE_NR ||
128 DEVICE_INTERFACE(d, i + 1)->nLocalNetworkProtocol == MAC_PROTOCOL_LTE)
130 ptrLTENR_EPC_HLR hlr = LTENR_EPC_FindHLR(d, i + 1, dest);
132 if (hlr->gnbId == splitID)
141NETSIM_ID LTENR_NSA_EPC_HLR_FindOutInterface_FOR_GNB(NETSIM_ID d, NETSIM_ID dest, NETSIM_ID gnbID)
144 for (i = 0; i < DEVICE(d)->nNumOfInterface; i++)
146 if (DEVICE_INTERFACE(d, i + 1)->nLocalNetworkProtocol == MAC_PROTOCOL_LTE_NR ||
147 DEVICE_INTERFACE(d, i + 1)->nLocalNetworkProtocol == MAC_PROTOCOL_LTE)
149 ptrLTENR_EPC_HLR hlr = LTENR_EPC_FindHLR(d, i + 1, dest);
151 if (hlr->gnbId == gnbID)
161#pragma region EPC_PACKETPROCESSING
162void LTENR_EPC_NetworkOut()
164 NetSim_PACKET* packet = pstruEventDetails->pPacket;
165 NETSIM_ID d = pstruEventDetails->nDeviceId;
168 if (isBroadcastPacket(packet) ||
169 isMulticastPacket(packet))
172 fn_NetSim_Packet_FreePacket(packet);
176 NETSIM_ID dest = get_first_dest_from_packet(packet);
177 NETSIM_ID outIn = LTENR_EPC_HLR_FindOutInterface(d, dest);
178 NETSIM_ID in = pstruEventDetails->nInterfaceId;
179 ptrLTENR_PROTODATA data = LTENR_PROTODATA_GET(d, in);
180 if (data->isDCEnable && !isLTENRControlPacket(packet)) {
181 if (fn_NetSim_LTENR_NSA_IS_CORE_SPLIT_EXISTS(d, in) ||
182 fn_NetSim_LTENR_NSA_IS_OPTION_X_EXISTS(d, in)) {
183 outIn = LTENR_NSA_EPC_HLR_FindOutInterface(d, dest);
189 print_ltenr_log(
"Device %d is not connected to EPC %d\n", dest, d);
190 fn_NetSim_Packet_FreePacket(packet);
194 NetSim_BUFFER* buf = DEVICE_ACCESSBUFFER(d, outIn);
195 if (!fn_NetSim_GetBufferStatus(buf))
197 pstruEventDetails->nEventType = MAC_OUT_EVENT;
198 pstruEventDetails->nInterfaceId = outIn;
199 pstruEventDetails->nProtocolId = DEVICE_MACLAYER(d, outIn)->nMacProtocolId;
200 pstruEventDetails->pPacket = NULL;
201 fnpAddEvent(pstruEventDetails);
203 fn_NetSim_Packet_AddPacketToList(buf, packet, 0);
204 pstruEventDetails->pPacket = NULL;