Skip to content

index_to_rate[] (for @bcopeland fork) #7

@VanLaser

Description

@VanLaser

@bcopeland

Hello,

Sorry to put the issue here, but I can't open one at https://github.com/bcopeland/wmediumd fork. Using kernel 4.9.8-1 (Arch Linux) built with mac802_hwsim, I encounter the following issues. I'm not very familiar with wmediumd, so I don't know exactly what the problem is, but, here are the "symptoms":

Grepping 'dmesg', the wlan interfaces, created by loading mac80211_hwsim, use rates configured by minstrel_ht. Here's a rc_stats sample from /sys/kernel/debug/ieee80211/phy7/netdev:wlan0/stations/02:00:00:00:01:00 (where phy7 is of course the id associated with wlan0):

best   __________rate_________    ________statistics________    ________last_______    ______sum-of________
rate  [name idx airtime max_tp]  [avg(tp) avg(prob) sd(prob)]  [prob.|retry|suc|att]  [#success | #attempts]
        1     0    9738    0.9       0.9      99.9      0.0     100.0   1     1 1           654   1282     
        2     1    4922    1.6       1.6      86.8      1.8     100.0   1     0 0            47   97       
        5.5   2    1858    4.7       4.5      86.9      1.8     100.0   2     0 0           126   203      
       11     3     982    9.1       8.3      82.4      1.8     100.0   4     0 0          4299   4412     
        6     4    1648    5.3       5.1      86.8      1.8     100.0   3     0 0           203   268      
        9     5    1112    8.0       7.3      82.3      1.8     100.0   4     0 0            61   190      
       12     6     844   10.5      10.5      92.4      1.7     100.0   5     0 0            54   183      
   D   18     7     576   15.5      14.9      86.6      1.6     100.0   5     0 0            35   187      
  C    24     8     440   20.4      18.6      82.2      1.7     100.0   6     0 0          1292   1464     
A   P  36     9     308   29.1      29.1      99.9      0.0     100.0   6     0 0          5392   7739     
 B     48    10     240   37.3      19.9      48.0      0.8      33.3   6     0 0           915   1648     
       54    11     216    0.0       0.0       0.0      0.0       0.0   6     0 0             0   222   

As you can see, the rates and indexes used are those from the first 2 columns.

Now, when inspecting the function queue_frame() from wmediumd.c (bcopeland fork), it seems to me that the array index_to_rate[], that gets consulted each time an index must be translated to a rate, is out of place - by logging the index value, I get for example values such as 9 etc. which are higher than the dimension of the array. So, my question is, is the following modification the 'right' one to make?

static int index_to_rate[] = {
	10, 20, 55, 110, 60, 90, 120, 180, 240, 360, 480, 540
};

Since I'm not familiar with wmediumd, I have no clue about what causes this new set of rates to kick in, instead of the 'old' one. When does this happen - all the time? or does it depend on minstrel_ht (vs minstrel)? Even in this case, I'm not entirely sure the index is not 'offset' by 1 - if I log the rate index for an acknowledged frame (rate_idx in queue_frame(), after the loop), it seems to be higher (by 1) than the one selected as ideal (A P) in rc_stats (e.g. I get index 10 as the most used, but rc_stats shows that index 9 was the ideal one).

Thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions