src/sixlowpan/model/sixlowpan-net-device.h
author Tommaso Pecorella <tommaso.pecorella@unifi.it>
Sat, 25 Jul 2015 23:55:40 +0200
changeset 11540 29d2c2f5c2cf
parent 11086 65914b1ed5b3
child 11606 98fa74311b21
permissions -rw-r--r--
[Doxygen] update sixlowpan in/out params
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
     2
/*
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
     3
 * Copyright (c) 2013 Universita' di Firenze, Italy
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
     4
 *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
     8
 *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    12
 * GNU General Public License for more details.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    13
 *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    17
 *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    18
 * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    19
 *         Michele Muccio <michelemuccio@virgilio.it>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    20
 */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    21
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    22
#ifndef SIXLOWPAN_NET_DEVICE_H
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    23
#define SIXLOWPAN_NET_DEVICE_H
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    24
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    25
#include <stdint.h>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    26
#include <string>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    27
#include <map>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    28
#include "ns3/traced-callback.h"
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    29
#include "ns3/event-id.h"
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    30
#include "ns3/nstime.h"
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    31
#include "ns3/net-device.h"
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    32
#include "ns3/packet.h"
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    33
#include "sixlowpan-header.h"
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    34
#include "ns3/random-variable-stream.h"
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    35
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    36
namespace ns3 {
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    37
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    38
class Node;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    39
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    40
/**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    41
 * \defgroup sixlowpan 6LoWPAN
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
    42
 * \brief Performs 6LoWPAN compression of IPv6 packets as specified by \RFC{4944} and \RFC{6282}
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    43
 *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    44
 * This module acts as a shim between IPv6 and a generic NetDevice.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    45
 *
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
    46
 * The module implements \RFC{4944} and \RFC{6282}, with the following exceptions:
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    47
 * <ul>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    48
 * <li> MESH and LOWPAN_BC0 dispatch types are not supported </li>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    49
 * <li> HC2 encoding is not supported </li>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    50
 * <li> IPHC's SAC and DAC are not supported </li>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    51
 *</ul>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    52
 */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    53
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    54
/**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    55
 * \ingroup sixlowpan
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    56
 *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    57
 * \brief Shim performing 6LoWPAN compression, decompression and fragmentation.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    58
 *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    59
 * This class implements the shim between IPv6 and a generic NetDevice,
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    60
 * performing packet compression, decompression and fragmentation in a transparent way.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    61
 * To this end, the class pretend to be a normal NetDevice, masquerading some functions
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    62
 * of the underlying NetDevice.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    63
 */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    64
class SixLowPanNetDevice : public NetDevice
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    65
{
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    66
public:
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    67
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    68
   * Enumeration of the dropping reasons in SixLoWPAN.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    69
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    70
  enum DropReason
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    71
  {
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    72
    DROP_FRAGMENT_TIMEOUT = 1, /**< Fragment timeout exceeded */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    73
    DROP_FRAGMENT_BUFFER_FULL, /**< Fragment buffer size exceeded */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    74
    DROP_UNKNOWN_EXTENSION /**< Unsupported compression kind */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    75
  };
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    76
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    77
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    78
   * \brief Get the type ID.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
    79
   * \return The object TypeId.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    80
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    81
  static TypeId GetTypeId (void);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    82
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    83
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    84
   * Constructor for the SixLowPanNetDevice.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    85
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    86
  SixLowPanNetDevice ();
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    87
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    88
  // inherited from NetDevice base class
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    89
  virtual void SetIfIndex (const uint32_t index);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    90
  virtual uint32_t GetIfIndex (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    91
  virtual Ptr<Channel> GetChannel (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    92
  virtual void SetAddress (Address address);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    93
  virtual Address GetAddress (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    94
  virtual bool SetMtu (const uint16_t mtu);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    95
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    96
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    97
   * \brief Returns the link-layer MTU for this interface.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
    98
   * If the link-layer MTU is smaller than IPv6's minimum MTU (\RFC{4944}),
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
    99
   * 1280 will be returned.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   100
   *
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   101
   * \return The link-level MTU in bytes for this interface.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   102
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   103
  virtual uint16_t GetMtu (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   104
  virtual bool IsLinkUp (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   105
  virtual void AddLinkChangeCallback (Callback<void> callback);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   106
  virtual bool IsBroadcast (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   107
  virtual Address GetBroadcast (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   108
  virtual bool IsMulticast (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   109
  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   110
  virtual bool IsPointToPoint (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   111
  virtual bool IsBridge (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   112
  virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   113
  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   114
  virtual Ptr<Node> GetNode (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   115
  virtual void SetNode (Ptr<Node> node);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   116
  virtual bool NeedsArp (void) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   117
  virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   118
  virtual void SetPromiscReceiveCallback (NetDevice::PromiscReceiveCallback cb);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   119
  virtual bool SupportsSendFrom () const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   120
  virtual Address GetMulticast (Ipv6Address addr) const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   121
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   122
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   123
   * \brief Returns a smart pointer to the underlying NetDevice.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   124
   *
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   125
   * \return A smart pointer to the underlying NetDevice.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   126
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   127
  Ptr<NetDevice> GetNetDevice () const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   128
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   129
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   130
   * \brief Setup SixLowPan to be a proxy for the specified NetDevice.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   131
   * All the packets incoming and outgoing from the NetDevice will be
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   132
   * processed by SixLowPanNetDevice.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   133
   *
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   134
   * \param [in] device A smart pointer to the NetDevice to be proxied.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   135
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   136
  void SetNetDevice (Ptr<NetDevice> device);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   137
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   138
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   139
   * Assign a fixed random variable stream number to the random variables
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   140
   * used by this model.  Return the number of streams (possibly zero) that
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   141
   * have been assigned.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   142
   *
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   143
   * \param [in] stream First stream index to use.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   144
   * \return the number of stream indices assigned by this model.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   145
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   146
  int64_t AssignStreams (int64_t stream);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   147
11086
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   148
  /**
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   149
   * TracedCallback signature for packet send/receive events.
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   150
   *
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   151
   * \param [in] packet The packet.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   152
   * \param [in] sixNetDevice The SixLowPanNetDevice.
11086
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   153
   * \param [in] ifindex The ifindex of the device.
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   154
   */
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   155
  typedef void (* RxTxTracedCallback)
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   156
    (const Ptr<const Packet> packet,
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   157
     const Ptr<const SixLowPanNetDevice> sixNetDevice,
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   158
     const uint32_t ifindex);
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   159
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   160
  /**
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   161
   * TracedCallback signature for
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   162
   *
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   163
   * \param [in] reason The reason for the drop.
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   164
   * \param [in] packet The packet.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   165
   * \param [in] sixNetDevice The SixLowPanNetDevice.
11086
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   166
   * \param [in] ifindex The ifindex of the device.
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   167
   */
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   168
  typedef void (* DropTracedCallback)
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   169
    (const DropReason reason, const Ptr<const Packet> packet,
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   170
     const Ptr<const SixLowPanNetDevice> sixNetDevice,
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   171
     const uint32_t ifindex);
65914b1ed5b3 TracedCallback function signatures, the rest.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10665
diff changeset
   172
   
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   173
protected:
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   174
  virtual void DoDispose (void);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   175
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   176
private:
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   177
  /**
10481
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   178
   * \brief Copy constructor
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   179
   *
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   180
   * Defined and unimplemented to avoid misuse.
10481
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   181
   */
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   182
  SixLowPanNetDevice (SixLowPanNetDevice const &);
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   183
  /**
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   184
   * \brief Copy constructor
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   185
   *
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   186
   * Defined and unimplemented to avoid misuse.
10505
03c1ce391a43 Fix sixlowpan module documentation (thanks Peter)
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10481
diff changeset
   187
   * \returns
10481
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   188
   */
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   189
  SixLowPanNetDevice& operator= (SixLowPanNetDevice const &);
1636f0d5c9e2 make copy constructors implicit, for bindings generation
Tom Henderson <tomh@tomh.org>
parents: 10479
diff changeset
   190
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   191
   * \brief Receives all the packets from a NetDevice for further processing.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   192
   * \param [in] device The NetDevice the packet ws received from.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   193
   * \param [in] packet The received packet.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   194
   * \param [in] protocol The protocol (if known).
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   195
   * \param [in] source The source address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   196
   * \param [in] destination The destination address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   197
   * \param [in] packetType The packet kind (e.g., HOST, BROADCAST, etc.).
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   198
   * \return The IPv6 link-local address.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   199
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   200
  void ReceiveFromDevice (Ptr<NetDevice> device, Ptr<const Packet> packet, uint16_t protocol,
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   201
                          Address const &source, Address const &destination, PacketType packetType);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   202
10665
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   203
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   204
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   205
   * \param [in] packet Packet sent from above down to Network Device.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   206
   * \param [in] source Source mac address (only used if doSendFrom is true, i.e., "MAC spoofing").
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   207
   * \param [in] dest Mac address of the destination (already resolved).
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   208
   * \param [in] protocolNumber Identifies the type of payload contained in
10665
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   209
   *        this packet. Used to call the right L3Protocol when the packet
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   210
   *        is received.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   211
   * \param [in] doSendFrom Perform a SendFrom instead of a Send.
10665
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   212
   *
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   213
   *  Called from higher layer to send packet into Network Device
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   214
   *  with the specified source and destination Addresses.
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   215
   *
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   216
   * \return Whether the Send operation succeeded.
10665
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   217
   */
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   218
  bool DoSend (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber, bool doSendFrom);
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   219
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   220
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   221
   * The callback used to notify higher layers that a packet has been received.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   222
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   223
  NetDevice::ReceiveCallback m_rxCallback;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   224
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   225
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   226
   * The callback used to notify higher layers that a packet has been received in promiscuous mode.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   227
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   228
  NetDevice::PromiscReceiveCallback m_promiscRxCallback;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   229
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   230
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   231
   * \brief Callback to trace TX (transmission) packets.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   232
   *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   233
   * Data passed:
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   234
   * \li Packet received (including 6LoWPAN header)
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   235
   * \li Ptr to SixLowPanNetDevice
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   236
   * \li interface index
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   237
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   238
  TracedCallback<Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_txTrace;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   239
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   240
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   241
   * \brief Callback to trace RX (reception) packets.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   242
   *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   243
   * Data passed:
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   244
   * \li Packet received (including 6LoWPAN header)
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   245
   * \li Ptr to SixLowPanNetDevice
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   246
   * \li interface index
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   247
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   248
  TracedCallback<Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_rxTrace;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   249
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   250
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   251
   * \brief Callback to trace drop packets.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   252
   *
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   253
   * Data passed:
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   254
   * \li DropReason
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   255
   * \li Packet dropped (including 6LoWPAN header)
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   256
   * \li Ptr to SixLowPanNetDevice
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   257
   * \li interface index
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   258
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   259
  TracedCallback<DropReason, Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_dropTrace;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   260
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   261
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   262
   * \brief Make a link-local address from a MAC address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   263
   * \param [in] addr The MAC address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   264
   * \return The IPv6 link-local address.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   265
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   266
  Ipv6Address MakeLinkLocalAddressFromMac (Address const &addr);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   267
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   268
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   269
   * \brief Make a global address from a MAC address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   270
   * \param [in] addr the MAC address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   271
   * \param [in] prefix The address prefix.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   272
   * \return The IPv6 address.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   273
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   274
  Ipv6Address MakeGlobalAddressFromMac (Address const &addr, Ipv6Address prefix);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   275
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   276
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   277
   * \brief Compress the headers according to HC1 compression.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   278
   * \param [in] packet The packet to be compressed.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   279
   * \param [in] src The MAC source address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   280
   * \param [in] dst The MAC destination address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   281
   * \return The size of the removed headers.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   282
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   283
  uint32_t CompressLowPanHc1 (Ptr<Packet> packet, Address const &src, Address const &dst);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   284
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   285
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   286
   * \brief Decompress the headers according to HC1 compression.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   287
   * \param [in] packet the packet to be compressed.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   288
   * \param [in] src the MAC source address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   289
   * \param [in] dst the MAC destination address.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   290
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   291
  void DecompressLowPanHc1 (Ptr<Packet> packet, Address const &src, Address const &dst);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   292
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   293
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   294
   * \brief Compress the headers according to IPHC compression.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   295
   * \param [in] packet The packet to be compressed.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   296
   * \param [in] src The MAC source address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   297
   * \param [in] dst The MAC destination address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   298
   * \return The size of the removed headers.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   299
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   300
  uint32_t CompressLowPanIphc (Ptr<Packet> packet, Address const &src, Address const &dst);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   301
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   302
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   303
   * \brief Checks if the next header can be compressed using NHC.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   304
   * \param [in] headerType The header kind to be compressed.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   305
   * \return True if the header can be compressed.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   306
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   307
  bool CanCompressLowPanNhc (uint8_t headerType);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   308
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   309
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   310
   * \brief Decompress the headers according to IPHC compression.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   311
   * \param [in] packet The packet to be compressed.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   312
   * \param [in] src The MAC source address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   313
   * \param [in] dst The MAC destination address.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   314
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   315
  void DecompressLowPanIphc (Ptr<Packet> packet, Address const &src, Address const &dst);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   316
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   317
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   318
   * \brief Compress the headers according to NHC compression.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   319
   * \param [in] packet The packet to be compressed.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   320
   * \param [in] headerType The header type.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   321
   * \param [in] src The MAC source address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   322
   * \param [in] dst The MAC destination address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   323
   * \return The size of the removed headers.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   324
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   325
  uint32_t CompressLowPanNhc (Ptr<Packet> packet, uint8_t headerType, Address const &src, Address const &dst);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   326
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   327
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   328
   * \brief Decompress the headers according to NHC compression.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   329
   * \param [in] packet The packet to be compressed.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   330
   * \param [in] src The MAC source address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   331
   * \param [in] dst The MAC destination address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   332
   * \param [in] srcAddress The IPv6 source address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   333
   * \param [in] dstAddress The IPv6 destination address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   334
   * \return The decompressed header type.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   335
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   336
  uint8_t DecompressLowPanNhc (Ptr<Packet> packet, Address const &src, Address const &dst, Ipv6Address srcAddress, Ipv6Address dstAddress);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   337
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   338
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   339
   * \brief Compress the headers according to NHC compression.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   340
   * \param [in] packet The packet to be compressed.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   341
   * \param [in] omitChecksum Omit UDP checksum (if true).
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   342
   * \return The size of the removed headers.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   343
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   344
  uint32_t CompressLowPanUdpNhc (Ptr<Packet> packet, bool omitChecksum);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   345
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   346
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   347
   * \brief Decompress the headers according to NHC compression.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   348
   * \param [in] packet The packet to be compressed.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   349
   * \param [in] saddr The IPv6 source address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   350
   * \param [in] daddr The IPv6 destination address.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   351
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   352
  void DecompressLowPanUdpNhc (Ptr<Packet> packet, Ipv6Address saddr, Ipv6Address daddr);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   353
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   354
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   355
   * Fragment identifier type: src/dst address src/dst port.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   356
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   357
  typedef std::pair< std::pair<Address, Address>, std::pair<uint16_t, uint16_t> > FragmentKey;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   358
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   359
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   360
   * \class Fragments
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   361
   * \brief A Set of Fragment.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   362
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   363
  class Fragments : public SimpleRefCount<Fragments>
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   364
  {
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   365
public:
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   366
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   367
     * \brief Constructor.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   368
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   369
    Fragments ();
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   370
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   371
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   372
     * \brief Destructor.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   373
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   374
    ~Fragments ();
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   375
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   376
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   377
     * \brief Add a fragment to the pool.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   378
     * \param [in] fragment the fragment.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   379
     * \param [in] fragmentOffset the offset of the fragment.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   380
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   381
    void AddFragment (Ptr<Packet> fragment, uint16_t fragmentOffset);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   382
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   383
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   384
     * \brief Add the first packet fragment. The first fragment is needed to
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   385
     * allow the post-defragmentation decompression.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   386
     * \param [in] fragment The fragment.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   387
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   388
    void AddFirstFragment (Ptr<Packet> fragment);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   389
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   390
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   391
     * \brief If all fragments have been added.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   392
     * \returns True if the packet is entire.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   393
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   394
    bool IsEntire () const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   395
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   396
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   397
     * \brief Get the entire packet.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   398
     * \return The entire packet.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   399
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   400
    Ptr<Packet> GetPacket () const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   401
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   402
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   403
     * \brief Set the packet-to-be-defragmented size.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   404
     * \param [in] packetSize The packet size (bytes).
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   405
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   406
    void SetPacketSize (uint32_t packetSize);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   407
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   408
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   409
     * \brief Get a list of the current stored fragments.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   410
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   411
    std::list< Ptr<Packet> > GetFraments () const;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   412
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   413
private:
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   414
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   415
     * \brief The size of the reconstructed packet (bytes).
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   416
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   417
    uint32_t m_packetSize;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   418
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   419
    /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   420
     * \brief The current fragments.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   421
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   422
    std::list<std::pair<Ptr<Packet>, uint16_t> > m_fragments;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   423
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   424
    /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   425
     * \brief The very first fragment.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   426
     */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   427
    Ptr<Packet> m_firstFragment;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   428
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   429
  };
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   430
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   431
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   432
   * \brief Performs a packet fragmentation.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   433
   * \param [in] packet the packet to be fragmented (with headers already compressed with 6LoWPAN).
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   434
   * \param [in] origPacketSize the size of the IP packet before the 6LoWPAN header compression, including the IP/L4 headers.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   435
   * \param [in] origHdrSize the size of the IP header before the 6LoWPAN header compression.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   436
   * \param [out] listFragments A reference to the list of the resulting packets, all with the proper headers in place.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   437
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   438
  void DoFragmentation (Ptr<Packet> packet, uint32_t origPacketSize, uint32_t origHdrSize,
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   439
                        std::list<Ptr<Packet> >& listFragments);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   440
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   441
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   442
   * \brief Process a packet fragment.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   443
   * \param [in] packet The packet.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   444
   * \param [in] src The source MAC address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   445
   * \param [in] dst The destination MAC address.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   446
   * \param [in] isFirst True if it is the first fragment, false otherwise.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   447
   * \return True is the fragment completed the packet.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   448
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   449
  bool ProcessFragment (Ptr<Packet>& packet, Address const &src, Address const &dst, bool isFirst);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   450
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   451
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   452
   * \brief Process the timeout for packet fragments.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   453
   * \param [in] key A key representing the packet fragments.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   454
   * \param [in] iif Input Interface.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   455
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   456
  void HandleFragmentsTimeout ( FragmentKey key, uint32_t iif);
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   457
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   458
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   459
   * \brief Drops the oldest fragment set.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   460
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   461
  void DropOldestFragmentSet ();
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   462
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   463
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   464
   * Container for fragment key -> fragments.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   465
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   466
  typedef std::map< FragmentKey, Ptr<Fragments> > MapFragments_t;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   467
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   468
   * Container Iterator for fragment key -> fragments.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   469
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   470
  typedef std::map< FragmentKey, Ptr<Fragments> >::iterator MapFragmentsI_t;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   471
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   472
   * Container for fragment key -> expiration event.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   473
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   474
  typedef std::map< FragmentKey, EventId > MapFragmentsTimers_t;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   475
  /**
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   476
   * Container Iterator for fragment key -> expiration event.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   477
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   478
  typedef std::map< FragmentKey, EventId >::iterator MapFragmentsTimersI_t;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   479
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   480
  MapFragments_t       m_fragments; //!< Fragments hold to be rebuilt.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   481
  MapFragmentsTimers_t m_fragmentsTimers; //!< Timers related to fragment rebuilding.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   482
  Time                 m_fragmentExpirationTimeout; //!< Time limit for fragment rebuilding.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   483
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   484
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   485
   * \brief How many packets can be rebuilt at the same time.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   486
   * Some real implementation do limit this. Zero means no limit.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   487
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   488
  uint16_t             m_fragmentReassemblyListSize;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   489
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   490
  bool m_useIphc; //!< Use IPHC or HC1.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   491
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   492
  Ptr<Node> m_node; //!< Smart pointer to the Node.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   493
  Ptr<NetDevice> m_netDevice; //!< Smart pointer to the underlying NetDevice.
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   494
  uint32_t m_ifIndex; //!< Interface index.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   495
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   496
  /**
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   497
   * \brief Force the EtherType number.
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   498
   * Also implying that the underlying NetDevice is using 48-bit Addresses, e.g., Ethernet, Wi-Fi, etc.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   499
   */
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   500
  bool m_forceEtherType;
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   501
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   502
  uint16_t m_etherType; //!< EtherType number (used only if m_forceEtherType is true).
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   503
  bool m_omitUdpChecksum; //!< Omit UDP checksum in NC1 encoding.
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   504
11540
29d2c2f5c2cf [Doxygen] update sixlowpan in/out params
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 11086
diff changeset
   505
  uint32_t m_compressionThreshold; //!< Minimum L2 payload size.
10665
57dd71d4886e Add 6LoWPAN uncompressed IPv6 header support
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 10506
diff changeset
   506
10479
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   507
  Ptr<UniformRandomVariable> m_rng; //!< Rng for the fragments tag.
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   508
};
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   509
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   510
} // namespace ns3
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   511
fc4ee8106e4a 6LoWPAN module
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents:
diff changeset
   512
#endif /* SIXLOWPAN_NET_DEVICE_H */