22 #ifndef SIXLOWPAN_NET_DEVICE_H 
   23 #define SIXLOWPAN_NET_DEVICE_H 
   28 #include "ns3/traced-callback.h" 
   29 #include "ns3/event-id.h" 
   30 #include "ns3/nstime.h" 
   31 #include "ns3/net-device.h" 
   32 #include "ns3/packet.h" 
   34 #include "ns3/random-variable-stream.h" 
   89   virtual void SetIfIndex (
const uint32_t index);
 
   94   virtual bool SetMtu (
const uint16_t mtu);
 
  103   virtual uint16_t 
GetMtu (
void) 
const;
 
  371   typedef std::pair< std::pair<Address, Address>, std::pair<uint16_t, uint16_t> > 
FragmentKey;
 
void DropOldestFragmentSet()
Drops the oldest fragment set. 
 
void DecompressLowPanUdpNhc(Ptr< Packet > packet, Ipv6Address saddr, Ipv6Address daddr)
Decompress the headers according to NHC compression. 
 
SixLowPanNetDevice & operator=(SixLowPanNetDevice const &)
Copy constructor. 
 
Simulation virtual time values and global simulation resolution. 
 
Smart pointer class similar to boost::intrusive_ptr. 
 
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
 
std::map< FragmentKey, Ptr< Fragments > > MapFragments_t
Container for fragment key -> fragments. 
 
NetDevice::PromiscReceiveCallback m_promiscRxCallback
The callback used to notify higher layers that a packet has been received in promiscuous mode...
 
virtual void SetIfIndex(const uint32_t index)
 
void SetPacketSize(uint32_t packetSize)
Set the packet-to-be-defragmented size. 
 
void AddFirstFragment(Ptr< Packet > fragment)
Add the first packet fragment. 
 
TracedCallback< Ptr< const Packet >, Ptr< SixLowPanNetDevice >, uint32_t > m_txTrace
Callback to trace TX (transmission) packets. 
 
Forward calls to a chain of Callback. 
 
Fragment buffer size exceeded. 
 
Ptr< Packet > m_firstFragment
The very first fragment. 
 
virtual bool IsMulticast(void) const 
 
PacketType
Packet types are used as they are in Linux. 
 
static TypeId GetTypeId(void)
Get the type ID. 
 
virtual Ptr< Channel > GetChannel(void) const 
 
std::pair< std::pair< Address, Address >, std::pair< uint16_t, uint16_t > > FragmentKey
Fragment identifier type: src/dst address src/dst port. 
 
uint16_t m_fragmentReassemblyListSize
How many packets can be rebuilt at the same time. 
 
DropReason
Enumeration of the dropping reasons in SixLoWPAN. 
 
virtual Address GetMulticast(Ipv4Address multicastGroup) const 
Make and return a MAC multicast address using the provided multicast group. 
 
virtual bool SetMtu(const uint16_t mtu)
 
void SetNetDevice(Ptr< NetDevice > device)
Setup SixLowPan to be a proxy for the specified NetDevice. 
 
a polymophic address class 
 
std::map< FragmentKey, EventId >::iterator MapFragmentsTimersI_t
Container Iterator for fragment key -> expiration event. 
 
virtual uint32_t GetIfIndex(void) const 
 
uint32_t CompressLowPanNhc(Ptr< Packet > packet, uint8_t headerType, Address const &src, Address const &dst)
Compress the headers according to NHC compression. 
 
bool m_useIphc
Use IPHC or HC1. 
 
Ptr< Node > m_node
Smart pointer to the Node. 
 
uint32_t CompressLowPanUdpNhc(Ptr< Packet > packet, bool omitChecksum)
Compress the headers according to NHC compression. 
 
uint32_t CompressLowPanIphc(Ptr< Packet > packet, Address const &src, Address const &dst)
Compress the headers according to IPHC compression. 
 
Fragment timeout exceeded. 
 
uint32_t m_packetSize
The size of the reconstructed packet (bytes). 
 
Ptr< NetDevice > GetNetDevice() const 
Returns a smart pointer to the underlying NetDevice. 
 
virtual bool IsLinkUp(void) const 
 
TracedCallback< DropReason, Ptr< const Packet >, Ptr< SixLowPanNetDevice >, uint32_t > m_dropTrace
Callback to trace drop packets. 
 
virtual void SetPromiscReceiveCallback(NetDevice::PromiscReceiveCallback cb)
 
Time m_fragmentExpirationTimeout
Time limit for fragment rebuilding. 
 
virtual bool NeedsArp(void) const 
 
virtual bool IsBroadcast(void) const 
 
bool m_forceEtherType
Force the EtherType number. 
 
std::map< FragmentKey, Ptr< Fragments > >::iterator MapFragmentsI_t
Container Iterator for fragment key -> fragments. 
 
virtual void SetNode(Ptr< Node > node)
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
std::list< Ptr< Packet > > GetFraments() const 
Get a list of the current stored fragments. 
 
uint32_t m_compressionThreshold
Minimum L2 payload size. 
 
Shim performing 6LoWPAN compression, decompression and fragmentation. 
 
Ipv6Address MakeLinkLocalAddressFromMac(Address const &addr)
Make a link-local address from a MAC address. 
 
bool IsEntire() const 
If all fragments have been added. 
 
virtual Ptr< Node > GetNode(void) const 
 
MapFragmentsTimers_t m_fragmentsTimers
Timers related to fragment rebuilding. 
 
virtual Address GetBroadcast(void) const 
 
virtual void AddLinkChangeCallback(Callback< void > callback)
 
NetDevice::ReceiveCallback m_rxCallback
The callback used to notify higher layers that a packet has been received. 
 
Unsupported compression kind. 
 
void DoFragmentation(Ptr< Packet > packet, uint32_t origPacketSize, uint32_t origHdrSize, std::list< Ptr< Packet > > &listFragments)
Performs a packet fragmentation. 
 
void(* DropTracedCallback)(DropReason reason, Ptr< const Packet > packet, Ptr< SixLowPanNetDevice > sixNetDevice, uint32_t ifindex)
TracedCallback signature for. 
 
virtual bool IsBridge(void) const 
Return true if the net device is acting as a bridge. 
 
Ptr< Packet > GetPacket() const 
Get the entire packet. 
 
virtual bool Send(Ptr< Packet > packet, const Address &dest, uint16_t protocolNumber)
 
uint16_t m_etherType
EtherType number (used only if m_forceEtherType is true). 
 
Describes an IPv6 address. 
 
void DecompressLowPanIphc(Ptr< Packet > packet, Address const &src, Address const &dst)
Decompress the headers according to IPHC compression. 
 
Ipv4 addresses are stored in host order in this class. 
 
SixLowPanNetDevice()
Constructor for the SixLowPanNetDevice. 
 
Ipv6Address MakeGlobalAddressFromMac(Address const &addr, Ipv6Address prefix)
Make a global address from a MAC address. 
 
void ReceiveFromDevice(Ptr< NetDevice > device, Ptr< const Packet > packet, uint16_t protocol, Address const &source, Address const &destination, PacketType packetType)
Receives all the packets from a NetDevice for further processing. 
 
Network layer to device interface. 
 
virtual bool SupportsSendFrom() const 
 
void(* RxTxTracedCallback)(Ptr< const Packet > packet, Ptr< SixLowPanNetDevice > sixNetDevice, uint32_t ifindex)
TracedCallback signature for packet send/receive events. 
 
virtual bool IsPointToPoint(void) const 
Return true if the net device is on a point-to-point link. 
 
virtual Address GetAddress(void) const 
 
std::list< std::pair< Ptr< Packet >, uint16_t > > m_fragments
The current fragments. 
 
bool CanCompressLowPanNhc(uint8_t headerType)
Checks if the next header can be compressed using NHC. 
 
bool m_omitUdpChecksum
Omit UDP checksum in NC1 encoding. 
 
bool DoSend(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber, bool doSendFrom)
 
TracedCallback< Ptr< const Packet >, Ptr< SixLowPanNetDevice >, uint32_t > m_rxTrace
Callback to trace RX (reception) packets. 
 
virtual uint16_t GetMtu(void) const 
Returns the link-layer MTU for this interface. 
 
virtual bool SendFrom(Ptr< Packet > packet, const Address &source, const Address &dest, uint16_t protocolNumber)
 
static const uint32_t packetSize
 
Ptr< NetDevice > m_netDevice
Smart pointer to the underlying NetDevice. 
 
void HandleFragmentsTimeout(FragmentKey key, uint32_t iif)
Process the timeout for packet fragments. 
 
void AddFragment(Ptr< Packet > fragment, uint16_t fragmentOffset)
Add a fragment to the pool. 
 
bool ProcessFragment(Ptr< Packet > &packet, Address const &src, Address const &dst, bool isFirst)
Process a packet fragment. 
 
std::map< FragmentKey, EventId > MapFragmentsTimers_t
Container for fragment key -> expiration event. 
 
uint32_t CompressLowPanHc1(Ptr< Packet > packet, Address const &src, Address const &dst)
Compress the headers according to HC1 compression. 
 
virtual void SetReceiveCallback(NetDevice::ReceiveCallback cb)
 
A template-based reference counting class. 
 
a unique identifier for an interface. 
 
uint32_t m_ifIndex
Interface index. 
 
uint8_t DecompressLowPanNhc(Ptr< Packet > packet, Address const &src, Address const &dst, Ipv6Address srcAddress, Ipv6Address dstAddress)
Decompress the headers according to NHC compression. 
 
virtual void SetAddress(Address address)
Set the address of this interface. 
 
void DecompressLowPanHc1(Ptr< Packet > packet, Address const &src, Address const &dst)
Decompress the headers according to HC1 compression. 
 
MapFragments_t m_fragments
Fragments hold to be rebuilt. 
 
Ptr< UniformRandomVariable > m_rng
Rng for the fragments tag. 
 
virtual void DoDispose(void)
Destructor implementation.