/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /* * 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 // // Packets sent to the device "thetap" on the Linux host will be sent to the // tap bridge on node zero and then emitted onto the ns-3 simulated CSMA // network. ARP will be used on the CSMA network to resolve MAC addresses. // Packets destined for the CSMA device on node zero will be sent to the // device "thetap" on the linux Host. // // +----------+ // | external | // | Linux | // | Host | // | | // | "thetap" | // +----------+ // | n0 n1 n2 n3 // | +--------+ +--------+ +--------+ +--------+ // +-------| tap | | | | | | | // | bridge | | | | | | | // +--------+ +--------+ +--------+ +--------+ // | CSMA | | CSMA | | CSMA | | CSMA | // +--------+ +--------+ +--------+ +--------+ // | | | | // | | | | // | | | | // =========================================== // CSMA LAN 10.1.1 // // The CSMA device on node zero is: 10.1.1.1 // The CSMA device on node one is: 10.1.1.2 // The CSMA device on node two is: 10.1.1.3 // The CSMA device on node three is: 10.1.1.4 // // Some simple things to do: // // 1) Ping one of the simulated nodes // // ./waf --run tap-csma& // ping 10.1.1.2 // #include #include #include "ns3/simulator-module.h" #include "ns3/node-module.h" #include "ns3/core-module.h" #include "ns3/wifi-module.h" #include "ns3/helper-module.h" using namespace ns3; NS_LOG_COMPONENT_DEFINE ("TapCsmaExample"); int main (int argc, char *argv[]) { std::string mode = "ConfigureLocal"; std::string tapName = "thetap"; CommandLine cmd; cmd.AddValue("mode", "Mode setting of TapBridge", mode); cmd.AddValue("tapName", "Name of the OS tap device", tapName); cmd.Parse (argc, argv); GlobalValue::Bind ("SimulatorImplementationType", StringValue ("ns3::RealtimeSimulatorImpl")); GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true)); NodeContainer nodes; nodes.Create (4); CsmaHelper csma; csma.SetChannelAttribute ("DataRate", DataRateValue (5000000)); csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2))); NetDeviceContainer devices = csma.Install (nodes); InternetStackHelper stack; stack.Install (nodes); Ipv4AddressHelper addresses; addresses.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer interfaces = addresses.Assign (devices); TapBridgeHelper tapBridge; tapBridge.SetAttribute ("Mode", StringValue (mode)); tapBridge.SetAttribute ("DeviceName", StringValue (tapName)); tapBridge.Install (nodes.Get (0), devices.Get (0)); CsmaHelper::EnablePcapAll ("tap-csma", false); Ipv4GlobalRoutingHelper::PopulateRoutingTables (); Simulator::Stop (Seconds (60.)); Simulator::Run (); Simulator::Destroy (); }