A Discrete-Event Network Simulator
API
dpdk-net-device.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 NITK Surathkal
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Author: Harsh Patel <thadodaharsh10@gmail.com>
18  * Hrishikesh Hiraskar <hrishihiraskar@gmail.com>
19  * Mohit P. Tahiliani <tahiliani@nitk.edu.in>
20  */
21 
22 #ifndef DPDK_NET_DEVICE_H
23 #define DPDK_NET_DEVICE_H
24 
25 #include "fd-net-device.h"
26 
27 #include <rte_cycles.h>
28 #include <rte_mempool.h>
29 #include <rte_ring.h>
30 
31 struct rte_eth_dev_tx_buffer;
32 struct rte_mbuf;
33 
34 namespace ns3
35 {
36 
47 class DpdkNetDevice : public FdNetDevice
48 {
49  public:
54  static TypeId GetTypeId();
55 
59  DpdkNetDevice();
60 
65 
71 
80  void InitDpdk(int argc, char** argv, std::string dpdkDriver);
81 
87  void SetDeviceName(std::string deviceName);
88 
94  static void SignalHandler(int signum);
95 
101  static int LaunchCore(void* arg);
102 
106  void HandleTx();
107 
111  void HandleRx();
112 
117  bool IsLinkUp() const;
118 
123  virtual void FreeBuffer(uint8_t* buf);
124 
130  virtual uint8_t* AllocateBuffer(size_t len);
131 
132  protected:
139  ssize_t Write(uint8_t* buffer, size_t length);
140 
144  uint16_t m_portId;
145 
149  std::string m_deviceName;
150 
151  private:
152  void DoFinishStoppingDevice();
156  static volatile bool m_forceQuit;
157 
161  struct rte_mempool* m_mempool;
162 
166  struct rte_eth_dev_tx_buffer* m_txBuffer;
167 
171  struct rte_eth_dev_tx_buffer* m_rxBuffer;
172 
177 
182 
186  uint32_t m_maxRxPktBurst;
187 
191  uint32_t m_maxTxPktBurst;
192 
197 
201  uint16_t m_nbRxDesc;
202 
206  uint16_t m_nbTxDesc;
207 };
208 
209 } // namespace ns3
210 
211 #endif /* DPDK_NET_DEVICE_H */
a NetDevice to read/write network traffic from/into a Dpdk enabled port.
static int LaunchCore(void *arg)
A function to handle rx & tx operations.
virtual void FreeBuffer(uint8_t *buf)
Free the given packet buffer.
bool IsLinkUp() const
Check the status of the link.
uint32_t m_maxRxPktBurst
Size of Rx burst.
void InitDpdk(int argc, char **argv, std::string dpdkDriver)
Initialize Dpdk.
void SetDeviceName(std::string deviceName)
Set device name.
void HandleTx()
Transmit packets in burst from the tx_buffer to the nic.
static void SignalHandler(int signum)
A signal handler for SIGINT and SIGTERM signals.
~DpdkNetDevice()
Destructor for the DpdkNetDevice.
struct rte_eth_dev_tx_buffer * m_txBuffer
Buffer to handle burst transmission.
struct rte_eth_dev_tx_buffer * m_rxBuffer
Buffer to handle burst reception.
uint32_t m_maxTxPktBurst
Size of Tx burst.
static TypeId GetTypeId()
Get the type ID.
EventId m_txEvent
Event for stale packet transmission.
std::string m_deviceName
The device name;.
void DoFinishStoppingDevice()
Complete additional actions, if any, to tear down the device.
static volatile bool m_forceQuit
Condition variable for Dpdk to stop.
uint16_t m_nbTxDesc
Number of Tx descriptors.
uint16_t m_nbRxDesc
Number of Rx descriptors.
struct rte_mempool * m_mempool
Packet memory pool.
void CheckAllPortsLinkStatus()
Check the link status of all ports in up to 9s and print them finally.
uint16_t m_portId
The port number of the device to be used.
virtual uint8_t * AllocateBuffer(size_t len)
Allocate packet buffer.
DpdkNetDevice()
Constructor for the DpdkNetDevice.
void HandleRx()
Receive packets in burst from the nic to the rx_buffer.
Time m_txTimeout
The time to wait before transmitting burst from Tx buffer.
ssize_t Write(uint8_t *buffer, size_t length)
Write packet data to device.
uint32_t m_mempoolCacheSize
Mempool cache size.
An identifier for simulation events.
Definition: event-id.h:55
a NetDevice to read/write network traffic from/into a file descriptor.
Definition: fd-net-device.h:84
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
a unique identifier for an interface.
Definition: type-id.h:60
Every class exported by the ns3 library is enclosed in the ns3 namespace.