#Add Assoc (AP association) and Deassoc (AP de-association) trace hooks to NqstaWifiMac #Callback signature: void cb(string context,Mac48Address ap_address) (with context) # void cb(Mac48Address ap_address) (without context) #Francesco Malandrino, Politecnico di Torino (Italy), 2008-12-29 diff -up ns-3-simu-OLD/src/devices/wifi/nqsta-wifi-mac.cc ns-3-simu/src/devices/wifi/nqsta-wifi-mac.cc --- ns-3-simu-OLD/src/devices/wifi/nqsta-wifi-mac.cc 2008-12-29 12:40:43.000000000 +0100 +++ ns-3-simu/src/devices/wifi/nqsta-wifi-mac.cc 2008-12-29 12:29:11.000000000 +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" @@ -80,6 +81,10 @@ NqstaWifiMac::GetTypeId (void) BooleanValue (false), MakeBooleanAccessor (&NqstaWifiMac::SetActiveProbing), MakeBooleanChecker ()) + .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; } @@ -371,7 +376,7 @@ NqstaWifiMac::TryToEnsureAssociated (voi * 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: @@ -394,14 +399,14 @@ void 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 @@ -415,7 +420,7 @@ NqstaWifiMac::MissedBeacons (void) return; } NS_LOG_DEBUG ("beacon missed"); - m_state = BEACON_MISSED; + setState(BEACON_MISSED); TryToEnsureAssociated (); } void @@ -528,7 +533,7 @@ NqstaWifiMac::Receive (Ptr packe } if (goodBeacon && m_state == BEACON_MISSED) { - m_state = WAIT_ASSOC_RESP; + setState(WAIT_ASSOC_RESP); SendAssociationRequest (); } } @@ -550,7 +555,7 @@ NqstaWifiMac::Receive (Ptr packe { m_probeRequestEvent.Cancel (); } - m_state = WAIT_ASSOC_RESP; + setState(WAIT_ASSOC_RESP); SendAssociationRequest (); } } @@ -566,7 +571,7 @@ NqstaWifiMac::Receive (Ptr packe } 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 ()); @@ -590,7 +595,7 @@ NqstaWifiMac::Receive (Ptr packe else { NS_LOG_DEBUG ("assoc refused"); - m_state = REFUSED; + setState(REFUSED); } } } @@ -608,4 +613,11 @@ NqstaWifiMac::GetSupportedRates (void) c 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 diff -up ns-3-simu-OLD/src/devices/wifi/nqsta-wifi-mac.h ns-3-simu/src/devices/wifi/nqsta-wifi-mac.h --- ns-3-simu-OLD/src/devices/wifi/nqsta-wifi-mac.h 2008-12-29 12:32:09.000000000 +0100 +++ ns-3-simu/src/devices/wifi/nqsta-wifi-mac.h 2008-12-29 12:26:11.000000000 +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" @@ -130,13 +131,15 @@ private: NqstaWifiMac (const NqstaWifiMac & ctor_arg); NqstaWifiMac &operator = (const NqstaWifiMac & ctor_arg); - enum { + enum MacState{ ASSOCIATED, WAIT_PROBE_RESP, WAIT_ASSOC_RESP, BEACON_MISSED, REFUSED - } m_state; + }; + MacState m_state; + void setState(MacState value); Time m_probeRequestTimeout; Time m_assocRequestTimeout; EventId m_probeRequestEvent; @@ -156,6 +159,9 @@ private: Ptr m_low; Ssid m_ssid; Time m_eifsNoDifs; + + TracedCallback m_assocLogger; + TracedCallback m_deAssocLogger; }; } // namespace ns3