This file is indexed.

/usr/include/ns3.26/ns3/uan-mac-cw.h is in libns3-dev 3.26+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
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
 * Copyright (c) 2009 University of Washington
 *
 * 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: Leonard Tracy <lentracy@gmail.com>
 */

#ifndef UAN_MAC_CW_H
#define UAN_MAC_CW_H

#include "ns3/uan-mac.h"
#include "ns3/nstime.h"
#include "ns3/simulator.h"
#include "ns3/uan-phy.h"
#include "ns3/uan-tx-mode.h"
#include "ns3/uan-address.h"
#include "ns3/random-variable-stream.h"

namespace ns3 {

/**
 * \ingroup uan
 *
 * CW-MAC protocol, similar in idea to the 802.11 DCF with
 * constant backoff window
 *
 * For more information on this MAC protocol, see:
 * Parrish, N.; Tracy, L.; Roy, S.; Arabshahi, P.; Fox, W.,
 * "System Design Considerations for Undersea Networks: Link and
 * Multiple Access Protocols," Selected Areas in Communications,
 * IEEE Journal on , vol.26, no.9, pp.1720-1730, December 2008
 */
class UanMacCw : public UanMac,
                 public UanPhyListener
{
public:
  /** Default constructor */
  UanMacCw ();
  /** Dummy destructor, DoDispose. */
  virtual ~UanMacCw ();
  /**
   * Register this type.
   * \return The TypeId.
   */
  static TypeId GetTypeId (void);

  /**
   * Set the contention window size.
   *   
   * \param cw Contention window size.
   */
  virtual void SetCw (uint32_t cw);
  /**
   * Set the slot time duration.
   *
   * \param duration Slot time duration.
   */
  virtual void SetSlotTime (Time duration);
  /**
   * Get the contention window size.
   *
   * \return Contention window size.
   */
  virtual uint32_t GetCw (void);
  /**
   * Get the slot time duration.
   *
   * \return Slot time duration.
   */
  virtual Time GetSlotTime (void);

  // Inherited methods from UanMac
  virtual Address GetAddress ();
  virtual void SetAddress (UanAddress addr);
  virtual bool Enqueue (Ptr<Packet> pkt, const Address &dest, uint16_t protocolNumber);
  virtual void SetForwardUpCb (Callback<void, Ptr<Packet>, const UanAddress&> cb);
  virtual void AttachPhy (Ptr<UanPhy> phy);
  virtual Address GetBroadcast (void) const;
  virtual void Clear (void);
  int64_t AssignStreams (int64_t stream);

  // Inherited methods from UanPhyListener
  virtual void NotifyRxStart (void);
  virtual void NotifyRxEndOk (void);
  virtual void NotifyRxEndError (void);
  virtual void NotifyCcaStart (void);
  virtual void NotifyCcaEnd (void);
  virtual void NotifyTxStart (Time duration);

  /**
   *  TracedCallback signature for enqueue/dequeue of a packet.
   *
   * \param [in] packet The Packet being received.
   * \param [in] proto The protocol number.
   */
  typedef void (* QueueTracedCallback)
    (Ptr<const Packet> packet, uint16_t proto);

private:
  /** Enum defining possible Phy states. */
  typedef enum {
    IDLE,     //!< Idle state.
    CCABUSY,  //!< Channel busy.
    RUNNING,  //!< Delay timer running.
    TX        //!< Transmitting.
  } State;

  /** Forwarding up callback. */
  Callback <void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
  /** The MAC address. */
  UanAddress m_address;
  /** PHY layer attached to this MAC. */
  Ptr<UanPhy> m_phy;
  /** A packet destined for this MAC was received. */
  TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
  /** A packet arrived at the MAC for transmission. */
  TracedCallback<Ptr<const Packet>, uint16_t  > m_enqueueLogger;
  /** A packet was passed down to the PHY from the MAC. */
  TracedCallback<Ptr<const Packet>, uint16_t  > m_dequeueLogger;

  // Mac parameters
  uint32_t m_cw;        //!< Contention window size.
  Time m_slotTime;      //!< Slot time duration.

  // State variables
  /** Time to send next packet. */
  Time m_sendTime;
  /** Remaining delay until next send. */
  Time m_savedDelayS;
  /** Next packet to send. */
  Ptr<Packet> m_pktTx;
  /** Next packet protocol number (usage varies by MAC). */
  uint16_t m_pktTxProt;
  /** Scheduled SendPacket event. */
  EventId m_sendEvent;
  /** Scheduled EndTx event. */
  EventId m_txEndEvent;
  /** Current state. */
  State m_state;

  /** Flag when we've been cleared */
  bool m_cleared;

  /** Provides uniform random variable for contention window. */
  Ptr<UniformRandomVariable> m_rv;

  /**
   * Receive packet from lower layer (passed to PHY as callback).
   *
   * \param packet Packet being received.
   * \param sinr SINR of received packet.
   * \param mode Mode of received packet.
   */
  void PhyRxPacketGood (Ptr<Packet> packet, double sinr, UanTxMode mode);
  /**
   * Packet received at lower layer in error.
   *
   * \param packet Packet received in error.
   * \param sinr SINR of received packet.
   */
  void PhyRxPacketError (Ptr<Packet> packet, double sinr);
  /** Cancel SendEvent and save remaining delay. */
  void SaveTimer (void);
  /** Schedule SendPacket after delay. */
  void StartTimer (void);
  /** Send packet on PHY. */
  void SendPacket (void);
  /** End TX state. */
  void EndTx (void);

protected:
  virtual void DoDispose ();

};  // class UanMacCw

} // namespace ns3

#endif /* UAN_MAC_CW_H */