implement WifiNetDevice::SendFrom
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 07 Aug 2008 11:14:15 -0700
changeset 3517 5ba130a7f519
parent 3515 88e9cee20461
child 3518 e101960f06de
implement WifiNetDevice::SendFrom
src/devices/wifi/adhoc-wifi-mac.cc
src/devices/wifi/adhoc-wifi-mac.h
src/devices/wifi/nqap-wifi-mac.cc
src/devices/wifi/nqap-wifi-mac.h
src/devices/wifi/nqsta-wifi-mac.cc
src/devices/wifi/nqsta-wifi-mac.h
src/devices/wifi/wifi-mac.h
src/devices/wifi/wifi-net-device.cc
--- a/src/devices/wifi/adhoc-wifi-mac.cc	Wed Aug 06 11:37:52 2008 +0100
+++ b/src/devices/wifi/adhoc-wifi-mac.cc	Thu Aug 07 11:14:15 2008 -0700
@@ -168,13 +168,13 @@
 }
 
 void 
-AdhocWifiMac::Enqueue (Ptr<const Packet> packet, Mac48Address to)
+AdhocWifiMac::Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from)
 {
-  NS_LOG_DEBUG ("enqueue size="<<packet->GetSize ()<<", to="<<to);
+  NS_LOG_FUNCTION (packet->GetSize () << to << from);
   WifiMacHeader hdr;
   hdr.SetType (WIFI_MAC_DATA);
   hdr.SetAddr1 (to);
-  hdr.SetAddr2 (GetAddress ());
+  hdr.SetAddr2 (from);
   hdr.SetAddr3 (GetBssid ());
   hdr.SetDsNotFrom ();
   hdr.SetDsNotTo ();
--- a/src/devices/wifi/adhoc-wifi-mac.h	Wed Aug 06 11:37:52 2008 +0100
+++ b/src/devices/wifi/adhoc-wifi-mac.h	Thu Aug 07 11:14:15 2008 -0700
@@ -61,7 +61,7 @@
   virtual Time GetEifsNoDifs (void) const;
   virtual void SetWifiPhy (Ptr<WifiPhy> phy);
   virtual void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager);
-  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to);
+  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
   virtual void SetForwardUpCallback (Callback<void,Ptr<Packet>, const Mac48Address &> upCallback);
   virtual void SetLinkUpCallback (Callback<void> linkUp);
   virtual void SetLinkDownCallback (Callback<void> linkDown);
--- a/src/devices/wifi/nqap-wifi-mac.cc	Wed Aug 06 11:37:52 2008 +0100
+++ b/src/devices/wifi/nqap-wifi-mac.cc	Thu Aug 07 11:14:15 2008 -0700
@@ -262,10 +262,10 @@
   m_dca->Queue (packet, hdr);  
 }
 void 
-NqapWifiMac::Enqueue (Ptr<const Packet> packet, Mac48Address to)
+NqapWifiMac::Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from)
 {
-  NS_LOG_FUNCTION (this << packet << to);
-  ForwardDown (packet, GetAddress (), to);
+  NS_LOG_FUNCTION (this << packet << to << from);
+  ForwardDown (packet, from, to);
 }
 SupportedRates
 NqapWifiMac::GetSupportedRates (void) const
--- a/src/devices/wifi/nqap-wifi-mac.h	Wed Aug 06 11:37:52 2008 +0100
+++ b/src/devices/wifi/nqap-wifi-mac.h	Thu Aug 07 11:14:15 2008 -0700
@@ -67,7 +67,7 @@
   virtual Time GetEifsNoDifs (void) const;
   virtual void SetWifiPhy (Ptr<WifiPhy> phy);
   virtual void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager);
-  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to);
+  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
   virtual void SetForwardUpCallback (Callback<void,Ptr<Packet>, const Mac48Address &> upCallback);
   virtual void SetLinkUpCallback (Callback<void> linkUp);
   virtual void SetLinkDownCallback (Callback<void> linkDown);
--- a/src/devices/wifi/nqsta-wifi-mac.cc	Wed Aug 06 11:37:52 2008 +0100
+++ b/src/devices/wifi/nqsta-wifi-mac.cc	Thu Aug 07 11:14:15 2008 -0700
@@ -409,7 +409,7 @@
 }
 
 void 
-NqstaWifiMac::Enqueue (Ptr<const Packet> packet, Mac48Address to)
+NqstaWifiMac::Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from)
 {
   NS_LOG_FUNCTION (this << packet << to);
   if (!IsAssociated ()) 
@@ -421,7 +421,7 @@
   WifiMacHeader hdr;
   hdr.SetTypeData ();
   hdr.SetAddr1 (GetBssid ());
-  hdr.SetAddr2 (GetAddress ());
+  hdr.SetAddr2 (from);
   hdr.SetAddr3 (to);
   hdr.SetDsNotFrom ();
   hdr.SetDsTo ();
--- a/src/devices/wifi/nqsta-wifi-mac.h	Wed Aug 06 11:37:52 2008 +0100
+++ b/src/devices/wifi/nqsta-wifi-mac.h	Thu Aug 07 11:14:15 2008 -0700
@@ -67,7 +67,7 @@
   virtual Time GetEifsNoDifs (void) const;
   virtual void SetWifiPhy (Ptr<WifiPhy> phy);
   virtual void SetWifiRemoteStationManager (Ptr<WifiRemoteStationManager> stationManager);
-  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to);
+  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from);
   virtual void SetForwardUpCallback (Callback<void,Ptr<Packet>, const Mac48Address &> upCallback);
   virtual void SetLinkUpCallback (Callback<void> linkUp);
   virtual void SetLinkDownCallback (Callback<void> linkDown);
--- a/src/devices/wifi/wifi-mac.h	Wed Aug 06 11:37:52 2008 +0100
+++ b/src/devices/wifi/wifi-mac.h	Thu Aug 07 11:14:15 2008 -0700
@@ -148,7 +148,7 @@
    * dequeued as soon as the DCF function determines that
    * access it granted to this MAC.
    */
-  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to) = 0;
+  virtual void Enqueue (Ptr<const Packet> packet, Mac48Address to, Mac48Address from) = 0;
   /**
    * \param phy the physical layer attached to this MAC.
    */
--- a/src/devices/wifi/wifi-net-device.cc	Wed Aug 06 11:37:52 2008 +0100
+++ b/src/devices/wifi/wifi-net-device.cc	Thu Aug 07 11:14:15 2008 -0700
@@ -280,7 +280,7 @@
 
   m_txLogger (packet, realTo);
 
-  m_mac->Enqueue (packet, realTo);
+  m_mac->Enqueue (packet, realTo, m_mac->GetAddress ());
   return true;
 }
 Ptr<Node> 
@@ -335,8 +335,21 @@
 bool
 WifiNetDevice::SendFrom (Ptr<Packet> packet, const Address& source, const Address& dest, uint16_t protocolNumber)
 {
-  NS_FATAL_ERROR ("TODO");
-  return false;
+  NS_ASSERT (Mac48Address::IsMatchingType (dest));
+  NS_ASSERT (Mac48Address::IsMatchingType (source));
+
+  Mac48Address realTo = Mac48Address::ConvertFrom (dest);
+  Mac48Address realFrom = Mac48Address::ConvertFrom (source);
+
+  LlcSnapHeader llc;
+  llc.SetType (protocolNumber);
+  packet->AddHeader (llc);
+
+  m_txLogger (packet, realTo);
+
+  m_mac->Enqueue (packet, realTo, realFrom);
+
+  return true;
 }
 
 void