# HG changeset patch # User Mathieu Lacage # Date 1218132855 25200 # Node ID 5ba130a7f519d88ee691f90c3e792d36fd194bce # Parent 88e9cee20461e03ae01e8ee07d0fbe23b0597047 implement WifiNetDevice::SendFrom diff -r 88e9cee20461 -r 5ba130a7f519 src/devices/wifi/adhoc-wifi-mac.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 packet, Mac48Address to) +AdhocWifiMac::Enqueue (Ptr packet, Mac48Address to, Mac48Address from) { - NS_LOG_DEBUG ("enqueue size="<GetSize ()<<", to="<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 (); diff -r 88e9cee20461 -r 5ba130a7f519 src/devices/wifi/adhoc-wifi-mac.h --- 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 phy); virtual void SetWifiRemoteStationManager (Ptr stationManager); - virtual void Enqueue (Ptr packet, Mac48Address to); + virtual void Enqueue (Ptr packet, Mac48Address to, Mac48Address from); virtual void SetForwardUpCallback (Callback, const Mac48Address &> upCallback); virtual void SetLinkUpCallback (Callback linkUp); virtual void SetLinkDownCallback (Callback linkDown); diff -r 88e9cee20461 -r 5ba130a7f519 src/devices/wifi/nqap-wifi-mac.cc --- 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 packet, Mac48Address to) +NqapWifiMac::Enqueue (Ptr 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 diff -r 88e9cee20461 -r 5ba130a7f519 src/devices/wifi/nqap-wifi-mac.h --- 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 phy); virtual void SetWifiRemoteStationManager (Ptr stationManager); - virtual void Enqueue (Ptr packet, Mac48Address to); + virtual void Enqueue (Ptr packet, Mac48Address to, Mac48Address from); virtual void SetForwardUpCallback (Callback, const Mac48Address &> upCallback); virtual void SetLinkUpCallback (Callback linkUp); virtual void SetLinkDownCallback (Callback linkDown); diff -r 88e9cee20461 -r 5ba130a7f519 src/devices/wifi/nqsta-wifi-mac.cc --- 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 packet, Mac48Address to) +NqstaWifiMac::Enqueue (Ptr 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 (); diff -r 88e9cee20461 -r 5ba130a7f519 src/devices/wifi/nqsta-wifi-mac.h --- 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 phy); virtual void SetWifiRemoteStationManager (Ptr stationManager); - virtual void Enqueue (Ptr packet, Mac48Address to); + virtual void Enqueue (Ptr packet, Mac48Address to, Mac48Address from); virtual void SetForwardUpCallback (Callback, const Mac48Address &> upCallback); virtual void SetLinkUpCallback (Callback linkUp); virtual void SetLinkDownCallback (Callback linkDown); diff -r 88e9cee20461 -r 5ba130a7f519 src/devices/wifi/wifi-mac.h --- 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 packet, Mac48Address to) = 0; + virtual void Enqueue (Ptr packet, Mac48Address to, Mac48Address from) = 0; /** * \param phy the physical layer attached to this MAC. */ diff -r 88e9cee20461 -r 5ba130a7f519 src/devices/wifi/wifi-net-device.cc --- 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 @@ -335,8 +335,21 @@ bool WifiNetDevice::SendFrom (Ptr 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