Files
unison/src/fd-net-device/examples/dummy-network.cc
2022-10-14 14:13:12 +00:00

89 lines
2.8 KiB
C++

/*
* Copyright (c) 2012 University of Washington, 2012 INRIA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
// Network topology
//
#include "ns3/core-module.h"
#include "ns3/fd-net-device-module.h"
#include "ns3/internet-apps-module.h"
#include "ns3/internet-module.h"
#include "ns3/network-module.h"
#include <errno.h>
#include <sys/socket.h>
using namespace ns3;
NS_LOG_COMPONENT_DEFINE("DummyNetworkExample");
int
main(int argc, char* argv[])
{
CommandLine cmd(__FILE__);
cmd.Parse(argc, argv);
NodeContainer nodes;
nodes.Create(2);
InternetStackHelper stack;
stack.Install(nodes);
FdNetDeviceHelper fd;
NetDeviceContainer devices = fd.Install(nodes);
int sv[2];
if (socketpair(AF_UNIX, SOCK_DGRAM, 0, sv) < 0)
{
NS_FATAL_ERROR("Error creating pipe=" << strerror(errno));
}
Ptr<NetDevice> d1 = devices.Get(0);
Ptr<FdNetDevice> device1 = d1->GetObject<FdNetDevice>();
device1->SetFileDescriptor(sv[0]);
Ptr<NetDevice> d2 = devices.Get(1);
Ptr<FdNetDevice> device2 = d2->GetObject<FdNetDevice>();
device2->SetFileDescriptor(sv[1]);
Ipv4AddressHelper addresses;
addresses.SetBase("10.0.0.0", "255.255.255.0");
Ipv4InterfaceContainer interfaces = addresses.Assign(devices);
Ptr<V4Ping> app = CreateObject<V4Ping>();
app->SetAttribute("Remote", Ipv4AddressValue(interfaces.GetAddress(0)));
app->SetAttribute("Verbose", BooleanValue(true));
nodes.Get(1)->AddApplication(app);
app->SetStartTime(Seconds(0.0));
app->SetStopTime(Seconds(4.0));
fd.EnablePcapAll("dummy-network", true);
// The next three lines will stop the simulator at time 5 seconds. Usually,
// it is sufficient to just call Simulator::Stop (Seconds (5)).
// However, in order to produce a clean valgrind output
// when running this example in our test suite (see issue #343), we
// first stop each device explicitly at time 5, and then wait one
// simulator timestep later (1 nanosecond by default) to call
// Simulator::Stop ().
device1->Stop(Seconds(5));
device2->Stop(Seconds(5));
Simulator::Stop(Seconds(5) + TimeStep(1));
Simulator::Run();
Simulator::Destroy();
}