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

(-)a/src/uan/model/uan-address.cc (+13 lines)
 Lines 20-25    Link Here 
20
20
21
#include "uan-address.h"
21
#include "uan-address.h"
22
#include "ns3/address.h"
22
#include "ns3/address.h"
23
#include "ns3/mac48-address.h"
23
24
24
namespace ns3 {
25
namespace ns3 {
25
26
 Lines 64-69   UanAddress::GetAsInt (void) const Link Here 
64
{
65
{
65
  return m_address;
66
  return m_address;
66
}
67
}
68
69
Mac48Address
70
UanAddress::GetAsMacAddress () const
71
{
72
  uint8_t address [6];
73
  address[0] = address[1] = address[2] = address[3] = address[4] = 0;
74
  address[5] = m_address;
75
  Mac48Address mac;
76
  mac.CopyFrom (address);
77
  return mac;
78
}
79
67
bool
80
bool
68
UanAddress::IsMatchingType (const Address &address)
81
UanAddress::IsMatchingType (const Address &address)
69
{
82
{
(-)a/src/uan/model/uan-address.h (+8 lines)
 Lines 22-27    Link Here 
22
#define UAN_ADDRESS_H
22
#define UAN_ADDRESS_H
23
23
24
#include "ns3/address.h"
24
#include "ns3/address.h"
25
#include "ns3/mac48-address.h"
25
#include <iostream>
26
#include <iostream>
26
27
27
namespace ns3 {
28
namespace ns3 {
 Lines 94-99   public: Link Here 
94
   * \return 8 bit integer version of address.
95
   * \return 8 bit integer version of address.
95
   */
96
   */
96
  uint8_t GetAsInt (void) const;
97
  uint8_t GetAsInt (void) const;
98
  
99
  /**
100
   * Convert to MAC Address.
101
   *
102
   * \return 48 bit MAC Address.
103
   */
104
  Mac48Address GetAsMacAddress (void) const;
97
105
98
  /**
106
  /**
99
   * Get the broadcast address (255).
107
   * Get the broadcast address (255).
(-)a/src/uan/model/uan-header-common.cc (-11 / +11 lines)
 Lines 29-39   UanHeaderCommon::UanHeaderCommon () Link Here 
29
{
29
{
30
}
30
}
31
31
32
UanHeaderCommon::UanHeaderCommon (const UanAddress src, const UanAddress dest, uint8_t type)
32
UanHeaderCommon::UanHeaderCommon (const UanAddress src, const UanAddress dest, uint16_t packetType)
33
  : Header (),
33
  : Header (),
34
    m_dest (dest),
34
    m_dest (dest),
35
    m_src (src),
35
    m_src (src),
36
    m_type (type)
36
    m_packetType (packetType)
37
{
37
{
38
38
39
}
39
}
 Lines 71-79   UanHeaderCommon::SetSrc (UanAddress src) Link Here 
71
}
71
}
72
72
73
void
73
void
74
UanHeaderCommon::SetType (uint8_t type)
74
UanHeaderCommon::SetPacketType (uint16_t packetType)
75
{
75
{
76
  m_type = type;
76
  m_packetType = packetType;
77
}
77
}
78
78
79
UanAddress
79
UanAddress
 Lines 86-95   UanHeaderCommon::GetSrc (void) const Link Here 
86
{
86
{
87
  return m_src;
87
  return m_src;
88
}
88
}
89
uint8_t
89
uint16_t
90
UanHeaderCommon::GetType (void) const
90
UanHeaderCommon::GetPacketType (void) const
91
{
91
{
92
  return m_type;
92
  return m_packetType;
93
}
93
}
94
94
95
// Inherrited methods
95
// Inherrited methods
 Lines 97-103   UanHeaderCommon::GetType (void) const Link Here 
97
uint32_t
97
uint32_t
98
UanHeaderCommon::GetSerializedSize (void) const
98
UanHeaderCommon::GetSerializedSize (void) const
99
{
99
{
100
  return 1 + 1 + 1;
100
  return 1 + 1 + 2;
101
}
101
}
102
102
103
void
103
void
 Lines 105-111   UanHeaderCommon::Serialize (Buffer::Iterator start) const Link Here 
105
{
105
{
106
  start.WriteU8 (m_src.GetAsInt ());
106
  start.WriteU8 (m_src.GetAsInt ());
107
  start.WriteU8 (m_dest.GetAsInt ());
107
  start.WriteU8 (m_dest.GetAsInt ());
108
  start.WriteU8 (m_type);
108
  start.WriteU16 (m_packetType);
109
}
109
}
110
110
111
uint32_t
111
uint32_t
 Lines 115-121   UanHeaderCommon::Deserialize (Buffer::Iterator start) Link Here 
115
115
116
  m_src = UanAddress (rbuf.ReadU8 ());
116
  m_src = UanAddress (rbuf.ReadU8 ());
117
  m_dest = UanAddress (rbuf.ReadU8 ());
117
  m_dest = UanAddress (rbuf.ReadU8 ());
118
  m_type = rbuf.ReadU8 ();
118
  m_packetType = rbuf.ReadU16 ();
119
119
120
  return rbuf.GetDistanceFrom (start);
120
  return rbuf.GetDistanceFrom (start);
121
}
121
}
 Lines 123-129   UanHeaderCommon::Deserialize (Buffer::Iterator start) Link Here 
123
void
123
void
124
UanHeaderCommon::Print (std::ostream &os) const
124
UanHeaderCommon::Print (std::ostream &os) const
125
{
125
{
126
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_type;
126
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_packetType;
127
}
127
}
128
128
129
129
(-)a/src/uan/model/uan-header-common.h (-11 / +12 lines)
 Lines 34-42   namespace ns3 { Link Here 
34
 * Common packet header fields.
34
 * Common packet header fields.
35
 *
35
 *
36
 * Includes 1 byte src address, 1 byte dest address,
36
 * Includes 1 byte src address, 1 byte dest address,
37
 * and a 1 byte type field.
37
 * and a 2 bytes packetType field.
38
 *
38
 *
39
 * The type field is protocol specific; see the relevant MAC protocol.
39
 * The packetType field is protocol specific; see the relevant MAC protocol.
40
 */
40
 */
41
class UanHeaderCommon : public Header
41
class UanHeaderCommon : public Header
42
{
42
{
 Lines 49-57   public: Link Here 
49
   *
49
   *
50
   * \param src Source address defined in header.
50
   * \param src Source address defined in header.
51
   * \param dest Destination address defined in header.
51
   * \param dest Destination address defined in header.
52
   * \param type Header type.
52
   * \param packetType The type of the packet.
53
   */
53
   */
54
  UanHeaderCommon (const UanAddress src, const UanAddress dest, uint8_t type);
54
  UanHeaderCommon (const UanAddress src, const UanAddress dest, uint16_t packetType);
55
  /** Destructor */
55
  /** Destructor */
56
  virtual ~UanHeaderCommon ();
56
  virtual ~UanHeaderCommon ();
57
57
 Lines 74-85   public: Link Here 
74
   */
74
   */
75
  void SetSrc (UanAddress src);
75
  void SetSrc (UanAddress src);
76
  /**
76
  /**
77
   * Set the header type.
77
   * Set the type of packet.
78
   *
78
   *
79
   * Use of this value is protocol specific.
79
   * Use of this value is protocol specific.
80
   * \param type The type value.
80
   * \param packetType The type of packet.
81
   */
81
   */
82
  void SetType (uint8_t type);
82
  void SetPacketType (uint16_t packetType);
83
83
84
  /**
84
  /**
85
   * Get the destination address.
85
   * Get the destination address.
 Lines 94-104   public: Link Here 
94
   */
94
   */
95
  UanAddress GetSrc (void) const;
95
  UanAddress GetSrc (void) const;
96
  /**
96
  /**
97
   * Get the header type value.
97
   * Get the type of packet.
98
   *
98
   *
99
   * \return value of type field.
99
   * Use of this value is protocol specific.
100
   * \return The type of packet.
100
   */
101
   */
101
  uint8_t GetType (void) const;
102
  uint16_t GetPacketType (void) const;
102
103
103
104
104
  // Inherited methods
105
  // Inherited methods
 Lines 110-116   public: Link Here 
110
private:
111
private:
111
  UanAddress m_dest;  //!< The destination address.
112
  UanAddress m_dest;  //!< The destination address.
112
  UanAddress m_src;   //!< The source address.
113
  UanAddress m_src;   //!< The source address.
113
  uint8_t m_type;     //!< The type field.
114
  uint16_t m_packetType;     //!< The type field.
114
115
115
};  // class UanHeaderCommon
116
};  // class UanHeaderCommon
116
117
(-)a/src/uan/model/uan-mac-aloha.cc (-6 / +5 lines)
 Lines 89-95   UanMacAloha::SetAddress (UanAddress addr) Link Here 
89
  m_address=addr;
89
  m_address=addr;
90
}
90
}
91
bool
91
bool
92
UanMacAloha::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
92
UanMacAloha::Enqueue (Ptr<Packet> packet, uint16_t packetType, const Address &dest)
93
{
93
{
94
  NS_LOG_DEBUG ("" << Simulator::Now ().GetSeconds () << " MAC " << UanAddress::ConvertFrom (GetAddress ()) << " Queueing packet for " << UanAddress::ConvertFrom (dest));
94
  NS_LOG_DEBUG ("" << Simulator::Now ().GetSeconds () << " MAC " << UanAddress::ConvertFrom (GetAddress ()) << " Queueing packet for " << UanAddress::ConvertFrom (dest));
95
95
 Lines 101-110   UanMacAloha::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocol Link Here 
101
      UanHeaderCommon header;
101
      UanHeaderCommon header;
102
      header.SetSrc (src);
102
      header.SetSrc (src);
103
      header.SetDest (udest);
103
      header.SetDest (udest);
104
      header.SetType (0);
104
      header.SetPacketType (packetType);
105
106
      packet->AddHeader (header);
105
      packet->AddHeader (header);
107
      m_phy->SendPacket (packet, protocolNumber);
106
      m_phy->SendPacket (packet, GetModeNum ());
108
      return true;
107
      return true;
109
    }
108
    }
110
  else
109
  else
 Lines 112-118   UanMacAloha::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocol Link Here 
112
}
111
}
113
112
114
void
113
void
115
UanMacAloha::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress& > cb)
114
UanMacAloha::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb)
116
{
115
{
117
  m_forUpCb = cb;
116
  m_forUpCb = cb;
118
}
117
}
 Lines 133-139   UanMacAloha::RxPacketGood (Ptr<Packet> pkt, double sinr, UanTxMode txMode) Link Here 
133
132
134
  if (header.GetDest () == GetAddress () || header.GetDest () == UanAddress::GetBroadcast ())
133
  if (header.GetDest () == GetAddress () || header.GetDest () == UanAddress::GetBroadcast ())
135
    {
134
    {
136
      m_forUpCb (pkt, header.GetSrc ());
135
      m_forUpCb (pkt, header.GetPacketType (), header.GetSrc ());
137
    }
136
    }
138
137
139
}
138
}
(-)a/src/uan/model/uan-mac-aloha.h (-3 / +3 lines)
 Lines 57-64   public: Link Here 
57
  // Inherited methods
57
  // Inherited methods
58
  Address GetAddress (void);
58
  Address GetAddress (void);
59
  virtual void SetAddress (UanAddress addr);
59
  virtual void SetAddress (UanAddress addr);
60
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
60
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t packetType, const Address &dest);
61
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress& > cb);
61
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb);
62
  virtual void AttachPhy (Ptr<UanPhy> phy);
62
  virtual void AttachPhy (Ptr<UanPhy> phy);
63
  virtual Address GetBroadcast (void) const;
63
  virtual Address GetBroadcast (void) const;
64
  virtual void Clear (void);
64
  virtual void Clear (void);
 Lines 70-76   private: Link Here 
70
  /** PHY layer attached to this MAC. */
70
  /** PHY layer attached to this MAC. */
71
  Ptr<UanPhy> m_phy;
71
  Ptr<UanPhy> m_phy;
72
  /** Forwarding up callback. */
72
  /** Forwarding up callback. */
73
  Callback<void, Ptr<Packet>, const UanAddress& > m_forUpCb;
73
  Callback<void, Ptr<Packet>, uint16_t, const UanAddress& > m_forUpCb;
74
  /** Flag when we've been cleared. */
74
  /** Flag when we've been cleared. */
75
  bool m_cleared;
75
  bool m_cleared;
76
76
(-)a/src/uan/model/uan-mac-cw.cc (-7 / +7 lines)
 Lines 120-126   UanMacCw::SetAddress (UanAddress addr) Link Here 
120
}
120
}
121
121
122
bool
122
bool
123
UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
123
UanMacCw::Enqueue (Ptr<Packet> packet, uint16_t packetType, const Address &dest)
124
{
124
{
125
125
126
  switch (m_state)
126
  switch (m_state)
 Lines 150-164   UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
150
        UanHeaderCommon header;
150
        UanHeaderCommon header;
151
        header.SetDest (UanAddress::ConvertFrom (dest));
151
        header.SetDest (UanAddress::ConvertFrom (dest));
152
        header.SetSrc (m_address);
152
        header.SetSrc (m_address);
153
        header.SetType (0);
153
        header.SetPacketType (packetType);
154
        packet->AddHeader (header);
154
        packet->AddHeader (header);
155
155
156
        m_enqueueLogger (packet, protocolNumber);
156
        m_enqueueLogger (packet, GetModeNum ());
157
157
158
        if (m_phy->IsStateBusy ())
158
        if (m_phy->IsStateBusy ())
159
          {
159
          {
160
            m_pktTx = packet;
160
            m_pktTx = packet;
161
            m_pktTxProt = protocolNumber;
161
            m_pktTxProt = GetModeNum ();
162
            m_state = CCABUSY;
162
            m_state = CCABUSY;
163
            uint32_t cw = (uint32_t) m_rv->GetValue (0,m_cw);
163
            uint32_t cw = (uint32_t) m_rv->GetValue (0,m_cw);
164
            m_savedDelayS = Seconds ((double)(cw) * m_slotTime.GetSeconds ());
164
            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)");
172
            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 ());
173
            NS_ASSERT (m_phy->GetTransducer ()->GetArrivalList ().size () == 0 && !m_phy->IsStateTx ());
174
            m_state = TX;
174
            m_state = TX;
175
            m_phy->SendPacket (packet,protocolNumber);
175
            m_phy->SendPacket (packet, GetModeNum ());
176
176
177
          }
177
          }
178
        break;
178
        break;
 Lines 188-194   UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
188
}
188
}
189
189
190
void
190
void
191
UanMacCw::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb)
191
UanMacCw::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb)
192
{
192
{
193
  m_forwardUpCb = cb;
193
  m_forwardUpCb = cb;
194
}
194
}
 Lines 348-354   UanMacCw::PhyRxPacketGood (Ptr<Packet> packet, double sinr, UanTxMode mode) Link Here 
348
348
349
  if (header.GetDest () == m_address || header.GetDest () == UanAddress::GetBroadcast ())
349
  if (header.GetDest () == m_address || header.GetDest () == UanAddress::GetBroadcast ())
350
    {
350
    {
351
      m_forwardUpCb (packet, header.GetSrc ());
351
      m_forwardUpCb (packet, header.GetPacketType (), header.GetSrc ());
352
    }
352
    }
353
}
353
}
354
void
354
void
(-)a/src/uan/model/uan-mac-cw.h (-3 / +3 lines)
 Lines 85-92   public: Link Here 
85
  // Inherited methods from UanMac
85
  // Inherited methods from UanMac
86
  virtual Address GetAddress ();
86
  virtual Address GetAddress ();
87
  virtual void SetAddress (UanAddress addr);
87
  virtual void SetAddress (UanAddress addr);
88
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
88
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t packetType, const Address &dest);
89
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
89
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb);
90
  virtual void AttachPhy (Ptr<UanPhy> phy);
90
  virtual void AttachPhy (Ptr<UanPhy> phy);
91
  virtual Address GetBroadcast (void) const;
91
  virtual Address GetBroadcast (void) const;
92
  virtual void Clear (void);
92
  virtual void Clear (void);
 Lines 119-125   private: Link Here 
119
  } State;
119
  } State;
120
120
121
  /** Forwarding up callback. */
121
  /** Forwarding up callback. */
122
  Callback <void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
122
  Callback <void, Ptr<Packet>, uint16_t, const UanAddress&> m_forwardUpCb;
123
  /** The MAC address. */
123
  /** The MAC address. */
124
  UanAddress m_address;
124
  UanAddress m_address;
125
  /** PHY layer attached to this MAC. */
125
  /** PHY layer attached to this MAC. */
(-)a/src/uan/model/uan-mac-rc-gw.cc (-7 / +7 lines)
 Lines 183-196   UanMacRcGw::SetAddress (UanAddress addr) Link Here 
183
}
183
}
184
184
185
bool
185
bool
186
UanMacRcGw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
186
UanMacRcGw::Enqueue (Ptr<Packet> packet, uint16_t packetType, const Address &dest)
187
{
187
{
188
  NS_LOG_WARN ("RCMAC Gateway transmission to acoustic nodes is not yet implemented");
188
  NS_LOG_WARN ("RCMAC Gateway transmission to acoustic nodes is not yet implemented");
189
  return false;
189
  return false;
190
}
190
}
191
191
192
void
192
void
193
UanMacRcGw::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb)
193
UanMacRcGw::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb)
194
{
194
{
195
  m_forwardUpCb = cb;
195
  m_forwardUpCb = cb;
196
}
196
}
 Lines 231-237   UanMacRcGw::ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode) Link Here 
231
231
232
  pkt->RemoveHeader (ch);
232
  pkt->RemoveHeader (ch);
233
233
234
  switch (ch.GetType ())
234
  switch (ch.GetPacketType ())
235
    {
235
    {
236
    case UanMacRc::TYPE_DATA:
236
    case UanMacRc::TYPE_DATA:
237
      {
237
      {
 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 ());
247
            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 ());
248
            m_ackData[ch.GetSrc ()].rxFrames.insert (dh.GetFrameNo ());
249
          }
249
          }
250
        m_forwardUpCb (pkt, ch.GetSrc ());
250
        m_forwardUpCb (pkt, ch.GetPacketType (), ch.GetSrc ());
251
      }
251
      }
252
      break;
252
      break;
253
    case UanMacRc::TYPE_GWPING:
253
    case UanMacRc::TYPE_GWPING:
 Lines 447-453   UanMacRcGw::StartCycle (void) Link Here 
447
  UanHeaderCommon ch;
447
  UanHeaderCommon ch;
448
  ch.SetDest (UanAddress::GetBroadcast ());
448
  ch.SetDest (UanAddress::GetBroadcast ());
449
  ch.SetSrc (m_address);
449
  ch.SetSrc (m_address);
450
  ch.SetType (UanMacRc::TYPE_CTS);
450
  ch.SetPacketType (UanMacRc::TYPE_CTS);
451
  cts->AddHeader (ctsg);
451
  cts->AddHeader (ctsg);
452
  cts->AddHeader (ch);
452
  cts->AddHeader (ch);
453
  SendPacket (cts, m_currentRateNum);
453
  SendPacket (cts, m_currentRateNum);
 Lines 492-498   UanMacRcGw::EndCycle () Link Here 
492
      UanHeaderCommon ch;
492
      UanHeaderCommon ch;
493
      ch.SetDest (dest);
493
      ch.SetDest (dest);
494
      ch.SetSrc (m_address);
494
      ch.SetSrc (m_address);
495
      ch.SetType (UanMacRc::TYPE_ACK);
495
      ch.SetPacketType (UanMacRc::TYPE_ACK);
496
      UanHeaderRcAck ah;
496
      UanHeaderRcAck ah;
497
      ah.SetFrameNo (data.frameNo);
497
      ah.SetFrameNo (data.frameNo);
498
      std::list<uint32_t>::iterator nit = toNack.begin ();
498
      std::list<uint32_t>::iterator nit = toNack.begin ();
 Lines 517-523   UanMacRcGw::SendPacket (Ptr<Packet> pkt, uint32_t rate) Link Here 
517
  UanHeaderCommon ch;
517
  UanHeaderCommon ch;
518
  pkt->PeekHeader (ch);
518
  pkt->PeekHeader (ch);
519
  std::string type;
519
  std::string type;
520
  switch (ch.GetType ())
520
  switch (ch.GetPacketType ())
521
    {
521
    {
522
    case UanMacRc::TYPE_DATA:
522
    case UanMacRc::TYPE_DATA:
523
      type = "DATA";
523
      type = "DATA";
(-)a/src/uan/model/uan-mac-rc-gw.h (-3 / +3 lines)
 Lines 69-76   public: Link Here 
69
  // Inherited methods
69
  // Inherited methods
70
  virtual Address GetAddress (void);
70
  virtual Address GetAddress (void);
71
  virtual void SetAddress (UanAddress addr);
71
  virtual void SetAddress (UanAddress addr);
72
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
72
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t packetType, const Address &dest);
73
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
73
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb);
74
  virtual void AttachPhy (Ptr<UanPhy> phy);
74
  virtual void AttachPhy (Ptr<UanPhy> phy);
75
  virtual Address GetBroadcast (void) const;
75
  virtual Address GetBroadcast (void) const;
76
  virtual void Clear (void);
76
  virtual void Clear (void);
 Lines 126-132   private: Link Here 
126
    uint8_t expFrames;  //!< Expected number of frames.
126
    uint8_t expFrames;  //!< Expected number of frames.
127
  };
127
  };
128
  /** Forwarding up callback. */
128
  /** Forwarding up callback. */
129
  Callback<void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
129
  Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> m_forwardUpCb;
130
  
130
  
131
  Ptr<UanPhy> m_phy;            //!< PHY layer attached to this MAC.
131
  Ptr<UanPhy> m_phy;            //!< PHY layer attached to this MAC.
132
  UanAddress m_address;         //!< The MAC address.
132
  UanAddress m_address;         //!< The MAC address.
(-)a/src/uan/model/uan-mac-rc.cc (-10 / +10 lines)
 Lines 288-298   UanMacRc::SetAddress (UanAddress addr) Link Here 
288
}
288
}
289
289
290
bool
290
bool
291
UanMacRc::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
291
UanMacRc::Enqueue (Ptr<Packet> packet, uint16_t packetType, const Address &dest)
292
{
292
{
293
  if (protocolNumber > 0)
293
  if (packetType > 0)
294
    {
294
    {
295
      NS_LOG_WARN ("Warning: UanMacRc does not support multiple protocols.  protocolNumber argument to Enqueue is being ignored");
295
      NS_LOG_WARN ("Warning: UanMacRc does not support multiple protocols.  packetType argument to Enqueue is being ignored");
296
    }
296
    }
297
297
298
298
 Lines 324-330   UanMacRc::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
324
}
324
}
325
325
326
void
326
void
327
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb)
327
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb)
328
{
328
{
329
  m_forwardUpCb = cb;
329
  m_forwardUpCb = cb;
330
}
330
}
 Lines 353-359   UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode) Link Here 
353
      m_rxLogger (pkt, mode);
353
      m_rxLogger (pkt, mode);
354
    }
354
    }
355
355
356
  switch (ch.GetType ())
356
  switch (ch.GetPacketType ())
357
    {
357
    {
358
    case TYPE_DATA:
358
    case TYPE_DATA:
359
359
 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");
362
          NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Node " << m_address << " UanMacRc Receiving DATA packet from PHY");
363
          UanHeaderRcData dh;
363
          UanHeaderRcData dh;
364
          pkt->RemoveHeader (dh);
364
          pkt->RemoveHeader (dh);
365
          m_forwardUpCb (pkt, ch.GetSrc ());
365
          m_forwardUpCb (pkt, ch.GetPacketType (), ch.GetSrc ());
366
        }
366
        }
367
      break;
367
      break;
368
    case TYPE_RTS:
368
    case TYPE_RTS:
 Lines 428-434   UanMacRc::ReceiveOkFromPhy (Ptr<Packet> pkt, double sinr, UanTxMode mode) Link Here 
428
      ProcessAck (pkt);
428
      ProcessAck (pkt);
429
      break;
429
      break;
430
    default:
430
    default:
431
      NS_FATAL_ERROR ("Unknown packet type " << ch.GetType () << " received at node " << GetAddress ());
431
      NS_FATAL_ERROR ("Unknown packet type " << ch.GetPacketType () << " received at node " << GetAddress ());
432
    }
432
    }
433
433
434
}
434
}
 Lines 484-490   UanMacRc::ScheduleData (const UanHeaderRcCts &ctsh, const UanHeaderRcCtsGlobal & Link Here 
484
      pkt->AddHeader (dh);
484
      pkt->AddHeader (dh);
485
485
486
      UanHeaderCommon ch;
486
      UanHeaderCommon ch;
487
      ch.SetType (TYPE_DATA);
487
      ch.SetPacketType (TYPE_DATA);
488
      ch.SetDest (m_assocAddr);
488
      ch.SetDest (m_assocAddr);
489
      ch.SetSrc (m_address);
489
      ch.SetSrc (m_address);
490
490
 Lines 528-534   UanMacRc::SendPacket (Ptr<Packet> pkt, uint32_t rate) Link Here 
528
  UanHeaderCommon ch;
528
  UanHeaderCommon ch;
529
  pkt->PeekHeader (ch);
529
  pkt->PeekHeader (ch);
530
  std::string type;
530
  std::string type;
531
  switch (ch.GetType ())
531
  switch (ch.GetPacketType ())
532
    {
532
    {
533
    case TYPE_DATA:
533
    case TYPE_DATA:
534
      type = "DATA";
534
      type = "DATA";
 Lines 721-727   UanMacRc::IsPhy1Ok () Link Here 
721
      Ptr<Packet> pkt = phyDual->GetPhy1PacketRx ();
721
      Ptr<Packet> pkt = phyDual->GetPhy1PacketRx ();
722
      UanHeaderCommon ch;
722
      UanHeaderCommon ch;
723
      pkt->PeekHeader (ch);
723
      pkt->PeekHeader (ch);
724
      if (ch.GetType () == TYPE_CTS || ch.GetType () == TYPE_ACK)
724
      if (ch.GetPacketType () == TYPE_CTS || ch.GetPacketType () == TYPE_ACK)
725
        {
725
        {
726
          phy1ok = false;
726
          phy1ok = false;
727
        }
727
        }
(-)a/src/uan/model/uan-mac-rc.h (-3 / +3 lines)
 Lines 185-192   public: Link Here 
185
  // Inherited methods
185
  // Inherited methods
186
  virtual Address GetAddress (void);
186
  virtual Address GetAddress (void);
187
  virtual void SetAddress (UanAddress addr);
187
  virtual void SetAddress (UanAddress addr);
188
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
188
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t packetType, const Address &dest);
189
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
189
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb);
190
  virtual void AttachPhy (Ptr<UanPhy> phy);
190
  virtual void AttachPhy (Ptr<UanPhy> phy);
191
  virtual Address GetBroadcast (void) const;
191
  virtual Address GetBroadcast (void) const;
192
  virtual void Clear (void);
192
  virtual void Clear (void);
 Lines 241-247   private: Link Here 
241
  std::list<Reservation> m_resList;
241
  std::list<Reservation> m_resList;
242
242
243
  /** The callback to forward a packet up to higher layer. */
243
  /** The callback to forward a packet up to higher layer. */
244
  Callback<void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
244
  Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> m_forwardUpCb;
245
245
246
  /** A packet was destined for and received at this MAC layer. */
246
  /** A packet was destined for and received at this MAC layer. */
247
  TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
247
  TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
(-)a/src/uan/model/uan-mac.cc (+12 lines)
 Lines 33-36   TypeId UanMac::GetTypeId (void) Link Here 
33
  return tid;
33
  return tid;
34
}
34
}
35
35
36
void
37
UanMac::SetModeNum (uint32_t modeNum)
38
{
39
  m_modeNum = modeNum;
40
}
41
42
uint32_t
43
UanMac::GetModeNum ()
44
{
45
  return m_modeNum;
46
}
47
36
} // namespace ns3
48
} // namespace ns3
(-)a/src/uan/model/uan-mac.h (-4 / +21 lines)
 Lines 72-82   public: Link Here 
72
   * Enqueue packet to be transmitted.
72
   * Enqueue packet to be transmitted.
73
   *
73
   *
74
   * \param pkt Packet to be transmitted.
74
   * \param pkt Packet to be transmitted.
75
   * \param packetType The type of the packet. Usage varies by MAC.
75
   * \param dest Destination address.
76
   * \param dest Destination address.
76
   * \param protocolNumber Protocol number.  Usage varies by MAC.
77
   * \return True if packet was successfully enqueued.
77
   * \return True if packet was successfully enqueued.
78
   */
78
   */
79
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber) = 0;
79
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t packetType, const Address &dest) = 0;
80
  /**
80
  /**
81
   * Set the callback to forward packets up to higher layers.
81
   * Set the callback to forward packets up to higher layers.
82
   * 
82
   * 
 Lines 84-90   public: Link Here 
84
   * \pname{packet} The packet.
84
   * \pname{packet} The packet.
85
   * \pname{address} The source address.
85
   * \pname{address} The source address.
86
   */
86
   */
87
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb) = 0;
87
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb) = 0;
88
88
89
  /**
89
  /**
90
   * Attach PHY layer to this MAC.
90
   * Attach PHY layer to this MAC.
 Lines 124-130   public: Link Here 
124
   */
124
   */
125
  typedef void (* PacketModeTracedCallback)
125
  typedef void (* PacketModeTracedCallback)
126
    (Ptr<const Packet> packet, UanTxMode mode);
126
    (Ptr<const Packet> packet, UanTxMode mode);
127
127
  
128
  /**
129
   * Get the Tx mode number.
130
   *
131
   * \return The Tx mode number..
132
   */
133
  uint32_t GetModeNum ();
134
  
135
  /**
136
   * Set the Tx mode number.
137
   *
138
   * \param modeNum Tx mode number.
139
   */
140
  void SetModeNum (uint32_t modeNum);
141
  
142
private:
143
  uint32_t m_modeNum;   //!< The Tx mode number.
144
  
128
};  // class UanMac
145
};  // class UanMac
129
146
130
} // namespace ns3
147
} // namespace ns3
(-)a/src/uan/model/uan-net-device.cc (-11 / +14 lines)
 Lines 221-227   UanNetDevice::GetChannel () const Link Here 
221
Address
221
Address
222
UanNetDevice::GetAddress () const
222
UanNetDevice::GetAddress () const
223
{
223
{
224
  return m_mac->GetAddress ();
224
  return UanAddress::ConvertFrom (m_mac->GetAddress ()).GetAsMacAddress (); 
225
}
225
}
226
226
227
bool
227
bool
 Lines 254-280   UanNetDevice::IsBroadcast () const Link Here 
254
Address
254
Address
255
UanNetDevice::GetBroadcast () const
255
UanNetDevice::GetBroadcast () const
256
{
256
{
257
  return m_mac->GetBroadcast ();
257
  return UanAddress::ConvertFrom (m_mac->GetBroadcast ()).GetAsMacAddress (); 
258
}
258
}
259
259
260
bool
260
bool
261
UanNetDevice::IsMulticast () const
261
UanNetDevice::IsMulticast () const
262
{
262
{
263
  return false;
263
  return true;
264
}
264
}
265
265
266
Address
266
Address
267
UanNetDevice::GetMulticast (Ipv4Address multicastGroup) const
267
UanNetDevice::GetMulticast (Ipv4Address multicastGroup) const
268
{
268
{
269
  NS_FATAL_ERROR ("UanNetDevice does not support multicast");
269
  //NS_FATAL_ERROR ("UanNetDevice does not support multicast");
270
  return m_mac->GetBroadcast ();
270
  return UanAddress::ConvertFrom (m_mac->GetBroadcast ()).GetAsMacAddress ();
271
}
271
}
272
272
273
Address
273
Address
274
UanNetDevice::GetMulticast (Ipv6Address addr) const
274
UanNetDevice::GetMulticast (Ipv6Address addr) const
275
{
275
{
276
  NS_FATAL_ERROR ("UanNetDevice does not support multicast");
276
  //NS_FATAL_ERROR ("UanNetDevice does not support multicast");
277
  return m_mac->GetBroadcast ();
277
  return UanAddress::ConvertFrom (m_mac->GetBroadcast ()).GetAsMacAddress ();
278
}
278
}
279
279
280
bool
280
bool
 Lines 291-297   UanNetDevice::IsPointToPoint () const Link Here 
291
bool
291
bool
292
UanNetDevice::Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
292
UanNetDevice::Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
293
{
293
{
294
  return m_mac->Enqueue (packet, dest, protocolNumber);
294
  uint8_t tmp [6];
295
  dest.CopyTo (tmp);
296
  UanAddress udest (tmp[5]);
297
  return m_mac->Enqueue (packet, protocolNumber, udest);
295
}
298
}
296
299
297
bool
300
bool
 Lines 316-322   UanNetDevice::SetNode (Ptr<Node> node) Link Here 
316
bool
319
bool
317
UanNetDevice::NeedsArp () const
320
UanNetDevice::NeedsArp () const
318
{
321
{
319
  return false;
322
  return true;
320
}
323
}
321
324
322
void
325
void
 Lines 326-336   UanNetDevice::SetReceiveCallback (NetDevice::ReceiveCallback cb) Link Here 
326
}
329
}
327
330
328
void
331
void
329
UanNetDevice::ForwardUp (Ptr<Packet> pkt, const UanAddress &src)
332
UanNetDevice::ForwardUp (Ptr<Packet> pkt, uint16_t protocolNumber, const UanAddress &src)
330
{
333
{
331
  NS_LOG_DEBUG ("Forwarding packet up to application");
334
  NS_LOG_DEBUG ("Forwarding packet up to application");
332
  m_rxLogger (pkt, src);
335
  m_rxLogger (pkt, src);
333
  m_forwardUp (this, pkt, 0, src);
336
  m_forwardUp (this, pkt, protocolNumber, src.GetAsMacAddress ());
334
337
335
}
338
}
336
339
(-)a/src/uan/model/uan-net-device.h (-1 / +2 lines)
 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 packetType The Type of the packet.
165
   */
166
   */
166
  virtual void ForwardUp (Ptr<Packet> pkt, const UanAddress &src);
167
  virtual void ForwardUp (Ptr<Packet> pkt, uint16_t packetType, const UanAddress &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;
(-)a/src/uan/model/uan-phy-dual.cc (-1 / +1 lines)
 Lines 97-103   UanPhyCalcSinrDual::CalcSinrDb (Ptr<Packet> pkt, Link Here 
97
97
98
          if (pkt)
98
          if (pkt)
99
            {
99
            {
100
              if (ch.GetType () == UanMacRc::TYPE_DATA)
100
              if (ch.GetPacketType () == UanMacRc::TYPE_DATA)
101
                {
101
                {
102
                  NS_LOG_DEBUG ("Adding interferer from " << ch2.GetSrc () << " against " << ch.GetSrc () << ": PktRxMode: "
102
                  NS_LOG_DEBUG ("Adding interferer from " << ch2.GetSrc () << " against " << ch.GetSrc () << ": PktRxMode: "
103
                                                          << mode.GetName () << " Int mode: " << it->GetTxMode ().GetName () << " Separation: "
103
                                                          << mode.GetName () << " Int mode: " << it->GetTxMode ().GetName () << " Separation: "
(-)a/src/uan/model/uan-phy-gen.cc (-3 / +3 lines)
 Lines 541-547   UanPhyGen::EnergyRechargeHandler () Link Here 
541
541
542
void
542
void
543
UanPhyGen::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
543
UanPhyGen::SendPacket (Ptr<Packet> pkt, uint32_t modeNum)
544
{
544
{ 
545
  NS_LOG_DEBUG ("PHY " << m_mac->GetAddress () << ": Transmitting packet");
545
  NS_LOG_DEBUG ("PHY " << m_mac->GetAddress () << ": Transmitting packet");
546
  if (m_state == DISABLED)
546
  if (m_state == DISABLED)
547
    {
547
    {
 Lines 587-593   UanPhyGen::TxEndEvent () Link Here 
587
      NS_LOG_DEBUG ("Transmission ended but node sleeping or dead");
587
      NS_LOG_DEBUG ("Transmission ended but node sleeping or dead");
588
      return;
588
      return;
589
    }
589
    }
590
590
  
591
  NS_ASSERT (m_state == TX);
591
  NS_ASSERT (m_state == TX);
592
  if (GetInterferenceDb ( (Ptr<Packet>) 0) > m_ccaThreshDb)
592
  if (GetInterferenceDb ( (Ptr<Packet>) 0) > m_ccaThreshDb)
593
    {
593
    {
 Lines 686-692   UanPhyGen::StartRxPacket (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode, U Link Here 
686
686
687
void
687
void
688
UanPhyGen::RxEndEvent (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode)
688
UanPhyGen::RxEndEvent (Ptr<Packet> pkt, double rxPowerDb, UanTxMode txMode)
689
{
689
{ 
690
  if (pkt != m_pktRx)
690
  if (pkt != m_pktRx)
691
    {
691
    {
692
      return;
692
      return;

Return to bug 2413