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
canghaiwuhen
OpenXG-RAN
Commits
e66bd0e2
Commit
e66bd0e2
authored
Feb 22, 2018
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
RAN API: unify style, declare missing function in header
parent
9a9c867a
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
62 additions
and
74 deletions
+62
-74
openair2/ENB_APP/flexran_agent_ran_api.c
openair2/ENB_APP/flexran_agent_ran_api.c
+53
-68
openair2/ENB_APP/flexran_agent_ran_api.h
openair2/ENB_APP/flexran_agent_ran_api.h
+9
-6
No files found.
openair2/ENB_APP/flexran_agent_ran_api.c
View file @
e66bd0e2
...
@@ -188,157 +188,142 @@ int32_t flexran_get_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
...
@@ -188,157 +188,142 @@ int32_t flexran_get_TA(mid_t mod_id, mid_t ue_id, uint8_t cc_id)
}
}
}
}
uint32_t
flexran_get_total_size_dl_mac_sdus
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint32_t
flexran_get_total_size_dl_mac_sdus
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_sdu_bytes
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_sdu_bytes
;
}
}
uint32_t
flexran_get_total_size_ul_mac_sdus
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint32_t
flexran_get_total_size_ul_mac_sdus
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
eNB_stats
[
cc_id
].
total_ulsch_bytes_rx
;
return
RC
.
mac
[
mod_id
]
->
eNB_stats
[
cc_id
].
total_ulsch_bytes_rx
;
}
}
uint32_t
flexran_get_TBS_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
uint32_t
flexran_get_TBS_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
){
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
TBS
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
TBS
;
}
}
uint32_t
flexran_get_TBS_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint32_t
flexran_get_TBS_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
ulsch_TBS
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
ulsch_TBS
;
}
}
uint16_t
flexran_get_num_prb_retx_dl_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
uint32_t
cc_id
)
{
uint16_t
flexran_get_num_prb_retx_dl_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
rbs_used_retx
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
rbs_used_retx
;
}
}
uint32_t
flexran_get_num_prb_retx_ul_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
uint32_t
cc_id
){
uint32_t
flexran_get_num_prb_retx_ul_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
rbs_used_retx_rx
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
rbs_used_retx_rx
;
}
}
uint16_t
flexran_get_num_prb_dl_tx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
uint32_t
cc_id
){
uint16_t
flexran_get_num_prb_dl_tx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
rbs_used
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
rbs_used
;
}
}
uint16_t
flexran_get_num_prb_ul_rx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
uint32_t
cc_id
){
uint16_t
flexran_get_num_prb_ul_rx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
rbs_used_rx
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
rbs_used_rx
;
}
}
uint8_t
flexran_get_ue_wpmi
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
uint8_t
flexran_get_ue_wpmi
(
mid_t
mod_id
,
mid_t
ue_id
,
uint8_t
cc_id
)
{
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
UE_sched_ctrl
[
ue_id
].
periodic_wideband_pmi
[
cc_id
];
return
RC
.
mac
[
mod_id
]
->
UE_list
.
UE_sched_ctrl
[
ue_id
].
periodic_wideband_pmi
[
cc_id
];
}
}
uint8_t
flexran_get_mcs1_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint8_t
flexran_get_mcs1_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
dlsch_mcs1
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
dlsch_mcs1
;
}
}
uint8_t
flexran_get_mcs2_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint8_t
flexran_get_mcs2_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
dlsch_mcs2
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
dlsch_mcs2
;
}
}
uint8_t
flexran_get_mcs1_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint8_t
flexran_get_mcs1_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
ulsch_mcs1
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
ulsch_mcs1
;
}
}
uint8_t
flexran_get_mcs2_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint8_t
flexran_get_mcs2_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
ulsch_mcs2
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
ulsch_mcs2
;
}
}
uint32_t
flexran_get_total_prb_dl_tx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint32_t
flexran_get_total_prb_dl_tx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_rbs_used
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_rbs_used
;
}
}
uint32_t
flexran_get_total_prb_ul_rx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint32_t
flexran_get_total_prb_ul_rx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_rbs_used_rx
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_rbs_used_rx
;
}
}
uint32_t
flexran_get_total_num_pdu_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint32_t
flexran_get_total_num_pdu_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_num_pdus
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_num_pdus
;
}
}
uint32_t
flexran_get_total_num_pdu_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint32_t
flexran_get_total_num_pdu_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_num_pdus_rx
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_num_pdus_rx
;
}
}
uint64_t
flexran_get_total_TBS_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint64_t
flexran_get_total_TBS_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_pdu_bytes
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_pdu_bytes
;
}
}
uint64_t
flexran_get_total_TBS_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint64_t
flexran_get_total_TBS_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_ulsch_TBS
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
total_ulsch_TBS
;
}
}
int
flexran_get_harq_round
(
mid_t
mod_id
,
uint8_t
cc_id
,
mid_t
ue_id
)
{
int
flexran_get_harq_round
(
mid_t
mod_id
,
uint8_t
cc_id
,
mid_t
ue_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
harq_round
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
harq_round
;
}
}
uint32_t
flexran_get_num_mac_sdu_tx
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
uint32_t
flexran_get_num_mac_sdu_tx
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
num_mac_sdu_tx
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
num_mac_sdu_tx
;
}
}
unsigned
char
flexran_get_mac_sdu_lcid_index
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
,
int
index
)
{
unsigned
char
flexran_get_mac_sdu_lcid_index
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
,
int
index
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
lcid_sdu
[
index
];
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
lcid_sdu
[
index
];
}
}
uint32_t
flexran_get_mac_sdu_size
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
,
int
lcid
)
{
uint32_t
flexran_get_mac_sdu_size
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
,
int
lcid
)
{
if
(
!
mac_is_present
(
mod_id
))
return
0
;
if
(
!
mac_is_present
(
mod_id
))
return
0
;
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
sdu_length_tx
[
lcid
];
return
RC
.
mac
[
mod_id
]
->
UE_list
.
eNB_UE_stats
[
cc_id
][
ue_id
].
sdu_length_tx
[
lcid
];
}
}
...
...
openair2/ENB_APP/flexran_agent_ran_api.h
View file @
e66bd0e2
...
@@ -120,10 +120,10 @@ uint32_t flexran_get_num_mac_sdu_tx(mid_t mod_id, mid_t ue_id, int cc_id);
...
@@ -120,10 +120,10 @@ uint32_t flexran_get_num_mac_sdu_tx(mid_t mod_id, mid_t ue_id, int cc_id);
unsigned
char
flexran_get_mac_sdu_lcid_index
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
,
int
index
);
unsigned
char
flexran_get_mac_sdu_lcid_index
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
,
int
index
);
/*Get MAC size sdus length dl*/
/*Get MAC size sdus length dl*/
uint32_t
flexran_get_size_dl_mac_sdus
(
mid_t
mod_id
,
uint32_
t
cc_id
);
uint32_t
flexran_get_size_dl_mac_sdus
(
mid_t
mod_id
,
in
t
cc_id
);
/*Get MAC size sdus length ul */
/*Get MAC size sdus length ul */
uint32_t
flexran_get_size_ul_mac_sdus
(
mid_t
mod_id
,
uint32_
t
cc_id
);
uint32_t
flexran_get_size_ul_mac_sdus
(
mid_t
mod_id
,
in
t
cc_id
);
/*Get total size DL MAC SDUS*/
/*Get total size DL MAC SDUS*/
uint32_t
flexran_get_total_size_dl_mac_sdus
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
);
uint32_t
flexran_get_total_size_dl_mac_sdus
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
);
...
@@ -144,16 +144,16 @@ uint32_t flexran_get_total_prb_dl_tx_per_ue(mid_t mod_id, mid_t ue_id, int cc_id
...
@@ -144,16 +144,16 @@ uint32_t flexran_get_total_prb_dl_tx_per_ue(mid_t mod_id, mid_t ue_id, int cc_id
uint32_t
flexran_get_total_prb_ul_rx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
);
uint32_t
flexran_get_total_prb_ul_rx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
);
/*Get number of prb for tx per UE DL*/
/*Get number of prb for tx per UE DL*/
uint16_t
flexran_get_num_prb_dl_tx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
uint32_
t
cc_id
);
uint16_t
flexran_get_num_prb_dl_tx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
in
t
cc_id
);
/*Get number of prb for rx per UE UL*/
/*Get number of prb for rx per UE UL*/
uint16_t
flexran_get_num_prb_ul_rx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
uint32_
t
cc_id
);
uint16_t
flexran_get_num_prb_ul_rx_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
in
t
cc_id
);
/*Get number of prb for retx per UE UL*/
/*Get number of prb for retx per UE UL*/
uint32_t
flexran_get_num_prb_retx_ul_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
uint32_
t
cc_id
);
uint32_t
flexran_get_num_prb_retx_ul_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
in
t
cc_id
);
/*Get number of prb for retx per UE*/
/*Get number of prb for retx per UE*/
uint16_t
flexran_get_num_prb_retx_dl_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
uint32_
t
cc_id
);
uint16_t
flexran_get_num_prb_retx_dl_per_ue
(
mid_t
mod_id
,
mid_t
ue_id
,
in
t
cc_id
);
/*MCS before rate adaptation DL*/
/*MCS before rate adaptation DL*/
uint8_t
flexran_get_mcs1_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
);
uint8_t
flexran_get_mcs1_dl
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
);
...
@@ -179,6 +179,9 @@ uint64_t flexran_get_total_TBS_dl(mid_t mod_id, mid_t ue_id, int cc_id);
...
@@ -179,6 +179,9 @@ uint64_t flexran_get_total_TBS_dl(mid_t mod_id, mid_t ue_id, int cc_id);
/*Get total TBS DL*/
/*Get total TBS DL*/
uint64_t
flexran_get_total_TBS_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
);
uint64_t
flexran_get_total_TBS_ul
(
mid_t
mod_id
,
mid_t
ue_id
,
int
cc_id
);
/* Get the current HARQ round for UE ue_id */
int
flexran_get_harq_round
(
mid_t
mod_id
,
uint8_t
cc_id
,
mid_t
ue_id
);
/* Get the number of active component carriers for a specific UE */
/* Get the number of active component carriers for a specific UE */
int
flexran_get_active_CC
(
mid_t
mod_id
,
mid_t
ue_id
);
int
flexran_get_active_CC
(
mid_t
mod_id
,
mid_t
ue_id
);
...
...
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