|
|
| 57 |
void NotifyTxSuccess (uint32_t retryCounter); |
57 |
void NotifyTxSuccess (uint32_t retryCounter); |
| 58 |
/// Updates average frame error rate when final data or RTS has failed. |
58 |
/// Updates average frame error rate when final data or RTS has failed. |
| 59 |
void NotifyTxFailed (); |
59 |
void NotifyTxFailed (); |
| 60 |
/// Returns frame error rate (probability that frame is corrupted due to transmission error). |
60 |
/// Return frame error rate (probability that frame is corrupted due to transmission error). |
| 61 |
double GetFrameErrorRate () const; |
61 |
double GetFrameErrorRate () const; |
| 62 |
private: |
62 |
private: |
| 63 |
/** |
63 |
/** |
| 64 |
* \brief Calculate averaging coefficient for frame error rate. Depends on time of the last update. |
64 |
* \brief Calculate averaging coefficient for frame error rate. Depends on time of the last update. |
| 65 |
* \attention Calling this method twice gives different results, |
65 |
* \attention Calling this method twice gives different results, |
| 66 |
* because it resets time of last update. |
66 |
* because it resets time of last update. |
|
|
67 |
* |
| 68 |
* \return average coefficient for frame error rate |
| 67 |
*/ |
69 |
*/ |
| 68 |
double CalculateAveragingCoefficient (); |
70 |
double CalculateAveragingCoefficient (); |
| 69 |
/// averaging coefficient depends on the memory time |
71 |
/// averaging coefficient depends on the memory time |
|
|
| 88 |
WifiRemoteStationManager (); |
90 |
WifiRemoteStationManager (); |
| 89 |
virtual ~WifiRemoteStationManager (); |
91 |
virtual ~WifiRemoteStationManager (); |
| 90 |
|
92 |
|
|
|
93 |
/** |
| 94 |
* Set up PHY associated with this device since it is the object that |
| 95 |
* knows the full set of transmit rates that are supported. |
| 96 |
* |
| 97 |
* \param phy the PHY of this device |
| 98 |
*/ |
| 91 |
virtual void SetupPhy (Ptr<WifiPhy> phy); |
99 |
virtual void SetupPhy (Ptr<WifiPhy> phy); |
| 92 |
|
100 |
|
|
|
101 |
/** |
| 102 |
* Return the maximum STA short retry count (SSRC). |
| 103 |
* |
| 104 |
* \return the maximum SSRC |
| 105 |
*/ |
| 93 |
uint32_t GetMaxSsrc (void) const; |
106 |
uint32_t GetMaxSsrc (void) const; |
|
|
107 |
/** |
| 108 |
* Return the maximum STA long retry count (SLRC). |
| 109 |
* |
| 110 |
* \return the maximum SLRC |
| 111 |
*/ |
| 94 |
uint32_t GetMaxSlrc (void) const; |
112 |
uint32_t GetMaxSlrc (void) const; |
|
|
113 |
/** |
| 114 |
* Return the RTS threshold. |
| 115 |
* |
| 116 |
* \return the RTS threshold |
| 117 |
*/ |
| 95 |
uint32_t GetRtsCtsThreshold (void) const; |
118 |
uint32_t GetRtsCtsThreshold (void) const; |
|
|
119 |
/** |
| 120 |
* Return the fragmentation threshold. |
| 121 |
* |
| 122 |
* \return the fragmentation threshold |
| 123 |
*/ |
| 96 |
uint32_t GetFragmentationThreshold (void) const; |
124 |
uint32_t GetFragmentationThreshold (void) const; |
|
|
125 |
/** |
| 126 |
* Sets the maximum STA short retry count (SSRC). |
| 127 |
* |
| 128 |
* \param the maximum SSRC |
| 129 |
*/ |
| 97 |
void SetMaxSsrc (uint32_t maxSsrc); |
130 |
void SetMaxSsrc (uint32_t maxSsrc); |
|
|
131 |
/** |
| 132 |
* Sets the maximum STA long retry count (SLRC). |
| 133 |
* |
| 134 |
* \param the maximum SLRC |
| 135 |
*/ |
| 98 |
void SetMaxSlrc (uint32_t maxSlrc); |
136 |
void SetMaxSlrc (uint32_t maxSlrc); |
|
|
137 |
/** |
| 138 |
* Sets the RTS threshold. |
| 139 |
* |
| 140 |
* \param the RTS threshold |
| 141 |
*/ |
| 99 |
void SetRtsCtsThreshold (uint32_t threshold); |
142 |
void SetRtsCtsThreshold (uint32_t threshold); |
|
|
143 |
/** |
| 144 |
* Sets a fragmentation threshold. The method calls a private method |
| 145 |
* DoSetFragmentationThreshold that checks the validity of the value given. |
| 146 |
* |
| 147 |
* \param threshold the fragmentation threshold |
| 148 |
*/ |
| 100 |
void SetFragmentationThreshold (uint32_t threshold); |
149 |
void SetFragmentationThreshold (uint32_t threshold); |
| 101 |
void AddStationHtCapabilities (Mac48Address from,HtCapabilities htcapabilities); |
150 |
/** |
|
|
151 |
* Records HT capabilities of remote station. |
| 152 |
* |
| 153 |
* \param from the address of the station being recorded |
| 154 |
* \param htcapabilities the HT capabilities of the station |
| 155 |
*/ |
| 156 |
void AddStationHtCapabilities (Mac48Address from, HtCapabilities htcapabilities); |
| 157 |
/** |
| 158 |
* Enable or disable HT capability support. |
| 159 |
* |
| 160 |
* \param enable enable or disable HT capability support |
| 161 |
*/ |
| 102 |
void SetHtSupported (bool enable); |
162 |
void SetHtSupported (bool enable); |
|
|
163 |
/** |
| 164 |
* Return whether the device has HT capability support enabled. |
| 165 |
* |
| 166 |
* \return true if HT capability support is enabled, false otherwise |
| 167 |
*/ |
| 103 |
bool HasHtSupported (void) const; |
168 |
bool HasHtSupported (void) const; |
| 104 |
|
169 |
|
| 105 |
// Invoked in a STA upon dis-association |
170 |
/** |
| 106 |
// or in an AP upon reboot |
171 |
* Reset the station, invoked in a STA upon dis-association or in an AP upon reboot. |
|
|
172 |
*/ |
| 107 |
void Reset (void); |
173 |
void Reset (void); |
| 108 |
// Invoked in a STA upon association to store |
174 |
/** |
| 109 |
// the set of rates which belong to the |
175 |
* Invoked in a STA upon association to store the set of rates which belong to the |
| 110 |
// BSSBasicRateSet of the associated AP |
176 |
* BSSBasicRateSet of the associated AP and which are supported locally. |
| 111 |
// and which are supported locally. |
177 |
* Invoked in an AP to configure the BSSBasicRateSet. |
| 112 |
// Invoked in an AP to configure the BSSBasicRateSet |
178 |
* |
|
|
179 |
* \param mode the WifiMode to be added to the basic mode set |
| 180 |
*/ |
| 113 |
void AddBasicMode (WifiMode mode); |
181 |
void AddBasicMode (WifiMode mode); |
| 114 |
|
182 |
|
|
|
183 |
/** |
| 184 |
* Return the default transmission mode. |
| 185 |
* |
| 186 |
* \return WifiMode the default transmission mode |
| 187 |
*/ |
| 115 |
WifiMode GetDefaultMode (void) const; |
188 |
WifiMode GetDefaultMode (void) const; |
|
|
189 |
/** |
| 190 |
* Return the number of basic modes we support. |
| 191 |
* |
| 192 |
* \return the number of basic modes we support |
| 193 |
*/ |
| 116 |
uint32_t GetNBasicModes (void) const; |
194 |
uint32_t GetNBasicModes (void) const; |
|
|
195 |
/** |
| 196 |
* Return a basic mode from the set of basic modes. |
| 197 |
* |
| 198 |
* \param i index of the basic mode in the basic mode set |
| 199 |
* \return the basic mode at the given index |
| 200 |
*/ |
| 117 |
WifiMode GetBasicMode (uint32_t i) const; |
201 |
WifiMode GetBasicMode (uint32_t i) const; |
|
|
202 |
/** |
| 203 |
* Return whether the station supports Greenfield or not. |
| 204 |
* |
| 205 |
* \param address the address of the station |
| 206 |
* \return true if Greenfield is supported by the station, |
| 207 |
* false otherwise |
| 208 |
*/ |
| 118 |
bool GetGreenfieldSupported (Mac48Address address) const; |
209 |
bool GetGreenfieldSupported (Mac48Address address) const; |
| 119 |
void AddBasicMcs (uint8_t mcs); |
210 |
void AddBasicMcs (uint8_t mcs); |
| 120 |
|
211 |
|
|
|
| 123 |
uint8_t GetBasicMcs (uint32_t i) const; |
214 |
uint8_t GetBasicMcs (uint32_t i) const; |
| 124 |
void AddSupportedMcs (Mac48Address address, uint8_t mcs); |
215 |
void AddSupportedMcs (Mac48Address address, uint8_t mcs); |
| 125 |
|
216 |
|
|
|
217 |
/** |
| 218 |
* Return a mode for non-unicast packets. |
| 219 |
* |
| 220 |
* \return WifiMode for non-unicast packets |
| 221 |
*/ |
| 126 |
WifiMode GetNonUnicastMode (void) const; |
222 |
WifiMode GetNonUnicastMode (void) const; |
| 127 |
|
223 |
|
| 128 |
|
224 |
|
| 129 |
/** |
225 |
/** |
| 130 |
* Invoked in an AP upon disassociation of a |
226 |
* Invoked in an AP upon disassociation of a |
| 131 |
* specific STA. |
227 |
* specific STA. |
|
|
228 |
* |
| 229 |
* \param address the address of the STA |
| 132 |
*/ |
230 |
*/ |
| 133 |
void Reset (Mac48Address address); |
231 |
void Reset (Mac48Address address); |
| 134 |
/** |
232 |
/** |
|
|
| 137 |
* also supported locally. |
235 |
* also supported locally. |
| 138 |
* The set of supported modes includes |
236 |
* The set of supported modes includes |
| 139 |
* the BSSBasicRateSet. |
237 |
* the BSSBasicRateSet. |
|
|
238 |
* |
| 239 |
* \param address the address of the station being recorded |
| 240 |
* \param mode the WifiMode supports by the station |
| 140 |
*/ |
241 |
*/ |
| 141 |
void AddSupportedMode (Mac48Address address, WifiMode mode); |
242 |
void AddSupportedMode (Mac48Address address, WifiMode mode); |
| 142 |
//void AddBssMembershipParameters(Mac48Address address, uint32_t selector); |
243 |
//void AddBssMembershipParameters(Mac48Address address, uint32_t selector); |
| 143 |
|
244 |
|
|
|
245 |
/** |
| 246 |
* Return whether the station state is brand new. |
| 247 |
* |
| 248 |
* \param address the address of the station |
| 249 |
* \return true if the state of the station is brand new, |
| 250 |
* false otherwise |
| 251 |
*/ |
| 144 |
bool IsBrandNew (Mac48Address address) const; |
252 |
bool IsBrandNew (Mac48Address address) const; |
|
|
253 |
/** |
| 254 |
* Return whether the station associated. |
| 255 |
* |
| 256 |
* \param address the address of the station |
| 257 |
* \return true if the station is associated, |
| 258 |
* false otherwise |
| 259 |
*/ |
| 145 |
bool IsAssociated (Mac48Address address) const; |
260 |
bool IsAssociated (Mac48Address address) const; |
|
|
261 |
/** |
| 262 |
* Return whether we are waiting for an ACK for |
| 263 |
* the association response we sent. |
| 264 |
* |
| 265 |
* \param address the address of the station |
| 266 |
* \return true if the station is associated, |
| 267 |
* false otherwise |
| 268 |
*/ |
| 146 |
bool IsWaitAssocTxOk (Mac48Address address) const; |
269 |
bool IsWaitAssocTxOk (Mac48Address address) const; |
|
|
270 |
/** |
| 271 |
* Records that we are waiting for an ACK for |
| 272 |
* the association response we sent. |
| 273 |
* |
| 274 |
* \param address the address of the station |
| 275 |
*/ |
| 147 |
void RecordWaitAssocTxOk (Mac48Address address); |
276 |
void RecordWaitAssocTxOk (Mac48Address address); |
|
|
277 |
/** |
| 278 |
* Records that we got an ACK for |
| 279 |
* the association response we sent. |
| 280 |
* |
| 281 |
* \param address the address of the station |
| 282 |
*/ |
| 148 |
void RecordGotAssocTxOk (Mac48Address address); |
283 |
void RecordGotAssocTxOk (Mac48Address address); |
|
|
284 |
/** |
| 285 |
* Records that we missed an ACK for |
| 286 |
* the association response we sent. |
| 287 |
* |
| 288 |
* \param address the address of the station |
| 289 |
*/ |
| 149 |
void RecordGotAssocTxFailed (Mac48Address address); |
290 |
void RecordGotAssocTxFailed (Mac48Address address); |
|
|
291 |
/** |
| 292 |
* Records that the STA was disassociated. |
| 293 |
* |
| 294 |
* \param address the address of the station |
| 295 |
*/ |
| 150 |
void RecordDisassociated (Mac48Address address); |
296 |
void RecordDisassociated (Mac48Address address); |
| 151 |
|
297 |
|
| 152 |
/** |
298 |
/** |
|
|
| 168 |
* \param header MAC header |
314 |
* \param header MAC header |
| 169 |
* \param packet the packet to send |
315 |
* \param packet the packet to send |
| 170 |
* \param fullPacketSize the size of the packet after its 802.11 MAC header has been added. |
316 |
* \param fullPacketSize the size of the packet after its 802.11 MAC header has been added. |
| 171 |
* \returns the transmission mode to use to send this packet |
317 |
* \return the transmission mode to use to send this packet |
| 172 |
*/ |
318 |
*/ |
| 173 |
WifiTxVector GetDataTxVector (Mac48Address address, const WifiMacHeader *header, |
319 |
WifiTxVector GetDataTxVector (Mac48Address address, const WifiMacHeader *header, |
| 174 |
Ptr<const Packet> packet, uint32_t fullPacketSize); |
320 |
Ptr<const Packet> packet, uint32_t fullPacketSize); |
|
|
| 176 |
* \param address remote address |
322 |
* \param address remote address |
| 177 |
* \param header MAC header |
323 |
* \param header MAC header |
| 178 |
* \param packet the packet to send |
324 |
* \param packet the packet to send |
| 179 |
* \returns the transmission mode to use to send the RTS prior to the |
325 |
* |
|
|
326 |
* \return the transmission mode to use to send the RTS prior to the |
| 180 |
* transmission of the data packet itself. |
327 |
* transmission of the data packet itself. |
| 181 |
*/ |
328 |
*/ |
| 182 |
WifiTxVector GetRtsTxVector (Mac48Address address, const WifiMacHeader *header, |
329 |
WifiTxVector GetRtsTxVector (Mac48Address address, const WifiMacHeader *header, |
| 183 |
Ptr<const Packet> packet); |
330 |
Ptr<const Packet> packet); |
| 184 |
|
331 |
|
|
|
332 |
/** |
| 333 |
* \param header MAC header |
| 334 |
* \param packet the packet to send |
| 335 |
* |
| 336 |
* \return the transmission mode to use to send the CTS-to-self prior to the |
| 337 |
* transmission of the data packet itself. |
| 338 |
*/ |
| 185 |
WifiTxVector GetCtsToSelfTxVector (const WifiMacHeader *header, |
339 |
WifiTxVector GetCtsToSelfTxVector (const WifiMacHeader *header, |
| 186 |
Ptr<const Packet> packet); |
340 |
Ptr<const Packet> packet); |
| 187 |
|
341 |
|
| 188 |
//Since CTS to Self parameters don't depened on the station it is implemented in wifiremote station manager |
342 |
/** |
|
|
343 |
* Since CTS-to-self parameters are not dependent on the station, |
| 344 |
* it is implemented in wifiremote station manager |
| 345 |
*/ |
| 189 |
WifiTxVector DoGetCtsToSelfTxVector (void); |
346 |
WifiTxVector DoGetCtsToSelfTxVector (void); |
| 190 |
|
347 |
|
| 191 |
|
348 |
|
| 192 |
/** |
349 |
/** |
| 193 |
* Should be invoked whenever the RtsTimeout associated to a transmission |
350 |
* Should be invoked whenever the RtsTimeout associated to a transmission |
| 194 |
* attempt expires. |
351 |
* attempt expires. |
|
|
352 |
* |
| 353 |
* \param address the address of the receiver |
| 354 |
* \param header MAC header of the DATA packet |
| 195 |
*/ |
355 |
*/ |
| 196 |
void ReportRtsFailed (Mac48Address address, const WifiMacHeader *header); |
356 |
void ReportRtsFailed (Mac48Address address, const WifiMacHeader *header); |
| 197 |
/** |
357 |
/** |
| 198 |
* Should be invoked whenever the AckTimeout associated to a transmission |
358 |
* Should be invoked whenever the AckTimeout associated to a transmission |
| 199 |
* attempt expires. |
359 |
* attempt expires. |
|
|
360 |
* |
| 361 |
* \param address the address of the receiver |
| 362 |
* \param header MAC header of the DATA packet |
| 200 |
*/ |
363 |
*/ |
| 201 |
void ReportDataFailed (Mac48Address address, const WifiMacHeader *header); |
364 |
void ReportDataFailed (Mac48Address address, const WifiMacHeader *header); |
| 202 |
/** |
365 |
/** |
| 203 |
* Should be invoked whenever we receive the Cts associated to an RTS |
366 |
* Should be invoked whenever we receive the Cts associated to an RTS |
| 204 |
* we just sent. |
367 |
* we just sent. Note that we also get the SNR of the RTS we sent since |
|
|
368 |
* the receiver put a SnrTag in the CTS. |
| 369 |
* |
| 370 |
* \param address the address of the receiver |
| 371 |
* \param header MAC header of the DATA packet |
| 372 |
* \param ctsSnr the SNR of the CTS we received |
| 373 |
* \param ctsMode the WifiMode the receiver used to send the CTS |
| 374 |
* \param rtsSnr the SNR of the RTS we sent |
| 205 |
*/ |
375 |
*/ |
| 206 |
void ReportRtsOk (Mac48Address address, const WifiMacHeader *header, |
376 |
void ReportRtsOk (Mac48Address address, const WifiMacHeader *header, |
| 207 |
double ctsSnr, WifiMode ctsMode, double rtsSnr); |
377 |
double ctsSnr, WifiMode ctsMode, double rtsSnr); |
| 208 |
/** |
378 |
/** |
| 209 |
* Should be invoked whenever we receive the Ack associated to a data packet |
379 |
* Should be invoked whenever we receive the Ack associated to a data packet |
| 210 |
* we just sent. |
380 |
* we just sent. |
|
|
381 |
* |
| 382 |
* \param address the address of the receiver |
| 383 |
* \param header MAC header of the DATA packet |
| 384 |
* \param ackSnr the SNR of the ACK we received |
| 385 |
* \param ackMode the WifiMode the receiver used to send the ACK |
| 386 |
* \param dataSnr the SNR of the DATA we sent |
| 211 |
*/ |
387 |
*/ |
| 212 |
void ReportDataOk (Mac48Address address, const WifiMacHeader *header, |
388 |
void ReportDataOk (Mac48Address address, const WifiMacHeader *header, |
| 213 |
double ackSnr, WifiMode ackMode, double dataSnr); |
389 |
double ackSnr, WifiMode ackMode, double dataSnr); |
| 214 |
/** |
390 |
/** |
| 215 |
* Should be invoked after calling ReportRtsFailed if |
391 |
* Should be invoked after calling ReportRtsFailed if |
| 216 |
* NeedRtsRetransmission returns false |
392 |
* NeedRtsRetransmission returns false |
|
|
393 |
* |
| 394 |
* \param address the address of the receiver |
| 395 |
* \param header MAC header of the DATA packet |
| 217 |
*/ |
396 |
*/ |
| 218 |
void ReportFinalRtsFailed (Mac48Address address, const WifiMacHeader *header); |
397 |
void ReportFinalRtsFailed (Mac48Address address, const WifiMacHeader *header); |
| 219 |
/** |
398 |
/** |
| 220 |
* Should be invoked after calling ReportDataFailed if |
399 |
* Should be invoked after calling ReportDataFailed if |
| 221 |
* NeedDataRetransmission returns false |
400 |
* NeedDataRetransmission returns false |
|
|
401 |
* |
| 402 |
* \param address the address of the receiver |
| 403 |
* \param header MAC header of the DATA packet |
| 222 |
*/ |
404 |
*/ |
| 223 |
void ReportFinalDataFailed (Mac48Address address, const WifiMacHeader *header); |
405 |
void ReportFinalDataFailed (Mac48Address address, const WifiMacHeader *header); |
| 224 |
|
406 |
|
|
|
| 237 |
* \param address remote address |
419 |
* \param address remote address |
| 238 |
* \param header MAC header |
420 |
* \param header MAC header |
| 239 |
* \param packet the packet to send |
421 |
* \param packet the packet to send |
| 240 |
* \returns true if we want to use an RTS/CTS handshake for this |
422 |
* \return true if we want to use an RTS/CTS handshake for this |
| 241 |
* packet before sending it, false otherwise. |
423 |
* packet before sending it, false otherwise. |
| 242 |
*/ |
424 |
*/ |
| 243 |
bool NeedRts (Mac48Address address, const WifiMacHeader *header, |
425 |
bool NeedRts (Mac48Address address, const WifiMacHeader *header, |
| 244 |
Ptr<const Packet> packet); |
426 |
Ptr<const Packet> packet); |
|
|
427 |
/** |
| 428 |
* Return if we need to do Cts-to-self before sending a DATA. |
| 429 |
* |
| 430 |
* \return true if Cts-to-self is needed, false otherwise |
| 431 |
*/ |
| 245 |
bool NeedCtsToSelf (WifiTxVector txVector); |
432 |
bool NeedCtsToSelf (WifiTxVector txVector); |
| 246 |
|
433 |
|
| 247 |
/** |
434 |
/** |
| 248 |
* \param address remote address |
435 |
* \param address remote address |
| 249 |
* \param header MAC header |
436 |
* \param header MAC header |
| 250 |
* \param packet the packet to send |
437 |
* \param packet the packet to send |
| 251 |
* \returns true if we want to restart a failed RTS/CTS |
438 |
* \return true if we want to restart a failed RTS/CTS |
| 252 |
* handshake, false otherwise. |
439 |
* handshake, false otherwise. |
| 253 |
*/ |
440 |
*/ |
| 254 |
bool NeedRtsRetransmission (Mac48Address address, const WifiMacHeader *header, |
441 |
bool NeedRtsRetransmission (Mac48Address address, const WifiMacHeader *header, |
|
|
| 257 |
* \param address remote address |
444 |
* \param address remote address |
| 258 |
* \param header MAC header |
445 |
* \param header MAC header |
| 259 |
* \param packet the packet to send |
446 |
* \param packet the packet to send |
| 260 |
* \returns true if we want to resend a packet |
447 |
* \return true if we want to resend a packet |
| 261 |
* after a failed transmission attempt, false otherwise. |
448 |
* after a failed transmission attempt, false otherwise. |
| 262 |
*/ |
449 |
*/ |
| 263 |
bool NeedDataRetransmission (Mac48Address address, const WifiMacHeader *header, |
450 |
bool NeedDataRetransmission (Mac48Address address, const WifiMacHeader *header, |
|
|
| 267 |
* \param address remote address |
454 |
* \param address remote address |
| 268 |
* \param header MAC header |
455 |
* \param header MAC header |
| 269 |
* \param packet the packet to send |
456 |
* \param packet the packet to send |
| 270 |
* \returns true if this packet should be fragmented, false otherwise. |
457 |
* \return true if this packet should be fragmented, false otherwise. |
| 271 |
*/ |
458 |
*/ |
| 272 |
bool NeedFragmentation (Mac48Address address, const WifiMacHeader *header, |
459 |
bool NeedFragmentation (Mac48Address address, const WifiMacHeader *header, |
| 273 |
Ptr<const Packet> packet); |
460 |
Ptr<const Packet> packet); |
|
|
| 276 |
* \param header MAC header |
463 |
* \param header MAC header |
| 277 |
* \param packet the packet to send |
464 |
* \param packet the packet to send |
| 278 |
* \param fragmentNumber the fragment index of the next fragment to send (starts at zero). |
465 |
* \param fragmentNumber the fragment index of the next fragment to send (starts at zero). |
| 279 |
* \returns the size of the corresponding fragment. |
466 |
* \return the size of the corresponding fragment. |
| 280 |
*/ |
467 |
*/ |
| 281 |
uint32_t GetFragmentSize (Mac48Address address, const WifiMacHeader *header, |
468 |
uint32_t GetFragmentSize (Mac48Address address, const WifiMacHeader *header, |
| 282 |
Ptr<const Packet> packet, uint32_t fragmentNumber); |
469 |
Ptr<const Packet> packet, uint32_t fragmentNumber); |
|
|
| 285 |
* \param header MAC header |
472 |
* \param header MAC header |
| 286 |
* \param packet the packet to send |
473 |
* \param packet the packet to send |
| 287 |
* \param fragmentNumber the fragment index of the next fragment to send (starts at zero). |
474 |
* \param fragmentNumber the fragment index of the next fragment to send (starts at zero). |
| 288 |
* \returns the offset within the original packet where this fragment starts. |
475 |
* \return the offset within the original packet where this fragment starts. |
| 289 |
*/ |
476 |
*/ |
| 290 |
uint32_t GetFragmentOffset (Mac48Address address, const WifiMacHeader *header, |
477 |
uint32_t GetFragmentOffset (Mac48Address address, const WifiMacHeader *header, |
| 291 |
Ptr<const Packet> packet, uint32_t fragmentNumber); |
478 |
Ptr<const Packet> packet, uint32_t fragmentNumber); |
|
|
| 294 |
* \param header MAC header |
481 |
* \param header MAC header |
| 295 |
* \param packet the packet to send |
482 |
* \param packet the packet to send |
| 296 |
* \param fragmentNumber the fragment index of the next fragment to send (starts at zero). |
483 |
* \param fragmentNumber the fragment index of the next fragment to send (starts at zero). |
| 297 |
* \returns true if this is the last fragment, false otherwise. |
484 |
* \return true if this is the last fragment, false otherwise. |
| 298 |
*/ |
485 |
*/ |
| 299 |
bool IsLastFragment (Mac48Address address, const WifiMacHeader *header, |
486 |
bool IsLastFragment (Mac48Address address, const WifiMacHeader *header, |
| 300 |
Ptr<const Packet> packet, uint32_t fragmentNumber); |
487 |
Ptr<const Packet> packet, uint32_t fragmentNumber); |
|
|
| 302 |
/** |
489 |
/** |
| 303 |
* \param address remote address |
490 |
* \param address remote address |
| 304 |
* \param rtsMode the transmission mode used to send an RTS we just received |
491 |
* \param rtsMode the transmission mode used to send an RTS we just received |
| 305 |
* \returns the transmission mode to use for the CTS to complete the RTS/CTS |
492 |
* \return the transmission mode to use for the CTS to complete the RTS/CTS |
| 306 |
* handshake. |
493 |
* handshake. |
| 307 |
*/ |
494 |
*/ |
| 308 |
WifiTxVector GetCtsTxVector (Mac48Address address, WifiMode rtsMode); |
495 |
WifiTxVector GetCtsTxVector (Mac48Address address, WifiMode rtsMode); |
| 309 |
/** |
496 |
/** |
| 310 |
* \param address |
497 |
* \param address |
| 311 |
* \param dataMode the transmission mode used to send an ACK we just received |
498 |
* \param dataMode the transmission mode used to send an ACK we just received |
| 312 |
* \returns the transmission mode to use for the ACK to complete the data/ACK |
499 |
* \return the transmission mode to use for the ACK to complete the data/ACK |
| 313 |
* handshake. |
500 |
* handshake. |
| 314 |
*/ |
501 |
*/ |
| 315 |
WifiTxVector GetAckTxVector (Mac48Address address, WifiMode dataMode); |
502 |
WifiTxVector GetAckTxVector (Mac48Address address, WifiMode dataMode); |
| 316 |
/** |
503 |
/** |
| 317 |
* \param address |
504 |
* \param address |
| 318 |
* \param dataMode the transmission mode used to send an ACK we just received |
505 |
* \param dataMode the transmission mode used to send an ACK we just received |
| 319 |
* \returns the transmission mode to use for the ACK to complete the data/ACK |
506 |
* \return the transmission mode to use for the ACK to complete the data/ACK |
| 320 |
* handshake. |
507 |
* handshake. |
| 321 |
*/ |
508 |
*/ |
| 322 |
WifiTxVector GetBlockAckTxVector (Mac48Address address, WifiMode dataMode); |
509 |
WifiTxVector GetBlockAckTxVector (Mac48Address address, WifiMode dataMode); |
| 323 |
/** |
510 |
/** |
| 324 |
* \returns the default transmission power |
511 |
* \return the default transmission power |
| 325 |
*/ |
512 |
*/ |
| 326 |
uint8_t GetDefaultTxPowerLevel (void) const; |
513 |
uint8_t GetDefaultTxPowerLevel (void) const; |
| 327 |
/** |
514 |
/** |
| 328 |
* \param address of the remote station |
515 |
* \param address of the remote station |
| 329 |
* \returns information regarding the remote station associated with the given address |
516 |
* \return information regarding the remote station associated with the given address |
| 330 |
*/ |
517 |
*/ |
| 331 |
WifiRemoteStationInfo GetInfo (Mac48Address address); |
518 |
WifiRemoteStationInfo GetInfo (Mac48Address address); |
| 332 |
/** |
519 |
/** |
| 333 |
* Set the default transmission power level |
520 |
* Set the default transmission power level |
|
|
521 |
* |
| 522 |
* \param the default transmission power level |
| 334 |
*/ |
523 |
*/ |
| 335 |
void SetDefaultTxPowerLevel (uint8_t txPower); |
524 |
void SetDefaultTxPowerLevel (uint8_t txPower); |
| 336 |
/** |
525 |
/** |
| 337 |
* \returns the number of transmit antennas supported by the phy layer |
526 |
* \return the number of transmit antennas supported by the phy layer |
| 338 |
*/ |
527 |
*/ |
| 339 |
uint32_t GetNumberOfTransmitAntennas (void); |
528 |
uint32_t GetNumberOfTransmitAntennas (void); |
| 340 |
|
529 |
|
| 341 |
protected: |
530 |
protected: |
| 342 |
virtual void DoDispose (void); |
531 |
virtual void DoDispose (void); |
| 343 |
// for convenience |
532 |
/** |
|
|
533 |
* Return whether mode associated with the specified station at the specified index. |
| 534 |
* |
| 535 |
* \param station the station being queried |
| 536 |
* \param i the index |
| 537 |
* \return WifiMode at the given index of the specified station |
| 538 |
*/ |
| 344 |
WifiMode GetSupported (const WifiRemoteStation *station, uint32_t i) const; |
539 |
WifiMode GetSupported (const WifiRemoteStation *station, uint32_t i) const; |
|
|
540 |
/** |
| 541 |
* Return the number of modes supported by the given station. |
| 542 |
* |
| 543 |
* \param station the station being queried |
| 544 |
* \return the number of modes supported by the given station |
| 545 |
*/ |
| 345 |
uint32_t GetNSupported (const WifiRemoteStation *station) const; |
546 |
uint32_t GetNSupported (const WifiRemoteStation *station) const; |
| 346 |
uint8_t GetMcsSupported (const WifiRemoteStation *station, uint32_t i) const; |
547 |
uint8_t GetMcsSupported (const WifiRemoteStation *station, uint32_t i) const; |
| 347 |
uint32_t GetNMcsSupported (const WifiRemoteStation *station) const; |
548 |
uint32_t GetNMcsSupported (const WifiRemoteStation *station) const; |
| 348 |
|
549 |
|
|
|
550 |
/** |
| 551 |
* Return whether the given station supports short guard interval. |
| 552 |
* |
| 553 |
* \param station the station being queried |
| 554 |
* \return true if the station supports short guard interval, |
| 555 |
* false otherwise |
| 556 |
*/ |
| 349 |
bool GetShortGuardInterval (const WifiRemoteStation *station) const; |
557 |
bool GetShortGuardInterval (const WifiRemoteStation *station) const; |
| 350 |
bool GetStbc (const WifiRemoteStation *station) const; |
558 |
bool GetStbc (const WifiRemoteStation *station) const; |
|
|
559 |
/** |
| 560 |
* Return whether the station supports Greenfield or not. |
| 561 |
* |
| 562 |
* \param station the station being queried |
| 563 |
* \return true if Greenfield is supported by the station, |
| 564 |
* false otherwise |
| 565 |
*/ |
| 351 |
bool GetGreenfield (const WifiRemoteStation *station) const; |
566 |
bool GetGreenfield (const WifiRemoteStation *station) const; |
|
|
567 |
/** |
| 568 |
* Return the number of receive antenna the station has. |
| 569 |
* |
| 570 |
* \param station the station being queried |
| 571 |
* \return the number of receive antenna the station has |
| 572 |
*/ |
| 352 |
uint32_t GetNumberOfReceiveAntennas (const WifiRemoteStation *station) const; |
573 |
uint32_t GetNumberOfReceiveAntennas (const WifiRemoteStation *station) const; |
|
|
574 |
/** |
| 575 |
* Return the number of transmit antenna the station has. |
| 576 |
* |
| 577 |
* \param station the station being queried |
| 578 |
* \return the number of transmit antenna the station has |
| 579 |
*/ |
| 353 |
uint32_t GetNumberOfTransmitAntennas (const WifiRemoteStation *station) const; |
580 |
uint32_t GetNumberOfTransmitAntennas (const WifiRemoteStation *station) const; |
|
|
581 |
/** |
| 582 |
* Return the long retry limit of the given station. |
| 583 |
* |
| 584 |
* \param station the station being queried |
| 585 |
* \return the long retry limit of the the station |
| 586 |
*/ |
| 354 |
uint32_t GetLongRetryCount (const WifiRemoteStation *station) const; |
587 |
uint32_t GetLongRetryCount (const WifiRemoteStation *station) const; |
|
|
588 |
/** |
| 589 |
* Return the short retry limit of the given station. |
| 590 |
* |
| 591 |
* \param station the station being queried |
| 592 |
* \return the short retry limit of the the station |
| 593 |
*/ |
| 355 |
uint32_t GetShortRetryCount (const WifiRemoteStation *station) const; |
594 |
uint32_t GetShortRetryCount (const WifiRemoteStation *station) const; |
| 356 |
private: |
595 |
private: |
| 357 |
/** |
596 |
/** |
|
|
| 359 |
* \param packet the packet to send |
598 |
* \param packet the packet to send |
| 360 |
* \param normally indicates whether the normal 802.11 rts enable mechanism would |
599 |
* \param normally indicates whether the normal 802.11 rts enable mechanism would |
| 361 |
* request that the rts is sent or not. |
600 |
* request that the rts is sent or not. |
| 362 |
* \returns true if we want to use an RTS/CTS handshake for this |
601 |
* \return true if we want to use an RTS/CTS handshake for this |
| 363 |
* packet before sending it, false otherwise. |
602 |
* packet before sending it, false otherwise. |
| 364 |
* |
603 |
* |
| 365 |
* Note: This method is called before a unicast packet is sent on the medium. |
604 |
* Note: This method is called before a unicast packet is sent on the medium. |
|
|
| 371 |
* \param packet the packet to send |
610 |
* \param packet the packet to send |
| 372 |
* \param normally indicates whether the normal 802.11 rts enable mechanism would |
611 |
* \param normally indicates whether the normal 802.11 rts enable mechanism would |
| 373 |
* request that the rts is retransmitted or not. |
612 |
* request that the rts is retransmitted or not. |
| 374 |
* \returns true if we want to restart a failed RTS/CTS |
613 |
* \return true if we want to restart a failed RTS/CTS |
| 375 |
* handshake, false otherwise. |
614 |
* handshake, false otherwise. |
| 376 |
* |
615 |
* |
| 377 |
* Note: This method is called after an rts/cts handshake has been attempted |
616 |
* Note: This method is called after an rts/cts handshake has been attempted |
|
|
| 384 |
* \param packet the packet to send |
623 |
* \param packet the packet to send |
| 385 |
* \param normally indicates whether the normal 802.11 data retransmission mechanism |
624 |
* \param normally indicates whether the normal 802.11 data retransmission mechanism |
| 386 |
* would request that the data is retransmitted or not. |
625 |
* would request that the data is retransmitted or not. |
| 387 |
* \returns true if we want to resend a packet |
626 |
* \return true if we want to resend a packet |
| 388 |
* after a failed transmission attempt, false otherwise. |
627 |
* after a failed transmission attempt, false otherwise. |
| 389 |
* |
628 |
* |
| 390 |
* Note: This method is called after a unicast packet transmission has been attempted |
629 |
* Note: This method is called after a unicast packet transmission has been attempted |
|
|
| 398 |
* \param packet the packet to send |
637 |
* \param packet the packet to send |
| 399 |
* \param normally indicates whether the normal 802.11 data fragmentation mechanism |
638 |
* \param normally indicates whether the normal 802.11 data fragmentation mechanism |
| 400 |
* would request that the data packet is fragmented or not. |
639 |
* would request that the data packet is fragmented or not. |
| 401 |
* \returns true if this packet should be fragmented, false otherwise. |
640 |
* \return true if this packet should be fragmented, false otherwise. |
| 402 |
* |
641 |
* |
| 403 |
* Note: This method is called before sending a unicast packet. |
642 |
* Note: This method is called before sending a unicast packet. |
| 404 |
*/ |
643 |
*/ |
| 405 |
virtual bool DoNeedFragmentation (WifiRemoteStation *station, |
644 |
virtual bool DoNeedFragmentation (WifiRemoteStation *station, |
| 406 |
Ptr<const Packet> packet, bool normally); |
645 |
Ptr<const Packet> packet, bool normally); |
| 407 |
/** |
646 |
/** |
| 408 |
* \returns whether this manager is a manager designed to work in low-latency |
647 |
* \return whether this manager is a manager designed to work in low-latency |
| 409 |
* environments. |
648 |
* environments. |
| 410 |
* |
649 |
* |
| 411 |
* Note: In this context, low vs high latency is defined in <i>IEEE 802.11 Rate Adaptation: |
650 |
* Note: In this context, low vs high latency is defined in <i>IEEE 802.11 Rate Adaptation: |
|
|
| 419 |
/** |
658 |
/** |
| 420 |
* \param station the station with which we need to communicate |
659 |
* \param station the station with which we need to communicate |
| 421 |
* \param size size of the packet or fragment we want to send |
660 |
* \param size size of the packet or fragment we want to send |
| 422 |
* \returns the transmission mode to use to send a packet to the station |
661 |
* \return the transmission mode to use to send a packet to the station |
| 423 |
* |
662 |
* |
| 424 |
* Note: This method is called before sending a unicast packet or a fragment |
663 |
* Note: This method is called before sending a unicast packet or a fragment |
| 425 |
* of a unicast packet to decide which transmission mode to use. |
664 |
* of a unicast packet to decide which transmission mode to use. |
|
|
| 428 |
uint32_t size) = 0; |
667 |
uint32_t size) = 0; |
| 429 |
/** |
668 |
/** |
| 430 |
* \param station the station with which we need to communicate |
669 |
* \param station the station with which we need to communicate |
| 431 |
* \returns the transmission mode to use to send an rts to the station |
670 |
* \return the transmission mode to use to send an rts to the station |
| 432 |
* |
671 |
* |
| 433 |
* Note: This method is called before sending an rts to a station |
672 |
* Note: This method is called before sending an rts to a station |
| 434 |
* to decide which transmission mode to use for the rts. |
673 |
* to decide which transmission mode to use for the rts. |
|
|
| 446 |
|
685 |
|
| 447 |
/** |
686 |
/** |
| 448 |
* \param address the address of the recipient of the ACK |
687 |
* \param address the address of the recipient of the ACK |
| 449 |
* \param ctsMode the mode to be used for the ACK |
688 |
* \param ackMode the mode to be used for the ACK |
| 450 |
* |
689 |
* |
| 451 |
* \return the power level to be used to send the ACK |
690 |
* \return the power level to be used to send the ACK |
| 452 |
*/ |
691 |
*/ |
|
|
| 454 |
|
693 |
|
| 455 |
/** |
694 |
/** |
| 456 |
* \param address the address of the recipient of the Block ACK |
695 |
* \param address the address of the recipient of the Block ACK |
| 457 |
* \param ctsMode the mode to be used for the Block ACK |
696 |
* \param blockAckMode the mode to be used for the Block ACK |
| 458 |
* |
697 |
* |
| 459 |
* \return the power level to be used to send the Block ACK |
698 |
* \return the power level to be used to send the Block ACK |
| 460 |
*/ |
699 |
*/ |
|
|
| 474 |
virtual uint8_t DoGetBlockAckTxNess(Mac48Address address, WifiMode blockAckMode); |
713 |
virtual uint8_t DoGetBlockAckTxNess(Mac48Address address, WifiMode blockAckMode); |
| 475 |
virtual bool DoGetBlockAckTxStbc(Mac48Address address, WifiMode blockAckMode); |
714 |
virtual bool DoGetBlockAckTxStbc(Mac48Address address, WifiMode blockAckMode); |
| 476 |
|
715 |
|
|
|
716 |
/** |
| 717 |
* This method is a pure virtual method that must be implemented by the sub-class. |
| 718 |
* This allows different types of WifiRemoteStationManager to respond differently, |
| 719 |
* |
| 720 |
* \param station the station with which we failed to send RTS |
| 721 |
*/ |
| 477 |
virtual void DoReportRtsFailed (WifiRemoteStation *station) = 0; |
722 |
virtual void DoReportRtsFailed (WifiRemoteStation *station) = 0; |
|
|
723 |
/** |
| 724 |
* This method is a pure virtual method that must be implemented by the sub-class. |
| 725 |
* This allows different types of WifiRemoteStationManager to respond differently, |
| 726 |
* |
| 727 |
* \param station the station with which we failed to send DATA |
| 728 |
*/ |
| 478 |
virtual void DoReportDataFailed (WifiRemoteStation *station) = 0; |
729 |
virtual void DoReportDataFailed (WifiRemoteStation *station) = 0; |
|
|
730 |
/** |
| 731 |
* This method is a pure virtual method that must be implemented by the sub-class. |
| 732 |
* This allows different types of WifiRemoteStationManager to respond differently, |
| 733 |
* |
| 734 |
* \param station the station with which we successfully sent RTS |
| 735 |
* \param ctsSnr the SNR of the CTS we received |
| 736 |
* \param ctsMode the WifiMode the receiver used to send the CTS |
| 737 |
* \param rtsSnr the SNR of the RTS we sent |
| 738 |
*/ |
| 479 |
virtual void DoReportRtsOk (WifiRemoteStation *station, |
739 |
virtual void DoReportRtsOk (WifiRemoteStation *station, |
| 480 |
double ctsSnr, WifiMode ctsMode, double rtsSnr) = 0; |
740 |
double ctsSnr, WifiMode ctsMode, double rtsSnr) = 0; |
|
|
741 |
/** |
| 742 |
* This method is a pure virtual method that must be implemented by the sub-class. |
| 743 |
* This allows different types of WifiRemoteStationManager to respond differently, |
| 744 |
* |
| 745 |
* \param station the station with which we successfully sent RTS |
| 746 |
* \param ackSnr the SNR of the ACK we received |
| 747 |
* \param ackMode the WifiMode the receiver used to send the ACK |
| 748 |
* \param dataSnr the SNR of the DATA we sent |
| 749 |
*/ |
| 481 |
virtual void DoReportDataOk (WifiRemoteStation *station, |
750 |
virtual void DoReportDataOk (WifiRemoteStation *station, |
| 482 |
double ackSnr, WifiMode ackMode, double dataSnr) = 0; |
751 |
double ackSnr, WifiMode ackMode, double dataSnr) = 0; |
|
|
752 |
/** |
| 753 |
* This method is a pure virtual method that must be implemented by the sub-class. |
| 754 |
* This allows different types of WifiRemoteStationManager to respond differently, |
| 755 |
* |
| 756 |
* \param station the station with which we failed to send RTS |
| 757 |
*/ |
| 483 |
virtual void DoReportFinalRtsFailed (WifiRemoteStation *station) = 0; |
758 |
virtual void DoReportFinalRtsFailed (WifiRemoteStation *station) = 0; |
|
|
759 |
/** |
| 760 |
* This method is a pure virtual method that must be implemented by the sub-class. |
| 761 |
* This allows different types of WifiRemoteStationManager to respond differently, |
| 762 |
* |
| 763 |
* \param station the station with which we failed to send DATA |
| 764 |
*/ |
| 484 |
virtual void DoReportFinalDataFailed (WifiRemoteStation *station) = 0; |
765 |
virtual void DoReportFinalDataFailed (WifiRemoteStation *station) = 0; |
|
|
766 |
/** |
| 767 |
* This method is a pure virtual method that must be implemented by the sub-class. |
| 768 |
* This allows different types of WifiRemoteStationManager to respond differently, |
| 769 |
* |
| 770 |
* \param station the station that sent the DATA to us |
| 771 |
* \param rxSnr the SNR of the DATA we received |
| 772 |
* \param txMode the WifiMode the sender used to send the DATA |
| 773 |
*/ |
| 485 |
virtual void DoReportRxOk (WifiRemoteStation *station, |
774 |
virtual void DoReportRxOk (WifiRemoteStation *station, |
| 486 |
double rxSnr, WifiMode txMode) = 0; |
775 |
double rxSnr, WifiMode txMode) = 0; |
| 487 |
|
776 |
|
|
|
777 |
/** |
| 778 |
* Return the state of the station associated with the given address. |
| 779 |
* |
| 780 |
* \param address the address of the station |
| 781 |
* \return WifiRemoteStationState corresponding to the address |
| 782 |
*/ |
| 488 |
WifiRemoteStationState* LookupState (Mac48Address address) const; |
783 |
WifiRemoteStationState* LookupState (Mac48Address address) const; |
|
|
784 |
/** |
| 785 |
* Return the station associated with the given address and TID. |
| 786 |
* |
| 787 |
* \param address the address of the station |
| 788 |
* \param tid the TID |
| 789 |
* \return WifiRemoteStation corresponding to the address |
| 790 |
*/ |
| 489 |
WifiRemoteStation* Lookup (Mac48Address address, uint8_t tid) const; |
791 |
WifiRemoteStation* Lookup (Mac48Address address, uint8_t tid) const; |
| 490 |
/// Find a remote station by its remote address and TID taken from MAC header |
792 |
/// Find a remote station by its remote address and TID taken from MAC header |
|
|
793 |
/** |
| 794 |
* Return the station associated with the given address and MAC header. |
| 795 |
* It simply gets TID from the MAC header and calls Lookup with tid. |
| 796 |
* |
| 797 |
* \param address the address of the station |
| 798 |
* \param header MAC header |
| 799 |
* \return WifiRemoteStation corresponding to the address |
| 800 |
*/ |
| 491 |
WifiRemoteStation* Lookup (Mac48Address address, const WifiMacHeader *header) const; |
801 |
WifiRemoteStation* Lookup (Mac48Address address, const WifiMacHeader *header) const; |
| 492 |
WifiMode GetControlAnswerMode (Mac48Address address, WifiMode reqMode); |
802 |
WifiMode GetControlAnswerMode (Mac48Address address, WifiMode reqMode); |
| 493 |
|
803 |
|
|
|
804 |
/** |
| 805 |
* Actually sets the fragmentation threshold, it also checks the validity of |
| 806 |
* the given threshold. |
| 807 |
* |
| 808 |
* \param threshold the fragmentation threshold |
| 809 |
*/ |
| 494 |
void DoSetFragmentationThreshold (uint32_t threshold); |
810 |
void DoSetFragmentationThreshold (uint32_t threshold); |
|
|
811 |
/** |
| 812 |
* Return the current fragmentation threshold |
| 813 |
* |
| 814 |
* \return the fragmentation threshold |
| 815 |
*/ |
| 495 |
uint32_t DoGetFragmentationThreshold (void) const; |
816 |
uint32_t DoGetFragmentationThreshold (void) const; |
|
|
817 |
/** |
| 818 |
* Return the number of fragments needed for the given packet. |
| 819 |
* |
| 820 |
* \param header MAC header |
| 821 |
* \param packet the packet to be fragmented |
| 822 |
* \return the number of fragments needed |
| 823 |
*/ |
| 496 |
uint32_t GetNFragments (const WifiMacHeader *header, Ptr<const Packet> packet); |
824 |
uint32_t GetNFragments (const WifiMacHeader *header, Ptr<const Packet> packet); |
| 497 |
|
825 |
|
|
|
826 |
/** |
| 827 |
* A vector of WifiRemoteStations |
| 828 |
*/ |
| 498 |
typedef std::vector <WifiRemoteStation *> Stations; |
829 |
typedef std::vector <WifiRemoteStation *> Stations; |
|
|
830 |
/** |
| 831 |
* A vector of WifiRemoteStationStates |
| 832 |
*/ |
| 499 |
typedef std::vector <WifiRemoteStationState *> StationStates; |
833 |
typedef std::vector <WifiRemoteStationState *> StationStates; |
| 500 |
|
834 |
|
| 501 |
StationStates m_states; |
835 |
StationStates m_states; |
|
|
| 552 |
|
886 |
|
| 553 |
}; |
887 |
}; |
| 554 |
|
888 |
|
|
|
889 |
/** |
| 890 |
* A struct that holds information about each remote station. |
| 891 |
*/ |
| 555 |
struct WifiRemoteStationState |
892 |
struct WifiRemoteStationState |
| 556 |
{ |
893 |
{ |
| 557 |
enum |
894 |
enum |