src/lte/model/lte-rlc-um.h
author Marco Miozzo <marco.miozzo@cttc.es>
Thu, 22 Mar 2012 18:16:01 +0100
changeset 8714 398bbcbb3f42
parent 8572 ada66b065cc2
child 8726 f6f0e2531457
permissions -rw-r--r--
Add MIMO model, test and documentation
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);
8572
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    63
  void ReassembleSnLessThan (SequenceNumber10 seqNumber);
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:
8375
201d78643209 Add support for ReportBufferStatus parameters: txQueueSize and txQueueHolDelay
Manuel Requena <manuel.requena@cttc.es>
parents: 8361
diff changeset
    70
  uint32_t m_txBufferSize;
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    71
  std::vector < Ptr<Packet> > m_txBuffer;       // Transmission buffer
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    72
  std::map <uint16_t, Ptr<Packet> > m_rxBuffer; // Reception buffer
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    73
  std::vector < Ptr<Packet> > m_reasBuffer;     // Reassembling buffer
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    74
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    75
  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
    76
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
   * State variables. See section 7.1 in TS 36.322
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    79
   */
8572
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    80
  SequenceNumber10 m_sequenceNumber; // VT(US)
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    81
8572
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    82
  SequenceNumber10 m_vrUr;           // VR(UR)
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    83
  SequenceNumber10 m_vrUx;           // VR(UX)
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
    84
  SequenceNumber10 m_vrUh;           // VR(UH)
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    85
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
   * Constants. See section 7.2 in TS 36.322
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    88
   */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    89
  uint16_t m_windowSize;
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    90
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
   * Timers. See section 7.3 in TS 36.322
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    93
   */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    94
  EventId m_reorderingTimer;
8499
c2658133775b Add timer to send RBS to MAC
Manuel Requena <manuel.requena@cttc.es>
parents: 8375
diff changeset
    95
  EventId m_rbsTimer;
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    96
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
   * Reassembling state
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
    99
   */
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   100
  typedef enum { NONE            = 0,
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   101
                 WAITING_S0_FULL = 1,
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   102
                 WAITING_SI_SF   = 2 } ReassemblingState_t;
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   103
  ReassemblingState_t m_reassemblingState;
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   104
  Ptr<Packet> m_keepS0;
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   105
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
   * Expected Sequence Number
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   108
   */
8572
ada66b065cc2 Fix processing of the sequence number
Manuel Requena <manuel.requena@cttc.es>
parents: 8499
diff changeset
   109
  SequenceNumber10 m_expectedSeqNumber;
8361
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   110
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
} // namespace ns3
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   115
d7f82b579891 UM RLC entity
Manuel Requena <manuel.requena@cttc.es>
parents:
diff changeset
   116
#endif // LTE_RLC_UM_H