NetSim Source Code Help v14.4
All 13 Components
 
Loading...
Searching...
No Matches
LTENR_RRC.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: Shashi Kant Suman *
22* *
23* ----------------------------------------------------------------------------------*/
24
25#pragma region HEADER_FILE
26#include "stdafx.h"
27#include "LTENR_GNBRRC.h"
28#include "LTENR_NAS.h"
29#include "LTENR_PHY.h"
30#pragma endregion
31
32#pragma region INIT_AND_REGISTER_CALLBACK_FUN
33static void LTENR_GNBRRC_register_callback_function()
34{
35 fn_NetSim_LTENR_RRC_TimerEvent_Init();
36 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVNET_GENERATE_MIB,
37 "LTENR_GENERATE_RRC_MIB",
38 fn_NetSim_LTENR_GNBRRC_GenerateMIB);
39 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_SIB1,
40 "LTENR_GENERATE_RRC_SIB1",
41 fn_NetSim_LTENR_GNBRRC_GenerateSIB1);
42 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_SI,
43 "LTENR_GENERATE_RRC_SI",
44 fn_NETSIM_LTENR_SUBEVENT_GENERATE_SI);
45 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_RRC_SETUP_REQUEST,
46 "LTENR_GENERATE_RRC_SETUP_REQUEST",
47 fn_NetSim_LTENR_RRC_GENERATE_RRC_CONN_REQUEST);
48 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_RRC_SETUP,
49 "LTENR_GENERATE_RRC_SETUP",
50 fn_NetSIM_LTENR_RRC_GENERATE_RRCSETUP);
51 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_RRC_SETUP_COMPLETE,
52 "LTENR_GENERATE_RRC_SETUP_COMPLETE",
53 fn_NetSim_LTENR_RRC_GENERATE_RRC_SETUP_COMPLETE);
54 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_RRC_UE_MEASUREMENT_REPORT,
55 "LTENR_GENERATE_RRC_UE_MEASUREMENT_REPORT",
56 fn_NetSIM_LTENR_RRC_GENERATE_UE_MEASUREMENT_REPORT);
57 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_RRC_UE_MEASUREMENT_REPORT_REQUEST,
58 "LTENR_GENERATE_RRC_UE_MEASUREMENT_REPORT_REQUEST",
59 fn_NetSim_LTENR_RRC_UE_Measurement_Report_Request_Handle);
60 LTENR_SUBEVENT_REGISTER(LTENR_SUBEVENT_GENERATE_RRC_RECONFIGURATION,
61 "LTENR_GENERATE_RRC_UE_MEASUREMENT_REPORT",
62 fn_NetSIM_LTENR_RRC_GENERATE_RECONFIGURATION);
63}
64
65void fn_NetSim_LTENR_RRC_Init()
66{
67 LTENR_GNBRRC_register_callback_function();
68 LTENR_RRCMSG_INIT();
69 fn_NetSim_LTENR_NSA_INIT();
70 fn_NetSim_LTENR_NSA_SN_HANDOVER_INIT();
71}
72#pragma endregion
73
74#pragma region MACOUT_AND_MACIN
75void fn_NetSim_LTENR_RRC_MacOut()
76{
77 NetSim_PACKET* packet = pstruEventDetails->pPacket;
78 NETSIM_ID d = pstruEventDetails->nDeviceId;
79 NETSIM_ID in = pstruEventDetails->nInterfaceId;
80 packet->nReceiverId = LTENR_FIND_ASSOCIATEDGNB(d, in);
81 LTENR_CallPDCPOut();
82}
83
84void fn_NetSim_LTENR_RRC_MacIn()
85{
86 NetSim_PACKET* packet = pstruEventDetails->pPacket;
87 NETSIM_ID d = pstruEventDetails->nDeviceId;
88 NETSIM_ID in = pstruEventDetails->nInterfaceId;
89 ptrLTENR_RRC_Hdr hdr = NULL;
90
91 switch (packet->nControlDataType) {
92 case LTENR_MSG_RRC_MIB:
93 hdr = LTENR_RRC_HDR_GET(packet, mibHdrID);
94 fn_NetSim_LTENR_UERRC_MIB_RECV(d, in, hdr->SenderID, hdr->SenderIF, hdr->msg);
95 fn_NetSim_Packet_FreePacket(packet);
96 break;
97 case LTENR_MSG_RRC_SIB1:
98 hdr = LTENR_RRC_HDR_GET(packet, sib1HdrID);
99 fn_NetSim_LTENR_UERRC_SIB1_RECV(d, in, hdr->SenderID, hdr->SenderIF, hdr->msg);
100 fn_NetSim_Packet_FreePacket(packet);
101 break;
102 case LTENR_MSG_RRC_SI:
103 hdr = LTENR_RRC_HDR_GET(packet, siHdrID);
104 fn_NetSim_LTENR_RRC_SI_RECV(d, in, hdr->SenderID, hdr->SenderIF, hdr->msg);
105 fn_NetSim_Packet_FreePacket(packet);
106 break;
107 case LTENR_MSG_RRC_SETUP_REQUEST:
108 hdr = LTENR_RRC_HDR_GET(packet, rrcSetupRequestID);
109 fn_NetSim_LTENR_RRC_SETUP_REQUEST_RECV(d, in, hdr->SenderID, hdr->SenderIF, hdr->msg);
110 fn_NetSim_Packet_FreePacket(packet);
111 break;
112 case LTENR_MSG_RRC_SETUP:
113 hdr = LTENR_RRC_HDR_GET(packet, rrcSetupID);
114 fn_NetSim_LTENR_RRC_SETUP_RECV(d, in, hdr->SenderID, hdr->SenderIF, hdr->msg);
115 fn_NetSim_Packet_FreePacket(packet);
116 break;
117 case LTENR_MSG_RRC_SETUP_COMPLETE:
118 hdr = LTENR_RRC_HDR_GET(packet, rrcSetupCompleteID);
119 fn_NetSim_LTENR_RRC_RRCSETUPCOMPLETE_RECV(d, in, hdr->SenderID, hdr->SenderIF);
120 fn_NetSim_Packet_FreePacket(packet);
121 break;
122 case LTENR_MSG_RRC_UE_MEASUREMENT_REPORT:
123 hdr = LTENR_RRC_HDR_GET(packet, ueMEASID);
124 fn_NetSim_LTENR_RRC_UE_MEASUREMENT_RECV(d, in, hdr->SenderID, hdr->SenderIF, hdr->msg);
125 fn_NetSim_Packet_FreePacket(packet);
126 break;
127 case LTENR_MSG_RRC_RECONFIGURATION:
128 hdr = LTENR_RRC_HDR_GET(packet, rrcReconfigurationID);
129 fn_NetSim_LTENR_RRC_RECONFIGURATION_RECV(d, in, hdr->SenderID, hdr->SenderIF, hdr->msg);
130 fn_NetSim_Packet_FreePacket(packet);
131 break;
132 default:
133 break;
134
135 }
136}
137#pragma endregion
138
139#pragma region ISRRCCONNECTED
140bool fn_NetSim_LTENR_RRC_isConnected(NETSIM_ID d, NETSIM_ID in,
141 NETSIM_ID r, NETSIM_ID rin)
142{
143 if (isUE(d, in)) {
144 ptrLTENR_UERRC rrc = LTENR_UERRC_GET(d, in);
145 if ((rrc->ueRRCState == UERRC_CONNECTED || rrc->ueRRCState == UERRC_INACTIVE) && rrc->ueCMState == UE_CM_CONNECTED) {
146 return true;
147 }
148 else {
149 return false;
150 }
151 }
152 else {
153 if (isUE(r, rin)) {
154 ptrLTENR_UERRC rrc = LTENR_UERRC_GET(r, rin);
155 if ((rrc->ueRRCState == UERRC_CONNECTED || rrc->ueRRCState == UERRC_INACTIVE) && rrc->ueCMState == UE_CM_CONNECTED) {
156 return true;
157 }
158 else {
159 return false;
160 }
161 }
162 }
163 return true;
164}
165
166bool fn_NetSim_LTENR_RRC_isActive(NETSIM_ID d, NETSIM_ID in,
167 NETSIM_ID r, NETSIM_ID rin)
168{
169 if (isUE(d, in)) {
170 ptrLTENR_UERRC rrc = LTENR_UERRC_GET(d, in);
171 if (rrc->ueRRCState == UERRC_CONNECTED && rrc->ueCMState == UE_CM_CONNECTED) {
172 return true;
173 }
174 else {
175 return false;
176 }
177 }
178 else {
179 if (isUE(r, rin)) {
180 ptrLTENR_UERRC rrc = LTENR_UERRC_GET(r, rin);
181 if (rrc->ueRRCState == UERRC_CONNECTED && rrc->ueCMState == UE_CM_CONNECTED) {
182 return true;
183 }
184 else {
185 return false;
186 }
187 }
188 }
189 return true;
190}
191#pragma endregion