Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(40)

Unified Diff: src/devices/uan/uan-mac-rc-gw.h

Issue 1350041: UAN module addition
Patch Set: Created 13 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/devices/uan/uan-mac-rc-gw.h
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/devices/uan/uan-mac-rc-gw.h
@@ -0,0 +1,162 @@
+/* -*- 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 UANMACRCGW_H
+#define UANMACRCGW_H
+
+#include "uan-mac.h"
+#include "uan-address.h"
+
+#include "ns3/nstime.h"
+#include "ns3/traced-callback.h"
+
+
+
+
+#include <set>
+#include <map>
+
+namespace ns3 {
+
+class UanTxMode;
+
+/**
+ * \class UanMacRcGw
+ *
+ * \brief Gateway side of RC-MAC
+ *
+ *
+ *
+ * This MAC protocol assumes a network topology where all traffic
+ * is destined for a set of GW nodes which are connected via
+ * some out of band (RF?) means. UanMacRcGw is the protocol
+ * which runs on the gateway nodes.
+ *
+ * This particular implementation
+ * assumes that there is only a single gateway.
+ *
+ * For more information on class operation email
+ * lentracy@u.washington.edu
+ * (This work is, as of yet, unpublished)
+ */
+
+class UanMacRcGw : public ns3::UanMac
+{
+public:
+ UanMacRcGw ();
+ virtual ~UanMacRcGw ();
+
+ static TypeId GetTypeId (void);
+
+ // Inherited virtual functions
+ virtual Address GetAddress (void);
+ 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;
+
+private:
+ enum State {
+ IDLE, INCYCLE, CTSING
+ };
+ State m_state;
+
+ struct Request
+ {
+ uint8_t numFrames;
+ uint8_t frameNo;
+ uint8_t retryNo;
+ uint16_t length;
+ Time rxTime;
+ };
+
+ struct AckData
+ {
+ uint8_t frameNo;
+ std::set<uint8_t> rxFrames;
+ uint8_t expFrames;
+ };
+ Callback<void, Ptr<Packet>, const UanAddress& > m_forwardUpCb;
+ Ptr<UanPhy> m_phy;
+ UanAddress m_address;
+ Time m_maxDelta;
+ Time m_sifs;
+ uint32_t m_maxRes;
+ uint32_t m_numRates;
+ uint32_t m_rtsSize;
+ uint32_t m_ctsSizeN;
+ uint32_t m_ctsSizeG;
+ uint32_t m_ackSize;
+ double m_retryRate;
+ uint16_t m_currentRetryRate;
+ uint32_t m_currentRateNum;
+ uint32_t m_numNodes;
+ uint32_t m_totalRate;
+ uint32_t m_rateStep;
+ uint32_t m_frameSize;
+
+ uint16_t m_numRetryRates;
+ double m_minRetryRate;
+ double m_retryStep;
+
+ std::map<UanAddress, Time> m_propDelay;
+
+ std::map<UanAddress, AckData> m_ackData;
+
+
+ std::map<UanAddress, Request> m_requests;
+ std::set<std::pair<Time, UanAddress> > m_sortedRes;
+
+ TracedCallback<Ptr<const Packet>, UanTxMode > m_rxLogger;
+
+ // Start time, min p-delay, reservations, frames, bytes, window size, ctl rate, retry rate
+ TracedCallback<Time, Time, uint32_t, uint32_t, double, uint32_t, double> m_cycleLogger;
+
+ void ReceivePacket (Ptr<Packet> pkt, double sinr, UanTxMode mode);
+ void StartCycle (void);
+ void EndCycle (void);
+ void SendPacket (Ptr<Packet> pkt, uint32_t rate);
+ void CycleStarted (void);
+ void ReceiveError (Ptr<Packet> pkt, double sinr);
+
+ // Stuff for computing exp throughput
+ double ComputeAlpha (uint32_t totalFrames, uint32_t totalBytes, uint32_t n, uint32_t a, double deltaK);
+ std::vector<double> GetExpPdk (void);
+ double ComputeExpS (uint32_t a, uint32_t ld, std::vector<double> exppdk);
+ double ComputeExpS (uint32_t a, uint32_t ld);
+ uint32_t CompExpMinIndex (uint32_t n, uint32_t k);
+ double ComputePiK (uint32_t a, uint32_t n, uint32_t k);
+ double ComputeExpBOverA (uint32_t n, uint32_t a, uint32_t ldlh, std::vector<double> deltaK);
+ uint64_t NchooseK (uint32_t n, uint32_t k);
+ uint32_t FindOptA (void);
+protected:
+ virtual void DoDispose ();
+
+};
+
+/**
+ * Defined for use in UanMacRcGw
+ */
+bool operator < (UanAddress &a, UanAddress &b);
+
+}
+
+#endif // UANMACRCGW_H

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b