NS3:802.11a wifi (a AP and a node)

一。程序

sample.cc (略)

/* -*-  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 * * Authors: Rohan Patidar*/// This script outputs the throughput at 6Mbps rate with respect to distace // between the nodes for UDP, // The simulation assumes a single station in an infrastructure network://

//  STA    AP//    *    *//    |    |//  n1    n2

#include "ns3/core-module.h"

#include "ns3/applications-module.h"

#include "ns3/wifi-module.h"

#include "ns3/mobility-module.h"

#include "ns3/internet-module.h"

#include "ns3/gnuplot.h"

using namespace ns3;

int main (int argc, char *argv[])

{  

      std::vector <std::string> modes;  

      modes.push_back ("OfdmRate6Mbps"); 

      modes.push_back ("OfdmRate12Mbps");  

     modes.push_back ("OfdmRate18Mbps"); 

      modes.push_back ("OfdmRate24Mbps"); 

      modes.push_back ("OfdmRate36Mbps");  

      modes.push_back ("OfdmRate48Mbps");  

      modes.push_back ("OfdmRate54Mbps");  

      double simulationTime = 5; //seconds  

       bool shortGuardInterval = false;    

for (uint32_t i = 0; i < modes.size (); i++) //MCS       

 {         

                std::cout << modes[i] << std::endl;             

                  uint32_t payloadSize; //1500 byte IP packet 

                 payloadSize = 1472; //bytes             

                 NodeContainer wifiStaNode;      

                  wifiStaNode.Create (1);    

                  NodeContainer wifiApNode;      

                    wifiApNode.Create (1);                

                   // Set channel type        

                  YansWifiChannelHelper channel = YansWifiChannelHelper::Default ();    

                   YansWifiPhyHelper phy = YansWifiPhyHelper::Default ();        

                   phy.SetChannel (channel.Create ());       

                    // Set guard interval      

                   phy.Set ("ShortGuardEnabled", BooleanValue (shortGuardInterval));            

                   //     

                   WifiMacHelper mac;      

                   WifiHelper wifi;       

                   wifi.SetStandard (WIFI_PHY_STANDARD_80211a);     

                   wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode", StringValue (modes[i]));   

                   Ssid ssid = Ssid ("ns3-80211a");      

                  mac.SetType ("ns3::StaWifiMac", "Ssid", SsidValue (ssid));       

                   NetDeviceContainer staDevice;       

                   staDevice = wifi.Install (phy, mac, wifiStaNode);       

                   mac.SetType ("ns3::ApWifiMac","Ssid", SsidValue (ssid));      

                      NetDeviceContainer apDevice;     

                  apDevice = wifi.Install (phy, mac, wifiApNode);        

                  // mobility.      

                    MobilityHelper mobility;       

                   PtrpositionAlloc = CreateObject();        

                    positionAlloc->Add (Vector (0.0, 0.0, 0.0));     

                    positionAlloc->Add (Vector (10, 0.0, 0.0));       

                   mobility.SetPositionAllocator (positionAlloc);     

                    mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");       

                     mobility.Install (wifiApNode);        

                      mobility.Install (wifiStaNode);     

                     /* Internet stack*/       

                      InternetStackHelper stack;       

                      stack.Install (wifiApNode);      

                       stack.Install (wifiStaNode);     

                      Ipv4AddressHelper address;    

                       address.SetBase ("192.168.1.0", "255.255.255.0");   

                       Ipv4InterfaceContainer staNodeInterface;      

                      Ipv4InterfaceContainer apNodeInterface;      

                      staNodeInterface = address.Assign (staDevice);       

                       apNodeInterface = address.Assign (apDevice);     

                            /* Setting applications */     

                           ApplicationContainer serverApp;          

                          //UDP flow        

                       uint16_t port = 9;   

                      UdpServerHelper server (port);       

                      serverApp = server.Install (wifiStaNode.Get (0));      

                       serverApp.Start (Seconds (0.0));     

                      serverApp.Stop (Seconds (simulationTime + 1));      

                      UdpClientHelper client (staNodeInterface.GetAddress (0), port);      

                     client.SetAttribute ("MaxPackets", UintegerValue (4294967295u));    

                     client.SetAttribute ("Interval", TimeValue (Time ("0.00001"))); //packets/s     

                     client.SetAttribute ("PacketSize", UintegerValue (payloadSize));      

                    ApplicationContainer clientApp = client.Install (wifiApNode.Get (0)); 

                      clientApp.Start (Seconds (1.0));    

                      clientApp.Stop (Seconds (simulationTime + 1));     

                       Ipv4GlobalRoutingHelper::PopulateRoutingTables ();    

                     Simulator::Stop (Seconds (simulationTime + 1));      

                      Simulator::Run ();         

                     Simulator::Destroy ();       

                    double throughput = 0;             

                    uint64_t totalPacketsThrough = DynamicCast(serverApp.Get (0))->GetReceived ();

                    throughput = totalPacketsThrough * payloadSize * 8 / (simulationTime * 1000000.0); //Mbit/s

                   std::cout << "Throughput: " << throughput << " Mbit/s" << std::endl;

}

return 0;

}

二. 运行结果


图一
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容