bug 487: add association/disassociation hooks in Nqsta.
authorFrancesco Malandrino <francesco.malandrino@gmail.com>
Tue, 24 Feb 2009 09:18:11 +0100
changeset 4212 a21c19c4cd81
parent 4211 11cae8936153
child 4213 a598c8983ced
bug 487: add association/disassociation hooks in Nqsta.
src/devices/wifi/nqsta-wifi-mac.cc
src/devices/wifi/nqsta-wifi-mac.h
--- 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