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)
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
virtual bool SetMtu(const uint16_t mtu)
virtual ~MeshPointDevice()
D-tor.
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
uint32_t GetSize(void) const
bool IsBroadcast(void) const
virtual void AddLinkChangeCallback(Callback< void > callback)
Statistics m_txStats
Counters.
virtual void DoDispose(void)
#define NS_LOG_FUNCTION_NOARGS()
virtual bool IsLinkUp() const
virtual bool IsMulticast() const
Ptr< MeshL2RoutingProtocol > m_routingProtocol
Current routing protocol, used mainly by GetRoutingProtocol.
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)
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)
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
T * PeekPointer(const Ptr< T > &p)
Hold together all Wifi-related objects.This class holds together ns3::WifiChannel, ns3::WifiPhy, ns3::WifiMac, and, ns3::WifiRemoteStationManager.
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. Interface must support 48-bit MAC address and SendFrom method...
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.
hold objects of type Ptr<T>
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. This will be executed when routing information is ready...
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)
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. Its function is extendable through plugins mechanism...
Ptr< MeshL2RoutingProtocol > GetRoutingProtocol() const
Access current routing protocol.