New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
E2 interface doesn't decode CONTROL request message correctly #468
Comments
hi guys,
can you please share the gnb.log?
thanks,
Justin
Justin Tallon
Engineering Manager
Software Radio Systems
***@***.***
www.srs.io
Barcelona, Spain
[image: twitter] <https://twitter.com/srssystems>
[image: linkedin] <https://www.linkedin.com/in/justin-tallon-71807136/>
…On Mon, Feb 12, 2024 at 10:27 AM Haoxin Sun ***@***.***> wrote:
Issue Description
Using the latest version of srsRAN and FlexRIC, I'm able to run the KPM
xApp as described in the tutorial. However, when we tried to run the RC
xApp xapp_oran_ctrl in FlexRIC, the gNB doesn't seem to decode the
CONTROL request message correctly.
Setup Details
As written in the tutorial, we are using the branch br-flexric of
FlexRIC, and also the latest version of srsRAN. We don't change the code on
both sides.
Expected Behavior
We expect that the gNB can correctly decode the CONTROL request message
from xApp / RIC.
Actual Behaviour
After digging into the code, we found that the SETUP request and response
are correct.
But in lib/e2/e2sm/e2sm_rc/e2sm_rc_control_action_du_executor.cpp, when
the gNB decodes the CONTROL request message from RIC in the function
e2sm_rc_control_action_2_6_du_executor::convert_to_du_config_request() ,
it only finds RAN parameter ID 1, all other RAN parameter IDs are missing
(including 11 and 12). Then, ctrl_cfg would be empty.
Therefore, in the function:
e2sm_rc_control_action_2_6_du_executor::execute_ric_control_action(), it
will return return_ctrl_failure(req). And finally the gNB sends the
CONTROL failure message to RIC by the function: send_e2_ric_control_failure(e2_request,
e2_response) in the file lib/e2/procedures/e2_ric_control_procedure.cpp.
Steps to reproduce the problem
The gNB config files is like this:
gnb_id: 147
slicing:
- sst: 1
sd: 0
amf:
addr: 10.43.81.162
bind_addr: 10.42.1.19
ru_sdr:
device_driver: uhd
device_args:
# clock:
# sync:
srate: 23.040
otw_format: sc12
tx_gain: 80
rx_gain: 40
cell_cfg:
dl_arfcn: 632628
band: 78
channel_bandwidth_MHz: 20
common_scs: 30
plmn: "00101"
tac: 1
pci: 1
nof_antennas_ul: 1
nof_antennas_dl: 1
pdsch:
mcs_table: qam256
log:
filename: /tmp/gnb.log
all_level: debug
pcap:
e2ap_enable: true
e2ap_filename: /tmp/gnb_e2ap.pcap
e2:
enable_du_e2: true # Enable DU E2 agent (one for each DU instance)
e2sm_kpm_enabled: false # Enable KPM service module
e2sm_rc_enabled: true
addr: 10.42.1.18 # RIC IP address
bind_addr: 10.42.1.19 # A local IP that the E2 agent binds to for traffic from the RIC. ONLY required if running the RIC on a separate machine.
port: 36421 # RIC port
metrics:
rlc_json_enable: 1 # Enable RLC metrics reporting (need to deliver measurements to E2SM_KPM service model)
rlc_report_period: 1000 # Set reporting period to 1s
FlexRIC config:
SM_DIR = "/usr/local/lib/flexric/"
Name = "NearRT_RIC"
NearRT_RIC_IP = "10.42.1.18"
E2_Port = 36421
E42_Port = 36422
xapp_oran_ctrl config:
SM_DIR = "/usr/local/lib/flexric/"
Name = "xApp"
NearRT_RIC_IP = "10.42.1.18"
E42_Port = 36422
Additional Information
As described in the discussion, @RobinWie <https://github.com/RobinWie>
also met this problem.
The captured E2 pcap is here:
e2ap.zip
<https://github.com/srsran/srsRAN_Project/files/14236728/e2ap.zip>
—
Reply to this email directly, view it on GitHub
<#468>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AATLGFDCOFVTZ7TQOIUS43LYTHN7VAVCNFSM6AAAAABDEMPZJ2VHI2DSMVQWIX3LMV43ASLTON2WKOZSGEZDSNZSGA3TEOA>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
Here is the gNB log. Inside it, we add one line in
And we only get one line in the log:
So it seems that only ID 1 is parsed. |
only parameters 11 & 12 are supported, what parameter are you trying to use? |
I think the xApp uses all RAN parameters (as the From the gNB code, it seems that using more than 11 and 12 doesn't hurt, as in the for loop mentioned above they are just skipped. But now only ID 1 is parsed in the for loop, which is unexpected... |
Hi, I tried more things with this xApp. If I only keep parameter 12 in the control message in xApp and remove all other fields, the gNB can decode this ID. But the type is decoded wrong, and thus the value of
Here is how I build the control message with only one ID in FlexRIC's
|
Hi Haoxin! Thanks for your analysis, let us reproduce it on our end and get back to you! Regards, |
Another thing I notice is that in the O-RAN spec, parameter 11 and 12 should be of type "Key Flag False", and FlexRIC follows this rule. But in the code: Will this be a potential problem? Therefore, I tried to change the type in the xApp from
|
Hi, indeed, the asn1 encoding of e2sm_rc parameters is not working properly. We investigate this issue. |
Hi, I also have this same issue and was able to repeat the steps. I see someone was assigned to work on this but is there a work around for the moment? Thanks! |
We can repeat the same results as well. Something else I noticed while reading the code and trying to debug this, in e2sm_rc.h, within the definition of struct ran_param_value_c, when defining its private member c with choice_buffer_t, int64_t is not included. Similarly in e2sm_rc.cpp, in the definition of void ran_param_value_c::set, within case types::value_int, the code directly break without something like c.init<int64_t>(), I'm not sure if this is intentional or if it will cause any subsequent issues once the type is decoded correctly (to int of course). |
@HaoxinSEU, could you check again with the |
Hi @pgawlowicz, Thanks for the information! Sorry but currently I'm working on another topic and may not have enough time to setup the test... Maybe other participants under this issue can give a hand on this. But still much thanks for the kind help and the new code! |
I can confirm that with the latest commit (1483bda) which includes the changes from 24a5645, that the flexric and xapp no longer crash when decoding the E2 control message with the following patch applied to the flexric xapp from the br-flexric branch.
However, if I also include the following changes to the xapp which should limit the PDSCH PRBs for UE 0 (rnti=x4601) to 5, it does not appear to take effect as shown in the attached gnb.log.gz.
On this line
I would also suggest the following changes to the srsRAN_Project code for the gnb log file information.
|
Hello, everyone! I've managed to spot the bug here and solved it using the following patch
The issue is that in the current implementation each value parsed is placed in a new Keep in mind that the enum in the flexric xApp still needs to be fixed using the patch provided by wdgj in the comment above Here is a screenshot of my test using srsue. That sharp drop in bitrate is the moment the xApp changed the PRB quote. The logs are attached in case someone is interested. |
@pgawlowicz @HaoxinSEU I can confirm that this is working with @gckopper changes. Thank you to everyone who helped with this!
|
Hi @gckopper, thanks for your interest in the project and for the patch. Indeed, this was an issue here. We are currently refactoring the code and will be releasing the updated version soon. |
Issue Description
Using the latest version of srsRAN and FlexRIC, I'm able to run the KPM xApp as described in the tutorial. However, when we tried to run the RC xApp
xapp_oran_ctrl
in FlexRIC, the gNB doesn't seem to decode the CONTROL request message correctly.Setup Details
As written in the tutorial, we are using the branch
br-flexric
of FlexRIC, and also the latest version of srsRAN. We don't change the code on gNB side.We change the
slice_level_PRB_quota_param_id_e
inxapp_oran_ctrl
to skip ID 4, so it's aligned with the gNB and O-RAN spec.Expected Behavior
We expect that the gNB can correctly decode the CONTROL request message from xApp / RIC.
Actual Behaviour
After digging into the code, we found that the SETUP request and response are correct.
But in
lib/e2/e2sm/e2sm_rc/e2sm_rc_control_action_du_executor.cpp
, when the gNB decodes the CONTROL request message from RIC in the functione2sm_rc_control_action_2_6_du_executor::convert_to_du_config_request()
, it only finds RAN parameter ID 1, all other RAN parameter IDs are missing (including 11 and 12). Then,ctrl_cfg
would be empty.Therefore, in the function:
e2sm_rc_control_action_2_6_du_executor::execute_ric_control_action()
, it will returnreturn_ctrl_failure(req)
. And finally the gNB sends the CONTROL failure message to RIC by the function:send_e2_ric_control_failure(e2_request, e2_response)
in the filelib/e2/procedures/e2_ric_control_procedure.cpp
.Steps to reproduce the problem
The gNB config files is like this:
FlexRIC config:
Additional Information
As described in the discussion, @RobinWie also met this problem.
The captured E2 pcap is here:
e2ap.zip
The text was updated successfully, but these errors were encountered: