aboutsummaryrefslogtreecommitdiff
path: root/sys/net80211/ieee80211_ioctl.c
diff options
context:
space:
mode:
authorSam Leffler <sam@FreeBSD.org>2007-11-02 05:22:25 +0000
committerSam Leffler <sam@FreeBSD.org>2007-11-02 05:22:25 +0000
commit1b6167d23905ef392a200c3cf17c0b59d5461bb9 (patch)
tree31ef816fec1ce8d9e6eb861a98c569ed24053ce5 /sys/net80211/ieee80211_ioctl.c
parentcd9a2dab49cedd3070006dbe3c2ccc3fbd789b10 (diff)
downloadsrc-1b6167d23905ef392a200c3cf17c0b59d5461bb9.tar.gz
src-1b6167d23905ef392a200c3cf17c0b59d5461bb9.zip
sync 11n support with vap code base; many changes based on interop
testing with all major vendors MFC after: 1 week
Notes
Notes: svn path=/head/; revision=173273
Diffstat (limited to 'sys/net80211/ieee80211_ioctl.c')
-rw-r--r--sys/net80211/ieee80211_ioctl.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c
index 3fe85e97322b..83627e83bd44 100644
--- a/sys/net80211/ieee80211_ioctl.c
+++ b/sys/net80211/ieee80211_ioctl.c
@@ -1108,6 +1108,17 @@ ieee80211_ioctl_get80211(struct ieee80211com *ic, u_long cmd, struct ieee80211re
case IEEE80211_IOC_INACTIVITY:
ireq->i_val = (ic->ic_flags_ext & IEEE80211_FEXT_INACT) != 0;
break;
+ case IEEE80211_IOC_HTPROTMODE:
+ ireq->i_val = ic->ic_htprotmode;
+ break;
+ case IEEE80211_IOC_HTCONF:
+ if (ic->ic_flags_ext & IEEE80211_FEXT_HT) {
+ ireq->i_val = 1;
+ if (ic->ic_flags_ext & IEEE80211_FEXT_USEHT40)
+ ireq->i_val |= 2;
+ } else
+ ireq->i_val = 0;
+ break;
default:
error = EINVAL;
break;
@@ -2479,6 +2490,27 @@ ieee80211_ioctl_set80211(struct ieee80211com *ic, u_long cmd, struct ieee80211re
else
ic->ic_flags_ext &= ~IEEE80211_FEXT_INACT;
break;
+ case IEEE80211_IOC_HTPROTMODE:
+ if (ireq->i_val > IEEE80211_PROT_RTSCTS)
+ return EINVAL;
+ ic->ic_htprotmode = ireq->i_val ?
+ IEEE80211_PROT_RTSCTS : IEEE80211_PROT_NONE;
+ /* NB: if not operating in 11n this can wait */
+ if (ic->ic_bsschan != IEEE80211_CHAN_ANYC &&
+ IEEE80211_IS_CHAN_HT(ic->ic_bsschan))
+ error = ERESTART;
+ break;
+ case IEEE80211_IOC_HTCONF:
+ if (ireq->i_val & 1)
+ ic->ic_flags_ext |= IEEE80211_FEXT_HT;
+ else
+ ic->ic_flags_ext &= ~IEEE80211_FEXT_HT;
+ if (ireq->i_val & 2)
+ ic->ic_flags_ext |= IEEE80211_FEXT_USEHT40;
+ else
+ ic->ic_flags_ext &= ~IEEE80211_FEXT_USEHT40;
+ error = ENETRESET;
+ break;
default:
error = EINVAL;
break;