bug 487: add association/disassociation hooks in Nqsta.
--- a/src/devices/wifi/nqsta-wifi-mac.cc Tue Feb 24 09:07:04 2009 +0100
+++ b/src/devices/wifi/nqsta-wifi-mac.cc Tue Feb 24 09:18:11 2009 +0100
@@ -24,6 +24,7 @@
#include "ns3/log.h"
#include "ns3/node.h"
#include "ns3/uinteger.h"
+#include "ns3/trace-source-accessor.h"
#include "nqsta-wifi-mac.h"
#include "wifi-mac-header.h"
@@ -89,6 +90,10 @@
PointerValue (),
MakePointerAccessor (&NqstaWifiMac::DoGetDcaTxop),
MakePointerChecker<DcaTxop> ())
+ .AddTraceSource ("Assoc", "Associated with an access point.",
+ MakeTraceSourceAccessor (&NqstaWifiMac::m_assocLogger))
+ .AddTraceSource ("DeAssoc", "Association with an access point lost.",
+ MakeTraceSourceAccessor (&NqstaWifiMac::m_deAssocLogger))
;
return tid;
}
@@ -384,7 +389,7 @@
* We try to initiate a probe request now.
*/
m_linkDown ();
- m_state = WAIT_PROBE_RESP;
+ SetState (WAIT_PROBE_RESP);
SendProbeRequest ();
break;
case WAIT_ASSOC_RESP:
@@ -407,14 +412,14 @@
NqstaWifiMac::AssocRequestTimeout (void)
{
NS_LOG_FUNCTION (this);
- m_state = WAIT_ASSOC_RESP;
+ SetState (WAIT_ASSOC_RESP);
SendAssociationRequest ();
}
void
NqstaWifiMac::ProbeRequestTimeout (void)
{
NS_LOG_FUNCTION (this);
- m_state = WAIT_PROBE_RESP;
+ SetState (WAIT_PROBE_RESP);
SendProbeRequest ();
}
void
@@ -428,7 +433,7 @@
return;
}
NS_LOG_DEBUG ("beacon missed");
- m_state = BEACON_MISSED;
+ SetState (BEACON_MISSED);
TryToEnsureAssociated ();
}
void
@@ -542,7 +547,7 @@
}
if (goodBeacon && m_state == BEACON_MISSED)
{
- m_state = WAIT_ASSOC_RESP;
+ SetState (WAIT_ASSOC_RESP);
SendAssociationRequest ();
}
}
@@ -564,7 +569,7 @@
{
m_probeRequestEvent.Cancel ();
}
- m_state = WAIT_ASSOC_RESP;
+ SetState (WAIT_ASSOC_RESP);
SendAssociationRequest ();
}
}
@@ -580,7 +585,7 @@
}
if (assocResp.GetStatusCode ().IsSuccess ())
{
- m_state = ASSOCIATED;
+ SetState (ASSOCIATED);
NS_LOG_DEBUG ("assoc completed");
SupportedRates rates = assocResp.GetSupportedRates ();
WifiRemoteStation *ap = m_stationManager->Lookup (hdr->GetAddr2 ());
@@ -604,7 +609,7 @@
else
{
NS_LOG_DEBUG ("assoc refused");
- m_state = REFUSED;
+ SetState (REFUSED);
}
}
}
@@ -622,4 +627,20 @@
return rates;
}
+void
+NqstaWifiMac::SetState (MacState value)
+{
+ if (value == ASSOCIATED &&
+ m_state != ASSOCIATED)
+ {
+ m_assocLogger (GetBssid ());
+ }
+ else if (value != ASSOCIATED &&
+ m_state == ASSOCIATED)
+ {
+ m_deAssocLogger (GetBssid ());
+ }
+ m_state = value;
+}
+
} // namespace ns3
--- a/src/devices/wifi/nqsta-wifi-mac.h Tue Feb 24 09:07:04 2009 +0100
+++ b/src/devices/wifi/nqsta-wifi-mac.h Tue Feb 24 09:18:11 2009 +0100
@@ -27,6 +27,7 @@
#include "ns3/event-id.h"
#include "ns3/packet.h"
#include "ns3/nstime.h"
+#include "ns3/traced-callback.h"
#include "wifi-mac.h"
#include "supported-rates.h"
@@ -111,6 +112,13 @@
void StartActiveAssociation (void);
private:
+ enum MacState{
+ ASSOCIATED,
+ WAIT_PROBE_RESP,
+ WAIT_ASSOC_RESP,
+ BEACON_MISSED,
+ REFUSED
+ };
void SetBssid (Mac48Address bssid);
void SetActiveProbing (bool enable);
bool GetActiveProbing (void) const;
@@ -130,14 +138,9 @@
NqstaWifiMac (const NqstaWifiMac & ctor_arg);
NqstaWifiMac &operator = (const NqstaWifiMac & ctor_arg);
Ptr<DcaTxop> DoGetDcaTxop(void) const;
+ void SetState (enum MacState value);
- enum {
- ASSOCIATED,
- WAIT_PROBE_RESP,
- WAIT_ASSOC_RESP,
- BEACON_MISSED,
- REFUSED
- } m_state;
+ enum MacState m_state;
Time m_probeRequestTimeout;
Time m_assocRequestTimeout;
EventId m_probeRequestEvent;
@@ -157,6 +160,9 @@
Ptr<MacLow> m_low;
Ssid m_ssid;
Time m_eifsNoDifs;
+
+ TracedCallback<Mac48Address> m_assocLogger;
+ TracedCallback<Mac48Address> m_deAssocLogger;
};
} // namespace ns3