diff --git a/samples/main-ap-wifi.cc b/samples/main-ap-wifi.cc new file mode 100644 index 000000000..9264b0670 --- /dev/null +++ b/samples/main-ap-wifi.cc @@ -0,0 +1,162 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2005,2006,2007 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 + * + * Author: Mathieu Lacage + */ + +#include "ns3/wifi-net-device.h" +#include "ns3/wifi-channel.h" +#include "ns3/simulator.h" +#include "ns3/callback.h" +#include "ns3/ptr.h" +#include "ns3/node.h" +#include "ns3/internet-node.h" +#include "ns3/onoff-application.h" +#include "ns3/static-mobility-model.h" +#include "ns3/ipv4.h" +#include "ns3/random-variable.h" +#include "ns3/inet-socket-address.h" +#include "ns3/global-route-manager.h" + + +#include + +using namespace ns3; + +static Ptr +CreateApNode (Ptr channel, + Position position, + const char *ipAddress, + Ssid ssid) +{ + Ptr node = Create (); + Ptr device = Create (node); + device->SetSsid (ssid); + device->ConnectTo (channel); + Ptr mobility = Create (); + mobility->Set (position); + node->AddInterface (mobility); + + Ptr ipv4 = node->QueryInterface (Ipv4::iid); + uint32_t index = ipv4->AddInterface (device); + ipv4->SetAddress (index, Ipv4Address (ipAddress)); + ipv4->SetNetworkMask (index, Ipv4Mask ("255.255.0.0")); + ipv4->SetUp (index); + return node; +} + +static Ptr +CreateStaNode (Ptr channel, + Position position, + const char *ipAddress, + Ssid ssid) +{ + Ptr node = Create (); + Ptr device = Create (node); + Simulator::ScheduleNow (&NqstaWifiNetDevice::StartActiveAssociation, device, + ssid); + device->ConnectTo (channel); + Ptr mobility = Create (); + mobility->Set (position); + node->AddInterface (mobility); + + Ptr ipv4 = node->QueryInterface (Ipv4::iid); + uint32_t index = ipv4->AddInterface (device); + ipv4->SetAddress (index, Ipv4Address (ipAddress)); + ipv4->SetNetworkMask (index, Ipv4Mask ("255.255.0.0")); + ipv4->SetUp (index); + return node; +} + +static void +SetPosition (Ptr node, Position position) +{ + Ptr mobility = node->QueryInterface (MobilityModel::iid); + mobility->Set (position); +} + +static Position +GetPosition (Ptr node) +{ + Ptr mobility = node->QueryInterface (MobilityModel::iid); + return mobility->Get (); +} + +static void +AdvancePosition (Ptr node) +{ + Position pos = GetPosition (node); + pos.x += 5.0; + if (pos.x >= 210.0) { + return; + } + SetPosition (node, pos); + //std::cout << "x="< channel = Create (); + Ssid ssid = Ssid ("mathieu"); + + Ptr a = CreateApNode (channel, + Position (5.0,0.0,0.0), + "192.168.0.1", + ssid); + Simulator::Schedule (Seconds (1.0), &AdvancePosition, a); + + Ptr b = CreateStaNode (channel, + Position (0.0, 0.0, 0.0), + "192.168.0.2", + ssid); + + Ptr c = CreateStaNode (channel, + Position (0.0, 0.0, 0.0), + "192.168.0.3", + ssid); + + Ptr app = Create (b, InetSocketAddress ("192.168.0.3", 10), + "Udp", + ConstantVariable (42), + ConstantVariable (0)); + app->Start (Seconds (0.5)); + app->Stop (Seconds (43.0)); + + GlobalRouteManager::PopulateRoutingTables (); + + Simulator::Run (); + + Simulator::Destroy (); + + return 0; +} diff --git a/samples/wscript b/samples/wscript index 16ad08ccf..3d07dd856 100644 --- a/samples/wscript +++ b/samples/wscript @@ -44,6 +44,10 @@ def build(bld): obj = bld.create_ns3_program('main-adhoc-wifi', ['core', 'simulator', 'mobility', 'wifi']) obj.source = 'main-adhoc-wifi.cc' + + obj = bld.create_ns3_program('main-ap-wifi', + ['core', 'simulator', 'mobility', 'wifi']) + obj.source = 'main-ap-wifi.cc' obj = bld.create_ns3_program('main-random-walk', ['core', 'simulator', 'mobility'])