Changeset View
Changeset View
Standalone View
Standalone View
sys/net80211/ieee80211_scan.c
Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | |||||
/* XXX until it's implemented as attach ops */ | /* XXX until it's implemented as attach ops */ | ||||
#include <net80211/ieee80211_scan_sw.h> | #include <net80211/ieee80211_scan_sw.h> | ||||
#include <net/bpf.h> | #include <net/bpf.h> | ||||
/* | /* | ||||
* Roaming-related defaults. RSSI thresholds are as returned by the | * Roaming-related defaults. RSSI thresholds are as returned by the | ||||
* driver (.5dBm). Transmit rate thresholds are IEEE rate codes (i.e | * driver (.5dBm). Transmit rate thresholds are coded into global | ||||
* .5M units) or MCS. | * ieee80211_rate_t structure indices. | ||||
*/ | */ | ||||
/* rssi thresholds */ | /* rssi thresholds */ | ||||
#define ROAM_RSSI_11A_DEFAULT 14 /* 11a bss */ | #define ROAM_RSSI_11A_DEFAULT 14 /* 11a bss */ | ||||
#define ROAM_RSSI_11B_DEFAULT 14 /* 11b bss */ | #define ROAM_RSSI_11B_DEFAULT 14 /* 11b bss */ | ||||
#define ROAM_RSSI_11BONLY_DEFAULT 14 /* 11b-only bss */ | #define ROAM_RSSI_11BONLY_DEFAULT 14 /* 11b-only bss */ | ||||
/* transmit rate thresholds */ | /* transmit rate thresholds */ | ||||
#define ROAM_RATE_11A_DEFAULT 2*12 /* 11a bss */ | #define ROAM_RATE_11A_DEFAULT \ | ||||
#define ROAM_RATE_11B_DEFAULT 2*5 /* 11b bss */ | IEEE80211_RATE_INDEX_OFDM12 /* 11a bss */ | ||||
#define ROAM_RATE_11BONLY_DEFAULT 2*1 /* 11b-only bss */ | #define ROAM_RATE_11B_DEFAULT \ | ||||
#define ROAM_RATE_HALF_DEFAULT 2*6 /* half-width 11a/g bss */ | IEEE80211_RATE_INDEX_CCK5 /* 11b bss */ | ||||
#define ROAM_RATE_QUARTER_DEFAULT 2*3 /* quarter-width 11a/g bss */ | #define ROAM_RATE_11BONLY_DEFAULT \ | ||||
#define ROAM_MCS_11N_DEFAULT (1 | IEEE80211_RATE_MCS) /* 11n bss */ | IEEE80211_RATE_INDEX_CCK1 /* 11b-only bss */ | ||||
#define ROAM_MCS_11AC_DEFAULT (1 | IEEE80211_RATE_MCS) /* 11ac bss; XXX not used yet */ | #define ROAM_RATE_HALF_DEFAULT \ | ||||
IEEE80211_RATE_INDEX_HALF6 /* half-width 11a/g bss */ | |||||
#define ROAM_RATE_QUARTER_DEFAULT \ | |||||
IEEE80211_RATE_INDEX_QUART3 /* quarter-width 11a/g bss */ | |||||
#define ROAM_MCS_11N_DEFAULT \ | |||||
IEEE80211_RATE_INDEX_HT(1) /* 11n bss */ | |||||
#define ROAM_MCS_11AC_DEFAULT \ | |||||
IEEE80211_RATE_INDEX_VHT(1, 1) /* 11ac bss; XXX not used yet */ | |||||
void | void | ||||
ieee80211_scan_attach(struct ieee80211com *ic) | ieee80211_scan_attach(struct ieee80211com *ic) | ||||
{ | { | ||||
/* | /* | ||||
* If there's no scan method pointer, attach the | * If there's no scan method pointer, attach the | ||||
* swscan set as a default. | * swscan set as a default. | ||||
*/ | */ | ||||
if (ic->ic_scan_methods == NULL) | if (ic->ic_scan_methods == NULL) | ||||
Show All 10 Lines | ieee80211_scan_detach(struct ieee80211com *ic) | ||||
* Ideally we'd do the ss_ops detach call here; | * Ideally we'd do the ss_ops detach call here; | ||||
* but then sc_detach() would need to be split in two. | * but then sc_detach() would need to be split in two. | ||||
* | * | ||||
* I'll do that later. | * I'll do that later. | ||||
*/ | */ | ||||
ic->ic_scan_methods->sc_detach(ic); | ic->ic_scan_methods->sc_detach(ic); | ||||
} | } | ||||
static const struct ieee80211_roamparam defroam[IEEE80211_MODE_MAX] = { | static const struct ieee80211_roamparam_vht defroam[IEEE80211_MODE_MAX] = { | ||||
[IEEE80211_MODE_11A] = { .rssi = ROAM_RSSI_11A_DEFAULT, | [IEEE80211_MODE_11A] = { .rssi = ROAM_RSSI_11A_DEFAULT, | ||||
.rate = ROAM_RATE_11A_DEFAULT }, | .rate = ROAM_RATE_11A_DEFAULT }, | ||||
[IEEE80211_MODE_11G] = { .rssi = ROAM_RSSI_11B_DEFAULT, | [IEEE80211_MODE_11G] = { .rssi = ROAM_RSSI_11B_DEFAULT, | ||||
.rate = ROAM_RATE_11B_DEFAULT }, | .rate = ROAM_RATE_11B_DEFAULT }, | ||||
[IEEE80211_MODE_11B] = { .rssi = ROAM_RSSI_11BONLY_DEFAULT, | [IEEE80211_MODE_11B] = { .rssi = ROAM_RSSI_11BONLY_DEFAULT, | ||||
.rate = ROAM_RATE_11BONLY_DEFAULT }, | .rate = ROAM_RATE_11BONLY_DEFAULT }, | ||||
[IEEE80211_MODE_TURBO_A]= { .rssi = ROAM_RSSI_11A_DEFAULT, | [IEEE80211_MODE_TURBO_A]= { .rssi = ROAM_RSSI_11A_DEFAULT, | ||||
.rate = ROAM_RATE_11A_DEFAULT }, | .rate = ROAM_RATE_11A_DEFAULT }, | ||||
Show All 15 Lines | [IEEE80211_MODE_VHT_5GHZ] = { .rssi = ROAM_RSSI_11A_DEFAULT, | ||||
.rate = ROAM_MCS_11AC_DEFAULT }, | .rate = ROAM_MCS_11AC_DEFAULT }, | ||||
}; | }; | ||||
void | void | ||||
ieee80211_scan_vattach(struct ieee80211vap *vap) | ieee80211_scan_vattach(struct ieee80211vap *vap) | ||||
{ | { | ||||
struct ieee80211com *ic = vap->iv_ic; | struct ieee80211com *ic = vap->iv_ic; | ||||
int m; | |||||
vap->iv_bgscanidle = (IEEE80211_BGSCAN_IDLE_DEFAULT*1000)/hz; | vap->iv_bgscanidle = (IEEE80211_BGSCAN_IDLE_DEFAULT*1000)/hz; | ||||
vap->iv_bgscanintvl = IEEE80211_BGSCAN_INTVAL_DEFAULT*hz; | vap->iv_bgscanintvl = IEEE80211_BGSCAN_INTVAL_DEFAULT*hz; | ||||
vap->iv_scanvalid = IEEE80211_SCAN_VALID_DEFAULT*hz; | vap->iv_scanvalid = IEEE80211_SCAN_VALID_DEFAULT*hz; | ||||
vap->iv_roaming = IEEE80211_ROAMING_AUTO; | vap->iv_roaming = IEEE80211_ROAMING_AUTO; | ||||
memcpy(vap->iv_roamparms, defroam, sizeof(defroam)); | for (m = IEEE80211_MODE_AUTO + 1; m < IEEE80211_MODE_MAX; m++) { | ||||
if (isclr(ic->ic_modecaps, m)) { | |||||
vap->iv_roamparms[m].rate = IEEE80211_RATE_NONEXISTENT; | |||||
continue; | |||||
} | |||||
memcpy(&vap->iv_roamparms[m], &defroam[m], sizeof(defroam[m])); | |||||
} | |||||
ic->ic_scan_methods->sc_vattach(vap); | ic->ic_scan_methods->sc_vattach(vap); | ||||
} | } | ||||
void | void | ||||
ieee80211_scan_vdetach(struct ieee80211vap *vap) | ieee80211_scan_vdetach(struct ieee80211vap *vap) | ||||
{ | { | ||||
struct ieee80211com *ic = vap->iv_ic; | struct ieee80211com *ic = vap->iv_ic; | ||||
▲ Show 20 Lines • Show All 531 Lines • Show Last 20 Lines |