Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
f52809a8
Commit
f52809a8
authored
May 02, 2022
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add MAC-RRC UL stubs for F1AP and direct
parent
f75cdbca
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
150 additions
and
22 deletions
+150
-22
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+2
-0
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+1
-1
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+1
-1
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+13
-17
openair2/LAYER2/NR_MAC_gNB/config.c
openair2/LAYER2/NR_MAC_gNB/config.c
+0
-1
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+1
-1
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h
+34
-0
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
+35
-0
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_f1ap.c
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_f1ap.c
+35
-0
openair2/LAYER2/NR_MAC_gNB/main.c
openair2/LAYER2/NR_MAC_gNB/main.c
+20
-1
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
+8
-0
No files found.
cmake_targets/CMakeLists.txt
View file @
f52809a8
...
@@ -1953,6 +1953,8 @@ set (MAC_NR_SRC
...
@@ -1953,6 +1953,8 @@ set (MAC_NR_SRC
${
NR_GNB_MAC_DIR
}
/gNB_scheduler_srs.c
${
NR_GNB_MAC_DIR
}
/gNB_scheduler_srs.c
${
NR_GNB_MAC_DIR
}
/gNB_scheduler_RA.c
${
NR_GNB_MAC_DIR
}
/gNB_scheduler_RA.c
${
NR_GNB_MAC_DIR
}
/mac_rrc_dl_handler.c
${
NR_GNB_MAC_DIR
}
/mac_rrc_dl_handler.c
${
NR_GNB_MAC_DIR
}
/mac_rrc_ul_direct.c
${
NR_GNB_MAC_DIR
}
/mac_rrc_ul_f1ap.c
)
)
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
f52809a8
...
@@ -759,7 +759,7 @@ int main(int argc, char **argv)
...
@@ -759,7 +759,7 @@ int main(int argc, char **argv)
RC
.
nb_nr_mac_CC
=
(
int
*
)
malloc
(
RC
.
nb_nr_macrlc_inst
*
sizeof
(
int
));
RC
.
nb_nr_mac_CC
=
(
int
*
)
malloc
(
RC
.
nb_nr_macrlc_inst
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
RC
.
nb_nr_macrlc_inst
;
i
++
)
for
(
i
=
0
;
i
<
RC
.
nb_nr_macrlc_inst
;
i
++
)
RC
.
nb_nr_mac_CC
[
i
]
=
1
;
RC
.
nb_nr_mac_CC
[
i
]
=
1
;
mac_top_init_gNB
();
mac_top_init_gNB
(
ngran_gNB
);
gNB_mac
=
RC
.
nrmac
[
0
];
gNB_mac
=
RC
.
nrmac
[
0
];
gNB_RRC_INST
rrc
;
gNB_RRC_INST
rrc
;
memset
((
void
*
)
&
rrc
,
0
,
sizeof
(
rrc
));
memset
((
void
*
)
&
rrc
,
0
,
sizeof
(
rrc
));
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
f52809a8
...
@@ -770,7 +770,7 @@ int main(int argc, char **argv)
...
@@ -770,7 +770,7 @@ int main(int argc, char **argv)
RC
.
nb_nr_mac_CC
=
(
int
*
)
malloc
(
RC
.
nb_nr_macrlc_inst
*
sizeof
(
int
));
RC
.
nb_nr_mac_CC
=
(
int
*
)
malloc
(
RC
.
nb_nr_macrlc_inst
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
RC
.
nb_nr_macrlc_inst
;
i
++
)
for
(
i
=
0
;
i
<
RC
.
nb_nr_macrlc_inst
;
i
++
)
RC
.
nb_nr_mac_CC
[
i
]
=
1
;
RC
.
nb_nr_mac_CC
[
i
]
=
1
;
mac_top_init_gNB
();
mac_top_init_gNB
(
ngran_gNB
);
//gNB_MAC_INST* gNB_mac = RC.nrmac[0];
//gNB_MAC_INST* gNB_mac = RC.nrmac[0];
gNB_RRC_INST
rrc
;
gNB_RRC_INST
rrc
;
memset
((
void
*
)
&
rrc
,
0
,
sizeof
(
rrc
));
memset
((
void
*
)
&
rrc
,
0
,
sizeof
(
rrc
));
...
...
openair2/GNB_APP/gnb_config.c
View file @
f52809a8
...
@@ -85,7 +85,8 @@
...
@@ -85,7 +85,8 @@
extern
uint16_t
sf_ahead
;
extern
uint16_t
sf_ahead
;
int
macrlc_has_f1
=
0
;
int
macrlc_has_f1
=
0
;
extern
ngran_node_t
node_type
;
static
ngran_node_t
get_node_type
(
void
);
extern
int
config_check_band_frequencies
(
int
ind
,
int16_t
band
,
uint64_t
downlink_frequency
,
extern
int
config_check_band_frequencies
(
int
ind
,
int16_t
band
,
uint64_t
downlink_frequency
,
int32_t
uplink_frequency_offset
,
uint32_t
frame_type
);
int32_t
uplink_frequency_offset
,
uint32_t
frame_type
);
...
@@ -795,6 +796,7 @@ void RCconfig_nr_macrlc() {
...
@@ -795,6 +796,7 @@ void RCconfig_nr_macrlc() {
paramdef_t
GNBParams
[]
=
GNBPARAMS_DESC
;
paramdef_t
GNBParams
[]
=
GNBPARAMS_DESC
;
paramlist_def_t
GNBParamList
=
{
GNB_CONFIG_STRING_GNB_LIST
,
NULL
,
0
};
paramlist_def_t
GNBParamList
=
{
GNB_CONFIG_STRING_GNB_LIST
,
NULL
,
0
};
ngran_node_t
node_type
=
get_node_type
();
config_get
(
GNBSParams
,
sizeof
(
GNBSParams
)
/
sizeof
(
paramdef_t
),
NULL
);
config_get
(
GNBSParams
,
sizeof
(
GNBSParams
)
/
sizeof
(
paramdef_t
),
NULL
);
int
num_gnbs
=
GNBSParams
[
GNB_ACTIVE_GNBS_IDX
].
numelt
;
int
num_gnbs
=
GNBSParams
[
GNB_ACTIVE_GNBS_IDX
].
numelt
;
...
@@ -825,7 +827,7 @@ void RCconfig_nr_macrlc() {
...
@@ -825,7 +827,7 @@ void RCconfig_nr_macrlc() {
if
(
MacRLC_ParamList
.
numelt
>
0
)
{
if
(
MacRLC_ParamList
.
numelt
>
0
)
{
RC
.
nb_nr_macrlc_inst
=
MacRLC_ParamList
.
numelt
;
RC
.
nb_nr_macrlc_inst
=
MacRLC_ParamList
.
numelt
;
mac_top_init_gNB
(
);
mac_top_init_gNB
(
node_type
);
RC
.
nb_nr_mac_CC
=
(
int
*
)
malloc
(
RC
.
nb_nr_macrlc_inst
*
sizeof
(
int
));
RC
.
nb_nr_mac_CC
=
(
int
*
)
malloc
(
RC
.
nb_nr_macrlc_inst
*
sizeof
(
int
));
for
(
j
=
0
;
j
<
RC
.
nb_nr_macrlc_inst
;
j
++
)
{
for
(
j
=
0
;
j
<
RC
.
nb_nr_macrlc_inst
;
j
++
)
{
...
@@ -2259,8 +2261,8 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up
...
@@ -2259,8 +2261,8 @@ int gNB_app_handle_f1ap_gnb_cu_configuration_update(f1ap_gnb_cu_configuration_up
return
(
ret
);
return
(
ret
);
}
}
void
set_node_type
(
void
)
{
static
ngran_node_t
get_node_type
(
void
)
int
j
;
{
paramdef_t
MacRLC_Params
[]
=
MACRLCPARAMS_DESC
;
paramdef_t
MacRLC_Params
[]
=
MACRLCPARAMS_DESC
;
paramlist_def_t
MacRLC_ParamList
=
{
CONFIG_STRING_MACRLC_LIST
,
NULL
,
0
};
paramlist_def_t
MacRLC_ParamList
=
{
CONFIG_STRING_MACRLC_LIST
,
NULL
,
0
};
paramdef_t
GNBParams
[]
=
GNBPARAMS_DESC
;
paramdef_t
GNBParams
[]
=
GNBPARAMS_DESC
;
...
@@ -2271,24 +2273,19 @@ void set_node_type(void) {
...
@@ -2271,24 +2273,19 @@ void set_node_type(void) {
if
(
MacRLC_ParamList
.
numelt
>
0
)
{
if
(
MacRLC_ParamList
.
numelt
>
0
)
{
RC
.
nb_nr_macrlc_inst
=
MacRLC_ParamList
.
numelt
;
RC
.
nb_nr_macrlc_inst
=
MacRLC_ParamList
.
numelt
;
for
(
j
=
0
;
j
<
RC
.
nb_nr_macrlc_inst
;
j
++
)
{
for
(
int
j
=
0
;
j
<
RC
.
nb_nr_macrlc_inst
;
j
++
)
{
if
(
strcmp
(
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_TRANSPORT_N_PREFERENCE_IDX
].
strptr
),
"f1"
)
==
0
)
{
if
(
strcmp
(
*
(
MacRLC_ParamList
.
paramarray
[
j
][
MACRLC_TRANSPORT_N_PREFERENCE_IDX
].
strptr
),
"f1"
)
==
0
)
{
macrlc_has_f1
=
1
;
macrlc_has_f1
=
1
;
}
}
}
}
}
}
if
(
strcmp
(
*
(
GNBParamList
.
paramarray
[
0
][
GNB_TRANSPORT_S_PREFERENCE_IDX
].
strptr
),
"f1"
)
==
0
)
{
if
(
strcmp
(
*
(
GNBParamList
.
paramarray
[
0
][
GNB_TRANSPORT_S_PREFERENCE_IDX
].
strptr
),
"f1"
)
==
0
)
node_type
=
ngran_gNB_CU
;
return
ngran_gNB_CU
;
}
else
{
else
if
(
macrlc_has_f1
==
0
)
if
(
macrlc_has_f1
==
0
)
{
return
ngran_gNB
;
node_type
=
ngran_gNB
;
else
LOG_I
(
NR_RRC
,
"Setting node_type to ngran_gNB
\n
"
);
return
ngran_gNB_DU
;
}
else
{
node_type
=
ngran_gNB_DU
;
LOG_I
(
NR_RRC
,
"Setting node_type to ngran_gNB_DU
\n
"
);
}
}
}
}
void
nr_read_config_and_init
(
void
)
{
void
nr_read_config_and_init
(
void
)
{
...
@@ -2297,7 +2294,6 @@ void nr_read_config_and_init(void) {
...
@@ -2297,7 +2294,6 @@ void nr_read_config_and_init(void) {
uint32_t
gnb_nb
=
RC
.
nb_nr_inst
;
uint32_t
gnb_nb
=
RC
.
nb_nr_inst
;
RCconfig_NR_L1
();
RCconfig_NR_L1
();
set_node_type
();
RCconfig_nr_macrlc
();
RCconfig_nr_macrlc
();
LOG_I
(
PHY
,
"%s() RC.nb_nr_L1_inst:%d
\n
"
,
__FUNCTION__
,
RC
.
nb_nr_L1_inst
);
LOG_I
(
PHY
,
"%s() RC.nb_nr_L1_inst:%d
\n
"
,
__FUNCTION__
,
RC
.
nb_nr_L1_inst
);
...
...
openair2/LAYER2/NR_MAC_gNB/config.c
View file @
f52809a8
...
@@ -51,7 +51,6 @@
...
@@ -51,7 +51,6 @@
extern
RAN_CONTEXT_t
RC
;
extern
RAN_CONTEXT_t
RC
;
//extern int l2_init_gNB(void);
//extern int l2_init_gNB(void);
extern
void
mac_top_init_gNB
(
void
);
extern
uint8_t
nfapi_mode
;
extern
uint8_t
nfapi_mode
;
void
process_rlcBearerConfig
(
struct
NR_CellGroupConfig__rlc_BearerToAddModList
*
rlc_bearer2add_list
,
void
process_rlcBearerConfig
(
struct
NR_CellGroupConfig__rlc_BearerToAddModList
*
rlc_bearer2add_list
,
...
...
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
View file @
f52809a8
...
@@ -36,7 +36,7 @@
...
@@ -36,7 +36,7 @@
void
set_cset_offset
(
uint16_t
);
void
set_cset_offset
(
uint16_t
);
void
mac_top_init_gNB
(
void
);
void
mac_top_init_gNB
(
ngran_node_t
node_type
);
void
config_common
(
int
Mod_idP
,
void
config_common
(
int
Mod_idP
,
int
pdsch_AntennaPorts
,
int
pdsch_AntennaPorts
,
...
...
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul.h
0 → 100644
View file @
f52809a8
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* conmnc_digit_lengtht@openairinterface.org
*/
#ifndef MAC_RRC_UL_H
#define MAC_RRC_UL_H
#include "platform_types.h"
#include "f1ap_messages_types.h"
typedef
void
(
*
initial_ul_rrc_message_transfer_func_t
)(
module_id_t
module_id
,
const
f1ap_initial_ul_rrc_message_t
*
ul_rrc
);
struct
nr_mac_rrc_ul_if_s
;
void
mac_rrc_ul_direct_init
(
struct
nr_mac_rrc_ul_if_s
*
mac_rrc
);
void
mac_rrc_ul_f1ap_init
(
struct
nr_mac_rrc_ul_if_s
*
mac_rrc
);
#endif
/* MAC_RRC_UL_H */
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_direct.c
0 → 100644
View file @
f52809a8
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* conmnc_digit_lengtht@openairinterface.org
*/
#include "nr_mac_gNB.h"
#include "mac_rrc_ul.h"
static
void
initial_ul_rrc_message_transfer_direct
(
module_id_t
module_id
,
const
f1ap_initial_ul_rrc_message_t
*
ul_rrc
)
{
/* TODO ITTI message for NR_RRC_MAC_IND? */
AssertFatal
(
0
==
1
,
"not implemented
\n
"
);
}
void
mac_rrc_ul_direct_init
(
struct
nr_mac_rrc_ul_if_s
*
mac_rrc
)
{
mac_rrc
->
initial_ul_rrc_message_transfer
=
initial_ul_rrc_message_transfer_direct
;
}
openair2/LAYER2/NR_MAC_gNB/mac_rrc_ul_f1ap.c
0 → 100644
View file @
f52809a8
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* conmnc_digit_lengtht@openairinterface.org
*/
#include "nr_mac_gNB.h"
#include "mac_rrc_ul.h"
static
void
initial_ul_rrc_message_transfer_f1ap
(
module_id_t
module_id
,
const
f1ap_initial_ul_rrc_message_t
*
ul_rrc
)
{
AssertFatal
(
0
==
1
,
"not implemented
\n
"
);
}
void
mac_rrc_ul_f1ap_init
(
struct
nr_mac_rrc_ul_if_s
*
mac_rrc
)
{
mac_rrc
->
initial_ul_rrc_message_transfer
=
initial_ul_rrc_message_transfer_f1ap
;
}
openair2/LAYER2/NR_MAC_gNB/main.c
View file @
f52809a8
...
@@ -173,8 +173,25 @@ size_t dump_mac_stats(gNB_MAC_INST *gNB, char *output, size_t strlen, bool reset
...
@@ -173,8 +173,25 @@ size_t dump_mac_stats(gNB_MAC_INST *gNB, char *output, size_t strlen, bool reset
return
output
-
begin
;
return
output
-
begin
;
}
}
static
void
mac_rrc_init
(
gNB_MAC_INST
*
mac
,
ngran_node_t
node_type
)
{
switch
(
node_type
)
{
case
ngran_gNB_CU
:
AssertFatal
(
1
==
0
,
"nothing to do for CU
\n
"
);
break
;
case
ngran_gNB_DU
:
mac_rrc_ul_f1ap_init
(
&
mac
->
mac_rrc
);
break
;
case
ngran_gNB
:
mac_rrc_ul_direct_init
(
&
mac
->
mac_rrc
);
break
;
default:
AssertFatal
(
0
==
1
,
"Unknown node type %d
\n
"
,
node_type
);
break
;
}
}
void
mac_top_init_gNB
(
void
)
void
mac_top_init_gNB
(
ngran_node_t
node_type
)
{
{
module_id_t
i
;
module_id_t
i
;
gNB_MAC_INST
*
nrmac
;
gNB_MAC_INST
*
nrmac
;
...
@@ -221,6 +238,8 @@ void mac_top_init_gNB(void)
...
@@ -221,6 +238,8 @@ void mac_top_init_gNB(void)
}
}
if
(
!
IS_SOFTMODEM_NOSTATS_BIT
)
if
(
!
IS_SOFTMODEM_NOSTATS_BIT
)
pthread_create
(
&
RC
.
nrmac
[
i
]
->
stats_thread
,
NULL
,
nrmac_stats_thread
,
(
void
*
)
RC
.
nrmac
[
i
]);
pthread_create
(
&
RC
.
nrmac
[
i
]
->
stats_thread
,
NULL
,
nrmac_stats_thread
,
(
void
*
)
RC
.
nrmac
[
i
]);
mac_rrc_init
(
RC
.
nrmac
[
i
],
node_type
);
}
//END for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
}
//END for (i = 0; i < RC.nb_nr_macrlc_inst; i++)
AssertFatal
(
rlc_module_init
(
1
)
==
0
,
"Could not initialize RLC layer
\n
"
);
AssertFatal
(
rlc_module_init
(
1
)
==
0
,
"Could not initialize RLC layer
\n
"
);
...
...
openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h
View file @
f52809a8
...
@@ -60,6 +60,7 @@
...
@@ -60,6 +60,7 @@
/* Interface */
/* Interface */
#include "nfapi_nr_interface_scf.h"
#include "nfapi_nr_interface_scf.h"
#include "NR_PHY_INTERFACE/NR_IF_Module.h"
#include "NR_PHY_INTERFACE/NR_IF_Module.h"
#include "mac_rrc_ul.h"
/* MAC */
/* MAC */
#include "LAYER2/MAC/mac.h"
#include "LAYER2/MAC/mac.h"
...
@@ -685,6 +686,11 @@ typedef struct NR_bler_options {
...
@@ -685,6 +686,11 @@ typedef struct NR_bler_options {
uint8_t
harq_round_max
;
uint8_t
harq_round_max
;
}
NR_bler_options_t
;
}
NR_bler_options_t
;
typedef
struct
nr_mac_rrc_ul_if_s
{
/* TODO add other message types as necessary */
initial_ul_rrc_message_transfer_func_t
initial_ul_rrc_message_transfer
;
}
nr_mac_rrc_ul_if_t
;
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
/*! \brief UE list used by gNB to order UEs/CC for scheduling*/
typedef
struct
{
typedef
struct
{
rnti_t
rnti
;
rnti_t
rnti
;
...
@@ -838,6 +844,8 @@ typedef struct gNB_MAC_INST_s {
...
@@ -838,6 +844,8 @@ typedef struct gNB_MAC_INST_s {
NR_bler_options_t
ul_bler
;
NR_bler_options_t
ul_bler
;
uint8_t
min_grant_prb
;
uint8_t
min_grant_prb
;
uint8_t
min_grant_mcs
;
uint8_t
min_grant_mcs
;
nr_mac_rrc_ul_if_t
mac_rrc
;
}
gNB_MAC_INST
;
}
gNB_MAC_INST
;
#endif
/*__LAYER2_NR_MAC_GNB_H__ */
#endif
/*__LAYER2_NR_MAC_GNB_H__ */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment