MAC PCAP move run thread in base class

This commit is contained in:
David Rupprecht 2021-03-01 08:53:56 +01:00 committed by Andre Puschmann
parent 894e4d3501
commit 9e72d89fa1
6 changed files with 20 additions and 41 deletions

View File

@ -28,7 +28,6 @@ public:
private:
void write_pdu(srslte::mac_pcap_base::pcap_pdu_t& pdu);
void run_thread() final;
FILE* pcap_file = nullptr;
uint32_t dlt = 0; // The DLT used for the PCAP file

View File

@ -91,7 +91,7 @@ protected:
} pcap_pdu_t;
virtual void write_pdu(pcap_pdu_t& pdu) = 0;
virtual void run_thread() = 0;
void run_thread() final;
std::mutex mutex;
srslog::basic_logger& logger;

View File

@ -35,7 +35,6 @@ private:
void write_pdu(srslte::mac_pcap_base::pcap_pdu_t& pdu);
void write_mac_lte_pdu_to_net(srslte::mac_pcap_base::pcap_pdu_t& pdu);
void write_mac_nr_pdu_to_net(srslte::mac_pcap_base::pcap_pdu_t& pdu);
void run_thread() final;
srslte::socket_handler_t socket;
struct sockaddr_in client_addr;

View File

@ -47,25 +47,6 @@ uint32_t mac_pcap::open(std::string filename_, uint32_t ue_id_)
return SRSLTE_SUCCESS;
}
void mac_pcap::run_thread()
{
// blocking write until stopped
while (running) {
pcap_pdu_t pdu = queue.wait_pop();
{
std::lock_guard<std::mutex> lock(mutex);
write_pdu(pdu);
}
}
// write remainder of queue
std::lock_guard<std::mutex> lock(mutex);
pcap_pdu_t pdu = {};
while (queue.try_pop(&pdu)) {
write_pdu(pdu);
}
}
uint32_t mac_pcap::close()
{
{

View File

@ -33,6 +33,25 @@ void mac_pcap_base::set_ue_id(uint16_t ue_id_)
ue_id = ue_id_;
}
void mac_pcap_base::run_thread()
{
// blocking write until stopped
while (running) {
pcap_pdu_t pdu = queue.wait_pop();
{
std::lock_guard<std::mutex> lock(mutex);
write_pdu(pdu);
}
}
// write remainder of queue
std::lock_guard<std::mutex> lock(mutex);
pcap_pdu_t pdu = {};
while (queue.try_pop(&pdu)) {
write_pdu(pdu);
}
}
// Function called from PHY worker context, locking not needed as PDU queue is thread-safe
void mac_pcap_base::pack_and_queue(uint8_t* payload,
uint32_t payload_len,

View File

@ -79,25 +79,6 @@ uint32_t mac_pcap_net::close()
return SRSLTE_SUCCESS;
}
void mac_pcap_net::run_thread()
{
// blocking write until stopped
while (running) {
pcap_pdu_t pdu = queue.wait_pop();
{
std::lock_guard<std::mutex> lock(mutex);
write_pdu(pdu);
}
}
// write remainder of queue
std::lock_guard<std::mutex> lock(mutex);
pcap_pdu_t pdu = {};
while (queue.try_pop(&pdu)) {
write_pdu(pdu);
}
}
void mac_pcap_net::write_pdu(pcap_pdu_t& pdu)
{
if (pdu.pdu != nullptr && socket.is_init()) {