Skip to content

Commit 69b8d9c

Browse files
committed
Add pcap over net support for ue
1 parent eccf106 commit 69b8d9c

File tree

14 files changed

+107
-1
lines changed

14 files changed

+107
-1
lines changed

srsue/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
# and at http://www.gnu.org/licenses/.
1919
#
2020

21+
find_package(SCTP REQUIRED)
22+
2123
########################################################################
2224
# Boost is required
2325
########################################################################

srsue/hdr/stack/mac/dl_harq.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "demux.h"
2626
#include "dl_sps.h"
2727
#include "srsran/common/mac_pcap.h"
28+
#include "srsran/common/mac_pcap_net.h"
2829
#include "srsran/common/timers.h"
2930

3031
/* Downlink HARQ entity as defined in 5.3.2 of 36.321 */
@@ -39,6 +40,7 @@ class dl_harq_entity
3940
bool init(mac_interface_rrc::ue_rnti_t* rntis, demux* demux_unit);
4041
void reset();
4142
void start_pcap(srsran::mac_pcap* pcap_);
43+
void start_pcap_net(srsran::mac_pcap_net* pcap_net_);
4244

4345
/***************** PHY->MAC interface for DL processes **************************/
4446
void new_grant_dl(mac_interface_phy_lte::mac_grant_dl_t grant, mac_interface_phy_lte::tb_action_dl_t* action);
@@ -118,6 +120,7 @@ class dl_harq_entity
118120
demux* demux_unit = nullptr;
119121
srslog::basic_logger& logger;
120122
srsran::mac_pcap* pcap = nullptr;
123+
srsran::mac_pcap_net* pcap_net = nullptr;
121124
mac_interface_rrc::ue_rnti_t* rntis = nullptr;
122125
uint16_t last_temporal_crnti = 0;
123126
int si_window_start = 0;

srsue/hdr/stack/mac/mac.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ class mac : public mac_interface_phy_lte,
100100
void process_pdus();
101101

102102
void start_pcap(srsran::mac_pcap* pcap);
103+
void start_pcap_net(srsran::mac_pcap_net* pcap_net_);
103104

104105
// Timer callback interface
105106
void timer_expired(uint32_t timer_id);
@@ -163,6 +164,7 @@ class mac : public mac_interface_phy_lte,
163164

164165
// pointer to MAC PCAP object
165166
srsran::mac_pcap* pcap = nullptr;
167+
srsran::mac_pcap_net* pcap_net = nullptr;
166168
bool is_first_ul_grant = false;
167169

168170
mac_metrics_t metrics[SRSRAN_MAX_CARRIERS] = {};

srsue/hdr/stack/mac/proc_ra.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "demux.h"
3030
#include "mux.h"
3131
#include "srsran/common/mac_pcap.h"
32+
#include "srsran/common/mac_pcap_net.h"
3233
#include "srsran/common/timers.h"
3334
#include "srsran/mac/pdu.h"
3435

@@ -70,6 +71,7 @@ class ra_proc : public srsran::timer_callback
7071
bool contention_resolution_id_received(uint64_t rx_contention_id);
7172

7273
void start_pcap(srsran::mac_pcap* pcap);
74+
void start_pcap_net(srsran::mac_pcap_net* pcap_net);
7375

7476
bool is_idle() const { return state == IDLE; }
7577

@@ -142,6 +144,7 @@ class ra_proc : public srsran::timer_callback
142144
srslog::basic_logger& logger;
143145
mux* mux_unit = nullptr;
144146
srsran::mac_pcap* pcap = nullptr;
147+
srsran::mac_pcap_net* pcap_net = nullptr;
145148
rrc_interface_mac* rrc = nullptr;
146149
srsran::ext_task_sched_handle* task_sched = nullptr;
147150
srsran::task_multiqueue::queue_handle task_queue;

srsue/hdr/stack/mac/ul_harq.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "proc_ra.h"
2727
#include "srsran/common/interfaces_common.h"
2828
#include "srsran/common/mac_pcap.h"
29+
#include "srsran/common/mac_pcap_net.h"
2930
#include "srsran/common/timers.h"
3031
#include "ul_sps.h"
3132

@@ -45,6 +46,7 @@ class ul_harq_entity
4546
void set_config(srsran::ul_harq_cfg_t& harq_cfg);
4647

4748
void start_pcap(srsran::mac_pcap* pcap_);
49+
void start_pcap_net(srsran::mac_pcap_net* pcap_net_);
4850

4951
/***************** PHY->MAC interface for UL processes **************************/
5052
void new_grant_ul(mac_interface_phy_lte::mac_grant_ul_t grant, mac_interface_phy_lte::tb_action_ul_t* action);
@@ -103,6 +105,7 @@ class ul_harq_entity
103105

104106
mux* mux_unit = nullptr;
105107
srsran::mac_pcap* pcap = nullptr;
108+
srsran::mac_pcap_net* pcap_net = nullptr;
106109
srslog::basic_logger& logger;
107110

108111
mac_interface_rrc_common::ue_rnti_t* rntis = nullptr;

srsue/hdr/stack/ue_stack_base.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,18 @@ typedef struct {
3737
std::string filename;
3838
} pcap_args_t;
3939

40+
typedef struct {
41+
bool enable;
42+
std::string client_ip;
43+
std::string bind_ip;
44+
uint16_t client_port;
45+
uint16_t bind_port;
46+
} pcap_net_args_t;
47+
4048
typedef struct {
4149
std::string enable;
4250
pcap_args_t mac_pcap;
51+
pcap_net_args_t mac_pcap_net;
4352
pcap_args_t mac_nr_pcap;
4453
pcap_args_t nas_pcap;
4554
} pkt_trace_args_t;

srsue/hdr/stack/ue_stack_lte.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#include "upper/usim.h"
4242

4343
#include "srsran/common/buffer_pool.h"
44+
#include "srsran/common/mac_pcap_net.h"
4445
#include "srsran/common/multiqueue.h"
4546
#include "srsran/common/string_helpers.h"
4647
#include "srsran/common/task_scheduler.h"
@@ -206,6 +207,7 @@ class ue_stack_lte final : public ue_stack_base,
206207

207208
// tracing
208209
srsran::mac_pcap mac_pcap;
210+
srsran::mac_pcap_net mac_pcap_net;
209211
srsran::mac_pcap mac_nr_pcap;
210212
srsran::nas_pcap nas_pcap;
211213

srsue/src/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ set(SRSRAN_SOURCES ${SRSRAN_SOURCES} rrc_nr_asn1 ngap_nr_asn1)
4141
target_link_libraries(srsue ${SRSUE_SOURCES}
4242
${SRSRAN_SOURCES}
4343
${CMAKE_THREAD_LIBS_INIT}
44-
${Boost_LIBRARIES})
44+
${Boost_LIBRARIES}
45+
${SCTP_LIBRARIES})
4546

4647
if (RPATH)
4748
set_target_properties(srsue PROPERTIES INSTALL_RPATH ".")

srsue/src/main.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@ static int parse_args(all_args_t* args, int argc, char* argv[])
151151
("pcap.mac_filename", bpo::value<string>(&args->stack.pkt_trace.mac_pcap.filename)->default_value("/tmp/ue_mac.pcap"), "MAC layer capture filename")
152152
("pcap.mac_nr_filename", bpo::value<string>(&args->stack.pkt_trace.mac_nr_pcap.filename)->default_value("/tmp/ue_mac_nr.pcap"), "MAC_NR layer capture filename")
153153
("pcap.nas_filename", bpo::value<string>(&args->stack.pkt_trace.nas_pcap.filename)->default_value("/tmp/ue_nas.pcap"), "NAS layer capture filename")
154+
("pcap.mac_net_enable", bpo::value<bool>(&args->stack.pkt_trace.mac_pcap_net.enable)->default_value(false), "Enable MAC network captures")
155+
("pcap.bind_ip", bpo::value<string>(&args->stack.pkt_trace.mac_pcap_net.bind_ip)->default_value("0.0.0.0"), "Bind IP address for MAC network trace")
156+
("pcap.bind_port", bpo::value<uint16_t>(&args->stack.pkt_trace.mac_pcap_net.bind_port)->default_value(5687), "Bind port for MAC network trace")
157+
("pcap.client_ip", bpo::value<string>(&args->stack.pkt_trace.mac_pcap_net.client_ip)->default_value("127.0.0.1"), "Client IP address for MAC network trace")
158+
("pcap.client_port", bpo::value<uint16_t>(&args->stack.pkt_trace.mac_pcap_net.client_port)->default_value(5847), "Enable MAC network captures")
154159

155160
("gui.enable", bpo::value<bool>(&args->gui.enable)->default_value(false), "Enable GUI plots")
156161

srsue/src/stack/mac/dl_harq.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ void dl_harq_entity::start_pcap(srsran::mac_pcap* pcap_)
105105
pcap = pcap_;
106106
}
107107

108+
void dl_harq_entity::start_pcap_net(srsran::mac_pcap_net* pcap_net_)
109+
{
110+
pcap_net = pcap_net_;
111+
}
112+
108113
void dl_harq_entity::set_si_window_start(int si_window_start_)
109114
{
110115
si_window_start = si_window_start_;
@@ -321,13 +326,21 @@ void dl_harq_entity::dl_harq_process::dl_tb_process::tb_decoded(mac_interface_ph
321326
harq_entity->pcap->write_dl_sirnti(
322327
payload_buffer_ptr, cur_grant.tb[tid].tbs, ack, cur_grant.tti, harq_entity->cc_idx);
323328
}
329+
if (harq_entity->pcap_net) {
330+
harq_entity->pcap_net->write_dl_sirnti(
331+
payload_buffer_ptr, cur_grant.tb[tid].tbs, ack, cur_grant.tti, harq_entity->cc_idx);
332+
}
324333
Debug("Delivering PDU=%d bytes to Dissassemble and Demux unit (BCCH)", cur_grant.tb[tid].tbs);
325334
harq_entity->demux_unit->push_pdu_bcch(payload_buffer_ptr, cur_grant.tb[tid].tbs);
326335
} else {
327336
if (harq_entity->pcap) {
328337
harq_entity->pcap->write_dl_crnti(
329338
payload_buffer_ptr, cur_grant.tb[tid].tbs, cur_grant.rnti, ack, cur_grant.tti, harq_entity->cc_idx);
330339
}
340+
if (harq_entity->pcap_net) {
341+
harq_entity->pcap_net->write_dl_crnti(
342+
payload_buffer_ptr, cur_grant.tb[tid].tbs, cur_grant.rnti, ack, cur_grant.tti, harq_entity->cc_idx);
343+
}
331344
if (cur_grant.rnti == harq_entity->rntis->temp_rnti) {
332345
Debug("Delivering PDU=%d bytes to Dissassemble and Demux unit (Temporal C-RNTI)", cur_grant.tb[tid].tbs);
333346
harq_entity->demux_unit->push_pdu_temp_crnti(payload_buffer_ptr, cur_grant.tb[tid].tbs);

0 commit comments

Comments
 (0)