src/wifi/model/ctrl-headers.cc
author Vedran Miletić <rivanvx@gmail.com>
Tue, 02 Aug 2011 17:42:33 -0400
changeset 7385 10beb0e53130
parent 7141 072fb225b714
child 7386 2310ed220a61
permissions -rw-r--r--
standardize emacs c++ mode comments
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7141
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     2
/*
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     3
 * Copyright (c) 2009 MIRKO BANCHI
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     4
 *
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     8
 *
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    12
 * GNU General Public License for more details.
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    13
 *
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    17
 *
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    18
 * Author: Mirko Banchi <mk.banchi@gmail.com>
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    19
 */
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    20
#include "ns3/fatal-error.h"
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    21
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    22
#include "ctrl-headers.h"
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    23
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    24
namespace ns3 {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    25
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    26
/***********************************
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    27
 *       Block ack request
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    28
 ***********************************/
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    29
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    30
NS_OBJECT_ENSURE_REGISTERED (CtrlBAckRequestHeader);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    31
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    32
CtrlBAckRequestHeader::CtrlBAckRequestHeader ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    33
  : m_barAckPolicy (false),
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    34
    m_multiTid (false),
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    35
    m_compressed (false)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    36
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    37
}
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    38
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    39
CtrlBAckRequestHeader::~CtrlBAckRequestHeader ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    40
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    41
}
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    42
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    43
TypeId
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    44
CtrlBAckRequestHeader::GetTypeId (void)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    45
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    46
  static TypeId tid = TypeId ("ns3::CtrlBAckRequestHeader")
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    47
    .SetParent<Header> ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    48
    .AddConstructor<CtrlBAckRequestHeader> ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    49
  ;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    50
  return tid;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    51
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    52
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    53
TypeId
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    54
CtrlBAckRequestHeader::GetInstanceTypeId (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    55
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    56
  return GetTypeId ();
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    57
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    58
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    59
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    60
CtrlBAckRequestHeader::Print (std::ostream &os) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    61
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    62
  os << "TID_INFO=" << m_tidInfo << ", StartingSeq=" << std::hex << m_startingSeq;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    63
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    64
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    65
uint32_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    66
CtrlBAckRequestHeader::GetSerializedSize () const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    67
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    68
  uint32_t size = 0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    69
  size += 2; //Bar control
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    70
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    71
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    72
      size += 2; //Starting sequence control
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    73
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    74
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    75
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    76
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    77
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    78
          size += (2 + 2) * (m_tidInfo + 1);  //Multi-tid block ack
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    79
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    80
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    81
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    82
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    83
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    84
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    85
  return size;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    86
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    87
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    88
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    89
CtrlBAckRequestHeader::Serialize (Buffer::Iterator start) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    90
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    91
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    92
  i.WriteHtolsbU16 (GetBarControl ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    93
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    94
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    95
      i.WriteHtolsbU16 (GetStartingSequenceControl ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    96
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    97
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    98
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    99
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   100
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   101
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   102
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   103
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   104
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   105
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   106
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   107
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   108
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   109
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   110
uint32_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   111
CtrlBAckRequestHeader::Deserialize (Buffer::Iterator start)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   112
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   113
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   114
  SetBarControl (i.ReadLsbtohU16 ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   115
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   116
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   117
      SetStartingSequenceControl (i.ReadLsbtohU16 ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   118
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   119
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   120
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   121
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   122
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   123
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   124
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   125
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   126
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   127
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   128
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   129
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   130
  return i.GetDistanceFrom (start);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   131
}
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   132
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   133
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   134
CtrlBAckRequestHeader::GetBarControl (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   135
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   136
  uint16_t res = 0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   137
  if (m_barAckPolicy)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   138
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   139
      res |= 0x1;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   140
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   141
  if (m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   142
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   143
      res |= (0x1 << 1);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   144
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   145
  if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   146
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   147
      res |= (0x1 << 2);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   148
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   149
  res |= (m_tidInfo << 12) & (0xf << 12);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   150
  return res;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   151
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   152
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   153
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   154
CtrlBAckRequestHeader::SetBarControl (uint16_t bar)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   155
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   156
  m_barAckPolicy = ((bar & 0x01) == 1) ? true : false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   157
  m_multiTid = (((bar >> 1) & 0x01) == 1) ? true : false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   158
  m_compressed = (((bar >> 2) & 0x01) == 1) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   159
  m_tidInfo = (bar >> 12) & 0x0f;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   160
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   161
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   162
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   163
CtrlBAckRequestHeader::GetStartingSequenceControl (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   164
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   165
  return (m_startingSeq << 4) & 0xfff0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   166
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   167
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   168
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   169
CtrlBAckRequestHeader::SetStartingSequenceControl (uint16_t seqControl)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   170
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   171
  m_startingSeq = (seqControl >> 4) & 0x0fff;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   172
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   173
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   174
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   175
CtrlBAckRequestHeader::SetHtImmediateAck (bool immediateAck)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   176
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   177
  m_barAckPolicy = immediateAck;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   178
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   179
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   180
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   181
CtrlBAckRequestHeader::SetType (enum BlockAckType type)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   182
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   183
  switch (type)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   184
    {
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   185
    case BASIC_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   186
      m_multiTid = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   187
      m_compressed = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   188
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   189
    case COMPRESSED_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   190
      m_multiTid = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   191
      m_compressed = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   192
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   193
    case MULTI_TID_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   194
      m_multiTid = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   195
      m_compressed = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   196
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   197
    default:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   198
      NS_FATAL_ERROR ("Invalid variant type");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   199
      break;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   200
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   201
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   202
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   203
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   204
CtrlBAckRequestHeader::SetTidInfo (uint8_t tid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   205
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   206
  m_tidInfo = static_cast<uint16_t> (tid);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   207
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   208
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   209
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   210
CtrlBAckRequestHeader::SetStartingSequence (uint16_t seq)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   211
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   212
  m_startingSeq = seq;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   213
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   214
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   215
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   216
CtrlBAckRequestHeader::MustSendHtImmediateAck (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   217
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   218
  return m_barAckPolicy;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   219
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   220
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   221
uint8_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   222
CtrlBAckRequestHeader::GetTidInfo (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   223
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   224
  uint8_t tid = static_cast<uint8_t> (m_tidInfo);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   225
  return tid;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   226
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   227
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   228
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   229
CtrlBAckRequestHeader::GetStartingSequence (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   230
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   231
  return m_startingSeq;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   232
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   233
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   234
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   235
CtrlBAckRequestHeader::IsBasic (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   236
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   237
  return (!m_multiTid && !m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   238
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   239
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   240
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   241
CtrlBAckRequestHeader::IsCompressed (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   242
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   243
  return (!m_multiTid && m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   244
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   245
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   246
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   247
CtrlBAckRequestHeader::IsMultiTid (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   248
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   249
  return (m_multiTid && m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   250
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   251
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   252
/***********************************
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   253
 *       Block ack response
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   254
 ***********************************/
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   255
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   256
NS_OBJECT_ENSURE_REGISTERED (CtrlBAckResponseHeader);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   257
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   258
CtrlBAckResponseHeader::CtrlBAckResponseHeader ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   259
  : m_baAckPolicy (false),
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   260
    m_multiTid (false),
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   261
    m_compressed (false)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   262
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   263
  memset (&bitmap, 0, sizeof (bitmap));
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   264
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   265
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   266
CtrlBAckResponseHeader::~CtrlBAckResponseHeader ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   267
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   268
}
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   269
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   270
TypeId
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   271
CtrlBAckResponseHeader::GetTypeId (void)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   272
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   273
  static TypeId tid = TypeId ("ns3::CtrlBAckResponseHeader")
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   274
    .SetParent<Header> ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   275
    .AddConstructor<CtrlBAckResponseHeader> ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   276
  ;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   277
  return tid;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   278
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   279
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   280
TypeId
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   281
CtrlBAckResponseHeader::GetInstanceTypeId (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   282
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   283
  return GetTypeId ();
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   284
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   285
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   286
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   287
CtrlBAckResponseHeader::Print (std::ostream &os) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   288
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   289
  os << "TID_INFO=" << m_tidInfo << ", StartingSeq=" << std::hex << m_startingSeq;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   290
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   291
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   292
uint32_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   293
CtrlBAckResponseHeader::GetSerializedSize (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   294
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   295
  uint32_t size = 0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   296
  size += 2; //Bar control
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   297
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   298
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   299
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   300
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   301
          size += (2 + 128); //Basic block ack
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   302
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   303
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   304
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   305
          size += (2 + 8); //Compressed block ack
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   306
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   307
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   308
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   309
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   310
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   311
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   312
          size += (2 + 2 + 8) * (m_tidInfo + 1); //Multi-tid block ack
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   313
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   314
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   315
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   316
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   317
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   318
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   319
  return size;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   320
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   321
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   322
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   323
CtrlBAckResponseHeader::Serialize (Buffer::Iterator start) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   324
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   325
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   326
  i.WriteHtolsbU16 (GetBaControl ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   327
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   328
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   329
      i.WriteHtolsbU16 (GetStartingSequenceControl ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   330
      i = SerializeBitmap (i);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   331
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   332
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   333
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   334
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   335
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   336
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   337
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   338
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   339
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   340
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   341
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   342
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   343
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   344
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   345
uint32_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   346
CtrlBAckResponseHeader::Deserialize (Buffer::Iterator start)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   347
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   348
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   349
  SetBaControl (i.ReadLsbtohU16 ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   350
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   351
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   352
      SetStartingSequenceControl (i.ReadLsbtohU16 ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   353
      i = DeserializeBitmap (i);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   354
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   355
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   356
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   357
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   358
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   359
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   360
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   361
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   362
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   363
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   364
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   365
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   366
  return i.GetDistanceFrom (start);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   367
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   368
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   369
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   370
CtrlBAckResponseHeader::SetHtImmediateAck (bool immediateAck)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   371
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   372
  m_baAckPolicy = immediateAck;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   373
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   374
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   375
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   376
CtrlBAckResponseHeader::SetType (enum BlockAckType type)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   377
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   378
  switch (type)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   379
    {
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   380
    case BASIC_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   381
      m_multiTid = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   382
      m_compressed = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   383
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   384
    case COMPRESSED_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   385
      m_multiTid = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   386
      m_compressed = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   387
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   388
    case MULTI_TID_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   389
      m_multiTid = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   390
      m_compressed = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   391
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   392
    default:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   393
      NS_FATAL_ERROR ("Invalid variant type");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   394
      break;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   395
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   396
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   397
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   398
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   399
CtrlBAckResponseHeader::SetTidInfo (uint8_t tid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   400
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   401
  m_tidInfo = static_cast<uint16_t> (tid);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   402
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   403
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   404
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   405
CtrlBAckResponseHeader::SetStartingSequence (uint16_t seq)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   406
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   407
  m_startingSeq = seq;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   408
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   409
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   410
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   411
CtrlBAckResponseHeader::MustSendHtImmediateAck (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   412
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   413
  return (m_baAckPolicy) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   414
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   415
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   416
uint8_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   417
CtrlBAckResponseHeader::GetTidInfo (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   418
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   419
  uint8_t tid = static_cast<uint8_t> (m_tidInfo);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   420
  return tid;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   421
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   422
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   423
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   424
CtrlBAckResponseHeader::GetStartingSequence (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   425
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   426
  return m_startingSeq;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   427
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   428
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   429
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   430
CtrlBAckResponseHeader::IsBasic (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   431
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   432
  return (!m_multiTid && !m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   433
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   434
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   435
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   436
CtrlBAckResponseHeader::IsCompressed (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   437
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   438
  return (!m_multiTid && m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   439
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   440
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   441
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   442
CtrlBAckResponseHeader::IsMultiTid (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   443
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   444
  return (m_multiTid && m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   445
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   446
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   447
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   448
CtrlBAckResponseHeader::GetBaControl (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   449
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   450
  uint16_t res = 0;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   451
  if (m_baAckPolicy)
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   452
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   453
      res |= 0x1;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   454
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   455
  if (m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   456
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   457
      res |= (0x1 << 1);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   458
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   459
  if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   460
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   461
      res |= (0x1 << 2);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   462
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   463
  res |= (m_tidInfo << 12) & (0xf << 12);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   464
  return res;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   465
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   466
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   467
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   468
CtrlBAckResponseHeader::SetBaControl (uint16_t ba)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   469
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   470
  m_baAckPolicy = ((ba & 0x01) == 1) ? true : false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   471
  m_multiTid = (((ba >> 1) & 0x01) == 1) ? true : false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   472
  m_compressed = (((ba >> 2) & 0x01) == 1) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   473
  m_tidInfo = (ba >> 12) & 0x0f;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   474
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   475
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   476
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   477
CtrlBAckResponseHeader::GetStartingSequenceControl (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   478
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   479
  return (m_startingSeq << 4) & 0xfff0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   480
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   481
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   482
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   483
CtrlBAckResponseHeader::SetStartingSequenceControl (uint16_t seqControl)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   484
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   485
  m_startingSeq = (seqControl >> 4) & 0x0fff;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   486
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   487
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   488
Buffer::Iterator
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   489
CtrlBAckResponseHeader::SerializeBitmap (Buffer::Iterator start) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   490
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   491
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   492
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   493
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   494
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   495
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   496
          for (uint32_t j = 0; j < 64; j++)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   497
            {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   498
              i.WriteHtolsbU16 (bitmap.m_bitmap[j]);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   499
            }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   500
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   501
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   502
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   503
          i.WriteHtolsbU64 (bitmap.m_compressedBitmap);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   504
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   505
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   506
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   507
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   508
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   509
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   510
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   511
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   512
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   513
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   514
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   515
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   516
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   517
  return i;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   518
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   519
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   520
Buffer::Iterator
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   521
CtrlBAckResponseHeader::DeserializeBitmap (Buffer::Iterator start)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   522
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   523
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   524
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   525
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   526
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   527
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   528
          for (uint32_t j = 0; j < 64; j++)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   529
            {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   530
              bitmap.m_bitmap[j] = i.ReadLsbtohU16 ();
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   531
            }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   532
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   533
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   534
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   535
          bitmap.m_compressedBitmap = i.ReadLsbtohU64 ();
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   536
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   537
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   538
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   539
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   540
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   541
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   542
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   543
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   544
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   545
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   546
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   547
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   548
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   549
  return i;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   550
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   551
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   552
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   553
CtrlBAckResponseHeader::SetReceivedPacket (uint16_t seq)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   554
{
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   555
  if (!IsInBitmap (seq))
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   556
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   557
      return;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   558
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   559
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   560
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   561
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   562
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   563
          /* To set correctly basic block ack bitmap we need fragment number too.
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   564
             So if it's not specified, we consider packet not fragmented. */
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   565
          bitmap.m_bitmap[IndexInBitmap (seq)] |= 0x0001;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   566
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   567
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   568
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   569
          bitmap.m_compressedBitmap |= (uint64_t (0x0000000000000001) << IndexInBitmap (seq));
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   570
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   571
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   572
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   573
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   574
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   575
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   576
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   577
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   578
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   579
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   580
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   581
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   582
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   583
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   584
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   585
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   586
CtrlBAckResponseHeader::SetReceivedFragment (uint16_t seq, uint8_t frag)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   587
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   588
  NS_ASSERT (frag < 16);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   589
  if (!IsInBitmap (seq))
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   590
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   591
      return;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   592
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   593
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   594
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   595
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   596
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   597
          bitmap.m_bitmap[IndexInBitmap (seq)] |= (0x0001 << frag);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   598
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   599
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   600
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   601
          /* We can ignore this...compressed block ack doesn't support
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   602
             acknowledgement of single fragments */
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   603
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   604
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   605
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   606
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   607
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   608
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   609
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   610
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   611
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   612
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   613
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   614
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   615
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   616
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   617
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   618
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   619
CtrlBAckResponseHeader::IsPacketReceived (uint16_t seq) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   620
{
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   621
  if (!IsInBitmap (seq))
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   622
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   623
      return false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   624
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   625
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   626
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   627
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   628
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   629
          /*It's impossible to say if an entire packet was correctly received. */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   630
          return false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   631
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   632
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   633
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   634
          uint64_t mask = uint64_t (0x0000000000000001);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   635
          return (((bitmap.m_compressedBitmap >> IndexInBitmap (seq)) & mask) == 1) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   636
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   637
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   638
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   639
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   640
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   641
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   642
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   643
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   644
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   645
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   646
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   647
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   648
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   649
  return false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   650
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   651
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   652
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   653
CtrlBAckResponseHeader::IsFragmentReceived (uint16_t seq, uint8_t frag) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   654
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   655
  NS_ASSERT (frag < 16);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   656
  if (!IsInBitmap (seq))
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   657
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   658
      return false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   659
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   660
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   661
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   662
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   663
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   664
          return ((bitmap.m_bitmap[IndexInBitmap (seq)] & (0x0001 << frag)) != 0x0000) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   665
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   666
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   667
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   668
          /* Although this could make no sense, if packet with sequence number
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   669
             equal to <i>seq</i> was correctly received, also all of its fragments
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   670
             were correctly received. */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   671
          uint64_t mask = uint64_t (0x0000000000000001);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   672
          return (((bitmap.m_compressedBitmap >> IndexInBitmap (seq)) & mask) == 1) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   673
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   674
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   675
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   676
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   677
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   678
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   679
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   680
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   681
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   682
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   683
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   684
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   685
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   686
  return false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   687
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   688
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   689
uint8_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   690
CtrlBAckResponseHeader::IndexInBitmap (uint16_t seq) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   691
{
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   692
  uint8_t index;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   693
  if (seq >= m_startingSeq)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   694
    {
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   695
      index = seq - m_startingSeq;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   696
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   697
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   698
    {
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   699
      index = 4096 - m_startingSeq + seq;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   700
    }
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   701
  NS_ASSERT (index <= 63);
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   702
  return index;
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   703
}
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   704
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   705
bool
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   706
CtrlBAckResponseHeader::IsInBitmap (uint16_t seq) const
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   707
{
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   708
  return (seq - m_startingSeq + 4096) % 4096 < 64;
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   709
}
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   710
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   711
const uint16_t*
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   712
CtrlBAckResponseHeader::GetBitmap (void) const
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   713
{
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   714
  return bitmap.m_bitmap;
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   715
}
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   716
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   717
uint64_t
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   718
CtrlBAckResponseHeader::GetCompressedBitmap (void) const
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   719
{
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   720
  return bitmap.m_compressedBitmap;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   721
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   722
6589
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   723
void
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   724
CtrlBAckResponseHeader::ResetBitmap (void)
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   725
{
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   726
  memset (&bitmap, 0, sizeof (bitmap));
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   727
}
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   728
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   729
}  //namespace ns3