NetSim Source Code Help v14.4
All 13 Components
 
Loading...
Searching...
No Matches
IEEE802_11.h
1/************************************************************************************
2* Copyright (C) 2023 *
3* TETCOS, Bangalore. India *
4* *
5* Tetcos owns the intellectual property rights in the Product and its content. *
6* The copying, redistribution, reselling or publication of any or all of the *
7* Product or its content without express prior written consent of Tetcos is *
8* prohibited. Ownership and / or any other right relating to the software and all *
9* intellectual property rights therein shall remain at all times with Tetcos. *
10* *
11* This source code is licensed per the NetSim license agreement. *
12* *
13* No portion of this source code may be used as the basis for a derivative work, *
14* or used, for any purpose other than its intended use per the NetSim license *
15* agreement. *
16* *
17* This source code and the algorithms contained within it are confidential trade *
18* secrets of TETCOS and may not be used as the basis for any other software, *
19* hardware, product or service. *
20* *
21* Author: Shashi Kant Suman *
22* *
23* ----------------------------------------------------------------------------------*/
24#ifndef _NETSIM_IEEE802_11_H_
25#define _NETSIM_IEEE802_11_H_
26#ifdef __cplusplus
27extern "C" {
28#endif
29#ifndef _NO_DEFAULT_LINKER_
30//For MSVC compiler. For GCC link via Linker command
31#pragma comment(lib,"IEEE802.11.lib")
32#pragma comment(lib,"Metrics.lib")
33#pragma comment(lib,"NetworkStack.lib")
34#pragma comment(lib,"Mobility.lib")
35#pragma comment(lib,"PropagationModel.lib")
36#endif
37
38//#define _RECALCULATE_RX_SENSITIVITY_BASED_ON_PEP_
39
40#include "IEEE802_11_enum.h"
41#include "IEEE802_11_EDCAF.h"
42
43// Control frame data rate RTS and CTS
44#define CONTRL_FRAME_RATE_11B 1 ///< Control frame data rate for IEEE 802.11b in Mbps
45#define CONTRL_FRAME_RATE_11A_AND_G 6 ///< Control frame data rate for IEEE 802.11a/g in Mbps
46#define CONTRL_FRAME_RATE_11P 3 ///< Control frame data rate for IEEE 802.11p in Mbps
47
48
49 /// Page 2341 Enumerated types used in Mac and MLME service primitives
50 typedef enum
51 {
52 INFRASTRUCTURE,
53 INDEPENDENT,
54 MESH,
55 ANY_BSS,
56 }IEEE802_11_BSS_TYPE;
57
58 /// Enumeration for WLAN PHY protocols
59 typedef enum
60 {
61 IEEE_802_11a = 1,
62 IEEE_802_11b,
63 IEEE_802_11g,
64 IEEE_802_11p,
65 IEEE_802_11n,
66 IEEE_802_11e,
67 IEEE_802_11ac,
68 IEEE_802_11ax,
69 }IEEE802_11_PROTOCOL;
70 static const char* strWLANProtocol[] =
71 { "","IEEE_802_11a","IEEE_802_11b","IEEE_802_11g","IEEE_802_11p","IEEE_802_11n","IEEE_802_11e","IEEE_802_11ac" ,"IEEE_802_11ax"};
72
73 // Enumeration for BER Model
74 typedef enum
75 {
76 SINR_BER_BY_FORMULA,
77 SINR_BER_PER_TABLE
78 }BER_MODEL_TYPE;
79 static const char* strBERMODEL[] =
80 { "SINR_BER_BY_FORMULA","SINR_BER_PER_TABLE"};
81
82 /// page-1534 16.4.8.5 CCA, and 17.4.8.5 CCA IEEE802.11-2012
83 typedef enum
84 {
85 ED_ONLY=1, // CCA Mode 1: Energy above threshold.
86 CS_ONLY, // CCA Mode 2: CS only.
87 ED_and_CS, // CCA Mode 3: CS with energy above threshold.
88 CS_WITH_TIMER, // CCA Mode 4: CS with timer.
89 HR_CS_and_ED, // CCA Mode 5: A combination of CS and energy above threshold.
90 }IEEE802_11_CCAMODE;
91
92 /// Page-382 of IEEE Std 802.11-2012 Table 8-1—Valid type and subtype combinations
93 enum enum_802_11_FrameControl_Type
94 {
95 MANAGEMENT = 0x0,
96 CONTROL = 0x1,
97 DATA = 0x2,
98 RESERVED = 0x3,
99 };
100
101 /// Page-382 of IEEE Std 802.11-2012 Table 8-1—Valid type and subtype combinations
102 enum enum_802_11_Management_Frame_SubType
103 {
104 AssociationRequest = 0x0,
105 AssociationResponse = 0x1,
106 ReassociationRequest = 0x2,
107 ReassociationResponse = 0x3,
108 ProbeRequest = 0x4,
109 ProbeResponse = 0x5,
110 TimingAdvertisement = 0x6,
111 Reserved_1 = 0x7,
112 Beacon = 0x8,
113 ATIM = 0x9,
114 Disassociation = 0xA,
115 Authentication = 0xB,
116 Deauthentication = 0xC,
117 Action = 0xD,
118 ActionNoAck = 0xE,
119 Reserved_2 = 0xF,
120 };
121
122 /// Page-383 of IEEE Std 802.11-2012 Table 8-1—Valid type and subtype combinations
123 enum enum_802_11_Control_Frame_SubType
124 {
125 Reserved = 0x0,
126 ControlWrapper = 0x7,
127 BlockAckRequest,
128 BlockAck,
129 PS_Poll,
130 RTS,
131 CTS,
132 ACK,
133 CF_End,
134 CF_End_Plus_CF_Ack,
135 };
136
137 /// Page-383 of IEEE Std 802.11-2012 Table 8-1—Valid type and subtype combinations
138 enum enum_802_11_Data_Frame_SubType
139 {
140 Data=0x0,
141 Data_Plus_CFAck,
142 Data_Plus_CFPoll,
143 Data_Plus_CFAck_Plus_CFPoll,
144 noData,
145 CF_Ack,
146 CF_Poll,
147 CFAck_Plus_CFPoll,
148 QoS_Data,
149 QoSData_Plus_CFAck,
150 QoSData_Plus_CFPoll,
151 QoSData_Plus_CFAck_Plus_CFPoll,
152 QoS_Null,
153 Reserved_4,
154 QoS_CFPoll,
155 QoS_CFAck_Plus_CFPoll,
156 };
157
158 /// Enumeration for 802.11 MAC states
159 typedef enum
160 {
161 IEEE802_11_MACSTATE_MAC_IDLE = 0,
162 IEEE802_11_MACSTATE_WF_NAV,
163 IEEE802_11_MACSTATE_Wait_DIFS,
164 IEEE802_11_MACSTATE_Wait_AIFS,
165 IEEE802_11_MACSTATE_BACKING_OFF,
166 IEEE802_11_MACSTATE_TXing_MPDU,
167 IEEE802_11_MACSTATE_Txing_BroadCast,
168 IEEE802_11_MACSTATE_TXing_ACK,
169 IEEE802_11_MACSTATE_TXing_RTS,
170 IEEE802_11_MACSTATE_TXing_CTS,
171 IEEE802_11_MACSTATE_Wait_DATA,
172 IEEE802_11_MACSTATE_Wait_CTS,
173 IEEE802_11_MACSTATE_Wait_ACK,
174 IEEE802_11_MACSTATE_Wait_BlockACK,
175 IEEE802_11_MACSTATE_OFF,
176 IEEE802_11_MACSTATE_LAST,
177 }IEEE802_11_MAC_STATE;
178 static char strIEEE802_11_MAC_STATE[IEEE802_11_MACSTATE_LAST][48] =
179 {
180 "MAC_IDLE",
181 "WAIT_FOR_NAV",
182 "WAIT_FOR_DIFS",
183 "WAIT_FOR_AIFS",
184 "BACKING_OFF",
185 "TRANSMITTING_MPDU",
186 "TRANSMITTING_BROADCAST",
187 "TRANSMITTING_ACK",
188 "TRANSMITTING_RTS",
189 "TRANSMITTING_CTS",
190 "WAIT_FOR_DATA",
191 "WAIT_FOR_CTS",
192 "WAIT_FOR_ACK",
193 "WAIT_FOR_BLOCKACK",
194 "OFF"
195 "LAST"
196 };
197
198 typedef enum
199 {
200 RATEADAPTATION_DISABLE,
201 RATEADAPTATION_MINSTREL,
202 RATEADAPTATION_GENERIC,
203 RATEADAPTATION_FIXED,
204 }IEEE802_11_RATE_ADAPTATION;
205
206 typedef enum
207 {
208 DCF,
209 EDCAF,
210 }IEEE802_11_MEDIUM_ACCESS_PROTOCOL;
211#define IEEE802_11_MEDIUM_ACCESS_PROTOCOL_DEFAULT _strdup("DCF")
212
213 /** Structure for metrics */
214 typedef struct stru_802_11_Metrics
215 {
216 UINT nBackoffFailedCount;
217 UINT nBackoffSuccessCount;
218 UINT nTransmittedFrameCount;
219 UINT nReceivedFrameCount;
220 UINT nRTSSentCount;
221 UINT nCTSSentCount;
222 UINT nRTSReceivedCount;
223 UINT nCTSReceivedCount;
224 }IEEE802_11_METRICS,*PIEEE802_11_METRICS;
225
226 typedef struct stru_802_11_Mac_Var
227 {
228 NETSIM_ID deviceId;
229 NETSIM_ID interfaceId;
230 NETSIM_ID parentInterfaceId;
231
232 //Config parameter
233 IEEE802_11_BSS_TYPE BSSType;
234 IEEE802_11_RATE_ADAPTATION rate_adaptationAlgo;
235 UINT dot11ShortRetryLimit;
236 UINT dot11LongRetryLimit;
237 UINT dot11RTSThreshold;
238 IEEE802_11_MEDIUM_ACCESS_PROTOCOL mediumAccessProtocol;
239
240 // Mac aggregation
241 bool macAggregationStatus;
242 UINT nNumberOfAggregatedPackets;
243 NetSim_PACKET* blockAckPacket;
244
245 //EDCA
246 UINT aceessCategory;
247 DOT11EDCATABLE dot11EdcaTable[MAX_AC_CATEGORY];
248 ptrDOT11EDCATABLE currEdcaTable;
249 double txopTime;
250
251 //CSMA/CA
252 IEEE802_11_MAC_STATE currMacState;
253 IEEE802_11_MAC_STATE prevMacState;
254 double dNAV;
255 double dBackOffStartTime;
256 int nBackOffCounter;
257 double dBackoffLeftTime;
258
259 UINT nRetryCount;
260 UINT nCWcurrent;
261
262 //Buffer
263 NetSim_PACKET* currentProcessingPacket;
264 NetSim_PACKET* waitingforCTS;
265
266 //BSS
267 double dDistFromAp;
268 PNETSIM_MACADDRESS BSSId;
269 NETSIM_ID nBSSId;
270 NETSIM_ID nAPInterfaceId;
271 UINT devCountinBSS;
272 NETSIM_ID* devIdsinBSS;
273 NETSIM_ID* devIfinBSS;
274
275 double dPacketProcessingEndTime;
276
277 // Event Id.
278 struct
279 {
280 long long int backoff;
281 long long int difsEnd;
282 long long int aifsEnd;
283 long long int ackTimeOut;
284 long long int ctsTimeout;
285 }EVENTID;
286
287 //Metrics
288 IEEE802_11_METRICS metrics;
289
290 }IEEE802_MAC_VAR,*PIEEE802_11_MAC_VAR;
291
292#define IEEE802_11_CURR_MAC IEEE802_11_MAC(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId)
293#define isDCF(mac) (mac->mediumAccessProtocol == DCF)
294#define isEDCAF(mac) (mac->mediumAccessProtocol == EDCAF)
295
297 {
298 NETSIM_ID TX_ID;
299 NETSIM_ID RX_ID;
300 NETSIM_ID TX_IF_ID;
301 NETSIM_ID RX_IF_ID;
302 PPROPAGATION_INFO Propagation_Info;
303 _ptr_ele ele;
304 }propagation_info_for_list, * ptrpropagation_info_for_list;
305
306#define PPROPAGATION_INFO_ALLOC() (struct stru_propagation_info_for_list*)list_alloc(sizeof(struct stru_propagation_info_for_list),offsetof(struct stru_propagation_info_for_list,ele))
307#define PPROPAGATION_INFO_ADD(info,e) (LIST_ADD_LAST(&(info),(e)))
308#define PPROPAGATION_INFO_NEXT(entity) (LIST_NEXT(entity))
309#define PPROPAGATION_INFO_REMOVE(ls, mem) (LIST_FREE((void**)(ls),(mem)))
310
311 int fn_NetSim_IEEE802_11_PropagationInit();
312 int fn_NetSim_IEEE802_11_FreePropagationInfo();
313 _declspec(dllexport) PPROPAGATION_INFO find_propagation_info(NETSIM_ID t, NETSIM_ID ti, NETSIM_ID r, NETSIM_ID ri);
314
315 //Useful macro
316#define isSTAIdle(macVar,phyVar) (macVar->currMacState == IEEE802_11_MACSTATE_MAC_IDLE && phyVar->radio.radioState == RX_ON_IDLE)
317#define isCurrSTAIdle isSTAIdle(IEEE802_11_CURR_MAC,IEEE802_11_CURR_PHY)
318#define isSTAIdlebyId(devid,ifid) isSTAIdle(IEEE802_11_MAC(devid,ifid),IEEE802_11_PHY(devid,ifid))
319#define isCurrSTAMediumIdle() (isMediumIdle(pstruEventDetails->nDeviceId, pstruEventDetails->nInterfaceId))
320 //Function prototype
321 //Mesh BSS
322 void fn_NetSim_802_11_MeshBSS_UpdateReceiver(NetSim_PACKET* packet);
323 bool isPacketforsameMeshBSS(PIEEE802_11_MAC_VAR mac,NetSim_PACKET* packet);
324
325 //Infrastructure BSS
326 void fn_NetSim_802_11_InfrastructureBSS_UpdateReceiver(NetSim_PACKET* packet);
327 bool isPacketforsameInfrastructureBSS(PIEEE802_11_MAC_VAR mac,NetSim_PACKET* packet);
328
329 //Mac
330 bool isMacTransmittingState(PIEEE802_11_MAC_VAR mac);
331 bool isMacReceivingState(PIEEE802_11_MAC_VAR mac);
332 bool isMacIdle(PIEEE802_11_MAC_VAR mac);
333 void IEEE802_11_Change_Mac_State(PIEEE802_11_MAC_VAR mac,IEEE802_11_MAC_STATE state);
334 void fn_NetSim_IEE802_11_MacReInit(NETSIM_ID nDeviceId,NETSIM_ID nInterfaceId);
335 void fn_NetSim_IEEE802_11_Timer();
336 void fn_NetSim_IEEE802_11_MacOut();
337 int fn_NetSim_IEEE802_11_MacIn();
338 double calculate_nav(NETSIM_ID d, NETSIM_ID i, NetSim_PACKET* packet);
339 void fn_NetSim_IEEE802_11_SendToPhy();
340
341 //CSMA/CA
342 int fn_NetSim_IEEE802_11_CSMACA_Init();
343 bool fn_NetSim_IEEE802_11_CSMACA_CS();
344 int fn_NetSim_IEEE802_11_CSMACA_CheckNAV();
345 void fn_NetSim_IEEE802_11_CSMACA_DIFSEnd();
346 void ieee802_11_csmaca_difs_failed(PIEEE802_11_MAC_VAR mac);
347 void fn_NetSim_IEEE802_11_CSMACA_AIFSEnd();
348 void ieee802_11_csmaca_aifs_failed(PIEEE802_11_MAC_VAR mac);
349 void fn_NetSim_IEEE802_11_CSMACA_ProcessAck();
350 void fn_NetSim_IEEE802_11_CSMACA_IncreaseCW(PIEEE802_11_MAC_VAR mac);
351 bool fn_NetSim_IEEE802_11_CSMACA_CheckRetryLimit(PIEEE802_11_MAC_VAR mac, UINT frameLength);
352 void fn_NetSim_IEEE802_11_CSMACA_ProcessBlockAck();
353 void fn_NetSim_IEEE802_11_CSMA_AckTimeOut();
354 int fn_NetSim_IEEE802_11_CSMACA_SendBlockACK();
355 int fn_NetSim_IEEE802_11_CSMACA_SendACK();
356 bool fn_NetSim_IEEE802_11_CSMACA_Backoff();
357 void ieee802_11_csmaca_pause_backoff(PIEEE802_11_MAC_VAR mac);
358 void fn_NetSim_IEEE802_11_CSMACA_AddAckTimeOut(NetSim_PACKET* packet,NETSIM_ID devId,NETSIM_ID devIf);
359 void fn_NetSim_IEEE802_11_CSMA_UpdateNAV(NETSIM_ID d, NETSIM_ID in, NetSim_PACKET* packet);
360
361
362 //Mac Frame
363 bool isIEEE802_11_CtrlPacket(NetSim_PACKET* packet);
364 double getAckSize(void* phy);
365 double getCTSSize();
366 double getRTSSize();
367 double getMacOverhead(void* phy, double size);
368 double calculate_CTS_duration(NETSIM_ID d,
369 NETSIM_ID i,
370 double rtsduration);
371 bool is_more_fragment_coming(NetSim_PACKET* packet);
372 bool is_first_packet(NetSim_PACKET* packet);
373 NetSim_PACKET* fn_NetSim_IEEE802_11_CreateRTSPacket(NetSim_PACKET* data,double duration);
374 NetSim_PACKET* fn_NetSim_IEEE802_11_CreateCTSPacket(NetSim_PACKET* data);
375 NetSim_PACKET* fn_NetSim_IEEE802_11_CreateAckPacket(NETSIM_ID nDeviceId,NETSIM_ID nInterfaceId,NetSim_PACKET* data,double time);
376 NetSim_PACKET* fn_NetSim_IEEE802_11_CreateBlockAckPacket(NETSIM_ID nDeviceId,NETSIM_ID nInterfaceId,NetSim_PACKET* data,double time);
377 void fn_NetSim_IEEE802_11_Add_MAC_Header(NETSIM_ID nDeviceId,NETSIM_ID nInterfaceId, NetSim_PACKET *pstruPacket,unsigned int i);
378 void set_blockack_bitmap(NetSim_PACKET* ackPacket,NetSim_PACKET* packet);
379 void fn_NetSim_Process_CtrlPacket();
380 void ieee802_11_free_hdr(NetSim_PACKET* packet);
381 void ieee802_11_hdr_copy(NetSim_PACKET* src,NetSim_PACKET* dest);
382
383 //RTS CTS
384 void fn_NetSim_IEEE802_11_RTS_CTS_Init();
385 void fn_NetSim_IEEE802_11_RTS_CTS_CTSTimeOut();
386 void fn_NetSim_IEEE802_11_RTS_CTS_ProcessRTS();
387 void fn_NetSim_IEEE802_11_RTS_CTS_ProcessCTS();
388 void fn_NetSim_IEEE802_11_RTS_CTS_SendCTS();
389 void fn_NetSim_IEEE802_11_RTS_CTS_AddCTSTimeOut(NetSim_PACKET* packet,NETSIM_ID devId,NETSIM_ID devIf);
390
391 //Rate adaptation
392 void Generic_Rate_adaptation_init(NETSIM_ID nDevId,NETSIM_ID nifid);
393 void free_rate_adaptation_data(void* phy);
394 void packet_recv_notify(NETSIM_ID devid,NETSIM_ID ifid,NETSIM_ID rcvid);
395 void packet_drop_notify(NETSIM_ID devid,NETSIM_ID ifid,NETSIM_ID rcvid);
396 unsigned int get_rate_index(NETSIM_ID devid,NETSIM_ID ifid,NETSIM_ID rcvid);
397
398 //Lib function prototype
399 _declspec(dllexport) int fn_NetSim_IEEE802_11_FreePacket(NetSim_PACKET* pstruPacket);
400 int fn_NetSim_IEEE802_11_Finish_F();
401
402 //MINSTREL
403 void InitMinstrel(NETSIM_ID nDevId,NETSIM_ID nifid);
404 void Minstrel_Init(NETSIM_ID nDevId,NETSIM_ID nifid);
405 void Ht_InitMinstrel(NETSIM_ID nDevId,NETSIM_ID nifid);
406 void DoReportDataFailed(NETSIM_ID dev,NETSIM_ID ifid,NETSIM_ID recv);
407 void DoReportDataOk(NETSIM_ID dev,NETSIM_ID ifid,NETSIM_ID recv);
408 void DoReportFinalDataFailed(NETSIM_ID dev,NETSIM_ID ifid,NETSIM_ID recv);
409 BOOL DoNeedDataRetransmission(NETSIM_ID dev,NETSIM_ID ifid,NETSIM_ID recv);
410 UINT get_minstrel_rate_index(NETSIM_ID dev,NETSIM_ID ifid,NETSIM_ID recv);
411 void FreeMinstrel(NETSIM_ID nDevId, NETSIM_ID nifid);
412 void DoReportAmpduStatus(NETSIM_ID devid,NETSIM_ID ifid,NETSIM_ID recvid,UINT success,UINT failed);
413 BOOL Ht_DoNeedDataRetransmission(NETSIM_ID devid,NETSIM_ID ifid,NETSIM_ID recvid);
414 BOOL Minstrel_DoNeedDataSend(NETSIM_ID nDevId,NETSIM_ID nifid,NETSIM_ID recvid);
415 void Minstrel_ReportDataFailed(NETSIM_ID nDevId,NETSIM_ID nifid,NETSIM_ID recvid);
416 void Minstrel_ReportFinalDataFailed(NETSIM_ID nDevId,NETSIM_ID nifid,NETSIM_ID recvid);
417 struct stru_802_11_Phy_Parameters_HT getTxRate(NETSIM_ID devid,NETSIM_ID ifid,NETSIM_ID recvid);
418 void HT_Minstrel_Free(NETSIM_ID nDevId, NETSIM_ID nifid);
419
420
421 void He_InitMinstrel(NETSIM_ID nDevId, NETSIM_ID nifid);
422 void He_DoReportAmpduStatus(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID recvid, UINT success, UINT failed);
423 BOOL He_DoNeedDataRetransmission(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID recvid);
424 struct stru_802_11_Phy_Parameters_HE He_getTxRate(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID recvid);
425 void HE_Minstrel_Free(NETSIM_ID nDevId, NETSIM_ID nifid);
426
427
428
429 //IEEE1609 Interface
430 PIEEE802_11_MAC_VAR IEEE802_11_MAC(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId);
431 void SET_IEEE802_11_MAC(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId, PIEEE802_11_MAC_VAR mac);
432 bool isIEEE802_11_Configure(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId);
433 bool validate_processing_time(double time, NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId);
434 NetSim_PACKET* get_from_queue(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, UINT nPacketRequire, UINT* nPacketCount);
435 NETSIM_ID add_to_queue(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NetSim_PACKET* packet);
436 void readd_to_queue(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NetSim_PACKET* packet);
437 bool isPacketInQueue(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId);
438
439 //Medium
440 void medium_change_callbackHandler(NETSIM_ID d,
441 NETSIM_ID in,
442 bool status, NetSim_PACKET*);
443 bool medium_isRadioIdleHandler(NETSIM_ID d,
444 NETSIM_ID in);
445 bool medium_isTransmitterBusyHandler(NETSIM_ID d,
446 NETSIM_ID in);
447 double medium_getRxPowerHandler(NETSIM_ID tx,
448 NETSIM_ID txif,
449 NETSIM_ID rx,
450 NETSIM_ID rxif,
451 double time);
452 void packetSentNotify(NETSIM_ID d, NETSIM_ID in, NetSim_PACKET* packet);
453
454 //Log
455 bool isIEEE802_11_log();
456 void print_ieee802_11_log(char* format, ...);
457 bool isieee802_11_Backoff_log();
458 void print_ieee802_11_Backoff_log(char* format, ...);
459 bool get_protocol_log_status(char* logname);
460
461 //Packet header
462 NETSIM_ID get_send_interface_id(NetSim_PACKET* packet);
463 NETSIM_ID get_recv_interface_id(NetSim_PACKET* packet);
464
465 //EDCAF
466 void ieee802_11_edcaf_set_txop_time(PIEEE802_11_MAC_VAR mac, double currTime);
467 void ieee802_11_edcaf_unset_txop_time(PIEEE802_11_MAC_VAR mac);
468 bool ieee802_11_edcaf_is_txop_timer_set(PIEEE802_11_MAC_VAR mac, double currTime);
469
470#ifdef __cplusplus
471}
472#endif
473#endif //_NETSIM_IEEE802_11_H_
Data structure for physical layer parameters.
Data structure for physical layer parameters.