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" 
   42     .AddConstructor<MeshPointDevice> ()
 
   43     .AddAttribute (
"Mtu", 
"The MAC-level Maximum Transmission Unit",
 
   47                    MakeUintegerChecker<uint16_t> ())
 
   48     .AddAttribute ( 
"RoutingProtocol",
 
   49                     "The mesh routing protocol used by this mesh point.",
 
   62   m_channel = CreateObject<BridgeChannel> ();
 
  101   uint16_t& realProtocol = protocol;
 
  110       if (
m_routingProtocol->RemoveRoutingStuff (incomingPort->GetIfIndex (), src48, dst48, packet_copy, realProtocol))
 
  113           Forward (incomingPort, packet, protocol, src48, dst48);
 
  123       if (
m_routingProtocol->RemoveRoutingStuff (incomingPort->GetIfIndex (), src48, dst48, packet_copy, realProtocol))
 
  132     Forward (incomingPort, packet->
Copy (), protocol, src48, dst48);
 
  175   NS_LOG_WARN (
"Manual changing mesh point address can cause routing errors.");
 
  260                            uint16_t protocolNumber)
 
  332       if ((*i)->GetIfIndex () == n)
 
  340 std::vector<Ptr<NetDevice> >
 
  353       NS_FATAL_ERROR (
"Device does not support eui 48 addresses: cannot be used as a mesh point interface.");
 
  355   if (!iface->SupportsSendFrom ())
 
  357       NS_FATAL_ERROR (
"Device does not support SendFrom: cannot be used as a mesh point interface.");
 
  368       NS_FATAL_ERROR (
"Device is not a WiFi NIC: cannot be used as a mesh point interface.");
 
  374         "WiFi device doesn't have correct MAC installed: cannot be used as a mesh point interface.");
 
  376   ifaceMac->SetMeshPointAddress (
m_address);
 
  382   m_channel->AddChannel (iface->GetChannel ());
 
  394                  "Routing protocol must be installed on mesh point to be useful.");
 
  406                          uint16_t protocol, uint32_t outIface)
 
  429   if (outIface != 0xffffffff)
 
  431       GetInterface (outIface)->SendFrom (packet, src, dst, protocol);
 
  437           (*i)->SendFrom (packet->
Copy (), src, dst, protocol);
 
  442   unicastData (0), unicastDataBytes (0), broadcastData (0), broadcastDataBytes (0)
 
  449   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)
 
virtual bool IsBridge() const 
Return true if the net device is acting as a bridge. 
 
NetDevice::ReceiveCallback m_rxCallback
Receive action. 
 
void ResetStats()
Reset statistics counters. 
 
virtual bool IsBroadcast() const 
 
uint64_t GetUid(void) const 
A packet is allocated a new uid when it is created empty or with zero-filled payload. 
 
virtual bool SetMtu(const uint16_t mtu)
 
bool IsNull(void) const 
Check for null implementation. 
 
virtual ~MeshPointDevice()
D-tor. 
 
#define NS_ASSERT(condition)
 
NS_OBJECT_ENSURE_REGISTERED(NullMessageSimulatorImpl)
 
uint32_t GetSize(void) const 
 
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_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. 
 
#define NS_FATAL_ERROR(msg)
fatal error handling 
 
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 
 
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)
 
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. 
 
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)
 
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. 
 
NS_LOG_COMPONENT_DEFINE("MeshPointDevice")