23 #include "ns3/packet.h" 
   25 #include "ns3/pointer.h" 
   26 #include "ns3/mesh-point-device.h" 
   27 #include "ns3/wifi-net-device.h" 
   28 #include "ns3/mesh-wifi-interface-mac.h" 
   41     .AddConstructor<MeshPointDevice> ()
 
   42     .AddAttribute (
"Mtu", 
"The MAC-level Maximum Transmission Unit",
 
   46                    MakeUintegerChecker<uint16_t> ())
 
   47     .AddAttribute ( 
"RoutingProtocol",
 
   48                     "The mesh routing protocol used by this mesh point.",
 
   61   m_channel = CreateObject<BridgeChannel> ();
 
  100   uint16_t& realProtocol = protocol;
 
  109       if (
m_routingProtocol->RemoveRoutingStuff (incomingPort->GetIfIndex (), src48, dst48, packet_copy, realProtocol))
 
  112           Forward (incomingPort, packet, protocol, src48, dst48);
 
  122       if (
m_routingProtocol->RemoveRoutingStuff (incomingPort->GetIfIndex (), src48, dst48, packet_copy, realProtocol))
 
  131     Forward (incomingPort, packet->
Copy (), protocol, src48, dst48);
 
  174   NS_LOG_WARN (
"Manual changing mesh point address can cause routing errors.");
 
  259                            uint16_t protocolNumber)
 
  331       if ((*i)->GetIfIndex () == n)
 
  339 std::vector<Ptr<NetDevice> >
 
  352       NS_FATAL_ERROR (
"Device does not support eui 48 addresses: cannot be used as a mesh point interface.");
 
  354   if (!iface->SupportsSendFrom ())
 
  356       NS_FATAL_ERROR (
"Device does not support SendFrom: cannot be used as a mesh point interface.");
 
  367       NS_FATAL_ERROR (
"Device is not a WiFi NIC: cannot be used as a mesh point interface.");
 
  373         "WiFi device doesn't have correct MAC installed: cannot be used as a mesh point interface.");
 
  375   ifaceMac->SetMeshPointAddress (
m_address);
 
  381   m_channel->AddChannel (iface->GetChannel ());
 
  393                  "Routing protocol must be installed on mesh point to be useful.");
 
  405                          uint16_t protocol, uint32_t outIface)
 
  428   if (outIface != 0xffffffff)
 
  430       GetInterface (outIface)->SendFrom (packet, src, dst, protocol);
 
  436           (*i)->SendFrom (packet->
Copy (), src, dst, protocol);
 
  441   unicastData (0), unicastDataBytes (0), broadcastData (0), broadcastDataBytes (0)
 
  448   os << 
"<Statistics" << std::endl <<
 
uint32_t GetNInterfaces() const 
 
static bool IsMatchingType(const Address &address)
 
Mac48Address m_address
Mesh point MAC address, supposed to be the address of the first added interface. 
 
smart pointer class similar to boost::intrusive_ptr 
 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
 
virtual bool IsBridge() const 
Return true if the net device is acting as a bridge. 
 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register the class in the ns-3 factory. 
 
NetDevice::ReceiveCallback m_rxCallback
Receive action. 
 
void ResetStats()
Reset statistics counters. 
 
virtual bool IsBroadcast() const 
 
uint64_t GetUid(void) const 
Returns the packet's Uid. 
 
virtual bool SetMtu(const uint16_t mtu)
 
bool IsNull(void) const 
Check for null implementation. 
 
virtual ~MeshPointDevice()
D-tor. 
 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
uint32_t GetSize(void) const 
Returns the the size in bytes of the packet (including the zero-filled initial payload). 
 
bool IsBroadcast(void) const 
 
virtual void AddLinkChangeCallback(Callback< void > callback)
 
Statistics m_txStats
Counters. 
 
virtual void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
 
#define NS_FATAL_ERROR(msg)
fatal error handling 
 
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function. 
 
virtual bool IsLinkUp() const 
 
virtual bool IsMulticast() const 
 
Ptr< MeshL2RoutingProtocol > m_routingProtocol
Current routing protocol, used mainly by GetRoutingProtocol. 
 
virtual void DoDispose()
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
 
Ptr< BridgeChannel > m_channel
Virtual channel for upper layers. 
 
virtual void SetReceiveCallback(NetDevice::ReceiveCallback cb)
 
a polymophic address class 
 
virtual Address GetAddress() const 
 
std::vector< Ptr< NetDevice > > GetInterfaces() const 
 
virtual void SetAddress(Address a)
Set the address of this interface. 
 
Ptr< NetDevice > GetInterface(uint32_t id) const 
 
void SetRoutingProtocol(Ptr< MeshL2RoutingProtocol > protocol)
Register routing protocol to be used. Protocol must be already installed on this mesh point...
 
Statistics m_rxStats
Counters. 
 
static Mac48Address GetMulticast(Ipv4Address address)
 
void Forward(Ptr< NetDevice > incomingPort, Ptr< const Packet > packet, uint16_t protocol, const Mac48Address src, const Mac48Address dst)
Forward packet down to interfaces. 
 
Hold an unsigned integer type. 
 
Ptr< AttributeChecker > MakePointerChecker(void)
 
T * PeekPointer(const Ptr< T > &p)
 
Hold together all Wifi-related objects. 
 
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
 
virtual uint32_t GetIfIndex() const 
 
virtual Address GetMulticast(Ipv4Address multicastGroup) const 
Make and return a MAC multicast address using the provided multicast group. 
 
virtual Ptr< Node > GetNode() const 
 
virtual uint16_t GetMtu() const 
 
void AddInterface(Ptr< NetDevice > port)
Attach new interface to the station. 
 
uint32_t broadcastDataBytes
 
virtual void SetNode(Ptr< Node > node)
 
static Mac48Address ConvertFrom(const Address &address)
 
void Report(std::ostream &os) const 
Print statistics counters. 
 
Ptr< Packet > Copy(void) const 
performs a COW copy of the packet. 
 
uint16_t m_mtu
MTU in bytes. 
 
virtual bool SendFrom(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber)
 
virtual void SetPromiscReceiveCallback(NetDevice::PromiscReceiveCallback cb)
 
Statistics m_fwdStats
Counters. 
 
Ptr< Node > m_node
Parent node. 
 
void DoSend(bool success, Ptr< Packet > packet, Mac48Address src, Mac48Address dst, uint16_t protocol, uint32_t iface)
Response callback for L2 routing protocol. 
 
uint32_t unicastDataBytes
 
virtual Address GetBroadcast() const 
 
static TypeId GetTypeId()
Object type ID for NS3 object system. 
 
virtual Ptr< Channel > GetChannel() const 
 
uint32_t m_ifIndex
If index. 
 
Interface for L2 mesh routing protocol and mesh point communication. 
 
void RegisterProtocolHandler(ProtocolHandler handler, uint16_t protocolType, Ptr< NetDevice > device, bool promiscuous=false)
 
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
 
MeshPointDevice()
C-tor create empty (without interfaces and protocols) mesh point. 
 
Describes an IPv6 address. 
 
Ipv4 addresses are stored in host order in this class. 
 
Network layer to device interface. 
 
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN. 
 
virtual bool NeedsArp() const 
 
virtual bool IsPointToPoint() const 
Return true if the net device is on a point-to-point link. 
 
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG. 
 
std::vector< Ptr< NetDevice > > m_ifaces
List of interfaces. 
 
virtual void SetIfIndex(const uint32_t index)
 
PacketType
Packet types are used as they are in Linux. 
 
virtual bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber)
 
void ReceiveFromDevice(Ptr< NetDevice > device, Ptr< const Packet > packet, uint16_t protocol, Address const &source, Address const &destination, PacketType packetType)
Receive packet from interface. 
 
NetDevice::PromiscReceiveCallback m_promiscRxCallback
Promisc receive action. 
 
a unique identifier for an interface. 
 
virtual bool SupportsSendFrom() const 
 
TypeId SetParent(TypeId tid)
 
Basic MAC of mesh point Wi-Fi interface. 
 
Ptr< MeshL2RoutingProtocol > GetRoutingProtocol() const 
Access current routing protocol.