31#define SEED_r &NETWORK->ppstruDeviceList[0]->ulSeed[0],&NETWORK->ppstruDeviceList[0]->ulSeed[1]
32#define rand01() (fn_NetSim_Utilities_GenerateRandomNo(SEED_r)/NETSIM_RAND_MAX)
33#define ackTime(phy) (phy->plmeCharacteristics.aSIFSTime + get_preamble_time(phy) + (getAckSize(phy) * 8)/phy->dControlFrameDataRate)
34#define tSlot(phy) (phy->plmeCharacteristics.aSlotTime)
35#define transmissionTime(phy,byte,rate) (phy->plmeCharacteristics.aSIFSTime + get_preamble_time(phy)+ byte*8/rate)
212 station->
nRate = get_nrate;
214 for(i=0;i<station->
nRate;i++)
215 if(get_rate[i] < get_rate[station->
baseRate])
240 for(i=0;i<station->
nRate;i++){
252 for(i=0;i<station->
nRate;i++){
255 random_var = (i+random_var)%station->
nRate;
257 while(station->
sampleTable[random_var][j] != 10000){
258 random_var = (random_var + 1)%station->
nRate;
269 for(i=0;i<station->
nRate;i++){
294 trTime+= (
tSlot(station->
phy)*cw)>>1;
295 cw =
min((cw<<1)|1,1023);
322 if(station->
nRate >=1)
463 UINT i,index_max_tp, index_max_tp2, index_max_prob;
464 double tempProb, max_prob, max_tp;
466 if(ldEventTime < station->nextStatsUpdate){
474 for(i=0;i<station->
nRate;i++){
488 tempProb = tempProb/18000.0;
553 for(i=0;i<station->
nRate;i++){
554 if(max_tp < station->minstrelTable[i].throughput){
561 for(i=0;i<station->
nRate;i++){
562 if(i != index_max_tp && max_tp < station->minstrelTable[i].throughput){
568 for(i=0;i<station->
nRate;i++){
596 if(delta > (
int)(2* n_rates)){
683 if(station->
nRate >= 1)
755 nDevId, nifid, __FUNCTION__);
761 for(i=0;i<station->
nRate;i++){
787 add_table_heading_special(table,
"SourceId#1,DestinationId#1,Rate#1,RetryCount#0,Throughput#1,EwmaProb#0,CurrentSuccess#0,CurrentAttempt#0,TotalSuccess#0,TotalAttempt#0,StationSample#0,StationTotal#0,StationRetry#0,");
801 for(k=0;k<station->
nRate;k++){
PIEEE802_11_MAC_VAR IEEE802_11_MAC(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId)
bool isIEEE802_11_Configure(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId)
PIEEE802_11_PHY_VAR IEEE802_11_PHY(NETSIM_ID ndeviceId, NETSIM_ID nInterfaceId)
void get_ofdm_phy_all_rate(int bandwidth_MHz, double *rate, UINT *len)
@ RATEADAPTATION_MINSTREL
void Ht_InitMinstrel(NETSIM_ID nDevId, NETSIM_ID nifid)
void DoReportAmpduStatus(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID recvid, UINT success, UINT failed)
BOOL Ht_DoNeedDataRetransmission(NETSIM_ID devid, NETSIM_ID ifid, NETSIM_ID recvid)
void HT_Minstrel_Free(NETSIM_ID nDevId, NETSIM_ID nifid)
void get_dsss_phy_all_rate(double *rate, UINT *len)
#define fnNetSimError(x,...)
void write_metrics_node(PMETRICSWRITER writer, WRITER_POSITION writerPosition, char *writer_name, PMETRICSNODE node)
void add_table_heading_special(PMETRICSNODE node, char *heading)
PMETRICSNODE init_metrics_node(METRICS_NODE type, char *name, char *secondarg)
void delete_metrics_node(PMETRICSNODE node)
void add_node_to_menu(PMETRICSNODE menu, PMETRICSNODE node)
void add_table_row_formatted(bool issame, PMETRICSNODE node, char *format,...)
BOOL Minstrel_DoNeedDataSend(NETSIM_ID nDevId, NETSIM_ID nifid, NETSIM_ID recvid)
BOOL DoNeedDataRetransmission(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
static UINT GetNextSample(Ptr_MinstrelPerRemoteStation station)
void DoReportDataFailed(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
static UINT CountRetry(Ptr_MinstrelPerRemoteStation station)
void Minstrel_Init(NETSIM_ID nDevId, NETSIM_ID nifid)
static void UpdateRetry(Ptr_MinstrelPerRemoteStation station)
void print_minstrel_table(PMETRICSWRITER metricsWriter)
static void UpdatePacketCounter(Ptr_MinstrelPerRemoteStation station)
void DoReportDataOk(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
void Minstrel_Free(NETSIM_ID nDevId, NETSIM_ID nifid)
static UINT FindRate(Ptr_MinstrelPerRemoteStation station)
#define transmissionTime(phy, byte, rate)
static void InitMinstrelTable(Ptr_MinstrelPerRemoteStation station, double *rate_arr)
static void DoReportFinalRtsFailed(Ptr_MinstrelPerRemoteStation station)
void FreeMinstrel(NETSIM_ID nDevId, NETSIM_ID nifid)
void DoReportFinalDataFailed(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
static void DoReportRtsFailed(Ptr_MinstrelPerRemoteStation station)
static void UpdateRate(Ptr_MinstrelPerRemoteStation station)
static Ptr_MinstrelPerRemoteStation getMinstrelInfo(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
static void UpdateStats(Ptr_MinstrelPerRemoteStation station)
void FreeTables(Ptr_MinstrelPerRemoteStation station)
static void InitSampleTable(Ptr_MinstrelPerRemoteStation station)
void get_data_rate(NETSIM_ID devid, NETSIM_ID ifid, double *rate, unsigned int *len)
UINT get_minstrel_rate_index(NETSIM_ID dev, NETSIM_ID ifid, NETSIM_ID recv)
void InitMinstrel(NETSIM_ID nDevId, NETSIM_ID nifid)
void Minstrel_ReportDataFailed(NETSIM_ID nDevId, NETSIM_ID nifid, NETSIM_ID recvid)
static void CheckInit(Ptr_MinstrelPerRemoteStation station, NETSIM_ID nDevId, NETSIM_ID nifid)
void Minstrel_ReportFinalDataFailed(NETSIM_ID nDevId, NETSIM_ID nifid, NETSIM_ID recvid)
struct stru_MinstrelWifiRemoteStation * Ptr_MinstrelPerRemoteStation
struct stru_MinstrelWifiStation * Ptr_MinstrelWifiStation
EXPORTED double ldEventTime
#define DEVICE_CONFIGID(DeviceId)
EXPORTED struct stru_NetSim_Network * NETWORK
NetSim_PACKET * currentProcessingPacket
IEEE802_11_PROTOCOL PhyProtocol
void * rateAdaptationData
Ptr_MinstrelPerRemoteStation * minstrelInfo
struct stru_NetSim_Packet * pstruNextPacket