src/lte/model/lte-rlc-um.h
author Manuel Requena <manuel.requena@cttc.es>
Wed, 09 May 2012 19:08:03 +0200
changeset 8745 b94de33b24d3
parent 8726 f6f0e2531457
child 9337 ae7126b266ce
permissions -rw-r--r--
Add maximum size to the RLC Transmission Buffer
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     2
/*
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     3
 * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     4
 *
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     8
 *
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    12
 * GNU General Public License for more details.
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    13
 *
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    17
 *
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    18
 * Author: Manuel Requena <manuel.requena@cttc.es>
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    19
 */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    20
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    21
#ifndef LTE_RLC_UM_H
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    22
#define LTE_RLC_UM_H
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    23
8572
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    24
#include "ns3/lte-rlc-sequence-number.h"
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    25
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    26
#include "ns3/lte-rlc.h"
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    27
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    28
#include <map>
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    29
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    30
namespace ns3 {
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    31
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    32
/**
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    33
 * LTE RLC Unacknowledged Mode (UM), see 3GPP TS 36.322
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    34
 */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    35
class LteRlcUm : public LteRlc
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    36
{
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    37
public:
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    38
  LteRlcUm ();
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    39
  virtual ~LteRlcUm ();
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    40
  static TypeId GetTypeId (void);
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    41
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    42
  /**
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    43
   * RLC SAP
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    44
   */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    45
  virtual void DoTransmitPdcpPdu (Ptr<Packet> p);
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    46
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    47
  /**
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    48
   * MAC SAP
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    49
   */
8714
398bbcbb3f42 Add MIMO model, test and documentation
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8572
diff changeset
    50
  virtual void DoNotifyTxOpportunity (uint32_t bytes, uint8_t layer);
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    51
  virtual void DoNotifyHarqDeliveryFailure ();
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    52
  virtual void DoReceivePdu (Ptr<Packet> p);
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    53
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    54
  void Start ();
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    55
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    56
private:
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    57
  void ExpireReorderingTimer (void);
8499
c2658133775b Add timer to send RBS to MAC
Manuel Requena <manuel.requena@cttc.es>
parents: 8375
diff changeset
    58
  void ExpireRbsTimer (void);
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    59
8572
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    60
  bool IsInsideReorderingWindow (SequenceNumber10 seqNumber);
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    61
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    62
  void ReassembleOutsideWindow (void);
8709
a64f5b0ff6f7 Fix bug in reassemble of RLC UM PDUs
Manuel Requena <manuel.requena@cttc.es>
parents: 8572
diff changeset
    63
  void ReassembleSnInterval (SequenceNumber10 lowSeqNumber, SequenceNumber10 highSeqNumber);
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    64
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    65
  void ReassembleAndDeliver (Ptr<Packet> packet);
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    66
8499
c2658133775b Add timer to send RBS to MAC
Manuel Requena <manuel.requena@cttc.es>
parents: 8375
diff changeset
    67
  void DoReportBufferStatus ();
c2658133775b Add timer to send RBS to MAC
Manuel Requena <manuel.requena@cttc.es>
parents: 8375
diff changeset
    68
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    69
private:
8745
b94de33b24d3 Add maximum size to the RLC Transmission Buffer
Manuel Requena <manuel.requena@cttc.es>
parents: 8726
diff changeset
    70
  uint32_t m_maxTxBufferSize;
8375
201d78643209 Add support for ReportBufferStatus parameters: txQueueSize and txQueueHolDelay
Manuel Requena <manuel.requena@cttc.es>
parents: 8361
diff changeset
    71
  uint32_t m_txBufferSize;
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    72
  std::vector < Ptr<Packet> > m_txBuffer;       // Transmission buffer
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    73
  std::map <uint16_t, Ptr<Packet> > m_rxBuffer; // Reception buffer
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    74
  std::vector < Ptr<Packet> > m_reasBuffer;     // Reassembling buffer
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    75
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    76
  std::list < Ptr<Packet> > m_sdusBuffer;       // List of SDUs in a packet
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    77
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    78
  /**
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    79
   * State variables. See section 7.1 in TS 36.322
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    80
   */
8572
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    81
  SequenceNumber10 m_sequenceNumber; // VT(US)
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    82
8572
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    83
  SequenceNumber10 m_vrUr;           // VR(UR)
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    84
  SequenceNumber10 m_vrUx;           // VR(UX)
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    85
  SequenceNumber10 m_vrUh;           // VR(UH)
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    86
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    87
  /**
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    88
   * Constants. See section 7.2 in TS 36.322
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    89
   */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    90
  uint16_t m_windowSize;
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    91
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    92
  /**
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    93
   * Timers. See section 7.3 in TS 36.322
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    94
   */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    95
  EventId m_reorderingTimer;
8499
c2658133775b Add timer to send RBS to MAC
Manuel Requena <manuel.requena@cttc.es>
parents: 8375
diff changeset
    96
  EventId m_rbsTimer;
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    97
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    98
  /**
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    99
   * Reassembling state
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   100
   */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   101
  typedef enum { NONE            = 0,
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   102
                 WAITING_S0_FULL = 1,
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   103
                 WAITING_SI_SF   = 2 } ReassemblingState_t;
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   104
  ReassemblingState_t m_reassemblingState;
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   105
  Ptr<Packet> m_keepS0;
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   106
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   107
  /**
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   108
   * Expected Sequence Number
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   109
   */
8572
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
   110
  SequenceNumber10 m_expectedSeqNumber;
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   111
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   112
};
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   113
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   114
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   115
} // namespace ns3
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   116
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   117
#endif // LTE_RLC_UM_H