24#ifndef _NETSIM_IEEE802_11_H_
25#define _NETSIM_IEEE802_11_H_
29#ifndef _NO_DEFAULT_LINKER_
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")
38#pragma region LOG_MACRO
49#define CONTRL_FRAME_RATE_11B 1
50#define CONTRL_FRAME_RATE_11A_AND_G 6
51#define CONTRL_FRAME_RATE_11P 3
179 "TRANSMITTING_BROADCAST",
204#define IEEE802_11_MEDIUM_ACCESS_PROTOCOL_DEFAULT _strdup("DCF")
285#define IEEE802_11_CURR_MAC IEEE802_11_MAC(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId)
286#define isDCF(mac) (mac->mediumAccessProtocol == DCF)
287#define isEDCAF(mac) (mac->mediumAccessProtocol == EDCAF)
299#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))
300#define PPROPAGATION_INFO_ADD(info,e) (LIST_ADD_LAST(&(info),(e)))
301#define PPROPAGATION_INFO_NEXT(entity) (LIST_NEXT(entity))
302#define PPROPAGATION_INFO_REMOVE(ls, mem) (LIST_FREE((void**)(ls),(mem)))
309#define isSTAIdle(macVar,phyVar) (macVar->currMacState == IEEE802_11_MACSTATE_MAC_IDLE && phyVar->radio.radioState == RX_ON_IDLE)
310#define isCurrSTAIdle isSTAIdle(IEEE802_11_CURR_MAC,IEEE802_11_CURR_PHY)
311#define isSTAIdlebyId(devid,ifid) isSTAIdle(IEEE802_11_MAC(devid,ifid),IEEE802_11_PHY(devid,ifid))
312#define isCurrSTAMediumIdle() (isMediumIdle(pstruEventDetails->nDeviceId, pstruEventDetails->nInterfaceId))
NetSim_PACKET * fn_NetSim_IEEE802_11_CreateCTSPacket(NetSim_PACKET *data)
enum_802_11_FrameControl_Type
Page-382 of IEEE Std 802.11-2012 Table 8-1—Valid type and subtype combinations.
void fn_NetSim_IEEE802_11_MacOut()
int fn_NetSim_IEEE802_11_FreePacket(NetSim_PACKET *pstruPacket)
IEEE802_11_RATE_ADAPTATION
@ RATEADAPTATION_MINSTREL
bool is_more_fragment_coming(NetSim_PACKET *packet)
IEEE802_11_CCAMODE
page-1534 16.4.8.5 CCA, and 17.4.8.5 CCA IEEE802.11-2012
PIEEE802_11_MAC_VAR IEEE802_11_MAC(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId)
bool fn_NetSim_IEEE802_11_CSMACA_CheckRetryLimit(PIEEE802_11_MAC_VAR mac, UINT frameLength)
BOOL Minstrel_DoNeedDataSend(NETSIM_ID nDevId, NETSIM_ID nifid, NETSIM_ID recvid)
BOOL DoNeedDataRetransmission(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
double getAckSize(void *phy)
void ieee802_11_edcaf_set_txop_time(PIEEE802_11_MAC_VAR mac, double currTime)
void ieee802_11_hdr_copy(NetSim_PACKET *src, NetSim_PACKET *dest)
void SET_IEEE802_11_MAC(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId, PIEEE802_11_MAC_VAR mac)
IEEE802_11_MAC_STATE
Enumeration for 802.11 MAC states.
@ IEEE802_11_MACSTATE_BACKING_OFF
@ IEEE802_11_MACSTATE_Wait_BlockACK
@ IEEE802_11_MACSTATE_Wait_DATA
@ IEEE802_11_MACSTATE_Wait_AIFS
@ IEEE802_11_MACSTATE_Wait_ACK
@ IEEE802_11_MACSTATE_TXing_CTS
@ IEEE802_11_MACSTATE_WF_NAV
@ IEEE802_11_MACSTATE_Txing_BroadCast
@ IEEE802_11_MACSTATE_MAC_IDLE
@ IEEE802_11_MACSTATE_LAST
@ IEEE802_11_MACSTATE_TXing_MPDU
@ IEEE802_11_MACSTATE_TXing_RTS
@ IEEE802_11_MACSTATE_Wait_DIFS
@ IEEE802_11_MACSTATE_TXing_ACK
@ IEEE802_11_MACSTATE_OFF
@ IEEE802_11_MACSTATE_Wait_CTS
void fn_NetSim_IEEE802_11_Add_MAC_Header(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NetSim_PACKET *pstruPacket, unsigned int i)
bool is_first_packet(NetSim_PACKET *packet)
void DoReportDataFailed(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
void fn_NetSim_IEEE802_11_RTS_CTS_Init()
void packet_recv_notify(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID rcvid)
void fn_NetSim_IEE802_11_MacReInit(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId)
unsigned int get_rate_index(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID rcvid)
double calculate_nav(NETSIM_ID d, NETSIM_ID i, NetSim_PACKET *packet)
void fn_NetSim_Process_CtrlPacket()
struct stru_802_11_Metrics * PIEEE802_11_METRICS
IEEE802_11_BSS_TYPE
Page 2341 Enumerated types used in Mac and MLME service primitives.
void Generic_Rate_adaptation_init(NETSIM_ID nDevId, NETSIM_ID nifid)
void fn_NetSim_IEEE802_11_RTS_CTS_SendCTS()
double getMacOverhead(void *phy, double size)
bool isPacketforsameInfrastructureBSS(PIEEE802_11_MAC_VAR mac, NetSim_PACKET *packet)
bool isMacReceivingState(PIEEE802_11_MAC_VAR mac)
NetSim_PACKET * fn_NetSim_IEEE802_11_CreateAckPacket(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NetSim_PACKET *data, double time)
int fn_NetSim_IEEE802_11_CSMACA_CheckNAV()
void Ht_InitMinstrel(NETSIM_ID nDevId, NETSIM_ID nifid)
void Minstrel_Init(NETSIM_ID nDevId, NETSIM_ID nifid)
bool isIEEE802_11_Configure(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId)
void DoReportAmpduStatus(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID recvid, UINT success, UINT failed)
enum_802_11_Management_Frame_SubType
Page-382 of IEEE Std 802.11-2012 Table 8-1—Valid type and subtype combinations.
int fn_NetSim_IEEE802_11_CSMACA_SendBlockACK()
bool validate_processing_time(double time, NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId)
IEEE802_11_PROTOCOL
Enumeration for WLAN PHY protocols.
void packet_drop_notify(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID rcvid)
NetSim_PACKET * get_from_queue(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, UINT nPacketRequire, UINT *nPacketCount)
struct stru_propagation_info_for_list propagation_info_for_list
struct stru_802_11_Metrics IEEE802_11_METRICS
bool isPacketInQueue(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId)
NetSim_PACKET * fn_NetSim_IEEE802_11_CreateRTSPacket(NetSim_PACKET *data, double duration)
int fn_NetSim_IEEE802_11_CSMACA_SendACK()
void fn_NetSim_IEEE802_11_CSMA_AckTimeOut()
void DoReportDataOk(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
struct stru_802_11_Mac_Var IEEE802_MAC_VAR
void IEEE802_11_Change_Mac_State(PIEEE802_11_MAC_VAR mac, IEEE802_11_MAC_STATE state)
void fn_NetSim_IEEE802_11_CSMA_UpdateNAV(NETSIM_ID d, NETSIM_ID in, NetSim_PACKET *packet)
NetSim_PACKET * fn_NetSim_IEEE802_11_CreateBlockAckPacket(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NetSim_PACKET *data, double time)
void fn_NetSim_IEEE802_11_CSMACA_DIFSEnd()
void fn_NetSim_802_11_InfrastructureBSS_UpdateReceiver(NetSim_PACKET *packet)
NETSIM_ID get_recv_interface_id(NetSim_PACKET *packet)
double calculate_CTS_duration(NETSIM_ID d, NETSIM_ID i, double rtsduration)
void fn_NetSim_802_11_MeshBSS_UpdateReceiver(NetSim_PACKET *packet)
void fn_NetSim_IEEE802_11_RTS_CTS_AddCTSTimeOut(NetSim_PACKET *packet, NETSIM_ID devId, NETSIM_ID devIf)
PPROPAGATION_INFO find_propagation_info(NETSIM_ID t, NETSIM_ID ti, NETSIM_ID r, NETSIM_ID ri)
enum_802_11_Control_Frame_SubType
Page-383 of IEEE Std 802.11-2012 Table 8-1—Valid type and subtype combinations.
void ieee802_11_csmaca_aifs_failed(PIEEE802_11_MAC_VAR mac)
void fn_NetSim_IEEE802_11_SendToPhy()
void packetSentNotify(NETSIM_ID d, NETSIM_ID in, NetSim_PACKET *packet)
int fn_NetSim_IEEE802_11_Finish_F()
BOOL Ht_DoNeedDataRetransmission(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID recvid)
void FreeMinstrel(NETSIM_ID nDevId, NETSIM_ID nifid)
bool isMacIdle(PIEEE802_11_MAC_VAR mac)
struct stru_802_11_Phy_Parameters_HT getTxRate(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID recvid)
void HT_Minstrel_Free(NETSIM_ID nDevId, NETSIM_ID nifid)
void DoReportFinalDataFailed(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
void fn_NetSim_IEEE802_11_CSMACA_AddAckTimeOut(NetSim_PACKET *packet, NETSIM_ID devId, NETSIM_ID devIf)
void free_rate_adaptation_data(void *phy)
bool ieee802_11_edcaf_is_txop_timer_set(PIEEE802_11_MAC_VAR mac, double currTime)
NETSIM_ID get_send_interface_id(NetSim_PACKET *packet)
void fn_NetSim_IEEE802_11_CSMACA_ProcessAck()
int fn_NetSim_IEEE802_11_PropagationInit()
int fn_NetSim_IEEE802_11_FreePropagationInfo()
void medium_change_callbackHandler(NETSIM_ID d, NETSIM_ID in, bool status, NetSim_PACKET *)
IEEE802_11_MEDIUM_ACCESS_PROTOCOL
void ieee802_11_csmaca_pause_backoff(PIEEE802_11_MAC_VAR mac)
bool medium_isRadioIdleHandler(NETSIM_ID d, NETSIM_ID in)
bool isIEEE802_11_CtrlPacket(NetSim_PACKET *packet)
void readd_to_queue(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NetSim_PACKET *packet)
void ieee802_11_csmaca_difs_failed(PIEEE802_11_MAC_VAR mac)
void fn_NetSim_IEEE802_11_Timer()
bool isMacTransmittingState(PIEEE802_11_MAC_VAR mac)
bool isPacketforsameMeshBSS(PIEEE802_11_MAC_VAR mac, NetSim_PACKET *packet)
bool fn_NetSim_IEEE802_11_CSMACA_CS()
void fn_NetSim_IEEE802_11_RTS_CTS_ProcessCTS()
void print_ieee802_11_Backoff_log(char *format,...)
void fn_NetSim_IEEE802_11_RTS_CTS_ProcessRTS()
UINT get_minstrel_rate_index(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
void InitMinstrel(NETSIM_ID nDevId, NETSIM_ID nifid)
bool fn_NetSim_IEEE802_11_CSMACA_Backoff()
void ieee802_11_edcaf_unset_txop_time(PIEEE802_11_MAC_VAR mac)
void fn_NetSim_IEEE802_11_CSMACA_AIFSEnd()
struct stru_802_11_Mac_Var * PIEEE802_11_MAC_VAR
enum_802_11_Data_Frame_SubType
Page-383 of IEEE Std 802.11-2012 Table 8-1—Valid type and subtype combinations.
@ QoSData_Plus_CFAck_Plus_CFPoll
@ Data_Plus_CFAck_Plus_CFPoll
NETSIM_ID add_to_queue(NETSIM_ID nDeviceId, NETSIM_ID nInterfaceId, NetSim_PACKET *packet)
void fn_NetSim_IEEE802_11_RTS_CTS_CTSTimeOut()
struct stru_propagation_info_for_list * ptrpropagation_info_for_list
void Minstrel_ReportDataFailed(NETSIM_ID nDevId, NETSIM_ID nifid, NETSIM_ID recvid)
int fn_NetSim_IEEE802_11_CSMACA_Init()
int fn_NetSim_IEEE802_11_MacIn()
bool medium_isTransmitterBusyHandler(NETSIM_ID d, NETSIM_ID in)
double medium_getRxPowerHandler(NETSIM_ID tx, NETSIM_ID txif, NETSIM_ID rx, NETSIM_ID rxif, double time)
void fn_NetSim_IEEE802_11_CSMACA_ProcessBlockAck()
static char strIEEE802_11_MAC_STATE[IEEE802_11_MACSTATE_LAST][48]
void print_ieee802_11_log(char *format,...)
void ieee802_11_free_hdr(NetSim_PACKET *packet)
void Minstrel_ReportFinalDataFailed(NETSIM_ID nDevId, NETSIM_ID nifid, NETSIM_ID recvid)
bool isieee802_11_Backoff_log()
void set_blockack_bitmap(NetSim_PACKET *ackPacket, NetSim_PACKET *packet)
void fn_NetSim_IEEE802_11_CSMACA_IncreaseCW(PIEEE802_11_MAC_VAR mac)
#define _declspec(dllexport)
This function is used to trigger the update.
IEEE802_11_MAC_STATE prevMacState
double dPacketProcessingEndTime
UINT nNumberOfAggregatedPackets
bool macAggregationStatus
NETSIM_ID parentInterfaceId
IEEE802_11_RATE_ADAPTATION rate_adaptationAlgo
IEEE802_11_MEDIUM_ACCESS_PROTOCOL mediumAccessProtocol
IEEE802_11_MAC_STATE currMacState
UINT dot11ShortRetryLimit
NetSim_PACKET * blockAckPacket
NetSim_PACKET * waitingforCTS
ptrDOT11EDCATABLE currEdcaTable
DOT11EDCATABLE dot11EdcaTable[MAX_AC_CATEGORY]
NetSim_PACKET * currentProcessingPacket
IEEE802_11_METRICS metrics
struct stru_802_11_Mac_Var::@0 EVENTID
IEEE802_11_BSS_TYPE BSSType
UINT nTransmittedFrameCount
UINT nBackoffSuccessCount
Data structure for physical layer parameters.
PPROPAGATION_INFO Propagation_Info