2016-07-11 21 views
0

Ich versuche, eine Netzwerktopologie von n drahtlosen Netzwerken zu erstellen und einen einzelnen Knoten an jeden der wifi-ap-Knoten (als Punkt-zu-Punkt-Verbindung) aller drahtlosen Netzwerke anzuhängen .GlobalRouting Fehler beim Kombinieren von drahtlosen Netzwerken und Punkt-zu-Punkt-Verbindung

Ich habe eine Echo-Anwendung erstellt, um Daten zwischen dem einzelnen Knoten (Remote-Knoten) und einem der WLAN-Knoten zu senden. Aber ich erhalte einen Fehler wie unten, wenn ich versuche, diesen Code auszuführen

Assert fehlgeschlagen. cond = "w_lsa", file = ../src/Internet/Modell/global-route-manager-impl.cc, Zeile = 809 ohne aktive Ausnahme

Die Topologie angebracht ist, wie Bild vorschlagen genannt beenden. topology

Wie routen die Pakete in dieser Topologie?

Hier ist der Code.

#include "ns3/core-module.h" 
#include "ns3/mobility-module.h" 
#include "ns3/applications-module.h" 
#include "ns3/point-to-point-module.h" 
#include "ns3/wifi-module.h" 
#include "ns3/network-module.h" 
#include "ns3/csma-module.h" 
#include "ns3/internet-module.h" 
#include "ns3/bridge-helper.h" 
#include "ns3/netanim-module.h" 
#include <vector> 
#include <stdint.h> 
#include <sstream> 
#include <fstream> 
using namespace ns3; 

int main (int argc, char *argv[]) 
{ 
    uint32_t nWifis = 2; 
    uint32_t nStas = 2; 
    bool sendIp = true; 
    bool writeMobility = false; 

    CommandLine cmd; 
    cmd.AddValue ("nWifis", "Number of wifi networks", nWifis); 
    cmd.AddValue ("nStas", "Number of stations per wifi network", nStas); 
    cmd.AddValue ("SendIp", "Send Ipv4 or raw packets", sendIp); 
    cmd.AddValue ("writeMobility", "Write mobility trace", writeMobility); 
    cmd.Parse (argc, argv); 

    NodeContainer backboneNodes; 
    NetDeviceContainer backboneDevices; 
    Ipv4InterfaceContainer backboneInterfaces; 
    std::vector<NodeContainer> staNodes; 
    std::vector<NetDeviceContainer> staDevices; 
    std::vector<NetDeviceContainer> apDevices; 
    std::vector<Ipv4InterfaceContainer> staInterfaces; 
    std::vector<Ipv4InterfaceContainer> apInterfaces; 

    InternetStackHelper stack; 
    CsmaHelper csma; 
    Ipv4AddressHelper ip; 
    ip.SetBase ("192.168.0.0", "255.255.255.0"); 

    backboneNodes.Create (nWifis); 
    stack.Install (backboneNodes); 

    backboneDevices = csma.Install (backboneNodes); 

    double wifiX = 0.0; 

    YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default(); 
    wifiPhy.SetPcapDataLinkType (YansWifiPhyHelper::DLT_IEEE802_11_RADIO); 

    for (uint32_t i = 0; i < nWifis; ++i) 
    { 
     // calculate ssid for wifi subnetwork 
     std::ostringstream oss; 
     oss << "wifi-default-" << i; 
     Ssid ssid = Ssid (oss.str()); 

     NodeContainer remoteHost; 
     remoteHost.Create(1); 
     Ptr<Node> remote=remoteHost.Get(0); 
     Ptr<Node> apnode=backboneNodes.Get(i); 
     PointToPointHelper p2p; 
     p2p.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); 
     p2p.SetChannelAttribute ("Delay", StringValue ("2ms")); 
     NetDeviceContainer p2pDevices = p2p.Install(apnode,remote); 
     //setup remotenode 
     stack.Install (remoteHost); 

     // assign AP IP address to bridge, not wifi 
     //Ipv4InterfaceContainer 

     NodeContainer sta; 
     NetDeviceContainer staDev; 
     NetDeviceContainer apDev; 
     Ipv4InterfaceContainer staInterface; 
     Ipv4InterfaceContainer apInterface; 
     Ipv4InterfaceContainer remoteInterface; 
     MobilityHelper mobility; 
     BridgeHelper bridge; 
     WifiHelper wifi; 
     WifiMacHelper wifiMac; 
     YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default(); 
     wifiPhy.SetChannel (wifiChannel.Create()); 

     sta.Create (nStas); 
     mobility.SetPositionAllocator ("ns3::GridPositionAllocator", 
            "MinX", DoubleValue (wifiX), 
            "MinY", DoubleValue (0.0), 
            "DeltaX", DoubleValue (5.0), 
            "DeltaY", DoubleValue (5.0), 
            "GridWidth", UintegerValue (1), 
            "LayoutType", StringValue ("RowFirst")); 


     // setup the AP. 
     mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); 
     mobility.Install (remoteHost); 
     mobility.Install (backboneNodes.Get (i)); 
     wifiMac.SetType ("ns3::ApWifiMac", 
         "Ssid", SsidValue (ssid)); 
     apDev = wifi.Install (wifiPhy, wifiMac, backboneNodes.Get (i)); 

     NetDeviceContainer bridgeDev; 
     bridgeDev = bridge.Install (backboneNodes.Get (i), NetDeviceContainer (apDev, backboneDevices.Get (i))); 

     // assign AP IP address to bridge, not wifi 
     apInterface = ip.Assign (bridgeDev); 
     remoteInterface = ip.Assign (p2pDevices); 

     // setup the STAs 
     stack.Install (sta); 
     mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); 
     mobility.Install (sta); 
     wifiMac.SetType ("ns3::StaWifiMac", 
         "Ssid", SsidValue (ssid), 
         "ActiveProbing", BooleanValue (false)); 
     staDev = wifi.Install (wifiPhy, wifiMac, sta); 
     staInterface = ip.Assign (staDev); 

     //creating udp applications 

     UdpEchoServerHelper echoServer (9); 

     ApplicationContainer serverApps = echoServer.Install(remoteHost.Get(0)); 
     serverApps.Start (Seconds (1.0)); 
     serverApps.Stop (Seconds (10.0)); 

     UdpEchoClientHelper echoClient (remoteInterface.GetAddress(1), 9); 
     echoClient.SetAttribute ("MaxPackets", UintegerValue (1)); 
     echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0))); 
     echoClient.SetAttribute ("PacketSize", UintegerValue (1024)); 

     ApplicationContainer clientApps = echoClient.Install(sta.Get(0)); 
     clientApps.Start (Seconds (2.0)); 
     clientApps.Stop (Seconds (10.0)); 

     // save everything in containers. 
     staNodes.push_back (sta); 
     apDevices.push_back (apDev); 
     apInterfaces.push_back (apInterface); 
     staDevices.push_back (staDev); 
     staInterfaces.push_back (staInterface); 

     wifiX += 20.0; 
    } 
    Ipv4GlobalRoutingHelper::PopulateRoutingTables(); 

/* Address dest; 
    std::string protocol; 
    if (sendIp) 
    { 
     dest = InetSocketAddress (staInterfaces[1].GetAddress (1), 1025); 
     protocol = "ns3::UdpSocketFactory"; 
    } 
    else 
    { 
     PacketSocketAddress tmp; 
     tmp.SetSingleDevice (staDevices[0].Get (0)->GetIfIndex()); 
     tmp.SetPhysicalAddress (staDevices[1].Get (0)->GetAddress()); 
     tmp.SetProtocol (0x807); 
     dest = tmp; 
     protocol = "ns3::PacketSocketFactory"; 
    } 

    OnOffHelper onoff = OnOffHelper (protocol, dest); 
    onoff.SetConstantRate (DataRate ("500kb/s")); 
    ApplicationContainer apps = onoff.Install (staNodes[0].Get (0)); 
    apps.Start (Seconds (0.5)); 
    apps.Stop (Seconds (3.0)); 

    wifiPhy.EnablePcap ("wifi-wired-bridging", apDevices[0]); 
    wifiPhy.EnablePcap ("wifi-wired-bridging", apDevices[1]);*/ 

    if (writeMobility) 
    { 
     AsciiTraceHelper ascii; 
     MobilityHelper::EnableAsciiAll (ascii.CreateFileStream ("wifi-wired-bridging.mob")); 
    } 

    AnimationInterface anim("edgecomp2.xml"); 
    Simulator::Stop (Seconds (5.0)); 
    Simulator::Run(); 
    Simulator::Destroy(); 
} 

Antwort