diff options
Diffstat (limited to 'usr.sbin/hostapd')
-rw-r--r-- | usr.sbin/hostapd/hostapd.conf.5 | 29 | ||||
-rw-r--r-- | usr.sbin/hostapd/hostapd.h | 8 | ||||
-rw-r--r-- | usr.sbin/hostapd/iapp.c | 8 | ||||
-rw-r--r-- | usr.sbin/hostapd/parse.y | 36 |
4 files changed, 74 insertions, 7 deletions
diff --git a/usr.sbin/hostapd/hostapd.conf.5 b/usr.sbin/hostapd/hostapd.conf.5 index c10749b0c98..cd69140e43d 100644 --- a/usr.sbin/hostapd/hostapd.conf.5 +++ b/usr.sbin/hostapd/hostapd.conf.5 @@ -1,4 +1,4 @@ -.\" $OpenBSD: hostapd.conf.5,v 1.22 2005/12/01 01:28:19 reyk Exp $ +5~.\" $OpenBSD: hostapd.conf.5,v 1.23 2005/12/01 02:03:57 reyk Exp $ .\" .\" Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> .\" @@ -65,6 +65,7 @@ Macros are not expanded inside quotes. For example: .Bd -literal -offset indent wlan="ath0" +set iapp handle subtype { ! add notify, radiotap } set iapp interface $wlan .Ed .Sh TABLES @@ -138,6 +139,32 @@ Specify the mandatory Inter-Access-Point (IAPP) interface. It is important that the IAPP interface is on a trusted network because there is no authentication and an attacker could force disassociation of selected stations on all listening access points. +.It Xo +.Ic set iapp handle subtype +.Ar subtype \*(Ba\ \& +.Pf { Ar subtype0 , subtype1 , ... No } +.Xc +Specify the IAPP subtypes to use: +.Pp +.Bl -tag -width broadcast -offset indent -compact +.It Xo +.Op Ic not +.Ic add notify +.Xc +Sent and receive +.Em ADD.notify +messages. +This option is enabled by default. +.It Xo +.Op Ic not +.Ic radiotap +.Xc +Receive +.Em radiotap +messages. +This option is enabled by default. +.El +.Pp .It Ic set iapp mode Ar mode Specify the IAPP mode. The supported modes are: diff --git a/usr.sbin/hostapd/hostapd.h b/usr.sbin/hostapd/hostapd.h index f386bcc47cd..89191156a4f 100644 --- a/usr.sbin/hostapd/hostapd.h +++ b/usr.sbin/hostapd/hostapd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: hostapd.h,v 1.13 2005/12/01 01:28:19 reyk Exp $ */ +/* $OpenBSD: hostapd.h,v 1.14 2005/12/01 02:03:58 reyk Exp $ */ /* * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> @@ -263,6 +263,12 @@ struct hostapd_iapp { struct sockaddr_in i_addr; struct sockaddr_in i_broadcast; struct sockaddr_in i_multicast; + u_int8_t i_flags; + +#define HOSTAPD_IAPP_F_ADD_NOTIFY 0x01 +#define HOSTAPD_IAPP_F_RADIOTAP 0x02 +#define HOSTAPD_IAPP_F_DEFAULT \ + (HOSTAPD_IAPP_F_ADD_NOTIFY | HOSTAPD_IAPP_F_RADIOTAP) }; struct hostapd_config { diff --git a/usr.sbin/hostapd/iapp.c b/usr.sbin/hostapd/iapp.c index 0c723cc1123..acdd9c8e04e 100644 --- a/usr.sbin/hostapd/iapp.c +++ b/usr.sbin/hostapd/iapp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: iapp.c,v 1.12 2005/12/01 01:11:30 reyk Exp $ */ +/* $OpenBSD: iapp.c,v 1.13 2005/12/01 02:03:58 reyk Exp $ */ /* * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> @@ -91,6 +91,9 @@ hostapd_iapp_add_notify(struct hostapd_apme *apme, struct hostapd_node *node) struct ieee80211_iapp_add_notify add; } __packed frame; + if ((iapp->i_flags & HOSTAPD_IAPP_F_ADD_NOTIFY) == 0) + return (0); + /* * Send an ADD.notify message to other accesspoints to notify * about a new association on our Host AP. @@ -274,6 +277,9 @@ hostapd_iapp_input(int fd, short sig, void *arg) case IEEE80211_IAPP_FRAME_HOSTAPD_PCAP: case IEEE80211_IAPP_FRAME_HOSTAPD_RADIOTAP: + if ((iapp->i_flags & HOSTAPD_IAPP_F_RADIOTAP) == 0) + return; + /* Short frame */ if (len <= (ssize_t)sizeof(struct ieee80211_iapp_frame) || frame->hdr.i_length < sizeof(struct ieee80211_frame)) diff --git a/usr.sbin/hostapd/parse.y b/usr.sbin/hostapd/parse.y index 179d1172bb2..0220e6aac19 100644 --- a/usr.sbin/hostapd/parse.y +++ b/usr.sbin/hostapd/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.16 2005/12/01 01:28:19 reyk Exp $ */ +/* $OpenBSD: parse.y,v 1.17 2005/12/01 02:03:58 reyk Exp $ */ /* * Copyright (c) 2004, 2005 Reyk Floeter <reyk@vantronix.net> @@ -107,12 +107,16 @@ u_int negative; #define HOSTAPD_MATCH(_m) { \ frame.f_flags |= negative ? \ HOSTAPD_FRAME_F_##_m##_N : HOSTAPD_FRAME_F_##_m; \ - negative = 0; \ } #define HOSTAPD_MATCH_TABLE(_m) { \ frame.f_flags |= HOSTAPD_FRAME_F_##_m##_TABLE | (negative ? \ HOSTAPD_FRAME_F_##_m##_N : HOSTAPD_FRAME_F_##_m); \ - negative = 0; \ +} +#define HOSTAPD_IAPP_FLAG(_f) { \ + if (negative) \ + hostapd_cfg.c_iapp.i_flags &= ~(HOSTAPD_IAPP_F_##_f); \ + else \ + hostapd_cfg.c_iapp.i_flags |= (HOSTAPD_IAPP_F_##_f); \ } %} @@ -123,7 +127,7 @@ u_int negative; %token ERROR CONST TABLE NODE DELETE ADD LOG VERBOSE LIMIT QUICK SKIP %token REASON UNSPECIFIED EXPIRE LEAVE ASSOC TOOMANY NOT AUTHED ASSOCED %token RESERVED RSN REQUIRED INCONSISTENT IE INVALID MIC FAILURE OPEN -%token ADDRESS PORT ON +%token ADDRESS PORT ON NOTIFY %token <v.string> STRING %token <v.val> VALUE %type <v.val> number @@ -168,6 +172,7 @@ option : SET HOSTAP INTERFACE hostapifaces free($4); } | SET IAPP MODE iappmode + | SET IAPP HANDLE SUBTYPE iappsubtypes ; iappmode : MULTICAST iappmodeaddr iappmodeport @@ -262,6 +267,24 @@ event : HOSTAP HANDLE } ; +iappsubtypes : '{' optnl iappsubtypelist optnl '}' + | iappsubtype + ; + +iappsubtypelist : iappsubtype + | iappsubtypelist comma iappsubtype + ; + +iappsubtype : not ADD NOTIFY + { + HOSTAPD_IAPP_FLAG(ADD_NOTIFY); + } + | not RADIOTAP + { + HOSTAPD_IAPP_FLAG(RADIOTAP); + } + ; + eventopt : /* empty */ { frame.f_flags |= HOSTAPD_FRAME_F_RET_OK; @@ -902,6 +925,9 @@ optnl : /* empty */ ; not : /* empty */ + { + negative = 0; + } | '!' { negative = 1; @@ -973,6 +999,7 @@ lookup(char *token) { "no", NO }, { "node", NODE }, { "not", NOT }, + { "notify", NOTIFY }, { "nwid", NWID }, { "on", ON }, { "open", OPEN }, @@ -1299,6 +1326,7 @@ hostapd_parse_file(struct hostapd_config *cfg) TAILQ_INIT(&cfg->c_tables); TAILQ_INIT(&cfg->c_frames); cfg->c_iapp.i_multicast.sin_addr.s_addr = INADDR_ANY; + cfg->c_iapp.i_flags = HOSTAPD_IAPP_F_DEFAULT; lineno = 1; errors = 0; |