Skip to content

Commit c4b1ee5

Browse files
committed
Add pcap over net support for ue
1 parent 5275f33 commit c4b1ee5

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
#include "srsue/hdr/stack/mac_common/mac_common.h"
3031

@@ -40,6 +41,7 @@ class dl_harq_entity
4041
bool init(ue_rnti* rntis, demux* demux_unit);
4142
void reset();
4243
void start_pcap(srsran::mac_pcap* pcap_);
44+
void start_pcap_net(srsran::mac_pcap_net* pcap_net_);
4345

4446
/***************** PHY->MAC interface for DL processes **************************/
4547
void new_grant_dl(mac_interface_phy_lte::mac_grant_dl_t grant, mac_interface_phy_lte::tb_action_dl_t* action);
@@ -123,6 +125,7 @@ class dl_harq_entity
123125
demux* demux_unit = nullptr;
124126
srslog::basic_logger& logger;
125127
srsran::mac_pcap* pcap = nullptr;
128+
srsran::mac_pcap_net* pcap_net = nullptr;
126129
ue_rnti* rntis = nullptr;
127130
uint16_t last_temporal_crnti = 0;
128131
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);
@@ -159,6 +160,7 @@ class mac : public mac_interface_phy_lte,
159160

160161
// pointer to MAC PCAP object
161162
srsran::mac_pcap* pcap = nullptr;
163+
srsran::mac_pcap_net* pcap_net = nullptr;
162164
std::atomic<bool> is_first_ul_grant{false};
163165

164166
std::mutex metrics_mutex = {};

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
#include "srsue/hdr/stack/mac_common/mac_common.h"
@@ -71,6 +72,7 @@ class ra_proc : public srsran::timer_callback
7172
bool contention_resolution_id_received(uint64_t rx_contention_id);
7273

7374
void start_pcap(srsran::mac_pcap* pcap);
75+
void start_pcap_net(srsran::mac_pcap_net* pcap_net);
7476

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

@@ -143,6 +145,7 @@ class ra_proc : public srsran::timer_callback
143145
srslog::basic_logger& logger;
144146
mux* mux_unit = nullptr;
145147
srsran::mac_pcap* pcap = nullptr;
148+
srsran::mac_pcap_net* pcap_net = nullptr;
146149
rrc_interface_mac* rrc = nullptr;
147150
srsran::ext_task_sched_handle* task_sched = nullptr;
148151
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);
@@ -152,6 +154,7 @@ class ul_harq_entity
152154

153155
mux* mux_unit = nullptr;
154156
srsran::mac_pcap* pcap = nullptr;
157+
srsran::mac_pcap_net* pcap_net = nullptr;
155158
srslog::basic_logger& logger;
156159

157160
ue_rnti* rntis = nullptr;

srsue/hdr/stack/ue_stack_base.h

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

39+
typedef struct {
40+
bool enable;
41+
std::string client_ip;
42+
std::string bind_ip;
43+
uint16_t client_port;
44+
uint16_t bind_port;
45+
} pcap_net_args_t;
46+
3947
typedef struct {
4048
std::string enable;
4149
pcap_args_t mac_pcap;
50+
pcap_net_args_t mac_pcap_net;
4251
pcap_args_t mac_nr_pcap;
4352
pcap_args_t nas_pcap;
4453
} 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
@@ -32,6 +32,7 @@
3232
#include "rrc/rrc_nr.h"
3333
#include "srsran/common/bearer_manager.h"
3434
#include "srsran/common/buffer_pool.h"
35+
#include "srsran/common/mac_pcap_net.h"
3536
#include "srsran/common/multiqueue.h"
3637
#include "srsran/common/string_helpers.h"
3738
#include "srsran/common/task_scheduler.h"
@@ -211,6 +212,7 @@ class ue_stack_lte final : public ue_stack_base,
211212

212213
// tracing
213214
srsran::mac_pcap mac_pcap;
215+
srsran::mac_pcap_net mac_pcap_net;
214216
srsran::mac_pcap mac_nr_pcap;
215217
srsran::nas_pcap nas_pcap;
216218

srsue/src/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ target_link_libraries(srsue ${SRSUE_SOURCES}
4343
${SRSRAN_SOURCES}
4444
${CMAKE_THREAD_LIBS_INIT}
4545
${Boost_LIBRARIES}
46-
${ATOMIC_LIBS})
46+
${ATOMIC_LIBS}
47+
${SCTP_LIBRARIES})
4748

4849
if (RPATH)
4950
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
@@ -158,6 +158,11 @@ static int parse_args(all_args_t* args, int argc, char* argv[])
158158
("pcap.mac_filename", bpo::value<string>(&args->stack.pkt_trace.mac_pcap.filename)->default_value("/tmp/ue_mac.pcap"), "MAC layer capture filename")
159159
("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")
160160
("pcap.nas_filename", bpo::value<string>(&args->stack.pkt_trace.nas_pcap.filename)->default_value("/tmp/ue_nas.pcap"), "NAS layer capture filename")
161+
("pcap.mac_net_enable", bpo::value<bool>(&args->stack.pkt_trace.mac_pcap_net.enable)->default_value(false), "Enable MAC network captures")
162+
("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")
163+
("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")
164+
("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")
165+
("pcap.client_port", bpo::value<uint16_t>(&args->stack.pkt_trace.mac_pcap_net.client_port)->default_value(5847), "Enable MAC network captures")
161166

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

srsue/src/stack/mac/dl_harq.cc

Lines changed: 14 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_;
@@ -328,13 +333,22 @@ void dl_harq_entity::dl_harq_process::dl_tb_process::tb_decoded(mac_interface_ph
328333
harq_entity->pcap->write_dl_sirnti(
329334
payload_buffer_ptr, cur_grant.tb[tid].tbs, ack, cur_grant.tti, harq_entity->cc_idx);
330335
}
336+
if (harq_entity->pcap_net) {
337+
harq_entity->pcap_net->write_dl_sirnti(
338+
payload_buffer_ptr, cur_grant.tb[tid].tbs, ack, cur_grant.tti, harq_entity->cc_idx);
339+
}
331340
Debug("Delivering PDU=%d bytes to Dissassemble and Demux unit (BCCH)", cur_grant.tb[tid].tbs);
332341
harq_entity->demux_unit->push_pdu_bcch(payload_buffer_ptr, cur_grant.tb[tid].tbs);
333342
} else {
334343
if (harq_entity->pcap) {
335344
harq_entity->pcap->write_dl_crnti(
336345
payload_buffer_ptr, cur_grant.tb[tid].tbs, cur_grant.rnti, ack, cur_grant.tti, harq_entity->cc_idx);
337346
}
347+
if (harq_entity->pcap_net) {
348+
harq_entity->pcap_net->write_dl_crnti(
349+
payload_buffer_ptr, cur_grant.tb[tid].tbs, cur_grant.rnti, ack, cur_grant.tti, harq_entity->cc_idx);
350+
}
351+
338352
if (cur_grant.rnti == harq_entity->rntis->get_temp_rnti()) {
339353
Debug("Delivering PDU=%d bytes to Dissassemble and Demux unit (Temporal C-RNTI)", cur_grant.tb[tid].tbs);
340354
harq_entity->demux_unit->push_pdu_temp_crnti(payload_buffer_ptr, cur_grant.tb[tid].tbs);

0 commit comments

Comments
 (0)