This file is indexed.

/usr/include/ns3.27/ns3/lte-rlc-am-header.h is in libns3-dev 3.27+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
/*
 * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation;
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Author: Manuel Requena <manuel.requena@cttc.es>
 */

#ifndef LTE_RLC_AM_HEADER_H
#define LTE_RLC_AM_HEADER_H

#include "ns3/header.h"
#include "ns3/lte-rlc-sequence-number.h"

#include <list>

namespace ns3 {

/**
 * \ingroup lte
 * \brief The packet header for the AM Radio Link Control (RLC) protocol packets
 *
 * This class has fields corresponding to those in an RLC header as well as
 * methods for serialization to and deserialization from a byte buffer.
 * It follows 3GPP TS 36.322 Radio Link Control (RLC) protocol specification.
 */
class LteRlcAmHeader : public Header
{
public:

  /**
   * \brief Constructor
   *
   * Creates a null header
   */
  LteRlcAmHeader ();
  ~LteRlcAmHeader ();

  /// Set data PDU function
  void SetDataPdu (void);
  /**
   * Set control PDU function
   *
   * \param controlPduType
   */
  void SetControlPdu (uint8_t controlPduType);
  /**
   * Is data PDU function
   * \returns true if data PDU
   */
  bool IsDataPdu (void) const;
  /**
   * Is control PDU function
   * \returns true if control PDU
   */
  bool IsControlPdu (void) const;

  /// DataControlPdu_t enumeration
  typedef enum {
    CONTROL_PDU = 0,
    DATA_PDU    = 1
  } DataControlPdu_t; ///< DataControlPdu_t typedef

  /// ControlPduType_t enumeration
  typedef enum {
    STATUS_PDU = 000,
  } ControPduType_t; ///< ControPduType_t typedef

  //
  // DATA PDU
  //

  /**
   * Set sequence number
   *
   * \param sequenceNumber sequence number
   */
  void SetSequenceNumber (SequenceNumber10 sequenceNumber);
  /**
   * Get sequence number
   *
   * \returns sequence number
   */
  SequenceNumber10 GetSequenceNumber () const;

  /**
   * Set sequence number
   *
   * \param framingInfo framing info
   */
  void SetFramingInfo (uint8_t framingInfo);
  /**
   * Get framing info
   *
   * \returns framing info
   */
  uint8_t GetFramingInfo () const;

  /// FramingInfoFirstByte_t enumeration
  typedef enum {
    FIRST_BYTE    = 0x00,
    NO_FIRST_BYTE = 0x02
  } FramingInfoFirstByte_t; ///< FramingInfoFirstByte_t typedef

  /// FramingInfoLastByte_t enumeration
  typedef enum {
    LAST_BYTE    = 0x00,
    NO_LAST_BYTE = 0x01
  } FramingInfoLastByte_t; ///< FramingInfoLastByte_t typedef

  /**
   * Push extension bit function
   *
   * \param extensionBit the extension bit
   */
  void PushExtensionBit (uint8_t extensionBit);
  /**
   * Push length indicator function
   *
   * \param lengthIndicator the length indicator
   */
  void PushLengthIndicator (uint16_t lengthIndicator);

  /**
   * Pop extension bit function
   *
   * \returns the extension bit
   */
  uint8_t PopExtensionBit (void);
  /**
   * Pop length indicator function
   *
   * \returns the length indicator
   */
  uint16_t PopLengthIndicator (void);

  /// ExtensionBit_t typedef
  typedef enum {
    DATA_FIELD_FOLLOWS  = 0,
    E_LI_FIELDS_FOLLOWS = 1
  } ExtensionBit_t; ///< ExtensionBit_t typedef

  /**
   * Pop extension bit function
   *
   * \param resegFlag resegmentation flag
   */
  void SetResegmentationFlag (uint8_t resegFlag);
  /**
   * Get resegmentation flag function
   *
   * \returns resegmentation flag
   */
  uint8_t GetResegmentationFlag () const;

  /// ResegmentationFlag_t typedef
  typedef enum {
    PDU = 0,
    SEGMENT = 1
  } ResegmentationFlag_t; ///< ResegmentationFlag_t typedef

  /**
   * Set polling bit function
   *
   * \param pollingBit polling bit
   */
  void SetPollingBit (uint8_t pollingBit);
  /**
   * Get polling bit function
   *
   * \returns polling bit
   */
  uint8_t GetPollingBit () const;

  /// PollingBit_t enumeration
  typedef enum {
    STATUS_REPORT_NOT_REQUESTED = 0,
    STATUS_REPORT_IS_REQUESTED  = 1
  } PollingBit_t; ///< PollingBit_t typedef

  /**
   * Set last segment flag function
   *
   * \param lsf last segment flag
   */
  void SetLastSegmentFlag (uint8_t lsf);
  /**
   * Get last segment flag function
   *
   * \returns last segment flag
   */
  uint8_t GetLastSegmentFlag () const;

  /// LastSegmentFlag_t typedef
  typedef enum {
    NO_LAST_PDU_SEGMENT = 0,
    LAST_PDU_SEGMENT    = 1
  } LastSegmentFlag_t; ///< LastSegmentFlag_t enumeration

  /**
   * Set segment offset function
   *
   * \param segmentOffset segment offset
   */
  void SetSegmentOffset (uint16_t segmentOffset);
  /**
   * Get segment offset function
   *
   * \returns segment offset
   */
  uint16_t GetSegmentOffset () const;
  /**
   * Get last offset function
   *
   * \returns last offset
   */
  uint16_t GetLastOffset () const;

  //
  // CONTROL PDU
  //

  /**
   * Set ack sn function
   *
   * \param ackSn ack sn
   */
  void SetAckSn (SequenceNumber10 ackSn);
  /**
   * Get ack sn function
   *
   * \returns sequence numbr
   */
  SequenceNumber10 GetAckSn () const;


  /**
   * \brief Get the type ID.
   * \return the object TypeId
   */
  static TypeId GetTypeId (void);
  virtual TypeId GetInstanceTypeId (void) const;
  virtual void Print (std::ostream &os) const;
  virtual uint32_t GetSerializedSize (void) const;
  virtual void Serialize (Buffer::Iterator start) const;
  virtual uint32_t Deserialize (Buffer::Iterator start);

  /** 
   * 
   * 
   * \param bytes max allowed CONTROL PDU size
   * 
   * \return true if one more NACK would fit in the CONTROL PDU; false otherwise
   */
  bool OneMoreNackWouldFitIn (uint16_t bytes);

  /** 
   * Add one more NACK to the CONTROL PDU
   * 
   * \param nack 
   */
  void PushNack (int nack);

  /** 
   * 
   * 
   * \param nack SN of the NACK
   * 
   * \return true if the NACK is present in the STATUS PDU, false otherwise
   */
  bool IsNackPresent (SequenceNumber10 nack);


  /** 
   * Retrieve one NACK from the CONTROL PDU
   * 
   * 
   * \return the SN  >= 0 of the next nack; returns -1 if no NACK is left
   */
  int PopNack (void);


private:
  uint16_t m_headerLength; ///< header length
  uint8_t  m_dataControlBit; ///< data control bit

  // Data PDU fields
  uint8_t  m_resegmentationFlag; ///< resegmentation flag
  uint8_t  m_pollingBit; ///< polling bit
  uint8_t  m_framingInfo;      ///<  2 bits
  SequenceNumber10 m_sequenceNumber; ///< sequence number
  uint8_t  m_lastSegmentFlag; ///< last segment flag
  uint16_t m_segmentOffset; ///< segment offset
  uint16_t m_lastOffset; ///< last offset

  std::list <uint8_t> m_extensionBits; ///< Includes extensionBit of the fixed part
  std::list <uint16_t> m_lengthIndicators; ///< length indicators

  // Control PDU fields
  uint8_t  m_controlPduType; ///< control PDU type 

  // Status PDU fields
  SequenceNumber10 m_ackSn; ///< ack sn
  std::list <int> m_nackSnList; ///< nack sn list

  std::list <uint8_t> m_extensionBits1; ///< Includes E1 after ACK_SN
  std::list <uint8_t> m_extensionBits2; ///< extension bits 2

};

}; // namespace ns3

#endif // LTE_RLC_AM_HEADER_H