libe3 0.2.5
C++ library for E3AP RAN vendor integration
Loading...
Searching...
No Matches
e3_encoder.cpp
Go to the documentation of this file.
1/**
2 * @file e3_encoder.cpp
3 * @brief Base encoder implementation and convenience methods
4 *
5 * SPDX-FileCopyrightText: Copyright (c) 2026 Northeastern University
6 * SPDX-License-Identifier: Apache-2.0
7 */
8
10#include "libe3/logger.hpp"
11
12namespace libe3 {
13
14// Convenience method implementations
15
17 uint32_t message_id,
18 const std::string& e3ap_protocol_version,
19 const std::string& dapp_name,
20 const std::string& dapp_version,
21 const std::string& vendor
22) {
24 SetupRequest req;
25 req.e3ap_protocol_version = e3ap_protocol_version;
26 req.dapp_name = dapp_name;
27 req.dapp_version = dapp_version;
28 req.vendor = vendor;
29 pdu.message_id = message_id;
30 pdu.choice = req;
31 return encode(pdu);
32}
33
35 uint32_t message_id,
36 uint32_t request_id,
37 ResponseCode response_code,
38 const std::optional<std::string>& e3ap_protocol_version,
39 const std::optional<uint32_t>& dapp_identifier,
40 const std::string& ran_identifier,
41 const std::optional<std::vector<RanFunctionDef>>& ran_function_list
42) {
44 SetupResponse resp;
45 resp.request_id = request_id;
46 resp.response_code = response_code;
47 resp.e3ap_protocol_version = e3ap_protocol_version;
48 resp.dapp_identifier = dapp_identifier;
49 resp.ran_identifier = ran_identifier;
50 if (ran_function_list.has_value()) {
51 resp.ran_function_list = ran_function_list.value();
52 }
53 pdu.message_id = message_id;
54 pdu.choice = resp;
55 return encode(pdu);
56}
57
59 uint32_t message_id,
60 uint32_t dapp_identifier,
61 uint32_t ran_function_identifier,
62 const std::vector<uint32_t>& telemetry_identifier_list,
63 const std::vector<uint32_t>& control_identifier_list,
64 const std::optional<uint32_t>& subscription_time
65) {
68 req.dapp_identifier = dapp_identifier;
69 req.ran_function_identifier = ran_function_identifier;
70 req.telemetry_identifier_list = telemetry_identifier_list;
71 req.control_identifier_list = control_identifier_list;
72 req.subscription_time = subscription_time;
73 pdu.message_id = message_id;
74 pdu.choice = req;
75 return encode(pdu);
76}
77
79 uint32_t message_id,
80 uint32_t dapp_identifier,
81 uint32_t subscription_id
82) {
85 del.dapp_identifier = dapp_identifier;
86 del.subscription_id = subscription_id;
87 pdu.message_id = message_id;
88 pdu.choice = del;
89 return encode(pdu);
90}
91
93 uint32_t message_id,
94 uint32_t request_id,
95 uint32_t dapp_identifier,
96 ResponseCode response_code,
97 const std::optional<uint32_t>& subscription_id
98) {
101 resp.request_id = request_id;
102 resp.dapp_identifier = dapp_identifier;
103 resp.response_code = response_code;
104 resp.subscription_id = subscription_id;
105 pdu.message_id = message_id;
106 pdu.choice = resp;
107 return encode(pdu);
108}
109
111 uint32_t message_id,
112 uint32_t dapp_identifier,
113 uint32_t ran_function_identifier,
114 const std::vector<uint8_t>& protocol_data
115) {
118 msg.dapp_identifier = dapp_identifier;
119 msg.ran_function_identifier = ran_function_identifier;
120 msg.protocol_data = protocol_data;
121 pdu.message_id = message_id;
122 pdu.choice = msg;
123 return encode(pdu);
124}
125
127 uint32_t message_id,
128 uint32_t dapp_identifier,
129 uint32_t ran_function_identifier,
130 uint32_t control_identifier,
131 const std::vector<uint8_t>& action_data
132) {
134 DAppControlAction action;
135 action.dapp_identifier = dapp_identifier;
136 action.ran_function_identifier = ran_function_identifier;
137 action.control_identifier = control_identifier;
138 action.action_data = action_data;
139 pdu.message_id = message_id;
140 pdu.choice = action;
141 return encode(pdu);
142}
143
145 uint32_t message_id,
146 uint32_t dapp_identifier,
147 uint32_t ran_function_identifier,
148 const std::vector<uint8_t>& report_data
149) {
151 DAppReport report;
152 report.dapp_identifier = dapp_identifier;
153 report.ran_function_identifier = ran_function_identifier;
154 report.report_data = report_data;
155 pdu.message_id = message_id;
156 pdu.choice = report;
157 return encode(pdu);
158}
159
161 uint32_t message_id,
162 uint32_t dapp_identifier,
163 uint32_t ran_function_identifier,
164 const std::vector<uint8_t>& xapp_control_data
165) {
167 XAppControlAction action;
168 action.dapp_identifier = dapp_identifier;
169 action.ran_function_identifier = ran_function_identifier;
170 action.xapp_control_data = xapp_control_data;
171 pdu.message_id = message_id;
172 pdu.choice = action;
173 return encode(pdu);
174}
175
177 uint32_t message_id,
178 uint32_t request_id,
179 ResponseCode response_code
180) {
182 MessageAck ack;
183 ack.request_id = request_id;
184 ack.response_code = response_code;
185 pdu.message_id = message_id;
186 pdu.choice = ack;
187 return encode(pdu);
188}
189
190} // namespace libe3
EncodeResult< EncodedMessage > encode_subscription_response(uint32_t message_id, uint32_t request_id, uint32_t dapp_identifier, ResponseCode response_code, const std::optional< uint32_t > &subscription_id=std::nullopt)
Create and encode a Subscription Response PDU.
EncodeResult< EncodedMessage > encode_setup_request(uint32_t message_id, const std::string &e3ap_protocol_version, const std::string &dapp_name, const std::string &dapp_version, const std::string &vendor)
Create and encode a Setup Request PDU.
EncodeResult< EncodedMessage > encode_dapp_control_action(uint32_t message_id, uint32_t dapp_identifier, uint32_t ran_function_identifier, uint32_t control_identifier, const std::vector< uint8_t > &action_data)
Create and encode a dApp Control Action PDU.
EncodeResult< EncodedMessage > encode_xapp_control_action(uint32_t message_id, uint32_t dapp_identifier, uint32_t ran_function_identifier, const std::vector< uint8_t > &xapp_control_data)
Create and encode an xApp Control Action PDU.
EncodeResult< EncodedMessage > encode_subscription_request(uint32_t message_id, uint32_t dapp_identifier, uint32_t ran_function_identifier, const std::vector< uint32_t > &telemetry_identifier_list, const std::vector< uint32_t > &control_identifier_list, const std::optional< uint32_t > &subscription_time=std::nullopt)
Create and encode a Subscription Request PDU.
EncodeResult< EncodedMessage > encode_subscription_delete(uint32_t message_id, uint32_t dapp_identifier, uint32_t subscription_id)
Create and encode a Subscription Delete PDU.
EncodeResult< EncodedMessage > encode_message_ack(uint32_t message_id, uint32_t request_id, ResponseCode response_code)
Create and encode a Message Acknowledgment PDU.
virtual EncodeResult< EncodedMessage > encode(const Pdu &pdu)=0
Encode a PDU to bytes.
EncodeResult< EncodedMessage > encode_indication_message(uint32_t message_id, uint32_t dapp_identifier, uint32_t ran_function_identifier, const std::vector< uint8_t > &protocol_data)
Create and encode an Indication Message PDU.
EncodeResult< EncodedMessage > encode_setup_response(uint32_t message_id, uint32_t request_id, ResponseCode response_code, const std::optional< std::string > &e3ap_protocol_version=std::nullopt, const std::optional< uint32_t > &dapp_identifier=std::nullopt, const std::string &ran_identifier="", const std::optional< std::vector< RanFunctionDef > > &ran_function_list=std::nullopt)
Create and encode a Setup Response PDU.
EncodeResult< EncodedMessage > encode_dapp_report(uint32_t message_id, uint32_t dapp_identifier, uint32_t ran_function_identifier, const std::vector< uint8_t > &report_data)
Create and encode a dApp Report PDU.
Abstract E3 Encoder interface for PDU encoding/decoding.
Logging facility for libe3.
ResponseCode
E3AP response codes.
Definition types.hpp:101
@ SUBSCRIPTION_DELETE
Definition types.hpp:113
@ SUBSCRIPTION_RESPONSE
Definition types.hpp:114
@ SUBSCRIPTION_REQUEST
Definition types.hpp:112
@ XAPP_CONTROL_ACTION
Definition types.hpp:118
@ DAPP_CONTROL_ACTION
Definition types.hpp:116
tl::expected< T, ErrorCode > EncodeResult
Result type for encoding/decoding operations.
E3AP dApp Control Action structure.
Definition types.hpp:272
uint32_t ran_function_identifier
Definition types.hpp:274
std::vector< uint8_t > action_data
Definition types.hpp:276
uint32_t control_identifier
Control identifier.
Definition types.hpp:275
E3AP dApp Report structure.
Definition types.hpp:293
uint32_t dapp_identifier
Definition types.hpp:294
std::vector< uint8_t > report_data
Definition types.hpp:296
uint32_t ran_function_identifier
Definition types.hpp:295
E3AP Indication Message structure.
Definition types.hpp:263
uint32_t ran_function_identifier
RAN function identifier.
Definition types.hpp:265
std::vector< uint8_t > protocol_data
Definition types.hpp:266
E3AP Message Acknowledgment structure.
Definition types.hpp:285
ResponseCode response_code
Response code (positive/negative).
Definition types.hpp:287
uint32_t request_id
ID of the request being acknowledged.
Definition types.hpp:286
Generic E3AP PDU structure.
Definition types.hpp:345
PduChoice choice
Definition types.hpp:347
uint32_t message_id
Unique message identifier.
Definition types.hpp:348
E3AP Setup Request structure.
Definition types.hpp:201
std::string vendor
Vendor name (max 30 chars).
Definition types.hpp:205
std::string dapp_version
Version of the dApp (e.g., "0.0.0").
Definition types.hpp:204
std::string e3ap_protocol_version
E3AP protocol version (e.g., "0.0.0").
Definition types.hpp:202
std::string dapp_name
Name of the dApp.
Definition types.hpp:203
E3AP Setup Response structure.
Definition types.hpp:221
std::string ran_identifier
RAN identifier (mandatory).
Definition types.hpp:226
uint32_t request_id
ID of the corresponding SetupRequest.
Definition types.hpp:222
std::optional< uint32_t > dapp_identifier
Assigned dApp identifier (optional).
Definition types.hpp:225
std::vector< RanFunctionDef > ran_function_list
List of available RAN functions (optional).
Definition types.hpp:227
ResponseCode response_code
Response code (positive/negative).
Definition types.hpp:223
std::optional< std::string > e3ap_protocol_version
E3AP protocol version (optional).
Definition types.hpp:224
E3AP Subscription Delete structure.
Definition types.hpp:245
uint32_t dapp_identifier
dApp identifier
Definition types.hpp:246
uint32_t subscription_id
Subscription ID to delete.
Definition types.hpp:247
E3AP Subscription Request structure.
Definition types.hpp:233
std::optional< uint32_t > subscription_time
How long to keep the subscription (0-3600 sec).
Definition types.hpp:238
uint32_t ran_function_identifier
RAN function to subscribe to.
Definition types.hpp:235
std::vector< uint32_t > control_identifier_list
List of control identifiers.
Definition types.hpp:237
std::vector< uint32_t > telemetry_identifier_list
List of telemetry identifiers.
Definition types.hpp:236
uint32_t dapp_identifier
dApp identifier
Definition types.hpp:234
E3AP Subscription Response structure.
Definition types.hpp:253
std::optional< uint32_t > subscription_id
Subscription ID (optional).
Definition types.hpp:257
uint32_t request_id
ID of the corresponding SubscriptionRequest.
Definition types.hpp:254
uint32_t dapp_identifier
dApp identifier
Definition types.hpp:255
ResponseCode response_code
Response code (positive/negative).
Definition types.hpp:256
E3AP xApp Control Action structure.
Definition types.hpp:306
std::vector< uint8_t > xapp_control_data
Definition types.hpp:309
uint32_t ran_function_identifier
Definition types.hpp:308