From 20d6fdf375e796bbf8fc9f12b8c4de0548accf31 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Mon, 3 Mar 2008 05:10:12 +0100 Subject: [PATCH] more renamed files --- src/devices/wifi/mac-high-adhoc.cc | 112 -------- src/devices/wifi/mac-high-adhoc.h | 72 ----- src/devices/wifi/mac-high-nqap.cc | 340 ----------------------- src/devices/wifi/mac-high-nqap.h | 94 ------- src/devices/wifi/mac-high-nqsta.cc | 414 ----------------------------- src/devices/wifi/mac-high-nqsta.h | 137 ---------- 6 files changed, 1169 deletions(-) delete mode 100644 src/devices/wifi/mac-high-adhoc.cc delete mode 100644 src/devices/wifi/mac-high-adhoc.h delete mode 100644 src/devices/wifi/mac-high-nqap.cc delete mode 100644 src/devices/wifi/mac-high-nqap.h delete mode 100644 src/devices/wifi/mac-high-nqsta.cc delete mode 100644 src/devices/wifi/mac-high-nqsta.h diff --git a/src/devices/wifi/mac-high-adhoc.cc b/src/devices/wifi/mac-high-adhoc.cc deleted file mode 100644 index 26db66e2e..000000000 --- a/src/devices/wifi/mac-high-adhoc.cc +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2005 INRIA - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ - -#include "mac-high-adhoc.h" -#include "dca-txop.h" -#include "wifi-net-device.h" -#include "mac-stations.h" -#include "wifi-phy.h" -#include "ns3/packet.h" -#include "ns3/log.h" - -NS_LOG_COMPONENT_DEFINE ("MacHighAdhoc"); - -namespace ns3 { - -MacHighAdhoc::MacHighAdhoc () -{} -MacHighAdhoc::~MacHighAdhoc () -{ - m_phy = 0; -} - -void -MacHighAdhoc::SetDevice (WifiNetDevice *device) -{ - m_device = device; - -} -void -MacHighAdhoc::SetForwardCallback (ForwardCallback callback) -{ - m_callback = callback; -} -void -MacHighAdhoc::SetDcaTxop (Ptr dca) -{ - m_dca = dca; -} -void -MacHighAdhoc::SetStations (MacStations *stations) -{ - m_stations = stations; -} -void -MacHighAdhoc::SetPhy (Ptr phy) -{ - m_phy = phy; -} - -Mac48Address -MacHighAdhoc::GetBssid (void) const -{ - // XXX the bssid should be generated by the procedure - // described in ieee802.11 section 11.1.3 - return Mac48Address::GetBroadcast (); -} - -void -MacHighAdhoc::Enqueue (Ptr packet, Mac48Address to) -{ - NS_LOG_DEBUG ("enqueue size="<GetSize ()<<", to="<GetSelfAddress ()); - hdr.SetAddr3 (m_device->GetBssid ()); - hdr.SetDsNotFrom (); - hdr.SetDsNotTo (); - - MacStation *destination = m_stations->Lookup (to); - if (destination->IsBrandNew ()) - { - // in adhoc mode, we assume that every destination - // supports all the rates we support. - for (uint32_t i = 0; i < m_phy->GetNModes (); i++) - { - destination->AddSupportedMode (m_phy->GetMode (i)); - } - destination->RecordDisassociated (); - } - - m_dca->Queue (packet, hdr); -} - -void -MacHighAdhoc::Receive (Ptr packet, WifiMacHeader const *hdr) -{ - NS_LOG_DEBUG ("received size="<GetSize ()<<", from="<GetAddr2 ()); - if (hdr->GetAddr1 ().IsBroadcast () || hdr->GetAddr1 () == m_device->GetSelfAddress ()) - { - m_callback (packet, hdr->GetAddr2 ()); - } -} - -} // namespace ns3 diff --git a/src/devices/wifi/mac-high-adhoc.h b/src/devices/wifi/mac-high-adhoc.h deleted file mode 100644 index fa420ba16..000000000 --- a/src/devices/wifi/mac-high-adhoc.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2005 INRIA - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#ifndef MAC_HIGH_ADHOC_H -#define MAC_HIGH_ADHOC_H - -#include "ns3/mac48-address.h" -#include "ns3/callback.h" -#include "ns3/packet.h" - -namespace ns3 { - -class DcaTxop; -class Packet; -class WifiNetDevice; -class WifiMacHeader; -class MacStations; -class WifiPhy; - -/** - * \brief the Adhoc state machine - * - * For now, this class is really empty but it should contain - * the code for the distributed generation of beacons in an adhoc - * network. - */ -class MacHighAdhoc { -public: - typedef Callback, const Mac48Address &> ForwardCallback; - - MacHighAdhoc (); - ~MacHighAdhoc (); - - void SetDevice (WifiNetDevice *device); - void SetForwardCallback (ForwardCallback callback); - void SetDcaTxop (Ptr dca); - void SetStations (MacStations *stations); - void SetPhy (Ptr phy); - - Mac48Address GetBssid (void) const; - - void Enqueue (Ptr packet, Mac48Address to); - - /* invoked by the MacLows. */ - void Receive (Ptr packet, WifiMacHeader const*hdr); -private: - Ptr m_dca; - WifiNetDevice *m_device; - ForwardCallback m_callback; - MacStations *m_stations; - Ptr m_phy; -}; - -} // namespace ns3 - -#endif /* MAC_HIGH_ADHOC_H */ diff --git a/src/devices/wifi/mac-high-nqap.cc b/src/devices/wifi/mac-high-nqap.cc deleted file mode 100644 index 3bdef497e..000000000 --- a/src/devices/wifi/mac-high-nqap.cc +++ /dev/null @@ -1,340 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2005,2006 INRIA - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#include "mac-high-nqap.h" -#include "mac-stations.h" -#include "dca-txop.h" -#include "wifi-net-device.h" -#include "wifi-mac-header.h" -#include "wifi-default-parameters.h" -#include "mgt-headers.h" -#include "wifi-phy.h" -#include "ns3/assert.h" -#include "ns3/log.h" -#include "ns3/simulator.h" -#include "ns3/node.h" - -NS_LOG_COMPONENT_DEFINE ("MacHighNqap"); - -#define TRACE(x) \ - NS_LOG_DEBUG(Simulator::Now () << " " << m_phy->GetDevice ()->GetNode ()->GetId () << ":" << \ - m_phy->GetDevice ()->GetIfIndex () << " " << x); - -namespace ns3 { - -MacHighNqap::MacHighNqap () - : m_beaconInterval (WifiDefaultParameters::GetApBeaconInterval ()) -{} -MacHighNqap::~MacHighNqap () -{ - m_phy = 0; -} - -void -MacHighNqap::SetDcaTxop (Ptr dca) -{ - m_dca = dca; - m_dca->SetTxOkCallback (MakeCallback (&MacHighNqap::TxOk, this)); - m_dca->SetTxFailedCallback (MakeCallback (&MacHighNqap::TxFailed, this)); -} -void -MacHighNqap::SetBeaconDcaTxop (Ptr dca) -{ - // we do not need to be notified when a beacon has been transmitted - // successfully or not. - m_beaconDca = dca; -} -void -MacHighNqap::SetDevice (WifiNetDevice *device) -{ - m_device = device; -} -void -MacHighNqap::SetStations (MacStations *stations) -{ - m_stations = stations; -} -void -MacHighNqap::SetPhy (Ptr phy) -{ - m_phy = phy; -} -void -MacHighNqap::SetForwardCallback (ForwardCallback callback) -{ - m_forwardUp = callback; -} -void -MacHighNqap::SetBeaconInterval (Time interval) -{ - m_beaconInterval = interval; -} -void -MacHighNqap::StartBeaconing (void) -{ - SendOneBeacon (); -} -void -MacHighNqap::ForwardDown (Ptr packet, Mac48Address from, Mac48Address to) -{ - WifiMacHeader hdr; - hdr.SetTypeData (); - hdr.SetAddr1 (to); - hdr.SetAddr2 (m_device->GetSelfAddress ()); - hdr.SetAddr3 (from); - hdr.SetDsFrom (); - hdr.SetDsNotTo (); - m_dca->Queue (packet, hdr); -} -void -MacHighNqap::Queue (Ptr packet, Mac48Address to) -{ - ForwardDown (packet, m_device->GetSelfAddress (), to); -} -SupportedRates -MacHighNqap::GetSupportedRates (void) const -{ - // send the set of supported rates and make sure that we indicate - // the Basic Rate set in this set of supported rates. - SupportedRates rates; - for (uint32_t i = 0; i < m_phy->GetNModes (); i++) - { - WifiMode mode = m_phy->GetMode (i); - rates.AddSupportedRate (mode.GetDataRate ()); - } - // set the basic rates - for (uint32_t j = 0; j < m_stations->GetNBasicModes (); j++) - { - WifiMode mode = m_stations->GetBasicMode (j); - rates.SetBasicRate (mode.GetDataRate ()); - } - return rates; -} -void -MacHighNqap::SendProbeResp (Mac48Address to) -{ - TRACE ("send probe response to="<GetSelfAddress ()); - hdr.SetAddr3 (m_device->GetSelfAddress ()); - hdr.SetDsNotFrom (); - hdr.SetDsNotTo (); - Ptr packet = Create (); - MgtProbeResponseHeader probe; - probe.SetSsid (m_device->GetSsid ()); - probe.SetSupportedRates (GetSupportedRates ()); - probe.SetBeaconIntervalUs (m_beaconInterval.GetMicroSeconds ()); - packet->AddHeader (probe); - - m_dca->Queue (packet, hdr); -} -void -MacHighNqap::SendAssocResp (Mac48Address to, bool success) -{ - TRACE ("send assoc response to="<GetSelfAddress ()); - hdr.SetAddr3 (m_device->GetSelfAddress ()); - hdr.SetDsNotFrom (); - hdr.SetDsNotTo (); - Ptr packet = Create (); - MgtAssocResponseHeader assoc; - StatusCode code; - if (success) - { - code.SetSuccess (); - } - else - { - code.SetFailure (); - } - assoc.SetSupportedRates (GetSupportedRates ()); - assoc.SetStatusCode (code); - packet->AddHeader (assoc); - - m_dca->Queue (packet, hdr); -} -void -MacHighNqap::SendOneBeacon (void) -{ - TRACE ("send beacon to="<GetSelfAddress ()); - hdr.SetAddr3 (m_device->GetSelfAddress ()); - hdr.SetDsNotFrom (); - hdr.SetDsNotTo (); - Ptr packet = Create (); - MgtBeaconHeader beacon; - beacon.SetSsid (m_device->GetSsid ()); - beacon.SetSupportedRates (GetSupportedRates ()); - beacon.SetBeaconIntervalUs (m_beaconInterval.GetMicroSeconds ()); - packet->AddHeader (beacon); - - m_beaconDca->Queue (packet, hdr); - Simulator::Schedule (m_beaconInterval, &MacHighNqap::SendOneBeacon, this); -} -void -MacHighNqap::TxOk (WifiMacHeader const &hdr) -{ - MacStation *station = m_stations->Lookup (hdr.GetAddr1 ()); - if (hdr.IsAssocResp () && - station->IsWaitAssocTxOk ()) - { - TRACE ("associated with sta="<RecordGotAssocTxOk (); - } -} -void -MacHighNqap::TxFailed (WifiMacHeader const &hdr) -{ - MacStation *station = m_stations->Lookup (hdr.GetAddr1 ()); - if (hdr.IsAssocResp () && - station->IsWaitAssocTxOk ()) - { - TRACE ("assoc failed with sta="<RecordGotAssocTxFailed (); - } -} -void -MacHighNqap::Receive (Ptr packet, WifiMacHeader const *hdr) -{ - MacStation *station = m_stations->Lookup (hdr->GetAddr2 ()); - - if (hdr->IsData ()) - { - if (!hdr->IsFromDs () && - hdr->IsToDs () && - hdr->GetAddr1 () == m_device->GetSelfAddress () && - station->IsAssociated ()) - { - if (hdr->GetAddr3 () == m_device->GetSelfAddress ()) - { - TRACE ("frame for me from="<GetAddr2 ()); - m_forwardUp (packet, hdr->GetAddr2 ()); - } - else - { - TRACE ("forwarding frame from="<GetAddr2 ()<<", to="<GetAddr3 ()); - Ptr copy = packet->Copy (); - ForwardDown (packet, - hdr->GetAddr2 (), - hdr->GetAddr3 ()); - m_forwardUp (copy, hdr->GetAddr2 ()); - } - } - else if (hdr->IsFromDs () && - hdr->IsToDs ()) - { - // this is an AP-to-AP frame - // we ignore for now. - } - else - { - // we can ignore these frames since - // they are not targeted at the AP - } - } - else if (hdr->IsMgt ()) - { - if (hdr->IsProbeReq ()) - { - NS_ASSERT (hdr->GetAddr1 ().IsBroadcast ()); - SendProbeResp (hdr->GetAddr2 ()); - } - else if (hdr->GetAddr1 () == m_device->GetSelfAddress ()) - { - if (hdr->IsAssocReq ()) - { - // first, verify that the the station's supported - // rate set is compatible with our Basic Rate set - MgtAssocRequestHeader assocReq; - packet->RemoveHeader (assocReq); - SupportedRates rates = assocReq.GetSupportedRates (); - bool problem = false; - for (uint32_t i = 0; i < m_stations->GetNBasicModes (); i++) - { - WifiMode mode = m_stations->GetBasicMode (i); - if (!rates.IsSupportedRate (mode.GetDataRate ())) - { - problem = true; - break; - } - } - if (problem) - { - // one of the Basic Rate set mode is not - // supported by the station. So, we return an assoc - // response with an error status. - SendAssocResp (hdr->GetAddr2 (), false); - } - else - { - // station supports all rates in Basic Rate Set. - // record all its supported modes in its associated MacStation - for (uint32_t j = 0; j < m_phy->GetNModes (); j++) - { - WifiMode mode = m_phy->GetMode (j); - if (rates.IsSupportedRate (mode.GetDataRate ())) - { - station->AddSupportedMode (mode); - } - } - station->RecordWaitAssocTxOk (); - // send assoc response with success status. - SendAssocResp (hdr->GetAddr2 (), true); - } - } - else if (hdr->IsDisassociation ()) - { - station->RecordDisassociated (); - } - else if (hdr->IsReassocReq ()) - { - /* we don't support reassoc frames for now */ - } - else if (hdr->IsAuthentication () || - hdr->IsDeauthentication ()) - { - /* - */ - } - else - { - /* unknown mgt frame - */ - } - } - } - else - { - /* damn, what could this be ? a control frame ? - * control frames should never reach the MacHigh so, - * this is likely to be a bug. assert. - */ - NS_ASSERT (false); - } -} - -} // namespace ns3 diff --git a/src/devices/wifi/mac-high-nqap.h b/src/devices/wifi/mac-high-nqap.h deleted file mode 100644 index 215c5d4a5..000000000 --- a/src/devices/wifi/mac-high-nqap.h +++ /dev/null @@ -1,94 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2005,2006 INRIA - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#ifndef MAC_HIGH_NQAP_H -#define MAC_HIGH_NQAP_H - -#include -#include "ns3/mac48-address.h" -#include "ns3/callback.h" -#include "ns3/packet.h" -#include "ns3/nstime.h" -#include "supported-rates.h" - -namespace ns3 { - -class WifiMacHeader; -class WifiNetDevice; -class DcaTxop; -class MacStations; -class WifiPhy; - -/** - * \brief non-QoS AP state machine - * - * Handle association, dis-association and authentication, - * of STAs within an IBSS. - * This class uses two output queues, each of which is server by - * a single DCF - * - the highest priority DCF serves the queue which contains - * only beacons. - * - the lowest priority DCF serves the queue which contains all - * other frames, including user data frames. - */ -class MacHighNqap { -public: - typedef Callback, const Mac48Address &> ForwardCallback; - - MacHighNqap (); - ~MacHighNqap (); - - void SetDcaTxop (Ptr dca); - void SetBeaconDcaTxop (Ptr dca); - void SetDevice (WifiNetDevice *device); - void SetStations (MacStations *stations); - void SetPhy (Ptr phy); - void SetForwardCallback (ForwardCallback callback); - void SetBeaconInterval (Time interval); - - void Queue (Ptr packet, Mac48Address to); - - /** - * Start beacon transmission immediately. - */ - void StartBeaconing (void); - - void Receive (Ptr packet, WifiMacHeader const *hdr); -private: - void ForwardDown (Ptr packet, Mac48Address from, Mac48Address to); - void TxOk (WifiMacHeader const &hdr); - void TxFailed (WifiMacHeader const &hdr); - void SendProbeResp (Mac48Address to); - void SendAssocResp (Mac48Address to, bool success); - void SendOneBeacon (void); - SupportedRates GetSupportedRates (void) const; - - Ptr m_dca; - Ptr m_beaconDca; - WifiNetDevice *m_device; - MacStations *m_stations; - Ptr m_phy; - ForwardCallback m_forwardUp; - Time m_beaconInterval; -}; - -} // namespace ns3 - - -#endif /* MAC_HIGH_NQAP_H */ diff --git a/src/devices/wifi/mac-high-nqsta.cc b/src/devices/wifi/mac-high-nqsta.cc deleted file mode 100644 index 546e3b14a..000000000 --- a/src/devices/wifi/mac-high-nqsta.cc +++ /dev/null @@ -1,414 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2005,2006 INRIA - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ - -#include "ns3/packet.h" -#include "ns3/simulator.h" -#include "ns3/assert.h" -#include "ns3/log.h" -#include "ns3/node.h" - -#include "mac-high-nqsta.h" -#include "wifi-mac-header.h" -#include "wifi-net-device.h" -#include "mgt-headers.h" -#include "wifi-phy.h" -#include "dca-txop.h" -#include "mac-stations.h" - -NS_LOG_COMPONENT_DEFINE ("MacHighNqsta"); - -#define TRACE(x) \ - NS_LOG_DEBUG (Simulator::Now () << " " << m_phy->GetDevice ()->GetNode ()->GetId () << ":" << \ - m_phy->GetDevice ()->GetIfIndex () << " " << x); - -/* - * The state machine for this NQSTA is: - -------------- ----------- - | Associated | <-------------------- -------> | Refused | - -------------- \ / ----------- - \ \ / - \ ----------------- ----------------------------- - \-> | Beacon Missed | --> | Wait Association Response | - ----------------- ----------------------------- - \ ^ - \ | - \ ----------------------- - \-> | Wait Probe Response | - ----------------------- - */ - - -namespace ns3 { - -MacHighNqsta::MacHighNqsta () - : m_state (BEACON_MISSED), - m_probeRequestTimeout (Seconds (0.5)), - m_assocRequestTimeout (Seconds (0.5)), - m_probeRequestEvent (), - m_assocRequestEvent (), - m_beaconWatchdogEnd (Seconds (0.0)) -{ - // this is the default value for the number of beacons missed - // before attempting to reassociate. - m_maxMissedBeacons = 10; -} - -MacHighNqsta::~MacHighNqsta () -{ - m_phy = 0; -} - -void -MacHighNqsta::SetDcaTxop (Ptr dca) -{ - m_dca = dca; -} -void -MacHighNqsta::SetDevice (WifiNetDevice *device) -{ - m_device = device; -} -void -MacHighNqsta::SetForwardCallback (ForwardCallback callback) -{ - m_forward = callback; -} -void -MacHighNqsta::SetAssociatedCallback (AssociatedCallback callback) -{ - m_associatedCallback = callback; -} -void -MacHighNqsta::SetDisAssociatedCallback (DisAssociatedCallback callback) -{ - m_disAssociatedCallback = callback; -} -void -MacHighNqsta::SetPhy (Ptr phy) -{ - m_phy = phy; -} -void -MacHighNqsta::SetStations (MacStations *stations) -{ - m_stations = stations; -} - -void -MacHighNqsta::SetMaxMissedBeacons (uint32_t missed) -{ - m_maxMissedBeacons = missed; -} -void -MacHighNqsta::SetProbeRequestTimeout (Time timeout) -{ - m_probeRequestTimeout = timeout; -} -void -MacHighNqsta::SetAssocRequestTimeout (Time timeout) -{ - m_assocRequestTimeout = timeout; -} - -Mac48Address -MacHighNqsta::GetBssid (void) const -{ - return m_bssid; -} -void -MacHighNqsta::SetBssid (Mac48Address bssid) -{ - m_bssid = bssid; - -} -void -MacHighNqsta::StartActiveAssociation (void) -{ - TryToEnsureAssociated (); -} - -Mac48Address -MacHighNqsta::GetBroadcastBssid (void) -{ - return Mac48Address::GetBroadcast (); -} - -void -MacHighNqsta::SendProbeRequest (void) -{ - TRACE ("send probe request"); - WifiMacHeader hdr; - hdr.SetProbeReq (); - hdr.SetAddr1 (GetBroadcastBssid ()); - hdr.SetAddr2 (m_device->GetSelfAddress ()); - hdr.SetAddr3 (GetBroadcastBssid ()); - hdr.SetDsNotFrom (); - hdr.SetDsNotTo (); - Ptr packet = Create (); - MgtProbeRequestHeader probe; - probe.SetSsid (m_device->GetSsid ()); - probe.SetSupportedRates (GetSupportedRates ()); - packet->AddHeader (probe); - - m_dca->Queue (packet, hdr); - - m_probeRequestEvent = Simulator::Schedule (m_probeRequestTimeout, - &MacHighNqsta::ProbeRequestTimeout, this); -} - -void -MacHighNqsta::SendAssociationRequest (void) -{ - TRACE ("send assoc request to=" << GetBssid ()); - WifiMacHeader hdr; - hdr.SetAssocReq (); - hdr.SetAddr1 (GetBssid ()); - hdr.SetAddr2 (m_device->GetSelfAddress ()); - hdr.SetAddr3 (GetBssid ()); - hdr.SetDsNotFrom (); - hdr.SetDsNotTo (); - Ptr packet = Create (); - MgtAssocRequestHeader assoc; - assoc.SetSsid (m_device->GetSsid ()); - assoc.SetSupportedRates (GetSupportedRates ()); - packet->AddHeader (assoc); - - m_dca->Queue (packet, hdr); - - m_assocRequestEvent = Simulator::Schedule (m_assocRequestTimeout, - &MacHighNqsta::AssocRequestTimeout, this); -} -void -MacHighNqsta::TryToEnsureAssociated (void) -{ - switch (m_state) { - case ASSOCIATED: - return; - break; - case WAIT_PROBE_RESP: - /* we have sent a probe request earlier so we - do not need to re-send a probe request immediately. - We just need to wait until probe-request-timeout - or until we get a probe response - */ - break; - case BEACON_MISSED: - /* we were associated but we missed a bunch of beacons - * so we should assume we are not associated anymore. - * We try to initiate a probe request now. - */ - m_disAssociatedCallback (); - m_state = WAIT_PROBE_RESP; - SendProbeRequest (); - break; - case WAIT_ASSOC_RESP: - /* we have sent an assoc request so we do not need to - re-send an assoc request right now. We just need to - wait until either assoc-request-timeout or until - we get an assoc response. - */ - break; - case REFUSED: - /* we have sent an assoc request and received a negative - assoc resp. We wait until someone restarts an - association with a given ssid. - */ - break; - } -} - -void -MacHighNqsta::AssocRequestTimeout (void) -{ - TRACE ("assoc request timeout"); - m_state = WAIT_ASSOC_RESP; - SendAssociationRequest (); -} -void -MacHighNqsta::ProbeRequestTimeout (void) -{ - TRACE ("probe request timeout"); - m_state = WAIT_PROBE_RESP; - SendProbeRequest (); -} -void -MacHighNqsta::MissedBeacons (void) -{ - if (m_beaconWatchdogEnd > Simulator::Now ()) - { - m_beaconWatchdog = Simulator::Schedule (m_beaconWatchdogEnd - Simulator::Now (), - &MacHighNqsta::MissedBeacons, this); - return; - } - TRACE ("beacon missed"); - m_state = BEACON_MISSED; - TryToEnsureAssociated (); -} -void -MacHighNqsta::RestartBeaconWatchdog (Time delay) -{ - m_beaconWatchdogEnd = std::max (Simulator::Now () + delay, m_beaconWatchdogEnd); - if (Simulator::GetDelayLeft (m_beaconWatchdog) < delay && - m_beaconWatchdog.IsExpired ()) - { - m_beaconWatchdog = Simulator::Schedule (delay, &MacHighNqsta::MissedBeacons, this); - } -} -bool -MacHighNqsta::IsAssociated (void) -{ - return (m_state == ASSOCIATED)?true:false; -} - -void -MacHighNqsta::Queue (Ptr packet, Mac48Address to) -{ - if (!IsAssociated ()) - { - TryToEnsureAssociated (); - return; - } - //TRACE ("enqueue size="<GetSize ()<<", to="<GetSelfAddress ()); - hdr.SetAddr3 (to); - hdr.SetDsNotFrom (); - hdr.SetDsTo (); - m_dca->Queue (packet, hdr); -} - -void -MacHighNqsta::Receive (Ptr packet, WifiMacHeader const *hdr) -{ - NS_ASSERT (!hdr->IsCtl ()); - if (hdr->GetAddr1 () != m_device->GetSelfAddress () && - !hdr->GetAddr1 ().IsBroadcast ()) - { - // packet is not for us - } - else if (hdr->IsData ()) - { - m_forward (packet, hdr->GetAddr2 ()); - } - else if (hdr->IsProbeReq () || - hdr->IsAssocReq ()) - { - /* this is a frame aimed at an AP. - * so we can safely ignore it. - */ - } - else if (hdr->IsBeacon ()) - { - MgtBeaconHeader beacon; - packet->RemoveHeader (beacon); - bool goodBeacon = false; - if (m_device->GetSsid ().IsBroadcast () || - beacon.GetSsid ().IsEqual (m_device->GetSsid ())) - { - Time delay = MicroSeconds (beacon.GetBeaconIntervalUs () * m_maxMissedBeacons); - RestartBeaconWatchdog (delay); - goodBeacon = true; - } - if (goodBeacon) - { - SetBssid (hdr->GetAddr3 ()); - } - if (goodBeacon && m_state == BEACON_MISSED) - { - m_state = WAIT_ASSOC_RESP; - SendAssociationRequest (); - } - } - else if (hdr->IsProbeResp ()) - { - if (m_state == WAIT_PROBE_RESP) - { - MgtProbeResponseHeader probeResp; - packet->RemoveHeader (probeResp); - if (!probeResp.GetSsid ().IsEqual (m_device->GetSsid ())) - { - //not a probe resp for our ssid. - return; - } - SetBssid (hdr->GetAddr3 ()); - Time delay = MicroSeconds (probeResp.GetBeaconIntervalUs () * m_maxMissedBeacons); - RestartBeaconWatchdog (delay); - if (m_probeRequestEvent.IsRunning ()) - { - m_probeRequestEvent.Cancel (); - } - m_state = WAIT_ASSOC_RESP; - SendAssociationRequest (); - } - } - else if (hdr->IsAssocResp ()) - { - if (m_state == WAIT_ASSOC_RESP) - { - MgtAssocResponseHeader assocResp; - packet->RemoveHeader (assocResp); - if (m_assocRequestEvent.IsRunning ()) - { - m_assocRequestEvent.Cancel (); - } - if (assocResp.GetStatusCode ().IsSuccess ()) - { - m_state = ASSOCIATED; - TRACE ("assoc completed"); - SupportedRates rates = assocResp.GetSupportedRates (); - MacStation *ap = m_stations->Lookup (hdr->GetAddr2 ()); - for (uint32_t i = 0; i < m_phy->GetNModes (); i++) - { - WifiMode mode = m_phy->GetMode (i); - if (rates.IsSupportedRate (mode.GetDataRate ())) - { - ap->AddSupportedMode (mode); - if (rates.IsBasicRate (mode.GetDataRate ())) - { - m_stations->AddBasicMode (mode); - } - } - } - m_associatedCallback (); - } - else - { - TRACE ("assoc refused"); - m_state = REFUSED; - } - } - } -} - -SupportedRates -MacHighNqsta::GetSupportedRates (void) const -{ - SupportedRates rates; - for (uint32_t i = 0; i < m_phy->GetNModes (); i++) - { - WifiMode mode = m_phy->GetMode (i); - rates.AddSupportedRate (mode.GetDataRate ()); - } - return rates; -} - -} // namespace ns3 diff --git a/src/devices/wifi/mac-high-nqsta.h b/src/devices/wifi/mac-high-nqsta.h deleted file mode 100644 index db75fc465..000000000 --- a/src/devices/wifi/mac-high-nqsta.h +++ /dev/null @@ -1,137 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2005,2006 INRIA - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#ifndef MAC_HIGH_NQSTA_H -#define MAC_HIGH_NQSTA_H - -#include - -#include "ns3/mac48-address.h" -#include "ns3/callback.h" -#include "ns3/event-id.h" -#include "ns3/packet.h" -#include "ns3/nstime.h" - -#include "supported-rates.h" - -namespace ns3 { - -class WifiMacHeader; -class WifiNetDevice; -class DcaTxop; -class WifiPhy; -class MacStations; - -/** - * \brief a non-QoS STA state machine - * - * This state machine handles association, disassociation, - * authentication and beacon monitoring. It does not perform - * channel scanning. - * If the station detects a certain number of missed beacons - * while associated, it automatically attempts a new association - * sequence. - */ -class MacHighNqsta { -public: - typedef Callback, const Mac48Address &> ForwardCallback; - typedef Callback AssociatedCallback; - typedef Callback DisAssociatedCallback; - - MacHighNqsta (); - ~MacHighNqsta (); - - void SetDcaTxop (Ptr dca); - void SetDevice (WifiNetDevice *device); - void SetForwardCallback (ForwardCallback callback); - void SetAssociatedCallback (AssociatedCallback callback); - void SetDisAssociatedCallback (DisAssociatedCallback callback); - void SetPhy (Ptr phy); - void SetStations (MacStations *stations); - - /** - * \param missed the number of beacons which must be missed - * before a new association sequence is started. - */ - void SetMaxMissedBeacons (uint32_t missed); - /** - * \param timeout - * - * If no probe response is received within the specified - * timeout, the station sends a new probe request. - */ - void SetProbeRequestTimeout (Time timeout); - /** - * \param timeout - * - * If no association response is received within the specified - * timeout, the station sends a new association request. - */ - void SetAssocRequestTimeout (Time timeout); - - Mac48Address GetBssid (void) const; - - /** - * Start an active association sequence immediately. - */ - void StartActiveAssociation (void); - - void Queue (Ptr packet, Mac48Address to); - - void Receive (Ptr packet, WifiMacHeader const *hdr); -private: - void SetBssid (Mac48Address bssid); - Mac48Address GetBroadcastBssid (void); - void SendProbeRequest (void); - void SendAssociationRequest (void); - void TryToEnsureAssociated (void); - void AssocRequestTimeout (void); - void ProbeRequestTimeout (void); - bool IsAssociated (void); - void MissedBeacons (void); - void RestartBeaconWatchdog (Time delay); - SupportedRates GetSupportedRates (void) const; - enum { - ASSOCIATED, - WAIT_PROBE_RESP, - WAIT_ASSOC_RESP, - BEACON_MISSED, - REFUSED - } m_state; - Time m_probeRequestTimeout; - Time m_assocRequestTimeout; - EventId m_probeRequestEvent; - EventId m_assocRequestEvent; - WifiNetDevice *m_device; - ForwardCallback m_forward; - AssociatedCallback m_associatedCallback; - DisAssociatedCallback m_disAssociatedCallback; - Ptr m_dca; - EventId m_beaconWatchdog; - Time m_beaconWatchdogEnd; - Mac48Address m_bssid; - uint32_t m_maxMissedBeacons; - Ptr m_phy; - MacStations *m_stations; -}; - -} // namespace ns3 - - -#endif /* MAC_HIGH_NQSTA_H */