int dot11_put_supported_rates(uint8_t *dst, float *basic, float *rates){ uint8_t *d = dst+2; while(*basic != 0.0){ *d++ = 0x80 | dot11_float2rate(*basic); basic++; } while(*rates != 0.0){ *d++ = dot11_float2rate(*rates); rates++; } *(dst)=DOT11_ELEM_SUPPORTED_RATES; *(dst+1) = d-(dst+2); return d-dst; }
static struct mbag_item * from_str(const char *src) { mbag_item_t * item = mbag_item_new(CAPWAP80211_TYPE_RATESET); if (!item) return NULL; if (strlen(src)==0) return 0; uint8_t rates[64]; int nrates =0; const char *s = src; while (*s!=0){ while (*s==' ') s++; int m=0; if(*s=='*'){ m=0x80; s++; } else{ m=0; } float val; int n=sscanf(s,"%f",&val); if (n!=1) break; int r = dot11_float2rate(val) | m; rates[nrates++]=r; while (*s!=0 && *s!=' ') s++; } uint8_t *data = malloc(nrates+1); *data=nrates; memcpy(data+1,rates,nrates); item->data=data; return item; }