View | Details | Raw Unified | Return to bug 2413
Collapse All | Expand All

(-)a/src/internet/helper/ipv6-address-helper.cc (+7 lines)
 Lines 86-91   Ipv6Address Ipv6AddressHelper::NewAddress (Address addr) Link Here 
86
      Ipv6AddressGenerator::AddAllocated (address);
86
      Ipv6AddressGenerator::AddAllocated (address);
87
      return address;
87
      return address;
88
    }
88
    }
89
  else if (Mac8Address::IsMatchingType (addr))
90
    {
91
      Ipv6Address network = Ipv6AddressGenerator::GetNetwork (Ipv6Prefix (64));
92
      Ipv6Address address = Ipv6Address::MakeAutoconfiguredAddress (Mac8Address::ConvertFrom (addr), network);
93
      Ipv6AddressGenerator::AddAllocated (address);
94
      return address;
95
    }
89
  else
96
  else
90
    {
97
    {
91
      NS_FATAL_ERROR ("Did not pass in a valid Mac Address (16, 48 or 64 bits)");
98
      NS_FATAL_ERROR ("Did not pass in a valid Mac Address (16, 48 or 64 bits)");
(-)a/src/internet/model/arp-header.cc (-1 / +1 lines)
 Lines 136-142   uint32_t Link Here 
136
ArpHeader::GetSerializedSize (void) const
136
ArpHeader::GetSerializedSize (void) const
137
{
137
{
138
  NS_LOG_FUNCTION (this);
138
  NS_LOG_FUNCTION (this);
139
  NS_ASSERT((m_macSource.GetLength () == 6) || (m_macSource.GetLength () == 8));
139
  NS_ASSERT ((m_macSource.GetLength () == 6) || (m_macSource.GetLength () == 8) || (m_macSource.GetLength () == 1));
140
  NS_ASSERT (m_macSource.GetLength () == m_macDest.GetLength ());
140
  NS_ASSERT (m_macSource.GetLength () == m_macDest.GetLength ());
141
141
142
  uint32_t length = 16;   // Length minus two hardware addresses
142
  uint32_t length = 16;   // Length minus two hardware addresses
(-)a/src/internet/model/ipv6-interface.cc (+6 lines)
 Lines 113-118   void Ipv6Interface::DoSetup () Link Here 
113
          AddAddress (ifaddr);
113
          AddAddress (ifaddr);
114
          m_linkLocalAddress = ifaddr;
114
          m_linkLocalAddress = ifaddr;
115
        }
115
        }
116
      else if (Mac8Address::IsMatchingType (addr))
117
        {
118
          Ipv6InterfaceAddress ifaddr = Ipv6InterfaceAddress (Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac8Address::ConvertFrom (addr)), Ipv6Prefix (64));
119
          AddAddress (ifaddr);
120
          m_linkLocalAddress = ifaddr;
121
        }
116
      else
122
      else
117
        {
123
        {
118
          NS_FATAL_ERROR ("IPv6 autoconf for this kind of address not implemented.");
124
          NS_FATAL_ERROR ("IPv6 autoconf for this kind of address not implemented.");
(-)a/src/network/utils/ipv6-address.cc (+40 lines)
 Lines 415-420   Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac64Address addr, Ipv6Addre Link Here 
415
  return ret;
415
  return ret;
416
}
416
}
417
417
418
Ipv6Address Ipv6Address::MakeAutoconfiguredAddress (Mac8Address addr, Ipv6Address prefix)
419
{
420
  NS_LOG_FUNCTION (addr << prefix);
421
  Ipv6Address ret;
422
  uint8_t buf[2];
423
  uint8_t buf2[16];
424
425
  buf[0] = 0;
426
  addr.CopyTo (&buf[1]);
427
  prefix.GetBytes (buf2);
428
429
  memcpy (buf2 + 14, buf, 2);
430
  buf2[11] = 0xff;
431
  buf2[12] = 0xfe;
432
433
  ret.Set (buf2);
434
  return ret;
435
}
436
418
Ipv6Address Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address addr)
437
Ipv6Address Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address addr)
419
{
438
{
420
  NS_LOG_FUNCTION (addr);
439
  NS_LOG_FUNCTION (addr);
 Lines 475-480   Ipv6Address Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac64Address addr) Link Here 
475
  return ret;
494
  return ret;
476
}
495
}
477
496
497
Ipv6Address Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac8Address addr)
498
{
499
  NS_LOG_FUNCTION (addr);
500
  Ipv6Address ret;
501
  uint8_t buf[2];
502
  uint8_t buf2[16];
503
504
  buf[0] = 0;
505
  addr.CopyTo (&buf[1]);
506
507
  memset (buf2, 0x00, sizeof (buf2));
508
  buf2[0] = 0xfe;
509
  buf2[1] = 0x80;
510
  memcpy (buf2 + 14, buf, 2);
511
  buf2[11] = 0xff;
512
  buf2[12] = 0xfe;
513
514
  ret.Set (buf2);
515
  return ret;
516
}
517
478
Ipv6Address Ipv6Address::MakeSolicitedAddress (Ipv6Address addr)
518
Ipv6Address Ipv6Address::MakeSolicitedAddress (Ipv6Address addr)
479
{
519
{
480
  NS_LOG_FUNCTION (addr);
520
  NS_LOG_FUNCTION (addr);
(-)a/src/network/utils/ipv6-address.h (+16 lines)
 Lines 30-35    Link Here 
30
#include "ns3/address.h"
30
#include "ns3/address.h"
31
#include "ns3/ipv4-address.h"
31
#include "ns3/ipv4-address.h"
32
#include "ns3/deprecated.h"
32
#include "ns3/deprecated.h"
33
#include "mac8-address.h"
33
34
34
namespace ns3 { 
35
namespace ns3 { 
35
36
 Lines 163-168   public: Link Here 
163
   */
164
   */
164
  static Ipv6Address MakeAutoconfiguredAddress (Mac64Address addr, Ipv6Address prefix);
165
  static Ipv6Address MakeAutoconfiguredAddress (Mac64Address addr, Ipv6Address prefix);
165
166
167
  /**
168
   * \brief Make the autoconfigured IPv6 address with Mac8Address.
169
   * \param addr the Mac8Address address (8 bits).
170
   * \param prefix the IPv6 prefix
171
   * \return autoconfigured IPv6 address
172
   */
173
  static Ipv6Address MakeAutoconfiguredAddress (Mac8Address addr, Ipv6Address prefix);
174
166
  /**
175
  /**
167
   * \brief Make the autoconfigured link-local IPv6 address with Mac16Address.
176
   * \brief Make the autoconfigured link-local IPv6 address with Mac16Address.
168
   * \param mac the MAC address (16 bits).
177
   * \param mac the MAC address (16 bits).
 Lines 184-189   public: Link Here 
184
   */
193
   */
185
  static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac64Address mac);
194
  static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac64Address mac);
186
195
196
  /**
197
   * \brief Make the autoconfigured link-local IPv6 address with Mac8Address.
198
   * \param mac the MAC address (8 bits).
199
   * \return autoconfigured link-local IPv6 address
200
   */
201
  static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac8Address mac);
202
187
  /**
203
  /**
188
   * \brief Print this address to the given output stream.
204
   * \brief Print this address to the given output stream.
189
   *
205
   *
(-)a/src/uan/model/uan-address.cc (-29 / +24 lines)
 Lines 18-100    Link Here 
18
 * Author: Leonard Tracy <lentracy@gmail.com>
18
 * Author: Leonard Tracy <lentracy@gmail.com>
19
 */
19
 */
20
20
21
#include "uan-address.h"
21
#include "mac8-address.h"
22
#include "ns3/address.h"
22
#include "ns3/address.h"
23
23
24
namespace ns3 {
24
namespace ns3 {
25
25
26
UanAddress::UanAddress ()
26
Mac8Address::Mac8Address ()
27
{
27
{
28
  m_address = 255;
28
  m_address = 255;
29
}
29
}
30
30
31
UanAddress::UanAddress (uint8_t addr)
31
Mac8Address::Mac8Address (uint8_t addr)
32
  : m_address (addr)
32
  : m_address (addr)
33
{
33
{
34
}
34
}
35
35
36
UanAddress::~UanAddress ()
36
Mac8Address::~Mac8Address ()
37
{
37
{
38
}
38
}
39
39
40
uint8_t
40
uint8_t
41
UanAddress::GetType (void)
41
Mac8Address::GetType (void)
42
{
42
{
43
  static uint8_t type = Address::Register ();
43
  static uint8_t type = Address::Register ();
44
  return type;
44
  return type;
45
}
45
}
46
46
47
Address
47
Address
48
UanAddress::ConvertTo (void) const
48
Mac8Address::ConvertTo (void) const
49
{
49
{
50
  return Address (GetType (), &m_address, 1);
50
  return Address (GetType (), &m_address, 1);
51
}
51
}
52
52
53
UanAddress
53
Mac8Address
54
UanAddress::ConvertFrom (const Address &address)
54
Mac8Address::ConvertFrom (const Address &address)
55
{
55
{
56
  NS_ASSERT (IsMatchingType (address));
56
  NS_ASSERT (IsMatchingType (address));
57
  UanAddress uAddr;
57
  Mac8Address uAddr;
58
  address.CopyTo (&uAddr.m_address);
58
  address.CopyTo (&uAddr.m_address);
59
  return uAddr;
59
  return uAddr;
60
}
60
}
61
61
62
uint8_t
63
UanAddress::GetAsInt (void) const
64
{
65
  return m_address;
66
}
67
bool
62
bool
68
UanAddress::IsMatchingType (const Address &address)
63
Mac8Address::IsMatchingType (const Address &address)
69
{
64
{
70
  return address.CheckCompatible (GetType (), 1);
65
  return address.CheckCompatible (GetType (), 1);
71
}
66
}
72
67
73
UanAddress::operator Address () const
68
Mac8Address::operator Address () const
74
{
69
{
75
  return ConvertTo ();
70
  return ConvertTo ();
76
}
71
}
77
72
78
void
73
void
79
UanAddress::CopyFrom (const uint8_t *pBuffer)
74
Mac8Address::CopyFrom (const uint8_t *pBuffer)
80
{
75
{
81
  m_address = *pBuffer;
76
  m_address = *pBuffer;
82
}
77
}
83
78
84
void
79
void
85
UanAddress::CopyTo (uint8_t *pBuffer)
80
Mac8Address::CopyTo (uint8_t *pBuffer) const
86
{
81
{
87
  *pBuffer = m_address;
82
  *pBuffer = m_address;
88
83
89
}
84
}
90
85
91
UanAddress
86
Mac8Address
92
UanAddress::GetBroadcast ()
87
Mac8Address::GetBroadcast ()
93
{
88
{
94
  return UanAddress (255);
89
  return Mac8Address (255);
95
}
90
}
96
UanAddress
91
Mac8Address
97
UanAddress::Allocate ()
92
Mac8Address::Allocate ()
98
{
93
{
99
  static uint8_t nextAllocated = 0;
94
  static uint8_t nextAllocated = 0;
100
95
 Lines 104-138   UanAddress::Allocate () Link Here 
104
      nextAllocated = 0;
99
      nextAllocated = 0;
105
    }
100
    }
106
101
107
  return UanAddress (address);
102
  return Mac8Address (address);
108
}
103
}
109
104
110
bool
105
bool
111
operator < (const UanAddress &a, const UanAddress &b)
106
operator < (const Mac8Address &a, const Mac8Address &b)
112
{
107
{
113
  return a.m_address < b.m_address;
108
  return a.m_address < b.m_address;
114
}
109
}
115
110
116
bool
111
bool
117
operator == (const UanAddress &a, const UanAddress &b)
112
operator == (const Mac8Address &a, const Mac8Address &b)
118
{
113
{
119
  return a.m_address == b.m_address;
114
  return a.m_address == b.m_address;
120
}
115
}
121
116
122
bool
117
bool
123
operator != (const UanAddress &a, const UanAddress &b)
118
operator != (const Mac8Address &a, const Mac8Address &b)
124
{
119
{
125
  return !(a == b);
120
  return !(a == b);
126
}
121
}
127
122
128
std::ostream&
123
std::ostream&
129
operator<< (std::ostream& os, const UanAddress & address)
124
operator<< (std::ostream& os, const Mac8Address & address)
130
{
125
{
131
  os << (int) address.m_address;
126
  os << (int) address.m_address;
132
  return os;
127
  return os;
133
}
128
}
134
std::istream&
129
std::istream&
135
operator>> (std::istream& is, UanAddress & address)
130
operator>> (std::istream& is, Mac8Address & address)
136
{
131
{
137
  int x;
132
  int x;
138
  is >> x;
133
  is >> x;
(-)a/src/uan/model/uan-address.h (-40 / +35 lines)
 Lines 18-35    Link Here 
18
 * Author: Leonard Tracy <lentracy@gmail.com>
18
 * Author: Leonard Tracy <lentracy@gmail.com>
19
 */
19
 */
20
20
21
#ifndef UAN_ADDRESS_H
21
#ifndef MAC8_ADDRESS_H
22
#define UAN_ADDRESS_H
22
#define MAC8_ADDRESS_H
23
23
24
#include "ns3/address.h"
24
#include "ns3/address.h"
25
#include <iostream>
25
#include <iostream>
26
26
27
namespace ns3 {
27
namespace ns3 {
28
28
29
class Address;
30
29
/**
31
/**
30
 * \ingroup uan
32
 * \ingroup network
31
 *
33
 *
32
 * A class used for addressing UAN MAC's.
34
 * A class used for addressing MAC8 MAC's.
33
 *
35
 *
34
 * This implementation uses a simple 8 bit flat addressing scheme.
36
 * This implementation uses a simple 8 bit flat addressing scheme.
35
 * It is unlikely that perceived underwater networks will soon
37
 * It is unlikely that perceived underwater networks will soon
 Lines 37-69   namespace ns3 { Link Here 
37
 * - the ocean is big), so this should provide adequate addressing
39
 * - the ocean is big), so this should provide adequate addressing
38
 * for most applications.
40
 * for most applications.
39
 */
41
 */
40
class UanAddress
42
class Mac8Address
41
{
43
{
42
public:
44
public:
43
  /** Constructor */
45
  /** Constructor */
44
  UanAddress ();
46
  Mac8Address ();
45
  /**
47
  /**
46
   * Create UanAddress object with address addr.
48
   * Create Mac8Address object with address addr.
47
   *
49
   *
48
   * \param addr Byte address to assign to this address.
50
   * \param addr Byte address to assign to this address.
49
   */
51
   */
50
  UanAddress (uint8_t addr);
52
  Mac8Address (uint8_t addr);
51
  /** Destructor */
53
  /** Destructor */
52
  virtual ~UanAddress ();
54
  virtual ~Mac8Address ();
53
55
54
  /**
56
  /**
55
   * Convert a generic address to a UanAddress.
57
   * Convert a generic address to a Mac8Address.
56
   *
58
   *
57
   * \param address  Address to convert to UAN address.
59
   * \param address  Address to convert to Mac8Address address.
58
   * \return UanAddress from Address.
60
   * \return Mac8Address from Address.
59
   */
61
   */
60
  static UanAddress ConvertFrom (const Address &address);
62
  static Mac8Address ConvertFrom (const Address &address);
61
63
62
  /**
64
  /**
63
   * Check that a generic Address is compatible with UanAddress.
65
   * Check that a generic Address is compatible with Mac8Address.
64
   *
66
   *
65
   * \param address  Address to test.
67
   * \param address  Address to test.
66
   * \return True if address given is consistant with UanAddress.
68
   * \return True if address given is consistant with Mac8Address.
67
   */
69
   */
68
  static bool IsMatchingType  (const Address &address);
70
  static bool IsMatchingType  (const Address &address);
69
71
 Lines 86-123   public: Link Here 
86
   *
88
   *
87
   * \param pBuffer
89
   * \param pBuffer
88
   */
90
   */
89
  void CopyTo (uint8_t *pBuffer);
91
  void CopyTo (uint8_t *pBuffer) const;
90
91
  /**
92
   * Convert to integer.
93
   *
94
   * \return 8 bit integer version of address.
95
   */
96
  uint8_t GetAsInt (void) const;
97
92
98
  /**
93
  /**
99
   * Get the broadcast address (255).
94
   * Get the broadcast address (255).
100
   *
95
   *
101
   * \return Broadcast address.
96
   * \return Broadcast address.
102
   */
97
   */
103
  static UanAddress GetBroadcast (void);
98
  static Mac8Address GetBroadcast (void);
104
99
105
  /**
100
  /**
106
   * Allocates UanAddress from 0-254
101
   * Allocates Mac8Address from 0-254
107
   *
102
   *
108
   * Will wrap back to 0 if more than 254 are allocated.
103
   * Will wrap back to 0 if more than 254 are allocated.
109
   * Excludes the broadcast address.
104
   * Excludes the broadcast address.
110
   *
105
   *
111
   * \return The next sequential UanAddress.
106
   * \return The next sequential Mac8Address.
112
   */
107
   */
113
  static UanAddress Allocate ();
108
  static Mac8Address Allocate ();
114
109
115
110
116
private:
111
private:
117
  uint8_t m_address;  //!< The address.
112
  uint8_t m_address;  //!< The address.
118
113
119
  /**
114
  /**
120
   * Get the UanAddress type.
115
   * Get the Mac8Address type.
121
   *
116
   *
122
   * \return The type value.
117
   * \return The type value.
123
   */
118
   */
 Lines 129-141   private: Link Here 
129
   */
124
   */
130
  Address ConvertTo (void) const;
125
  Address ConvertTo (void) const;
131
126
132
  friend bool operator <  (const UanAddress &a, const UanAddress &b);
127
  friend bool operator <  (const Mac8Address &a, const Mac8Address &b);
133
  friend bool operator == (const UanAddress &a, const UanAddress &b);
128
  friend bool operator == (const Mac8Address &a, const Mac8Address &b);
134
  friend bool operator != (const UanAddress &a, const UanAddress &b);
129
  friend bool operator != (const Mac8Address &a, const Mac8Address &b);
135
  friend std::ostream& operator<< (std::ostream& os, const UanAddress & address);
130
  friend std::ostream& operator<< (std::ostream& os, const Mac8Address & address);
136
  friend std::istream& operator>> (std::istream& is, UanAddress & address);
131
  friend std::istream& operator>> (std::istream& is, Mac8Address & address);
137
132
138
};  // class UanAddress
133
};  // class Mac8Address
139
134
140
135
141
/**
136
/**
 Lines 145-151   private: Link Here 
145
 * \param b Second address to compare.
140
 * \param b Second address to compare.
146
 * \return True if a < b.
141
 * \return True if a < b.
147
 */
142
 */
148
bool operator < (const UanAddress &a, const UanAddress &b);
143
bool operator < (const Mac8Address &a, const Mac8Address &b);
149
144
150
/**
145
/**
151
 * Address comparison, equalit.
146
 * Address comparison, equalit.
 Lines 154-160   bool operator < (const UanAddress &a, const UanAddress &b); Link Here 
154
 * \param b Second address to compare.
149
 * \param b Second address to compare.
155
 * \return True if a == b.
150
 * \return True if a == b.
156
 */
151
 */
157
bool operator == (const UanAddress &a, const UanAddress &b);
152
bool operator == (const Mac8Address &a, const Mac8Address &b);
158
153
159
/**
154
/**
160
 * Address comparison, unequal.
155
 * Address comparison, unequal.
 Lines 163-169   bool operator == (const UanAddress &a, const UanAddress &b); Link Here 
163
 * \param b Second address to compare.
158
 * \param b Second address to compare.
164
 * \return True if a != b.
159
 * \return True if a != b.
165
 */
160
 */
166
bool operator != (const UanAddress &a, const UanAddress &b);
161
bool operator != (const Mac8Address &a, const Mac8Address &b);
167
162
168
/**
163
/**
169
 * Write \pname{address} to stream \pname{os} as 8 bit integer.
164
 * Write \pname{address} to stream \pname{os} as 8 bit integer.
 Lines 172-178   bool operator != (const UanAddress &a, const UanAddress &b); Link Here 
172
 * \param address The address
167
 * \param address The address
173
 * \return The output stream.
168
 * \return The output stream.
174
 */
169
 */
175
std::ostream& operator<< (std::ostream& os, const UanAddress & address);
170
std::ostream& operator<< (std::ostream& os, const Mac8Address & address);
176
171
177
/**
172
/**
178
 * Read \pname{address} from stream \pname{is} as 8 bit integer.
173
 * Read \pname{address} from stream \pname{is} as 8 bit integer.
 Lines 181-188   std::ostream& operator<< (std::ostream& os, const UanAddress & address); Link Here 
181
 * \param address The address variable to set.
176
 * \param address The address variable to set.
182
 * \return The input stream.
177
 * \return The input stream.
183
 */
178
 */
184
std::istream& operator>> (std::istream& is, UanAddress & address);
179
std::istream& operator>> (std::istream& is, Mac8Address & address);
185
180
186
} // namespace ns3
181
} // namespace ns3
187
182
188
#endif /* UAN_ADDRESS_H */
183
#endif /* MAC8_ADDRESS_H */
(-)a/src/network/wscript (+2 lines)
 Lines 62-67   def build(bld): Link Here 
62
        'utils/packet-socket-server.cc',
62
        'utils/packet-socket-server.cc',
63
        'utils/packet-data-calculators.cc',
63
        'utils/packet-data-calculators.cc',
64
        'utils/packet-probe.cc',
64
        'utils/packet-probe.cc',
65
        'utils/mac8-address.cc',
65
        'helper/application-container.cc',
66
        'helper/application-container.cc',
66
        'helper/net-device-container.cc',
67
        'helper/net-device-container.cc',
67
        'helper/node-container.cc',
68
        'helper/node-container.cc',
 Lines 152-157   def build(bld): Link Here 
152
        'utils/pcap-test.h',
153
        'utils/pcap-test.h',
153
        'utils/packet-data-calculators.h',
154
        'utils/packet-data-calculators.h',
154
        'utils/packet-probe.h',
155
        'utils/packet-probe.h',
156
        'utils/mac8-address.h',
155
        'helper/application-container.h',
157
        'helper/application-container.h',
156
        'helper/net-device-container.h',
158
        'helper/net-device-container.h',
157
        'helper/node-container.h',
159
        'helper/node-container.h',
(-)a/src/sixlowpan/model/sixlowpan-net-device.cc (+4 lines)
 Lines 2099-2104   Ipv6Address SixLowPanNetDevice::MakeLinkLocalAddressFromMac (Address const &addr Link Here 
2099
        {
2099
        {
2100
          ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address::ConvertFrom (addr));
2100
          ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac16Address::ConvertFrom (addr));
2101
        }
2101
        }
2102
      else if (Mac8Address::IsMatchingType (addr))
2103
        {
2104
          ipv6Addr = Ipv6Address::MakeAutoconfiguredLinkLocalAddress (Mac8Address::ConvertFrom (addr));
2105
        }
2102
    }
2106
    }
2103
  if (ipv6Addr.IsAny ())
2107
  if (ipv6Addr.IsAny ())
2104
    {
2108
    {
(-)a/src/uan/helper/uan-helper.cc (-1 / +1 lines)
 Lines 242-248   UanHelper::Install (Ptr<Node> node, Ptr<UanChannel> channel) const Link Here 
242
  Ptr<UanPhy> phy = m_phy.Create<UanPhy> ();
242
  Ptr<UanPhy> phy = m_phy.Create<UanPhy> ();
243
  Ptr<UanTransducer> trans = m_transducer.Create<UanTransducer> ();
243
  Ptr<UanTransducer> trans = m_transducer.Create<UanTransducer> ();
244
244
245
  mac->SetAddress (UanAddress::Allocate ());
245
  mac->SetAddress (Mac8Address::Allocate ());
246
  device->SetMac (mac);
246
  device->SetMac (mac);
247
  device->SetPhy (phy);
247
  device->SetPhy (phy);
248
  device->SetTransducer (trans);
248
  device->SetTransducer (trans);
(-)a/src/uan/model/uan-header-common.cc (-19 / +54 lines)
 Lines 19-25    Link Here 
19
 */
19
 */
20
20
21
#include "uan-header-common.h"
21
#include "uan-header-common.h"
22
#include "uan-address.h"
22
#include "ns3/arp-l3-protocol.h"
23
#include "ns3/ipv6-l3-protocol.h"
24
#include "ns3/ipv4-l3-protocol.h"
25
#include "src/network/utils/mac8-address.h"
23
26
24
namespace ns3 {
27
namespace ns3 {
25
28
 Lines 29-41   UanHeaderCommon::UanHeaderCommon () Link Here 
29
{
32
{
30
}
33
}
31
34
32
UanHeaderCommon::UanHeaderCommon (const UanAddress src, const UanAddress dest, uint8_t type)
35
UanHeaderCommon::UanHeaderCommon (const Mac8Address src, const Mac8Address dest, uint8_t type, uint8_t protocolNumber)
33
  : Header (),
36
  : Header (),
34
    m_dest (dest),
37
  m_dest (dest),
35
    m_src (src),
38
  m_src (src)
36
    m_type (type)
37
{
39
{
38
40
  m_uanProtocolBits.m_protocolNumber = protocolNumber;
41
  m_uanProtocolBits.m_type = type;
39
}
42
}
40
43
41
TypeId
44
TypeId
 Lines 60-71   UanHeaderCommon::~UanHeaderCommon () Link Here 
60
63
61
64
62
void
65
void
63
UanHeaderCommon::SetDest (UanAddress dest)
66
UanHeaderCommon::SetDest (Mac8Address dest)
64
{
67
{
65
  m_dest = dest;
68
  m_dest = dest;
66
}
69
}
67
void
70
void
68
UanHeaderCommon::SetSrc (UanAddress src)
71
UanHeaderCommon::SetSrc (Mac8Address src)
69
{
72
{
70
  m_src = src;
73
  m_src = src;
71
}
74
}
 Lines 73-87   UanHeaderCommon::SetSrc (UanAddress src) Link Here 
73
void
76
void
74
UanHeaderCommon::SetType (uint8_t type)
77
UanHeaderCommon::SetType (uint8_t type)
75
{
78
{
76
  m_type = type;
79
  m_uanProtocolBits.m_type = type;
80
}
81
82
void
83
UanHeaderCommon::SetProtocolNumber (uint16_t protocolNumber)
84
{
85
  NS_ASSERT_MSG (protocolNumber > 3 || protocolNumber <= 0, "UanHeaderCommon::SetProtocolNumber(): Protocol not supported");
86
  if(protocolNumber == Ipv4L3Protocol::PROT_NUMBER)
87
    m_uanProtocolBits.m_protocolNumber = 1;
88
  if(protocolNumber == ArpL3Protocol::PROT_NUMBER)
89
    m_uanProtocolBits.m_protocolNumber = 2;
90
  if(protocolNumber == Ipv6L3Protocol::PROT_NUMBER)
91
    m_uanProtocolBits.m_protocolNumber = 3;
77
}
92
}
78
93
79
UanAddress
94
Mac8Address
80
UanHeaderCommon::GetDest (void) const
95
UanHeaderCommon::GetDest (void) const
81
{
96
{
82
  return m_dest;
97
  return m_dest;
83
}
98
}
84
UanAddress
99
Mac8Address
85
UanHeaderCommon::GetSrc (void) const
100
UanHeaderCommon::GetSrc (void) const
86
{
101
{
87
  return m_src;
102
  return m_src;
 Lines 89-95   UanHeaderCommon::GetSrc (void) const Link Here 
89
uint8_t
104
uint8_t
90
UanHeaderCommon::GetType (void) const
105
UanHeaderCommon::GetType (void) const
91
{
106
{
92
  return m_type;
107
  return m_uanProtocolBits.m_type;
108
}
109
110
uint16_t
111
UanHeaderCommon::GetProtocolNumber (void) const
112
{
113
  if(m_uanProtocolBits.m_protocolNumber == 1)
114
    return Ipv4L3Protocol::PROT_NUMBER;
115
  if(m_uanProtocolBits.m_protocolNumber == 2)
116
    return ArpL3Protocol::PROT_NUMBER;
117
  if(m_uanProtocolBits.m_protocolNumber == 3)
118
    return Ipv6L3Protocol::PROT_NUMBER;
119
  return 0;
93
}
120
}
94
121
95
// Inherrited methods
122
// Inherrited methods
 Lines 103-111   UanHeaderCommon::GetSerializedSize (void) const Link Here 
103
void
130
void
104
UanHeaderCommon::Serialize (Buffer::Iterator start) const
131
UanHeaderCommon::Serialize (Buffer::Iterator start) const
105
{
132
{
106
  start.WriteU8 (m_src.GetAsInt ());
133
  uint8_t address = 0;
107
  start.WriteU8 (m_dest.GetAsInt ());
134
  m_src.CopyTo (&address);
108
  start.WriteU8 (m_type);
135
  start.WriteU8 (address);
136
  m_dest.CopyTo (&address);
137
  start.WriteU8 (address);
138
  char tmp = m_uanProtocolBits.m_type;
139
  tmp = tmp << 4;
140
  tmp += m_uanProtocolBits.m_protocolNumber;
141
  start.WriteU8 (tmp);
109
}
142
}
110
143
111
uint32_t
144
uint32_t
 Lines 113-121   UanHeaderCommon::Deserialize (Buffer::Iterator start) Link Here 
113
{
146
{
114
  Buffer::Iterator rbuf = start;
147
  Buffer::Iterator rbuf = start;
115
148
116
  m_src = UanAddress (rbuf.ReadU8 ());
149
  m_src = Mac8Address (rbuf.ReadU8 ());
117
  m_dest = UanAddress (rbuf.ReadU8 ());
150
  m_dest = Mac8Address (rbuf.ReadU8 ());
118
  m_type = rbuf.ReadU8 ();
151
  char tmp = rbuf.ReadU8 ();
152
  m_uanProtocolBits.m_type = tmp >> 4;
153
  m_uanProtocolBits.m_protocolNumber = tmp;
119
154
120
  return rbuf.GetDistanceFrom (start);
155
  return rbuf.GetDistanceFrom (start);
121
}
156
}
 Lines 123-129   UanHeaderCommon::Deserialize (Buffer::Iterator start) Link Here 
123
void
158
void
124
UanHeaderCommon::Print (std::ostream &os) const
159
UanHeaderCommon::Print (std::ostream &os) const
125
{
160
{
126
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_type;
161
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_uanProtocolBits.m_type << "Protocol Number=" << (uint32_t) m_uanProtocolBits.m_protocolNumber;
127
}
162
}
128
163
129
164
(-)a/src/uan/model/uan-header-common.h (-15 / +46 lines)
 Lines 24-42    Link Here 
24
#include "ns3/header.h"
24
#include "ns3/header.h"
25
#include "ns3/nstime.h"
25
#include "ns3/nstime.h"
26
#include "ns3/simulator.h"
26
#include "ns3/simulator.h"
27
#include "uan-address.h"
27
#include "ns3/mac8-address.h"
28
28
29
namespace ns3 {
29
namespace ns3 {
30
30
31
struct UanProtocolBits
32
{
33
  uint8_t  m_type : 4;
34
  uint8_t  m_protocolNumber : 4;
35
};
36
31
/**
37
/**
32
 * \ingroup uan
38
 * \ingroup uan
33
 *
39
 *
34
 * Common packet header fields.
40
 * Common packet header fields.
35
 *
41
 *
36
 * Includes 1 byte src address, 1 byte dest address,
42
 *  1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
37
 * and a 1 byte type field.
43
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
44
 * |    src addr   |    dst addr   | prtcl |  type |
45
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
46
 *
47
 *
48
 * src addr: The MAC8 source address
38
 *
49
 *
39
 * The type field is protocol specific; see the relevant MAC protocol.
50
 * dst addr: The MAC8 destination address
51
 *
52
 * prtcl: The layer 3 protocol
53
 * prtcl=1 (IPv4)
54
 * prtcl=2 (ARP)
55
 * prtcl=3 (IPv6)
56
 *
57
 * type: The type field is MAC protocol specific
40
 */
58
 */
41
class UanHeaderCommon : public Header
59
class UanHeaderCommon : public Header
42
{
60
{
 Lines 50-57   public: Link Here 
50
   * \param src Source address defined in header.
68
   * \param src Source address defined in header.
51
   * \param dest Destination address defined in header.
69
   * \param dest Destination address defined in header.
52
   * \param type Header type.
70
   * \param type Header type.
71
   * \param protocolNumber the layer 3 protocol number
53
   */
72
   */
54
  UanHeaderCommon (const UanAddress src, const UanAddress dest, uint8_t type);
73
  UanHeaderCommon (const Mac8Address src, const Mac8Address dest, uint8_t type, uint8_t protocolNumber);
55
  /** Destructor */
74
  /** Destructor */
56
  virtual ~UanHeaderCommon ();
75
  virtual ~UanHeaderCommon ();
57
76
 Lines 66-78   public: Link Here 
66
   *
85
   *
67
   * \param dest Address of destination node.
86
   * \param dest Address of destination node.
68
   */
87
   */
69
  void SetDest (UanAddress dest);
88
  void SetDest (Mac8Address dest);
70
  /**
89
  /**
71
   * Set the source address.
90
   * Set the source address.
72
   *
91
   *
73
   * \param src Address of packet source node.
92
   * \param src Address of packet source node.
74
   */
93
   */
75
  void SetSrc (UanAddress src);
94
  void SetSrc (Mac8Address src);
76
  /**
95
  /**
77
   * Set the header type.
96
   * Set the header type.
78
   *
97
   *
 Lines 80-105   public: Link Here 
80
   * \param type The type value.
99
   * \param type The type value.
81
   */
100
   */
82
  void SetType (uint8_t type);
101
  void SetType (uint8_t type);
102
  /**
103
   * Set the packet type.
104
   *
105
   * Used to indicate the layer 3 protocol
106
   * \param protocolNumber The layer 3 protocol number value.
107
   */
108
  void SetProtocolNumber (uint16_t protocolNumber);
83
109
84
  /**
110
  /**
85
   * Get the destination address.
111
   * Get the destination address.
86
   *
112
   *
87
   * \return UanAddress in destination field.
113
   * \return Mac8Address in destination field.
88
   */
114
   */
89
  UanAddress GetDest (void) const;
115
  Mac8Address GetDest (void) const;
90
  /**
116
  /**
91
   * Get the source address
117
   * Get the source address
92
   *
118
   *
93
   * \return UanAddress in source field.
119
   * \return Mac8Address in source field.
94
   */
120
   */
95
  UanAddress GetSrc (void) const;
121
  Mac8Address GetSrc (void) const;
96
  /**
122
  /**
97
   * Get the header type value.
123
   * Get the header type value.
98
   *
124
   *
99
   * \return value of type field.
125
   * \return value of type field.
100
   */
126
   */
101
  uint8_t GetType (void) const;
127
  uint8_t GetType (void) const;
102
128
  /**
129
   * Get the packet type value.
130
   *
131
   * \return value of protocolNumber field.
132
   */
133
  uint16_t GetProtocolNumber (void) const;
103
134
104
  // Inherited methods
135
  // Inherited methods
105
  virtual uint32_t GetSerializedSize (void) const;
136
  virtual uint32_t GetSerializedSize (void) const;
 Lines 108-116   public: Link Here 
108
  virtual void Print (std::ostream &os) const;
139
  virtual void Print (std::ostream &os) const;
109
  virtual TypeId GetInstanceTypeId (void) const;
140
  virtual TypeId GetInstanceTypeId (void) const;
110
private:
141
private:
111
  UanAddress m_dest;  //!< The destination address.
142
  Mac8Address m_dest;  //!< The destination address.
112
  UanAddress m_src;   //!< The source address.
143
  Mac8Address m_src;   //!< The source address.
113
  uint8_t m_type;     //!< The type field.
144
  UanProtocolBits m_uanProtocolBits;  //!< The type and protocol bits
114
145
115
};  // class UanHeaderCommon
146
};  // class UanHeaderCommon
116
147
(-)a/src/uan/model/uan-header-rc.cc (-6 / +9 lines)
 Lines 20-25    Link Here 
20
20
21
21
22
#include "uan-header-rc.h"
22
#include "uan-header-rc.h"
23
#include "src/network/utils/mac8-address.h"
23
24
24
#include <set>
25
#include <set>
25
26
 Lines 391-402   UanHeaderRcCts::UanHeaderRcCts () Link Here 
391
    m_timeStampRts (Seconds (0)),
392
    m_timeStampRts (Seconds (0)),
392
    m_retryNo (0),
393
    m_retryNo (0),
393
    m_delay (Seconds (0)),
394
    m_delay (Seconds (0)),
394
    m_address (UanAddress::GetBroadcast ())
395
    m_address (Mac8Address::GetBroadcast ())
395
{
396
{
396
397
397
}
398
}
398
399
399
UanHeaderRcCts::UanHeaderRcCts (uint8_t frameNo, uint8_t retryNo, Time ts, Time delay, UanAddress addr)
400
UanHeaderRcCts::UanHeaderRcCts (uint8_t frameNo, uint8_t retryNo, Time ts, Time delay, Mac8Address addr)
400
  : Header (),
401
  : Header (),
401
    m_frameNo (frameNo),
402
    m_frameNo (frameNo),
402
    m_timeStampRts (ts),
403
    m_timeStampRts (ts),
 Lines 450-456   UanHeaderRcCts::SetRetryNo (uint8_t no) Link Here 
450
}
451
}
451
452
452
void
453
void
453
UanHeaderRcCts::SetAddress (UanAddress addr)
454
UanHeaderRcCts::SetAddress (Mac8Address addr)
454
{
455
{
455
  m_address = addr;
456
  m_address = addr;
456
}
457
}
 Lines 478-484   UanHeaderRcCts::GetRetryNo () const Link Here 
478
  return m_retryNo;
479
  return m_retryNo;
479
}
480
}
480
481
481
UanAddress
482
Mac8Address
482
UanHeaderRcCts::GetAddress () const
483
UanHeaderRcCts::GetAddress () const
483
{
484
{
484
  return m_address;
485
  return m_address;
 Lines 494-500   UanHeaderRcCts::GetSerializedSize (void) const Link Here 
494
void
495
void
495
UanHeaderRcCts::Serialize (Buffer::Iterator start) const
496
UanHeaderRcCts::Serialize (Buffer::Iterator start) const
496
{
497
{
497
  start.WriteU8 (m_address.GetAsInt ());
498
  uint8_t address = 0;
499
  m_address.CopyTo (&address);
500
  start.WriteU8 (address);
498
  start.WriteU8 (m_frameNo);
501
  start.WriteU8 (m_frameNo);
499
  start.WriteU8 (m_retryNo);
502
  start.WriteU8 (m_retryNo);
500
  start.WriteU32 ((uint32_t)(m_timeStampRts.GetSeconds () * 1000.0 + 0.5));
503
  start.WriteU32 ((uint32_t)(m_timeStampRts.GetSeconds () * 1000.0 + 0.5));
 Lines 505-511   uint32_t Link Here 
505
UanHeaderRcCts::Deserialize (Buffer::Iterator start)
508
UanHeaderRcCts::Deserialize (Buffer::Iterator start)
506
{
509
{
507
  Buffer::Iterator rbuf = start;
510
  Buffer::Iterator rbuf = start;
508
  m_address = UanAddress (rbuf.ReadU8 ());
511
  m_address = Mac8Address (rbuf.ReadU8 ());
509
  m_frameNo = rbuf.ReadU8 ();
512
  m_frameNo = rbuf.ReadU8 ();
510
  m_retryNo = rbuf.ReadU8 ();
513
  m_retryNo = rbuf.ReadU8 ();
511
  m_timeStampRts = Seconds ( ( (double) rbuf.ReadU32 ()) / 1000.0 );
514
  m_timeStampRts = Seconds ( ( (double) rbuf.ReadU32 ()) / 1000.0 );
(-)a/src/uan/model/uan-header-rc.h (-5 / +5 lines)
 Lines 24-30    Link Here 
24
24
25
#include "ns3/header.h"
25
#include "ns3/header.h"
26
#include "ns3/nstime.h"
26
#include "ns3/nstime.h"
27
#include "ns3/uan-address.h"
27
#include "ns3/mac8-address.h"
28
28
29
#include <set>
29
#include <set>
30
30
 Lines 333-339   public: Link Here 
333
   * \param addr Destination of CTS packet.
333
   * \param addr Destination of CTS packet.
334
   * \note Times are serialized, with ms precission, into 32 bit fields.
334
   * \note Times are serialized, with ms precission, into 32 bit fields.
335
   */
335
   */
336
  UanHeaderRcCts (uint8_t frameNo, uint8_t retryNo, Time rtsTs, Time delay, UanAddress addr);
336
  UanHeaderRcCts (uint8_t frameNo, uint8_t retryNo, Time rtsTs, Time delay, Mac8Address addr);
337
  /** Destructor */
337
  /** Destructor */
338
  virtual ~UanHeaderRcCts ();
338
  virtual ~UanHeaderRcCts ();
339
339
 Lines 372-378   public: Link Here 
372
   *
372
   *
373
   * \param addr The destination address.
373
   * \param addr The destination address.
374
   */
374
   */
375
  void SetAddress (UanAddress addr);
375
  void SetAddress (Mac8Address addr);
376
376
377
  /**
377
  /**
378
   * Get the frame number of the RTS being cleared.
378
   * Get the frame number of the RTS being cleared.
 Lines 404-410   public: Link Here 
404
   *
404
   *
405
   * \return The destination address.
405
   * \return The destination address.
406
   */
406
   */
407
  UanAddress GetAddress (void) const;
407
  Mac8Address GetAddress (void) const;
408
408
409
  // Inherrited methods
409
  // Inherrited methods
410
  virtual uint32_t GetSerializedSize (void) const;
410
  virtual uint32_t GetSerializedSize (void) const;
 Lines 418-424   private: Link Here 
418
  Time m_timeStampRts;   //!< RX time of RTS packet at gateway.
418
  Time m_timeStampRts;   //!< RX time of RTS packet at gateway.
419
  uint8_t m_retryNo;     //!< Retry number of received RTS packet.
419
  uint8_t m_retryNo;     //!< Retry number of received RTS packet.
420
  Time m_delay;          //!< Delay until transmission.
420
  Time m_delay;          //!< Delay until transmission.
421
  UanAddress m_address;  //!< Destination of CTS packet.
421
  Mac8Address m_address;  //!< Destination of CTS packet.
422
422
423
};  // class UanHeaderRcCts
423
};  // class UanHeaderRcCts
424
424
(-)a/src/uan/model/uan-mac-aloha.cc (-28 / +10 lines)
 Lines 20-26    Link Here 
20
20
21
#include "uan-mac-aloha.h"
21
#include "uan-mac-aloha.h"
22
#include "uan-tx-mode.h"
22
#include "uan-tx-mode.h"
23
#include "uan-address.h"
24
#include "ns3/log.h"
23
#include "ns3/log.h"
25
#include "uan-phy.h"
24
#include "uan-phy.h"
26
#include "uan-header-common.h"
25
#include "uan-header-common.h"
 Lines 77-110   UanMacAloha::GetTypeId (void) Link Here 
77
  return tid;
76
  return tid;
78
}
77
}
79
78
80
Address
81
UanMacAloha::GetAddress (void)
82
{
83
  return m_address;
84
}
85
86
void
87
UanMacAloha::SetAddress (UanAddress addr)
88
{
89
  m_address=addr;
90
}
91
bool
79
bool
92
UanMacAloha::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
80
UanMacAloha::Enqueue (Ptr<Packet> packet, uint16_t protocolNumber, const Address &dest)
93
{
81
{
94
  NS_LOG_DEBUG ("" << Simulator::Now ().GetSeconds () << " MAC " << UanAddress::ConvertFrom (GetAddress ()) << " Queueing packet for " << UanAddress::ConvertFrom (dest));
82
  NS_LOG_DEBUG ("" << Simulator::Now ().GetSeconds () << " MAC " << Mac8Address::ConvertFrom (GetAddress ()) << " Queueing packet for " << Mac8Address::ConvertFrom (dest));
95
83
96
  if (!m_phy->IsStateTx ())
84
  if (!m_phy->IsStateTx ())
97
    {
85
    {
98
      UanAddress src = UanAddress::ConvertFrom (GetAddress ());
86
      Mac8Address src = Mac8Address::ConvertFrom (GetAddress ());
99
      UanAddress udest = UanAddress::ConvertFrom (dest);
87
      Mac8Address udest = Mac8Address::ConvertFrom (dest);
100
88
101
      UanHeaderCommon header;
89
      UanHeaderCommon header;
102
      header.SetSrc (src);
90
      header.SetSrc (src);
103
      header.SetDest (udest);
91
      header.SetDest (udest);
104
      header.SetType (0);
92
      header.SetType (0);
93
      header.SetProtocolNumber (protocolNumber);
105
94
106
      packet->AddHeader (header);
95
      packet->AddHeader (header);
107
      m_phy->SendPacket (packet, protocolNumber);
96
      m_phy->SendPacket (packet, GetTxModeIndex ());
108
      return true;
97
      return true;
109
    }
98
    }
110
  else
99
  else
 Lines 112-118   UanMacAloha::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocol Link Here 
112
}
101
}
113
102
114
void
103
void
115
UanMacAloha::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress& > cb)
104
UanMacAloha::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb)
116
{
105
{
117
  m_forUpCb = cb;
106
  m_forUpCb = cb;
118
}
107
}
 Lines 131-139   UanMacAloha::RxPacketGood (Ptr<Packet> pkt, double sinr, UanTxMode txMode) Link Here 
131
  pkt->RemoveHeader (header);
120
  pkt->RemoveHeader (header);
132
  NS_LOG_DEBUG ("Receiving packet from " << header.GetSrc () << " For " << header.GetDest ());
121
  NS_LOG_DEBUG ("Receiving packet from " << header.GetSrc () << " For " << header.GetDest ());
133
122
134
  if (header.GetDest () == GetAddress () || header.GetDest () == UanAddress::GetBroadcast ())
123
  if (header.GetDest () == GetAddress () || header.GetDest () == Mac8Address::GetBroadcast ())
135
    {
124
    {
136
      m_forUpCb (pkt, header.GetSrc ());
125
      m_forUpCb (pkt, header.GetProtocolNumber (), header.GetSrc ());
137
    }
126
    }
138
127
139
}
128
}
 Lines 141-154   UanMacAloha::RxPacketGood (Ptr<Packet> pkt, double sinr, UanTxMode txMode) Link Here 
141
void
130
void
142
UanMacAloha::RxPacketError (Ptr<Packet> pkt, double sinr)
131
UanMacAloha::RxPacketError (Ptr<Packet> pkt, double sinr)
143
{
132
{
144
  NS_LOG_DEBUG ("" << Simulator::Now () << " MAC " << UanAddress::ConvertFrom (GetAddress ()) << " Received packet in error with sinr " << sinr);
133
  NS_LOG_DEBUG ("" << Simulator::Now () << " MAC " << Mac8Address::ConvertFrom (GetAddress ()) << " Received packet in error with sinr " << sinr);
145
}
146
147
Address
148
UanMacAloha::GetBroadcast (void) const
149
{
150
  UanAddress broadcast (255);
151
  return broadcast;
152
}
134
}
153
135
154
int64_t
136
int64_t
(-)a/src/uan/model/uan-mac-aloha.h (-8 / +5 lines)
 Lines 22-28    Link Here 
22
#define UAN_MAC_ALOHA_H
22
#define UAN_MAC_ALOHA_H
23
23
24
#include "uan-mac.h"
24
#include "uan-mac.h"
25
#include "uan-address.h"
25
#include "ns3/mac8-address.h"
26
26
27
namespace ns3
27
namespace ns3
28
{
28
{
 Lines 55-76   public: Link Here 
55
55
56
56
57
  // Inherited methods
57
  // Inherited methods
58
  Address GetAddress (void);
58
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t protocolNumber, const Address &dest);
59
  virtual void SetAddress (UanAddress addr);
59
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb);
60
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
61
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress& > cb);
62
  virtual void AttachPhy (Ptr<UanPhy> phy);
60
  virtual void AttachPhy (Ptr<UanPhy> phy);
63
  virtual Address GetBroadcast (void) const;
64
  virtual void Clear (void);
61
  virtual void Clear (void);
65
  int64_t AssignStreams (int64_t stream);
62
  int64_t AssignStreams (int64_t stream);
66
63
67
private:
64
private:
68
  /** The MAC address. */
65
  /** The MAC address. */
69
  UanAddress m_address;
66
  Mac8Address m_address;
70
  /** PHY layer attached to this MAC. */
67
  /** PHY layer attached to this MAC. */
71
  Ptr<UanPhy> m_phy;
68
  Ptr<UanPhy> m_phy;
72
  /** Forwarding up callback. */
69
  /** Forwarding up callback. */
73
  Callback<void, Ptr<Packet>, const UanAddress& > m_forUpCb;
70
  Callback<void, Ptr<Packet>, uint16_t, const Mac8Address& > m_forUpCb;
74
  /** Flag when we've been cleared. */
71
  /** Flag when we've been cleared. */
75
  bool m_cleared;
72
  bool m_cleared;
76
73
(-)a/src/uan/model/uan-mac-cw.cc (-27 / +8 lines)
 Lines 107-126   UanMacCw::GetTypeId (void) Link Here 
107
  return tid;
107
  return tid;
108
}
108
}
109
109
110
Address
111
UanMacCw::GetAddress ()
112
{
113
  return this->m_address;
114
}
115
116
void
117
UanMacCw::SetAddress (UanAddress addr)
118
{
119
  m_address = addr;
120
}
121
122
bool
110
bool
123
UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
111
UanMacCw::Enqueue (Ptr<Packet> packet, uint16_t protocolNumber, const Address &dest)
124
{
112
{
125
113
126
  switch (m_state)
114
  switch (m_state)
 Lines 148-164   UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
148
        NS_ASSERT (!m_pktTx);
136
        NS_ASSERT (!m_pktTx);
149
137
150
        UanHeaderCommon header;
138
        UanHeaderCommon header;
151
        header.SetDest (UanAddress::ConvertFrom (dest));
139
        header.SetDest (Mac8Address::ConvertFrom (dest));
152
        header.SetSrc (m_address);
140
        header.SetSrc (m_address);
153
        header.SetType (0);
141
        header.SetType (0);
154
        packet->AddHeader (header);
142
        packet->AddHeader (header);
155
143
156
        m_enqueueLogger (packet, protocolNumber);
144
        m_enqueueLogger (packet, GetTxModeIndex ());
157
145
158
        if (m_phy->IsStateBusy ())
146
        if (m_phy->IsStateBusy ())
159
          {
147
          {
160
            m_pktTx = packet;
148
            m_pktTx = packet;
161
            m_pktTxProt = protocolNumber;
149
            m_pktTxProt = GetTxModeIndex ();
162
            m_state = CCABUSY;
150
            m_state = CCABUSY;
163
            uint32_t cw = (uint32_t) m_rv->GetValue (0,m_cw);
151
            uint32_t cw = (uint32_t) m_rv->GetValue (0,m_cw);
164
            m_savedDelayS = Seconds ((double)(cw) * m_slotTime.GetSeconds ());
152
            m_savedDelayS = Seconds ((double)(cw) * m_slotTime.GetSeconds ());
 Lines 172-178   UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
172
            NS_LOG_DEBUG ("Time " << Simulator::Now ().GetSeconds () << ": Addr " << GetAddress () << ": Enqueuing new packet while idle (sending)");
160
            NS_LOG_DEBUG ("Time " << Simulator::Now ().GetSeconds () << ": Addr " << GetAddress () << ": Enqueuing new packet while idle (sending)");
173
            NS_ASSERT (m_phy->GetTransducer ()->GetArrivalList ().size () == 0 && !m_phy->IsStateTx ());
161
            NS_ASSERT (m_phy->GetTransducer ()->GetArrivalList ().size () == 0 && !m_phy->IsStateTx ());
174
            m_state = TX;
162
            m_state = TX;
175
            m_phy->SendPacket (packet,protocolNumber);
163
            m_phy->SendPacket (packet,GetTxModeIndex ());
176
164
177
          }
165
          }
178
        break;
166
        break;
 Lines 188-194   UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
188
}
176
}
189
177
190
void
178
void
191
UanMacCw::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb)
179
UanMacCw::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb)
192
{
180
{
193
  m_forwardUpCb = cb;
181
  m_forwardUpCb = cb;
194
}
182
}
 Lines 202-214   UanMacCw::AttachPhy (Ptr<UanPhy> phy) Link Here 
202
  m_phy->RegisterListener (this);
190
  m_phy->RegisterListener (this);
203
}
191
}
204
192
205
Address
206
UanMacCw::GetBroadcast (void) const
207
{
208
  return UanAddress::GetBroadcast ();
209
}
210
211
212
void
193
void
213
UanMacCw::NotifyRxStart (void)
194
UanMacCw::NotifyRxStart (void)
214
{
195
{
 Lines 346-354   UanMacCw::PhyRxPacketGood (Ptr<Packet> packet, double sinr, UanTxMode mode) Link Here 
346
  UanHeaderCommon header;
327
  UanHeaderCommon header;
347
  packet->RemoveHeader (header);
328
  packet->RemoveHeader (header);
348
329
349
  if (header.GetDest () == m_address || header.GetDest () == UanAddress::GetBroadcast ())
330
  if (header.GetDest () == m_address || header.GetDest () == Mac8Address::GetBroadcast ())
350
    {
331
    {
351
      m_forwardUpCb (packet, header.GetSrc ());
332
      m_forwardUpCb (packet, header.GetProtocolNumber (), header.GetSrc ());
352
    }
333
    }
353
}
334
}
354
void
335
void
(-)a/src/uan/model/uan-mac-cw.h (-8 / +5 lines)
 Lines 26-32    Link Here 
26
#include "ns3/simulator.h"
26
#include "ns3/simulator.h"
27
#include "ns3/uan-phy.h"
27
#include "ns3/uan-phy.h"
28
#include "ns3/uan-tx-mode.h"
28
#include "ns3/uan-tx-mode.h"
29
#include "ns3/uan-address.h"
29
#include "ns3/mac8-address.h"
30
#include "ns3/random-variable-stream.h"
30
#include "ns3/random-variable-stream.h"
31
31
32
namespace ns3 {
32
namespace ns3 {
 Lines 83-94   public: Link Here 
83
  virtual Time GetSlotTime (void);
83
  virtual Time GetSlotTime (void);
84
84
85
  // Inherited methods from UanMac
85
  // Inherited methods from UanMac
86
  virtual Address GetAddress ();
86
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t protocolNumber, const Address &dest);
87
  virtual void SetAddress (UanAddress addr);
87
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb);
88
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
89
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
90
  virtual void AttachPhy (Ptr<UanPhy> phy);
88
  virtual void AttachPhy (Ptr<UanPhy> phy);
91
  virtual Address GetBroadcast (void) const;
92
  virtual void Clear (void);
89
  virtual void Clear (void);
93
  int64_t AssignStreams (int64_t stream);
90
  int64_t AssignStreams (int64_t stream);
94
91
 Lines 119-127   private: Link Here 
119
  } State;
116
  } State;
120
117
121
  /** Forwarding up callback. */
118
  /** Forwarding up callback. */
122
  Callback <void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
119
  Callback <void, Ptr<Packet>, uint16_t, const Mac8Address&> m_forwardUpCb;
123
  /** The MAC address. */
120
  /** The MAC address. */
124
  UanAddress m_address;
121
  Mac8Address m_address;
125
  /** PHY layer attached to this MAC. */
122
  /** PHY layer attached to this MAC. */
126
  Ptr<UanPhy> m_phy;
123
  Ptr<UanPhy> m_phy;
127
  /** A packet destined for this MAC was received. */
124
  /** A packet destined for this MAC was received. */
(-)a/src/uan/model/uan-mac-rc-gw.cc (-32 / +14 lines)
 Lines 83-89   UanMacRcGw::Clear () Link Here 
83
      m_phy = 0;
83
      m_phy = 0;
84
    }
84
    }
85
  m_propDelay.clear ();
85
  m_propDelay.clear ();
86
  std::map<UanAddress, AckData>::iterator it = m_ackData.begin ();
86
  std::map<Mac8Address, AckData>::iterator it = m_ackData.begin ();
87
  for (; it != m_ackData.end (); it++)
87
  for (; it != m_ackData.end (); it++)
88
    {
88
    {
89
      it->second.rxFrames.clear ();
89
      it->second.rxFrames.clear ();
 Lines 170-196   UanMacRcGw::GetTypeId (void) Link Here 
170
  return tid;
170
  return tid;
171
}
171
}
172
172
173
Address
174
UanMacRcGw::GetAddress (void)
175
{
176
  return m_address;
177
}
178
179
void
180
UanMacRcGw::SetAddress (UanAddress addr)
181
{
182
  m_address = addr;
183
}
184
185
bool
173
bool
186
UanMacRcGw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
174
UanMacRcGw::Enqueue (Ptr<Packet> packet, uint16_t protocolNumber, const Address &dest)
187
{
175
{
188
  NS_LOG_WARN ("RCMAC Gateway transmission to acoustic nodes is not yet implemented");
176
  NS_LOG_WARN ("RCMAC Gateway transmission to acoustic nodes is not yet implemented");
189
  return false;
177
  return false;
190
}
178
}
191
179
192
void
180
void
193
UanMacRcGw::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb)
181
UanMacRcGw::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb)
194
{
182
{
195
  m_forwardUpCb = cb;
183
  m_forwardUpCb = cb;
196
}
184
}
 Lines 208-226   UanMacRcGw::ReceiveError (Ptr<Packet> pkt, double sinr) Link Here 
208
{
196
{
209
}
197
}
210
198
211
Address
212
UanMacRcGw::GetBroadcast (void) const
213
{
214
  return UanAddress::GetBroadcast ();
215
}
216
217
void
199
void
218
UanMacRcGw::ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode)
200
UanMacRcGw::ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode)
219
{
201
{
220
  UanHeaderCommon ch;
202
  UanHeaderCommon ch;
221
  pkt->PeekHeader (ch);
203
  pkt->PeekHeader (ch);
222
204
223
  if (ch.GetDest () == m_address || ch.GetDest () == UanAddress::GetBroadcast ())
205
  if (ch.GetDest () == m_address || ch.GetDest () == Mac8Address::GetBroadcast ())
224
    {
206
    {
225
      m_rxLogger (pkt, mode);
207
      m_rxLogger (pkt, mode);
226
    }
208
    }
 Lines 247-253   UanMacRcGw::ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode) Link Here 
247
            NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW Received data packet from " << ch.GetSrc () << " length = " << pkt->GetSize ());
229
            NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW Received data packet from " << ch.GetSrc () << " length = " << pkt->GetSize ());
248
            m_ackData[ch.GetSrc ()].rxFrames.insert (dh.GetFrameNo ());
230
            m_ackData[ch.GetSrc ()].rxFrames.insert (dh.GetFrameNo ());
249
          }
231
          }
250
        m_forwardUpCb (pkt, ch.GetSrc ());
232
        m_forwardUpCb (pkt, ch.GetProtocolNumber (), ch.GetSrc ());
251
      }
233
      }
252
      break;
234
      break;
253
    case UanMacRc::TYPE_GWPING:
235
    case UanMacRc::TYPE_GWPING:
 Lines 271-277   UanMacRcGw::ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode) Link Here 
271
            req.length = rh.GetLength ();
253
            req.length = rh.GetLength ();
272
            NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW storing reservation from " << ch.GetSrc () << " with length " << req.length);
254
            NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW storing reservation from " << ch.GetSrc () << " with length " << req.length);
273
            m_requests.insert (std::make_pair (ch.GetSrc (), req));
255
            m_requests.insert (std::make_pair (ch.GetSrc (), req));
274
            std::map<UanAddress, Time>::iterator it = m_propDelay.find (ch.GetSrc ());
256
            std::map<Mac8Address, Time>::iterator it = m_propDelay.find (ch.GetSrc ());
275
            if (it == m_propDelay.end ())
257
            if (it == m_propDelay.end ())
276
              {
258
              {
277
                m_sortedRes.insert (std::make_pair (m_maxDelta, ch.GetSrc ()));
259
                m_sortedRes.insert (std::make_pair (m_maxDelta, ch.GetSrc ()));
 Lines 318-324   UanMacRcGw::StartCycle (void) Link Here 
318
  double pDelay = 0;
300
  double pDelay = 0;
319
  if (numRts > 0)
301
  if (numRts > 0)
320
    {
302
    {
321
      std::map<UanAddress, Request>::iterator rit = m_requests.begin ();
303
      std::map<Mac8Address, Request>::iterator rit = m_requests.begin ();
322
      for (; rit != m_requests.end (); rit++)
304
      for (; rit != m_requests.end (); rit++)
323
        {
305
        {
324
          totalBytes += (*rit).second.length;
306
          totalBytes += (*rit).second.length;
 Lines 388-394   UanMacRcGw::StartCycle (void) Link Here 
388
      ctsg.SetRetryRate (m_currentRetryRate);
370
      ctsg.SetRetryRate (m_currentRetryRate);
389
      ctsg.SetTxTimeStamp (Simulator::Now ());
371
      ctsg.SetTxTimeStamp (Simulator::Now ());
390
372
391
      UanHeaderCommon ch (m_address, UanAddress::GetBroadcast (), UanMacRc::TYPE_CTS);
373
      UanHeaderCommon ch (m_address, Mac8Address::GetBroadcast (), UanMacRc::TYPE_CTS, 0);
392
      Ptr<Packet> p = Create<Packet> ();
374
      Ptr<Packet> p = Create<Packet> ();
393
      p->AddHeader (ctsg);
375
      p->AddHeader (ctsg);
394
      p->AddHeader (ch);
376
      p->AddHeader (ch);
 Lines 406-412   UanMacRcGw::StartCycle (void) Link Here 
406
  m_state = CTSING;
388
  m_state = CTSING;
407
  Simulator::Schedule (nextEarliest, &UanMacRcGw::CycleStarted, this);
389
  Simulator::Schedule (nextEarliest, &UanMacRcGw::CycleStarted, this);
408
390
409
  std::set<std::pair<Time, UanAddress> >::iterator it = m_sortedRes.begin ();
391
  std::set<std::pair<Time, Mac8Address> >::iterator it = m_sortedRes.begin ();
410
  Time minPdelay = (*it).first;
392
  Time minPdelay = (*it).first;
411
  Ptr<Packet> cts = Create<Packet> ();
393
  Ptr<Packet> cts = Create<Packet> ();
412
394
 Lines 418-424   UanMacRcGw::StartCycle (void) Link Here 
418
      AckData newData;
400
      AckData newData;
419
      newData.expFrames = req.numFrames;
401
      newData.expFrames = req.numFrames;
420
      newData.frameNo = req.frameNo;
402
      newData.frameNo = req.frameNo;
421
      UanAddress dest = (*it).second;
403
      Mac8Address dest = (*it).second;
422
      m_ackData.insert (std::make_pair (dest, newData));
404
      m_ackData.insert (std::make_pair (dest, newData));
423
405
424
      Time earliestArr = ctsTxTimeTotal + pdelay + pdelay + m_sifs;
406
      Time earliestArr = ctsTxTimeTotal + pdelay + pdelay + m_sifs;
 Lines 445-451   UanMacRcGw::StartCycle (void) Link Here 
445
  ctsg.SetWindowTime (Seconds (effWinSize));
427
  ctsg.SetWindowTime (Seconds (effWinSize));
446
  ctsg.SetTxTimeStamp (Simulator::Now ());
428
  ctsg.SetTxTimeStamp (Simulator::Now ());
447
  UanHeaderCommon ch;
429
  UanHeaderCommon ch;
448
  ch.SetDest (UanAddress::GetBroadcast ());
430
  ch.SetDest (Mac8Address::GetBroadcast ());
449
  ch.SetSrc (m_address);
431
  ch.SetSrc (m_address);
450
  ch.SetType (UanMacRc::TYPE_CTS);
432
  ch.SetType (UanMacRc::TYPE_CTS);
451
  cts->AddHeader (ctsg);
433
  cts->AddHeader (ctsg);
 Lines 475-484   UanMacRcGw::EndCycle () Link Here 
475
457
476
  Time ackTime = Seconds (m_ackSize * 8.0 / m_phy->GetMode (m_currentRateNum).GetDataRateBps ());
458
  Time ackTime = Seconds (m_ackSize * 8.0 / m_phy->GetMode (m_currentRateNum).GetDataRateBps ());
477
459
478
  std::map<UanAddress, AckData>::iterator it = m_ackData.begin ();
460
  std::map<Mac8Address, AckData>::iterator it = m_ackData.begin ();
479
  for (; it != m_ackData.end (); it++)
461
  for (; it != m_ackData.end (); it++)
480
    {
462
    {
481
      UanAddress dest = (*it).first;
463
      Mac8Address dest = (*it).first;
482
      AckData &data = (*it).second;
464
      AckData &data = (*it).second;
483
465
484
      std::list<uint32_t> toNack;
466
      std::list<uint32_t> toNack;
 Lines 579-585   UanMacRcGw::GetExpPdk (void) Link Here 
579
{
561
{
580
  uint32_t n = m_numNodes;
562
  uint32_t n = m_numNodes;
581
  std::vector<double> pds;
563
  std::vector<double> pds;
582
  std::map<UanAddress, Time>::iterator pdit = m_propDelay.begin ();
564
  std::map<Mac8Address, Time>::iterator pdit = m_propDelay.begin ();
583
565
584
  for (; pdit != m_propDelay.end (); pdit++)
566
  for (; pdit != m_propDelay.end (); pdit++)
585
    {
567
    {
(-)a/src/uan/model/uan-mac-rc-gw.h (-12 / +9 lines)
 Lines 22-28    Link Here 
22
#define UAN_MAC_RC_GW_H
22
#define UAN_MAC_RC_GW_H
23
23
24
#include "uan-mac.h"
24
#include "uan-mac.h"
25
#include "uan-address.h"
25
#include "ns3/mac8-address.h"
26
26
27
#include "ns3/nstime.h"
27
#include "ns3/nstime.h"
28
#include "ns3/traced-callback.h"
28
#include "ns3/traced-callback.h"
 Lines 67-78   public: Link Here 
67
  static TypeId GetTypeId (void);
67
  static TypeId GetTypeId (void);
68
68
69
  // Inherited methods
69
  // Inherited methods
70
  virtual Address GetAddress (void);
70
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t protocolNumber, const Address &dest);
71
  virtual void SetAddress (UanAddress addr);
71
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb);
72
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
73
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
74
  virtual void AttachPhy (Ptr<UanPhy> phy);
72
  virtual void AttachPhy (Ptr<UanPhy> phy);
75
  virtual Address GetBroadcast (void) const;
76
  virtual void Clear (void);
73
  virtual void Clear (void);
77
  int64_t AssignStreams (int64_t stream);
74
  int64_t AssignStreams (int64_t stream);
78
75
 Lines 126-135   private: Link Here 
126
    uint8_t expFrames;  //!< Expected number of frames.
123
    uint8_t expFrames;  //!< Expected number of frames.
127
  };
124
  };
128
  /** Forwarding up callback. */
125
  /** Forwarding up callback. */
129
  Callback<void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
126
  Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> m_forwardUpCb;
130
  
127
  
131
  Ptr<UanPhy> m_phy;            //!< PHY layer attached to this MAC.
128
  Ptr<UanPhy> m_phy;            //!< PHY layer attached to this MAC.
132
  UanAddress m_address;         //!< The MAC address.
129
  Mac8Address m_address;         //!< The MAC address.
133
  Time m_maxDelta;              //!< Maximum propagation delay between gateway and non-gateway nodes .
130
  Time m_maxDelta;              //!< Maximum propagation delay between gateway and non-gateway nodes .
134
  Time m_sifs;                  //!< Spacing between frames to account for timing error and processing delay.
131
  Time m_sifs;                  //!< Spacing between frames to account for timing error and processing delay.
135
  uint32_t m_maxRes;            //!< Maximum number of reservations to accept per cycle.
132
  uint32_t m_maxRes;            //!< Maximum number of reservations to accept per cycle.
 Lines 149-163   private: Link Here 
149
  double m_retryStep;           //!< Retry rate increment.
146
  double m_retryStep;           //!< Retry rate increment.
150
147
151
  /** Propagation delay to each node. */
148
  /** Propagation delay to each node. */
152
  std::map<UanAddress, Time> m_propDelay;
149
  std::map<Mac8Address, Time> m_propDelay;
153
150
154
  /** AckData for each node. */
151
  /** AckData for each node. */
155
  std::map<UanAddress, AckData> m_ackData;
152
  std::map<Mac8Address, AckData> m_ackData;
156
153
157
  /** Request for each node. */
154
  /** Request for each node. */
158
  std::map<UanAddress, Request> m_requests;
155
  std::map<Mac8Address, Request> m_requests;
159
  /** Queued request times. */
156
  /** Queued request times. */
160
  std::set<std::pair<Time, UanAddress> > m_sortedRes;
157
  std::set<std::pair<Time, Mac8Address> > m_sortedRes;
161
158
162
  /** Flag when we've been cleared. */
159
  /** Flag when we've been cleared. */
163
  bool m_cleared;
160
  bool m_cleared;
(-)a/src/uan/model/uan-mac-rc.cc (-36 / +18 lines)
 Lines 52-58   Reservation::Reservation () Link Here 
52
52
53
}
53
}
54
54
55
Reservation::Reservation (std::list<std::pair <Ptr<Packet>, UanAddress > > &list, uint8_t frameNo, uint32_t maxPkts)
55
Reservation::Reservation (std::list<std::pair <Ptr<Packet>, Mac8Address > > &list, uint8_t frameNo, uint32_t maxPkts)
56
  : m_frameNo (frameNo),
56
  : m_frameNo (frameNo),
57
    m_retryNo (0),
57
    m_retryNo (0),
58
    m_transmitted (false)
58
    m_transmitted (false)
 Lines 75-81   Reservation::Reservation (std::list<std::pair <Ptr<Packet>, UanAddress > > &list Link Here 
75
75
76
Reservation::~Reservation ()
76
Reservation::~Reservation ()
77
{
77
{
78
  std::list<std::pair <Ptr<Packet>, UanAddress > >::iterator it;
78
  std::list<std::pair <Ptr<Packet>, Mac8Address > >::iterator it;
79
  for (it = m_pktList.begin (); it != m_pktList.end (); it++)
79
  for (it = m_pktList.begin (); it != m_pktList.end (); it++)
80
    {
80
    {
81
      it->first = Ptr<Packet> ((Packet *) 0);
81
      it->first = Ptr<Packet> ((Packet *) 0);
 Lines 95-101   Reservation::GetLength () const Link Here 
95
  return m_length;
95
  return m_length;
96
}
96
}
97
97
98
const std::list<std::pair <Ptr<Packet>, UanAddress > > &
98
const std::list<std::pair <Ptr<Packet>, Mac8Address > > &
99
Reservation::GetPktList (void) const
99
Reservation::GetPktList (void) const
100
{
100
{
101
  return m_pktList;
101
  return m_pktList;
 Lines 186-192   UanMacRc::Clear () Link Here 
186
      m_phy->Clear ();
186
      m_phy->Clear ();
187
      m_phy = 0;
187
      m_phy = 0;
188
    }
188
    }
189
  std::list<std::pair <Ptr<Packet>, UanAddress > >::iterator it;
189
  std::list<std::pair <Ptr<Packet>, Mac8Address > >::iterator it;
190
  for (it = m_pktQueue.begin (); it != m_pktQueue.end (); it++)
190
  for (it = m_pktQueue.begin (); it != m_pktQueue.end (); it++)
191
    {
191
    {
192
      it->first = 0;
192
      it->first = 0;
 Lines 275-294   UanMacRc::AssignStreams (int64_t stream) Link Here 
275
  return 1;
275
  return 1;
276
}
276
}
277
277
278
Address
279
UanMacRc::GetAddress (void)
280
{
281
  return m_address;
282
}
283
284
void
285
UanMacRc::SetAddress (UanAddress addr)
286
{
287
  m_address = addr;
288
}
289
290
bool
278
bool
291
UanMacRc::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
279
UanMacRc::Enqueue (Ptr<Packet> packet, uint16_t protocolNumber, const Address &dest)
292
{
280
{
293
  if (protocolNumber > 0)
281
  if (protocolNumber > 0)
294
    {
282
    {
 Lines 301-307   UanMacRc::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
301
      return false;
289
      return false;
302
    }
290
    }
303
291
304
  m_pktQueue.push_back (std::make_pair (packet, UanAddress::ConvertFrom (dest)));
292
  m_pktQueue.push_back (std::make_pair (packet, Mac8Address::ConvertFrom (dest)));
305
293
306
  switch (m_state)
294
  switch (m_state)
307
    {
295
    {
 Lines 324-330   UanMacRc::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
324
}
312
}
325
313
326
void
314
void
327
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb)
315
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb)
328
{
316
{
329
  m_forwardUpCb = cb;
317
  m_forwardUpCb = cb;
330
}
318
}
 Lines 336-354   UanMacRc::AttachPhy (Ptr<UanPhy> phy) Link Here 
336
  m_phy->SetReceiveOkCallback (MakeCallback (&UanMacRc::ReceiveOkFromPhy, this));
324
  m_phy->SetReceiveOkCallback (MakeCallback (&UanMacRc::ReceiveOkFromPhy, this));
337
}
325
}
338
326
339
Address
340
UanMacRc::GetBroadcast (void) const
341
{
342
  return UanAddress::GetBroadcast ();
343
}
344
345
void
327
void
346
UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode)
328
UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode)
347
{
329
{
348
330
349
  UanHeaderCommon ch;
331
  UanHeaderCommon ch;
350
  pkt->RemoveHeader (ch);
332
  pkt->RemoveHeader (ch);
351
  if (ch.GetDest () == m_address || ch.GetDest () == UanAddress::GetBroadcast ())
333
  if (ch.GetDest () == m_address || ch.GetDest () == Mac8Address::GetBroadcast ())
352
    {
334
    {
353
      m_rxLogger (pkt, mode);
335
      m_rxLogger (pkt, mode);
354
    }
336
    }
 Lines 362-368   UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode) Link Here 
362
          NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Node " << m_address << " UanMacRc Receiving DATA packet from PHY");
344
          NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Node " << m_address << " UanMacRc Receiving DATA packet from PHY");
363
          UanHeaderRcData dh;
345
          UanHeaderRcData dh;
364
          pkt->RemoveHeader (dh);
346
          pkt->RemoveHeader (dh);
365
          m_forwardUpCb (pkt, ch.GetSrc ());
347
          m_forwardUpCb (pkt, ch.GetProtocolNumber (), ch.GetSrc ());
366
        }
348
        }
367
      break;
349
      break;
368
    case TYPE_RTS:
350
    case TYPE_RTS:
 Lines 393-399   UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode) Link Here 
393
          }
375
          }
394
376
395
        UanHeaderRcCts ctsh;
377
        UanHeaderRcCts ctsh;
396
        ctsh.SetAddress (UanAddress::GetBroadcast ());
378
        ctsh.SetAddress (Mac8Address::GetBroadcast ());
397
        while (pkt->GetSize () > 0)
379
        while (pkt->GetSize () > 0)
398
          {
380
          {
399
            pkt->RemoveHeader (ctsh);
381
            pkt->RemoveHeader (ctsh);
 Lines 468-475   UanMacRc::ScheduleData (const UanHeaderRcCts &ctsh, const UanHeaderRcCtsGlobal & Link Here 
468
450
469
  Time frameDelay = Seconds (0);
451
  Time frameDelay = Seconds (0);
470
452
471
  const std::list<std::pair <Ptr<Packet>, UanAddress > > l = it->GetPktList ();
453
  const std::list<std::pair <Ptr<Packet>, Mac8Address > > l = it->GetPktList ();
472
  std::list<std::pair <Ptr<Packet>, UanAddress > >::const_iterator pit;
454
  std::list<std::pair <Ptr<Packet>, Mac8Address > >::const_iterator pit;
473
  pit = l.begin ();
455
  pit = l.begin ();
474
456
475
457
 Lines 579-586   UanMacRc::ProcessAck (Ptr<Packet> ack) Link Here 
579
    }
561
    }
580
  if (ah.GetNoNacks () > 0)
562
  if (ah.GetNoNacks () > 0)
581
    {
563
    {
582
      const std::list<std::pair <Ptr<Packet>, UanAddress > > l = it->GetPktList ();
564
      const std::list<std::pair <Ptr<Packet>, Mac8Address > > l = it->GetPktList ();
583
      std::list<std::pair <Ptr<Packet>, UanAddress > >::const_iterator pit;
565
      std::list<std::pair <Ptr<Packet>, Mac8Address > >::const_iterator pit;
584
      pit = l.begin ();
566
      pit = l.begin ();
585
567
586
      const std::set<uint8_t> &nacks = ah.GetNackedFrames ();
568
      const std::set<uint8_t> &nacks = ah.GetNackedFrames ();
 Lines 634-640   UanMacRc::Associate (void) Link Here 
634
    {
616
    {
635
      Ptr<Packet> pkt = Create<Packet> (0);
617
      Ptr<Packet> pkt = Create<Packet> (0);
636
      pkt->AddHeader (CreateRtsHeader (res));
618
      pkt->AddHeader (CreateRtsHeader (res));
637
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING));
619
      pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), (uint8_t) TYPE_GWPING, 0));
638
      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt);
620
      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt);
639
      SendPacket (pkt,m_currentRate + m_numRates);
621
      SendPacket (pkt,m_currentRate + m_numRates);
640
    }
622
    }
 Lines 665-671   UanMacRc::AssociateTimeout () Link Here 
665
      res.IncrementRetry ();
647
      res.IncrementRetry ();
666
648
667
      pkt->AddHeader (CreateRtsHeader (res));
649
      pkt->AddHeader (CreateRtsHeader (res));
668
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING));
650
      pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), (uint8_t) TYPE_GWPING, 0));
669
651
670
      SendPacket (pkt,m_currentRate + m_numRates);
652
      SendPacket (pkt,m_currentRate + m_numRates);
671
      m_resList.push_back (res);
653
      m_resList.push_back (res);
 Lines 698-704   UanMacRc::SendRts (void) Link Here 
698
    {
680
    {
699
      Ptr<Packet> pkt = Create<Packet> (0);
681
      Ptr<Packet> pkt = Create<Packet> (0);
700
      pkt->AddHeader (CreateRtsHeader (res));
682
      pkt->AddHeader (CreateRtsHeader (res));
701
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS));
683
      pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), (uint8_t) TYPE_RTS, 0));
702
      SendPacket (pkt,m_currentRate + m_numRates);
684
      SendPacket (pkt,m_currentRate + m_numRates);
703
    }
685
    }
704
  m_state = RTSSENT;
686
  m_state = RTSSENT;
 Lines 761-767   UanMacRc::RtsTimeout (void) Link Here 
761
      res.IncrementRetry ();
743
      res.IncrementRetry ();
762
      m_resList.push_back (res);
744
      m_resList.push_back (res);
763
      pkt->AddHeader (CreateRtsHeader (res));
745
      pkt->AddHeader (CreateRtsHeader (res));
764
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS));
746
      pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), (uint8_t) TYPE_RTS, 0));
765
      SendPacket (pkt,m_currentRate + m_numRates);
747
      SendPacket (pkt,m_currentRate + m_numRates);
766
748
767
    }
749
    }
(-)a/src/uan/model/uan-mac-rc.h (-13 / +10 lines)
 Lines 22-28    Link Here 
22
#define UAN_MAC_RC_H
22
#define UAN_MAC_RC_H
23
23
24
#include "uan-mac.h"
24
#include "uan-mac.h"
25
#include "uan-address.h"
25
#include "ns3/mac8-address.h"
26
26
27
#include "ns3/nstime.h"
27
#include "ns3/nstime.h"
28
#include "ns3/trace-source-accessor.h"
28
#include "ns3/trace-source-accessor.h"
 Lines 63-69   public: Link Here 
63
   * \param maxPkts Maximum number of packets to assign to reservation
63
   * \param maxPkts Maximum number of packets to assign to reservation
64
   *   from packet list (0 = no maximum).
64
   *   from packet list (0 = no maximum).
65
   */
65
   */
66
  Reservation (std::list<std::pair <Ptr<Packet>, UanAddress > > &list, uint8_t frameNo, uint32_t maxPkts = 0);
66
  Reservation (std::list<std::pair <Ptr<Packet>, Mac8Address > > &list, uint8_t frameNo, uint32_t maxPkts = 0);
67
  /** Destructor */
67
  /** Destructor */
68
  ~Reservation ();
68
  ~Reservation ();
69
  /**
69
  /**
 Lines 85-91   public: Link Here 
85
   *
85
   *
86
   * \return The list of packets.
86
   * \return The list of packets.
87
   */
87
   */
88
  const std::list<std::pair <Ptr<Packet>, UanAddress > > &GetPktList (void) const;
88
  const std::list<std::pair <Ptr<Packet>, Mac8Address > > &GetPktList (void) const;
89
  /**
89
  /**
90
   * Get the frame number.
90
   * Get the frame number.
91
   * 
91
   * 
 Lines 131-137   public: Link Here 
131
131
132
private:
132
private:
133
  /** Queued packets for each address. */
133
  /** Queued packets for each address. */
134
  std::list<std::pair <Ptr<Packet>, UanAddress > > m_pktList;
134
  std::list<std::pair <Ptr<Packet>, Mac8Address > > m_pktList;
135
  /** Total length of queued packets. */
135
  /** Total length of queued packets. */
136
  uint32_t m_length;
136
  uint32_t m_length;
137
  /** Frame number. */
137
  /** Frame number. */
 Lines 183-194   public: Link Here 
183
  static TypeId GetTypeId (void);
183
  static TypeId GetTypeId (void);
184
184
185
  // Inherited methods
185
  // Inherited methods
186
  virtual Address GetAddress (void);
186
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t protocolNumber, const Address &dest);
187
  virtual void SetAddress (UanAddress addr);
187
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb);
188
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
189
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
190
  virtual void AttachPhy (Ptr<UanPhy> phy);
188
  virtual void AttachPhy (Ptr<UanPhy> phy);
191
  virtual Address GetBroadcast (void) const;
192
  virtual void Clear (void);
189
  virtual void Clear (void);
193
  int64_t AssignStreams (int64_t stream);
190
  int64_t AssignStreams (int64_t stream);
194
191
 Lines 215-223   private: Link Here 
215
  bool m_rtsBlocked;       //!< RTS blocked while processing ACK.
212
  bool m_rtsBlocked;       //!< RTS blocked while processing ACK.
216
213
217
  EventId m_startAgain;    //!< (Unused).
214
  EventId m_startAgain;    //!< (Unused).
218
  UanAddress m_address;    //!< My addrese.s
215
  Mac8Address m_address;    //!< My addrese.s
219
  double m_retryRate;      //!< Number of retry attempts per second (of RTS/GWPING.
216
  double m_retryRate;      //!< Number of retry attempts per second (of RTS/GWPING.
220
  UanAddress m_assocAddr;  //!< Next hop address.
217
  Mac8Address m_assocAddr;  //!< Next hop address.
221
  Ptr<UanPhy> m_phy;       //!< PHY layer attached to this MAC.
218
  Ptr<UanPhy> m_phy;       //!< PHY layer attached to this MAC.
222
  uint32_t m_numRates;     //!< Number of rates per Phy layer.
219
  uint32_t m_numRates;     //!< Number of rates per Phy layer.
223
  uint32_t m_currentRate;  //!< Rate number corresponding to data rate of current cycle.
220
  uint32_t m_currentRate;  //!< Rate number corresponding to data rate of current cycle.
 Lines 236-247   private: Link Here 
236
  bool m_cleared;          //!< Flag when we've been cleared.
233
  bool m_cleared;          //!< Flag when we've been cleared.
237
234
238
  /** Pending packets. */
235
  /** Pending packets. */
239
  std::list<std::pair <Ptr<Packet>, UanAddress > > m_pktQueue;
236
  std::list<std::pair <Ptr<Packet>, Mac8Address > > m_pktQueue;
240
  /** List of scheduled reservations. */
237
  /** List of scheduled reservations. */
241
  std::list<Reservation> m_resList;
238
  std::list<Reservation> m_resList;
242
239
243
  /** The callback to forward a packet up to higher layer. */
240
  /** The callback to forward a packet up to higher layer. */
244
  Callback<void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
241
  Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> m_forwardUpCb;
245
242
246
  /** A packet was destined for and received at this MAC layer. */
243
  /** A packet was destined for and received at this MAC layer. */
247
  TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
244
  TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
(-)a/src/uan/model/uan-mac.cc (+37 lines)
 Lines 24-29   namespace ns3 { Link Here 
24
24
25
NS_OBJECT_ENSURE_REGISTERED (UanMac);
25
NS_OBJECT_ENSURE_REGISTERED (UanMac);
26
26
27
UanMac::UanMac ()
28
  : m_txModeIndex (0)
29
{
30
31
}
32
27
TypeId UanMac::GetTypeId (void)
33
TypeId UanMac::GetTypeId (void)
28
{
34
{
29
  static TypeId tid = TypeId ("ns3::UanMac")
35
  static TypeId tid = TypeId ("ns3::UanMac")
 Lines 33-36   TypeId UanMac::GetTypeId (void) Link Here 
33
  return tid;
39
  return tid;
34
}
40
}
35
41
42
void
43
UanMac::SetTxModeIndex (uint32_t txModeIndex)
44
{
45
  m_txModeIndex = txModeIndex;
46
}
47
48
uint32_t
49
UanMac::GetTxModeIndex ()
50
{
51
  return m_txModeIndex;
52
}
53
54
Address
55
UanMac::GetAddress (void)
56
{
57
  return m_address;
58
}
59
60
void
61
UanMac::SetAddress (Mac8Address addr)
62
{
63
  m_address=addr;
64
}
65
66
Address
67
UanMac::GetBroadcast (void) const
68
{
69
  Mac8Address broadcast = Mac8Address (255);
70
  return broadcast;
71
}
72
36
} // namespace ns3
73
} // namespace ns3
(-)a/src/uan/model/uan-mac.h (-8 / +20 lines)
 Lines 28-33    Link Here 
28
#include "ns3/address.h"
28
#include "ns3/address.h"
29
#include "ns3/nstime.h"
29
#include "ns3/nstime.h"
30
#include "ns3/ptr.h"
30
#include "ns3/ptr.h"
31
#include "ns3/mac8-address.h"
31
32
32
namespace ns3 {
33
namespace ns3 {
33
34
 Lines 36-42   class UanChannel; Link Here 
36
class UanNetDevice;
37
class UanNetDevice;
37
class UanTransducer;
38
class UanTransducer;
38
class UanTxMode;
39
class UanTxMode;
39
class UanAddress;
40
class Mac8Address;
40
41
41
42
42
43
 Lines 48-53   class UanAddress; Link Here 
48
class UanMac : public Object
49
class UanMac : public Object
49
{
50
{
50
public:
51
public:
52
  /** Default constructor */
53
  UanMac ();
51
  /**
54
  /**
52
   * Register this type.
55
   * Register this type.
53
   * \return The TypeId.
56
   * \return The TypeId.
 Lines 59-82   public: Link Here 
59
   *
62
   *
60
   * \return MAC Address.
63
   * \return MAC Address.
61
   */
64
   */
62
  virtual Address GetAddress (void) = 0;
65
  virtual Address GetAddress (void);
63
66
64
  /**
67
  /**
65
   * Set the address.
68
   * Set the address.
66
   *
69
   *
67
   * \param addr UanAddress for this MAC.
70
   * \param addr Mac8Address for this MAC.
68
   */
71
   */
69
  virtual void SetAddress (UanAddress addr) = 0;
72
  virtual void SetAddress (Mac8Address addr);
70
73
71
  /**
74
  /**
72
   * Enqueue packet to be transmitted.
75
   * Enqueue packet to be transmitted.
73
   *
76
   *
74
   * \param pkt Packet to be transmitted.
77
   * \param pkt Packet to be transmitted.
75
   * \param dest Destination address.
78
   * \param dest Destination address.
76
   * \param protocolNumber Protocol number.  Usage varies by MAC.
79
   * \param protocolNumber The type of the packet.
77
   * \return True if packet was successfully enqueued.
80
   * \return True if packet was successfully enqueued.
78
   */
81
   */
79
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber) = 0;
82
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t protocolNumber, const Address &dest) = 0;
80
  /**
83
  /**
81
   * Set the callback to forward packets up to higher layers.
84
   * Set the callback to forward packets up to higher layers.
82
   * 
85
   * 
 Lines 84-90   public: Link Here 
84
   * \pname{packet} The packet.
87
   * \pname{packet} The packet.
85
   * \pname{address} The source address.
88
   * \pname{address} The source address.
86
   */
89
   */
87
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb) = 0;
90
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb) = 0;
88
91
89
  /**
92
  /**
90
   * Attach PHY layer to this MAC.
93
   * Attach PHY layer to this MAC.
 Lines 101-107   public: Link Here 
101
   *
104
   *
102
   * \return The broadcast address.
105
   * \return The broadcast address.
103
   */
106
   */
104
  virtual Address GetBroadcast (void) const = 0;
107
  virtual Address GetBroadcast (void) const;
105
108
106
  /** Clears all pointer references. */
109
  /** Clears all pointer references. */
107
  virtual void Clear (void) = 0;
110
  virtual void Clear (void) = 0;
 Lines 125-130   public: Link Here 
125
  typedef void (* PacketModeTracedCallback)
128
  typedef void (* PacketModeTracedCallback)
126
    (Ptr<const Packet> packet, UanTxMode mode);
129
    (Ptr<const Packet> packet, UanTxMode mode);
127
130
131
  uint32_t GetTxModeIndex ();
132
  void SetTxModeIndex (uint32_t txModeIndex);
133
134
private:
135
  /** Modulation type */
136
  uint32_t m_txModeIndex;
137
  /** The MAC address. */
138
  Mac8Address m_address;
139
128
};  // class UanMac
140
};  // class UanMac
129
141
130
} // namespace ns3
142
} // namespace ns3
(-)a/src/uan/model/uan-net-device.cc (-8 / +10 lines)
 Lines 271-290   UanNetDevice::GetBroadcast () const Link Here 
271
bool
271
bool
272
UanNetDevice::IsMulticast () const
272
UanNetDevice::IsMulticast () const
273
{
273
{
274
  return false;
274
  return true;
275
}
275
}
276
276
277
Address
277
Address
278
UanNetDevice::GetMulticast (Ipv4Address multicastGroup) const
278
UanNetDevice::GetMulticast (Ipv4Address multicastGroup) const
279
{
279
{
280
  NS_FATAL_ERROR ("UanNetDevice does not support multicast");
281
  return m_mac->GetBroadcast ();
280
  return m_mac->GetBroadcast ();
282
}
281
}
283
282
284
Address
283
Address
285
UanNetDevice::GetMulticast (Ipv6Address addr) const
284
UanNetDevice::GetMulticast (Ipv6Address addr) const
286
{
285
{
287
  NS_FATAL_ERROR ("UanNetDevice does not support multicast");
288
  return m_mac->GetBroadcast ();
286
  return m_mac->GetBroadcast ();
289
}
287
}
290
288
 Lines 302-308   UanNetDevice::IsPointToPoint () const Link Here 
302
bool
300
bool
303
UanNetDevice::Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
301
UanNetDevice::Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
304
{
302
{
305
  return m_mac->Enqueue (packet, dest, protocolNumber);
303
  uint8_t tmp [6];
304
  dest.CopyTo (tmp);
305
  Mac8Address udest (tmp[0]);
306
307
  return m_mac->Enqueue (packet, protocolNumber, udest);
306
}
308
}
307
309
308
bool
310
bool
 Lines 327-333   UanNetDevice::SetNode (Ptr<Node> node) Link Here 
327
bool
329
bool
328
UanNetDevice::NeedsArp () const
330
UanNetDevice::NeedsArp () const
329
{
331
{
330
  return false;
332
  return true;
331
}
333
}
332
334
333
void
335
void
 Lines 337-347   UanNetDevice::SetReceiveCallback (NetDevice::ReceiveCallback cb) Link Here 
337
}
339
}
338
340
339
void
341
void
340
UanNetDevice::ForwardUp (Ptr<Packet> pkt, const UanAddress &src)
342
UanNetDevice::ForwardUp (Ptr<Packet> pkt, uint16_t protocolNumber, const Mac8Address &src)
341
{
343
{
342
  NS_LOG_DEBUG ("Forwarding packet up to application");
344
  NS_LOG_DEBUG ("Forwarding packet up to application");
343
  m_rxLogger (pkt, src);
345
  m_rxLogger (pkt, src);
344
  m_forwardUp (this, pkt, 0, src);
346
  m_forwardUp (this, pkt, protocolNumber, src);
345
347
346
}
348
}
347
349
 Lines 398-404   void Link Here 
398
UanNetDevice::SetAddress (Address address)
400
UanNetDevice::SetAddress (Address address)
399
{
401
{
400
  NS_ASSERT_MSG (0, "Tried to set MAC address with no MAC");
402
  NS_ASSERT_MSG (0, "Tried to set MAC address with no MAC");
401
  m_mac->SetAddress (UanAddress::ConvertFrom (address));
403
  m_mac->SetAddress (Mac8Address::ConvertFrom (address));
402
}
404
}
403
405
404
void
406
void
(-)a/src/uan/model/uan-net-device.h (-5 / +6 lines)
 Lines 24-30    Link Here 
24
#include "ns3/net-device.h"
24
#include "ns3/net-device.h"
25
#include "ns3/pointer.h"
25
#include "ns3/pointer.h"
26
#include "ns3/traced-callback.h"
26
#include "ns3/traced-callback.h"
27
#include "uan-address.h"
27
#include "ns3/mac8-address.h"
28
#include <list>
28
#include <list>
29
29
30
namespace ns3 {
30
namespace ns3 {
 Lines 154-160   public: Link Here 
154
   * \param [in] address The source address.
154
   * \param [in] address The source address.
155
   */
155
   */
156
  typedef void (* RxTxTracedCallback)
156
  typedef void (* RxTxTracedCallback)
157
    (Ptr<const Packet> packet, UanAddress address);
157
    (Ptr<const Packet> packet, Mac8Address address);
158
  
158
  
159
private:
159
private:
160
  /**
160
  /**
 Lines 162-169   private: Link Here 
162
   *
162
   *
163
   * \param pkt The packet.
163
   * \param pkt The packet.
164
   * \param src The source address.
164
   * \param src The source address.
165
   * \param protocolNumber The layer 3 protocol number.
165
   */
166
   */
166
  virtual void ForwardUp (Ptr<Packet> pkt, const UanAddress &src);
167
  virtual void ForwardUp (Ptr<Packet> pkt, uint16_t protocolNumber, const Mac8Address &src);
167
  
168
  
168
  /** \return The channel attached to this device. */
169
  /** \return The channel attached to this device. */
169
  Ptr<UanChannel> DoGetChannel (void) const;
170
  Ptr<UanChannel> DoGetChannel (void) const;
 Lines 182-190   private: Link Here 
182
  ReceiveCallback m_forwardUp;     //!< The receive callback.
183
  ReceiveCallback m_forwardUp;     //!< The receive callback.
183
184
184
  /** Trace source triggered when forwarding up received payload from the MAC layer. */
185
  /** Trace source triggered when forwarding up received payload from the MAC layer. */
185
  TracedCallback<Ptr<const Packet>, UanAddress> m_rxLogger;
186
  TracedCallback<Ptr<const Packet>, Mac8Address> m_rxLogger;
186
  /** Trace source triggered when sending to the MAC layer */
187
  /** Trace source triggered when sending to the MAC layer */
187
  TracedCallback<Ptr<const Packet>, UanAddress> m_txLogger;
188
  TracedCallback<Ptr<const Packet>, Mac8Address> m_txLogger;
188
189
189
  /** Flag when we've been cleared. */
190
  /** Flag when we've been cleared. */
190
  bool m_cleared;
191
  bool m_cleared;
(-)a/src/uan/test/uan-test.cc (-1 / +1 lines)
 Lines 125-131   UanTest::CreateNode (Vector pos, Ptr<UanChannel> chan) Link Here 
125
125
126
  mobility->SetPosition (pos);
126
  mobility->SetPosition (pos);
127
  node->AggregateObject (mobility);
127
  node->AggregateObject (mobility);
128
  mac->SetAddress (UanAddress::Allocate ());
128
  mac->SetAddress (Mac8Address::Allocate ());
129
129
130
  dev->SetPhy (phy);
130
  dev->SetPhy (phy);
131
  dev->SetMac (mac);
131
  dev->SetMac (mac);
(-)a/src/uan/wscript (-2 lines)
 Lines 8-14   def build(bld): Link Here 
8
        'model/uan-mac.cc',
8
        'model/uan-mac.cc',
9
        'model/uan-transducer.cc',
9
        'model/uan-transducer.cc',
10
        'model/uan-transducer-hd.cc',
10
        'model/uan-transducer-hd.cc',
11
        'model/uan-address.cc',
12
        'model/uan-net-device.cc',
11
        'model/uan-net-device.cc',
13
        'model/uan-tx-mode.cc',
12
        'model/uan-tx-mode.cc',
14
        'model/uan-prop-model.cc',
13
        'model/uan-prop-model.cc',
 Lines 46-52   def build(bld): Link Here 
46
        'model/uan-transducer.h',
45
        'model/uan-transducer.h',
47
        'model/uan-phy-gen.h',
46
        'model/uan-phy-gen.h',
48
        'model/uan-transducer-hd.h',
47
        'model/uan-transducer-hd.h',
49
        'model/uan-address.h',
50
        'model/uan-prop-model-ideal.h',
48
        'model/uan-prop-model-ideal.h',
51
        'model/uan-mac-aloha.h',
49
        'model/uan-mac-aloha.h',
52
        'model/uan-header-common.h',
50
        'model/uan-header-common.h',

Return to bug 2413