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 (+7 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
   * Convert to MAC Address.
100
   *
101
   * \return 48 bit MAC Address.
102
   */
103
  Mac48Address GetAsMacAddress (void) const;
97
104
98
  /**
105
  /**
99
   * Get the broadcast address (255).
106
   * Get the broadcast address (255).
(-)a/src/uan/model/uan-header-common.cc (-4 / +18 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, uint8_t type, uint16_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)
36
    m_type (type),
37
    m_protocolNumber (protocolNumber)
37
{
38
{
38
39
39
}
40
}
 Lines 76-81   UanHeaderCommon::SetType (uint8_t type) Link Here 
76
  m_type = type;
77
  m_type = type;
77
}
78
}
78
79
80
void
81
UanHeaderCommon::SetProtocolNumber (uint16_t protocolNumber)
82
{
83
  m_protocolNumber = protocolNumber;
84
}
85
79
UanAddress
86
UanAddress
80
UanHeaderCommon::GetDest (void) const
87
UanHeaderCommon::GetDest (void) const
81
{
88
{
 Lines 91-103   UanHeaderCommon::GetType (void) const Link Here 
91
{
98
{
92
  return m_type;
99
  return m_type;
93
}
100
}
101
uint16_t
102
UanHeaderCommon::GetProtocolNumber (void) const
103
{
104
  return m_protocolNumber;
105
}
94
106
95
// Inherrited methods
107
// Inherrited methods
96
108
97
uint32_t
109
uint32_t
98
UanHeaderCommon::GetSerializedSize (void) const
110
UanHeaderCommon::GetSerializedSize (void) const
99
{
111
{
100
  return 1 + 1 + 1;
112
  return 1 + 1 + 1 + 2;
101
}
113
}
102
114
103
void
115
void
 Lines 106-111   UanHeaderCommon::Serialize (Buffer::Iterator start) const Link Here 
106
  start.WriteU8 (m_src.GetAsInt ());
118
  start.WriteU8 (m_src.GetAsInt ());
107
  start.WriteU8 (m_dest.GetAsInt ());
119
  start.WriteU8 (m_dest.GetAsInt ());
108
  start.WriteU8 (m_type);
120
  start.WriteU8 (m_type);
121
  start.WriteU16 (m_protocolNumber);
109
}
122
}
110
123
111
uint32_t
124
uint32_t
 Lines 116-121   UanHeaderCommon::Deserialize (Buffer::Iterator start) Link Here 
116
  m_src = UanAddress (rbuf.ReadU8 ());
129
  m_src = UanAddress (rbuf.ReadU8 ());
117
  m_dest = UanAddress (rbuf.ReadU8 ());
130
  m_dest = UanAddress (rbuf.ReadU8 ());
118
  m_type = rbuf.ReadU8 ();
131
  m_type = rbuf.ReadU8 ();
132
  m_protocolNumber = rbuf.ReadU16 ();
119
133
120
  return rbuf.GetDistanceFrom (start);
134
  return rbuf.GetDistanceFrom (start);
121
}
135
}
 Lines 123-129   UanHeaderCommon::Deserialize (Buffer::Iterator start) Link Here 
123
void
137
void
124
UanHeaderCommon::Print (std::ostream &os) const
138
UanHeaderCommon::Print (std::ostream &os) const
125
{
139
{
126
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_type;
140
  os << "UAN src=" << m_src << " dest=" << m_dest << " type=" << (uint32_t) m_type << "Protocol Number=" << (uint32_t) m_protocolNumber;
127
}
141
}
128
142
129
143
(-)a/src/uan/model/uan-header-common.h (-2 / +15 lines)
 Lines 51-57   public: Link Here 
51
   * \param dest Destination address defined in header.
51
   * \param dest Destination address defined in header.
52
   * \param type Header type.
52
   * \param type Header type.
53
   */
53
   */
54
  UanHeaderCommon (const UanAddress src, const UanAddress dest, uint8_t type);
54
  UanHeaderCommon (const UanAddress src, const UanAddress dest, uint8_t type, uint16_t protocolNumber);
55
  /** Destructor */
55
  /** Destructor */
56
  virtual ~UanHeaderCommon ();
56
  virtual ~UanHeaderCommon ();
57
57
 Lines 80-86   public: Link Here 
80
   * \param type The type value.
80
   * \param type The type value.
81
   */
81
   */
82
  void SetType (uint8_t type);
82
  void SetType (uint8_t type);
83
83
  /**
84
   * Set the packet type.
85
   *
86
   * Used to indicate the layer 3 protocol
87
   * \param type The packet type value.
88
   */
89
  void SetProtocolNumber (uint16_t protocolNumber);
84
  /**
90
  /**
85
   * Get the destination address.
91
   * Get the destination address.
86
   *
92
   *
 Lines 99-104   public: Link Here 
99
   * \return value of type field.
105
   * \return value of type field.
100
   */
106
   */
101
  uint8_t GetType (void) const;
107
  uint8_t GetType (void) const;
108
  /**
109
   * Get the packet type value.
110
   *
111
   * \return value of protocolNumber field.
112
   */
113
  uint16_t GetProtocolNumber (void) const;
102
114
103
115
104
  // Inherited methods
116
  // Inherited methods
 Lines 111-116   private: Link Here 
111
  UanAddress m_dest;  //!< The destination address.
123
  UanAddress m_dest;  //!< The destination address.
112
  UanAddress m_src;   //!< The source address.
124
  UanAddress m_src;   //!< The source address.
113
  uint8_t m_type;     //!< The type field.
125
  uint8_t m_type;     //!< The type field.
126
  uint16_t m_protocolNumber;     //!< The protocolNumber field.
114
127
115
};  // class UanHeaderCommon
128
};  // class UanHeaderCommon
116
129
(-)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 (-4 / +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-76   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);
65
  int64_t AssignStreams (int64_t stream);
66
  int64_t AssignStreams (int64_t stream);
66
67
private:
67
private:
68
  /** The MAC address. */
68
  /** The MAC address. */
69
  UanAddress m_address;
69
  UanAddress m_address;
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 39-45   UanMacCw::UanMacCw () Link Here 
39
    m_pktTx (0),
39
    m_pktTx (0),
40
    m_state (IDLE),
40
    m_state (IDLE),
41
    m_cleared (false)
41
    m_cleared (false)
42
43
{
42
{
44
  m_rv = CreateObject<UniformRandomVariable> ();
43
  m_rv = CreateObject<UniformRandomVariable> ();
45
}
44
}
 Lines 120-126   UanMacCw::SetAddress (UanAddress addr) Link Here 
120
}
119
}
121
120
122
bool
121
bool
123
UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNumber)
122
UanMacCw::Enqueue (Ptr<Packet> packet, uint16_t protocolNumber, const Address &dest)
124
{
123
{
125
124
126
  switch (m_state)
125
  switch (m_state)
 Lines 151-164   UanMacCw::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
151
        header.SetDest (UanAddress::ConvertFrom (dest));
150
        header.SetDest (UanAddress::ConvertFrom (dest));
152
        header.SetSrc (m_address);
151
        header.SetSrc (m_address);
153
        header.SetType (0);
152
        header.SetType (0);
153
        header.SetProtocolNumber (protocolNumber);
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 (-4 / +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. */
 Lines 156-162   private: Link Here 
156
156
157
  /** Provides uniform random variable for contention window. */
157
  /** Provides uniform random variable for contention window. */
158
  Ptr<UniformRandomVariable> m_rv;
158
  Ptr<UniformRandomVariable> m_rv;
159
160
  /**
159
  /**
161
   * Receive packet from lower layer (passed to PHY as callback).
160
   * Receive packet from lower layer (passed to PHY as callback).
162
   *
161
   *
(-)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 (-13 / +7 lines)
 Lines 288-301   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)
294
    {
295
      NS_LOG_WARN ("Warning: UanMacRc does not support multiple protocols.  protocolNumber argument to Enqueue is being ignored");
296
    }
297
298
299
  if (m_pktQueue.size () >= m_queueLimit)
293
  if (m_pktQueue.size () >= m_queueLimit)
300
    {
294
    {
301
      return false;
295
      return false;
 Lines 324-330   UanMacRc::Enqueue (Ptr<Packet> packet, const Address &dest, uint16_t protocolNum Link Here 
324
}
318
}
325
319
326
void
320
void
327
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb)
321
UanMacRc::SetForwardUpCb (Callback<void, Ptr<Packet>, uint16_t, const UanAddress&> cb)
328
{
322
{
329
  m_forwardUpCb = cb;
323
  m_forwardUpCb = cb;
330
}
324
}
 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");
356
          NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Node " << m_address << " UanMacRc Receiving DATA packet from PHY");
363
          UanHeaderRcData dh;
357
          UanHeaderRcData dh;
364
          pkt->RemoveHeader (dh);
358
          pkt->RemoveHeader (dh);
365
          m_forwardUpCb (pkt, ch.GetSrc ());
359
          m_forwardUpCb (pkt, ch.GetProtocolNumber (), ch.GetSrc ());
366
        }
360
        }
367
      break;
361
      break;
368
    case TYPE_RTS:
362
    case TYPE_RTS:
 Lines 634-640   UanMacRc::Associate (void) Link Here 
634
    {
628
    {
635
      Ptr<Packet> pkt = Create<Packet> (0);
629
      Ptr<Packet> pkt = Create<Packet> (0);
636
      pkt->AddHeader (CreateRtsHeader (res));
630
      pkt->AddHeader (CreateRtsHeader (res));
637
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING));
631
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING, 0));
638
      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt);
632
      NS_LOG_DEBUG (Simulator::Now ().GetSeconds () << " Sending first GWPING " << *pkt);
639
      SendPacket (pkt,m_currentRate + m_numRates);
633
      SendPacket (pkt,m_currentRate + m_numRates);
640
    }
634
    }
 Lines 665-671   UanMacRc::AssociateTimeout () Link Here 
665
      res.IncrementRetry ();
659
      res.IncrementRetry ();
666
660
667
      pkt->AddHeader (CreateRtsHeader (res));
661
      pkt->AddHeader (CreateRtsHeader (res));
668
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING));
662
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_GWPING, 0));
669
663
670
      SendPacket (pkt,m_currentRate + m_numRates);
664
      SendPacket (pkt,m_currentRate + m_numRates);
671
      m_resList.push_back (res);
665
      m_resList.push_back (res);
 Lines 698-704   UanMacRc::SendRts (void) Link Here 
698
    {
692
    {
699
      Ptr<Packet> pkt = Create<Packet> (0);
693
      Ptr<Packet> pkt = Create<Packet> (0);
700
      pkt->AddHeader (CreateRtsHeader (res));
694
      pkt->AddHeader (CreateRtsHeader (res));
701
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS));
695
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS, 0));
702
      SendPacket (pkt,m_currentRate + m_numRates);
696
      SendPacket (pkt,m_currentRate + m_numRates);
703
    }
697
    }
704
  m_state = RTSSENT;
698
  m_state = RTSSENT;
 Lines 761-767   UanMacRc::RtsTimeout (void) Link Here 
761
      res.IncrementRetry ();
755
      res.IncrementRetry ();
762
      m_resList.push_back (res);
756
      m_resList.push_back (res);
763
      pkt->AddHeader (CreateRtsHeader (res));
757
      pkt->AddHeader (CreateRtsHeader (res));
764
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS));
758
      pkt->AddHeader (UanHeaderCommon (m_address, UanAddress::GetBroadcast (), (uint8_t) TYPE_RTS, 0));
765
      SendPacket (pkt,m_currentRate + m_numRates);
759
      SendPacket (pkt,m_currentRate + m_numRates);
766
760
767
    }
761
    }
(-)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 (-1 / +18 lines)
 Lines 24-29   namespace ns3 { Link Here 
24
24
25
NS_OBJECT_ENSURE_REGISTERED (UanMac);
25
NS_OBJECT_ENSURE_REGISTERED (UanMac);
26
26
27
UanMac::UanMac ()
28
  : m_txModeIndex (0)
29
{
30
}
31
27
TypeId UanMac::GetTypeId (void)
32
TypeId UanMac::GetTypeId (void)
28
{
33
{
29
  static TypeId tid = TypeId ("ns3::UanMac")
34
  static TypeId tid = TypeId ("ns3::UanMac")
 Lines 33-36   TypeId UanMac::GetTypeId (void) Link Here 
33
  return tid;
38
  return tid;
34
}
39
}
35
40
36
} // namespace ns3
41
void
42
UanMac::SetTxModeIndex (uint32_t txModeIndex)
43
{
44
  m_txModeIndex = txModeIndex;
45
}
46
47
uint32_t
48
UanMac::GetTxModeIndex ()
49
{
50
  return m_txModeIndex;
51
}
52
53
} // namespace ns3
(-)a/src/uan/model/uan-mac.h (-3 / +11 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. Usage varies by MAC.
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
  uint32_t GetTxModeIndex ();
130
  void SetTxModeIndex (uint32_t txModeIndex);
131
132
private:
133
  /** Modulation type */
134
  uint32_t m_txModeIndex;
127
135
128
};  // class UanMac
136
};  // class UanMac
129
137
(-)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 / +3 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 Type of the packet.
166
   *
165
   */
167
   */
166
  virtual void ForwardUp (Ptr<Packet> pkt, const UanAddress &src);
168
  virtual void ForwardUp (Ptr<Packet> pkt, uint16_t protocolNumber, const UanAddress &src);
167
  
169
  
168
  /** \return The channel attached to this device. */
170
  /** \return The channel attached to this device. */
169
  Ptr<UanChannel> DoGetChannel (void) const;
171
  Ptr<UanChannel> DoGetChannel (void) const;

Return to bug 2413