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

(-)a/src/internet/helper/ipv6-address-helper.cc (-1 / +7 lines)
 Lines 104-112    Link Here 
104
      Ipv6AddressGenerator::AddAllocated (address);
104
      Ipv6AddressGenerator::AddAllocated (address);
105
      return address;
105
      return address;
106
    }
106
    }
107
  else if (Mac8Address::IsMatchingType (addr))
108
    {
109
      Ipv6Address address = Ipv6Address::MakeAutoconfiguredAddress (Mac8Address::ConvertFrom (addr), m_network);
110
      Ipv6AddressGenerator::AddAllocated (address);
111
      return address;
112
    }
107
  else
113
  else
108
    {
114
    {
109
      NS_FATAL_ERROR ("Did not pass in a valid Mac Address (16, 48 or 64 bits)");
115
      NS_FATAL_ERROR ("Did not pass in a valid Mac Address (8, 16, 48 or 64 bits)");
110
    }
116
    }
111
  /* never reached */
117
  /* never reached */
112
  return Ipv6Address ("::");
118
  return Ipv6Address ("::");
(-)a/src/internet/model/arp-header.cc (-1 / +1 lines)
 Lines 136-142    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    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    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    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 164-169    Link Here 
164
  static Ipv6Address MakeAutoconfiguredAddress (Mac64Address addr, Ipv6Address prefix);
165
  static Ipv6Address MakeAutoconfiguredAddress (Mac64Address addr, Ipv6Address prefix);
165
166
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
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).
169
   * \return autoconfigured link-local IPv6 address
178
   * \return autoconfigured link-local IPv6 address
 Lines 185-190    Link Here 
185
  static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac64Address mac);
194
  static Ipv6Address MakeAutoconfiguredLinkLocalAddress (Mac64Address mac);
186
195
187
  /**
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
203
  /**
188
   * \brief Print this address to the given output stream.
204
   * \brief Print this address to the given output stream.
189
   *
205
   *
190
   * The print format is in the typical "2001:660:4701::1".
206
   * The print format is in the typical "2001:660:4701::1".
(-)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    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
  uint8_t x;
132
  uint8_t 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    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    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    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    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    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    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    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    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    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    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    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/test/traced/traced-callback-typedef-test-suite.cc (-1 / +1 lines)
 Lines 635-641    Link Here 
635
         empty, empty, empty);
635
         empty, empty, empty);
636
636
637
  CHECK (UanNetDevice::RxTxTracedCallback,
637
  CHECK (UanNetDevice::RxTxTracedCallback,
638
         Ptr<const Packet>, UanAddress,
638
         Ptr<const Packet>, Mac8Address,
639
         empty, empty, empty);
639
         empty, empty, empty);
640
640
641
  CHECK (UanPhy::TracedCallback,
641
  CHECK (UanPhy::TracedCallback,
(-)a/src/uan/helper/uan-helper.cc (-1 / +1 lines)
 Lines 244-250    Link Here 
244
  Ptr<UanPhy> phy = m_phy.Create<UanPhy> ();
244
  Ptr<UanPhy> phy = m_phy.Create<UanPhy> ();
245
  Ptr<UanTransducer> trans = m_transducer.Create<UanTransducer> ();
245
  Ptr<UanTransducer> trans = m_transducer.Create<UanTransducer> ();
246
246
247
  mac->SetAddress (UanAddress::Allocate ());
247
  mac->SetAddress (Mac8Address::Allocate ());
248
  device->SetMac (mac);
248
  device->SetMac (mac);
249
  device->SetPhy (phy);
249
  device->SetPhy (phy);
250
  device->SetTransducer (trans);
250
  device->SetTransducer (trans);
(-)a/src/uan/model/uan-header-common.cc (-19 / +58 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/mac8-address.h"
23
24
static const uint16_t ARP_PROT_NUMBER = 0x0806;
25
static const uint16_t IPV4_PROT_NUMBER = 0x0800;
26
static const uint16_t IPV6_PROT_NUMBER = 0x86DD;
23
27
24
namespace ns3 {
28
namespace ns3 {
25
29
 Lines 29-41    Link Here 
29
{
33
{
30
}
34
}
31
35
32
UanHeaderCommon::UanHeaderCommon (const UanAddress src, const UanAddress dest, uint8_t type)
36
UanHeaderCommon::UanHeaderCommon (const Mac8Address src, const Mac8Address dest, uint8_t type, uint8_t protocolNumber)
33
  : Header (),
37
  : Header (),
34
    m_dest (dest),
38
  m_dest (dest),
35
    m_src (src),
39
  m_src (src)
36
    m_type (type)
37
{
40
{
38
41
  SetProtocolNumber (protocolNumber);
42
  m_uanProtocolBits.m_type = type;
39
}
43
}
40
44
41
TypeId
45
TypeId
 Lines 60-71    Link Here 
60
64
61
65
62
void
66
void
63
UanHeaderCommon::SetDest (UanAddress dest)
67
UanHeaderCommon::SetDest (Mac8Address dest)
64
{
68
{
65
  m_dest = dest;
69
  m_dest = dest;
66
}
70
}
67
void
71
void
68
UanHeaderCommon::SetSrc (UanAddress src)
72
UanHeaderCommon::SetSrc (Mac8Address src)
69
{
73
{
70
  m_src = src;
74
  m_src = src;
71
}
75
}
 Lines 73-87    Link Here 
73
void
77
void
74
UanHeaderCommon::SetType (uint8_t type)
78
UanHeaderCommon::SetType (uint8_t type)
75
{
79
{
76
  m_type = type;
80
  m_uanProtocolBits.m_type = type;
77
}
81
}
78
82
79
UanAddress
83
void
84
UanHeaderCommon::SetProtocolNumber (uint16_t protocolNumber)
85
{
86
  if (protocolNumber == 0)
87
    m_uanProtocolBits.m_protocolNumber = 0;
88
  else if (protocolNumber == IPV4_PROT_NUMBER)
89
    m_uanProtocolBits.m_protocolNumber = 1;
90
  else if (protocolNumber == ARP_PROT_NUMBER)
91
    m_uanProtocolBits.m_protocolNumber = 2;
92
  else if (protocolNumber == IPV6_PROT_NUMBER)
93
    m_uanProtocolBits.m_protocolNumber = 3;
94
  else
95
    NS_ASSERT_MSG (false, "UanHeaderCommon::SetProtocolNumber(): Protocol not supported");
96
}
97
98
Mac8Address
80
UanHeaderCommon::GetDest (void) const
99
UanHeaderCommon::GetDest (void) const
81
{
100
{
82
  return m_dest;
101
  return m_dest;
83
}
102
}
84
UanAddress
103
Mac8Address
85
UanHeaderCommon::GetSrc (void) const
104
UanHeaderCommon::GetSrc (void) const
86
{
105
{
87
  return m_src;
106
  return m_src;
 Lines 89-95    Link Here 
89
uint8_t
108
uint8_t
90
UanHeaderCommon::GetType (void) const
109
UanHeaderCommon::GetType (void) const
91
{
110
{
92
  return m_type;
111
  return m_uanProtocolBits.m_type;
112
}
113
114
uint16_t
115
UanHeaderCommon::GetProtocolNumber (void) const
116
{
117
  if (m_uanProtocolBits.m_protocolNumber == 1)
118
    return IPV4_PROT_NUMBER;
119
  if (m_uanProtocolBits.m_protocolNumber == 2)
120
    return ARP_PROT_NUMBER;
121
  if (m_uanProtocolBits.m_protocolNumber == 3)
122
    return IPV6_PROT_NUMBER;
123
  return 0;
93
}
124
}
94
125
95
// Inherrited methods
126
// Inherrited methods
 Lines 103-111    Link Here 
103
void
134
void
104
UanHeaderCommon::Serialize (Buffer::Iterator start) const
135
UanHeaderCommon::Serialize (Buffer::Iterator start) const
105
{
136
{
106
  start.WriteU8 (m_src.GetAsInt ());
137
  uint8_t address = 0;
107
  start.WriteU8 (m_dest.GetAsInt ());
138
  m_src.CopyTo (&address);
108
  start.WriteU8 (m_type);
139
  start.WriteU8 (address);
140
  m_dest.CopyTo (&address);
141
  start.WriteU8 (address);
142
  char tmp = m_uanProtocolBits.m_type;
143
  tmp = tmp << 4;
144
  tmp += m_uanProtocolBits.m_protocolNumber;
145
  start.WriteU8 (tmp);
109
}
146
}
110
147
111
uint32_t
148
uint32_t
 Lines 113-121    Link Here 
113
{
150
{
114
  Buffer::Iterator rbuf = start;
151
  Buffer::Iterator rbuf = start;
115
152
116
  m_src = UanAddress (rbuf.ReadU8 ());
153
  m_src = Mac8Address (rbuf.ReadU8 ());
117
  m_dest = UanAddress (rbuf.ReadU8 ());
154
  m_dest = Mac8Address (rbuf.ReadU8 ());
118
  m_type = rbuf.ReadU8 ();
155
  char tmp = rbuf.ReadU8 ();
156
  m_uanProtocolBits.m_type = tmp >> 4;
157
  m_uanProtocolBits.m_protocolNumber = tmp;
119
158
120
  return rbuf.GetDistanceFrom (start);
159
  return rbuf.GetDistanceFrom (start);
121
}
160
}
 Lines 123-129    Link Here 
123
void
162
void
124
UanHeaderCommon::Print (std::ostream &os) const
163
UanHeaderCommon::Print (std::ostream &os) const
125
{
164
{
126
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_type;
165
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_uanProtocolBits.m_type << "Protocol Number=" << (uint32_t) m_uanProtocolBits.m_protocolNumber;
127
}
166
}
128
167
129
168
(-)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    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    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    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    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 "ns3/mac8-address.h"
23
24
24
#include <set>
25
#include <set>
25
26
 Lines 391-402    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    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    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    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    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    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    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    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    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 (-29 / +11 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    Link Here 
77
  return tid;
76
  return tid;
78
}
77
}
79
78
80
Address
79
bool
81
UanMacAloha::GetAddress (void)
80
UanMacAloha::Enqueue (Ptr<Packet> packet, uint16_t protocolNumber, const Address &dest)
82
{
81
{
83
  return m_address;
82
  NS_LOG_DEBUG ("" << Simulator::Now ().GetSeconds () << " MAC " << Mac8Address::ConvertFrom (GetAddress ()) << " Queueing packet for " << Mac8Address::ConvertFrom (dest));
84
}
85
86
void
87
UanMacAloha::SetAddress (UanAddress addr)
88
{
89
  m_address=addr;
90
}
91
bool
92
UanMacAloha::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
93
{
94
  NS_LOG_DEBUG ("" << Simulator::Now ().GetSeconds () << " MAC " << UanAddress::ConvertFrom (GetAddress ()) << " Queueing packet for " << UanAddress::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    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 132-140    Link Here 
132
  pkt->RemoveHeader (header);
121
  pkt->RemoveHeader (header);
133
  NS_LOG_DEBUG ("Receiving packet from " << header.GetSrc () << " For " << header.GetDest ());
122
  NS_LOG_DEBUG ("Receiving packet from " << header.GetSrc () << " For " << header.GetDest ());
134
123
135
  if (header.GetDest () == GetAddress () || header.GetDest () == UanAddress::GetBroadcast ())
124
  if (header.GetDest () == GetAddress () || header.GetDest () == Mac8Address::GetBroadcast ())
136
    {
125
    {
137
      m_forUpCb (pkt, header.GetSrc ());
126
      m_forUpCb (pkt, header.GetProtocolNumber (), header.GetSrc ());
138
    }
127
    }
139
128
140
}
129
}
 Lines 142-155    Link Here 
142
void
131
void
143
UanMacAloha::RxPacketError (Ptr<Packet> pkt, double sinr)
132
UanMacAloha::RxPacketError (Ptr<Packet> pkt, double sinr)
144
{
133
{
145
  NS_LOG_DEBUG ("" << Simulator::Now () << " MAC " << UanAddress::ConvertFrom (GetAddress ()) << " Received packet in error with sinr " << sinr);
134
  NS_LOG_DEBUG ("" << Simulator::Now () << " MAC " << Mac8Address::ConvertFrom (GetAddress ()) << " Received packet in error with sinr " << sinr);
146
}
147
148
Address
149
UanMacAloha::GetBroadcast (void) const
150
{
151
  UanAddress broadcast (255);
152
  return broadcast;
153
}
135
}
154
136
155
int64_t
137
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    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    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    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    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    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    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 347-355    Link Here 
347
  UanHeaderCommon header;
328
  UanHeaderCommon header;
348
  packet->RemoveHeader (header);
329
  packet->RemoveHeader (header);
349
330
350
  if (header.GetDest () == m_address || header.GetDest () == UanAddress::GetBroadcast ())
331
  if (header.GetDest () == m_address || header.GetDest () == Mac8Address::GetBroadcast ())
351
    {
332
    {
352
      m_forwardUpCb (packet, header.GetSrc ());
333
      m_forwardUpCb (packet, header.GetProtocolNumber (), header.GetSrc ());
353
    }
334
    }
354
}
335
}
355
void
336
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    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    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    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-189    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_UNUSED (dest);
176
  NS_UNUSED (dest);
189
  NS_UNUSED (protocolNumber);
177
  NS_UNUSED (protocolNumber);
 Lines 192-198    Link Here 
192
}
180
}
193
181
194
void
182
void
195
UanMacRcGw::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb)
183
UanMacRcGw::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb)
196
{
184
{
197
  m_forwardUpCb = cb;
185
  m_forwardUpCb = cb;
198
}
186
}
 Lines 211-222    Link Here 
211
  NS_UNUSED (sinr);
199
  NS_UNUSED (sinr);
212
}
200
}
213
201
214
Address
215
UanMacRcGw::GetBroadcast (void) const
216
{
217
  return UanAddress::GetBroadcast ();
218
}
219
220
void
202
void
221
UanMacRcGw::ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode)
203
UanMacRcGw::ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode)
222
{
204
{
 Lines 224-230    Link Here 
224
  UanHeaderCommon ch;
206
  UanHeaderCommon ch;
225
  pkt->PeekHeader (ch);
207
  pkt->PeekHeader (ch);
226
208
227
  if (ch.GetDest () == m_address || ch.GetDest () == UanAddress::GetBroadcast ())
209
  if (ch.GetDest () == m_address || ch.GetDest () == Mac8Address::GetBroadcast ())
228
    {
210
    {
229
      m_rxLogger (pkt, mode);
211
      m_rxLogger (pkt, mode);
230
    }
212
    }
 Lines 251-257    Link Here 
251
            NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW Received data packet from " << ch.GetSrc () << " length = " << pkt->GetSize ());
233
            NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW Received data packet from " << ch.GetSrc () << " length = " << pkt->GetSize ());
252
            m_ackData[ch.GetSrc ()].rxFrames.insert (dh.GetFrameNo ());
234
            m_ackData[ch.GetSrc ()].rxFrames.insert (dh.GetFrameNo ());
253
          }
235
          }
254
        m_forwardUpCb (pkt, ch.GetSrc ());
236
        m_forwardUpCb (pkt, ch.GetProtocolNumber (), ch.GetSrc ());
255
      }
237
      }
256
      break;
238
      break;
257
    case UanMacRc::TYPE_GWPING:
239
    case UanMacRc::TYPE_GWPING:
 Lines 275-281    Link Here 
275
            req.length = rh.GetLength ();
257
            req.length = rh.GetLength ();
276
            NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW storing reservation from " << ch.GetSrc () << " with length " << req.length);
258
            NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " GW storing reservation from " << ch.GetSrc () << " with length " << req.length);
277
            m_requests.insert (std::make_pair (ch.GetSrc (), req));
259
            m_requests.insert (std::make_pair (ch.GetSrc (), req));
278
            std::map<UanAddress, Time>::iterator it = m_propDelay.find (ch.GetSrc ());
260
            std::map<Mac8Address, Time>::iterator it = m_propDelay.find (ch.GetSrc ());
279
            if (it == m_propDelay.end ())
261
            if (it == m_propDelay.end ())
280
              {
262
              {
281
                m_sortedRes.insert (std::make_pair (m_maxDelta, ch.GetSrc ()));
263
                m_sortedRes.insert (std::make_pair (m_maxDelta, ch.GetSrc ()));
 Lines 322-328    Link Here 
322
  double pDelay = 0;
304
  double pDelay = 0;
323
  if (numRts > 0)
305
  if (numRts > 0)
324
    {
306
    {
325
      std::map<UanAddress, Request>::iterator rit = m_requests.begin ();
307
      std::map<Mac8Address, Request>::iterator rit = m_requests.begin ();
326
      for (; rit != m_requests.end (); rit++)
308
      for (; rit != m_requests.end (); rit++)
327
        {
309
        {
328
          totalBytes += (*rit).second.length;
310
          totalBytes += (*rit).second.length;
 Lines 392-398    Link Here 
392
      ctsg.SetRetryRate (m_currentRetryRate);
374
      ctsg.SetRetryRate (m_currentRetryRate);
393
      ctsg.SetTxTimeStamp (Simulator::Now ());
375
      ctsg.SetTxTimeStamp (Simulator::Now ());
394
376
395
      UanHeaderCommon ch (m_address, UanAddress::GetBroadcast (), UanMacRc::TYPE_CTS);
377
      UanHeaderCommon ch (m_address, Mac8Address::GetBroadcast (), UanMacRc::TYPE_CTS, 0);
396
      Ptr<Packet> p = Create<Packet> ();
378
      Ptr<Packet> p = Create<Packet> ();
397
      p->AddHeader (ctsg);
379
      p->AddHeader (ctsg);
398
      p->AddHeader (ch);
380
      p->AddHeader (ch);
 Lines 410-416    Link Here 
410
  m_state = CTSING;
392
  m_state = CTSING;
411
  Simulator::Schedule (nextEarliest, &UanMacRcGw::CycleStarted, this);
393
  Simulator::Schedule (nextEarliest, &UanMacRcGw::CycleStarted, this);
412
394
413
  std::set<std::pair<Time, UanAddress> >::iterator it = m_sortedRes.begin ();
395
  std::set<std::pair<Time, Mac8Address> >::iterator it = m_sortedRes.begin ();
414
  Time minPdelay = (*it).first;
396
  Time minPdelay = (*it).first;
415
  Ptr<Packet> cts = Create<Packet> ();
397
  Ptr<Packet> cts = Create<Packet> ();
416
398
 Lines 422-428    Link Here 
422
      AckData newData;
404
      AckData newData;
423
      newData.expFrames = req.numFrames;
405
      newData.expFrames = req.numFrames;
424
      newData.frameNo = req.frameNo;
406
      newData.frameNo = req.frameNo;
425
      UanAddress dest = (*it).second;
407
      Mac8Address dest = (*it).second;
426
      m_ackData.insert (std::make_pair (dest, newData));
408
      m_ackData.insert (std::make_pair (dest, newData));
427
409
428
      Time earliestArr = ctsTxTimeTotal + pdelay + pdelay + m_sifs;
410
      Time earliestArr = ctsTxTimeTotal + pdelay + pdelay + m_sifs;
 Lines 449-455    Link Here 
449
  ctsg.SetWindowTime (Seconds (effWinSize));
431
  ctsg.SetWindowTime (Seconds (effWinSize));
450
  ctsg.SetTxTimeStamp (Simulator::Now ());
432
  ctsg.SetTxTimeStamp (Simulator::Now ());
451
  UanHeaderCommon ch;
433
  UanHeaderCommon ch;
452
  ch.SetDest (UanAddress::GetBroadcast ());
434
  ch.SetDest (Mac8Address::GetBroadcast ());
453
  ch.SetSrc (m_address);
435
  ch.SetSrc (m_address);
454
  ch.SetType (UanMacRc::TYPE_CTS);
436
  ch.SetType (UanMacRc::TYPE_CTS);
455
  cts->AddHeader (ctsg);
437
  cts->AddHeader (ctsg);
 Lines 479-488    Link Here 
479
461
480
  Time ackTime = Seconds (m_ackSize * 8.0 / m_phy->GetMode (m_currentRateNum).GetDataRateBps ());
462
  Time ackTime = Seconds (m_ackSize * 8.0 / m_phy->GetMode (m_currentRateNum).GetDataRateBps ());
481
463
482
  std::map<UanAddress, AckData>::iterator it = m_ackData.begin ();
464
  std::map<Mac8Address, AckData>::iterator it = m_ackData.begin ();
483
  for (; it != m_ackData.end (); it++)
465
  for (; it != m_ackData.end (); it++)
484
    {
466
    {
485
      UanAddress dest = (*it).first;
467
      Mac8Address dest = (*it).first;
486
      AckData &data = (*it).second;
468
      AckData &data = (*it).second;
487
469
488
      std::list<uint32_t> toNack;
470
      std::list<uint32_t> toNack;
 Lines 583-589    Link Here 
583
{
565
{
584
  uint32_t n = m_numNodes;
566
  uint32_t n = m_numNodes;
585
  std::vector<double> pds;
567
  std::vector<double> pds;
586
  std::map<UanAddress, Time>::iterator pdit = m_propDelay.begin ();
568
  std::map<Mac8Address, Time>::iterator pdit = m_propDelay.begin ();
587
569
588
  for (; pdit != m_propDelay.end (); pdit++)
570
  for (; pdit != m_propDelay.end (); pdit++)
589
    {
571
    {
(-)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    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    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    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    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    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    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 187-193    Link Here 
187
      m_phy->Clear ();
187
      m_phy->Clear ();
188
      m_phy = 0;
188
      m_phy = 0;
189
    }
189
    }
190
  std::list<std::pair <Ptr<Packet>, UanAddress > >::iterator it;
190
  std::list<std::pair <Ptr<Packet>, Mac8Address > >::iterator it;
191
  for (it = m_pktQueue.begin (); it != m_pktQueue.end (); it++)
191
  for (it = m_pktQueue.begin (); it != m_pktQueue.end (); it++)
192
    {
192
    {
193
      it->first = 0;
193
      it->first = 0;
 Lines 276-295    Link Here 
276
  return 1;
276
  return 1;
277
}
277
}
278
278
279
Address
280
UanMacRc::GetAddress (void)
281
{
282
  return m_address;
283
}
284
285
void
286
UanMacRc::SetAddress (UanAddress addr)
287
{
288
  m_address = addr;
289
}
290
291
bool
279
bool
292
UanMacRc::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
280
UanMacRc::Enqueue (Ptr<Packet> packet, uint16_t protocolNumber, const Address &dest)
293
{
281
{
294
  if (protocolNumber > 0)
282
  if (protocolNumber > 0)
295
    {
283
    {
 Lines 302-308    Link Here 
302
      return false;
290
      return false;
303
    }
291
    }
304
292
305
  m_pktQueue.push_back (std::make_pair (packet, UanAddress::ConvertFrom (dest)));
293
  m_pktQueue.push_back (std::make_pair (packet, Mac8Address::ConvertFrom (dest)));
306
294
307
  switch (m_state)
295
  switch (m_state)
308
    {
296
    {
 Lines 325-331    Link Here 
325
}
313
}
326
314
327
void
315
void
328
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb)
316
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const Mac8Address&> cb)
329
{
317
{
330
  m_forwardUpCb = cb;
318
  m_forwardUpCb = cb;
331
}
319
}
 Lines 337-355    Link Here 
337
  m_phy->SetReceiveOkCallback (MakeCallback (&UanMacRc::ReceiveOkFromPhy, this));
325
  m_phy->SetReceiveOkCallback (MakeCallback (&UanMacRc::ReceiveOkFromPhy, this));
338
}
326
}
339
327
340
Address
341
UanMacRc::GetBroadcast (void) const
342
{
343
  return UanAddress::GetBroadcast ();
344
}
345
346
void
328
void
347
UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode)
329
UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode)
348
{
330
{
349
  NS_UNUSED (sinr);
331
  NS_UNUSED (sinr);
350
  UanHeaderCommon ch;
332
  UanHeaderCommon ch;
351
  pkt->RemoveHeader (ch);
333
  pkt->RemoveHeader (ch);
352
  if (ch.GetDest () == m_address || ch.GetDest () == UanAddress::GetBroadcast ())
334
  if (ch.GetDest () == m_address || ch.GetDest () == Mac8Address::GetBroadcast ())
353
    {
335
    {
354
      m_rxLogger (pkt, mode);
336
      m_rxLogger (pkt, mode);
355
    }
337
    }
 Lines 363-369    Link Here 
363
          NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Node " << m_address << " UanMacRc Receiving DATA packet from PHY");
345
          NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Node " << m_address << " UanMacRc Receiving DATA packet from PHY");
364
          UanHeaderRcData dh;
346
          UanHeaderRcData dh;
365
          pkt->RemoveHeader (dh);
347
          pkt->RemoveHeader (dh);
366
          m_forwardUpCb (pkt, ch.GetSrc ());
348
          m_forwardUpCb (pkt, ch.GetProtocolNumber (), ch.GetSrc ());
367
        }
349
        }
368
      break;
350
      break;
369
    case TYPE_RTS:
351
    case TYPE_RTS:
 Lines 394-400    Link Here 
394
          }
376
          }
395
377
396
        UanHeaderRcCts ctsh;
378
        UanHeaderRcCts ctsh;
397
        ctsh.SetAddress (UanAddress::GetBroadcast ());
379
        ctsh.SetAddress (Mac8Address::GetBroadcast ());
398
        while (pkt->GetSize () > 0)
380
        while (pkt->GetSize () > 0)
399
          {
381
          {
400
            pkt->RemoveHeader (ctsh);
382
            pkt->RemoveHeader (ctsh);
 Lines 469-476    Link Here 
469
451
470
  Time frameDelay = Seconds (0);
452
  Time frameDelay = Seconds (0);
471
453
472
  const std::list<std::pair <Ptr<Packet>, UanAddress > > l = it->GetPktList ();
454
  const std::list<std::pair <Ptr<Packet>, Mac8Address > > l = it->GetPktList ();
473
  std::list<std::pair <Ptr<Packet>, UanAddress > >::const_iterator pit;
455
  std::list<std::pair <Ptr<Packet>, Mac8Address > >::const_iterator pit;
474
  pit = l.begin ();
456
  pit = l.begin ();
475
457
476
458
 Lines 580-587    Link Here 
580
    }
562
    }
581
  if (ah.GetNoNacks () > 0)
563
  if (ah.GetNoNacks () > 0)
582
    {
564
    {
583
      const std::list<std::pair <Ptr<Packet>, UanAddress > > l = it->GetPktList ();
565
      const std::list<std::pair <Ptr<Packet>, Mac8Address > > l = it->GetPktList ();
584
      std::list<std::pair <Ptr<Packet>, UanAddress > >::const_iterator pit;
566
      std::list<std::pair <Ptr<Packet>, Mac8Address > >::const_iterator pit;
585
      pit = l.begin ();
567
      pit = l.begin ();
586
568
587
      const std::set<uint8_t> &nacks = ah.GetNackedFrames ();
569
      const std::set<uint8_t> &nacks = ah.GetNackedFrames ();
 Lines 635-641    Link Here 
635
    {
617
    {
636
      Ptr<Packet> pkt = Create<Packet> (0);
618
      Ptr<Packet> pkt = Create<Packet> (0);
637
      pkt->AddHeader (CreateRtsHeader (res));
619
      pkt->AddHeader (CreateRtsHeader (res));
638
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING));
620
      pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), static_cast<uint8_t>(TYPE_GWPING), 0));
639
      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt);
621
      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt);
640
      SendPacket (pkt,m_currentRate + m_numRates);
622
      SendPacket (pkt,m_currentRate + m_numRates);
641
    }
623
    }
 Lines 666-672    Link Here 
666
      res.IncrementRetry ();
648
      res.IncrementRetry ();
667
649
668
      pkt->AddHeader (CreateRtsHeader (res));
650
      pkt->AddHeader (CreateRtsHeader (res));
669
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING));
651
      pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), static_cast<uint8_t> (TYPE_GWPING), 0));
670
652
671
      SendPacket (pkt,m_currentRate + m_numRates);
653
      SendPacket (pkt,m_currentRate + m_numRates);
672
      m_resList.push_back (res);
654
      m_resList.push_back (res);
 Lines 699-705    Link Here 
699
    {
681
    {
700
      Ptr<Packet> pkt = Create<Packet> (0);
682
      Ptr<Packet> pkt = Create<Packet> (0);
701
      pkt->AddHeader (CreateRtsHeader (res));
683
      pkt->AddHeader (CreateRtsHeader (res));
702
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS));
684
      pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), static_cast<uint8_t> (TYPE_RTS), 0));
703
      SendPacket (pkt,m_currentRate + m_numRates);
685
      SendPacket (pkt,m_currentRate + m_numRates);
704
    }
686
    }
705
  m_state = RTSSENT;
687
  m_state = RTSSENT;
 Lines 762-768    Link Here 
762
      res.IncrementRetry ();
744
      res.IncrementRetry ();
763
      m_resList.push_back (res);
745
      m_resList.push_back (res);
764
      pkt->AddHeader (CreateRtsHeader (res));
746
      pkt->AddHeader (CreateRtsHeader (res));
765
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS));
747
      pkt->AddHeader (UanHeaderCommon (m_address, Mac8Address::GetBroadcast (), static_cast<uint8_t> (TYPE_RTS), 0));
766
      SendPacket (pkt,m_currentRate + m_numRates);
748
      SendPacket (pkt,m_currentRate + m_numRates);
767
749
768
    }
750
    }
(-)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    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    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    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    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    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    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    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    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    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    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    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    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    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    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 / +22 lines)
 Lines 271-291    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_UNUSED (multicastGroup);
280
  NS_UNUSED (multicastGroup);
281
  NS_FATAL_ERROR ("UanNetDevice does not support multicast");
282
  return m_mac->GetBroadcast ();
281
  return m_mac->GetBroadcast ();
283
}
282
}
284
283
285
Address
284
Address
286
UanNetDevice::GetMulticast (Ipv6Address addr) const
285
UanNetDevice::GetMulticast (Ipv6Address addr) const
287
{
286
{
288
  NS_FATAL_ERROR ("UanNetDevice does not support multicast");
289
  return m_mac->GetBroadcast ();
287
  return m_mac->GetBroadcast ();
290
}
288
}
291
289
 Lines 303-309    Link Here 
303
bool
301
bool
304
UanNetDevice::Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
302
UanNetDevice::Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
305
{
303
{
306
  return m_mac->Enqueue (packet, dest, protocolNumber);
304
  uint8_t tmp [6];
305
  dest.CopyTo (tmp);
306
  Mac8Address udest (tmp[0]);
307
308
  return m_mac->Enqueue (packet, protocolNumber, udest);
307
}
309
}
308
310
309
bool
311
bool
 Lines 331-337    Link Here 
331
bool
333
bool
332
UanNetDevice::NeedsArp () const
334
UanNetDevice::NeedsArp () const
333
{
335
{
334
  return false;
336
  return true;
335
}
337
}
336
338
337
void
339
void
 Lines 341-351    Link Here 
341
}
343
}
342
344
343
void
345
void
344
UanNetDevice::ForwardUp (Ptr<Packet> pkt, const UanAddress &src)
346
UanNetDevice::ForwardUp (Ptr<Packet> pkt, uint16_t protocolNumber, const Mac8Address &src)
345
{
347
{
346
  NS_LOG_DEBUG ("Forwarding packet up to application");
348
  NS_LOG_DEBUG ("Forwarding packet up to application");
347
  m_rxLogger (pkt, src);
349
  m_rxLogger (pkt, src);
348
  m_forwardUp (this, pkt, 0, src);
350
  m_forwardUp (this, pkt, protocolNumber, src);
349
351
350
}
352
}
351
353
 Lines 402-408    Link Here 
402
UanNetDevice::SetAddress (Address address)
404
UanNetDevice::SetAddress (Address address)
403
{
405
{
404
  NS_ASSERT_MSG (0, "Tried to set MAC address with no MAC");
406
  NS_ASSERT_MSG (0, "Tried to set MAC address with no MAC");
405
  m_mac->SetAddress (UanAddress::ConvertFrom (address));
407
  m_mac->SetAddress (Mac8Address::ConvertFrom (address));
406
}
408
}
407
409
408
void
410
void
 Lines 411-415    Link Here 
411
  m_phy->SetSleepMode (sleep);
413
  m_phy->SetSleepMode (sleep);
412
}
414
}
413
415
416
void
417
UanNetDevice::SetTxModeIndex (uint32_t txModeIndex)
418
{
419
  m_mac->SetTxModeIndex (txModeIndex);
420
}
421
422
uint32_t
423
UanNetDevice::GetTxModeIndex ()
424
{
425
  return m_mac->GetTxModeIndex ();
426
}
427
414
} // namespace ns3
428
} // namespace ns3
415
429
(-)a/src/uan/model/uan-net-device.h (-5 / +8 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 146-151    Link Here 
146
  virtual bool SupportsSendFrom (void) const;
146
  virtual bool SupportsSendFrom (void) const;
147
  virtual void AddLinkChangeCallback (Callback<void> callback);
147
  virtual void AddLinkChangeCallback (Callback<void> callback);
148
  virtual void SetAddress (Address address);
148
  virtual void SetAddress (Address address);
149
  uint32_t GetTxModeIndex ();
150
  void SetTxModeIndex (uint32_t txModeIndex);
149
151
150
  /**
152
  /**
151
   * TracedCallback signature for MAC send/receive events.
153
   * TracedCallback signature for MAC send/receive events.
 Lines 154-160    Link Here 
154
   * \param [in] address The source address.
156
   * \param [in] address The source address.
155
   */
157
   */
156
  typedef void (* RxTxTracedCallback)
158
  typedef void (* RxTxTracedCallback)
157
    (Ptr<const Packet> packet, UanAddress address);
159
    (Ptr<const Packet> packet, Mac8Address address);
158
  
160
  
159
private:
161
private:
160
  /**
162
  /**
 Lines 162-169    Link Here 
162
   *
164
   *
163
   * \param pkt The packet.
165
   * \param pkt The packet.
164
   * \param src The source address.
166
   * \param src The source address.
167
   * \param protocolNumber The layer 3 protocol number.
165
   */
168
   */
166
  virtual void ForwardUp (Ptr<Packet> pkt, const UanAddress &src);
169
  virtual void ForwardUp (Ptr<Packet> pkt, uint16_t protocolNumber, const Mac8Address &src);
167
  
170
  
168
  /** \return The channel attached to this device. */
171
  /** \return The channel attached to this device. */
169
  Ptr<UanChannel> DoGetChannel (void) const;
172
  Ptr<UanChannel> DoGetChannel (void) const;
 Lines 182-190    Link Here 
182
  ReceiveCallback m_forwardUp;     //!< The receive callback.
185
  ReceiveCallback m_forwardUp;     //!< The receive callback.
183
186
184
  /** Trace source triggered when forwarding up received payload from the MAC layer. */
187
  /** Trace source triggered when forwarding up received payload from the MAC layer. */
185
  TracedCallback<Ptr<const Packet>, UanAddress> m_rxLogger;
188
  TracedCallback<Ptr<const Packet>, Mac8Address> m_rxLogger;
186
  /** Trace source triggered when sending to the MAC layer */
189
  /** Trace source triggered when sending to the MAC layer */
187
  TracedCallback<Ptr<const Packet>, UanAddress> m_txLogger;
190
  TracedCallback<Ptr<const Packet>, Mac8Address> m_txLogger;
188
191
189
  /** Flag when we've been cleared. */
192
  /** Flag when we've been cleared. */
190
  bool m_cleared;
193
  bool m_cleared;
(-)a/src/uan/test/uan-test.cc (-2 / +3 lines)
 Lines 109-115    Link Here 
109
UanTest::SendOnePacket (Ptr<UanNetDevice> dev, uint16_t mode)
109
UanTest::SendOnePacket (Ptr<UanNetDevice> dev, uint16_t mode)
110
{
110
{
111
  Ptr<Packet> pkt = Create<Packet> (17);
111
  Ptr<Packet> pkt = Create<Packet> (17);
112
  dev->Send (pkt, dev->GetBroadcast (), mode);
112
  dev->SetTxModeIndex (mode);
113
  dev->Send (pkt, dev->GetBroadcast (), 0);
113
114
114
}
115
}
115
Ptr<UanNetDevice>
116
Ptr<UanNetDevice>
 Lines 127-133    Link Here 
127
128
128
  mobility->SetPosition (pos);
129
  mobility->SetPosition (pos);
129
  node->AggregateObject (mobility);
130
  node->AggregateObject (mobility);
130
  mac->SetAddress (UanAddress::Allocate ());
131
  mac->SetAddress (Mac8Address::Allocate ());
131
132
132
  dev->SetPhy (phy);
133
  dev->SetPhy (phy);
133
  dev->SetMac (mac);
134
  dev->SetMac (mac);
(-)a/src/uan/wscript (-2 lines)
 Lines 8-14    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    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