23 #include "wimax-mac-header.h"
28 NS_OBJECT_ENSURE_REGISTERED (MacHeaderType);
30 MacHeaderType::MacHeaderType (
void)
35 MacHeaderType::MacHeaderType (uint8_t type)
40 MacHeaderType::~MacHeaderType (
void)
45 MacHeaderType::SetType (uint8_t type)
51 MacHeaderType::GetType (
void)
const
57 MacHeaderType::GetName (
void)
const
59 return "MAC Header Type";
63 MacHeaderType::GetTypeId (
void)
65 static TypeId tid = TypeId (
"ns3::MacHeaderType").SetParent<Header> ().AddConstructor<MacHeaderType> ();
76 os <<
" header type = " << (uint32_t) m_type;
97 GenericMacHeader::GenericMacHeader (
void)
112 GenericMacHeader::~GenericMacHeader (
void)
116 void GenericMacHeader::SetHt (uint8_t ht)
121 void GenericMacHeader::SetEc (uint8_t ec)
126 void GenericMacHeader::SetType (uint8_t type)
131 void GenericMacHeader::SetCi (uint8_t ci)
136 void GenericMacHeader::SetEks (uint8_t eks)
141 void GenericMacHeader::SetLen (uint16_t len)
146 void GenericMacHeader::SetCid (Cid cid)
151 void GenericMacHeader::SetHcs (uint8_t hcs)
156 uint8_t GenericMacHeader::GetHt (
void)
const
161 uint8_t GenericMacHeader::GetEc (
void)
const
166 uint8_t GenericMacHeader::GetType (
void)
const
171 uint8_t GenericMacHeader::GetCi (
void)
const
176 uint8_t GenericMacHeader::GetEks (
void)
const
181 uint16_t GenericMacHeader::GetLen (
void)
const
186 Cid GenericMacHeader::GetCid (
void)
const
191 uint8_t GenericMacHeader::GetHcs (
void)
const
196 std::string GenericMacHeader::GetName (
void)
const
198 return "Generic Mac Header";
201 TypeId GenericMacHeader::GetTypeId (
void)
203 static TypeId tid = TypeId (
"ns3::GenericMacHeader").SetParent<Header> ().AddConstructor<GenericMacHeader> ();
214 os <<
" ec (encryption control) = " << (uint32_t) m_ec <<
", type = " << (uint32_t) m_type
215 <<
", ci (crc indicator) = " << (uint32_t) m_ci <<
", eks (encryption key sequence) = " << (uint32_t) m_eks
216 <<
", len (length) = " << m_len <<
", cid = " << m_cid <<
", hcs (header check sequence) = " << (uint32_t) m_hcs;
237 uint8_t headerBuffer[6];
238 memset (headerBuffer, 0, 6);
240 headerBuffer[0] = ((m_ht << 7) & 0x80) | ((m_ec << 6) & 0x40) | (m_type & 0x3F);
241 headerBuffer[1] = ((m_esf << 7) & 0x80) | ((m_ci << 6) & 0x40) | ((m_eks << 4) & 0x30) | ((m_rsv1 << 3) & 0x08)
242 | (((uint8_t)(m_len >> 8)) & 0x07);
243 headerBuffer[2] = (uint8_t)(m_len);
247 headerBuffer[5] = crc;
248 for (
int j = 0; j < 6; j++)
268 uint8_t headerBuffer[6];
269 for (
int j = 0; j < 6; j++)
271 headerBuffer[j] = i.
ReadU8 ();
273 m_ht = (headerBuffer[0] >> 7) & 0x01;
274 m_ec = (headerBuffer[0] >> 6) & 0x01;
275 m_type = (headerBuffer[0]) & 0x3F;
276 m_esf = (headerBuffer[1] >> 7) & 0x01;
277 m_ci = (headerBuffer[1] >> 6) & 0x01;
278 m_eks = (headerBuffer[1] >> 4) & 0x03;
279 m_rsv1 = (headerBuffer[1] >> 3) & 0x01;
280 uint16_t lenmsb = (headerBuffer[1] & 0x07);
281 uint16_t lenlsb = headerBuffer[2];
282 m_len = ((lenmsb << 8) & 0x0700) | (lenlsb & 0x00FF);
283 uint16_t cidmsb = headerBuffer[3];
284 uint16_t cidlsb = headerBuffer[4];
285 uint16_t cid = ((cidmsb << 8) & 0xFF00) | (cidlsb & 0x00FF);
287 m_hcs = headerBuffer[5];
292 bool GenericMacHeader::check_hcs (
void)
const
294 return (m_hcs == c_hcs);
299 NS_OBJECT_ENSURE_REGISTERED (BandwidthRequestHeader);
301 BandwidthRequestHeader::BandwidthRequestHeader (
void)
311 BandwidthRequestHeader::~BandwidthRequestHeader (
void)
315 void BandwidthRequestHeader::SetHt (uint8_t ht)
320 void BandwidthRequestHeader::SetEc (uint8_t ec)
325 void BandwidthRequestHeader::SetType (uint8_t type)
330 void BandwidthRequestHeader::SetBr (uint32_t br)
335 void BandwidthRequestHeader::SetCid (Cid cid)
340 void BandwidthRequestHeader::SetHcs (uint8_t hcs)
345 uint8_t BandwidthRequestHeader::GetHt (
void)
const
350 uint8_t BandwidthRequestHeader::GetEc (
void)
const
355 uint8_t BandwidthRequestHeader::GetType (
void)
const
360 uint32_t BandwidthRequestHeader::GetBr (
void)
const
365 Cid BandwidthRequestHeader::GetCid (
void)
const
370 uint8_t BandwidthRequestHeader::GetHcs (
void)
const
375 std::string BandwidthRequestHeader::GetName (
void)
const
377 return "Bandwidth Request Header";
380 TypeId BandwidthRequestHeader::GetTypeId (
void)
382 static TypeId tid = TypeId (
"ns3::BandwidthRequestHeader").SetParent<Header> ().AddConstructor<
383 BandwidthRequestHeader> ();
394 os <<
" ec (encryption control) = " << (uint32_t) m_ec <<
", type = " << (uint32_t) m_type
395 <<
", br (bandwidth request) = " << m_br <<
", cid = ";
397 os <<
", hcs (header check sequence) = " << (uint32_t) m_hcs;
420 uint8_t headerBuffer[6];
421 uint8_t br_msb1 = (((uint32_t) m_br) >> 16) & 0x00000007;
422 uint8_t br_msb2 = (((uint32_t) m_br) >> 8) & 0x000000FF;
423 uint8_t br_lsb = m_br & 0x000000FF;
424 headerBuffer[0] = ((m_ht << 7) & 0x80) | ((m_ec << 6) & 0x40) | ((m_type << 3) & 0x38) | br_msb1;
425 headerBuffer[1] = br_msb2;
426 headerBuffer[2] = br_lsb;
427 headerBuffer[3] = (uint8_t)((m_cid.
GetIdentifier () >> 8) & 0x00FF);
428 headerBuffer[4] = (uint8_t)(m_cid.
GetIdentifier () & 0x00FF);
431 for (
int j = 0; j < 6; j++)
450 uint8_t headerBuffer[6];
451 for (
int j = 0; j < 6; j++)
453 headerBuffer[j] = i.
ReadU8 ();
456 m_ht = (headerBuffer[0] >> 7) & 0x01;
457 m_ec = (headerBuffer[0] >> 6) & 0x01;
458 m_type = (headerBuffer[0] >> 3) & 0x07;
459 uint32_t br_msb1 = headerBuffer[0] & 0x00000007;
460 uint32_t br_msb2 = headerBuffer[1] & 0x000000FF;
461 uint32_t br_lsb = headerBuffer[2] & 0x000000FF;
462 m_br = ((uint32_t) br_msb1 << 14) | ((uint32_t) br_msb2 << 8) | br_lsb;
463 uint16_t cidmsb = headerBuffer[3];
464 uint16_t cidlsb = headerBuffer[4];
465 uint16_t cid = ((cidmsb << 8) & 0xFF00) | (cidlsb & 0x00FF);
467 m_hcs = headerBuffer[5];
474 bool BandwidthRequestHeader::check_hcs (
void)
const
476 return (m_hcs == c_hcs);
481 NS_OBJECT_ENSURE_REGISTERED (GrantManagementSubheader);
490 GrantManagementSubheader::~GrantManagementSubheader (
void)
494 void GrantManagementSubheader::SetSi (uint8_t si)
499 void GrantManagementSubheader::SetPm (uint8_t pm)
504 void GrantManagementSubheader::SetPbr (uint16_t pbr)
509 uint8_t GrantManagementSubheader::GetSi (
void)
const
514 uint8_t GrantManagementSubheader::GetPm (
void)
const
519 uint16_t GrantManagementSubheader::GetPbr (
void)
const
524 std::string GrantManagementSubheader::GetName (
void)
const
526 return "Grant Management Subheader";
529 TypeId GrantManagementSubheader::GetTypeId (
void)
531 static TypeId tid = TypeId (
"ns3::GrantManagementSubheader").SetParent<Header> ().AddConstructor<
543 os <<
" si (slip indicator) = " << (uint32_t) m_si <<
", pm (poll me) = " << (uint32_t) m_pm
544 <<
", pbr (piggyback request) = " << m_pbr;
574 FragmentationSubheader::FragmentationSubheader (
void)
580 FragmentationSubheader::~FragmentationSubheader (
void)
585 FragmentationSubheader::SetFc (uint8_t fc)
591 FragmentationSubheader::SetFsn (uint8_t fsn)
597 FragmentationSubheader::GetFc (
void)
const
603 FragmentationSubheader::GetFsn (
void)
const
610 FragmentationSubheader::GetName (
void)
const
612 return "Fragmentation Subheader";
616 FragmentationSubheader::GetTypeId (
void)
618 static TypeId tid = TypeId (
"ns3::FragmentationSubheader").SetParent<
619 Header> ().AddConstructor<FragmentationSubheader> ();
632 os <<
" fc (fragment control) = " << (uint32_t) m_fc <<
", fsn (fragmentation sequence number) = "
633 << (uint32_t) m_fsn <<
"\n";
virtual TypeId GetInstanceTypeId(void) const
uint32_t GetDistanceFrom(Iterator const &o) const
iterator in a Buffer instance
void WriteU16(uint16_t data)
void Print(std::ostream &os) const
void WriteU8(uint8_t data)
void Serialize(Buffer::Iterator start) const
uint16_t GetIdentifier(void) const
uint8_t CRC8Calculate(const uint8_t *data, int length)
uint32_t Deserialize(Buffer::Iterator start)
a unique identifier for an interface.
uint32_t GetSerializedSize(void) const