From 6c154b6d60b77fd49c138bd1375641798d4f3595 Mon Sep 17 00:00:00 2001
From: Tim Schubert <tim.schubert@tu-bs.de>
Date: Wed, 15 Jul 2020 22:18:30 +0200
Subject: [PATCH] Set mobility model for node instead of net device

---
 model/mock-channel.cc               |  6 +++---
 model/mock-net-device.cc            | 18 ------------------
 model/mock-net-device.h             |  4 ----
 test/isl-mock-channel-test-suite.cc |  7 ++++---
 test/leo-mock-channel-test-suite.cc |  4 ++++
 5 files changed, 11 insertions(+), 28 deletions(-)

diff --git a/model/mock-channel.cc b/model/mock-channel.cc
index 22fe639..2e20166 100644
--- a/model/mock-channel.cc
+++ b/model/mock-channel.cc
@@ -117,8 +117,8 @@ MockChannel::GetDelay (Ptr<const MockNetDevice> src, Ptr<const MockNetDevice> ds
 {
   NS_LOG_DEBUG ("Get delay from " << src << " to " << dst);
 
-  Ptr<MobilityModel> modSrc = src->GetMobilityModel ();
-  Ptr<MobilityModel> modDst = dst->GetMobilityModel ();
+  Ptr<MobilityModel> modSrc = src->GetNode ()->GetObject<MobilityModel> ();
+  Ptr<MobilityModel> modDst = dst->GetNode ()->GetObject<MobilityModel> ();
 
   Time propagationDelay = m_propagationDelay->GetDelay (modSrc, modDst);
 
@@ -163,7 +163,7 @@ MockChannel::Deliver (
   Time delay = GetDelay (src, dst, txTime);
 
   /* Check if there is LOS between the source and destination */
-  if (GetPropagationLoss ()->CalcRxPower(1, src->GetMobilityModel(), dst->GetMobilityModel()) > 0)
+  if (GetPropagationLoss ()->CalcRxPower(1, src->GetNode ()->GetObject<MobilityModel> (), dst->GetNode ()->GetObject<MobilityModel> ()) > 0)
   {
     Simulator::ScheduleWithContext (dst->GetNode ()->GetId (),
         delay,
diff --git a/model/mock-net-device.cc b/model/mock-net-device.cc
index b9eb988..643567b 100644
--- a/model/mock-net-device.cc
+++ b/model/mock-net-device.cc
@@ -78,11 +78,6 @@ MockNetDevice::GetTypeId (void)
                    PointerValue (),
                    MakePointerAccessor (&MockNetDevice::m_queue),
                    MakePointerChecker<Queue<Packet> > ())
-    .AddAttribute ("MobilityModel", "The mobility model of the device",
-                   PointerValue (),
-                   MakePointerAccessor (&MockNetDevice::SetMobilityModel,
-                     &MockNetDevice::GetMobilityModel),
-                   MakePointerChecker<MobilityModel> ())
     //
     // Trace sources at the "top" of the net device, where packets transition
     // to/from higher layers.
@@ -713,19 +708,6 @@ MockNetDevice::EtherToPpp (uint16_t proto)
   return 0;
 }
 
-Ptr<MobilityModel>
-MockNetDevice::GetMobilityModel (void) const
-{
-  return m_mobilityModel;
-}
-
-void
-MockNetDevice::SetMobilityModel (Ptr<MobilityModel> model)
-{
-  NS_LOG_FUNCTION (this);
-  m_mobilityModel = model;
-}
-
 bool
 MockNetDevice::IsPointToPoint() const
 {
diff --git a/model/mock-net-device.h b/model/mock-net-device.h
index c6a070f..ce1d18e 100644
--- a/model/mock-net-device.h
+++ b/model/mock-net-device.h
@@ -195,8 +195,6 @@ public:
   virtual void SetPromiscReceiveCallback (PromiscReceiveCallback cb);
   virtual bool SupportsSendFrom (void) const;
 
-  Ptr<MobilityModel> GetMobilityModel (void) const;
-  void SetMobilityModel (Ptr<MobilityModel> model);
   void NotifyLinkDown (void);
 
 protected:
@@ -477,8 +475,6 @@ private:
 
   Ptr<Packet> m_currentPkt; //!< Current packet processed
 
-  Ptr<MobilityModel> m_mobilityModel;
-
   /**
    * \brief PPP to Ethernet protocol number mapping
    * \param protocol A PPP protocol number
diff --git a/test/isl-mock-channel-test-suite.cc b/test/isl-mock-channel-test-suite.cc
index 64c0241..47e57fc 100644
--- a/test/isl-mock-channel-test-suite.cc
+++ b/test/isl-mock-channel-test-suite.cc
@@ -42,7 +42,6 @@ IslMockChannelTransmitUnknownTestCase::DoRun (void)
   Time txTime;
   channel->SetAttribute ("PropagationDelay", StringValue ("ns3::ConstantSpeedPropagationDelayModel"));
   channel->SetAttribute ("PropagationLoss", StringValue ("ns3::IslPropagationLossModel"));
-  dev->SetAttribute ("MobilityModel", StringValue ("ns3::WaypointMobilityModel"));
   bool result = channel->TransmitStart (p, srcId, destAddr, txTime);
 
   NS_TEST_ASSERT_MSG_EQ (result, false, "Unknown destination fails to deliver");
@@ -78,15 +77,17 @@ IslMockChannelTransmitKnownTestCase::DoRun (void)
   Ptr<Packet> p = Ptr<Packet>(packet);
 
   Ptr<Node> srcNode = CreateObject<Node> ();
+  Ptr<ConstantPositionMobilityModel> loc = CreateObject<ConstantPositionMobilityModel> ();
+  srcNode->AggregateObject (loc);
   Ptr<MockNetDevice> srcDev = CreateObject<MockNetDevice> ();
   srcDev->SetNode (srcNode);
-  srcDev->SetAttribute ("MobilityModel", StringValue ("ns3::WaypointMobilityModel"));
   int32_t srcId = channel->Attach (srcDev);
 
   Ptr<Node> dstNode = CreateObject<Node> ();
+  loc = CreateObject<ConstantPositionMobilityModel> ();
+  dstNode->AggregateObject (loc);
   Ptr<MockNetDevice> dstDev = CreateObject<MockNetDevice> ();
   dstDev->SetNode (dstNode);
-  dstDev->SetAttribute ("MobilityModel", StringValue ("ns3::WaypointMobilityModel"));
   channel->Attach (dstDev);
 
   Address destAddr = dstDev->GetAddress ();
diff --git a/test/leo-mock-channel-test-suite.cc b/test/leo-mock-channel-test-suite.cc
index 9b473ed..a6643c8 100644
--- a/test/leo-mock-channel-test-suite.cc
+++ b/test/leo-mock-channel-test-suite.cc
@@ -79,6 +79,8 @@ LeoMockChannelTransmitKnownTestCase::DoRun (void)
   Ptr<Packet> p = Ptr<Packet>(packet);
 
   Ptr<Node> srcNode = CreateObject<Node> ();
+  Ptr<ConstantPositionMobilityModel> loc = CreateObject<ConstantPositionMobilityModel> ();
+  srcNode->AggregateObject (loc);
   Ptr<LeoMockNetDevice> srcDev = CreateObject<LeoMockNetDevice> ();
   srcDev->SetNode (srcNode);
   srcDev->SetAttribute ("MobilityModel", StringValue ("ns3::ConstantPositionMobilityModel"));
@@ -86,6 +88,8 @@ LeoMockChannelTransmitKnownTestCase::DoRun (void)
   int32_t srcId = channel->Attach (srcDev);
 
   Ptr<Node> dstNode = CreateObject<Node> ();
+  loc = CreateObject<ConstantPositionMobilityModel> ();
+  dstNode->AggregateObject (loc);
   Ptr<LeoMockNetDevice> dstDev = CreateObject<LeoMockNetDevice> ();
   dstDev->SetNode (dstNode);
   dstDev->SetAttribute ("MobilityModel", StringValue ("ns3::WaypointMobilityModel"));