src/wifi/model/ctrl-headers.cc
author Stefano Avallone <stefano.avallone@unina.it>
Fri, 05 Sep 2014 16:33:57 -0700
changeset 10883 d919e7194e23
parent 10652 dc18deba4502
child 10968 2d29fee2b7b8
permissions -rw-r--r--
add support for a Wifi sleep mode
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"
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
    21
#include "ns3/log.h"
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    22
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    23
#include "ctrl-headers.h"
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    24
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
    25
NS_LOG_COMPONENT_DEFINE ("CtrlHeaders");
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
    26
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    27
namespace ns3 {
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
 *       Block ack request
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
10652
dc18deba4502 [doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10410
diff changeset
    33
NS_OBJECT_ENSURE_REGISTERED (CtrlBAckRequestHeader);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    34
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    35
CtrlBAckRequestHeader::CtrlBAckRequestHeader ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    36
  : m_barAckPolicy (false),
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    37
    m_multiTid (false),
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    38
    m_compressed (false)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    39
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
    40
  NS_LOG_FUNCTION (this);
7141
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
CtrlBAckRequestHeader::~CtrlBAckRequestHeader ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    44
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
    45
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    46
}
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    47
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    48
TypeId
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    49
CtrlBAckRequestHeader::GetTypeId (void)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    50
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
    51
  NS_LOG_FUNCTION_NOARGS ();
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    52
  static TypeId tid = TypeId ("ns3::CtrlBAckRequestHeader")
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    53
    .SetParent<Header> ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    54
    .AddConstructor<CtrlBAckRequestHeader> ()
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 tid;
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
TypeId
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    60
CtrlBAckRequestHeader::GetInstanceTypeId (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    61
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
    62
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    63
  return GetTypeId ();
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    66
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    67
CtrlBAckRequestHeader::Print (std::ostream &os) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    68
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
    69
  NS_LOG_FUNCTION (this << &os);
9778
45a56374ae2b [Coverity] Not restoring ostream format (STREAM_FORMAT_STATE)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7386
diff changeset
    70
  os << "TID_INFO=" << m_tidInfo << ", StartingSeq=" << std::hex << m_startingSeq << std::dec;
5948
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    73
uint32_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    74
CtrlBAckRequestHeader::GetSerializedSize () const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    75
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
    76
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    77
  uint32_t size = 0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    78
  size += 2; //Bar control
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    79
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    80
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    81
      size += 2; //Starting sequence control
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    82
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    83
  else
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
      if (m_compressed)
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
          size += (2 + 2) * (m_tidInfo + 1);  //Multi-tid block ack
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    88
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    89
      else
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
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    92
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    93
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    94
  return size;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    95
}
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
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    98
CtrlBAckRequestHeader::Serialize (Buffer::Iterator start) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    99
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   100
  NS_LOG_FUNCTION (this << &start);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   101
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   102
  i.WriteHtolsbU16 (GetBarControl ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   103
  if (!m_multiTid)
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
      i.WriteHtolsbU16 (GetStartingSequenceControl ());
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
  else
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
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   110
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   111
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
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
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   114
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   115
          NS_FATAL_ERROR ("Reserved configuration.");
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
    }
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   120
uint32_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   121
CtrlBAckRequestHeader::Deserialize (Buffer::Iterator start)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   122
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   123
  NS_LOG_FUNCTION (this << &start);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   124
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   125
  SetBarControl (i.ReadLsbtohU16 ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   126
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   127
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   128
      SetStartingSequenceControl (i.ReadLsbtohU16 ());
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
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   131
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   132
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   133
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   134
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
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
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   137
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   138
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   139
        }
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
  return i.GetDistanceFrom (start);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   142
}
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   143
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   144
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   145
CtrlBAckRequestHeader::GetBarControl (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   146
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   147
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   148
  uint16_t res = 0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   149
  if (m_barAckPolicy)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   150
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   151
      res |= 0x1;
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
  if (m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   154
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   155
      res |= (0x1 << 1);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   156
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   157
  if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   158
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   159
      res |= (0x1 << 2);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   160
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   161
  res |= (m_tidInfo << 12) & (0xf << 12);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   162
  return res;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   163
}
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
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   166
CtrlBAckRequestHeader::SetBarControl (uint16_t bar)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   167
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   168
  NS_LOG_FUNCTION (this << bar);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   169
  m_barAckPolicy = ((bar & 0x01) == 1) ? true : false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   170
  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
   171
  m_compressed = (((bar >> 2) & 0x01) == 1) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   172
  m_tidInfo = (bar >> 12) & 0x0f;
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   175
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   176
CtrlBAckRequestHeader::GetStartingSequenceControl (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   177
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   178
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   179
  return (m_startingSeq << 4) & 0xfff0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   180
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   181
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   182
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   183
CtrlBAckRequestHeader::SetStartingSequenceControl (uint16_t seqControl)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   184
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   185
  NS_LOG_FUNCTION (this << seqControl);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   186
  m_startingSeq = (seqControl >> 4) & 0x0fff;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   187
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   188
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   189
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   190
CtrlBAckRequestHeader::SetHtImmediateAck (bool immediateAck)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   191
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   192
  NS_LOG_FUNCTION (this << immediateAck);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   193
  m_barAckPolicy = immediateAck;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   194
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   195
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   196
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   197
CtrlBAckRequestHeader::SetType (enum BlockAckType type)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   198
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   199
  NS_LOG_FUNCTION (this << type);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   200
  switch (type)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   201
    {
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   202
    case BASIC_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   203
      m_multiTid = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   204
      m_compressed = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   205
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   206
    case COMPRESSED_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   207
      m_multiTid = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   208
      m_compressed = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   209
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   210
    case MULTI_TID_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   211
      m_multiTid = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   212
      m_compressed = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   213
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   214
    default:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   215
      NS_FATAL_ERROR ("Invalid variant type");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   216
      break;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   217
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   218
}
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
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   221
CtrlBAckRequestHeader::SetTidInfo (uint8_t tid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   222
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   223
  NS_LOG_FUNCTION (this << static_cast<uint32_t> (tid));
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   224
  m_tidInfo = static_cast<uint16_t> (tid);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   225
}
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
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   228
CtrlBAckRequestHeader::SetStartingSequence (uint16_t seq)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   229
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   230
  NS_LOG_FUNCTION (this << seq);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   231
  m_startingSeq = seq;
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::MustSendHtImmediateAck (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   236
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   237
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   238
  return m_barAckPolicy;
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   241
uint8_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   242
CtrlBAckRequestHeader::GetTidInfo (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   243
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   244
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   245
  uint8_t tid = static_cast<uint8_t> (m_tidInfo);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   246
  return tid;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   247
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   248
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   249
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   250
CtrlBAckRequestHeader::GetStartingSequence (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   251
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   252
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   253
  return m_startingSeq;
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
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   257
CtrlBAckRequestHeader::IsBasic (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   258
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   259
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   260
  return (!m_multiTid && !m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   261
}
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
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   264
CtrlBAckRequestHeader::IsCompressed (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   265
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   266
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   267
  return (!m_multiTid && m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   268
}
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
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   271
CtrlBAckRequestHeader::IsMultiTid (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   272
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   273
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   274
  return (m_multiTid && m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   275
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   276
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   277
/***********************************
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   278
 *       Block ack response
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
10652
dc18deba4502 [doxygen] Revert r10410, r10411, r10412
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10410
diff changeset
   281
NS_OBJECT_ENSURE_REGISTERED (CtrlBAckResponseHeader);
5948
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
CtrlBAckResponseHeader::CtrlBAckResponseHeader ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   284
  : m_baAckPolicy (false),
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   285
    m_multiTid (false),
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   286
    m_compressed (false)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   287
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   288
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   289
  memset (&bitmap, 0, sizeof (bitmap));
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
CtrlBAckResponseHeader::~CtrlBAckResponseHeader ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   293
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   294
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   295
}
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   296
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   297
TypeId
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   298
CtrlBAckResponseHeader::GetTypeId (void)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   299
{
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   300
  static TypeId tid = TypeId ("ns3::CtrlBAckResponseHeader")
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   301
    .SetParent<Header> ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   302
    .AddConstructor<CtrlBAckResponseHeader> ()
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   303
  ;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   304
  return tid;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   305
}
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
TypeId
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   308
CtrlBAckResponseHeader::GetInstanceTypeId (void) const
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
  return GetTypeId ();
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   313
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   314
CtrlBAckResponseHeader::Print (std::ostream &os) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   315
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   316
  NS_LOG_FUNCTION (this << &os);
9877
7511dc1f8ae8 [Coverity] Not restoring ostream format (STREAM_FORMAT_STATE)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 9802
diff changeset
   317
  os << "TID_INFO=" << m_tidInfo << ", StartingSeq=" << std::hex << m_startingSeq << std::dec;
5948
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   320
uint32_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   321
CtrlBAckResponseHeader::GetSerializedSize (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   322
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   323
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   324
  uint32_t size = 0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   325
  size += 2; //Bar control
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   326
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   327
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   328
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   329
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   330
          size += (2 + 128); //Basic block ack
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
          size += (2 + 8); //Compressed block ack
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
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   337
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   338
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   339
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   340
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   341
          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
   342
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   343
      else
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
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   346
        }
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
  return size;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   349
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   350
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   351
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   352
CtrlBAckResponseHeader::Serialize (Buffer::Iterator start) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   353
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   354
  NS_LOG_FUNCTION (this << &start);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   355
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   356
  i.WriteHtolsbU16 (GetBaControl ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   357
  if (!m_multiTid)
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
      i.WriteHtolsbU16 (GetStartingSequenceControl ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   360
      i = SerializeBitmap (i);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   361
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   362
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   363
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   364
      if (m_compressed)
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
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
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
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   369
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   370
          NS_FATAL_ERROR ("Reserved configuration.");
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
    }
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
uint32_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   376
CtrlBAckResponseHeader::Deserialize (Buffer::Iterator start)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   377
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   378
  NS_LOG_FUNCTION (this << &start);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   379
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   380
  SetBaControl (i.ReadLsbtohU16 ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   381
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   382
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   383
      SetStartingSequenceControl (i.ReadLsbtohU16 ());
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   384
      i = DeserializeBitmap (i);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   385
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   386
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   387
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   388
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   389
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   390
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   391
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   392
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   393
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   394
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   395
        }
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
  return i.GetDistanceFrom (start);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   398
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   399
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   400
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   401
CtrlBAckResponseHeader::SetHtImmediateAck (bool immediateAck)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   402
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   403
  NS_LOG_FUNCTION (this << immediateAck);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   404
  m_baAckPolicy = immediateAck;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   405
}
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
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   408
CtrlBAckResponseHeader::SetType (enum BlockAckType type)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   409
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   410
  NS_LOG_FUNCTION (this << type);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   411
  switch (type)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   412
    {
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   413
    case BASIC_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   414
      m_multiTid = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   415
      m_compressed = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   416
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   417
    case COMPRESSED_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   418
      m_multiTid = false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   419
      m_compressed = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   420
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   421
    case MULTI_TID_BLOCK_ACK:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   422
      m_multiTid = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   423
      m_compressed = true;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   424
      break;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   425
    default:
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   426
      NS_FATAL_ERROR ("Invalid variant type");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   427
      break;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   428
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   429
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   430
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   431
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   432
CtrlBAckResponseHeader::SetTidInfo (uint8_t tid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   433
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   434
  NS_LOG_FUNCTION (this << static_cast<uint32_t> (tid));
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   435
  m_tidInfo = static_cast<uint16_t> (tid);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   436
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   437
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   438
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   439
CtrlBAckResponseHeader::SetStartingSequence (uint16_t seq)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   440
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   441
  NS_LOG_FUNCTION (this << seq);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   442
  m_startingSeq = seq;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   443
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   444
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   445
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   446
CtrlBAckResponseHeader::MustSendHtImmediateAck (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   447
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   448
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   449
  return (m_baAckPolicy) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   450
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   451
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   452
uint8_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   453
CtrlBAckResponseHeader::GetTidInfo (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   454
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   455
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   456
  uint8_t tid = static_cast<uint8_t> (m_tidInfo);
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   457
  return tid;
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   460
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   461
CtrlBAckResponseHeader::GetStartingSequence (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   462
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   463
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   464
  return m_startingSeq;
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
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   468
CtrlBAckResponseHeader::IsBasic (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   469
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   470
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   471
  return (!m_multiTid && !m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   472
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   473
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   474
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   475
CtrlBAckResponseHeader::IsCompressed (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   476
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   477
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   478
  return (!m_multiTid && m_compressed) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   479
}
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
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   482
CtrlBAckResponseHeader::IsMultiTid (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   483
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   484
  NS_LOG_FUNCTION (this);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   485
  return (m_multiTid && m_compressed) ? true : false;
5948
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
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   489
CtrlBAckResponseHeader::GetBaControl (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   490
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   491
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   492
  uint16_t res = 0;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   493
  if (m_baAckPolicy)
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   494
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   495
      res |= 0x1;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   496
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   497
  if (m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   498
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   499
      res |= (0x1 << 1);
5948
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
  if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   502
    {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   503
      res |= (0x1 << 2);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   504
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   505
  res |= (m_tidInfo << 12) & (0xf << 12);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   506
  return res;
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   509
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   510
CtrlBAckResponseHeader::SetBaControl (uint16_t ba)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   511
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   512
  NS_LOG_FUNCTION (this << ba);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   513
  m_baAckPolicy = ((ba & 0x01) == 1) ? true : false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   514
  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
   515
  m_compressed = (((ba >> 2) & 0x01) == 1) ? true : false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   516
  m_tidInfo = (ba >> 12) & 0x0f;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   517
}
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
uint16_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   520
CtrlBAckResponseHeader::GetStartingSequenceControl (void) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   521
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   522
  NS_LOG_FUNCTION (this);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   523
  return (m_startingSeq << 4) & 0xfff0;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   524
}
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
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   527
CtrlBAckResponseHeader::SetStartingSequenceControl (uint16_t seqControl)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   528
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   529
  NS_LOG_FUNCTION (this << seqControl);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   530
  m_startingSeq = (seqControl >> 4) & 0x0fff;
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
Buffer::Iterator
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   534
CtrlBAckResponseHeader::SerializeBitmap (Buffer::Iterator start) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   535
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   536
  NS_LOG_FUNCTION (this << &start);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   537
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   538
  if (!m_multiTid)
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
          for (uint32_t j = 0; j < 64; j++)
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
              i.WriteHtolsbU16 (bitmap.m_bitmap[j]);
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
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   547
      else
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
          i.WriteHtolsbU64 (bitmap.m_compressedBitmap);
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
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   553
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   554
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   555
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   556
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   557
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   558
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   559
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   560
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   561
        }
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
  return i;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   564
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   565
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   566
Buffer::Iterator
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   567
CtrlBAckResponseHeader::DeserializeBitmap (Buffer::Iterator start)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   568
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   569
  NS_LOG_FUNCTION (this << &start);
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   570
  Buffer::Iterator i = start;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   571
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   572
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   573
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   574
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   575
          for (uint32_t j = 0; j < 64; j++)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   576
            {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   577
              bitmap.m_bitmap[j] = i.ReadLsbtohU16 ();
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   578
            }
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
      else
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
          bitmap.m_compressedBitmap = i.ReadLsbtohU64 ();
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
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   586
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   587
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   588
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   589
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   590
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   591
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   592
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   593
          NS_FATAL_ERROR ("Reserved configuration.");
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
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   596
  return i;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   597
}
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
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   600
CtrlBAckResponseHeader::SetReceivedPacket (uint16_t seq)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   601
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   602
  NS_LOG_FUNCTION (this << seq);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   603
  if (!IsInBitmap (seq))
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   604
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   605
      return;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   606
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   607
  if (!m_multiTid)
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
      if (!m_compressed)
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
          /* 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
   612
             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
   613
          bitmap.m_bitmap[IndexInBitmap (seq)] |= 0x0001;
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
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   616
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   617
          bitmap.m_compressedBitmap |= (uint64_t (0x0000000000000001) << IndexInBitmap (seq));
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   618
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   619
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   620
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   621
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   622
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   623
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   624
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   625
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   626
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   627
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   628
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   629
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   630
    }
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   633
void
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   634
CtrlBAckResponseHeader::SetReceivedFragment (uint16_t seq, uint8_t frag)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   635
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   636
  NS_LOG_FUNCTION (this << seq << static_cast<uint32_t> (frag));
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   637
  NS_ASSERT (frag < 16);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   638
  if (!IsInBitmap (seq))
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   639
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   640
      return;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   641
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   642
  if (!m_multiTid)
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
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   645
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   646
          bitmap.m_bitmap[IndexInBitmap (seq)] |= (0x0001 << frag);
5948
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
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   649
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   650
          /* We can ignore this...compressed block ack doesn't support
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   651
             acknowledgement of single fragments */
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   652
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   653
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   654
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   655
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   656
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   657
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   658
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   659
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   660
      else
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
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   663
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   664
    }
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
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   667
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   668
CtrlBAckResponseHeader::IsPacketReceived (uint16_t seq) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   669
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   670
  NS_LOG_FUNCTION (this << seq);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   671
  if (!IsInBitmap (seq))
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   672
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   673
      return false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   674
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   675
  if (!m_multiTid)
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
          /*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
   680
          return false;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   681
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   682
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   683
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   684
          uint64_t mask = uint64_t (0x0000000000000001);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   685
          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
   686
        }
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
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   689
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   690
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   691
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   692
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   693
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   694
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   695
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   696
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   697
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   698
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   699
  return false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   700
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   701
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   702
bool
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   703
CtrlBAckResponseHeader::IsFragmentReceived (uint16_t seq, uint8_t frag) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   704
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   705
  NS_LOG_FUNCTION (this << seq << static_cast<uint32_t> (frag));
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   706
  NS_ASSERT (frag < 16);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   707
  if (!IsInBitmap (seq))
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   708
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   709
      return false;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   710
    }
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   711
  if (!m_multiTid)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   712
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   713
      if (!m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   714
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   715
          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
   716
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   717
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   718
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   719
          /* 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
   720
             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
   721
             were correctly received. */
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   722
          uint64_t mask = uint64_t (0x0000000000000001);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   723
          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
   724
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   725
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   726
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   727
    {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   728
      if (m_compressed)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   729
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   730
          NS_FATAL_ERROR ("Multi-tid block ack is not supported.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   731
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   732
      else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   733
        {
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   734
          NS_FATAL_ERROR ("Reserved configuration.");
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   735
        }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   736
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   737
  return false;
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   738
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   739
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   740
uint8_t
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   741
CtrlBAckResponseHeader::IndexInBitmap (uint16_t seq) const
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   742
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   743
  NS_LOG_FUNCTION (this << seq);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   744
  uint8_t index;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   745
  if (seq >= m_startingSeq)
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   746
    {
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   747
      index = seq - m_startingSeq;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   748
    }
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   749
  else
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   750
    {
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   751
      index = 4096 - m_startingSeq + seq;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   752
    }
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   753
  NS_ASSERT (index <= 63);
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   754
  return index;
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   755
}
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   756
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   757
bool
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   758
CtrlBAckResponseHeader::IsInBitmap (uint16_t seq) const
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   759
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   760
  NS_LOG_FUNCTION (this << seq);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   761
  return (seq - m_startingSeq + 4096) % 4096 < 64;
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   762
}
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   763
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   764
const uint16_t*
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   765
CtrlBAckResponseHeader::GetBitmap (void) const
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   766
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   767
  NS_LOG_FUNCTION (this);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   768
  return bitmap.m_bitmap;
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   769
}
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   770
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   771
uint64_t
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   772
CtrlBAckResponseHeader::GetCompressedBitmap (void) const
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   773
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   774
  NS_LOG_FUNCTION (this);
6588
a83484625502 Improve block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 5948
diff changeset
   775
  return bitmap.m_compressedBitmap;
5948
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   776
}
34bd93988e2b add block ack headers
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   777
6589
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   778
void
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   779
CtrlBAckResponseHeader::ResetBitmap (void)
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   780
{
9705
43fa2408aa05 Partially clean up function logging of wifi module.
Edvin Močibob <edvin.mocibob@gmail.com>
parents: 7386
diff changeset
   781
  NS_LOG_FUNCTION (this);
6589
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   782
  memset (&bitmap, 0, sizeof (bitmap));
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   783
}
385ef147f7b6 Add ResetBitmap method to block ack response header
Mirko Banchi <mk.banchi@gmail.com>
parents: 6588
diff changeset
   784
7386
2310ed220a61 standardize ns-3 namespace declaration format
Vedran Miletić <rivanvx@gmail.com>
parents: 7385
diff changeset
   785
}  // namespace ns3