INET Framework for OMNeT++/OMNEST
inet::ieee80211::Ieee80211MgmtAp Class Reference

Used in 802.11 infrastructure mode: handles management frames for an access point (AP). More...

#include <Ieee80211MgmtAp.h>

Inheritance diagram for inet::ieee80211::Ieee80211MgmtAp:
inet::ieee80211::Ieee80211MgmtApBase inet::ieee80211::Ieee80211MgmtBase inet::OperationalBase inet::OperationalMixin< cSimpleModule > inet::ILifecycle

Classes

struct  MacCompare
 
class  NotificationInfoSta
 
struct  StaInfo
 Describes a STA. More...
 

Public Types

typedef std::map< MacAddress, StaInfo, MacCompareStaList
 

Public Member Functions

 Ieee80211MgmtAp ()
 
virtual ~Ieee80211MgmtAp ()
 
- Public Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual ~OperationalMixin ()
 }@ More...
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int) override
 
virtual void handleTimer (cMessage *msg) override
 Implements abstract Ieee80211MgmtBase method. More...
 
virtual void handleCommand (int msgkind, cObject *ctrl) override
 Implements abstract Ieee80211MgmtBase method – throws an error (no commands supported) More...
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, intval_t value, cObject *details) override
 Called by the signal handler whenever a change occurs we're interested in. More...
 
virtual StaInfolookupSenderSTA (const Ptr< const Ieee80211MgmtHeader > &header)
 Utility function: return sender STA's entry from our STA list, or nullptr if not in there. More...
 
virtual void sendManagementFrame (const char *name, const Ptr< Ieee80211MgmtFrame > &body, int subtype, const MacAddress &destAddr)
 Utility function: set fields in the given frame and send it out to the address. More...
 
virtual void sendBeacon ()
 Utility function: creates and sends a beacon frame. More...
 
Processing of different frame types
virtual void handleAuthenticationFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
virtual void handleDeauthenticationFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
virtual void handleAssociationRequestFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
virtual void handleAssociationResponseFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
virtual void handleReassociationRequestFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
virtual void handleReassociationResponseFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
virtual void handleDisassociationFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
virtual void handleBeaconFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
virtual void handleProbeRequestFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
virtual void handleProbeResponseFrame (Packet *packet, const Ptr< const Ieee80211MgmtHeader > &header) override
 
void sendAssocNotification (const MacAddress &addr)
 
void sendDisAssocNotification (const MacAddress &addr)
 
virtual void start () override
 lifecycle support More...
 
virtual void stop () override
 
- Protected Member Functions inherited from inet::ieee80211::Ieee80211MgmtBase
virtual void handleMessageWhenUp (cMessage *msg) override
 Dispatches incoming messages to handleTimer(), handleUpperMessage() or processFrame(). More...
 
virtual void sendDown (Packet *frame)
 Utility method for implementing handleUpperMessage(): send message to MAC. More...
 
virtual void dropManagementFrame (Packet *frame)
 Utility method to dispose of an unhandled frame. More...
 
virtual void processFrame (Packet *packet, const Ptr< const Ieee80211DataOrMgmtHeader > &header)
 Dispatch to frame processing methods according to frame type. More...
 
virtual bool isInitializeStage (int stage) const override
 lifecycle support More...
 
virtual bool isModuleStartStage (int stage) const override
 
virtual bool isModuleStopStage (int stage) const override
 
virtual void handleStartOperation (LifecycleOperation *operation) override
 
virtual void handleStopOperation (LifecycleOperation *operation) override
 
virtual void handleCrashOperation (LifecycleOperation *operation) override
 
- Protected Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual int numInitStages () const override
 
virtual void refreshDisplay () const override
 
virtual void handleMessage (cMessage *msg) override
 
virtual void handleMessageWhenDown (cMessage *msg)
 
virtual bool handleOperationStage (LifecycleOperation *operation, IDoneCallback *doneCallback) override
 Perform one stage of a lifecycle operation. More...
 
virtual State getInitialOperationalState () const
 Returns initial operational state: OPERATING or NOT_OPERATING. More...
 
virtual void handleActiveOperationTimeout (cMessage *message)
 
virtual bool isUp () const
 utility functions More...
 
virtual bool isDown () const
 
virtual void setOperationalState (State newState)
 
virtual void scheduleOperationTimeout (simtime_t timeout)
 
virtual void setupActiveOperation (LifecycleOperation *operation, IDoneCallback *doneCallback, State)
 
virtual void delayActiveOperationFinish (simtime_t timeout)
 
virtual void startActiveOperationExtraTime (simtime_t delay=SIMTIME_ZERO)
 
virtual void startActiveOperationExtraTimeOrFinish (simtime_t extraTime)
 
virtual void finishActiveOperation ()
 

Protected Attributes

std::string ssid
 
int channelNumber = -1
 
simtime_t beaconInterval
 
int numAuthSteps = 0
 
Ieee80211SupportedRatesElement supportedRates
 
StaList staList
 list of STAs More...
 
cMessage * beaconTimer = nullptr
 
- Protected Attributes inherited from inet::ieee80211::Ieee80211MgmtBase
ModuleRefByPar< Ieee80211Mibmib
 
ModuleRefByPar< IInterfaceTableinterfaceTable
 
NetworkInterfacemyIface = nullptr
 
long numMgmtFramesReceived
 
long numMgmtFramesDropped
 
- Protected Attributes inherited from inet::OperationalMixin< cSimpleModule >
State operationalState
 
simtime_t lastChange
 
Operation activeOperation
 
cMessage * activeOperationTimeout
 
cMessage * activeOperationExtraTimer
 

Additional Inherited Members

- Protected Types inherited from inet::OperationalMixin< cSimpleModule >
enum  State
 

Detailed Description

Used in 802.11 infrastructure mode: handles management frames for an access point (AP).

See corresponding NED file for a detailed description.

Member Typedef Documentation

◆ StaList

Constructor & Destructor Documentation

◆ Ieee80211MgmtAp()

inet::ieee80211::Ieee80211MgmtAp::Ieee80211MgmtAp ( )
inline
64 {}

◆ ~Ieee80211MgmtAp()

inet::ieee80211::Ieee80211MgmtAp::~Ieee80211MgmtAp ( )
virtual
37 {
38  cancelAndDelete(beaconTimer);
39 }

Member Function Documentation

◆ handleAssociationRequestFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleAssociationRequestFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

210 {
211  EV << "Processing AssociationRequest frame\n";
212 
213  // "11.3.2 AP association procedures"
214  StaInfo *sta = lookupSenderSTA(header);
215  if (!sta || mib->bssAccessPointData.stations[sta->address] == Ieee80211Mib::NOT_AUTHENTICATED) {
216  // STA not authenticated: send error and return
217  const auto& body = makeShared<Ieee80211DeauthenticationFrame>();
218  body->setReasonCode(RC_NONAUTH_ASS_REQUEST);
219  sendManagementFrame("Deauth", body, ST_DEAUTHENTICATION, header->getTransmitterAddress());
220  delete packet;
221  return;
222  }
223 
224  delete packet;
225 
226  // mark STA as associated
227  if (mib->bssAccessPointData.stations[sta->address] != Ieee80211Mib::ASSOCIATED)
228  sendAssocNotification(sta->address);
229  mib->bssAccessPointData.stations[sta->address] = Ieee80211Mib::ASSOCIATED; // TODO this should only take place when MAC receives the ACK for the response
230 
231  // send OK response
232  const auto& body = makeShared<Ieee80211AssociationResponseFrame>();
233  body->setStatusCode(SC_SUCCESSFUL);
234  body->setAid(0); // TODO
235  body->setSupportedRates(supportedRates);
236  body->setChunkLength(B(2 + 2 + 2 + body->getSupportedRates().numRates + 2));
237  sendManagementFrame("AssocResp-OK", body, ST_ASSOCIATIONRESPONSE, sta->address);
238 }

◆ handleAssociationResponseFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleAssociationResponseFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

241 {
242  dropManagementFrame(packet);
243 }

◆ handleAuthenticationFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleAuthenticationFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

124 {
125  const auto& requestBody = packet->peekData<Ieee80211AuthenticationFrame>();
126  int frameAuthSeq = requestBody->getSequenceNumber();
127  EV << "Processing Authentication frame, seqNum=" << frameAuthSeq << "\n";
128 
129  // create STA entry if needed
130  StaInfo *sta = lookupSenderSTA(header);
131  if (!sta) {
132  MacAddress staAddress = header->getTransmitterAddress();
133  sta = &staList[staAddress]; // this implicitly creates a new entry
134  sta->address = staAddress;
135  mib->bssAccessPointData.stations[staAddress] = Ieee80211Mib::NOT_AUTHENTICATED;
136  sta->authSeqExpected = 1;
137  }
138 
139  // reset authentication status, when starting a new auth sequence
140  // The statements below are added because the L2 handover time was greater than before when
141  // a STA wants to re-connect to an AP with which it was associated before. When the STA wants to
142  // associate again with the previous AP, then since the AP is already having an entry of the STA
143  // because of old association, and thus it is expecting an authentication frame number 3 but it
144  // receives authentication frame number 1 from STA, which will cause the AP to return an Auth-Error
145  // making the MN STA to start the handover process all over again.
146  if (frameAuthSeq == 1) {
147  if (mib->bssAccessPointData.stations[sta->address] == Ieee80211Mib::ASSOCIATED)
148  sendDisAssocNotification(sta->address);
149  mib->bssAccessPointData.stations[sta->address] = Ieee80211Mib::NOT_AUTHENTICATED;
150  sta->authSeqExpected = 1;
151  }
152 
153  // check authentication sequence number is OK
154  if (frameAuthSeq != sta->authSeqExpected) {
155  // wrong sequence number: send error and return
156  EV << "Wrong sequence number, " << sta->authSeqExpected << " expected\n";
157  const auto& body = makeShared<Ieee80211AuthenticationFrame>();
158  body->setStatusCode(SC_AUTH_OUT_OF_SEQ);
159  sendManagementFrame("Auth-ERROR", body, ST_AUTHENTICATION, header->getTransmitterAddress());
160  delete packet;
161  sta->authSeqExpected = 1; // go back to start square
162  return;
163  }
164 
165  // station is authenticated if it made it through the required number of steps
166  bool isLast = (frameAuthSeq + 1 == numAuthSteps);
167 
168  // send OK response (we don't model the cryptography part, just assume
169  // successful authentication every time)
170  EV << "Sending Authentication frame, seqNum=" << (frameAuthSeq + 1) << "\n";
171  const auto& body = makeShared<Ieee80211AuthenticationFrame>();
172  body->setSequenceNumber(frameAuthSeq + 1);
173  body->setStatusCode(SC_SUCCESSFUL);
174  body->setIsLast(isLast);
175  // TODO frame length could be increased to account for challenge text length etc.
176  sendManagementFrame(isLast ? "Auth-OK" : "Auth", body, ST_AUTHENTICATION, header->getTransmitterAddress());
177 
178  delete packet;
179 
180  // update status
181  if (isLast) {
182  if (mib->bssAccessPointData.stations[sta->address] == Ieee80211Mib::ASSOCIATED)
183  sendDisAssocNotification(sta->address);
184  mib->bssAccessPointData.stations[sta->address] = Ieee80211Mib::AUTHENTICATED; // TODO only when ACK of this frame arrives
185  EV << "STA authenticated\n";
186  }
187  else {
188  sta->authSeqExpected += 2;
189  EV << "Expecting Authentication frame " << sta->authSeqExpected << "\n";
190  }
191 }

◆ handleBeaconFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleBeaconFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

292 {
293  dropManagementFrame(packet);
294 }

◆ handleCommand()

void inet::ieee80211::Ieee80211MgmtAp::handleCommand ( int  msgkind,
cObject *  ctrl 
)
overrideprotectedvirtual

Implements abstract Ieee80211MgmtBase method – throws an error (no commands supported)

Implements inet::ieee80211::Ieee80211MgmtBase.

82 {
83  throw cRuntimeError("handleCommand(): no commands supported");
84 }

◆ handleDeauthenticationFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleDeauthenticationFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

194 {
195  EV << "Processing Deauthentication frame\n";
196 
197  StaInfo *sta = lookupSenderSTA(header);
198  delete packet;
199 
200  if (sta) {
201  // mark STA as not authenticated; alternatively, it could also be removed from staList
202  if (mib->bssAccessPointData.stations[sta->address] == Ieee80211Mib::ASSOCIATED)
203  sendDisAssocNotification(sta->address);
204  mib->bssAccessPointData.stations[sta->address] = Ieee80211Mib::NOT_AUTHENTICATED;
205  sta->authSeqExpected = 1;
206  }
207 }

◆ handleDisassociationFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleDisassociationFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

280 {
281  StaInfo *sta = lookupSenderSTA(header);
282  delete packet;
283 
284  if (sta) {
285  if (mib->bssAccessPointData.stations[sta->address] == Ieee80211Mib::ASSOCIATED)
286  sendDisAssocNotification(sta->address);
287  mib->bssAccessPointData.stations[sta->address] = Ieee80211Mib::AUTHENTICATED;
288  }
289 }

◆ handleProbeRequestFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleProbeRequestFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

297 {
298  EV << "Processing ProbeRequest frame\n";
299 
300  const auto& requestBody = packet->peekData<Ieee80211ProbeRequestFrame>();
301  if (strcmp(requestBody->getSSID(), "") != 0 && strcmp(requestBody->getSSID(), ssid.c_str()) != 0) {
302  EV << "SSID `" << requestBody->getSSID() << "' does not match, ignoring frame\n";
303  dropManagementFrame(packet);
304  return;
305  }
306 
307  MacAddress staAddress = header->getTransmitterAddress();
308  delete packet;
309 
310  EV << "Sending ProbeResponse frame\n";
311  const auto& body = makeShared<Ieee80211ProbeResponseFrame>();
312  body->setSSID(ssid.c_str());
313  body->setSupportedRates(supportedRates);
314  body->setBeaconInterval(beaconInterval);
315  body->setChannelNumber(channelNumber);
316  body->setChunkLength(B(8 + 2 + 2 + (2 + ssid.length()) + (2 + supportedRates.numRates)));
317  sendManagementFrame("ProbeResp", body, ST_PROBERESPONSE, staAddress);
318 }

◆ handleProbeResponseFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleProbeResponseFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

321 {
322  dropManagementFrame(packet);
323 }

◆ handleReassociationRequestFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleReassociationRequestFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

246 {
247  EV << "Processing ReassociationRequest frame\n";
248 
249  // "11.3.4 AP reassociation procedures" -- almost the same as AssociationRequest processing
250  StaInfo *sta = lookupSenderSTA(header);
251  if (!sta || mib->bssAccessPointData.stations[sta->address] == Ieee80211Mib::NOT_AUTHENTICATED) {
252  // STA not authenticated: send error and return
253  const auto& body = makeShared<Ieee80211DeauthenticationFrame>();
254  body->setReasonCode(RC_NONAUTH_ASS_REQUEST);
255  sendManagementFrame("Deauth", body, ST_DEAUTHENTICATION, header->getTransmitterAddress());
256  delete packet;
257  return;
258  }
259 
260  delete packet;
261 
262  // mark STA as associated
263  mib->bssAccessPointData.stations[sta->address] = Ieee80211Mib::ASSOCIATED; // TODO this should only take place when MAC receives the ACK for the response
264 
265  // send OK response
266  const auto& body = makeShared<Ieee80211ReassociationResponseFrame>();
267  body->setStatusCode(SC_SUCCESSFUL);
268  body->setAid(0); // TODO
269  body->setSupportedRates(supportedRates);
270  body->setChunkLength(B(2 + (2 + ssid.length()) + (2 + supportedRates.numRates) + 6));
271  sendManagementFrame("ReassocResp-OK", body, ST_REASSOCIATIONRESPONSE, sta->address);
272 }

◆ handleReassociationResponseFrame()

void inet::ieee80211::Ieee80211MgmtAp::handleReassociationResponseFrame ( Packet packet,
const Ptr< const Ieee80211MgmtHeader > &  header 
)
overrideprotectedvirtual

Implements inet::ieee80211::Ieee80211MgmtBase.

275 {
276  dropManagementFrame(packet);
277 }

◆ handleTimer()

void inet::ieee80211::Ieee80211MgmtAp::handleTimer ( cMessage *  msg)
overrideprotectedvirtual

Implements abstract Ieee80211MgmtBase method.

Implements inet::ieee80211::Ieee80211MgmtBase.

71 {
72  if (msg == beaconTimer) {
73  sendBeacon();
74  scheduleAfter(beaconInterval, beaconTimer);
75  }
76  else {
77  throw cRuntimeError("internal error: unrecognized timer '%s'", msg->getName());
78  }
79 }

◆ initialize()

void inet::ieee80211::Ieee80211MgmtAp::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::ieee80211::Ieee80211MgmtApBase.

42 {
44 
45  if (stage == INITSTAGE_LOCAL) {
46  // read params and init vars
47  ssid = par("ssid").stdstringValue();
48  beaconInterval = par("beaconInterval");
49  numAuthSteps = par("numAuthSteps");
50  if (numAuthSteps != 2 && numAuthSteps != 4)
51  throw cRuntimeError("parameter 'numAuthSteps' (number of frames exchanged during authentication) must be 2 or 4, not %d", numAuthSteps);
52  channelNumber = -1; // value will arrive from physical layer in receiveChangeNotification()
53  WATCH(ssid);
54  WATCH(channelNumber);
55  WATCH(beaconInterval);
56  WATCH(numAuthSteps);
57  WATCH_MAP(staList);
58 
59  // TODO fill in supportedRates
60 
61  // subscribe for notifications
62  cModule *radioModule = getModuleFromPar<cModule>(par("radioModule"), this);
63  radioModule->subscribe(Ieee80211Radio::radioChannelChangedSignal, this);
64 
65  // start beacon timer (randomize startup time)
66  beaconTimer = new cMessage("beaconTimer");
67  }
68 }

◆ lookupSenderSTA()

Ieee80211MgmtAp::StaInfo * inet::ieee80211::Ieee80211MgmtAp::lookupSenderSTA ( const Ptr< const Ieee80211MgmtHeader > &  header)
protectedvirtual

Utility function: return sender STA's entry from our STA list, or nullptr if not in there.

97 {
98  auto it = staList.find(header->getTransmitterAddress());
99  return it == staList.end() ? nullptr : &(it->second);
100 }

◆ numInitStages()

virtual int inet::ieee80211::Ieee80211MgmtAp::numInitStages ( ) const
inlineoverrideprotectedvirtual

Reimplemented from inet::ieee80211::Ieee80211MgmtApBase.

68 { return NUM_INIT_STAGES; }

◆ receiveSignal()

void inet::ieee80211::Ieee80211MgmtAp::receiveSignal ( cComponent *  source,
simsignal_t  signalID,
intval_t  value,
cObject *  details 
)
overrideprotectedvirtual

Called by the signal handler whenever a change occurs we're interested in.

87 {
88  Enter_Method("%s", cComponent::getSignalName(signalID));
89 
91  EV << "updating channel number\n";
92  channelNumber = value;
93  }
94 }

◆ sendAssocNotification()

void inet::ieee80211::Ieee80211MgmtAp::sendAssocNotification ( const MacAddress addr)
protected
326 {
327  NotificationInfoSta notif;
328  notif.setApAddress(mib->address);
329  notif.setStaAddress(addr);
330  emit(l2ApAssociatedSignal, &notif);
331 }

◆ sendBeacon()

void inet::ieee80211::Ieee80211MgmtAp::sendBeacon ( )
protectedvirtual

Utility function: creates and sends a beacon frame.

112 {
113  EV << "Sending beacon\n";
114  const auto& body = makeShared<Ieee80211BeaconFrame>();
115  body->setSSID(ssid.c_str());
116  body->setSupportedRates(supportedRates);
117  body->setBeaconInterval(beaconInterval);
118  body->setChannelNumber(channelNumber);
119  body->setChunkLength(B(8 + 2 + 2 + (2 + ssid.length()) + (2 + supportedRates.numRates)));
121 }

◆ sendDisAssocNotification()

void inet::ieee80211::Ieee80211MgmtAp::sendDisAssocNotification ( const MacAddress addr)
protected
334 {
335  NotificationInfoSta notif;
336  notif.setApAddress(mib->address);
337  notif.setStaAddress(addr);
338  emit(l2ApDisassociatedSignal, &notif);
339 }

◆ sendManagementFrame()

void inet::ieee80211::Ieee80211MgmtAp::sendManagementFrame ( const char *  name,
const Ptr< Ieee80211MgmtFrame > &  body,
int  subtype,
const MacAddress destAddr 
)
protectedvirtual

Utility function: set fields in the given frame and send it out to the address.

103 {
104  auto packet = new Packet(name);
105  packet->addTag<MacAddressReq>()->setDestAddress(destAddr);
106  packet->addTag<Ieee80211SubtypeReq>()->setSubtype(subtype);
107  packet->insertAtBack(body);
108  sendDown(packet);
109 }

◆ start()

void inet::ieee80211::Ieee80211MgmtAp::start ( )
overrideprotectedvirtual

lifecycle support

Reimplemented from inet::ieee80211::Ieee80211MgmtBase.

342 {
344  scheduleAfter(uniform(0, beaconInterval), beaconTimer);
345 }

◆ stop()

void inet::ieee80211::Ieee80211MgmtAp::stop ( )
overrideprotectedvirtual

Reimplemented from inet::ieee80211::Ieee80211MgmtBase.

348 {
349  cancelEvent(beaconTimer);
350  staList.clear();
352 }

Member Data Documentation

◆ beaconInterval

simtime_t inet::ieee80211::Ieee80211MgmtAp::beaconInterval
protected

◆ beaconTimer

cMessage* inet::ieee80211::Ieee80211MgmtAp::beaconTimer = nullptr
protected

◆ channelNumber

int inet::ieee80211::Ieee80211MgmtAp::channelNumber = -1
protected

◆ numAuthSteps

int inet::ieee80211::Ieee80211MgmtAp::numAuthSteps = 0
protected

◆ ssid

std::string inet::ieee80211::Ieee80211MgmtAp::ssid
protected

◆ staList

StaList inet::ieee80211::Ieee80211MgmtAp::staList
protected

list of STAs

◆ supportedRates

Ieee80211SupportedRatesElement inet::ieee80211::Ieee80211MgmtAp::supportedRates
protected

The documentation for this class was generated from the following files:
inet::ieee80211::Ieee80211MgmtAp::channelNumber
int channelNumber
Definition: Ieee80211MgmtAp.h:54
inet::ieee80211::Ieee80211MgmtAp::beaconInterval
simtime_t beaconInterval
Definition: Ieee80211MgmtAp.h:55
inet::l2ApDisassociatedSignal
simsignal_t l2ApDisassociatedSignal
Definition: Simsignals.cc:20
inet::ieee80211::Ieee80211MgmtAp::sendManagementFrame
virtual void sendManagementFrame(const char *name, const Ptr< Ieee80211MgmtFrame > &body, int subtype, const MacAddress &destAddr)
Utility function: set fields in the given frame and send it out to the address.
Definition: Ieee80211MgmtAp.cc:102
inet::ieee80211::Ieee80211MgmtAp::staList
StaList staList
list of STAs
Definition: Ieee80211MgmtAp.h:60
inet::ieee80211::Ieee80211MgmtAp::supportedRates
Ieee80211SupportedRatesElement supportedRates
Definition: Ieee80211MgmtAp.h:57
inet::ieee80211::Ieee80211MgmtAp::sendDisAssocNotification
void sendDisAssocNotification(const MacAddress &addr)
Definition: Ieee80211MgmtAp.cc:333
inet::ieee80211::Ieee80211MgmtBase::mib
ModuleRefByPar< Ieee80211Mib > mib
Definition: Ieee80211MgmtBase.h:33
inet::ieee80211::RC_NONAUTH_ASS_REQUEST
@ RC_NONAUTH_ASS_REQUEST
Definition: Ieee80211MgmtFrame_m.h:149
inet::ieee80211::Ieee80211Mib::NOT_AUTHENTICATED
@ NOT_AUTHENTICATED
Definition: Ieee80211Mib.h:32
inet::ieee80211::Ieee80211MgmtAp::lookupSenderSTA
virtual StaInfo * lookupSenderSTA(const Ptr< const Ieee80211MgmtHeader > &header)
Utility function: return sender STA's entry from our STA list, or nullptr if not in there.
Definition: Ieee80211MgmtAp.cc:96
inet::ieee80211::Ieee80211MgmtBase::dropManagementFrame
virtual void dropManagementFrame(Packet *frame)
Utility method to dispose of an unhandled frame.
Definition: Ieee80211MgmtBase.cc:75
inet::ieee80211::Ieee80211Mib::AUTHENTICATED
@ AUTHENTICATED
Definition: Ieee80211Mib.h:33
inet::ieee80211::ST_REASSOCIATIONRESPONSE
@ ST_REASSOCIATIONRESPONSE
Definition: Ieee80211Frame_m.h:152
inet::units::units::B
intscale< b, 1, 8 > B
Definition: Units.h:1168
inet::ieee80211::ST_AUTHENTICATION
@ ST_AUTHENTICATION
Definition: Ieee80211Frame_m.h:158
inet::l2ApAssociatedSignal
simsignal_t l2ApAssociatedSignal
Definition: Simsignals.cc:19
inet::ieee80211::Ieee80211MgmtApBase::initialize
virtual void initialize(int) override
Definition: Ieee80211MgmtApBase.cc:24
inet::ieee80211::Ieee80211SupportedRatesElement::numRates
short numRates
Definition: Ieee80211MgmtFrame_m.h:245
inet::ieee80211::ST_DEAUTHENTICATION
@ ST_DEAUTHENTICATION
Definition: Ieee80211Frame_m.h:159
inet::ieee80211::Ieee80211MgmtAp::beaconTimer
cMessage * beaconTimer
Definition: Ieee80211MgmtAp.h:61
inet::ieee80211::Ieee80211MgmtBase::sendDown
virtual void sendDown(Packet *frame)
Utility method for implementing handleUpperMessage(): send message to MAC.
Definition: Ieee80211MgmtBase.cc:68
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::ieee80211::SC_SUCCESSFUL
@ SC_SUCCESSFUL
Definition: Ieee80211MgmtFrame_m.h:196
inet::ieee80211::ST_BEACON
@ ST_BEACON
Definition: Ieee80211Frame_m.h:155
inet::ieee80211::ST_PROBERESPONSE
@ ST_PROBERESPONSE
Definition: Ieee80211Frame_m.h:154
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::physicallayer::Ieee80211Radio::radioChannelChangedSignal
static simsignal_t radioChannelChangedSignal
This signal is emitted every time the radio channel changes.
Definition: Ieee80211Radio.h:29
inet::ieee80211::ST_ASSOCIATIONRESPONSE
@ ST_ASSOCIATIONRESPONSE
Definition: Ieee80211Frame_m.h:150
inet::ieee80211::Ieee80211MgmtBase::stop
virtual void stop()
Definition: Ieee80211MgmtBase.cc:144
inet::ieee80211::Ieee80211MgmtAp::sendBeacon
virtual void sendBeacon()
Utility function: creates and sends a beacon frame.
Definition: Ieee80211MgmtAp.cc:111
Enter_Method
#define Enter_Method(...)
Definition: SelfDoc.h:71
inet::ieee80211::Ieee80211MgmtAp::sendAssocNotification
void sendAssocNotification(const MacAddress &addr)
Definition: Ieee80211MgmtAp.cc:325
inet::MacAddress::BROADCAST_ADDRESS
static const MacAddress BROADCAST_ADDRESS
The broadcast MAC address, ff:ff:ff:ff:ff:ff.
Definition: MacAddress.h:34
inet::ieee80211::Ieee80211MgmtAp::numAuthSteps
int numAuthSteps
Definition: Ieee80211MgmtAp.h:56
inet::ieee80211::SC_AUTH_OUT_OF_SEQ
@ SC_AUTH_OUT_OF_SEQ
Definition: Ieee80211MgmtFrame_m.h:202
inet::ieee80211::Ieee80211MgmtBase::start
virtual void start()
Definition: Ieee80211MgmtBase.cc:140
inet::ieee80211::Ieee80211Mib::ASSOCIATED
@ ASSOCIATED
Definition: Ieee80211Mib.h:34
inet::ieee80211::Ieee80211MgmtAp::ssid
std::string ssid
Definition: Ieee80211MgmtAp.h:53