25 #include "ns3/callback.h" 
   26 #include "ns3/abort.h" 
   28 #include "ns3/pcap-file.h" 
   29 #include "ns3/config.h" 
   30 #include "ns3/string.h" 
   31 #include "ns3/uinteger.h" 
   32 #include "ns3/double.h" 
   33 #include "ns3/data-rate.h" 
   34 #include "ns3/inet-socket-address.h" 
   35 #include "ns3/internet-stack-helper.h" 
   36 #include "ns3/ipv4-address-helper.h" 
   37 #include "ns3/tcp-socket-factory.h" 
   38 #include "ns3/yans-wifi-helper.h" 
   39 #include "ns3/propagation-loss-model.h" 
   40 #include "ns3/propagation-delay-model.h" 
   41 #include "ns3/yans-wifi-channel.h" 
   42 #include "ns3/yans-wifi-phy.h" 
   43 #include "ns3/wifi-net-device.h" 
   44 #include "ns3/mobility-helper.h" 
   45 #include "ns3/constant-position-mobility-model.h" 
   46 #include "ns3/nqos-wifi-mac-helper.h" 
   47 #include "ns3/simulator.h" 
   60   virtual void DoRun (
void);
 
   63   void PrintEndSync (std::string context, uint32_t dataRate, 
double snr, 
double per);
 
   64   double WifiSimpleInterference (std::string phyMode, 
double Prss, 
double Irss, 
double delta, uint32_t PpacketSize, 
 
   73   : 
TestCase (
"Test interference calculation when interfering frame exactly overlaps intended frame")
 
   81 static inline std::string
 
   88   std::ostringstream oss;
 
   89   oss << 
"Received one packet!  Socket: " << iaddr.
GetIpv4 () << 
" port: " << iaddr.
GetPort ();
 
  105       socket->
Send (Create<Packet> (pktSize));
 
  117   NS_LOG_UNCOND (
"EndSync:  Received frame with dataRate=" << dataRate << 
", SNR=" << snr << 
", PER =" << per);
 
  127   uint32_t numPackets = 1;
 
  128   double interval = 1.0; 
 
  130   double distanceToRx = 100.0; 
 
  177   wifiMac.
SetType (
"ns3::AdhocWifiMac");
 
  191   positionAlloc->
Add (Vector (0.0, 0.0, 0.0));
 
  192   positionAlloc->
Add (Vector (distanceToRx, 0.0, 0.0));
 
  193   positionAlloc->
Add (Vector (-1*distanceToRx, 0.0, 0.0));
 
  203   ipv4.
SetBase (
"10.1.1.0", 
"255.255.255.0");
 
  206   TypeId tid = TypeId::LookupByName (
"ns3::UdpSocketFactory");
 
  209   recvSink->
Bind (local);
 
  220   interferer->
Connect (interferingAddr);
 
  226   Simulator::ScheduleWithContext (source->
GetNode ()->
GetId (),
 
  228                                   source, PpacketSize, numPackets, interPacketInterval);
 
  230   Simulator::ScheduleWithContext (interferer->
GetNode ()->
GetId (),
 
  232                                   interferer, IpacketSize, numPackets, interPacketInterval);
 
  235   Simulator::Destroy ();
 
  244   std::string phyMode (
"DsssRate1Mbps");
 
  249   uint32_t PpacketSize = 1000; 
 
  250   uint32_t IpacketSize = 1000; 
 
  252   double PER, PER1, PER2;
 
  258   PER = 
WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
 
  263   PER1 = 
WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
 
  268   PER2 = 
WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
 
  270   double PERDiff1 = PER - PER1;
 
  272   double PERDiff2 = PER1 - PER2;
 
  275                          "The PER difference due to 1 microsecond difference in arrival shouldn't depend on absolute arrival");
 
  281   PER = 
WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
 
  286   PER1 = 
WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
 
  291   PER2 = 
WifiSimpleInterference (phyMode,Prss,Irss,delta,PpacketSize,IpacketSize,verbose,internet,wifiStandard);
 
  293   PERDiff1 = PER - PER1;
 
  295   PERDiff2 = PER1 - PER2;
 
  298                          "The PER difference due to 1 microsecond difference in arrival shouldn't depend on absolute arrival");
 
  309   : 
TestSuite (
"ns3-wifi-interference", UNIT)
 
WifiInterferenceTestCase()
void AddPropagationLoss(std::string name, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
virtual void DoRun(void)
Implementation to actually run this TestCase. 
Simulation virtual time values and global simulation resolution. 
Ipv4Address GetIpv4(void) const 
holds a vector of std::pair of Ptr and interface index. 
Ptr< YansWifiChannel > Create(void) const 
static void GenerateTraffic(Ptr< Socket > socket, uint32_t pktSize, uint32_t pktCount, Time pktInterval)
void SetRemoteStationManager(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
Hold variables of type string. 
Make it easy to create and manage PHY objects for the yans model. 
double WifiSimpleInterference(std::string phyMode, double Prss, double Irss, double delta, uint32_t PpacketSize, uint32_t IpacketSize, bool verbose, InternetStackHelper internet, WifiPhyStandard wifiStandard)
WifiInterferenceTestSuite()
virtual ~WifiInterferenceTestCase()
virtual void SetType(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
static void GenerateTraffic(Ptr< Socket > socket, uint32_t pktSize, Ptr< Node > n, uint32_t pktCount, Time pktInterval)
void ReceivePacket(Ptr< Socket > socket)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
virtual int GetSockName(Address &address) const =0
Get socket address. 
void SetPcapDataLinkType(enum SupportedPcapDataLinkTypes dlt)
Set the data link type of PCAP traces to be used. 
aggregate IP/TCP/UDP functionality to existing Nodes. 
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
void Set(std::string name, const AttributeValue &v)
HT OFDM PHY for the 2.4 GHz band (clause 20) 
helps to create WifiNetDevice objects 
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer c) const 
a polymophic address class 
void SetChannel(Ptr< YansWifiChannel > channel)
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use. 
static std::string PrintReceivedPacket(Ptr< Socket > socket)
void Install(Ptr< Node > node) const 
"Layout" a single node according to the current position allocator type. 
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite. 
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container. 
static WifiInterferenceTestSuite wifiInterferenceTestSuite
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not. 
holds a vector of ns3::NetDevice pointers 
virtual void SetStandard(enum WifiPhyStandard standard)
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read. 
create non QoS-enabled MAC layers for a ns3::WifiNetDevice. 
void Connect(std::string path, const CallbackBase &cb)
virtual int Connect(const Address &address)=0
Initiate a connection to a remote host. 
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
keep track of a set of node pointers. 
DSSS PHY (Clause 15) and HR/DSSS PHY (Clause 18) 
void SetMobilityModel(std::string type, std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
void Install(std::string nodeName) const 
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
#define NS_LOG_UNCOND(msg)
Output the requested message unconditionaly. 
manage and create wifi channel objects for the yans model. 
Helper class used to assign positions and mobility models to nodes. 
Ipv4 addresses are stored in host order in this class. 
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
uint32_t GetId(void) const 
virtual Ptr< Node > GetNode(void) const =0
Return the node this socket is associated with. 
Ptr< Node > Get(uint32_t i) const 
Get the Ptr stored in this container at a given index. 
Time Seconds(double value)
Construct a Time in the indicated unit. 
void SetDefault(std::string name, const AttributeValue &value)
void Add(Vector v)
Add a position to the list of positions. 
A helper class to make life easier while doing simple IPv4 address assignment in scripts. 
uint16_t GetPort(void) const 
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer. 
void SetPropagationDelay(std::string name, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
virtual int Send(Ptr< Packet > p, uint32_t flags)=0
Send data (or dummy data) to the remote host. 
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
virtual int Close(void)=0
Close a socket. 
void ReceivePacket(Ptr< Socket > socket)
This class can be used to hold variables of floating point type such as 'double' or 'float'...
a unique identifier for an interface. 
void PrintEndSync(std::string context, uint32_t dataRate, double snr, double per)
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.