Agora  1.2.0
Agora project
PacketTxRxDpdk Class Reference

Implementations of this class provide packet I/O for Agora using dpdk accelerations. More...

#include <packet_txrx_dpdk.h>

Inheritance diagram for PacketTxRxDpdk:
Collaboration diagram for PacketTxRxDpdk:

Public Member Functions

 PacketTxRxDpdk (Config *const cfg, size_t core_offset, moodycamel::ConcurrentQueue< EventData > *event_notify_q, moodycamel::ConcurrentQueue< EventData > *tx_pending_q, moodycamel::ProducerToken **notify_producer_tokens, moodycamel::ProducerToken **tx_producer_tokens, Table< char > &rx_buffer, size_t packet_num_in_buffer, Table< size_t > &frame_start, char *tx_buffer)
 
 ~PacketTxRxDpdk () final
 
- Public Member Functions inherited from PacketTxRx
 PacketTxRx (AgoraTxRx::TxRxTypes type, Config *const cfg, size_t core_offset, moodycamel::ConcurrentQueue< EventData > *event_notify_q, moodycamel::ConcurrentQueue< EventData > *tx_pending_q, moodycamel::ProducerToken **notify_producer_tokens, moodycamel::ProducerToken **tx_producer_tokens, Table< char > &rx_buffer, size_t packet_num_in_buffer, Table< size_t > &frame_start, char *tx_buffer)
 
virtual ~PacketTxRx ()
 
virtual bool StartTxRx (Table< complex_float > &calib_dl_buffer, Table< complex_float > &calib_ul_buffer)
 Start the network I/O threads. More...
 
size_t AntNumToWorkerId (size_t ant_num) const
 Convert the antenna id to txrx worker id. More...
 

Private Member Functions

void DoTxRx (size_t tid)
 
bool CreateWorker (size_t tid, size_t interface_count, size_t interface_offset, size_t *rx_frame_start, std::vector< RxPacket > &rx_memory, std::byte *const tx_memory) final
 

Private Attributes

uint32_t bs_rru_addr_
 
uint32_t bs_server_addr_
 
rte_mempool * mbuf_pool_
 
std::vector< std::vector< std::pair< uint16_t, uint16_t > > > worker_dev_queue_assignment_
 

Additional Inherited Members

- Protected Member Functions inherited from PacketTxRx
bool StopTxRx ()
 
void NotifyWorkers ()
 
size_t NumberTotalWorkers () const
 
size_t NumberTotalInterfaces () const
 
const size_t & InterfaceToWorker (size_t interface) const
 
size_t NumChannels () const
 
- Protected Attributes inherited from PacketTxRx
std::vector< std::unique_ptr< TxRxWorker > > worker_threads_
 
Config *const cfg_
 
const size_t core_offset_
 
moodycamel::ConcurrentQueue< EventData > * event_notify_q_
 
moodycamel::ConcurrentQueue< EventData > * tx_pending_q_
 
moodycamel::ProducerToken ** notify_producer_tokens_
 
moodycamel::ProducerToken ** tx_producer_tokens_
 
std::mutex mutex_
 Owned by this class and shared with the workers. More...
 
std::condition_variable cond_
 
std::atomic< bool > proceed_
 

Detailed Description

Implementations of this class provide packet I/O for Agora using dpdk accelerations.

Constructor & Destructor Documentation

◆ PacketTxRxDpdk()

PacketTxRxDpdk::PacketTxRxDpdk ( Config *const  cfg,
size_t  core_offset,
moodycamel::ConcurrentQueue< EventData > *  event_notify_q,
moodycamel::ConcurrentQueue< EventData > *  tx_pending_q,
moodycamel::ProducerToken **  notify_producer_tokens,
moodycamel::ProducerToken **  tx_producer_tokens,
Table< char > &  rx_buffer,
size_t  packet_num_in_buffer,
Table< size_t > &  frame_start,
char *  tx_buffer 
)
Here is the call graph for this function:

◆ ~PacketTxRxDpdk()

PacketTxRxDpdk::~PacketTxRxDpdk ( )
final
Here is the call graph for this function:

Member Function Documentation

◆ CreateWorker()

bool PacketTxRxDpdk::CreateWorker ( size_t  tid,
size_t  interface_count,
size_t  interface_offset,
size_t *  rx_frame_start,
std::vector< RxPacket > &  rx_memory,
std::byte *const  tx_memory 
)
finalprivatevirtual

Implements PacketTxRx.

Here is the call graph for this function:

◆ DoTxRx()

void PacketTxRxDpdk::DoTxRx ( size_t  tid)
private

Member Data Documentation

◆ bs_rru_addr_

uint32_t PacketTxRxDpdk::bs_rru_addr_
private

◆ bs_server_addr_

uint32_t PacketTxRxDpdk::bs_server_addr_
private

◆ mbuf_pool_

rte_mempool* PacketTxRxDpdk::mbuf_pool_
private

◆ worker_dev_queue_assignment_

std::vector<std::vector<std::pair<uint16_t, uint16_t> > > PacketTxRxDpdk::worker_dev_queue_assignment_
private

The documentation for this class was generated from the following files: