A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
wifi-80211p-helper.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2008 INRIA
4  * Copyright (c) 2009 MIRKO BANCHI
5  * Copyright (c) 2013 Dalian University of Technology
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation;
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  *
20  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
21  * Author: Mirko Banchi <mk.banchi@gmail.com>
22  * Author: Junling Bu <linlinjavaer@gmail.com>
23  */
24 #include "ns3/string.h"
25 #include "ns3/log.h"
26 #include <typeinfo>
27 #include "wave-mac-helper.h"
28 #include "wifi-80211p-helper.h"
29 
30 namespace ns3 {
31 
33 {
34 }
35 
37 {
38 }
39 
42 {
43  Wifi80211pHelper helper;
45  helper.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
46  "DataMode", StringValue ("OfdmRate6MbpsBW10MHz"),
47  "ControlMode",StringValue ("OfdmRate6MbpsBW10MHz"));
48  return helper;
49 }
50 
51 void
53 {
54  if ((standard == WIFI_PHY_STANDARD_80211a) || (standard == WIFI_PHY_STANDARD_80211_10MHZ))
55  {
56  WifiHelper::SetStandard (standard);
57  }
58  else
59  {
60  NS_FATAL_ERROR ("802.11p only use 802.11 standard with 10MHz or 20MHz");
61  }
62 }
63 
64 
65 void
67 {
69 
70  LogComponentEnable ("OcbWifiMac", LOG_LEVEL_ALL);
71  LogComponentEnable ("VendorSpecificAction", LOG_LEVEL_ALL);
72 }
73 
75 Wifi80211pHelper::Install (const WifiPhyHelper &phyHelper, const WifiMacHelper &macHelper, NodeContainer c) const
76 {
77  bool isWaveMacHelper = false;
78  try
79  {
80  const QosWaveMacHelper& qosMac = dynamic_cast<const QosWaveMacHelper&> (macHelper);
81  isWaveMacHelper = true;
82  // below check will never fail, just used for survive from
83  // gcc warn "-Wunused-but-set-variable"
84  if (&qosMac == 0)
85  {
86  NS_FATAL_ERROR ("it could never get here");
87  }
88  }
89  catch (const std::bad_cast &)
90  {
91 
92  }
93 
94  try
95  {
96  const NqosWaveMacHelper& nqosMac = dynamic_cast<const NqosWaveMacHelper&> (macHelper);
97  isWaveMacHelper = true;
98  if (&nqosMac == 0)
99  {
100  NS_FATAL_ERROR ("it could never get here");
101  }
102  }
103  catch (const std::bad_cast &)
104  {
105 
106  }
107 
108  if (!isWaveMacHelper)
109  {
110  NS_FATAL_ERROR ("the macHelper should be either QosWaveMacHelper or NqosWaveMacHelper"
111  ", or should be the subclass of QosWaveMacHelper or NqosWaveMacHelper");
112  }
113 
114  return WifiHelper::Install (phyHelper, macHelper, c);
115 }
116 
117 } // namespace ns3
helps to create wifi 802.11p objects of WifiNetDevice class
void SetRemoteStationManager(std::string type, std::string n0="", const AttributeValue &v0=EmptyAttributeValue(), std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue())
Definition: wifi-helper.cc:73
hold variables of type string
Definition: string.h:19
create PHY objects
Definition: wifi-helper.h:46
virtual void SetStandard(enum WifiPhyStandard standard)
OFDM PHY for the 5 GHz band (Clause 17 with 10 MHz channel bandwidth)
#define NS_FATAL_ERROR(msg)
fatal error handling
Definition: fatal-error.h:72
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &mac, NodeContainer c) const
Definition: wifi-helper.cc:102
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
holds a vector of ns3::NetDevice pointers
virtual void SetStandard(enum WifiPhyStandard standard)
Definition: wifi-helper.cc:96
virtual NetDeviceContainer Install(const WifiPhyHelper &phy, const WifiMacHelper &macHelper, NodeContainer c) const
OFDM PHY for the 5 GHz band (Clause 17)
keep track of a set of node pointers.
static Wifi80211pHelper Default(void)
create MAC objects
Definition: wifi-helper.h:68
static void EnableLogComponents(void)
Helper to enable all WifiNetDevice log components with one statement.
Definition: wifi-helper.cc:142
static void EnableLogComponents(void)
Helper to enable all WifiNetDevice log components with one statement.
void LogComponentEnable(char const *name, enum LogLevel level)
Definition: log.cc:311