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

(-)a/src/internet/model/arp-header.cc (-1 / +1 lines)
 Lines 136-142   uint32_t Link Here 
136
ArpHeader::GetSerializedSize (void) const
136
ArpHeader::GetSerializedSize (void) const
137
{
137
{
138
  NS_LOG_FUNCTION (this);
138
  NS_LOG_FUNCTION (this);
139
  NS_ASSERT((m_macSource.GetLength () == 6) || (m_macSource.GetLength () == 8));
139
  NS_ASSERT((m_macSource.GetLength () == 6) || (m_macSource.GetLength () == 8) || (m_macSource.GetLength () == 1));
140
  NS_ASSERT (m_macSource.GetLength () == m_macDest.GetLength ());
140
  NS_ASSERT (m_macSource.GetLength () == m_macDest.GetLength ());
141
141
142
  uint32_t length = 16;   // Length minus two hardware addresses
142
  uint32_t length = 16;   // Length minus two hardware addresses
(-)a/src/uan/model/uan-address.cc (+12 lines)
 Lines 64-69   UanAddress::GetAsInt (void) const Link Here 
64
{
64
{
65
  return m_address;
65
  return m_address;
66
}
66
}
67
68
Mac48Address
69
UanAddress::GetAsMacAddress () const
70
{
71
  uint8_t address [6];
72
  address[0] = address[1] = address[2] = address[3] = address[4] = 0;
73
  address[5] = m_address;
74
  Mac48Address mac;
75
  mac.CopyFrom (address);
76
  return mac;
77
}
78
67
bool
79
bool
68
UanAddress::IsMatchingType (const Address &address)
80
UanAddress::IsMatchingType (const Address &address)
69
{
81
{
(-)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 (-9 / +37 lines)
 Lines 29-41   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, uint8_t type, uint8_t protocolNumber)
33
  : Header (),
33
  : Header (),
34
    m_dest (dest),
34
    m_dest (dest),
35
    m_src (src),
35
    m_src (src)
36
    m_type (type)
37
{
36
{
38
37
  m_uanProtocolBits.m_protocolNumber = protocolNumber;
38
  m_uanProtocolBits.m_type = type;
39
}
39
}
40
40
41
TypeId
41
TypeId
 Lines 73-81   UanHeaderCommon::SetSrc (UanAddress src) Link Here 
73
void
73
void
74
UanHeaderCommon::SetType (uint8_t type)
74
UanHeaderCommon::SetType (uint8_t type)
75
{
75
{
76
  m_type = type;
76
  m_uanProtocolBits.m_type = type;
77
}
77
}
78
78
79
void
80
UanHeaderCommon::SetProtocolNumber (uint16_t protocolNumber)
81
{
82
  if(protocolNumber == 0x0800)
83
    m_uanProtocolBits.m_protocolNumber = 1;
84
  if(protocolNumber == 0x0806)
85
    m_uanProtocolBits.m_protocolNumber = 2;
86
  if(protocolNumber == 0x86DD)
87
    m_uanProtocolBits.m_protocolNumber = 3;
88
 }
89
79
UanAddress
90
UanAddress
80
UanHeaderCommon::GetDest (void) const
91
UanHeaderCommon::GetDest (void) const
81
{
92
{
 Lines 89-95   UanHeaderCommon::GetSrc (void) const Link Here 
89
uint8_t
100
uint8_t
90
UanHeaderCommon::GetType (void) const
101
UanHeaderCommon::GetType (void) const
91
{
102
{
92
  return m_type;
103
  return m_uanProtocolBits.m_type;
104
}
105
106
uint16_t
107
UanHeaderCommon::GetProtocolNumber (void) const
108
{
109
  if(m_uanProtocolBits.m_protocolNumber == 1)
110
    return 0x0800;
111
  if(m_uanProtocolBits.m_protocolNumber == 2)
112
    return 0x0806;
113
  if(m_uanProtocolBits.m_protocolNumber == 3)
114
    return 0x86DD;
115
  return 0;
93
}
116
}
94
117
95
// Inherrited methods
118
// Inherrited methods
 Lines 105-111   UanHeaderCommon::Serialize (Buffer::Iterator start) const Link Here 
105
{
128
{
106
  start.WriteU8 (m_src.GetAsInt ());
129
  start.WriteU8 (m_src.GetAsInt ());
107
  start.WriteU8 (m_dest.GetAsInt ());
130
  start.WriteU8 (m_dest.GetAsInt ());
108
  start.WriteU8 (m_type);
131
  char tmp = m_uanProtocolBits.m_type;
132
  tmp = tmp << 4;
133
  tmp += m_uanProtocolBits.m_protocolNumber;
134
  start.WriteU8 (tmp);
109
}
135
}
110
136
111
uint32_t
137
uint32_t
 Lines 115-121   UanHeaderCommon::Deserialize (Buffer::Iterator start) Link Here 
115
141
116
  m_src = UanAddress (rbuf.ReadU8 ());
142
  m_src = UanAddress (rbuf.ReadU8 ());
117
  m_dest = UanAddress (rbuf.ReadU8 ());
143
  m_dest = UanAddress (rbuf.ReadU8 ());
118
  m_type = rbuf.ReadU8 ();
144
  char tmp = rbuf.ReadU8 ();
145
  m_uanProtocolBits.m_type = tmp >> 4;
146
  m_uanProtocolBits.m_protocolNumber = tmp;
119
147
120
  return rbuf.GetDistanceFrom (start);
148
  return rbuf.GetDistanceFrom (start);
121
}
149
}
 Lines 123-129   UanHeaderCommon::Deserialize (Buffer::Iterator start) Link Here 
123
void
151
void
124
UanHeaderCommon::Print (std::ostream &os) const
152
UanHeaderCommon::Print (std::ostream &os) const
125
{
153
{
126
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_type;
154
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_uanProtocolBits.m_type << "Protocol Number=" << (uint32_t) m_uanProtocolBits.m_protocolNumber;
127
}
155
}
128
156
129
157
(-)a/src/uan/model/uan-header-common.h (-3 / +22 lines)
 Lines 27-32    Link Here 
27
#include "uan-address.h"
27
#include "uan-address.h"
28
28
29
namespace ns3 {
29
namespace ns3 {
30
  
31
  struct UanProtocolBits
32
  {
33
    uint8_t  m_type : 4;
34
    uint8_t  m_protocolNumber : 4; 
35
  };
30
36
31
/**
37
/**
32
 * \ingroup uan
38
 * \ingroup uan
 Lines 50-57   public: Link Here 
50
   * \param src Source address defined in header.
56
   * \param src Source address defined in header.
51
   * \param dest Destination address defined in header.
57
   * \param dest Destination address defined in header.
52
   * \param type Header type.
58
   * \param type Header type.
59
   * \param protocolNumber the layer 3 protocol number
53
   */
60
   */
54
  UanHeaderCommon (const UanAddress src, const UanAddress dest, uint8_t type);
61
  UanHeaderCommon (const UanAddress src, const UanAddress dest, uint8_t type, uint8_t protocolNumber);
55
  /** Destructor */
62
  /** Destructor */
56
  virtual ~UanHeaderCommon ();
63
  virtual ~UanHeaderCommon ();
57
64
 Lines 80-86   public: Link Here 
80
   * \param type The type value.
87
   * \param type The type value.
81
   */
88
   */
82
  void SetType (uint8_t type);
89
  void SetType (uint8_t type);
83
90
  /**
91
   * Set the packet type.
92
   *
93
   * Used to indicate the layer 3 protocol
94
   * \param protocolNumber The layer 3 protocol number value.
95
   */
96
  void SetProtocolNumber (uint16_t protocolNumber);
84
  /**
97
  /**
85
   * Get the destination address.
98
   * Get the destination address.
86
   *
99
   *
 Lines 99-104   public: Link Here 
99
   * \return value of type field.
112
   * \return value of type field.
100
   */
113
   */
101
  uint8_t GetType (void) const;
114
  uint8_t GetType (void) const;
115
  /**
116
   * Get the packet type value.
117
   *
118
   * \return value of protocolNumber field.
119
   */
120
  uint16_t GetProtocolNumber (void) const;
102
121
103
122
104
  // Inherited methods
123
  // Inherited methods
 Lines 110-116   public: Link Here 
110
private:
129
private:
111
  UanAddress m_dest;  //!< The destination address.
130
  UanAddress m_dest;  //!< The destination address.
112
  UanAddress m_src;   //!< The source address.
131
  UanAddress m_src;   //!< The source address.
113
  uint8_t m_type;     //!< The type field.
132
  UanProtocolBits m_uanProtocolBits;  //!< The type and protocol bits
114
133
115
};  // class UanHeaderCommon
134
};  // class UanHeaderCommon
116
135
(-)a/src/uan/model/uan-mac-aloha.cc (-4 / +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 protocolNumber, 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 102-110   UanMacAloha::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocol Link Here 
102
      header.SetSrc (src);
102
      header.SetSrc (src);
103
      header.SetDest (udest);
103
      header.SetDest (udest);
104
      header.SetType (0);
104
      header.SetType (0);
105
      header.SetProtocolNumber (protocolNumber);
105
106
106
      packet->AddHeader (header);
107
      packet->AddHeader (header);
107
      m_phy->SendPacket (packet, protocolNumber);
108
      m_phy->SendPacket (packet, GetTxModeIndex ());
108
      return true;
109
      return true;
109
    }
110
    }
110
  else
111
  else
 Lines 112-118   UanMacAloha::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocol Link Here 
112
}
113
}
113
114
114
void
115
void
115
UanMacAloha::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress& > cb)
116
UanMacAloha::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb)
116
{
117
{
117
  m_forUpCb = cb;
118
  m_forUpCb = cb;
118
}
119
}
 Lines 133-139   UanMacAloha::RxPacketGood (Ptr<Packet> pkt, double sinr, UanTxMode txMode) Link Here 
133
134
134
  if (header.GetDest () == GetAddress () || header.GetDest () == UanAddress::GetBroadcast ())
135
  if (header.GetDest () == GetAddress () || header.GetDest () == UanAddress::GetBroadcast ())
135
    {
136
    {
136
      m_forUpCb (pkt, header.GetSrc ());
137
      m_forUpCb (pkt, header.GetProtocolNumber (), header.GetSrc ());
137
    }
138
    }
138
139
139
}
140
}
(-)a/src/uan/model/uan-mac-aloha.h (-3 / +4 lines)
 Lines 23-28    Link Here 
23
23
24
#include "uan-mac.h"
24
#include "uan-mac.h"
25
#include "uan-address.h"
25
#include "uan-address.h"
26
#include "uan-tx-mode.h"
26
27
27
namespace ns3
28
namespace ns3
28
{
29
{
 Lines 57-64   public: Link Here 
57
  // Inherited methods
58
  // Inherited methods
58
  Address GetAddress (void);
59
  Address GetAddress (void);
59
  virtual void SetAddress (UanAddress addr);
60
  virtual void SetAddress (UanAddress addr);
60
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
61
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t protocolNumber, const Address &dest);
61
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress& > cb);
62
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb);
62
  virtual void AttachPhy (Ptr<UanPhy> phy);
63
  virtual void AttachPhy (Ptr<UanPhy> phy);
63
  virtual Address GetBroadcast (void) const;
64
  virtual Address GetBroadcast (void) const;
64
  virtual void Clear (void);
65
  virtual void Clear (void);
 Lines 70-76   private: Link Here 
70
  /** PHY layer attached to this MAC. */
71
  /** PHY layer attached to this MAC. */
71
  Ptr<UanPhy> m_phy;
72
  Ptr<UanPhy> m_phy;
72
  /** Forwarding up callback. */
73
  /** Forwarding up callback. */
73
  Callback<void, Ptr<Packet>, const UanAddress& > m_forUpCb;
74
  Callback<void, Ptr<Packet>, uint16_t, const UanAddress& > m_forUpCb;
74
  /** Flag when we've been cleared. */
75
  /** Flag when we've been cleared. */
75
  bool m_cleared;
76
  bool m_cleared;
76
77
(-)a/src/uan/model/uan-mac-cw.cc (-6 / +6 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 protocolNumber, const Address &dest)
124
{
124
{
125
125
126
  switch (m_state)
126
  switch (m_state)
 Lines 153-164   UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
153
        header.SetType (0);
153
        header.SetType (0);
154
        packet->AddHeader (header);
154
        packet->AddHeader (header);
155
155
156
        m_enqueueLogger (packet, protocolNumber);
156
        m_enqueueLogger (packet, GetTxModeIndex ());
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 = GetTxModeIndex ();
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,GetTxModeIndex ());
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.GetProtocolNumber (), 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 protocolNumber, 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 (-4 / +4 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 protocolNumber, 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 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.GetProtocolNumber (), ch.GetSrc ());
251
      }
251
      }
252
      break;
252
      break;
253
    case UanMacRc::TYPE_GWPING:
253
    case UanMacRc::TYPE_GWPING:
 Lines 388-394   UanMacRcGw::StartCycle (void) Link Here 
388
      ctsg.SetRetryRate (m_currentRetryRate);
388
      ctsg.SetRetryRate (m_currentRetryRate);
389
      ctsg.SetTxTimeStamp (Simulator::Now ());
389
      ctsg.SetTxTimeStamp (Simulator::Now ());
390
390
391
      UanHeaderCommon ch (m_address, UanAddress::GetBroadcast (), UanMacRc::TYPE_CTS);
391
      UanHeaderCommon ch (m_address, UanAddress::GetBroadcast (), UanMacRc::TYPE_CTS, 0);
392
      Ptr<Packet> p = Create<Packet> ();
392
      Ptr<Packet> p = Create<Packet> ();
393
      p->AddHeader (ctsg);
393
      p->AddHeader (ctsg);
394
      p->AddHeader (ch);
394
      p->AddHeader (ch);
(-)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 protocolNumber, 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 (-7 / +7 lines)
 Lines 288-294   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 protocolNumber, const Address &dest)
292
{
292
{
293
  if (protocolNumber > 0)
293
  if (protocolNumber > 0)
294
    {
294
    {
 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 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.GetProtocolNumber (), ch.GetSrc ());
366
        }
366
        }
367
      break;
367
      break;
368
    case TYPE_RTS:
368
    case TYPE_RTS:
 Lines 634-640   UanMacRc::Associate (void) Link Here 
634
    {
634
    {
635
      Ptr<Packet> pkt = Create<Packet> (0);
635
      Ptr<Packet> pkt = Create<Packet> (0);
636
      pkt->AddHeader (CreateRtsHeader (res));
636
      pkt->AddHeader (CreateRtsHeader (res));
637
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING));
637
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING, 0));
638
      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt);
638
      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt);
639
      SendPacket (pkt,m_currentRate + m_numRates);
639
      SendPacket (pkt,m_currentRate + m_numRates);
640
    }
640
    }
 Lines 665-671   UanMacRc::AssociateTimeout () Link Here 
665
      res.IncrementRetry ();
665
      res.IncrementRetry ();
666
666
667
      pkt->AddHeader (CreateRtsHeader (res));
667
      pkt->AddHeader (CreateRtsHeader (res));
668
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING));
668
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING, 0));
669
669
670
      SendPacket (pkt,m_currentRate + m_numRates);
670
      SendPacket (pkt,m_currentRate + m_numRates);
671
      m_resList.push_back (res);
671
      m_resList.push_back (res);
 Lines 698-704   UanMacRc::SendRts (void) Link Here 
698
    {
698
    {
699
      Ptr<Packet> pkt = Create<Packet> (0);
699
      Ptr<Packet> pkt = Create<Packet> (0);
700
      pkt->AddHeader (CreateRtsHeader (res));
700
      pkt->AddHeader (CreateRtsHeader (res));
701
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS));
701
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS, 0));
702
      SendPacket (pkt,m_currentRate + m_numRates);
702
      SendPacket (pkt,m_currentRate + m_numRates);
703
    }
703
    }
704
  m_state = RTSSENT;
704
  m_state = RTSSENT;
 Lines 761-767   UanMacRc::RtsTimeout (void) Link Here 
761
      res.IncrementRetry ();
761
      res.IncrementRetry ();
762
      m_resList.push_back (res);
762
      m_resList.push_back (res);
763
      pkt->AddHeader (CreateRtsHeader (res));
763
      pkt->AddHeader (CreateRtsHeader (res));
764
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS));
764
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS, 0));
765
      SendPacket (pkt,m_currentRate + m_numRates);
765
      SendPacket (pkt,m_currentRate + m_numRates);
766
766
767
    }
767
    }
(-)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 protocolNumber, 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 (+16 lines)
 Lines 23-28    Link Here 
23
namespace ns3 {
23
namespace ns3 {
24
24
25
NS_OBJECT_ENSURE_REGISTERED (UanMac);
25
NS_OBJECT_ENSURE_REGISTERED (UanMac);
26
UanMac::UanMac ()
27
  : m_txModeIndex (0)
28
{
29
}
26
30
27
TypeId UanMac::GetTypeId (void)
31
TypeId UanMac::GetTypeId (void)
28
{
32
{
 Lines 33-36   TypeId UanMac::GetTypeId (void) Link Here 
33
  return tid;
37
  return tid;
34
}
38
}
35
39
40
void
41
UanMac::SetTxModeIndex (uint32_t txModeIndex)
42
{
43
  m_txModeIndex = txModeIndex;
44
}
45
46
uint32_t
47
UanMac::GetTxModeIndex ()
48
{
49
  return m_txModeIndex;
50
}
51
36
} // namespace ns3
52
} // namespace ns3
(-)a/src/uan/model/uan-mac.h (-3 / +12 lines)
 Lines 48-53   class UanAddress; Link Here 
48
class UanMac : public Object
48
class UanMac : public Object
49
{
49
{
50
public:
50
public:
51
  /** Default constructor */
52
   UanMac ();
51
  /**
53
  /**
52
   * Register this type.
54
   * Register this type.
53
   * \return The TypeId.
55
   * \return The TypeId.
 Lines 73-82   public: Link Here 
73
   *
75
   *
74
   * \param pkt Packet to be transmitted.
76
   * \param pkt Packet to be transmitted.
75
   * \param dest Destination address.
77
   * \param dest Destination address.
76
   * \param protocolNumber Protocol number.  Usage varies by MAC.
78
   * \param protocolNumber The type of the packet.
77
   * \return True if packet was successfully enqueued.
79
   * \return True if packet was successfully enqueued.
78
   */
80
   */
79
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber) = 0;
81
  virtual bool Enqueue (Ptr<Packet> pkt, uint16_t protocolNumber, const Address &dest) = 0;
80
  /**
82
  /**
81
   * Set the callback to forward packets up to higher layers.
83
   * Set the callback to forward packets up to higher layers.
82
   * 
84
   * 
 Lines 84-90   public: Link Here 
84
   * \pname{packet} The packet.
86
   * \pname{packet} The packet.
85
   * \pname{address} The source address.
87
   * \pname{address} The source address.
86
   */
88
   */
87
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb) = 0;
89
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb) = 0;
88
90
89
  /**
91
  /**
90
   * Attach PHY layer to this MAC.
92
   * Attach PHY layer to this MAC.
 Lines 124-129   public: Link Here 
124
   */
126
   */
125
  typedef void (* PacketModeTracedCallback)
127
  typedef void (* PacketModeTracedCallback)
126
    (Ptr<const Packet> packet, UanTxMode mode);
128
    (Ptr<const Packet> packet, UanTxMode mode);
129
  
130
  uint32_t GetTxModeIndex ();
131
  void SetTxModeIndex (uint32_t txModeIndex);
132
133
private:
134
  /** Modulation type */
135
  uint32_t m_txModeIndex;
127
136
128
};  // class UanMac
137
};  // class UanMac
129
138
(-)a/src/uan/model/uan-net-device.cc (-11 / +12 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
  return UanAddress::ConvertFrom (m_mac->GetBroadcast ()).GetAsMacAddress ();
270
  return m_mac->GetBroadcast ();
271
}
270
}
272
271
273
Address
272
Address
274
UanNetDevice::GetMulticast (Ipv6Address addr) const
273
UanNetDevice::GetMulticast (Ipv6Address addr) const
275
{
274
{
276
  NS_FATAL_ERROR ("UanNetDevice does not support multicast");
275
  return UanAddress::ConvertFrom (m_mac->GetBroadcast ()).GetAsMacAddress ();
277
  return m_mac->GetBroadcast ();
278
}
276
}
279
277
280
bool
278
bool
 Lines 291-297   UanNetDevice::IsPointToPoint () const Link Here 
291
bool
289
bool
292
UanNetDevice::Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
290
UanNetDevice::Send (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
293
{
291
{
294
  return m_mac->Enqueue (packet, dest, protocolNumber);
292
  uint8_t tmp [6];
293
  dest.CopyTo (tmp);
294
  UanAddress udest (tmp[5]);
295
  return m_mac->Enqueue (packet, protocolNumber, udest);
295
}
296
}
296
297
297
bool
298
bool
 Lines 316-322   UanNetDevice::SetNode (Ptr<Node> node) Link Here 
316
bool
317
bool
317
UanNetDevice::NeedsArp () const
318
UanNetDevice::NeedsArp () const
318
{
319
{
319
  return false;
320
  return true;
320
}
321
}
321
322
322
void
323
void
 Lines 326-336   UanNetDevice::SetReceiveCallback (NetDevice::ReceiveCallback cb) Link Here 
326
}
327
}
327
328
328
void
329
void
329
UanNetDevice::ForwardUp (Ptr<Packet> pkt, const UanAddress &src)
330
UanNetDevice::ForwardUp (Ptr<Packet> pkt, uint16_t protocolNumber, const UanAddress &src)
330
{
331
{
331
  NS_LOG_DEBUG ("Forwarding packet up to application");
332
  NS_LOG_DEBUG ("Forwarding packet up to application");
332
  m_rxLogger (pkt, src);
333
  m_rxLogger (pkt, src);
333
  m_forwardUp (this, pkt, 0, src);
334
  m_forwardUp (this, pkt, protocolNumber, src);
334
335
335
}
336
}
336
337
(-)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 protocolNumber The layer 3 protocol number.
165
   */
166
   */
166
  virtual void ForwardUp (Ptr<Packet> pkt, const UanAddress &src);
167
  virtual void ForwardUp (Ptr<Packet> pkt, uint16_t protocolNumber, const 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;

Return to bug 2413