src/devices/wimax/wimax-net-device.h
changeset 6111 0b22ae082153
child 6128 f448586c0e52
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/devices/wimax/wimax-net-device.h	Sun Mar 07 20:49:47 2010 +0100
@@ -0,0 +1,275 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2007,2008, 2009 INRIA, UDcast
+ *
+ * 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
+ *
+ * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
+ *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
+ */
+
+#ifndef WIMAX_NET_DEVICE_H
+#define WIMAX_NET_DEVICE_H
+
+#include "ns3/net-device.h"
+#include "ns3/event-id.h"
+#include "ns3/mac48-address.h"
+#include "cid.h"
+#include "wimax-connection.h"
+#include "cid-factory.h"
+#include "mac-messages.h"
+#include "dl-mac-messages.h"
+#include "ul-mac-messages.h"
+#include "ns3/traced-callback.h"
+#include "ns3/nstime.h"
+#include "ns3/log.h"
+#include "wimax-phy.h"
+#include "wimax-mac-header.h"
+
+namespace ns3 {
+
+class Node;
+class Packet;
+class TraceContext;
+class TraceResolver;
+class Channel;
+class WimaxChannel;
+class PacketBurst;
+class BurstProfileManager;
+class ConnectionManager;
+class ServiceFlowManager;
+class BandwidthManager;
+class UplinkScheduler;
+
+class WimaxNetDevice : public NetDevice
+{
+public:
+  enum Direction
+  {
+    DIRECTION_DOWNLINK, DIRECTION_UPLINK
+  };
+
+  enum RangingStatus
+  {
+    RANGING_STATUS_EXPIRED, RANGING_STATUS_CONTINUE, RANGING_STATUS_ABORT, RANGING_STATUS_SUCCESS
+  };
+
+  static TypeId GetTypeId (void);
+  WimaxNetDevice (void);
+  virtual ~WimaxNetDevice (void);
+  uint32_t GetMaxMsduSize (void) const;
+  /**
+   * \param ttg transmit/receive transition gap
+   */
+  void SetTtg (uint16_t ttg);
+  /**
+   * \returns transmit/receive transition gap
+   */
+  uint16_t GetTtg (void) const;
+  /**
+   * \param rtg receive/transmit transition gap
+   */
+  void SetRtg (uint16_t rtg);
+  /**
+   * \returns receive/transmit transition gap
+   */
+  uint16_t GetRtg (void) const;
+  void Attach (Ptr<WimaxChannel> channel);
+  /**
+   * \param phy the phy layer to use.
+   */
+  void SetPhy (Ptr<WimaxPhy> phy);
+  /**
+   * \returns a pointer to the physical layer.
+   */
+  Ptr<WimaxPhy> GetPhy (void) const;
+
+  /**
+   * \param wimaxChannel the channel to be used
+   */
+  void SetChannel (Ptr<WimaxChannel> wimaxChannel);
+
+  uint64_t GetChannel (uint8_t index) const;
+
+  void SetNrFrames (uint32_t nrFrames);
+  uint32_t GetNrFrames (void) const;
+  /**
+   * \param address the mac address of the net device
+   */
+  void SetMacAddress (Mac48Address address);
+  /**
+   * \returns the mac address of the net device
+   */
+  Mac48Address GetMacAddress (void) const;
+  void SetState (uint8_t state);
+  uint8_t GetState (void) const;
+  /**
+   * \returns the initial ranging connection
+   */
+  Ptr<WimaxConnection> GetInitialRangingConnection (void) const;
+  /**
+    * \returns the broadcast connection
+    */
+  Ptr<WimaxConnection> GetBroadcastConnection (void) const;
+
+  void SetCurrentDcd (Dcd dcd);
+  Dcd GetCurrentDcd (void) const;
+  void SetCurrentUcd (Ucd ucd);
+  Ucd GetCurrentUcd (void) const;
+  /**
+   * \returns the connection manager of the device
+   */
+  Ptr<ConnectionManager> GetConnectionManager (void) const;
+
+  /**
+   * \param  connectionManager the commection manager to be installed in the device
+   */
+  virtual void SetConnectionManager (Ptr<ConnectionManager> connectionManager );
+
+  /**
+   * \returns the burst profile manager currently installed in the device
+   */
+  Ptr<BurstProfileManager> GetBurstProfileManager (void) const;
+
+  /**
+   * \param burstProfileManager the burst profile manager to be installed on the device
+   */
+  void SetBurstProfileManager (Ptr<BurstProfileManager> burstProfileManager);
+
+  /**
+   * \returns the bandwidth manager installed on the device
+   */
+  Ptr<BandwidthManager> GetBandwidthManager (void) const;
+
+  /**
+   * \param bandwidthManager the bandwidth manager to be installed on the device
+   */
+  void SetBandwidthManager (Ptr<BandwidthManager> bandwidthManager);
+
+  /*
+   * \brief Creates the initial ranging and broadcast connections
+   */
+  void CreateDefaultConnections (void);
+
+  virtual void Start (void) = 0;
+  virtual void Stop (void) = 0;
+
+  void SetReceiveCallback (void);
+
+  void ForwardUp (Ptr<Packet> packet, const Mac48Address &source, const Mac48Address &dest);
+
+  virtual bool Enqueue (Ptr<Packet> packet, const MacHeaderType &hdrType, Ptr<WimaxConnection> connection) = 0;
+  void ForwardDown (Ptr<PacketBurst> burst, WimaxPhy::ModulationType modulationType);
+
+  // temp, shall be private
+  static uint8_t m_direction; // downlink or uplink
+
+  static Time m_frameStartTime; // temp, to determine the frame start time at SS side, shall actually be determined by frame start preamble
+
+  virtual void SetName (const std::string name);
+  virtual std::string GetName (void) const;
+  virtual void SetIfIndex (const uint32_t index);
+  virtual uint32_t GetIfIndex (void) const;
+  virtual Ptr<Channel> GetPhyChannel (void) const;
+  virtual Ptr<Channel> GetChannel (void) const;
+  virtual void SetAddress (Address address);
+  virtual Address GetAddress (void) const;
+  virtual bool SetMtu (const uint16_t mtu);
+  virtual uint16_t GetMtu (void) const;
+  virtual bool IsLinkUp (void) const;
+  virtual void SetLinkChangeCallback (Callback<void> callback);
+  virtual bool IsBroadcast (void) const;
+  virtual Address GetBroadcast (void) const;
+  virtual bool IsMulticast (void) const;
+  virtual Address GetMulticast (void) const;
+  virtual Address MakeMulticastAddress (Ipv4Address multicastGroup) const;
+  virtual bool IsPointToPoint (void) const;
+  virtual bool Send (Ptr<Packet> packet, const Address& dest, uint16_t protocolNumber);
+  virtual void SetNode (Ptr<Node> node);
+  virtual Ptr<Node> GetNode (void) const;
+  virtual bool NeedsArp (void) const;
+  virtual void SetReceiveCallback (NetDevice::ReceiveCallback cb);
+  virtual void AddLinkChangeCallback (Callback<void> callback);
+  virtual bool SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber);
+  virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
+  NetDevice::PromiscReceiveCallback GetPromiscReceiveCallback (void);
+  virtual bool SupportsSendFrom (void) const;
+
+  TracedCallback<Ptr<const Packet>, const Mac48Address&> m_traceRx;
+  TracedCallback<Ptr<const Packet>, const Mac48Address&> m_traceTx;
+
+  virtual void DoDispose (void);
+  virtual Address GetMulticast (Ipv6Address addr) const;
+  virtual Address GetMulticast (Ipv4Address multicastGroup) const;
+  virtual bool IsBridge (void) const;
+
+  Ptr<Object> GetMobility (void);
+  void SetMobility (Ptr<Object> mobility);
+
+  bool IsPromisc (void);
+  void NotifyPromiscTrace (Ptr<Packet> p);
+
+private:
+  virtual bool DoSend (Ptr<Packet> packet,
+                       const Mac48Address& source,
+                       const Mac48Address& dest,
+                       uint16_t protocolNumber) = 0;
+  virtual void DoReceive (Ptr<Packet> packet) = 0;
+  virtual Ptr<WimaxChannel> DoGetChannel (void) const;
+  void Receive (Ptr<const PacketBurst> burst);
+  void InitializeChannels (void);
+
+  Ptr<Node> m_node;
+  Ptr<WimaxPhy> m_phy;
+  NetDevice::ReceiveCallback m_forwardUp;
+  NetDevice::PromiscReceiveCallback m_promiscRx;
+
+  uint32_t m_ifIndex;
+  std::string m_name;
+  bool m_linkUp;
+  Callback<void> m_linkChange;
+  uint32_t m_maxMsduSize;
+  mutable uint16_t m_mtu;
+
+  // temp, shall be in BS. defined here to allow SS to access. SS shall actually determine it from DLFP, shall be moved to BS after DLFP is implemented
+  static uint32_t m_nrFrames;
+
+  // not sure if it shall be included here
+  std::vector<uint64_t> m_dlChannels;
+
+  Mac48Address m_address;
+  uint8_t m_state;
+  uint32_t m_symbolIndex;
+
+  // length of TTG and RTG, in units of PSs
+  uint16_t m_ttg;
+  uint16_t m_rtg;
+
+  Dcd m_currentDcd;
+  Ucd m_currentUcd;
+
+  Ptr<WimaxConnection> m_initialRangingConnection;
+  Ptr<WimaxConnection> m_broadcastConnection;
+
+  Ptr<ConnectionManager> m_connectionManager;
+  Ptr<BurstProfileManager> m_burstProfileManager;
+  Ptr<BandwidthManager> m_bandwidthManager;
+
+  Ptr<Object> m_mobility;
+
+};
+
+} // namespace ns3
+
+#endif /* WIMAX_NET_DEVICE_H */