105#include "ns3/applications-module.h"
106#include "ns3/config-store-module.h"
107#include "ns3/core-module.h"
108#include "ns3/fd-net-device-module.h"
109#include "ns3/internet-module.h"
110#include "ns3/network-module.h"
122main(
int argc,
char* argv[])
124 uint16_t sinkPort = 8000;
126 std::string dataRate(
"1000Mb/s");
127 bool serverMode =
false;
129 std::string deviceName(
"eth0");
130 std::string client(
"10.1.1.1");
131 std::string server(
"10.1.1.2");
132 std::string netmask(
"255.255.255.0");
133 std::string macClient(
"00:00:00:00:00:01");
134 std::string macServer(
"00:00:00:00:00:02");
135 std::string transportProt =
"Tcp";
136 std::string socketType;
138 std::string emuMode(
"raw");
139#elif HAVE_NETMAP_USER_H
140 std::string emuMode(
"netmap");
142 std::string emuMode(
"dpdk");
146 cmd.AddValue(
"deviceName",
147 "Device name (in raw, netmap mode) or Device address (in dpdk mode, eg: "
148 "0000:00:1f.6). Use `lspci` to find device address.",
150 cmd.AddValue(
"client",
"Local IP address (dotted decimal only please)", client);
151 cmd.AddValue(
"server",
"Remote IP address (dotted decimal only please)", server);
152 cmd.AddValue(
"localmask",
"Local mask address (dotted decimal only please)", netmask);
153 cmd.AddValue(
"serverMode",
"1:true, 0:false, default client", serverMode);
154 cmd.AddValue(
"mac-client",
"Mac Address for Server Client : 00:00:00:00:00:01", macClient);
155 cmd.AddValue(
"mac-server",
"Mac Address for Server Default : 00:00:00:00:00:02", macServer);
156 cmd.AddValue(
"data-rate",
"Data rate defaults to 1000Mb/s", dataRate);
157 cmd.AddValue(
"transportProt",
"Transport protocol to use: Tcp, Udp", transportProt);
158 cmd.AddValue(
"emuMode",
"Emulation mode in {raw, netmap}", emuMode);
159 cmd.Parse(argc, argv);
161 if (transportProt ==
"Tcp")
163 socketType =
"ns3::TcpSocketFactory";
167 socketType =
"ns3::UdpSocketFactory";
189 Ipv4Mask localMask(netmask.c_str());
191 GlobalValue::Bind(
"SimulatorImplementationType",
StringValue(
"ns3::RealtimeSimulatorImpl"));
193 GlobalValue::Bind(
"ChecksumEnabled",
BooleanValue(
true));
202 if (emuMode ==
"raw")
209#ifdef HAVE_NETMAP_USER_H
210 if (emuMode ==
"netmap")
217#ifdef HAVE_DPDK_USER_H
218 if (emuMode ==
"dpdk")
233 if (helper ==
nullptr)
240 device->SetAttribute(
"Address", localMac);
245 internetStackHelper.
Install(node);
249 uint32_t interface = ipv4->AddInterface(device);
251 ipv4->AddAddress(interface,
address);
252 ipv4->SetMetric(interface, 1);
253 ipv4->SetUp(interface);
269 onoff.SetAttribute(
"Remote", remoteAddress);
270 onoff.SetAttribute(
"OnTime",
StringValue(
"ns3::ConstantRandomVariable[Constant=1]"));
271 onoff.SetAttribute(
"OffTime",
StringValue(
"ns3::ConstantRandomVariable[Constant=0]"));
282 Simulator::Stop(
Seconds(61.0));
284 Simulator::Destroy();
a polymophic address class
AttributeValue implementation for Address.
holds a vector of ns3::Application pointers.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
AttributeValue implementation for Boolean.
Parse command-line arguments.
AttributeValue implementation for DataRate.
build a DpdkNetDevice object attached to a physical network interface
void SetPmdLibrary(std::string pmdLibrary)
Sets PMD Library to be used for the NIC.
void SetDpdkDriver(std::string dpdkDriver)
Sets DPDK Driver to bind NIC to.
build a set of FdNetDevice objects attached to a physical network interface
void SetDeviceName(std::string deviceName)
Set the device name of this device.
build a set of FdNetDevice objects Normally we eschew multiple inheritance, however,...
virtual NetDeviceContainer Install(Ptr< Node > node) const
This method creates a FdNetDevice and associates it to a node.
aggregate IP/TCP/UDP functionality to existing Nodes.
void SetIpv4StackInstall(bool enable)
Enable/disable IPv4 stack install.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
Ipv4 addresses are stored in host order in this class.
Access to the IPv4 forwarding table, interfaces, and configuration.
a class to store IPv4 address information on an interface
a class to represent an Ipv4 address mask
AttributeValue implementation for Mac48Address.
holds a vector of ns3::NetDevice pointers
build a set of FdNetDevice objects attached to a physical network interface
void SetDeviceName(std::string deviceName)
Set the device name of this device.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
void EnablePcap(std::string prefix, Ptr< NetDevice > nd, bool promiscuous=false, bool explicitFilename=false)
Enable pcap output the indicated net device.
Hold variables of type string.
Hold an unsigned integer type.
void SetDefault(std::string name, const AttributeValue &value)
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Time Seconds(double value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static const uint32_t packetSize
Packet size generated at the AP.