--- 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