--- a/samples/wscript Fri Aug 24 12:45:45 2007 +0200
+++ b/samples/wscript Fri Aug 24 15:12:12 2007 +0200
@@ -41,3 +41,7 @@
['core', 'simulator', 'mobility'])
obj.source = 'main-random-topology.cc'
+ obj = bld.create_ns3_program('main-adhoc-wifi',
+ ['core', 'simulator', 'mobility', 'wifi'])
+ obj.source = 'main-adhoc-wifi.cc'
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/devices/wifi/propagation-delay-model.cc Fri Aug 24 15:12:12 2007 +0200
@@ -0,0 +1,45 @@
+#include "propagation-delay-model.h"
+#include "ns3/random-variable.h"
+
+namespace ns3 {
+
+PropagationDelayModel::~PropagationDelayModel ()
+{}
+
+RandomPropagationDelayModel::RandomPropagationDelayModel (const RandomVariable &variable)
+ : m_variable (variable.Copy ())
+{}
+RandomPropagationDelayModel::~RandomPropagationDelayModel ()
+{
+ delete m_variable;
+}
+Time
+RandomPropagationDelayModel::GetDelay (double distance) const
+{
+ return Seconds (m_variable->GetValue ());
+}
+
+ConstantSpeedPropagationDelayModel::ConstantSpeedPropagationDelayModel ()
+ : m_speed (300000000.0)
+{}
+ConstantSpeedPropagationDelayModel::ConstantSpeedPropagationDelayModel (double speed)
+ : m_speed (speed)
+{}
+Time
+ConstantSpeedPropagationDelayModel::GetDelay (double distance) const
+{
+ double seconds = distance / m_speed;
+ return Seconds (seconds);
+}
+void
+ConstantSpeedPropagationDelayModel::SetSpeed (double speed)
+{
+ m_speed = speed;
+}
+double
+ConstantSpeedPropagationDelayModel::GetSpeed (void) const
+{
+ return m_speed;
+}
+
+} // namespace ns3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/devices/wifi/propagation-delay-model.h Fri Aug 24 15:12:12 2007 +0200
@@ -0,0 +1,43 @@
+#ifndef PROPAGATION_DELAY_MODEL_H
+#define PROPAGATION_DELAY_MODEL_H
+
+#include "ns3/ptr.h"
+#include "ns3/object.h"
+#include "ns3/nstime.h"
+
+namespace ns3 {
+
+class RandomVariable;
+
+class PropagationDelayModel : public Object
+{
+public:
+ virtual ~PropagationDelayModel ();
+ virtual Time GetDelay (double distance) const = 0;
+};
+
+class RandomPropagationDelayModel : public PropagationDelayModel
+{
+public:
+ RandomPropagationDelayModel (const RandomVariable &variable);
+ virtual ~RandomPropagationDelayModel ();
+ virtual Time GetDelay (double distance) const;
+private:
+ RandomVariable *m_variable;
+};
+
+class ConstantSpeedPropagationDelayModel : public PropagationDelayModel
+{
+public:
+ ConstantSpeedPropagationDelayModel ();
+ ConstantSpeedPropagationDelayModel (double speed);
+ virtual Time GetDelay (double distance) const;
+ void SetSpeed (double speed);
+ double GetSpeed (void) const;
+private:
+ double m_speed;
+};
+
+} // namespace ns3
+
+#endif /* PROPAGATION_DELAY_MODEL_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/devices/wifi/propagation-loss-model.cc Fri Aug 24 15:12:12 2007 +0200
@@ -0,0 +1,121 @@
+#include "propagation-loss-model.h"
+#include <math.h>
+
+namespace ns3 {
+
+const double FriisPropagationLossModel::PI = 3.1415;
+
+PropagationLossModel::~PropagationLossModel ()
+{}
+
+FriisPropagationLossModel::FriisPropagationLossModel ()
+ : m_lambda (),
+ m_systemLoss (1.0)
+{}
+void
+FriisPropagationLossModel::SetSystemLoss (double systemLoss)
+{
+ m_systemLoss = systemLoss;
+}
+double
+FriisPropagationLossModel::GetSystemLoss (void) const
+{
+ return m_systemLoss;
+}
+void
+FriisPropagationLossModel::SetLambda (double frequency, double speed)
+{
+ m_lambda = speed / frequency;
+}
+void
+FriisPropagationLossModel::SetLambda (double lambda)
+{
+ m_lambda = lambda;
+}
+double
+FriisPropagationLossModel::GetLambda (void) const
+{
+ return m_lambda;
+}
+
+double
+FriisPropagationLossModel::DbmToW (double dbm) const
+{
+ double mw = pow(10.0,dbm/10.0);
+ return mw / 1000.0;
+}
+
+double
+FriisPropagationLossModel::DbmFromW (double w) const
+{
+ double dbm = log10 (w * 1000.0) * 10.0;
+ return dbm;
+}
+
+
+double
+FriisPropagationLossModel::GetRxPower (double txPowerDbm,
+ double distance) const
+{
+ /*
+ * Friis free space equation:
+ * where Pt, Gr, Gr and P are in Watt units
+ * L is in meter units.
+ *
+ * Pt * Gt * Gr * (lambda^2)
+ * P = --------------------------
+ * (4 * pi * d)^2 * L
+ *
+ * Gt: tx gain (W)
+ * Gr: rx gain (W)
+ * Pt: tx power (W)
+ * d: distance (m)
+ * L: system loss
+ * lambda: wavelength (m)
+ *
+ * Here, we ignore tx and rx gain.
+ */
+ double numerator = DbmToW (txPowerDbm) * m_lambda * m_lambda;
+ double denominator = 16 * PI * PI * distance * distance * m_systemLoss;
+ double pr = numerator / denominator;
+ return DbmFromW (pr);
+}
+
+
+PathLossPropagationLossModel::PathLossPropagationLossModel ()
+{}
+
+void
+PathLossPropagationLossModel::SetPathLossExponent (double n)
+{
+ m_exponent = n;
+}
+double
+PathLossPropagationLossModel::GetPathLossExponent (void) const
+{
+ return m_exponent;
+}
+
+double
+PathLossPropagationLossModel::DbToW (double db) const
+{
+ return pow(10.0,db/10.0);
+}
+
+
+double
+PathLossPropagationLossModel::GetRxPower (double txPowerDbm,
+ double distance) const
+{
+ if (distance <= 1.0)
+ {
+ return txPowerDbm;
+ }
+ double prd0 = m_reference->GetRxPower (txPowerDbm, 1.0);
+ double pr = 10*log10(prd0) - m_exponent * 10.0 * log10(distance);
+ return DbToW (pr);
+
+}
+
+
+} // namespace ns3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/devices/wifi/propagation-loss-model.h Fri Aug 24 15:12:12 2007 +0200
@@ -0,0 +1,59 @@
+#ifndef PROPAGATION_LOSS_MODEL_H
+#define PROPAGATION_LOSS_MODEL_H
+
+#include "ns3/object.h"
+
+namespace ns3 {
+
+class PropagationLossModel : public Object
+{
+public:
+ virtual ~PropagationLossModel ();
+ virtual double GetRxPower (double txPowerDbm,
+ double distance) const = 0;
+};
+
+class FriisPropagationLossModel : public PropagationLossModel
+{
+public:
+ FriisPropagationLossModel ();
+ void SetLambda (double frequency, double speed);
+ void SetLambda (double lambda);
+ void SetSystemLoss (double systemLoss);
+ double GetLambda (void) const;
+ double GetSystemLoss (void) const;
+
+ virtual double GetRxPower (double txPowerDbm,
+ double distance) const;
+private:
+ double DbmToW (double dbm) const;
+ double DbmFromW (double w) const;
+
+ static const double PI;
+ double m_lambda;
+ double m_systemLoss;
+};
+
+class PathLossPropagationLossModel : public PropagationLossModel
+{
+public:
+ PathLossPropagationLossModel ();
+
+ void SetPathLossExponent (double n);
+ double GetPathLossExponent (void) const;
+
+ void SetReferenceModel (Ptr<PropagationLossModel> model);
+
+ virtual double GetRxPower (double txPowerDbm,
+ double distance) const;
+private:
+ double DbToW (double db) const;
+
+ double m_lambda;
+ double m_exponent;
+ Ptr<PropagationLossModel> m_reference;
+};
+
+} // namespace ns3
+
+#endif /* PROPAGATION_LOSS_MODEL_H */
--- a/src/wscript Fri Aug 24 12:45:45 2007 +0200
+++ b/src/wscript Fri Aug 24 15:12:12 2007 +0200
@@ -21,6 +21,7 @@
'applications',
'routing/global-routing',
'mobility',
+ 'devices/wifi',
)
def set_options(opt):