src/wifi/model/edca-txop-n.cc
author Nicola Baldo <nicola@baldo.biz>
Sun, 10 Apr 2011 18:48:58 +0200
changeset 7013 1db4e43e30e8
parent 6852 8f1a53d3f6ca
child 7141 072fb225b714
permissions -rw-r--r--
fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     2
/*
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     3
 * Copyright (c) 2006, 2009 INRIA
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     4
 * Copyright (c) 2009 MIRKO BANCHI
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     5
 *
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
     9
 *
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    13
 * GNU General Public License for more details.
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    14
 *
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    18
 *
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    20
 * Author: Mirko Banchi <mk.banchi@gmail.com>
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    21
 */
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    22
#include "ns3/log.h"
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    23
#include "ns3/assert.h"
7013
1db4e43e30e8 fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    24
#include "ns3/pointer.h"
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    25
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    26
#include "edca-txop-n.h"
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    27
#include "mac-low.h"
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    28
#include "dcf-manager.h"
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    29
#include "mac-tx-middle.h"
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    30
#include "wifi-mac-trailer.h"
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    31
#include "wifi-mac.h"
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    32
#include "random-stream.h"
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    33
#include "wifi-mac-queue.h"
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    34
#include "msdu-aggregator.h"
5953
9e400f6b8a2c handle wifi action frames in high MACs
Mirko Banchi <mk.banchi@gmail.com>
parents: 5952
diff changeset
    35
#include "mgt-headers.h"
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
    36
#include "qos-blocked-destinations.h"
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    37
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    38
NS_LOG_COMPONENT_DEFINE ("EdcaTxopN");
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    39
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
    40
#undef NS_LOG_APPEND_CONTEXT
5999
ee04189aec1b [Bug 814] Check if m_low is not zero
Mirko Banchi <mk.banchi@gmail.com>
parents: 5976
diff changeset
    41
#define NS_LOG_APPEND_CONTEXT if (m_low != 0) {std::clog << "[mac=" << m_low->GetAddress () << "] ";}
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    42
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    43
namespace ns3 {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    44
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    45
class EdcaTxopN::Dcf : public DcfState
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    46
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    47
public:
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    48
  Dcf (EdcaTxopN *txop)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    49
    : m_txop (txop)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    50
  {}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    51
private:
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    52
  virtual void DoNotifyAccessGranted (void) {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    53
    m_txop->NotifyAccessGranted ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    54
  }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    55
  virtual void DoNotifyInternalCollision (void) {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    56
    m_txop->NotifyInternalCollision ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    57
  }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    58
  virtual void DoNotifyCollision (void) {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    59
    m_txop->NotifyCollision ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    60
  }
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
    61
  virtual void DoNotifyChannelSwitching (void) { 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
    62
    m_txop->NotifyChannelSwitching ();
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
    63
  }
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    64
  EdcaTxopN *m_txop;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    65
};
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    66
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    67
class EdcaTxopN::TransmissionListener : public MacLowTransmissionListener
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    68
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    69
public:
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    70
  TransmissionListener (EdcaTxopN *txop)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    71
    : MacLowTransmissionListener (),
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    72
      m_txop (txop) {}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    73
      
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    74
  virtual ~TransmissionListener () {}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    75
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    76
  virtual void GotCts (double snr, WifiMode txMode) {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    77
    m_txop->GotCts (snr, txMode);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    78
  }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    79
  virtual void MissedCts (void) {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    80
    m_txop->MissedCts ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    81
  }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    82
  virtual void GotAck (double snr, WifiMode txMode) {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    83
    m_txop->GotAck (snr, txMode);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    84
  }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    85
  virtual void MissedAck (void) {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    86
    m_txop->MissedAck ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    87
  }
5955
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
    88
  virtual void GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address source) {
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
    89
    m_txop->GotBlockAck (blockAck, source);
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
    90
  }
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
    91
  virtual void MissedBlockAck (void) {
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
    92
    m_txop->MissedBlockAck ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
    93
  }
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    94
  virtual void StartNext (void) {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    95
    m_txop->StartNext ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    96
  }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    97
  virtual void Cancel (void) {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    98
    m_txop->Cancel ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
    99
  }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   100
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   101
private:
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   102
  EdcaTxopN *m_txop;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   103
};
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   104
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   105
class EdcaTxopN::BlockAckEventListener : public MacLowBlockAckEventListener
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   106
{
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   107
public:
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   108
  BlockAckEventListener (EdcaTxopN *txop)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   109
    : MacLowBlockAckEventListener (),
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   110
      m_txop (txop) {}
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   111
  virtual ~BlockAckEventListener () {}
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   112
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   113
  virtual void BlockAckInactivityTimeout (Mac48Address address, uint8_t tid) {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   114
    m_txop->SendDelbaFrame (address, tid, false);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   115
  }
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   116
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   117
private:
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   118
  EdcaTxopN *m_txop;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   119
};
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   120
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   121
NS_OBJECT_ENSURE_REGISTERED (EdcaTxopN);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   122
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   123
TypeId
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   124
EdcaTxopN::GetTypeId (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   125
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   126
  static TypeId tid = TypeId ("ns3::EdcaTxopN")
6477
55e4c70ff299 fixed Bug 941 - Wifi Dcf attributes not reachable
Nicola Baldo <nbaldo@cttc.es>
parents: 6331
diff changeset
   127
    .SetParent (ns3::Dcf::GetTypeId ())
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   128
    .AddConstructor<EdcaTxopN> ()
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   129
    .AddAttribute ("BlockAckThreshold", "If number of packets in this queue reaches this value,\
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   130
                                         block ack mechanism is used. If this value is 0, block ack is never used.",
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   131
                   UintegerValue(0),
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   132
                   MakeUintegerAccessor (&EdcaTxopN::SetBlockAckThreshold,
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   133
                                         &EdcaTxopN::GetBlockAckThreshold),
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   134
                   MakeUintegerChecker<uint8_t> (0, 64))
5965
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   135
    .AddAttribute ("BlockAckInactivityTimeout", "Represents max time (blocks of 1024 micro seconds) allowed for block ack\
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   136
                                                 inactivity. If this value isn't equal to 0 a timer start after that a\
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   137
                                                 block ack setup is completed and will be reset every time that a block\
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   138
                                                 ack frame is received. If this value is 0, block ack inactivity timeout won't be used.",
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   139
                   UintegerValue(0),
6294
6cefb3c0696a add methods in QosWifiMacHelper for block ack parameters setup
Mirko Banchi <mk.banchi@gmail.com>
parents: 6242
diff changeset
   140
                   MakeUintegerAccessor (&EdcaTxopN::SetBlockAckInactivityTimeout),
5965
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   141
                   MakeUintegerChecker<uint16_t> ())
7013
1db4e43e30e8 fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   142
    .AddAttribute ("Queue", "The WifiMacQueue object",
1db4e43e30e8 fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   143
                   PointerValue (),
1db4e43e30e8 fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   144
                   MakePointerAccessor (&EdcaTxopN::GetQueue),
1db4e43e30e8 fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   145
                   MakePointerChecker<WifiMacQueue> ())
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   146
    ;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   147
  return tid;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   148
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   149
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   150
EdcaTxopN::EdcaTxopN ()
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   151
  : m_manager (0),
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   152
    m_currentPacket(0),
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   153
    m_aggregator (0),
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   154
    m_blockAckType (COMPRESSED_BLOCK_ACK)
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   155
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   156
  NS_LOG_FUNCTION (this);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   157
  m_transmissionListener = new EdcaTxopN::TransmissionListener (this);
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   158
  m_blockAckListener = new EdcaTxopN::BlockAckEventListener (this);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   159
  m_dcf = new EdcaTxopN::Dcf (this);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   160
  m_queue = CreateObject<WifiMacQueue> ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   161
  m_rng = new RealRandomStream ();
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   162
  m_qosBlockedDestinations = new QosBlockedDestinations ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   163
  m_baManager = new BlockAckManager ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   164
  m_baManager->SetQueue (m_queue);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   165
  m_baManager->SetBlockAckType (m_blockAckType);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   166
  m_baManager->SetBlockDestinationCallback (MakeCallback (&QosBlockedDestinations::Block, m_qosBlockedDestinations));
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   167
  m_baManager->SetUnblockDestinationCallback (MakeCallback (&QosBlockedDestinations::Unblock, m_qosBlockedDestinations));
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   168
  m_baManager->SetMaxPacketDelay (m_queue->GetMaxDelay ());
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   169
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   170
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   171
EdcaTxopN::~EdcaTxopN ()
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   172
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   173
  NS_LOG_FUNCTION (this);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   174
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   175
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   176
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   177
EdcaTxopN::DoDispose (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   178
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   179
  NS_LOG_FUNCTION (this);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   180
  m_queue = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   181
  m_low = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   182
  m_stationManager = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   183
  delete m_transmissionListener;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   184
  delete m_dcf;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   185
  delete m_rng;
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   186
  delete m_qosBlockedDestinations;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   187
  delete m_baManager;
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   188
  delete m_blockAckListener;
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   189
  m_transmissionListener = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   190
  m_dcf = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   191
  m_rng = 0;
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   192
  m_qosBlockedDestinations = 0;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   193
  m_baManager = 0;
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   194
  m_blockAckListener = 0;
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   195
  m_txMiddle = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   196
  m_aggregator = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   197
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   198
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   199
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   200
EdcaTxopN::SetManager (DcfManager *manager)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   201
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   202
  NS_LOG_FUNCTION (this << manager);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   203
  m_manager = manager;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   204
  m_manager->Add (m_dcf);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   205
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   206
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   207
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   208
EdcaTxopN::SetTxOkCallback (TxOk callback)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   209
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   210
  m_txOkCallback = callback;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   211
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   212
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   213
void 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   214
EdcaTxopN::SetTxFailedCallback (TxFailed callback)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   215
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   216
  m_txFailedCallback = callback;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   217
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   218
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   219
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   220
EdcaTxopN::SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> remoteManager)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   221
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   222
  NS_LOG_FUNCTION (this << remoteManager);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   223
  m_stationManager = remoteManager;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   224
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   225
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   226
EdcaTxopN::SetTypeOfStation (enum TypeOfStation type)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   227
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   228
  NS_LOG_FUNCTION (this << type);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   229
  m_typeOfStation = type;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   230
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   231
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   232
enum TypeOfStation
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   233
EdcaTxopN::GetTypeOfStation (void) const
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   234
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   235
  return m_typeOfStation;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   236
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   237
7013
1db4e43e30e8 fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   238
Ptr<WifiMacQueue >
1db4e43e30e8 fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   239
EdcaTxopN::GetQueue () const
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   240
{
7013
1db4e43e30e8 fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   241
  NS_LOG_FUNCTION (this);
1db4e43e30e8 fixed Bug 1090 - WifiMacQueue is not accessible through the attribute path
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   242
  return m_queue;
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   243
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   244
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   245
void 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   246
EdcaTxopN::SetMinCw (uint32_t minCw)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   247
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   248
  NS_LOG_FUNCTION (this << minCw);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   249
  m_dcf->SetCwMin (minCw);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   250
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   251
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   252
void 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   253
EdcaTxopN::SetMaxCw (uint32_t maxCw)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   254
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   255
  NS_LOG_FUNCTION (this << maxCw);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   256
  m_dcf->SetCwMax (maxCw);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   257
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   258
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   259
void 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   260
EdcaTxopN::SetAifsn (uint32_t aifsn)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   261
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   262
  NS_LOG_FUNCTION (this << aifsn);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   263
  m_dcf->SetAifsn (aifsn);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   264
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   265
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   266
uint32_t 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   267
EdcaTxopN::GetMinCw (void) const
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   268
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   269
  return m_dcf->GetCwMin ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   270
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   271
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   272
uint32_t 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   273
EdcaTxopN::GetMaxCw (void) const
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   274
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   275
  return m_dcf->GetCwMax ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   276
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   277
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   278
uint32_t 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   279
EdcaTxopN::GetAifsn (void) const
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   280
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   281
  return m_dcf->GetAifsn ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   282
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   283
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   284
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   285
EdcaTxopN::SetTxMiddle (MacTxMiddle *txMiddle)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   286
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   287
  m_txMiddle = txMiddle;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   288
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   289
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   290
Ptr<MacLow>
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   291
EdcaTxopN::Low (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   292
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   293
  return m_low;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   294
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   295
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   296
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   297
EdcaTxopN::SetLow(Ptr<MacLow> low)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   298
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   299
  NS_LOG_FUNCTION (this << low);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   300
  m_low = low;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   301
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   302
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   303
bool
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   304
EdcaTxopN::NeedsAccess (void) const
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   305
{
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   306
  return !m_queue->IsEmpty () || m_currentPacket != 0 || m_baManager->HasPackets ();
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   307
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   308
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   309
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   310
EdcaTxopN::NotifyAccessGranted (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   311
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   312
  NS_LOG_FUNCTION (this);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   313
  if (m_currentPacket == 0)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   314
    {
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   315
      if (m_queue->IsEmpty () && !m_baManager->HasPackets ())
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   316
        {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   317
          NS_LOG_DEBUG ("queue is empty");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   318
          return; 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   319
        }
6485
429560e899ab Bug 842 - During retransmission of a BAR i must wait for a Block ack response and not for a normal ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6477
diff changeset
   320
      if (m_baManager->HasBar (m_currentBar))
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   321
        {
6485
429560e899ab Bug 842 - During retransmission of a BAR i must wait for a Block ack response and not for a normal ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6477
diff changeset
   322
          SendBlockAckRequest (m_currentBar);
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   323
          return;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   324
        }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   325
      /* check if packets need retransmission are stored in BlockAckManager */
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   326
      m_currentPacket = m_baManager->GetNextPacket (m_currentHdr);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   327
      if (m_currentPacket == 0)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   328
        {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   329
          if (m_queue->PeekFirstAvailable (&m_currentHdr, m_currentPacketTimestamp, m_qosBlockedDestinations) == 0)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   330
            {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   331
              NS_LOG_DEBUG ("no available packets in the queue");
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   332
              return;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   333
            }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   334
          if (m_currentHdr.IsQosData () && !m_currentHdr.GetAddr1 ().IsBroadcast () &&
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   335
              m_blockAckThreshold > 0 &&
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   336
              !m_baManager->ExistsAgreement (m_currentHdr.GetAddr1 (), m_currentHdr.GetQosTid ()) &&
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   337
              SetupBlockAckIfNeeded ())
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   338
            {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   339
              return;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   340
            }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   341
          m_currentPacket = m_queue->DequeueFirstAvailable (&m_currentHdr, m_currentPacketTimestamp, m_qosBlockedDestinations);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   342
          NS_ASSERT (m_currentPacket != 0);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   343
          
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   344
          uint16_t sequence = m_txMiddle->GetNextSequenceNumberfor (&m_currentHdr);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   345
          m_currentHdr.SetSequenceNumber (sequence);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   346
          m_currentHdr.SetFragmentNumber (0);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   347
          m_currentHdr.SetNoMoreFragments ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   348
          m_currentHdr.SetNoRetry ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   349
          m_fragmentNumber = 0;
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   350
          NS_LOG_DEBUG ("dequeued size="<<m_currentPacket->GetSize ()<<
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   351
                    ", to="<<m_currentHdr.GetAddr1 ()<<
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   352
                    ", seq="<<m_currentHdr.GetSequenceControl ());
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   353
          if (m_currentHdr.IsQosData () && !m_currentHdr.GetAddr1 ().IsBroadcast ())
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   354
            {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   355
              VerifyBlockAck ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   356
            }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   357
        }
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   358
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   359
  MacLowTransmissionParameters params;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   360
  params.DisableOverrideDurationId ();
6242
803b7efd0117 Bug 841 - Multicast transmission breaks with QoS Wifi
Bruno Ranieri <Yrrsinn@googlemail.com>
parents: 6080
diff changeset
   361
  if (m_currentHdr.GetAddr1 ().IsGroup ()) 
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   362
    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   363
      params.DisableRts ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   364
      params.DisableAck ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   365
      params.DisableNextData ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   366
      m_low->StartTransmission (m_currentPacket,
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   367
                                &m_currentHdr,
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   368
                                params,
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   369
                                m_transmissionListener);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   370
      
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   371
      m_currentPacket = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   372
      m_dcf->ResetCw ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   373
      m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   374
      StartAccessIfNeeded ();
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   375
      NS_LOG_DEBUG ("tx broadcast");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   376
    }
6485
429560e899ab Bug 842 - During retransmission of a BAR i must wait for a Block ack response and not for a normal ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6477
diff changeset
   377
  else if (m_currentHdr.GetType() == WIFI_MAC_CTL_BACKREQ)
429560e899ab Bug 842 - During retransmission of a BAR i must wait for a Block ack response and not for a normal ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6477
diff changeset
   378
    {
429560e899ab Bug 842 - During retransmission of a BAR i must wait for a Block ack response and not for a normal ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6477
diff changeset
   379
      SendBlockAckRequest (m_currentBar);
429560e899ab Bug 842 - During retransmission of a BAR i must wait for a Block ack response and not for a normal ack
Mirko Banchi <mk.banchi@gmail.com>
parents: 6477
diff changeset
   380
    }
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   381
  else
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   382
    {
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   383
      if (m_currentHdr.IsQosData () && m_currentHdr.IsQosBlockAck ())
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   384
        {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   385
          params.DisableAck ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   386
        }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   387
      else
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   388
        {
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   389
          params.EnableAck ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   390
        }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   391
      if (NeedFragmentation () && ((m_currentHdr.IsQosData () && 
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   392
                                   !m_currentHdr.IsQosAmsdu ()) ||
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   393
                                   m_currentHdr.IsData ()) &&
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   394
                                  (m_blockAckThreshold == 0 ||
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   395
                                   m_blockAckType == BASIC_BLOCK_ACK))
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   396
        {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   397
          //With COMPRESSED_BLOCK_ACK fragmentation must be avoided.
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   398
          params.DisableRts ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   399
          WifiMacHeader hdr;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   400
          Ptr<Packet> fragment = GetFragmentPacket (&hdr);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   401
          if (IsLastFragment ()) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   402
            {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   403
              NS_LOG_DEBUG ("fragmenting last fragment size=" << fragment->GetSize ());
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   404
              params.DisableNextData ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   405
            } 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   406
          else 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   407
            {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   408
              NS_LOG_DEBUG ("fragmenting size=" << fragment->GetSize ());
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   409
              params.EnableNextData (GetNextFragmentSize ());
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   410
            }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   411
          m_low->StartTransmission (fragment, &hdr, params, 
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   412
                                    m_transmissionListener);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   413
        }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   414
      else
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   415
        {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   416
          WifiMacHeader peekedHdr;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   417
          if (m_currentHdr.IsQosData () &&
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   418
              m_queue->PeekByTidAndAddress (&peekedHdr, m_currentHdr.GetQosTid (), 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   419
                                            WifiMacHeader::ADDR1, m_currentHdr.GetAddr1 ()) &&
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   420
              !m_currentHdr.GetAddr1 ().IsBroadcast () &&
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   421
              m_aggregator != 0 && !m_currentHdr.IsRetry ())
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   422
            {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   423
              /* here is performed aggregation */
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   424
              Ptr<Packet> currentAggregatedPacket = Create<Packet> ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   425
              m_aggregator->Aggregate (m_currentPacket, currentAggregatedPacket,
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   426
                                       MapSrcAddressForAggregation (peekedHdr),
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   427
                                       MapDestAddressForAggregation (peekedHdr));
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   428
              bool aggregated = false;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   429
              bool isAmsdu = false;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   430
              Ptr<const Packet> peekedPacket = m_queue->PeekByTidAndAddress (&peekedHdr, m_currentHdr.GetQosTid (), 
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   431
                                                                             WifiMacHeader::ADDR1, 
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   432
                                                                             m_currentHdr.GetAddr1 ());
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   433
              while (peekedPacket != 0)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   434
                {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   435
                  aggregated = m_aggregator->Aggregate (peekedPacket, currentAggregatedPacket,
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   436
                                                        MapSrcAddressForAggregation (peekedHdr),
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   437
                                                        MapDestAddressForAggregation (peekedHdr));
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   438
                  if (aggregated) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   439
                    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   440
                      isAmsdu = true;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   441
                      m_queue->Remove (peekedPacket);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   442
                    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   443
                  else
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   444
                    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   445
                      break;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   446
                    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   447
                  peekedPacket = m_queue->PeekByTidAndAddress (&peekedHdr, m_currentHdr.GetQosTid (), 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   448
                                                               WifiMacHeader::ADDR1, m_currentHdr.GetAddr1 ());
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   449
                }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   450
              if (isAmsdu)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   451
                {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   452
                  m_currentHdr.SetQosAmsdu ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   453
                  m_currentHdr.SetAddr3 (m_low->GetBssid ());
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   454
                  m_currentPacket = currentAggregatedPacket;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   455
                  currentAggregatedPacket = 0;
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   456
                  NS_LOG_DEBUG ("tx unicast A-MSDU");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   457
                }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   458
            }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   459
          if (NeedRts ())
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   460
            {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   461
              params.EnableRts ();
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   462
              NS_LOG_DEBUG ("tx unicast rts");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   463
            } 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   464
          else 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   465
            {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   466
              params.DisableRts ();
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   467
              NS_LOG_DEBUG ("tx unicast");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   468
            }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   469
          params.DisableNextData ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   470
          m_low->StartTransmission (m_currentPacket, &m_currentHdr,
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   471
                                    params, m_transmissionListener);
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   472
          CompleteTx ();
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   473
        }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   474
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   475
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   476
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   477
void EdcaTxopN::NotifyInternalCollision (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   478
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   479
  NS_LOG_FUNCTION (this);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   480
  NotifyCollision ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   481
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   482
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   483
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   484
EdcaTxopN::NotifyCollision (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   485
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   486
  NS_LOG_FUNCTION (this);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   487
  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   488
  RestartAccessIfNeeded ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   489
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   490
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   491
void 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   492
EdcaTxopN::GotCts (double snr, WifiMode txMode)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   493
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   494
  NS_LOG_FUNCTION (this << snr << txMode);
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   495
  NS_LOG_DEBUG ("got cts");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   496
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   497
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   498
void 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   499
EdcaTxopN::MissedCts (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   500
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   501
  NS_LOG_FUNCTION (this);
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   502
  NS_LOG_DEBUG ("missed cts");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   503
  if (!NeedRtsRetransmission ())
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   504
    {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   505
      NS_LOG_DEBUG ("Cts Fail");
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   506
      m_stationManager->ReportFinalRtsFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   507
      if (!m_txFailedCallback.IsNull ()) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   508
        {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   509
          m_txFailedCallback (m_currentHdr);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   510
        }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   511
      // to reset the dcf.
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   512
      m_currentPacket = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   513
      m_dcf->ResetCw ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   514
    } 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   515
  else 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   516
    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   517
      m_dcf->UpdateFailedCw ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   518
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   519
  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   520
  RestartAccessIfNeeded ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   521
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   522
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
   523
void 
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
   524
EdcaTxopN::NotifyChannelSwitching (void)
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
   525
{
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
   526
  m_queue->Flush();
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
   527
  m_currentPacket = 0;
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
   528
}
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4720
diff changeset
   529
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   530
void
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   531
EdcaTxopN::Queue (Ptr<const Packet> packet, const WifiMacHeader &hdr)
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   532
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   533
  NS_LOG_FUNCTION (this << packet << &hdr);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   534
  WifiMacTrailer fcs;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   535
  uint32_t fullPacketSize = hdr.GetSerializedSize () + packet->GetSize () + fcs.GetSerializedSize ();
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   536
  m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   537
                                     packet, fullPacketSize);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   538
  m_queue->Enqueue (packet, hdr);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   539
  StartAccessIfNeeded ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   540
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   541
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   542
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   543
EdcaTxopN::GotAck (double snr, WifiMode txMode)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   544
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   545
  NS_LOG_FUNCTION (this << snr << txMode);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   546
  if (!NeedFragmentation () ||
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   547
      IsLastFragment () ||
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   548
      m_currentHdr.IsQosAmsdu ()) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   549
    {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   550
      NS_LOG_DEBUG ("got ack. tx done.");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   551
      if (!m_txOkCallback.IsNull ())
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   552
        {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   553
           m_txOkCallback (m_currentHdr);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   554
        }
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   555
      
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   556
      if (m_currentHdr.IsAction ())
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   557
        {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   558
          WifiActionHeader actionHdr;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   559
          Ptr<Packet> p = m_currentPacket->Copy ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   560
          p->RemoveHeader (actionHdr);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   561
          if (actionHdr.GetCategory () == WifiActionHeader::BLOCK_ACK &&
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   562
              actionHdr.GetAction ().blockAck == WifiActionHeader::BLOCK_ACK_DELBA)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   563
            {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   564
              MgtDelBaHeader delBa;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   565
              p->PeekHeader (delBa);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   566
              if (delBa.IsByOriginator ())
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   567
                {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   568
                  m_baManager->TearDownBlockAck (m_currentHdr.GetAddr1 (), delBa.GetTid ());
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   569
                }
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   570
              else
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   571
                {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   572
                  m_low->DestroyBlockAckAgreement (m_currentHdr.GetAddr1 (), delBa.GetTid ());
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   573
                }
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   574
            }
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   575
        }
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   576
      m_currentPacket = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   577
         
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   578
      m_dcf->ResetCw ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   579
      m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   580
      RestartAccessIfNeeded ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   581
    } 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   582
  else 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   583
    {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   584
      NS_LOG_DEBUG ("got ack. tx not done, size="<<m_currentPacket->GetSize ());
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   585
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   586
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   587
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   588
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   589
EdcaTxopN::MissedAck (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   590
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   591
  NS_LOG_FUNCTION (this);
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   592
  NS_LOG_DEBUG ("missed ack");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   593
  if (!NeedDataRetransmission ()) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   594
    {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   595
      NS_LOG_DEBUG ("Ack Fail");
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   596
      m_stationManager->ReportFinalDataFailed (m_currentHdr.GetAddr1 (), &m_currentHdr);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   597
      if (!m_txFailedCallback.IsNull ()) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   598
        {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   599
          m_txFailedCallback (m_currentHdr);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   600
        }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   601
      // to reset the dcf.
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   602
      m_currentPacket = 0;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   603
      m_dcf->ResetCw ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   604
    } 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   605
  else 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   606
    {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   607
      NS_LOG_DEBUG ("Retransmit");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   608
      m_currentHdr.SetRetry ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   609
      m_dcf->UpdateFailedCw ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   610
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   611
  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   612
  RestartAccessIfNeeded ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   613
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   614
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   615
void
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   616
EdcaTxopN::MissedBlockAck (void)
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   617
{
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   618
  NS_LOG_FUNCTION (this);
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   619
  NS_LOG_DEBUG ("missed block ack");
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   620
  //should i report this to station addressed by ADDR1?
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   621
  NS_LOG_DEBUG ("Retransmit block ack request");
5958
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   622
  m_currentHdr.SetRetry ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   623
  m_dcf->UpdateFailedCw ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   624
  
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   625
  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   626
  RestartAccessIfNeeded ();
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   627
}
dd0accd82659 add block ack timeouts
Mirko Banchi <mk.banchi@gmail.com>
parents: 5955
diff changeset
   628
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   629
Ptr<MsduAggregator>
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   630
EdcaTxopN::GetMsduAggregator (void) const
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   631
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   632
  return m_aggregator;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   633
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   634
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   635
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   636
EdcaTxopN::RestartAccessIfNeeded (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   637
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   638
  NS_LOG_FUNCTION (this);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   639
  if ((m_currentPacket != 0 ||
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   640
       !m_queue->IsEmpty () || m_baManager->HasPackets ()) &&
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   641
       !m_dcf->IsAccessRequested ())
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   642
    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   643
      m_manager->RequestAccess (m_dcf);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   644
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   645
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   646
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   647
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   648
EdcaTxopN::StartAccessIfNeeded (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   649
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   650
  NS_LOG_FUNCTION (this);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   651
  if (m_currentPacket == 0 &&
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   652
      (!m_queue->IsEmpty () || m_baManager->HasPackets ()) &&
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   653
      !m_dcf->IsAccessRequested ())
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   654
    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   655
      m_manager->RequestAccess (m_dcf);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   656
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   657
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   658
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   659
bool
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   660
EdcaTxopN::NeedRts (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   661
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   662
  return m_stationManager->NeedRts (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   663
                                    m_currentPacket);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   664
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   665
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   666
bool
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   667
EdcaTxopN::NeedRtsRetransmission (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   668
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   669
  return m_stationManager->NeedRtsRetransmission (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   670
                                                  m_currentPacket);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   671
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   672
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   673
bool
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   674
EdcaTxopN::NeedDataRetransmission (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   675
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   676
  return m_stationManager->NeedDataRetransmission (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   677
                                                   m_currentPacket);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   678
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   679
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   680
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   681
EdcaTxopN::NextFragment (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   682
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   683
  m_fragmentNumber++;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   684
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   685
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   686
void 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   687
EdcaTxopN::StartNext (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   688
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   689
  NS_LOG_FUNCTION (this);
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   690
  NS_LOG_DEBUG ("start next packet fragment");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   691
  /* this callback is used only for fragments. */
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   692
  NextFragment ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   693
  WifiMacHeader hdr;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   694
  Ptr<Packet> fragment = GetFragmentPacket (&hdr);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   695
  MacLowTransmissionParameters params;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   696
  params.EnableAck ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   697
  params.DisableRts ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   698
  params.DisableOverrideDurationId ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   699
  if (IsLastFragment ()) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   700
    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   701
      params.DisableNextData ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   702
    } 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   703
  else 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   704
    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   705
      params.EnableNextData (GetNextFragmentSize ());
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   706
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   707
  Low ()->StartTransmission (fragment, &hdr, params, m_transmissionListener);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   708
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   709
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   710
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   711
EdcaTxopN::Cancel (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   712
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   713
  NS_LOG_FUNCTION (this);
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   714
  NS_LOG_DEBUG ("transmission cancelled");
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   715
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   716
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   717
bool
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   718
EdcaTxopN::NeedFragmentation (void) const
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   719
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   720
  return m_stationManager->NeedFragmentation (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   721
                                              m_currentPacket);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   722
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   723
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   724
uint32_t
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   725
EdcaTxopN::GetFragmentSize (void)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   726
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   727
  return m_stationManager->GetFragmentSize (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   728
                                            m_currentPacket, m_fragmentNumber);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   729
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   730
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   731
uint32_t
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   732
EdcaTxopN::GetNextFragmentSize (void) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   733
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   734
  return m_stationManager->GetFragmentSize (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   735
                                            m_currentPacket, m_fragmentNumber + 1);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   736
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   737
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   738
uint32_t
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   739
EdcaTxopN::GetFragmentOffset (void) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   740
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   741
  return m_stationManager->GetFragmentOffset (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   742
                                              m_currentPacket, m_fragmentNumber);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   743
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   744
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   745
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   746
bool
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   747
EdcaTxopN::IsLastFragment (void) const
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   748
{
6065
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   749
  return m_stationManager->IsLastFragment (m_currentHdr.GetAddr1 (), &m_currentHdr,
0f012e7d9128 bug 602
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5819
diff changeset
   750
                                           m_currentPacket, m_fragmentNumber);
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   751
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   752
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   753
Ptr<Packet>
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   754
EdcaTxopN::GetFragmentPacket (WifiMacHeader *hdr)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   755
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   756
  *hdr = m_currentHdr;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   757
  hdr->SetFragmentNumber (m_fragmentNumber);
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   758
  uint32_t startOffset = GetFragmentOffset ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   759
  Ptr<Packet> fragment;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   760
  if (IsLastFragment ()) 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   761
    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   762
      hdr->SetNoMoreFragments ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   763
    } 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   764
  else 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   765
    {
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   766
      hdr->SetMoreFragments ();
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   767
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   768
  fragment = m_currentPacket->CreateFragment (startOffset, 
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   769
                                              GetFragmentSize ());
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   770
  return fragment;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   771
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   772
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   773
void
6331
eee2eab36748 Bug 910: Replace AccessClass with 802.11-style AcIndex
Dean Armstrong <deanarm@gmail.com>
parents: 6294
diff changeset
   774
EdcaTxopN::SetAccessCategory (enum AcIndex ac)
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   775
{
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   776
  m_ac = ac;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   777
}
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   778
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   779
Mac48Address
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   780
EdcaTxopN::MapSrcAddressForAggregation (const WifiMacHeader &hdr)
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   781
{
4434
5e3d1c06662f Fix build on osx-ppc optimized gcc 4.0.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4408
diff changeset
   782
  Mac48Address retval;
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   783
  if (m_typeOfStation == STA || m_typeOfStation == ADHOC_STA)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   784
    {
4434
5e3d1c06662f Fix build on osx-ppc optimized gcc 4.0.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4408
diff changeset
   785
      retval = hdr.GetAddr2 ();
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   786
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   787
  else
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   788
    {
4434
5e3d1c06662f Fix build on osx-ppc optimized gcc 4.0.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4408
diff changeset
   789
      retval = hdr.GetAddr3 ();
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   790
    }
4434
5e3d1c06662f Fix build on osx-ppc optimized gcc 4.0.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4408
diff changeset
   791
  return retval;
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   792
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   793
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   794
Mac48Address
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5189
diff changeset
   795
EdcaTxopN::MapDestAddressForAggregation (const WifiMacHeader &hdr)
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   796
{
4434
5e3d1c06662f Fix build on osx-ppc optimized gcc 4.0.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4408
diff changeset
   797
  Mac48Address retval;
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   798
  if (m_typeOfStation == AP || m_typeOfStation == ADHOC_STA)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   799
    {
4434
5e3d1c06662f Fix build on osx-ppc optimized gcc 4.0.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4408
diff changeset
   800
      retval = hdr.GetAddr1 ();
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   801
    }
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   802
  else
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   803
    {
4434
5e3d1c06662f Fix build on osx-ppc optimized gcc 4.0.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4408
diff changeset
   804
      retval = hdr.GetAddr3 ();
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   805
    }
4434
5e3d1c06662f Fix build on osx-ppc optimized gcc 4.0.1
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4408
diff changeset
   806
  return retval;
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   807
}
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   808
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   809
void
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   810
EdcaTxopN::SetMsduAggregator (Ptr<MsduAggregator> aggr)
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   811
{
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   812
  m_aggregator = aggr;
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
   813
}
5906
509b5089a081 Revert bug 706 fix because it breaks the regression testing
Faker Moatamri <faker.moatamri@sophia.inria.fr>
parents: 5903
diff changeset
   814
5952
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   815
void
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   816
EdcaTxopN::PushFront (Ptr<const Packet> packet, const WifiMacHeader &hdr)
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   817
{
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   818
  NS_LOG_FUNCTION (this << packet << &hdr);
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   819
  WifiMacTrailer fcs;
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   820
  uint32_t fullPacketSize = hdr.GetSerializedSize () + packet->GetSize () + fcs.GetSerializedSize ();
6068
a2127017ecb4 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6065 5999
diff changeset
   821
  m_stationManager->PrepareForQueue (hdr.GetAddr1 (), &hdr,
a2127017ecb4 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6065 5999
diff changeset
   822
                                     packet, fullPacketSize);
5952
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   823
  m_queue->PushFront (packet, hdr);
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   824
  StartAccessIfNeeded ();
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   825
}
0588b01cd77e WifiMacQueue now supports head pushing
Mirko Banchi <mk.banchi@gmail.com>
parents: 5906
diff changeset
   826
5953
9e400f6b8a2c handle wifi action frames in high MACs
Mirko Banchi <mk.banchi@gmail.com>
parents: 5952
diff changeset
   827
void
9e400f6b8a2c handle wifi action frames in high MACs
Mirko Banchi <mk.banchi@gmail.com>
parents: 5952
diff changeset
   828
EdcaTxopN::GotAddBaResponse (const MgtAddBaResponseHeader *respHdr, Mac48Address recipient)
9e400f6b8a2c handle wifi action frames in high MACs
Mirko Banchi <mk.banchi@gmail.com>
parents: 5952
diff changeset
   829
{
9e400f6b8a2c handle wifi action frames in high MACs
Mirko Banchi <mk.banchi@gmail.com>
parents: 5952
diff changeset
   830
  NS_LOG_FUNCTION (this);
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   831
  NS_LOG_DEBUG ("received ADDBA response from "<<recipient);
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   832
  uint8_t tid = respHdr->GetTid ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   833
  if (m_baManager->ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::PENDING))
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   834
   {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   835
     if (respHdr->GetStatusCode ().IsSuccess ())
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   836
       {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   837
         NS_LOG_DEBUG ("block ack agreement established with "<<recipient);
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   838
         m_baManager->UpdateAgreement (respHdr, recipient);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   839
       }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   840
     else
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   841
       {
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   842
         NS_LOG_DEBUG ("discard ADDBA response"<<recipient);
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   843
         m_baManager->NotifyAgreementUnsuccessful (recipient, tid);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   844
       }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   845
    }
5953
9e400f6b8a2c handle wifi action frames in high MACs
Mirko Banchi <mk.banchi@gmail.com>
parents: 5952
diff changeset
   846
  RestartAccessIfNeeded ();
9e400f6b8a2c handle wifi action frames in high MACs
Mirko Banchi <mk.banchi@gmail.com>
parents: 5952
diff changeset
   847
}
9e400f6b8a2c handle wifi action frames in high MACs
Mirko Banchi <mk.banchi@gmail.com>
parents: 5952
diff changeset
   848
5955
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
   849
void
5965
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   850
EdcaTxopN::GotDelBaFrame (const MgtDelBaHeader *delBaHdr, Mac48Address recipient)
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   851
{
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   852
  NS_LOG_FUNCTION (this);
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   853
  NS_LOG_DEBUG ("received DELBA frame from="<<recipient);
5965
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   854
  m_baManager->TearDownBlockAck (recipient, delBaHdr->GetTid ());
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   855
}
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   856
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   857
void
5955
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
   858
EdcaTxopN::GotBlockAck (const CtrlBAckResponseHeader *blockAck, Mac48Address recipient)
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
   859
{
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
   860
  NS_LOG_DEBUG ("got block ack from="<<recipient);
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   861
  m_baManager->NotifyGotBlockAck (blockAck, recipient);
5955
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
   862
  m_currentPacket = 0;
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
   863
  m_dcf->ResetCw ();
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
   864
  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
   865
  RestartAccessIfNeeded ();
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
   866
}
10fbe045901e add support for block ack in MacLowTransmissionListener
Mirko Banchi <mk.banchi@gmail.com>
parents: 5953
diff changeset
   867
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   868
void
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   869
EdcaTxopN::VerifyBlockAck (void)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   870
{
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   871
  NS_LOG_FUNCTION (this);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   872
  uint8_t tid = m_currentHdr.GetQosTid ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   873
  Mac48Address recipient = m_currentHdr.GetAddr1 ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   874
  uint16_t sequence = m_currentHdr.GetSequenceNumber ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   875
  if (m_baManager->ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::INACTIVE))
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   876
    {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   877
      m_baManager->SwitchToBlockAckIfNeeded (recipient, tid, sequence);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   878
    }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   879
  if (m_baManager->ExistsAgreementInState (recipient, tid, OriginatorBlockAckAgreement::ESTABLISHED))
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   880
    {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   881
      m_currentHdr.SetQosAckPolicy (WifiMacHeader::BLOCK_ACK);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   882
    }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   883
}
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   884
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   885
void
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   886
EdcaTxopN::CompleteTx (void)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   887
{
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   888
  if (m_currentHdr.IsQosData () && m_currentHdr.IsQosBlockAck ())
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   889
    {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   890
      if (!m_currentHdr.IsRetry ())
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   891
        {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   892
          m_baManager->StorePacket (m_currentPacket, m_currentHdr, m_currentPacketTimestamp);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   893
        }
6592
6ef5141e7bcf Packets that cannot be acknowledged in the block ack bitmap must not be transmitted
Mirko Banchi <mk.banchi@gmail.com>
parents: 6485
diff changeset
   894
      m_baManager->NotifyMpduTransmission (m_currentHdr.GetAddr1 (), m_currentHdr.GetQosTid (),
6ef5141e7bcf Packets that cannot be acknowledged in the block ack bitmap must not be transmitted
Mirko Banchi <mk.banchi@gmail.com>
parents: 6485
diff changeset
   895
                                           m_txMiddle->GetNextSeqNumberByTidAndAddress (m_currentHdr.GetQosTid (),
6ef5141e7bcf Packets that cannot be acknowledged in the block ack bitmap must not be transmitted
Mirko Banchi <mk.banchi@gmail.com>
parents: 6485
diff changeset
   896
                                                                                        m_currentHdr.GetAddr1 ()));
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   897
      //we are not waiting for an ack: transmission is completed
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   898
      m_currentPacket = 0;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   899
      m_dcf->ResetCw ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   900
      m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   901
      StartAccessIfNeeded ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   902
    }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   903
}
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   904
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   905
bool
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   906
EdcaTxopN::SetupBlockAckIfNeeded ()
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   907
{
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   908
  uint8_t tid = m_currentHdr.GetQosTid ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   909
  Mac48Address recipient = m_currentHdr.GetAddr1 ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   910
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   911
  uint32_t packets = m_queue->GetNPacketsByTidAndAddress (tid, WifiMacHeader::ADDR1, recipient);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   912
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   913
  if (packets >= m_blockAckThreshold)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   914
    {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   915
      /* Block ack setup */
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   916
      uint16_t startingSequence = m_txMiddle->GetNextSeqNumberByTidAndAddress (tid, recipient);
5965
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   917
      SendAddBaRequest (recipient, tid, startingSequence, m_blockAckInactivityTimeout, true);
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   918
      return true;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   919
    }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   920
  return false;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   921
}
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   922
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   923
void
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   924
EdcaTxopN::SendBlockAckRequest (const struct Bar &bar)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   925
{
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   926
  NS_LOG_FUNCTION (this);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   927
  WifiMacHeader hdr;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   928
  hdr.SetType (WIFI_MAC_CTL_BACKREQ);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   929
  hdr.SetAddr1 (bar.recipient);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   930
  hdr.SetAddr2 (m_low->GetAddress ());
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   931
  hdr.SetAddr3 (m_low->GetBssid ());
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   932
  hdr.SetDsNotTo ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   933
  hdr.SetDsNotFrom ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   934
  hdr.SetNoRetry ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   935
  hdr.SetNoMoreFragments ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   936
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   937
  m_currentPacket = bar.bar;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   938
  m_currentHdr = hdr;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   939
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   940
  MacLowTransmissionParameters params;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   941
  params.DisableRts ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   942
  params.DisableNextData ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   943
  params.DisableOverrideDurationId ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   944
  if (bar.immediate)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   945
    {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   946
      if (m_blockAckType == BASIC_BLOCK_ACK)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   947
        {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   948
          params.EnableBasicBlockAck ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   949
        }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   950
      else if (m_blockAckType == COMPRESSED_BLOCK_ACK)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   951
        {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   952
          params.EnableCompressedBlockAck ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   953
        }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   954
      else if (m_blockAckType == MULTI_TID_BLOCK_ACK)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   955
        {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   956
          NS_FATAL_ERROR ("Multi-tid block ack is not supported");
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   957
        }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   958
    }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   959
  else
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   960
    {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   961
      //Delayed block ack
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   962
      params.EnableAck ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   963
    }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   964
  m_low->StartTransmission (m_currentPacket, &m_currentHdr, params, m_transmissionListener);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   965
}
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   966
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   967
void
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   968
EdcaTxopN::CompleteConfig (void)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   969
{
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   970
  NS_LOG_FUNCTION (this);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   971
  m_baManager->SetTxMiddle (m_txMiddle);
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
   972
  m_low->RegisterBlockAckListenerForAc (m_ac, m_blockAckListener);
5965
4e64e751be07 add support to block ack tear down in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5964
diff changeset
   973
  m_baManager->SetBlockAckInactivityCallback (MakeCallback (&EdcaTxopN::SendDelbaFrame, this));
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   974
}
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   975
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   976
void
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   977
EdcaTxopN::SetBlockAckThreshold (uint8_t threshold)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   978
{
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   979
  m_blockAckThreshold = threshold;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   980
  m_baManager->SetBlockAckThreshold (threshold);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   981
}
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   982
6294
6cefb3c0696a add methods in QosWifiMacHelper for block ack parameters setup
Mirko Banchi <mk.banchi@gmail.com>
parents: 6242
diff changeset
   983
void
6cefb3c0696a add methods in QosWifiMacHelper for block ack parameters setup
Mirko Banchi <mk.banchi@gmail.com>
parents: 6242
diff changeset
   984
EdcaTxopN::SetBlockAckInactivityTimeout (uint16_t timeout)
6cefb3c0696a add methods in QosWifiMacHelper for block ack parameters setup
Mirko Banchi <mk.banchi@gmail.com>
parents: 6242
diff changeset
   985
{
6cefb3c0696a add methods in QosWifiMacHelper for block ack parameters setup
Mirko Banchi <mk.banchi@gmail.com>
parents: 6242
diff changeset
   986
  m_blockAckInactivityTimeout = timeout;
6cefb3c0696a add methods in QosWifiMacHelper for block ack parameters setup
Mirko Banchi <mk.banchi@gmail.com>
parents: 6242
diff changeset
   987
}
6cefb3c0696a add methods in QosWifiMacHelper for block ack parameters setup
Mirko Banchi <mk.banchi@gmail.com>
parents: 6242
diff changeset
   988
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   989
uint8_t
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   990
EdcaTxopN::GetBlockAckThreshold (void) const
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   991
{
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   992
  return m_blockAckThreshold;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   993
}
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   994
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   995
void
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   996
EdcaTxopN::SendAddBaRequest (Mac48Address dest, uint8_t tid, uint16_t startSeq, 
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   997
                             uint16_t timeout, bool immediateBAck)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   998
{
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
   999
  NS_LOG_FUNCTION (this);
5976
dba5c9b69c3b use NS_LOG_APPEND_CONTEXT instead of MY_DEBUG macro
Mirko Banchi <mk.banchi@gmail.com>
parents: 5965
diff changeset
  1000
  NS_LOG_DEBUG ("sent ADDBA request to "<<dest);
5963
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1001
  WifiMacHeader hdr;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1002
  hdr.SetAction ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1003
  hdr.SetAddr1 (dest);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1004
  hdr.SetAddr2 (m_low->GetAddress ());
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1005
  hdr.SetAddr3 (m_low->GetAddress ());
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1006
  hdr.SetDsNotTo ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1007
  hdr.SetDsNotFrom ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1008
  
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1009
  WifiActionHeader actionHdr;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1010
  WifiActionHeader::ActionValue action;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1011
  action.blockAck = WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1012
  actionHdr.SetAction (WifiActionHeader::BLOCK_ACK, action);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1013
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1014
  Ptr<Packet> packet = Create<Packet> ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1015
  /*Setting ADDBARequest header*/
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1016
  MgtAddBaRequestHeader reqHdr;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1017
  reqHdr.SetAmsduSupport (true);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1018
  if (immediateBAck)
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1019
    {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1020
      reqHdr.SetImmediateBlockAck ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1021
    }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1022
  else
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1023
    {
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1024
      reqHdr.SetDelayedBlockAck ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1025
    }
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1026
  reqHdr.SetTid (tid);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1027
  /* For now we don't use buffer size field in the ADDBA request frame. The recipient
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1028
   * will choose how many packets it can receive under block ack.
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1029
   */
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1030
  reqHdr.SetBufferSize (0);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1031
  reqHdr.SetTimeout (timeout);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1032
  reqHdr.SetStartingSequence (startSeq);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1033
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1034
  m_baManager->CreateAgreement (&reqHdr, dest);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1035
  
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1036
  packet->AddHeader (reqHdr);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1037
  packet->AddHeader (actionHdr);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1038
  
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1039
  m_currentPacket = packet;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1040
  m_currentHdr = hdr;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1041
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1042
  uint16_t sequence = m_txMiddle->GetNextSequenceNumberfor (&m_currentHdr);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1043
  m_currentHdr.SetSequenceNumber (sequence);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1044
  m_currentHdr.SetFragmentNumber (0);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1045
  m_currentHdr.SetNoMoreFragments ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1046
  m_currentHdr.SetNoRetry ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1047
  
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1048
  MacLowTransmissionParameters params;
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1049
  params.EnableAck ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1050
  params.DisableRts ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1051
  params.DisableNextData ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1052
  params.DisableOverrideDurationId ();
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1053
  
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1054
  m_low->StartTransmission (m_currentPacket, &m_currentHdr, params, 
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1055
                            m_transmissionListener);
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1056
}
5f82c5a7068e add support to block ack in EdcaTxopN
Mirko Banchi <mk.banchi@gmail.com>
parents: 5958
diff changeset
  1057
5964
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1058
void
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1059
EdcaTxopN::SendDelbaFrame (Mac48Address addr, uint8_t tid, bool byOriginator)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1060
{
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1061
  WifiMacHeader hdr;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1062
  hdr.SetAction ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1063
  hdr.SetAddr1 (addr);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1064
  hdr.SetAddr2 (m_low->GetAddress ());
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1065
  hdr.SetAddr3 (m_low->GetAddress ());
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1066
  hdr.SetDsNotTo ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1067
  hdr.SetDsNotFrom ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1068
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1069
  MgtDelBaHeader delbaHdr;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1070
  delbaHdr.SetTid (tid);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1071
  if (byOriginator)
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1072
    {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1073
      delbaHdr.SetByOriginator ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1074
    }
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1075
  else
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1076
    {
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1077
      delbaHdr.SetByRecipient ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1078
    }
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1079
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1080
  WifiActionHeader actionHdr;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1081
  WifiActionHeader::ActionValue action;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1082
  action.blockAck = WifiActionHeader::BLOCK_ACK_DELBA;
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1083
  actionHdr.SetAction (WifiActionHeader::BLOCK_ACK, action);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1084
  
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1085
  Ptr<Packet> packet = Create<Packet> ();
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1086
  packet->AddHeader (delbaHdr);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1087
  packet->AddHeader (actionHdr);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1088
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1089
  PushFront (packet, hdr);
8a59a619c30e add support to block ack tear down in MacLow
Mirko Banchi <mk.banchi@gmail.com>
parents: 5963
diff changeset
  1090
}
6080
41ee42654550 Bug 706
Kirill Andreev <andreev@iitp.ru>
parents: 6068
diff changeset
  1091
void
41ee42654550 Bug 706
Kirill Andreev <andreev@iitp.ru>
parents: 6068
diff changeset
  1092
EdcaTxopN::DoStart ()
41ee42654550 Bug 706
Kirill Andreev <andreev@iitp.ru>
parents: 6068
diff changeset
  1093
{
41ee42654550 Bug 706
Kirill Andreev <andreev@iitp.ru>
parents: 6068
diff changeset
  1094
  m_dcf->ResetCw ();
41ee42654550 Bug 706
Kirill Andreev <andreev@iitp.ru>
parents: 6068
diff changeset
  1095
  m_dcf->StartBackoffNow (m_rng->GetNext (0, m_dcf->GetCw ()));
41ee42654550 Bug 706
Kirill Andreev <andreev@iitp.ru>
parents: 6068
diff changeset
  1096
  ns3::Dcf::DoStart ();
41ee42654550 Bug 706
Kirill Andreev <andreev@iitp.ru>
parents: 6068
diff changeset
  1097
}
4408
76a169b3db3d add qos MACs
Mirko Banchi <mk.banchi@gmail.com>
parents:
diff changeset
  1098
} //namespace ns3