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

Unified Diff: src/helper/uan-helper.cc

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/helper/uan-helper.cc
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/helper/uan-helper.cc
@@ -0,0 +1,228 @@
+/*
+ * uan-helper.cc
+ *
+ * Copyright (c) 2008 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
+ *
+ * Created on: 9-Oct-2008
+ * Author: Leonard Tracy <lentracy@u.washington.edu>
+ *
+ *
+ */
+
+#include "uan-helper.h"
+#include "ns3/uan-net-device.h"
+#include "ns3/uan-mac.h"
+#include "ns3/uan-phy.h"
+#include "ns3/uan-channel.h"
+#include "ns3/uan-prop-model.h"
+#include "ns3/uan-prop-model-ideal.h"
+#include "ns3/uan-transducer.h"
+#include "ns3/mobility-model.h"
+#include "ns3/log.h"
+#include "ns3/uan-tx-mode.h"
+#include "ns3/config.h"
+#include "ns3/simulator.h"
+#include "ns3/uan-noise-model-default.h"
+
+#include <sstream>
+#include <string>
+
+NS_LOG_COMPONENT_DEFINE("UanHelper");
+namespace ns3
+{
+
+static void AsciiPhyTxEvent (std::ostream *os, std::string context,
+ Ptr<const Packet> packet, double txPowerDb, UanTxMode mode)
+{
+ *os << "+ " << Simulator::Now ().GetSeconds () << " " << context << " " << *packet << std::endl;
+}
+
+static void AsciiPhyRxOkEvent (std::ostream *os, std::string context,
+ Ptr<const Packet> packet, double snr, UanTxMode mode)
+{
+ *os << "r " << Simulator::Now ().GetSeconds () << " " << context << " " << *packet << std::endl;
+}
+
+UanHelper::UanHelper ()
+{
+ m_mac.SetTypeId ("ns3::UanMacAloha");
+ m_phy.SetTypeId ("ns3::UanPhyGen");
+ m_transducer.SetTypeId ("ns3::UanTransducerHd");
+
+}
+
+UanHelper::~UanHelper ()
+{
+
+}
+
+
+void
+UanHelper::SetMac (std::string macType,
+ std::string n0, const AttributeValue &v0,
+ std::string n1, const AttributeValue &v1,
+ std::string n2, const AttributeValue &v2,
+ std::string n3, const AttributeValue &v3,
+ std::string n4, const AttributeValue &v4,
+ std::string n5, const AttributeValue &v5,
+ std::string n6, const AttributeValue &v6,
+ std::string n7, const AttributeValue &v7)
+{
+ m_mac = ObjectFactory ();
+ m_mac.SetTypeId (macType);
+ m_mac.Set (n0, v0);
+ m_mac.Set (n1, v1);
+ m_mac.Set (n2, v2);
+ m_mac.Set (n3, v3);
+ m_mac.Set (n4, v4);
+ m_mac.Set (n5, v5);
+ m_mac.Set (n6, v6);
+ m_mac.Set (n7, v7);
+}
+
+void
+UanHelper::SetPhy (std::string phyType,
+ std::string n0, const AttributeValue &v0,
+ std::string n1, const AttributeValue &v1,
+ std::string n2, const AttributeValue &v2,
+ std::string n3, const AttributeValue &v3,
+ std::string n4, const AttributeValue &v4,
+ std::string n5, const AttributeValue &v5,
+ std::string n6, const AttributeValue &v6,
+ std::string n7, const AttributeValue &v7)
+{
+ m_phy = ObjectFactory ();
+ m_phy.SetTypeId (phyType);
+ m_phy.Set (n0, v0);
+ m_phy.Set (n1, v1);
+ m_phy.Set (n2, v2);
+ m_phy.Set (n3, v3);
+ m_phy.Set (n4, v4);
+ m_phy.Set (n5, v5);
+ m_phy.Set (n6, v6);
+ m_phy.Set (n7, v7);
+
+}
+
+void
+UanHelper::SetTransducer (std::string type,
+ std::string n0, const AttributeValue &v0,
+ std::string n1, const AttributeValue &v1,
+ std::string n2, const AttributeValue &v2,
+ std::string n3, const AttributeValue &v3,
+ std::string n4, const AttributeValue &v4,
+ std::string n5, const AttributeValue &v5,
+ std::string n6, const AttributeValue &v6,
+ std::string n7, const AttributeValue &v7)
+{
+ m_transducer = ObjectFactory ();
+ m_transducer.SetTypeId (type);
+ m_transducer.Set (n0, v0);
+ m_transducer.Set (n1, v1);
+ m_transducer.Set (n2, v2);
+ m_transducer.Set (n3, v3);
+ m_transducer.Set (n4, v4);
+ m_transducer.Set (n5, v5);
+ m_transducer.Set (n6, v6);
+ m_transducer.Set (n7, v7);
+
+}
+
+void
+UanHelper::EnableAscii (std::ostream &os, uint32_t nodeid, uint32_t deviceid)
+{
+ Packet::EnablePrinting ();
+ std::ostringstream oss;
+
+ oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::UanNetDevice/Phy/RxOk";
+ Config::Connect (oss.str (), MakeBoundCallback (&AsciiPhyRxOkEvent, &os));
+
+ oss.str ("");
+
+ oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid << "/$ns3::UanNetDevice/Phy/Tx";
+ Config::Connect (oss.str (), MakeBoundCallback (&AsciiPhyTxEvent, &os));
+}
+
+void
+UanHelper::EnableAscii (std::ostream &os, NetDeviceContainer d)
+{
+ for (NetDeviceContainer::Iterator i = d.Begin (); i != d.End (); ++i)
+ {
+ Ptr<NetDevice> dev = *i;
+ EnableAscii (os, dev->GetNode ()->GetId (), dev->GetIfIndex ());
+ }
+}
+
+void
+UanHelper::EnableAscii (std::ostream &os, NodeContainer n)
+{
+ NetDeviceContainer devs;
+ for (NodeContainer::Iterator i = n.Begin (); i != n.End (); ++i)
+ {
+ Ptr<Node> node = *i;
+ for (uint32_t j = 0; j < node->GetNDevices (); ++j)
+ {
+ devs.Add (node->GetDevice (j));
+ }
+ }
+ EnableAscii (os, devs);
+}
+
+void
+UanHelper::EnableAsciiAll (std::ostream &os)
+{
+ EnableAscii (os, NodeContainer::GetGlobal ());
+}
+
+NetDeviceContainer
+UanHelper::Install (NodeContainer c) const
+{
+
+ Ptr<UanChannel> channel = CreateObject<UanChannel> ();
+ Ptr<UanNoiseModelDefault> noise =CreateObject<UanNoiseModelDefault> ();
+ channel->SetPropagationModel (CreateObject<UanPropModelIdeal> ());
+ channel->SetNoiseModel (noise);
+
+ return Install (c, channel);
+}
+
+NetDeviceContainer
+UanHelper::Install (NodeContainer c, Ptr<UanChannel> channel) const
+{
+ NetDeviceContainer devices;
+ for (NodeContainer::Iterator i = c.Begin (); i != c.End (); i++)
+ {
+ Ptr<Node> node = *i;
+ Ptr<UanNetDevice> device = CreateObject<UanNetDevice> ();
+
+ Ptr<UanMac> mac = m_mac.Create<UanMac> ();
+ Ptr<UanPhy> phy = m_phy.Create<UanPhy> ();
+ Ptr<UanTransducer> trans = m_transducer.Create<UanTransducer> ();
+
+ mac->SetAddress (UanAddress::Allocate ());
+ device->SetMac (mac);
+ device->SetPhy (phy);
+ device->SetTransducer(trans);
+ device->SetChannel (channel);
+
+ node->AddDevice (device);
+ devices.Add (device);
+ NS_LOG_DEBUG ("node="<<node<<", mob="<<node->GetObject<MobilityModel> ());
+ }
+ return devices;
+}
+
+} //end namespace ns3

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