A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
mac-messages.h
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007,2008,2009 INRIA, UDcast
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
19  * Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
20  * <amine.ismail@UDcast.com>
21  */
22 
23 
24 /*
25  *This file does not contain all MAC messages, the rest of MAC messages have
26  *This been categorized as DL and UL messages and are placed in
27  *This dl-mac-messages.h and ul-mac-messages.h files.
28  */
29 
30 #ifndef MANAGEMENT_MESSAGE_TYPE_H
31 #define MANAGEMENT_MESSAGE_TYPE_H
32 
33 #include <stdint.h>
34 #include "ns3/header.h"
35 
36 namespace ns3 {
37 
42 {
43 public:
44  /*
45  * Section 6.3.2.3 MAC Management messages page 42, Table 14 page 43
46  */
47  enum MessageType
48  {
49  MESSAGE_TYPE_UCD = 0,
50  MESSAGE_TYPE_DCD = 1,
51  MESSAGE_TYPE_DL_MAP = 2,
52  MESSAGE_TYPE_UL_MAP = 3,
53  MESSAGE_TYPE_RNG_REQ = 4,
54  MESSAGE_TYPE_RNG_RSP = 5,
55  MESSAGE_TYPE_REG_REQ = 6,
56  MESSAGE_TYPE_REG_RSP = 7,
57  MESSAGE_TYPE_DSA_REQ = 11,
58  MESSAGE_TYPE_DSA_RSP = 12,
59  MESSAGE_TYPE_DSA_ACK = 13
60  };
61 
62  ManagementMessageType (void);
63  ManagementMessageType (uint8_t type);
64  virtual ~ManagementMessageType (void);
65  void SetType (uint8_t type);
66  uint8_t GetType (void) const;
67 
68  std::string GetName (void) const;
69  static TypeId GetTypeId (void);
70  virtual TypeId GetInstanceTypeId (void) const;
71  void Print (std::ostream &os) const;
72  uint32_t GetSerializedSize (void) const;
73  void Serialize (Buffer::Iterator start) const;
74  uint32_t Deserialize (Buffer::Iterator start);
75 private:
76  uint8_t m_type;
77 };
78 
79 } // namespace ns3
80 
81 #endif /* MANAGEMENT_MESSAGE_TYPE_H */
82 
83 
84 // ----------------------------------------------------------------------------------------------------------
85 
86 #ifndef RNG_RSP_H
87 #define RNG_RSP_H
88 
89 #include <stdint.h>
90 #include "ns3/header.h"
91 #include "ns3/mac48-address.h"
92 #include "service-flow.h"
93 #include "cid.h"
94 
95 namespace ns3 {
96 
97 class RngRsp : public Header
98 {
106 public:
107  RngRsp (void);
108  virtual ~RngRsp (void);
114  void SetTimingAdjust (uint32_t timingAdjust);
122  void SetPowerLevelAdjust (uint8_t powerLevelAdjust);
128  void SetOffsetFreqAdjust (uint32_t offsetFreqAdjust);
129  void SetRangStatus (uint8_t rangStatus);
134  void SetDlFreqOverride (uint32_t dlFreqOverride);
139  void SetUlChnlIdOverride (uint8_t ulChnlIdOverride);
140  void SetDlOperBurstProfile (uint16_t dlOperBurstProfile);
141  void SetMacAddress (Mac48Address macAddress);
142 
143  void SetBasicCid (Cid basicCid);
144  void SetPrimaryCid (Cid primaryCid);
145 
146  void SetAasBdcastPermission (uint8_t aasBdcastPermission);
147  void SetFrameNumber (uint32_t frameNumber);
148  void SetInitRangOppNumber (uint8_t initRangOppNumber);
149  void SetRangSubchnl (uint8_t rangSubchnl);
154  uint32_t GetTimingAdjust (void) const;
161  uint8_t GetPowerLevelAdjust (void) const;
166  uint32_t GetOffsetFreqAdjust (void) const;
167  uint8_t GetRangStatus (void) const;
171  uint32_t GetDlFreqOverride (void) const;
175  uint8_t GetUlChnlIdOverride (void) const;
179  uint16_t GetDlOperBurstProfile (void) const;
180  Mac48Address GetMacAddress (void) const;
181  Cid GetBasicCid (void) const;
182  Cid GetPrimaryCid (void) const;
183  uint8_t GetAasBdcastPermission (void) const;
184  uint32_t GetFrameNumber (void) const;
185  uint8_t GetInitRangOppNumber (void) const;
186  uint8_t GetRangSubchnl (void) const;
187 
188  std::string GetName (void) const;
189  static TypeId GetTypeId (void);
190  virtual TypeId GetInstanceTypeId (void) const;
191  void Print (std::ostream &os) const;
192  uint32_t GetSerializedSize (void) const;
193  void Serialize (Buffer::Iterator start) const;
194  uint32_t Deserialize (Buffer::Iterator start);
195 private:
196  uint8_t m_reserved; // changed as per the amendment 802.16e-2005
197 
198  // TLV Encoded Information
199 
200  // Tx timing offset adjustment (signed 32-bit). The time required to advance SS transmission so frames
201  // arrive at the expected time instance at the BS.
202  uint32_t m_timingAdjust;
203 
204  // Specifies the relative change in transmission power level that the SS is to make in order that
205  // transmissions arrive at the BS at the desired power. When subchannelization is employed, the
206  // subscriber shall interpret the power offset adjustment as a required change to the transmitted power
207  // density.
208  uint8_t m_powerLevelAdjust;
209 
210  // Specifies the relative change in transmission frequency that the SS is to make in order to better match
211  // the BS. This is fine-frequency adjustment within a channel, not reassignment to a different channel.
212  uint32_t m_offsetFreqAdjust;
213  uint8_t m_rangStatus;
214 
215  // Center frequency, in kHz, of new downlink channel where the SS should redo initial ranging.
216  uint32_t m_dlFreqOverride;
217 
218  // Licensed bands: The identifier of the uplink channel with which the SS is to redo initial ranging (not
219  // used with PHYs without channelized uplinks).
220  uint8_t m_ulChnlIdOverride;
221 
222  // This parameter is sent in response to the RNG-REQ Requested Downlink Burst Profile parameter.
223  // Byte 0: Specifies the least robust DIUC that may be used by the BS for transmissions to the SS.
224  // Byte 1: Configuration Change Count value of DCD defining the burst profile associated with DIUC.
225  uint16_t m_dlOperBurstProfile;
226 
227  Mac48Address m_macAddress;
228  Cid m_basicCid;
229  Cid m_primaryCid;
230  uint8_t m_aasBdcastPermission;
231 
232  // Frame number where the associated RNG_REQ message was detected by the BS. Usage is mutually
233  // exclusive with SS MAC Address
234  uint32_t m_frameNumber;
235 
236  // Initial Ranging opportunity (1–255) in which the associated RNG_REQ message was detected by the BS.
237  // Usage is mutually exclusive with SS MAC Address
238  uint8_t m_initRangOppNumber;
239 
240  // Used to indicate the OFDM subchannel reference that was used to transmit the initial ranging message
241  // (OFDM with subchannelization).
242  uint8_t m_rangSubchnl;
243 };
244 
245 } // namespace ns3
246 
247 #endif /* RNG_RSP_H */
248 
249 // ----------------------------------------------------------------------------------------------------------
250 
251 #ifndef DSA_REQ_H
252 #define DSA_REQ_H
253 
254 #include <stdint.h>
255 #include "ns3/header.h"
256 #include "ns3/buffer.h"
257 #include "cid.h"
258 #include "service-flow.h"
259 
260 namespace ns3 {
261 class serviceFlow;
262 class DsaReq : public Header
263 {
270 public:
271  DsaReq ();
272  ~DsaReq ();
273  DsaReq (ServiceFlow sf);
274  void SetTransactionId (uint16_t transactionId);
279  void SetSfid (uint32_t sfid);
284  void SetCid (Cid cid);
289  void SetServiceFlow (ServiceFlow sf);
293  ServiceFlow GetServiceFlow (void) const;
294  uint16_t GetTransactionId (void) const;
298  uint32_t GetSfid (void) const;
302  Cid GetCid (void) const;
303  std::string GetName (void) const;
304  static TypeId GetTypeId (void);
305  virtual TypeId GetInstanceTypeId (void) const;
306  void Print (std::ostream &os) const;
307  uint32_t GetSerializedSize (void) const;
308  void Serialize (Buffer::Iterator start) const;
309  uint32_t Deserialize (Buffer::Iterator start);
310 
311 private:
312  uint16_t m_transactionId;
313  // TLV Encoded Information
314  uint32_t m_sfid;
315  Cid m_cid;
316  ServiceFlow m_serviceFlow;
317 };
318 
319 } // namespace ns3
320 
321 #endif /* DSA_REQ_H */
322 
323 // ----------------------------------------------------------------------------------------------------------
324 
325 #ifndef DSA_RSP_H
326 #define DSA_RSP_H
327 
328 #include <stdint.h>
329 #include "ns3/header.h"
330 #include "ns3/buffer.h"
331 #include "cid.h"
332 
333 namespace ns3 {
334 
335 class DsaRsp : public Header
336 {
343 public:
344  DsaRsp (void);
345  ~DsaRsp (void);
346 
347  void SetTransactionId (uint16_t transactionId);
348  uint16_t GetTransactionId (void) const;
349 
350  void SetConfirmationCode (uint16_t confirmationCode);
351  uint16_t GetConfirmationCode (void) const;
356  void SetSfid (uint32_t sfid);
360  uint32_t GetSfid (void) const;
365  void SetCid (Cid cid);
369  Cid GetCid (void) const;
374  void SetServiceFlow (ServiceFlow sf);
378  ServiceFlow GetServiceFlow (void) const;
379 
380  std::string GetName (void) const;
381  static TypeId GetTypeId (void);
382  virtual TypeId GetInstanceTypeId (void) const;
383  void Print (std::ostream &os) const;
384  uint32_t GetSerializedSize (void) const;
385  void Serialize (Buffer::Iterator start) const;
386  uint32_t Deserialize (Buffer::Iterator start);
387 private:
388  uint16_t m_transactionId;
389  uint8_t m_confirmationCode;
390  // TLV Encoded Information
391  ServiceFlow m_serviceFlow;
392  uint32_t m_sfid;
393  Cid m_cid;
394 
395 };
396 
397 } // namespace ns3
398 
399 #endif /* DSA_RSP_H */
400 
401 // ----------------------------------------------------------------------------------------------------------
402 
403 #ifndef DSA_ACK_H
404 #define DSA_ACK_H
405 
406 #include <stdint.h>
407 #include "ns3/header.h"
408 #include "ns3/buffer.h"
409 
410 namespace ns3 {
411 
412 class DsaAck : public Header
413 {
414 
420 public:
421  DsaAck (void);
422  ~DsaAck (void);
423 
424  void SetTransactionId (uint16_t transactionId);
425  uint16_t GetTransactionId (void) const;
426 
427  void SetConfirmationCode (uint16_t confirmationCode);
428  uint16_t GetConfirmationCode (void) const;
429 
430  std::string GetName (void) const;
431  static TypeId GetTypeId (void);
432  virtual TypeId GetInstanceTypeId (void) const;
433  void Print (std::ostream &os) const;
434  uint32_t GetSerializedSize (void) const;
435  void Serialize (Buffer::Iterator start) const;
436  uint32_t Deserialize (Buffer::Iterator start);
437 private:
438  uint16_t m_transactionId;
439  uint8_t m_confirmationCode;
440 };
441 
442 } // namespace ns3
443 
444 #endif /* DSA_ACK_H */
445 
446 // ----------------------------------------------------------------------------------------------------------
447 
448 #ifndef RNG_REQ_H
449 #define RNG_REQ_H
450 
451 #include <stdint.h>
452 #include "ns3/header.h"
453 #include "ns3/mac48-address.h"
454 #include "service-flow.h"
455 
456 namespace ns3 {
457 
458 class RngReq : public Header
459 {
466 public:
467  RngReq (void);
468  virtual ~RngReq (void);
469 
470  void SetReqDlBurstProfile (uint8_t reqDlBurstProfile);
471  void SetMacAddress (Mac48Address macAddress);
472  void SetRangingAnomalies (uint8_t rangingAnomalies);
473 
474  uint8_t GetReqDlBurstProfile (void) const;
475  Mac48Address GetMacAddress (void) const;
476  uint8_t GetRangingAnomalies (void) const;
477 
478  std::string GetName (void) const;
479  static TypeId GetTypeId (void);
480  virtual TypeId GetInstanceTypeId (void) const;
481  void Print (std::ostream &os) const;
482  void PrintDebug (void) const;
483  uint32_t GetSerializedSize (void) const;
484  void Serialize (Buffer::Iterator start) const;
485  uint32_t Deserialize (Buffer::Iterator start);
486 private:
487  uint8_t m_reserved; // changed as per the amendment 802.16e-2005
488 
489  // TLV Encoded Information
490  uint8_t m_reqDlBurstProfile;
491  Mac48Address m_macAddress;
492  uint8_t m_rangingAnomalies;
493 };
494 
495 } // namespace ns3
496 
497 #endif /* RNG_REQ_H */
498 
Protocol header serialization and deserialization.
Definition: header.h:42
uint32_t GetSerializedSize(void) const
Cid GetCid(void) const
void Print(std::ostream &os) const
void SetPowerLevelAdjust(uint8_t powerLevelAdjust)
set the relative change in transmission power level that the SS should make in order that transmissio...
void SetServiceFlow(ServiceFlow sf)
specify a service flow to be requested by this message
virtual TypeId GetInstanceTypeId(void) const
void SetServiceFlow(ServiceFlow sf)
specify a service flow to be requested by this message
virtual TypeId GetInstanceTypeId(void) const
Definition: mac-messages.cc:75
ServiceFlow GetServiceFlow(void) const
uint32_t GetSfid(void) const
ServiceFlow GetServiceFlow(void) const
uint32_t GetSfid(void) const
Cid GetCid(void) const
uint32_t GetDlFreqOverride(void) const
uint32_t GetSerializedSize(void) const
uint32_t Deserialize(Buffer::Iterator start)
uint32_t Deserialize(Buffer::Iterator start)
uint32_t GetTimingAdjust(void) const
DsaReq()
This class implements the ranging request message described by "IEEE Standard for Local and metropoli...
iterator in a Buffer instance
Definition: buffer.h:98
virtual TypeId GetInstanceTypeId(void) const
void Serialize(Buffer::Iterator start) const
uint32_t Deserialize(Buffer::Iterator start)
uint16_t GetDlOperBurstProfile(void) const
uint32_t Deserialize(Buffer::Iterator start)
uint32_t Deserialize(Buffer::Iterator start)
void SetTimingAdjust(uint32_t timingAdjust)
set the Tx timing offset adjustment (signed 32-bit).
void Print(std::ostream &os) const
virtual TypeId GetInstanceTypeId(void) const
uint32_t GetSerializedSize(void) const
void Print(std::ostream &os) const
void SetUlChnlIdOverride(uint8_t ulChnlIdOverride)
set the identifier of the uplink channel with which the SS is to redo initial ranging ...
void SetCid(Cid cid)
set the connection identifier
void Serialize(Buffer::Iterator start) const
Definition: cid.h:35
void SetDlFreqOverride(uint32_t dlFreqOverride)
set the Center frequency, in kHz, of new downlink channel where the SS should redo initial ranging...
void Serialize(Buffer::Iterator start) const
an EUI-48 address
Definition: mac48-address.h:41
void SetOffsetFreqAdjust(uint32_t offsetFreqAdjust)
set the relative change in transmission frequency that the SS should take in order to better match th...
uint8_t GetPowerLevelAdjust(void) const
void Print(std::ostream &os) const
void Print(std::ostream &os) const
uint32_t GetSerializedSize(void) const
Definition: mac-messages.cc:87
RngReq(void)
This class implements the DSA-REQ message described by "IEEE Standard for Local and metropolitan area...
void SetSfid(uint32_t sfid)
set the service flow identifier
uint32_t GetSerializedSize(void) const
uint32_t GetSerializedSize(void) const
void SetSfid(uint32_t sfid)
set the service flow identifier
uint32_t GetOffsetFreqAdjust(void) const
uint8_t GetUlChnlIdOverride(void) const
uint32_t Deserialize(Buffer::Iterator start)
virtual TypeId GetInstanceTypeId(void) const
DsaRsp(void)
This class implements the DSA-RSP message described by "IEEE Standard for Local and metropolitan area...
void SetCid(Cid cid)
set the connection identifier
RngRsp(void)
This class implements the ranging response message described by "IEEE Standard for Local and metropol...
void Serialize(Buffer::Iterator start) const
a unique identifier for an interface.
Definition: type-id.h:44
void Serialize(Buffer::Iterator start) const
Definition: mac-messages.cc:93
void Print(std::ostream &os) const
Definition: mac-messages.cc:81
virtual TypeId GetInstanceTypeId(void) const
DsaAck(void)
This class implements the DSA-ACK message described by "IEEE Standard for Local and metropolitan area...
void Serialize(Buffer::Iterator start) const