diff options
| author | Jonathan McCrohan <jmccrohan@gmail.com> | 2020-07-29 23:11:46 +0100 | 
|---|---|---|
| committer | Jonathan McCrohan <jmccrohan@gmail.com> | 2020-07-29 23:11:46 +0100 | 
| commit | 8deb3660926fe8278948b898b9c1b772eed2e61e (patch) | |
| tree | cc46239969468c1f4017da7aac5420664b5bbd22 | |
| parent | 1fc41b776f712f321c1f355d391c6a5eaf79ebfa (diff) | |
| download | wavemon-8deb3660926fe8278948b898b9c1b772eed2e61e.tar.gz | |
New upstream version 0.9.1upstream/0.9.1upstream
| -rw-r--r-- | about_scr.c | 2 | ||||
| -rw-r--r-- | conf.c | 13 | ||||
| -rw-r--r-- | conf_scr.c | 6 | ||||
| -rwxr-xr-x | configure | 67 | ||||
| -rw-r--r-- | configure.ac | 20 | ||||
| -rw-r--r-- | info_scr.c | 20 | ||||
| -rw-r--r-- | iw_if.c | 42 | ||||
| -rw-r--r-- | iw_if.h | 1 | ||||
| -rw-r--r-- | iw_scan.c | 11 | ||||
| -rw-r--r-- | lhist_scr.c | 11 | ||||
| -rw-r--r-- | nl80211.h | 1098 | ||||
| -rw-r--r-- | wavemon.c | 37 | ||||
| -rw-r--r-- | wavemon.h | 19 | ||||
| -rw-r--r-- | wavemonrc.5 | 11 | 
14 files changed, 1236 insertions, 122 deletions
| diff --git a/about_scr.c b/about_scr.c index 76adaba..4dd7134 100644 --- a/about_scr.c +++ b/about_scr.c @@ -24,7 +24,7 @@ static WINDOW *w_about;  static char *about_lines[] = {  	"wavemon - status monitor for wireless network devices", -	"version " PACKAGE_VERSION " (built " BUILD_DATE ")", +	"version " PACKAGE_VERSION,  	"",  	"original by jan morgenstern <jan@jm-music.de>",  	"distributed under the GNU general public license v3", @@ -64,6 +64,7 @@ struct wavemon_conf conf = {  	.check_geometry		= false,  	.cisco_mac		= false, +	.transparent_bg		= true,  	.override_bounds	= false,  	.sig_min		= -100, @@ -507,6 +508,15 @@ static void init_conf_items(void)  	ll_push(conf_items, "*", item);  	item = calloc(1, sizeof(*item)); +	item->name	= strdup("Use transparent background"); +	item->cfname	= strdup("transparent_bg"); +	item->type	= t_list; +	item->v.i	= &conf.transparent_bg; +	item->list	= on_off_names; +	item->hidden    = true; +	ll_push(conf_items, "*", item); + +	item = calloc(1, sizeof(*item));  	item->name	= strdup("Startup screen");  	item->cfname	= strdup("startup_screen");  	item->type	= t_list; @@ -527,6 +537,7 @@ static void init_conf_items(void)  	ll_push(conf_items, "*", item);  } +/** getconf handles the initialization from commandline and rc file defaults. */  void getconf(int argc, char *argv[])  {  	int arg, help = 0, version = 0; @@ -577,4 +588,6 @@ void getconf(int argc, char *argv[])  		if (conf.if_idx < 0)  			err_quit("%s is not a usable wireless interface", iface);  	} + +	atexit(write_cf);  } @@ -51,7 +51,7 @@ static void waddstr_item(WINDOW *w, int y, struct conf_item *item, char hilight)  			break;  		case t_list:  			assert(item->list && item->list[*item->v.i]); -			strncpy(s, item->list[*item->v.i], sizeof(s)); +			strncpy(s, item->list[*item->v.i], sizeof(s)-1);  			/* Fall through, dummy statements to pacify gcc -Wall */  		case t_sep:  		case t_func: @@ -90,7 +90,7 @@ static void waddstr_item(WINDOW *w, int y, struct conf_item *item, char hilight)  	}  } -static void change_item(int inum, char sign) +static void change_item(int inum, int sign)  {  	struct conf_item *item = ll_get(conf_items, inum);  	int tmp; @@ -139,7 +139,7 @@ static int m_pref(WINDOW *w_conf, int list_offset, int active_item, int num_item  	for (active_line = i = j = 0; i < num_items; i++) {  		struct conf_item *item = ll_get(conf_items, i); -		if (!item->dep || *item->dep) { +		if (!item->hidden && (!item->dep || *item->dep)) {  			if (i != active_item)  				waddstr_item(w_conf, j++, item, 0);  			else { @@ -1,6 +1,6 @@  #! /bin/sh  # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for wavemon 0.8.2. +# Generated by GNU Autoconf 2.69 for wavemon 0.9.1.  #  # Report bugs to <https://github.com/uoaerg/wavemon>.  # @@ -580,8 +580,8 @@ MAKEFLAGS=  # Identity of this package.  PACKAGE_NAME='wavemon'  PACKAGE_TARNAME='wavemon-current' -PACKAGE_VERSION='0.8.2' -PACKAGE_STRING='wavemon 0.8.2' +PACKAGE_VERSION='0.9.1' +PACKAGE_STRING='wavemon 0.9.1'  PACKAGE_BUGREPORT='https://github.com/uoaerg/wavemon'  PACKAGE_URL='https://github.com/uoaerg/wavemon' @@ -670,6 +670,7 @@ infodir  docdir  oldincludedir  includedir +runstatedir  localstatedir  sharedstatedir  sysconfdir @@ -692,6 +693,7 @@ SHELL'  ac_subst_files=''  ac_user_opts='  enable_option_checking +with_libcap  '        ac_precious_vars='build_alias  host_alias @@ -747,6 +749,7 @@ datadir='${datarootdir}'  sysconfdir='${prefix}/etc'  sharedstatedir='${prefix}/com'  localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run'  includedir='${prefix}/include'  oldincludedir='/usr/include'  docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -999,6 +1002,15 @@ do    | -silent | --silent | --silen | --sile | --sil)      silent=yes ;; +  -runstatedir | --runstatedir | --runstatedi | --runstated \ +  | --runstate | --runstat | --runsta | --runst | --runs \ +  | --run | --ru | --r) +    ac_prev=runstatedir ;; +  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ +  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ +  | --run=* | --ru=* | --r=*) +    runstatedir=$ac_optarg ;; +    -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)      ac_prev=sbindir ;;    -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1136,7 +1148,7 @@ fi  for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \  		datadir sysconfdir sharedstatedir localstatedir includedir \  		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ -		libdir localedir mandir +		libdir localedir mandir runstatedir  do    eval ac_val=\$$ac_var    # Remove trailing slashes. @@ -1249,7 +1261,7 @@ if test "$ac_init_help" = "long"; then    # Omit some internal or obsolete options to make the list less imposing.    # This message is too long to be a string in the A/UX 3.1 sh.    cat <<_ACEOF -\`configure' configures wavemon 0.8.2 to adapt to many kinds of systems. +\`configure' configures wavemon 0.9.1 to adapt to many kinds of systems.  Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1289,6 +1301,7 @@ Fine tuning of the installation directories:    --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]    --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]    --localstatedir=DIR     modifiable single-machine data [PREFIX/var] +  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]    --libdir=DIR            object code libraries [EPREFIX/lib]    --includedir=DIR        C header files [PREFIX/include]    --oldincludedir=DIR     C header files for non-gcc [/usr/include] @@ -1314,10 +1327,15 @@ fi  if test -n "$ac_init_help"; then    case $ac_init_help in -     short | recursive ) echo "Configuration of wavemon 0.8.2:";; +     short | recursive ) echo "Configuration of wavemon 0.9.1:";;     esac    cat <<\_ACEOF +Optional Packages: +  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes] +  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no) +  --without-libcap        disable support for libcap +  Some influential environment variables:    CC          C compiler command    CFLAGS      C compiler flags @@ -1407,7 +1425,7 @@ fi  test -n "$ac_init_help" && exit $ac_status  if $ac_init_version; then    cat <<\_ACEOF -wavemon configure 0.8.2 +wavemon configure 0.9.1  generated by GNU Autoconf 2.69  Copyright (C) 2012 Free Software Foundation, Inc. @@ -1830,7 +1848,7 @@ cat >config.log <<_ACEOF  This file contains any messages produced by compilers while  running configure, to aid debugging if configure makes a mistake. -It was created by wavemon $as_me 0.8.2, which was +It was created by wavemon $as_me 0.9.1, which was  generated by GNU Autoconf 2.69.  Invocation command line was    $ $0 $@ @@ -2212,19 +2230,6 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.  ac_config_files="$ac_config_files Makefile" -# allow BUILD_DATE to be externally set for build reproducibility -if test "$BUILD_DATE"; then -  cat >>confdefs.h <<_ACEOF -#define BUILD_DATE "$BUILD_DATE" -_ACEOF - -else - -cat >>confdefs.h <<_ACEOF -#define BUILD_DATE "`/bin/date`" -_ACEOF - -fi  CFLAGS="-O2 -Wall" @@ -3920,7 +3925,20 @@ else    as_fn_error $? "pthread library not found" "$LINENO" 5  fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_get_flag in -lcap" >&5 + +# libcap - allow to disable, since e.g. OpenWrt does not use it. +# https://github.com/uoaerg/wavemon/issues/54 + +# Check whether --with-libcap was given. +if test "${with_libcap+set}" = set; then : +  withval=$with_libcap; +else +  with_libcap=yes +fi + + +if test "x$with_libcap" != xno; then : +  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_get_flag in -lcap" >&5  $as_echo_n "checking for cap_get_flag in -lcap... " >&6; }  if ${ac_cv_lib_cap_cap_get_flag+:} false; then :    $as_echo_n "(cached) " >&6 @@ -3965,6 +3983,7 @@ _ACEOF  fi +fi  # Testing library functions  for ac_func in gettimeofday ether_ntohost @@ -4955,7 +4974,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1  # report actual input values of CONFIG_FILES etc. instead of their  # values after options handling.  ac_log=" -This file was extended by wavemon $as_me 0.8.2, which was +This file was extended by wavemon $as_me 0.9.1, which was  generated by GNU Autoconf 2.69.  Invocation command line was    CONFIG_FILES    = $CONFIG_FILES @@ -5009,7 +5028,7 @@ _ACEOF  cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1  ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"  ac_cs_version="\\ -wavemon config.status 0.8.2 +wavemon config.status 0.9.1  configured by $0, generated by GNU Autoconf 2.69,    with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 323b96c..c70e825 100644 --- a/configure.ac +++ b/configure.ac @@ -1,19 +1,12 @@  dnl Process this file with autoconf to produce a configure script.  AC_PREREQ(2.64) -AC_INIT([wavemon], [0.8.2], [https://github.com/uoaerg/wavemon], [wavemon-current], +AC_INIT([wavemon], [0.9.1], [https://github.com/uoaerg/wavemon], [wavemon-current],  	[https://github.com/uoaerg/wavemon])  # Variables  AC_CONFIG_AUX_DIR([config])  AC_CONFIG_FILES([Makefile]) -# allow BUILD_DATE to be externally set for build reproducibility -if test "$BUILD_DATE"; then -  AC_DEFINE_UNQUOTED(BUILD_DATE, ["$BUILD_DATE"]) -else -  AC_DEFINE_UNQUOTED([BUILD_DATE], ["`/bin/date`"], -		   [date wavemon was last configured and built]) -fi  CFLAGS="-O2 -Wall" @@ -62,7 +55,16 @@ AC_CHECK_LIB([m], [pow], [],              [AC_MSG_ERROR(math library not found)]  AC_CHECK_LIB([ncurses], [waddstr], [],    [AC_MSG_ERROR(ncurses library not found)])  AC_CHECK_LIB([pthread], [pthread_create], [CFLAGS="$CFLAGS -pthread"],  					  [AC_MSG_ERROR(pthread library not found)]) -AC_CHECK_LIB([cap], [cap_get_flag]) + +# libcap - allow to disable, since e.g. OpenWrt does not use it. +# https://github.com/uoaerg/wavemon/issues/54 +AC_ARG_WITH([libcap], +	    [AS_HELP_STRING([--without-libcap], +	    [disable support for libcap])], +	    [], +	    [with_libcap=yes]) + +AS_IF([test "x$with_libcap" != xno], AC_CHECK_LIB([cap], [cap_get_flag]))  # Testing library functions  AC_CHECK_FUNCS([gettimeofday ether_ntohost], [], @@ -78,13 +78,15 @@ static void display_levels(void)  	char tmp[0x100];  	int line;  	bool noise_data_valid; -	int sig_qual = -1, sig_qual_max, sig_level; +	int sig_qual = -1, sig_qual_max = 0, sig_level = 0;  	noise_data_valid = iw_nl80211_have_survey_data(&linkstat.data); -	sig_level = linkstat.data.signal_avg ?: linkstat.data.signal; +	sig_level = linkstat.data.signal;  	/* See comments in iw_cache_update */  	if (sig_level == 0) +		sig_level = linkstat.data.signal_avg; +	if (sig_level == 0)  		sig_level = linkstat.data.bss_signal;  	for (line = 1; line <= WH_LEVEL; line++) @@ -173,7 +175,7 @@ static void display_levels(void)  static void display_stats(void)  { -	char tmp[0x100]; +	char tmp[0x120];  	/*  	 * Interface RX stats @@ -181,7 +183,7 @@ static void display_stats(void)  	mvwaddstr(w_stats, 1, 1, "RX: ");  	if (linkstat.data.rx_packets) { -		sprintf(tmp, "%'u (%s)",  linkstat.data.rx_packets, +		sprintf(tmp, "%s (%s)", int_counts(linkstat.data.rx_packets),  			byte_units(linkstat.data.rx_bytes));  		waddstr_b(w_stats, tmp);  	} else { @@ -218,7 +220,7 @@ static void display_stats(void)  	mvwaddstr(w_stats, 2, 1, "TX: ");  	if (linkstat.data.tx_packets) { -		sprintf(tmp, "%'u (%s)",  linkstat.data.tx_packets, +		sprintf(tmp, "%s (%s)", int_counts(linkstat.data.tx_packets),  			byte_units(linkstat.data.tx_bytes));  		waddstr_b(w_stats, tmp);  	} else { @@ -232,15 +234,14 @@ static void display_stats(void)  	if (linkstat.data.tx_retries) {  		waddstr(w_stats, ", retries: "); -		sprintf(tmp, "%'u (%.1f%%)", linkstat.data.tx_retries, +		sprintf(tmp, "%s (%.1f%%)", int_counts(linkstat.data.tx_retries),  			(1e2 * linkstat.data.tx_retries)/linkstat.data.tx_packets);  		waddstr_b(w_stats, tmp);  	}  	if (linkstat.data.tx_failed) {  		waddstr(w_stats, ", failed: "); -		sprintf(tmp, "%'u", linkstat.data.tx_failed); -		waddstr_b(w_stats, tmp); +		waddstr_b(w_stats, int_counts(linkstat.data.tx_failed));  	}  	wclrtoborder(w_stats);  	wrefresh(w_stats); @@ -421,8 +422,7 @@ static void display_info(WINDOW *w_if, WINDOW *w_info)  		if (linkstat.data.beacon_loss) {  			waddstr(w_info, ", lost: "); -			sprintf(tmp, "%'u", linkstat.data.beacon_loss); -			waddstr_b(w_info, tmp); +			waddstr_b(w_info, int_counts(linkstat.data.beacon_loss));  		}  		waddstr(w_info, ", avg sig: ");  		sprintf(tmp, "%d dBm", (int8_t)linkstat.data.beacon_avg_sig); @@ -51,8 +51,9 @@ bool if_is_up(const char *ifname)  	return ret;  } -/** Bring @ifname up if not already up. Return 0 if ok, < 0 on error. */ -int if_set_up(const char *ifname) + +/** Change the up/down state of @ifname according to @up. */ +static int if_set_up_or_down(const char *ifname, bool up)  {  	struct ifreq ifr;  	int ret, skfd = socket(AF_INET, SOCK_DGRAM, 0); @@ -64,15 +65,38 @@ int if_set_up(const char *ifname)  	strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1);  	ifr.ifr_flags = if_get_flags(skfd, ifname); -	if (ifr.ifr_flags & IFF_UP) -		return 0; - -	ifr.ifr_flags |= IFF_UP; +	if (up) { +		ifr.ifr_flags |= IFF_UP; +	} else { +		ifr.ifr_flags &= ~IFF_UP; +	}  	ret = ioctl(skfd, SIOCSIFFLAGS, &ifr);  	close(skfd);  	return ret;  } +/** Bring @ifname up. */ +int if_set_up(const char *ifname) +{ +	return if_set_up_or_down(ifname, true); +} + +/** Set @ifname down. */ +int if_set_down(const char *ifname) +{ +	return if_set_up_or_down(ifname, false); +} + +/** Exit handler to restore interface 'down' state on exit via atexit(3). */ +void if_set_down_on_exit(void) +{ +	const char *ifname = conf_ifname(); + +	if (ifname && if_set_down(ifname) < 0) { +		err_msg("unable to restore %s interface state - set down manually", ifname); +	} +} +  /* Interface information */  void if_getinf(const char *ifname, struct if_info *info)  { @@ -87,7 +111,7 @@ void if_getinf(const char *ifname, struct if_info *info)  	info->flags = if_get_flags(skfd, ifname); -	strncpy(ifr.ifr_name, ifname, IFNAMSIZ); +	strncpy(ifr.ifr_name, ifname, IFNAMSIZ-1);  	if (ioctl(skfd, SIOCGIFMTU, &ifr) == 0)  		info->mtu = ifr.ifr_mtu; @@ -163,7 +187,7 @@ void dyn_info_get(struct iw_dyn_info *info, const char *ifname)  		err_sys("%s: can not open socket", __func__);  	memset(info, 0, sizeof(*info)); -	strncpy(iwr.ifr_name, ifname, IFNAMSIZ); +	strncpy(iwr.ifr_name, ifname, IFNAMSIZ-1);  	if (ioctl(skfd, SIOCGIWNAME, &iwr) < 0)  		err_sys("can not open device '%s'", ifname); @@ -250,7 +274,7 @@ void iw_getinf_range(const char *ifname, struct iw_range *range)  		err_sys("%s: can not open socket", __func__);  	memset(range, 0, sizeof(struct iw_range)); -	strncpy(iwr.ifr_name, ifname, IFNAMSIZ); +	strncpy(iwr.ifr_name, ifname, IFNAMSIZ-1);  	iwr.u.data.pointer = (caddr_t) range;  	iwr.u.data.length  = sizeof(struct iw_range); @@ -76,6 +76,7 @@ struct if_info {  };  extern bool if_is_up(const char *ifname);  extern int  if_set_up(const char *ifname); +extern void if_set_down_on_exit(void);  extern void if_getinf(const char *ifname, struct if_info *info);  /** @@ -143,7 +143,7 @@ static bool wait_for_scan_events(void)  int scan_dump_handler(struct nl_msg *msg, void *arg)  {  	struct scan_result *sr = (struct scan_result *)arg; -	struct scan_entry *new = calloc(1, sizeof(*new)); +	struct scan_entry *new;  	struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));  	struct nlattr *tb[NL80211_ATTR_MAX + 1];  	struct nlattr *bss[NL80211_BSS_MAX + 1]; @@ -209,9 +209,10 @@ int scan_dump_handler(struct nl_msg *msg, void *arg)  	if (bss[NL80211_BSS_INFORMATION_ELEMENTS]) {  		uint8_t *ie = nla_data(bss[NL80211_BSS_INFORMATION_ELEMENTS]);  		int ielen   = nla_len(bss[NL80211_BSS_INFORMATION_ELEMENTS]); -		uint8_t len = ie[1]; - 		while (ielen >= 2 && ielen >= ie[1]) { +		while (ielen >= 2 && ielen >= ie[1]) { +			uint8_t len = ie[1]; +  			switch (ie[0]) {  			case 0:	/* SSID */  				if (len > 0 && len <= 32) @@ -227,7 +228,7 @@ int scan_dump_handler(struct nl_msg *msg, void *arg)  			}  			ielen -= ie[1] + 2;  			ie    += ie[1] + 2; -        	} +		}  	}  	/* Update stats */ @@ -429,6 +430,8 @@ void *do_scan(void *sr_ptr)  				if (if_set_up(conf_ifname()) < 0)  					err_sys("Can not bring up interface '%s'", conf_ifname()); +				if (atexit(if_set_down_on_exit) < 0) +					snprintf(sr->msg, sizeof(sr->msg), "Warning: unable to restore %s down state on exit", conf_ifname());  				break;  			}  			/* fall through */ diff --git a/lhist_scr.c b/lhist_scr.c index 55d5d6b..abb07ef 100644 --- a/lhist_scr.c +++ b/lhist_scr.c @@ -122,7 +122,16 @@ void iw_cache_update(struct iw_nl80211_linkstat *ls)  {  	static struct iw_levelstat prev, avg = IW_LSTAT_INIT;  	static int slot; -	int sig_level = ls->signal_avg ?: ls->signal; +	int sig_level = ls->signal; + +	/* +	 * Prefer signal level over average signal level. +	 * One card in particular (Intel 9260NGW) reported inconsistent +	 * station and beacon average signals. +	 * See https://github.com/uoaerg/wavemon/issues/47 +	 */ +	if (sig_level == 0) +		sig_level = ls->signal_avg;  	/*  	 * If hardware does not support dBm signal level, it will not @@ -10,6 +10,7 @@   * Copyright 2008, 2009 Luis R. Rodriguez <lrodriguez@atheros.com>   * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>   * Copyright 2008 Colin McCabe <colin@cozybit.com> + * Copyright 2015-2017	Intel Deutschland GmbH   *   * Permission to use, copy, modify, and/or distribute this software for any   * purpose with or without fee is hereby granted, provided that the above @@ -47,6 +48,7 @@  #define NL80211_MULTICAST_GROUP_REG		"regulatory"  #define NL80211_MULTICAST_GROUP_MLME		"mlme"  #define NL80211_MULTICAST_GROUP_VENDOR		"vendor" +#define NL80211_MULTICAST_GROUP_NAN		"nan"  #define NL80211_MULTICAST_GROUP_TESTMODE	"testmode"  /** @@ -171,6 +173,65 @@   */  /** + * DOC: WPA/WPA2 EAPOL handshake offload + * + * By setting @NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK flag drivers + * can indicate they support offloading EAPOL handshakes for WPA/WPA2 + * preshared key authentication. In %NL80211_CMD_CONNECT the preshared + * key should be specified using %NL80211_ATTR_PMK. Drivers supporting + * this offload may reject the %NL80211_CMD_CONNECT when no preshared + * key material is provided, for example when that driver does not + * support setting the temporal keys through %CMD_NEW_KEY. + * + * Similarly @NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X flag can be + * set by drivers indicating offload support of the PTK/GTK EAPOL + * handshakes during 802.1X authentication. In order to use the offload + * the %NL80211_CMD_CONNECT should have %NL80211_ATTR_WANT_1X_4WAY_HS + * attribute flag. Drivers supporting this offload may reject the + * %NL80211_CMD_CONNECT when the attribute flag is not present. + * + * For 802.1X the PMK or PMK-R0 are set by providing %NL80211_ATTR_PMK + * using %NL80211_CMD_SET_PMK. For offloaded FT support also + * %NL80211_ATTR_PMKR0_NAME must be provided. + */ + +/** + * DOC: FILS shared key authentication offload + * + * FILS shared key authentication offload can be advertized by drivers by + * setting @NL80211_EXT_FEATURE_FILS_SK_OFFLOAD flag. The drivers that support + * FILS shared key authentication offload should be able to construct the + * authentication and association frames for FILS shared key authentication and + * eventually do a key derivation as per IEEE 802.11ai. The below additional + * parameters should be given to driver in %NL80211_CMD_CONNECT. + *	%NL80211_ATTR_FILS_ERP_USERNAME - used to construct keyname_nai + *	%NL80211_ATTR_FILS_ERP_REALM - used to construct keyname_nai + *	%NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM - used to construct erp message + *	%NL80211_ATTR_FILS_ERP_RRK - used to generate the rIK and rMSK + * rIK should be used to generate an authentication tag on the ERP message and + * rMSK should be used to derive a PMKSA. + * rIK, rMSK should be generated and keyname_nai, sequence number should be used + * as specified in IETF RFC 6696. + * + * When FILS shared key authentication is completed, driver needs to provide the + * below additional parameters to userspace. + *	%NL80211_ATTR_FILS_KEK - used for key renewal + *	%NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM - used in further EAP-RP exchanges + *	%NL80211_ATTR_PMKID - used to identify the PMKSA used/generated + *	%Nl80211_ATTR_PMK - used to update PMKSA cache in userspace + * The PMKSA can be maintained in userspace persistently so that it can be used + * later after reboots or wifi turn off/on also. + * + * %NL80211_ATTR_FILS_CACHE_ID is the cache identifier advertized by a FILS + * capable AP supporting PMK caching. It specifies the scope within which the + * PMKSAs are cached in an ESS. %NL80211_CMD_SET_PMKSA and + * %NL80211_CMD_DEL_PMKSA are enhanced to allow support for PMKSA caching based + * on FILS cache identifier. Additionally %NL80211_ATTR_PMK is used with + * %NL80211_SET_PMKSA to specify the PMK corresponding to a PMKSA for driver to + * use in a FILS shared key connection with PMKSA caching. + */ + +/**   * enum nl80211_commands - supported nl80211 commands   *   * @NL80211_CMD_UNSPEC: unspecified command to catch errors @@ -321,14 +382,24 @@   * @NL80211_CMD_GET_SCAN: get scan results   * @NL80211_CMD_TRIGGER_SCAN: trigger a new scan with the given parameters   *	%NL80211_ATTR_TX_NO_CCK_RATE is used to decide whether to send the - *	probe requests at CCK rate or not. + *	probe requests at CCK rate or not. %NL80211_ATTR_BSSID can be used to + *	specify a BSSID to scan for; if not included, the wildcard BSSID will + *	be used.   * @NL80211_CMD_NEW_SCAN_RESULTS: scan notification (as a reply to   *	NL80211_CMD_GET_SCAN and on the "scan" multicast group)   * @NL80211_CMD_SCAN_ABORTED: scan was aborted, for unspecified reasons,   *	partial scan results may be available   *   * @NL80211_CMD_START_SCHED_SCAN: start a scheduled scan at certain - *	intervals, as specified by %NL80211_ATTR_SCHED_SCAN_INTERVAL. + *	intervals and certain number of cycles, as specified by + *	%NL80211_ATTR_SCHED_SCAN_PLANS. If %NL80211_ATTR_SCHED_SCAN_PLANS is + *	not specified and only %NL80211_ATTR_SCHED_SCAN_INTERVAL is specified, + *	scheduled scan will run in an infinite loop with the specified interval. + *	These attributes are mutually exculsive, + *	i.e. NL80211_ATTR_SCHED_SCAN_INTERVAL must not be passed if + *	NL80211_ATTR_SCHED_SCAN_PLANS is defined. + *	If for some reason scheduled scan is aborted by the driver, all scan + *	plans are canceled (including scan plans that did not start yet).   *	Like with normal scans, if SSIDs (%NL80211_ATTR_SCAN_SSIDS)   *	are passed, they are used in the probe requests.  For   *	broadcast, a broadcast SSID must be passed (ie. an empty @@ -339,7 +410,9 @@   *	are used.  Extra IEs can also be passed from the userspace by   *	using the %NL80211_ATTR_IE attribute.  The first cycle of the   *	scheduled scan can be delayed by %NL80211_ATTR_SCHED_SCAN_DELAY - *	is supplied. + *	is supplied. If the device supports multiple concurrent scheduled + *	scans, it will allow such when the caller provides the flag attribute + *	%NL80211_ATTR_SCHED_SCAN_MULTI to indicate user-space support for it.   * @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan. Returns -ENOENT if   *	scheduled scan is not running. The caller may assume that as soon   *	as the call returns, it is safe to start a new scheduled scan again. @@ -358,10 +431,18 @@   * @NL80211_CMD_NEW_SURVEY_RESULTS: survey data notification (as a reply to   *	NL80211_CMD_GET_SURVEY and on the "scan" multicast group)   * - * @NL80211_CMD_SET_PMKSA: Add a PMKSA cache entry, using %NL80211_ATTR_MAC - *	(for the BSSID) and %NL80211_ATTR_PMKID. + * @NL80211_CMD_SET_PMKSA: Add a PMKSA cache entry using %NL80211_ATTR_MAC + *	(for the BSSID), %NL80211_ATTR_PMKID, and optionally %NL80211_ATTR_PMK + *	(PMK is used for PTKSA derivation in case of FILS shared key offload) or + *	using %NL80211_ATTR_SSID, %NL80211_ATTR_FILS_CACHE_ID, + *	%NL80211_ATTR_PMKID, and %NL80211_ATTR_PMK in case of FILS + *	authentication where %NL80211_ATTR_FILS_CACHE_ID is the identifier + *	advertized by a FILS capable AP identifying the scope of PMKSA in an + *	ESS.   * @NL80211_CMD_DEL_PMKSA: Delete a PMKSA cache entry, using %NL80211_ATTR_MAC - *	(for the BSSID) and %NL80211_ATTR_PMKID. + *	(for the BSSID) and %NL80211_ATTR_PMKID or using %NL80211_ATTR_SSID, + *	%NL80211_ATTR_FILS_CACHE_ID, and %NL80211_ATTR_PMKID in case of FILS + *	authentication.   * @NL80211_CMD_FLUSH_PMKSA: Flush all PMKSA cache entries.   *   * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain @@ -418,7 +499,11 @@   * @NL80211_CMD_ASSOCIATE: association request and notification; like   *	NL80211_CMD_AUTHENTICATE but for Association and Reassociation   *	(similar to MLME-ASSOCIATE.request, MLME-REASSOCIATE.request, - *	MLME-ASSOCIATE.confirm or MLME-REASSOCIATE.confirm primitives). + *	MLME-ASSOCIATE.confirm or MLME-REASSOCIATE.confirm primitives). The + *	%NL80211_ATTR_PREV_BSSID attribute is used to specify whether the + *	request is for the initial association to an ESS (that attribute not + *	included) or for reassociation within the ESS (that attribute is + *	included).   * @NL80211_CMD_DEAUTHENTICATE: deauthentication request and notification; like   *	NL80211_CMD_AUTHENTICATE but for Deauthentication frames (similar to   *	MLME-DEAUTHENTICATION.request and MLME-DEAUTHENTICATE.indication @@ -457,7 +542,8 @@   *	IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_USE_MFP,   *	%NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT,   *	%NL80211_ATTR_CONTROL_PORT_ETHERTYPE, - *	%NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, %NL80211_ATTR_MAC_HINT, and + *	%NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, + *	%NL80211_ATTR_CONTROL_PORT_OVER_NL80211, %NL80211_ATTR_MAC_HINT, and   *	%NL80211_ATTR_WIPHY_FREQ_HINT.   *	If included, %NL80211_ATTR_MAC and %NL80211_ATTR_WIPHY_FREQ are   *	restrictions on BSS selection, i.e., they effectively prevent roaming @@ -468,6 +554,9 @@   *	set of BSSID,frequency parameters is used (i.e., either the enforcing   *	%NL80211_ATTR_MAC,%NL80211_ATTR_WIPHY_FREQ or the less strict   *	%NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT). + *	%NL80211_ATTR_PREV_BSSID can be used to request a reassociation within + *	the ESS in case the device is already associated and an association with + *	a different BSS is desired.   *	Background scan period can optionally be   *	specified in %NL80211_ATTR_BG_SCAN_PERIOD,   *	if not specified default background scan configuration @@ -475,9 +564,20 @@   *	This attribute is ignored if driver does not support roam scan.   *	It is also sent as an event, with the BSSID and response IEs when the   *	connection is established or failed to be established. This can be - *	determined by the STATUS_CODE attribute. - * @NL80211_CMD_ROAM: request that the card roam (currently not implemented), - *	sent as an event when the card/driver roamed by itself. + *	determined by the %NL80211_ATTR_STATUS_CODE attribute (0 = success, + *	non-zero = failure). If %NL80211_ATTR_TIMED_OUT is included in the + *	event, the connection attempt failed due to not being able to initiate + *	authentication/association or not receiving a response from the AP. + *	Non-zero %NL80211_ATTR_STATUS_CODE value is indicated in that case as + *	well to remain backwards compatible. + *	When establishing a security association, drivers that support 4 way + *	handshake offload should send %NL80211_CMD_PORT_AUTHORIZED event when + *	the 4 way handshake is completed successfully. + * @NL80211_CMD_ROAM: Notification indicating the card/driver roamed by itself. + *	When a security association was established with the new AP (e.g. if + *	the FT protocol was used for roaming or the driver completed the 4 way + *	handshake), this event should be followed by an + *	%NL80211_CMD_PORT_AUTHORIZED event.   * @NL80211_CMD_DISCONNECT: drop a given connection; also used to notify   *	userspace that a connection was dropped by the AP or due to other   *	reasons, for this the %NL80211_ATTR_DISCONNECTED_BY_AP and @@ -576,6 +676,20 @@   *   * @NL80211_CMD_SET_WDS_PEER: Set the MAC address of the peer on a WDS interface.   * + * @NL80211_CMD_SET_MULTICAST_TO_UNICAST: Configure if this AP should perform + *	multicast to unicast conversion. When enabled, all multicast packets + *	with ethertype ARP, IPv4 or IPv6 (possibly within an 802.1Q header) + *	will be sent out to each station once with the destination (multicast) + *	MAC address replaced by the station's MAC address. Note that this may + *	break certain expectations of the receiver, e.g. the ability to drop + *	unicast IP packets encapsulated in multicast L2 frames, or the ability + *	to not send destination unreachable messages in such cases. + *	This can only be toggled per BSS. Configure this on an interface of + *	type %NL80211_IFTYPE_AP. It applies to all its VLAN interfaces + *	(%NL80211_IFTYPE_AP_VLAN), except for those in 4addr (WDS) mode. + *	If %NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED is not present with this + *	command, the feature is disabled. + *   * @NL80211_CMD_JOIN_MESH: Join a mesh. The mesh ID must be given, and initial   *	mesh config parameters may be given.   * @NL80211_CMD_LEAVE_MESH: Leave the mesh network -- no special arguments, the @@ -811,6 +925,111 @@   *	as an event to indicate changes for devices with wiphy-specific regdom   *	management.   * + * @NL80211_CMD_ABORT_SCAN: Stop an ongoing scan. Returns -ENOENT if a scan is + *	not running. The driver indicates the status of the scan through + *	cfg80211_scan_done(). + * + * @NL80211_CMD_START_NAN: Start NAN operation, identified by its + *	%NL80211_ATTR_WDEV interface. This interface must have been + *	previously created with %NL80211_CMD_NEW_INTERFACE. After it + *	has been started, the NAN interface will create or join a + *	cluster. This command must have a valid + *	%NL80211_ATTR_NAN_MASTER_PREF attribute and optional + *	%NL80211_ATTR_BANDS attributes.  If %NL80211_ATTR_BANDS is + *	omitted or set to 0, it means don't-care and the device will + *	decide what to use.  After this command NAN functions can be + *	added. + * @NL80211_CMD_STOP_NAN: Stop the NAN operation, identified by + *	its %NL80211_ATTR_WDEV interface. + * @NL80211_CMD_ADD_NAN_FUNCTION: Add a NAN function. The function is defined + *	with %NL80211_ATTR_NAN_FUNC nested attribute. When called, this + *	operation returns the strictly positive and unique instance id + *	(%NL80211_ATTR_NAN_FUNC_INST_ID) and a cookie (%NL80211_ATTR_COOKIE) + *	of the function upon success. + *	Since instance ID's can be re-used, this cookie is the right + *	way to identify the function. This will avoid races when a termination + *	event is handled by the user space after it has already added a new + *	function that got the same instance id from the kernel as the one + *	which just terminated. + *	This cookie may be used in NAN events even before the command + *	returns, so userspace shouldn't process NAN events until it processes + *	the response to this command. + *	Look at %NL80211_ATTR_SOCKET_OWNER as well. + * @NL80211_CMD_DEL_NAN_FUNCTION: Delete a NAN function by cookie. + *	This command is also used as a notification sent when a NAN function is + *	terminated. This will contain a %NL80211_ATTR_NAN_FUNC_INST_ID + *	and %NL80211_ATTR_COOKIE attributes. + * @NL80211_CMD_CHANGE_NAN_CONFIG: Change current NAN + *	configuration. NAN must be operational (%NL80211_CMD_START_NAN + *	was executed).  It must contain at least one of the following + *	attributes: %NL80211_ATTR_NAN_MASTER_PREF, + *	%NL80211_ATTR_BANDS.  If %NL80211_ATTR_BANDS is omitted, the + *	current configuration is not changed.  If it is present but + *	set to zero, the configuration is changed to don't-care + *	(i.e. the device can decide what to do). + * @NL80211_CMD_NAN_FUNC_MATCH: Notification sent when a match is reported. + *	This will contain a %NL80211_ATTR_NAN_MATCH nested attribute and + *	%NL80211_ATTR_COOKIE. + * + * @NL80211_CMD_UPDATE_CONNECT_PARAMS: Update one or more connect parameters + *	for subsequent roaming cases if the driver or firmware uses internal + *	BSS selection. This command can be issued only while connected and it + *	does not result in a change for the current association. Currently, + *	only the %NL80211_ATTR_IE data is used and updated with this command. + * + * @NL80211_CMD_SET_PMK: For offloaded 4-Way handshake, set the PMK or PMK-R0 + *	for the given authenticator address (specified with &NL80211_ATTR_MAC). + *	When &NL80211_ATTR_PMKR0_NAME is set, &NL80211_ATTR_PMK specifies the + *	PMK-R0, otherwise it specifies the PMK. + * @NL80211_CMD_DEL_PMK: For offloaded 4-Way handshake, delete the previously + *	configured PMK for the authenticator address identified by + *	&NL80211_ATTR_MAC. + * @NL80211_CMD_PORT_AUTHORIZED: An event that indicates that the 4 way + *	handshake was completed successfully by the driver. The BSSID is + *	specified with &NL80211_ATTR_MAC. Drivers that support 4 way handshake + *	offload should send this event after indicating 802.11 association with + *	&NL80211_CMD_CONNECT or &NL80211_CMD_ROAM. If the 4 way handshake failed + *	&NL80211_CMD_DISCONNECT should be indicated instead. + * + * @NL80211_CMD_CONTROL_PORT_FRAME: Control Port (e.g. PAE) frame TX request + *	and RX notification.  This command is used both as a request to transmit + *	a control port frame and as a notification that a control port frame + *	has been received. %NL80211_ATTR_FRAME is used to specify the + *	frame contents.  The frame is the raw EAPoL data, without ethernet or + *	802.11 headers. + *	When used as an event indication %NL80211_ATTR_CONTROL_PORT_ETHERTYPE, + *	%NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT and %NL80211_ATTR_MAC are added + *	indicating the protocol type of the received frame; whether the frame + *	was received unencrypted and the MAC address of the peer respectively. + * + * @NL80211_CMD_RELOAD_REGDB: Request that the regdb firmware file is reloaded. + * + * @NL80211_CMD_EXTERNAL_AUTH: This interface is exclusively defined for host + *	drivers that do not define separate commands for authentication and + *	association, but rely on user space for the authentication to happen. + *	This interface acts both as the event request (driver to user space) + *	to trigger the authentication and command response (userspace to + *	driver) to indicate the authentication status. + * + *	User space uses the %NL80211_CMD_CONNECT command to the host driver to + *	trigger a connection. The host driver selects a BSS and further uses + *	this interface to offload only the authentication part to the user + *	space. Authentication frames are passed between the driver and user + *	space through the %NL80211_CMD_FRAME interface. Host driver proceeds + *	further with the association after getting successful authentication + *	status. User space indicates the authentication status through + *	%NL80211_ATTR_STATUS_CODE attribute in %NL80211_CMD_EXTERNAL_AUTH + *	command interface. + * + *	Host driver reports this status on an authentication failure to the + *	user space through the connect result as the user space would have + *	initiated the connection through the connect request. + * + * @NL80211_CMD_STA_OPMODE_CHANGED: An event that notify station's + *	ht opmode or vht opmode changes using any of &NL80211_ATTR_SMPS_MODE, + *	&NL80211_ATTR_CHANNEL_WIDTH,&NL80211_ATTR_NSS attributes with its + *	address(specified in &NL80211_ATTR_MAC). + *   * @NL80211_CMD_MAX: highest used command number   * @__NL80211_CMD_AFTER_LAST: internal use   */ @@ -997,6 +1216,32 @@ enum nl80211_commands {  	NL80211_CMD_WIPHY_REG_CHANGE, +	NL80211_CMD_ABORT_SCAN, + +	NL80211_CMD_START_NAN, +	NL80211_CMD_STOP_NAN, +	NL80211_CMD_ADD_NAN_FUNCTION, +	NL80211_CMD_DEL_NAN_FUNCTION, +	NL80211_CMD_CHANGE_NAN_CONFIG, +	NL80211_CMD_NAN_MATCH, + +	NL80211_CMD_SET_MULTICAST_TO_UNICAST, + +	NL80211_CMD_UPDATE_CONNECT_PARAMS, + +	NL80211_CMD_SET_PMK, +	NL80211_CMD_DEL_PMK, + +	NL80211_CMD_PORT_AUTHORIZED, + +	NL80211_CMD_RELOAD_REGDB, + +	NL80211_CMD_EXTERNAL_AUTH, + +	NL80211_CMD_STA_OPMODE_CHANGED, + +	NL80211_CMD_CONTROL_PORT_FRAME, +  	/* add new commands above here */  	/* used to define NL80211_CMD_MAX below */ @@ -1219,8 +1464,12 @@ enum nl80211_commands {   *   * @NL80211_ATTR_USE_MFP: Whether management frame protection (IEEE 802.11w) is   *	used for the association (&enum nl80211_mfp, represented as a u32); - *	this attribute can be used - *	with %NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests + *	this attribute can be used with %NL80211_CMD_ASSOCIATE and + *	%NL80211_CMD_CONNECT requests. %NL80211_MFP_OPTIONAL is not allowed for + *	%NL80211_CMD_ASSOCIATE since user space SME is expected and hence, it + *	must have decided whether to use management frame protection or not. + *	Setting %NL80211_MFP_OPTIONAL with a %NL80211_CMD_CONNECT request will + *	let the driver (or the firmware) decide whether to use MFP or not.   *   * @NL80211_ATTR_STA_FLAGS2: Attribute containing a   *	&struct nl80211_sta_flag_update. @@ -1240,6 +1489,15 @@ enum nl80211_commands {   * @NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT: When included along with   *	%NL80211_ATTR_CONTROL_PORT_ETHERTYPE, indicates that the custom   *	ethertype frames used for key negotiation must not be encrypted. + * @NL80211_ATTR_CONTROL_PORT_OVER_NL80211: A flag indicating whether control + *	port frames (e.g. of type given in %NL80211_ATTR_CONTROL_PORT_ETHERTYPE) + *	will be sent directly to the network interface or sent via the NL80211 + *	socket.  If this attribute is missing, then legacy behavior of sending + *	control port frames directly to the network interface is used.  If the + *	flag is included, then control port frames are sent over NL80211 instead + *	using %CMD_CONTROL_PORT_FRAME.  If control port routing over NL80211 is + *	to be used then userspace must also use the %NL80211_ATTR_SOCKET_OWNER + *	flag.   *   * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver.   *	We recommend using nested, driver-specific attributes within this. @@ -1270,8 +1528,11 @@ enum nl80211_commands {   * @NL80211_ATTR_RESP_IE: (Re)association response information elements as   *	sent by peer, for ROAM and successful CONNECT events.   * - * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used by in ASSOCIATE - *	commands to specify using a reassociate frame + * @NL80211_ATTR_PREV_BSSID: previous BSSID, to be used in ASSOCIATE and CONNECT + *	commands to specify a request to reassociate within an ESS, i.e., to use + *	Reassociate Request frame (with the value of this attribute in the + *	Current AP address field) instead of Association Request frame which is + *	used for the initial association to an ESS.   *   * @NL80211_ATTR_KEY: key information in a nested attribute with   *	%NL80211_KEY_* sub-attributes @@ -1311,7 +1572,13 @@ enum nl80211_commands {   *	enum nl80211_band value is used as the index (nla_type() of the nested   *	data. If a band is not included, it will be configured to allow all   *	rates based on negotiated supported rates information. This attribute - *	is used with %NL80211_CMD_SET_TX_BITRATE_MASK. + *	is used with %NL80211_CMD_SET_TX_BITRATE_MASK and with starting AP, + *	and joining mesh networks (not IBSS yet). In the later case, it must + *	specify just a single bitrate, which is to be used for the beacon. + *	The driver must also specify support for this with the extended + *	features NL80211_EXT_FEATURE_BEACON_RATE_LEGACY, + *	NL80211_EXT_FEATURE_BEACON_RATE_HT and + *	NL80211_EXT_FEATURE_BEACON_RATE_VHT.   *   * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain   *	at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME. @@ -1557,8 +1824,16 @@ enum nl80211_commands {   *	the connection request from a station. nl80211_connect_failed_reason   *	enum has different reasons of connection failure.   * - * @NL80211_ATTR_SAE_DATA: SAE elements in Authentication frames. This starts - *	with the Authentication transaction sequence number field. + * @NL80211_ATTR_AUTH_DATA: Fields and elements in Authentication frames. + *	This contains the authentication frame body (non-IE and IE data), + *	excluding the Authentication algorithm number, i.e., starting at the + *	Authentication transaction sequence number field. It is used with + *	authentication algorithms that need special fields to be added into + *	the frames (SAE and FILS). Currently, only the SAE cases use the + *	initial two fields (Authentication transaction sequence number and + *	Status code). However, those fields are included in the attribute data + *	for all authentication algorithms to keep the attribute definition + *	consistent.   *   * @NL80211_ATTR_VHT_CAPABILITY: VHT Capability information element (from   *	association request when used with NL80211_CMD_NEW_STATION) @@ -1659,7 +1934,9 @@ enum nl80211_commands {   *   * @NL80211_ATTR_OPMODE_NOTIF: Operating mode field from Operating Mode   *	Notification Element based on association request when used with - *	%NL80211_CMD_NEW_STATION; u8 attribute. + *	%NL80211_CMD_NEW_STATION or %NL80211_CMD_SET_STATION (only when + *	%NL80211_FEATURE_FULL_AP_CLIENT_STATE is supported, or with TDLS); + *	u8 attribute.   *   * @NL80211_ATTR_VENDOR_ID: The vendor ID, either a 24-bit OUI or, if   *	%NL80211_VENDOR_ID_IS_LINUX is set, a special Linux ID (not used yet) @@ -1701,6 +1978,19 @@ enum nl80211_commands {   *	regulatory indoor configuration would be owned by the netlink socket   *	that configured the indoor setting, and the indoor operation would be   *	cleared when the socket is closed. + *	If set during NAN interface creation, the interface will be destroyed + *	if the socket is closed just like any other interface. Moreover, NAN + *	notifications will be sent in unicast to that socket. Without this + *	attribute, the notifications will be sent to the %NL80211_MCGRP_NAN + *	multicast group. + *	If set during %NL80211_CMD_ASSOCIATE or %NL80211_CMD_CONNECT the + *	station will deauthenticate when the socket is closed. + *	If set during %NL80211_CMD_JOIN_IBSS the IBSS will be automatically + *	torn down when the socket is closed. + *	If set during %NL80211_CMD_JOIN_MESH the mesh setup will be + *	automatically torn down when the socket is closed. + *	If set during %NL80211_CMD_START_AP the AP will be automatically + *	disabled when the socket is closed.   *   * @NL80211_ATTR_TDLS_INITIATOR: flag attribute indicating the current end is   *	the TDLS link initiator. @@ -1712,6 +2002,8 @@ enum nl80211_commands {   *	underlying device supports these minimal RRM features:   *		%NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES,   *		%NL80211_FEATURE_QUIET, + *	Or, if global RRM is supported, see: + *		%NL80211_EXT_FEATURE_RRM   *	If this flag is used, driver must add the Power Capabilities IE to the   *	association request. In addition, it must also set the RRM capability   *	flag in the association request's Capability Info field. @@ -1755,12 +2047,184 @@ enum nl80211_commands {   *	over all channels.   *   * @NL80211_ATTR_SCHED_SCAN_DELAY: delay before the first cycle of a - *	scheduled scan (or a WoWLAN net-detect scan) is started, u32 - *	in seconds. + *	scheduled scan is started.  Or the delay before a WoWLAN + *	net-detect scan is started, counting from the moment the + *	system is suspended.  This value is a u32, in seconds.   * @NL80211_ATTR_REG_INDOOR: flag attribute, if set indicates that the device   *      is operating in an indoor environment.   * + * @NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS: maximum number of scan plans for + *	scheduled scan supported by the device (u32), a wiphy attribute. + * @NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL: maximum interval (in seconds) for + *	a scan plan (u32), a wiphy attribute. + * @NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS: maximum number of iterations in + *	a scan plan (u32), a wiphy attribute. + * @NL80211_ATTR_SCHED_SCAN_PLANS: a list of scan plans for scheduled scan. + *	Each scan plan defines the number of scan iterations and the interval + *	between scans. The last scan plan will always run infinitely, + *	thus it must not specify the number of iterations, only the interval + *	between scans. The scan plans are executed sequentially. + *	Each scan plan is a nested attribute of &enum nl80211_sched_scan_plan. + * @NL80211_ATTR_PBSS: flag attribute. If set it means operate + *	in a PBSS. Specified in %NL80211_CMD_CONNECT to request + *	connecting to a PCP, and in %NL80211_CMD_START_AP to start + *	a PCP instead of AP. Relevant for DMG networks only. + * @NL80211_ATTR_BSS_SELECT: nested attribute for driver supporting the + *	BSS selection feature. When used with %NL80211_CMD_GET_WIPHY it contains + *	attributes according &enum nl80211_bss_select_attr to indicate what + *	BSS selection behaviours are supported. When used with %NL80211_CMD_CONNECT + *	it contains the behaviour-specific attribute containing the parameters for + *	BSS selection to be done by driver and/or firmware. + * + * @NL80211_ATTR_STA_SUPPORT_P2P_PS: whether P2P PS mechanism supported + *	or not. u8, one of the values of &enum nl80211_sta_p2p_ps_status + * + * @NL80211_ATTR_PAD: attribute used for padding for 64-bit alignment + * + * @NL80211_ATTR_IFTYPE_EXT_CAPA: Nested attribute of the following attributes: + *	%NL80211_ATTR_IFTYPE, %NL80211_ATTR_EXT_CAPA, + *	%NL80211_ATTR_EXT_CAPA_MASK, to specify the extended capabilities per + *	interface type. + * + * @NL80211_ATTR_MU_MIMO_GROUP_DATA: array of 24 bytes that defines a MU-MIMO + *	groupID for monitor mode. + *	The first 8 bytes are a mask that defines the membership in each + *	group (there are 64 groups, group 0 and 63 are reserved), + *	each bit represents a group and set to 1 for being a member in + *	that group and 0 for not being a member. + *	The remaining 16 bytes define the position in each group: 2 bits for + *	each group. + *	(smaller group numbers represented on most significant bits and bigger + *	group numbers on least significant bits.) + *	This attribute is used only if all interfaces are in monitor mode. + *	Set this attribute in order to monitor packets using the given MU-MIMO + *	groupID data. + *	to turn off that feature set all the bits of the groupID to zero. + * @NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR: mac address for the sniffer to follow + *	when using MU-MIMO air sniffer. + *	to turn that feature off set an invalid mac address + *	(e.g. FF:FF:FF:FF:FF:FF) + * + * @NL80211_ATTR_SCAN_START_TIME_TSF: The time at which the scan was actually + *	started (u64). The time is the TSF of the BSS the interface that + *	requested the scan is connected to (if available, otherwise this + *	attribute must not be included). + * @NL80211_ATTR_SCAN_START_TIME_TSF_BSSID: The BSS according to which + *	%NL80211_ATTR_SCAN_START_TIME_TSF is set. + * @NL80211_ATTR_MEASUREMENT_DURATION: measurement duration in TUs (u16). If + *	%NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY is not set, this is the + *	maximum measurement duration allowed. This attribute is used with + *	measurement requests. It can also be used with %NL80211_CMD_TRIGGER_SCAN + *	if the scan is used for beacon report radio measurement. + * @NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY: flag attribute that indicates + *	that the duration specified with %NL80211_ATTR_MEASUREMENT_DURATION is + *	mandatory. If this flag is not set, the duration is the maximum duration + *	and the actual measurement duration may be shorter. + * + * @NL80211_ATTR_MESH_PEER_AID: Association ID for the mesh peer (u16). This is + *	used to pull the stored data for mesh peer in power save state. + * + * @NL80211_ATTR_NAN_MASTER_PREF: the master preference to be used by + *	%NL80211_CMD_START_NAN and optionally with + *	%NL80211_CMD_CHANGE_NAN_CONFIG. Its type is u8 and it can't be 0. + *	Also, values 1 and 255 are reserved for certification purposes and + *	should not be used during a normal device operation. + * @NL80211_ATTR_BANDS: operating bands configuration.  This is a u32 + *	bitmask of BIT(NL80211_BAND_*) as described in %enum + *	nl80211_band.  For instance, for NL80211_BAND_2GHZ, bit 0 + *	would be set.  This attribute is used with + *	%NL80211_CMD_START_NAN and %NL80211_CMD_CHANGE_NAN_CONFIG, and + *	it is optional.  If no bands are set, it means don't-care and + *	the device will decide what to use. + * @NL80211_ATTR_NAN_FUNC: a function that can be added to NAN. See + *	&enum nl80211_nan_func_attributes for description of this nested + *	attribute. + * @NL80211_ATTR_NAN_MATCH: used to report a match. This is a nested attribute. + *	See &enum nl80211_nan_match_attributes. + * @NL80211_ATTR_FILS_KEK: KEK for FILS (Re)Association Request/Response frame + *	protection. + * @NL80211_ATTR_FILS_NONCES: Nonces (part of AAD) for FILS (Re)Association + *	Request/Response frame protection. This attribute contains the 16 octet + *	STA Nonce followed by 16 octets of AP Nonce. + * + * @NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED: Indicates whether or not multicast + *	packets should be send out as unicast to all stations (flag attribute). + * + * @NL80211_ATTR_BSSID: The BSSID of the AP. Note that %NL80211_ATTR_MAC is also + *	used in various commands/events for specifying the BSSID. + * + * @NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI: Relative RSSI threshold by which + *	other BSSs has to be better or slightly worse than the current + *	connected BSS so that they get reported to user space. + *	This will give an opportunity to userspace to consider connecting to + *	other matching BSSs which have better or slightly worse RSSI than + *	the current connected BSS by using an offloaded operation to avoid + *	unnecessary wakeups. + * + * @NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST: When present the RSSI level for BSSs in + *	the specified band is to be adjusted before doing + *	%NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI based comparision to figure out + *	better BSSs. The attribute value is a packed structure + *	value as specified by &struct nl80211_bss_select_rssi_adjust. + * + * @NL80211_ATTR_TIMEOUT_REASON: The reason for which an operation timed out. + *	u32 attribute with an &enum nl80211_timeout_reason value. This is used, + *	e.g., with %NL80211_CMD_CONNECT event. + * + * @NL80211_ATTR_FILS_ERP_USERNAME: EAP Re-authentication Protocol (ERP) + *	username part of NAI used to refer keys rRK and rIK. This is used with + *	%NL80211_CMD_CONNECT. + * + * @NL80211_ATTR_FILS_ERP_REALM: EAP Re-authentication Protocol (ERP) realm part + *	of NAI specifying the domain name of the ER server. This is used with + *	%NL80211_CMD_CONNECT. + * + * @NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM: Unsigned 16-bit ERP next sequence number + *	to use in ERP messages. This is used in generating the FILS wrapped data + *	for FILS authentication and is used with %NL80211_CMD_CONNECT. + * + * @NL80211_ATTR_FILS_ERP_RRK: ERP re-authentication Root Key (rRK) for the + *	NAI specified by %NL80211_ATTR_FILS_ERP_USERNAME and + *	%NL80211_ATTR_FILS_ERP_REALM. This is used for generating rIK and rMSK + *	from successful FILS authentication and is used with + *	%NL80211_CMD_CONNECT. + * + * @NL80211_ATTR_FILS_CACHE_ID: A 2-octet identifier advertized by a FILS AP + *	identifying the scope of PMKSAs. This is used with + *	@NL80211_CMD_SET_PMKSA and @NL80211_CMD_DEL_PMKSA. + * + * @NL80211_ATTR_PMK: attribute for passing PMK key material. Used with + *	%NL80211_CMD_SET_PMKSA for the PMKSA identified by %NL80211_ATTR_PMKID. + *	For %NL80211_CMD_CONNECT it is used to provide PSK for offloading 4-way + *	handshake for WPA/WPA2-PSK networks. For 802.1X authentication it is + *	used with %NL80211_CMD_SET_PMK. For offloaded FT support this attribute + *	specifies the PMK-R0 if NL80211_ATTR_PMKR0_NAME is included as well. + * + * @NL80211_ATTR_SCHED_SCAN_MULTI: flag attribute which user-space shall use to + *	indicate that it supports multiple active scheduled scan requests. + * @NL80211_ATTR_SCHED_SCAN_MAX_REQS: indicates maximum number of scheduled + *	scan request that may be active for the device (u32). + * + * @NL80211_ATTR_WANT_1X_4WAY_HS: flag attribute which user-space can include + *	in %NL80211_CMD_CONNECT to indicate that for 802.1X authentication it + *	wants to use the supported offload of the 4-way handshake. + * @NL80211_ATTR_PMKR0_NAME: PMK-R0 Name for offloaded FT. + * @NL80211_ATTR_PORT_AUTHORIZED: (reserved) + * + * @NL80211_ATTR_EXTERNAL_AUTH_ACTION: Identify the requested external + *     authentication operation (u32 attribute with an + *     &enum nl80211_external_auth_action value). This is used with the + *     &NL80211_CMD_EXTERNAL_AUTH request event. + * @NL80211_ATTR_EXTERNAL_AUTH_SUPPORT: Flag attribute indicating that the user + *     space supports external authentication. This attribute shall be used + *     only with %NL80211_CMD_CONNECT request. The driver may offload + *     authentication processing to user space if this capability is indicated + *     in NL80211_CMD_CONNECT requests from the user space. + * + * @NL80211_ATTR_NSS: Station's New/updated  RX_NSS value notified using this + *	u8 attribute. This is used with %NL80211_CMD_STA_OPMODE_CHANGED. + *   * @NUM_NL80211_ATTR: total number of nl80211_attrs available   * @NL80211_ATTR_MAX: highest attribute number currently defined   * @__NL80211_ATTR_AFTER_LAST: internal use @@ -2019,7 +2483,7 @@ enum nl80211_attrs {  	NL80211_ATTR_CONN_FAILED_REASON, -	NL80211_ATTR_SAE_DATA, +	NL80211_ATTR_AUTH_DATA,  	NL80211_ATTR_VHT_CAPABILITY, @@ -2130,6 +2594,71 @@ enum nl80211_attrs {  	NL80211_ATTR_REG_INDOOR, +	NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS, +	NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL, +	NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS, +	NL80211_ATTR_SCHED_SCAN_PLANS, + +	NL80211_ATTR_PBSS, + +	NL80211_ATTR_BSS_SELECT, + +	NL80211_ATTR_STA_SUPPORT_P2P_PS, + +	NL80211_ATTR_PAD, + +	NL80211_ATTR_IFTYPE_EXT_CAPA, + +	NL80211_ATTR_MU_MIMO_GROUP_DATA, +	NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR, + +	NL80211_ATTR_SCAN_START_TIME_TSF, +	NL80211_ATTR_SCAN_START_TIME_TSF_BSSID, +	NL80211_ATTR_MEASUREMENT_DURATION, +	NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY, + +	NL80211_ATTR_MESH_PEER_AID, + +	NL80211_ATTR_NAN_MASTER_PREF, +	NL80211_ATTR_BANDS, +	NL80211_ATTR_NAN_FUNC, +	NL80211_ATTR_NAN_MATCH, + +	NL80211_ATTR_FILS_KEK, +	NL80211_ATTR_FILS_NONCES, + +	NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED, + +	NL80211_ATTR_BSSID, + +	NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI, +	NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST, + +	NL80211_ATTR_TIMEOUT_REASON, + +	NL80211_ATTR_FILS_ERP_USERNAME, +	NL80211_ATTR_FILS_ERP_REALM, +	NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM, +	NL80211_ATTR_FILS_ERP_RRK, +	NL80211_ATTR_FILS_CACHE_ID, + +	NL80211_ATTR_PMK, + +	NL80211_ATTR_SCHED_SCAN_MULTI, +	NL80211_ATTR_SCHED_SCAN_MAX_REQS, + +	NL80211_ATTR_WANT_1X_4WAY_HS, +	NL80211_ATTR_PMKR0_NAME, +	NL80211_ATTR_PORT_AUTHORIZED, + +	NL80211_ATTR_EXTERNAL_AUTH_ACTION, +	NL80211_ATTR_EXTERNAL_AUTH_SUPPORT, + +	NL80211_ATTR_NSS, +	NL80211_ATTR_ACK_SIGNAL, + +	NL80211_ATTR_CONTROL_PORT_OVER_NL80211, +  	/* add attributes here, update the policy in nl80211.c */  	__NL80211_ATTR_AFTER_LAST, @@ -2141,6 +2670,7 @@ enum nl80211_attrs {  #define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION  #define	NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG  #define NL80211_ATTR_IFACE_SOCKET_OWNER NL80211_ATTR_SOCKET_OWNER +#define NL80211_ATTR_SAE_DATA NL80211_ATTR_AUTH_DATA  /*   * Allow user space programs to use #ifdef on new attributes by defining them @@ -2208,6 +2738,7 @@ enum nl80211_attrs {   *	commands to create and destroy one   * @NL80211_IF_TYPE_OCB: Outside Context of a BSS   *	This mode corresponds to the MIB variable dot11OCBActivated=true + * @NL80211_IFTYPE_NAN: NAN device interface type (not a netdev)   * @NL80211_IFTYPE_MAX: highest interface type number currently defined   * @NUM_NL80211_IFTYPES: number of defined interface types   * @@ -2228,6 +2759,7 @@ enum nl80211_iftype {  	NL80211_IFTYPE_P2P_GO,  	NL80211_IFTYPE_P2P_DEVICE,  	NL80211_IFTYPE_OCB, +	NL80211_IFTYPE_NAN,  	/* keep last */  	NUM_NL80211_IFTYPES, @@ -2273,6 +2805,20 @@ enum nl80211_sta_flags {  	NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1  }; +/** + * enum nl80211_sta_p2p_ps_status - station support of P2P PS + * + * @NL80211_P2P_PS_UNSUPPORTED: station doesn't support P2P PS mechanism + * @@NL80211_P2P_PS_SUPPORTED: station supports P2P PS mechanism + * @NUM_NL80211_P2P_PS_STATUS: number of values + */ +enum nl80211_sta_p2p_ps_status { +	NL80211_P2P_PS_UNSUPPORTED = 0, +	NL80211_P2P_PS_SUPPORTED, + +	NUM_NL80211_P2P_PS_STATUS, +}; +  #define NL80211_STA_FLAG_MAX_OLD_API	NL80211_STA_FLAG_TDLS_PEER  /** @@ -2430,6 +2976,10 @@ enum nl80211_sta_bss_param {   *	TID+1 and the special TID 16 (i.e. value 17) is used for non-QoS frames;   *	each one of those is again nested with &enum nl80211_tid_stats   *	attributes carrying the actual values. + * @NL80211_STA_INFO_RX_DURATION: aggregate PPDU duration for all frames + *	received from the station (u64, usec) + * @NL80211_STA_INFO_PAD: attribute used for padding for 64-bit alignment + * @NL80211_STA_INFO_ACK_SIGNAL: signal strength of the last ACK frame(u8, dBm)   * @__NL80211_STA_INFO_AFTER_LAST: internal   * @NL80211_STA_INFO_MAX: highest possible station info attribute   */ @@ -2466,6 +3016,9 @@ enum nl80211_sta_info {  	NL80211_STA_INFO_BEACON_RX,  	NL80211_STA_INFO_BEACON_SIGNAL_AVG,  	NL80211_STA_INFO_TID_STATS, +	NL80211_STA_INFO_RX_DURATION, +	NL80211_STA_INFO_PAD, +	NL80211_STA_INFO_ACK_SIGNAL,  	/* keep last */  	__NL80211_STA_INFO_AFTER_LAST, @@ -2482,6 +3035,7 @@ enum nl80211_sta_info {   *	transmitted MSDUs (not counting the first attempt; u64)   * @NL80211_TID_STATS_TX_MSDU_FAILED: number of failed transmitted   *	MSDUs (u64) + * @NL80211_TID_STATS_PAD: attribute used for padding for 64-bit alignment   * @NUM_NL80211_TID_STATS: number of attributes here   * @NL80211_TID_STATS_MAX: highest numbered attribute here   */ @@ -2491,6 +3045,7 @@ enum nl80211_tid_stats {  	NL80211_TID_STATS_TX_MSDU,  	NL80211_TID_STATS_TX_MSDU_RETRIES,  	NL80211_TID_STATS_TX_MSDU_FAILED, +	NL80211_TID_STATS_PAD,  	/* keep last */  	NUM_NL80211_TID_STATS, @@ -2620,16 +3175,17 @@ enum nl80211_band_attr {   *	an indoor surroundings, i.e., it is connected to AC power (and not   *	through portable DC inverters) or is under the control of a master   *	that is acting as an AP and is connected to AC power. - * @NL80211_FREQUENCY_ATTR_GO_CONCURRENT: GO operation is allowed on this + * @NL80211_FREQUENCY_ATTR_IR_CONCURRENT: IR operation is allowed on this   *	channel if it's connected concurrently to a BSS on the same channel on   *	the 2 GHz band or to a channel in the same UNII band (on the 5 GHz - *	band), and IEEE80211_CHAN_RADAR is not set. Instantiating a GO on a - *	channel that has the GO_CONCURRENT attribute set can be done when there - *	is a clear assessment that the device is operating under the guidance of - *	an authorized master, i.e., setting up a GO while the device is also - *	connected to an AP with DFS and radar detection on the UNII band (it is - *	up to user-space, i.e., wpa_supplicant to perform the required - *	verifications) + *	band), and IEEE80211_CHAN_RADAR is not set. Instantiating a GO or TDLS + *	off-channel on a channel that has the IR_CONCURRENT attribute set can be + *	done when there is a clear assessment that the device is operating under + *	the guidance of an authorized master, i.e., setting up a GO or TDLS + *	off-channel while the device is also connected to an AP with DFS and + *	radar detection on the UNII band (it is up to user-space, i.e., + *	wpa_supplicant to perform the required verifications). Using this + *	attribute for IR is disallowed for master interfaces (IBSS, AP).   * @NL80211_FREQUENCY_ATTR_NO_20MHZ: 20 MHz operation is not allowed   *	on this channel in current regulatory domain.   * @NL80211_FREQUENCY_ATTR_NO_10MHZ: 10 MHz operation is not allowed @@ -2641,7 +3197,7 @@ enum nl80211_band_attr {   * See https://apps.fcc.gov/eas/comments/GetPublishedDocument.html?id=327&tn=528122   * for more information on the FCC description of the relaxations allowed   * by NL80211_FREQUENCY_ATTR_INDOOR_ONLY and - * NL80211_FREQUENCY_ATTR_GO_CONCURRENT. + * NL80211_FREQUENCY_ATTR_IR_CONCURRENT.   */  enum nl80211_frequency_attr {  	__NL80211_FREQUENCY_ATTR_INVALID, @@ -2659,7 +3215,7 @@ enum nl80211_frequency_attr {  	NL80211_FREQUENCY_ATTR_NO_160MHZ,  	NL80211_FREQUENCY_ATTR_DFS_CAC_TIME,  	NL80211_FREQUENCY_ATTR_INDOOR_ONLY, -	NL80211_FREQUENCY_ATTR_GO_CONCURRENT, +	NL80211_FREQUENCY_ATTR_IR_CONCURRENT,  	NL80211_FREQUENCY_ATTR_NO_20MHZ,  	NL80211_FREQUENCY_ATTR_NO_10MHZ, @@ -2672,6 +3228,8 @@ enum nl80211_frequency_attr {  #define NL80211_FREQUENCY_ATTR_PASSIVE_SCAN	NL80211_FREQUENCY_ATTR_NO_IR  #define NL80211_FREQUENCY_ATTR_NO_IBSS		NL80211_FREQUENCY_ATTR_NO_IR  #define NL80211_FREQUENCY_ATTR_NO_IR		NL80211_FREQUENCY_ATTR_NO_IR +#define NL80211_FREQUENCY_ATTR_GO_CONCURRENT \ +					NL80211_FREQUENCY_ATTR_IR_CONCURRENT  /**   * enum nl80211_bitrate_attr - bitrate attributes @@ -2787,6 +3345,7 @@ enum nl80211_reg_rule_attr {   * @__NL80211_SCHED_SCAN_MATCH_ATTR_INVALID: attribute number 0 is reserved   * @NL80211_SCHED_SCAN_MATCH_ATTR_SSID: SSID to be used for matching,   *	only report BSS with matching SSID. + *	(This cannot be used together with BSSID.)   * @NL80211_SCHED_SCAN_MATCH_ATTR_RSSI: RSSI threshold (in dBm) for reporting a   *	BSS in scan results. Filtering is turned off if not specified. Note that   *	if this attribute is in a match set of its own, then it is treated as @@ -2795,6 +3354,15 @@ enum nl80211_reg_rule_attr {   *	how this API was implemented in the past. Also, due to the same problem,   *	the only way to create a matchset with only an RSSI filter (with this   *	attribute) is if there's only a single matchset with the RSSI attribute. + * @NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI: Flag indicating whether + *	%NL80211_SCHED_SCAN_MATCH_ATTR_RSSI to be used as absolute RSSI or + *	relative to current bss's RSSI. + * @NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST: When present the RSSI level for + *	BSS-es in the specified band is to be adjusted before doing + *	RSSI-based BSS selection. The attribute value is a packed structure + *	value as specified by &struct nl80211_bss_select_rssi_adjust. + * @NL80211_SCHED_SCAN_MATCH_ATTR_BSSID: BSSID to be used for matching + *	(this cannot be used together with SSID).   * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter   *	attribute number currently defined   * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use @@ -2804,6 +3372,9 @@ enum nl80211_sched_scan_match_attr {  	NL80211_SCHED_SCAN_MATCH_ATTR_SSID,  	NL80211_SCHED_SCAN_MATCH_ATTR_RSSI, +	NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI, +	NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST, +	NL80211_SCHED_SCAN_MATCH_ATTR_BSSID,  	/* keep last */  	__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST, @@ -2830,7 +3401,7 @@ enum nl80211_sched_scan_match_attr {   * @NL80211_RRF_AUTO_BW: maximum available bandwidth should be calculated   *	base on contiguous rules and wider channels will be allowed to cross   *	multiple contiguous/overlapping frequency ranges. - * @NL80211_RRF_GO_CONCURRENT: See &NL80211_FREQUENCY_ATTR_GO_CONCURRENT + * @NL80211_RRF_IR_CONCURRENT: See &NL80211_FREQUENCY_ATTR_IR_CONCURRENT   * @NL80211_RRF_NO_HT40MINUS: channels can't be used in HT40- operation   * @NL80211_RRF_NO_HT40PLUS: channels can't be used in HT40+ operation   * @NL80211_RRF_NO_80MHZ: 80MHz operation not allowed @@ -2847,7 +3418,7 @@ enum nl80211_reg_rule_flags {  	NL80211_RRF_NO_IR		= 1<<7,  	__NL80211_RRF_NO_IBSS		= 1<<8,  	NL80211_RRF_AUTO_BW		= 1<<11, -	NL80211_RRF_GO_CONCURRENT	= 1<<12, +	NL80211_RRF_IR_CONCURRENT	= 1<<12,  	NL80211_RRF_NO_HT40MINUS	= 1<<13,  	NL80211_RRF_NO_HT40PLUS		= 1<<14,  	NL80211_RRF_NO_80MHZ		= 1<<15, @@ -2859,6 +3430,7 @@ enum nl80211_reg_rule_flags {  #define NL80211_RRF_NO_IR		NL80211_RRF_NO_IR  #define NL80211_RRF_NO_HT40		(NL80211_RRF_NO_HT40MINUS |\  					 NL80211_RRF_NO_HT40PLUS) +#define NL80211_RRF_GO_CONCURRENT	NL80211_RRF_IR_CONCURRENT  /* For backport compatibility with older userspace */  #define NL80211_RRF_NO_IR_ALL		(NL80211_RRF_NO_IR | __NL80211_RRF_NO_IBSS) @@ -2923,6 +3495,7 @@ enum nl80211_user_reg_hint_type {   *	transmitting data (on channel or globally)   * @NL80211_SURVEY_INFO_TIME_SCAN: time the radio spent for scan   *	(on this channel or globally) + * @NL80211_SURVEY_INFO_PAD: attribute used for padding for 64-bit alignment   * @NL80211_SURVEY_INFO_MAX: highest survey info attribute number   *	currently defined   * @__NL80211_SURVEY_INFO_AFTER_LAST: internal use @@ -2938,6 +3511,7 @@ enum nl80211_survey_info {  	NL80211_SURVEY_INFO_TIME_RX,  	NL80211_SURVEY_INFO_TIME_TX,  	NL80211_SURVEY_INFO_TIME_SCAN, +	NL80211_SURVEY_INFO_PAD,  	/* keep last */  	__NL80211_SURVEY_INFO_AFTER_LAST, @@ -3360,6 +3934,19 @@ enum nl80211_bss_scan_width {   *	(not present if no beacon frame has been received yet)   * @NL80211_BSS_PRESP_DATA: the data in @NL80211_BSS_INFORMATION_ELEMENTS and   *	@NL80211_BSS_TSF is known to be from a probe response (flag attribute) + * @NL80211_BSS_LAST_SEEN_BOOTTIME: CLOCK_BOOTTIME timestamp when this entry + *	was last updated by a received frame. The value is expected to be + *	accurate to about 10ms. (u64, nanoseconds) + * @NL80211_BSS_PAD: attribute used for padding for 64-bit alignment + * @NL80211_BSS_PARENT_TSF: the time at the start of reception of the first + *	octet of the timestamp field of the last beacon/probe received for + *	this BSS. The time is the TSF of the BSS specified by + *	@NL80211_BSS_PARENT_BSSID. (u64). + * @NL80211_BSS_PARENT_BSSID: the BSS according to which @NL80211_BSS_PARENT_TSF + *	is set. + * @NL80211_BSS_CHAIN_SIGNAL: per-chain signal strength of last BSS update. + *	Contains a nested array of signal strength attributes (u8, dBm), + *	using the nesting index as the antenna number.   * @__NL80211_BSS_AFTER_LAST: internal   * @NL80211_BSS_MAX: highest BSS attribute   */ @@ -3379,6 +3966,11 @@ enum nl80211_bss {  	NL80211_BSS_CHAN_WIDTH,  	NL80211_BSS_BEACON_TSF,  	NL80211_BSS_PRESP_DATA, +	NL80211_BSS_LAST_SEEN_BOOTTIME, +	NL80211_BSS_PAD, +	NL80211_BSS_PARENT_TSF, +	NL80211_BSS_PARENT_BSSID, +	NL80211_BSS_CHAIN_SIGNAL,  	/* keep last */  	__NL80211_BSS_AFTER_LAST, @@ -3411,6 +4003,9 @@ enum nl80211_bss_status {   * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r)   * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP)   * @NL80211_AUTHTYPE_SAE: Simultaneous authentication of equals + * @NL80211_AUTHTYPE_FILS_SK: Fast Initial Link Setup shared key + * @NL80211_AUTHTYPE_FILS_SK_PFS: Fast Initial Link Setup shared key with PFS + * @NL80211_AUTHTYPE_FILS_PK: Fast Initial Link Setup public key   * @__NL80211_AUTHTYPE_NUM: internal   * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm   * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by @@ -3423,6 +4018,9 @@ enum nl80211_auth_type {  	NL80211_AUTHTYPE_FT,  	NL80211_AUTHTYPE_NETWORK_EAP,  	NL80211_AUTHTYPE_SAE, +	NL80211_AUTHTYPE_FILS_SK, +	NL80211_AUTHTYPE_FILS_SK_PFS, +	NL80211_AUTHTYPE_FILS_PK,  	/* keep last */  	__NL80211_AUTHTYPE_NUM, @@ -3449,10 +4047,12 @@ enum nl80211_key_type {   * enum nl80211_mfp - Management frame protection state   * @NL80211_MFP_NO: Management frame protection not used   * @NL80211_MFP_REQUIRED: Management frame protection required + * @NL80211_MFP_OPTIONAL: Management frame protection is optional   */  enum nl80211_mfp {  	NL80211_MFP_NO,  	NL80211_MFP_REQUIRED, +	NL80211_MFP_OPTIONAL,  };  enum nl80211_wpa_versions { @@ -3564,11 +4164,15 @@ enum nl80211_txrate_gi {   * @NL80211_BAND_2GHZ: 2.4 GHz ISM band   * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)   * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz) + * @NUM_NL80211_BANDS: number of bands, avoid using this in userspace + *	since newer kernel versions may support more bands   */  enum nl80211_band {  	NL80211_BAND_2GHZ,  	NL80211_BAND_5GHZ,  	NL80211_BAND_60GHZ, + +	NUM_NL80211_BANDS,  };  /** @@ -3586,7 +4190,10 @@ enum nl80211_ps_state {   * @__NL80211_ATTR_CQM_INVALID: invalid   * @NL80211_ATTR_CQM_RSSI_THOLD: RSSI threshold in dBm. This value specifies   *	the threshold for the RSSI level at which an event will be sent. Zero - *	to disable. + *	to disable.  Alternatively, if %NL80211_EXT_FEATURE_CQM_RSSI_LIST is + *	set, multiple values can be supplied as a low-to-high sorted array of + *	threshold values in dBm.  Events will be sent when the RSSI value + *	crosses any of the thresholds.   * @NL80211_ATTR_CQM_RSSI_HYST: RSSI hysteresis in dBm. This value specifies   *	the minimum amount the RSSI level must change after an event before a   *	new event may be issued (to reduce effects of RSSI oscillation). @@ -3606,6 +4213,8 @@ enum nl80211_ps_state {   *	%NL80211_CMD_NOTIFY_CQM. Set to 0 to turn off TX error reporting.   * @NL80211_ATTR_CQM_BEACON_LOSS_EVENT: flag attribute that's set in a beacon   *	loss event + * @NL80211_ATTR_CQM_RSSI_LEVEL: the RSSI value in dBm that triggered the + *	RSSI threshold event.   * @__NL80211_ATTR_CQM_AFTER_LAST: internal   * @NL80211_ATTR_CQM_MAX: highest key attribute   */ @@ -3619,6 +4228,7 @@ enum nl80211_attr_cqm {  	NL80211_ATTR_CQM_TXE_PKTS,  	NL80211_ATTR_CQM_TXE_INTVL,  	NL80211_ATTR_CQM_BEACON_LOSS_EVENT, +	NL80211_ATTR_CQM_RSSI_LEVEL,  	/* keep last */  	__NL80211_ATTR_CQM_AFTER_LAST, @@ -4027,6 +4637,9 @@ enum nl80211_iface_limit_attrs {   *	of supported channel widths for radar detection.   * @NL80211_IFACE_COMB_RADAR_DETECT_REGIONS: u32 attribute containing the bitmap   *	of supported regulatory regions for radar detection. + * @NL80211_IFACE_COMB_BI_MIN_GCD: u32 attribute specifying the minimum GCD of + *	different beacon intervals supported by all the interface combinations + *	in this group (if not present, all beacon intervals be identical).   * @NUM_NL80211_IFACE_COMB: number of attributes   * @MAX_NL80211_IFACE_COMB: highest attribute number   * @@ -4034,8 +4647,8 @@ enum nl80211_iface_limit_attrs {   *	limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2   *	=> allows an AP and a STA that must match BIs   * - *	numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8 - *	=> allows 8 of AP/GO + *	numbers = [ #{AP, P2P-GO} <= 8 ], BI min gcd, channels = 1, max = 8, + *	=> allows 8 of AP/GO that can have BI gcd >= min gcd   *   *	numbers = [ #{STA} <= 2 ], channels = 2, max = 2   *	=> allows two STAs on different channels @@ -4061,6 +4674,7 @@ enum nl80211_if_combination_attrs {  	NL80211_IFACE_COMB_NUM_CHANNELS,  	NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS,  	NL80211_IFACE_COMB_RADAR_DETECT_REGIONS, +	NL80211_IFACE_COMB_BI_MIN_GCD,  	/* keep last */  	NUM_NL80211_IFACE_COMB, @@ -4354,12 +4968,108 @@ enum nl80211_feature_flags {  /**   * enum nl80211_ext_feature_index - bit index of extended features.   * @NL80211_EXT_FEATURE_VHT_IBSS: This driver supports IBSS with VHT datarates. + * @NL80211_EXT_FEATURE_RRM: This driver supports RRM. When featured, user can + *	can request to use RRM (see %NL80211_ATTR_USE_RRM) with + *	%NL80211_CMD_ASSOCIATE and %NL80211_CMD_CONNECT requests, which will set + *	the ASSOC_REQ_USE_RRM flag in the association request even if + *	NL80211_FEATURE_QUIET is not advertized. + * @NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER: This device supports MU-MIMO air + *	sniffer which means that it can be configured to hear packets from + *	certain groups which can be configured by the + *	%NL80211_ATTR_MU_MIMO_GROUP_DATA attribute, + *	or can be configured to follow a station by configuring the + *	%NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR attribute. + * @NL80211_EXT_FEATURE_SCAN_START_TIME: This driver includes the actual + *	time the scan started in scan results event. The time is the TSF of + *	the BSS that the interface that requested the scan is connected to + *	(if available). + * @NL80211_EXT_FEATURE_BSS_PARENT_TSF: Per BSS, this driver reports the + *	time the last beacon/probe was received. The time is the TSF of the + *	BSS that the interface that requested the scan is connected to + *	(if available). + * @NL80211_EXT_FEATURE_SET_SCAN_DWELL: This driver supports configuration of + *	channel dwell time. + * @NL80211_EXT_FEATURE_BEACON_RATE_LEGACY: Driver supports beacon rate + *	configuration (AP/mesh), supporting a legacy (non HT/VHT) rate. + * @NL80211_EXT_FEATURE_BEACON_RATE_HT: Driver supports beacon rate + *	configuration (AP/mesh) with HT rates. + * @NL80211_EXT_FEATURE_BEACON_RATE_VHT: Driver supports beacon rate + *	configuration (AP/mesh) with VHT rates. + * @NL80211_EXT_FEATURE_FILS_STA: This driver supports Fast Initial Link Setup + *	with user space SME (NL80211_CMD_AUTHENTICATE) in station mode. + * @NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA: This driver supports randomized TA + *	in @NL80211_CMD_FRAME while not associated. + * @NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED: This driver supports + *	randomized TA in @NL80211_CMD_FRAME while associated. + * @NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI: The driver supports sched_scan + *	for reporting BSSs with better RSSI than the current connected BSS + *	(%NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI). + * @NL80211_EXT_FEATURE_CQM_RSSI_LIST: With this driver the + *	%NL80211_ATTR_CQM_RSSI_THOLD attribute accepts a list of zero or more + *	RSSI threshold values to monitor rather than exactly one threshold. + * @NL80211_EXT_FEATURE_FILS_SK_OFFLOAD: Driver SME supports FILS shared key + *	authentication with %NL80211_CMD_CONNECT. + * @NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK: Device wants to do 4-way + *	handshake with PSK in station mode (PSK is passed as part of the connect + *	and associate commands), doing it in the host might not be supported. + * @NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X: Device wants to do doing 4-way + *	handshake with 802.1X in station mode (will pass EAP frames to the host + *	and accept the set_pmk/del_pmk commands), doing it in the host might not + *	be supported. + * @NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME: Driver is capable of overriding + *	the max channel attribute in the FILS request params IE with the + *	actual dwell time. + * @NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP: Driver accepts broadcast probe + *	response + * @NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE: Driver supports sending + *	the first probe request in each channel at rate of at least 5.5Mbps. + * @NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION: Driver supports + *	probe request tx deferral and suppression + * @NL80211_EXT_FEATURE_MFP_OPTIONAL: Driver supports the %NL80211_MFP_OPTIONAL + *	value in %NL80211_ATTR_USE_MFP. + * @NL80211_EXT_FEATURE_LOW_SPAN_SCAN: Driver supports low span scan. + * @NL80211_EXT_FEATURE_LOW_POWER_SCAN: Driver supports low power scan. + * @NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN: Driver supports high accuracy scan. + * @NL80211_EXT_FEATURE_DFS_OFFLOAD: HW/driver will offload DFS actions. + *	Device or driver will do all DFS-related actions by itself, + *	informing user-space about CAC progress, radar detection event, + *	channel change triggered by radar detection event. + *	No need to start CAC from user-space, no need to react to + *	"radar detected" event. + * @NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211: Driver supports sending and + *	receiving control port frames over nl80211 instead of the netdevice.   *   * @NUM_NL80211_EXT_FEATURES: number of extended features.   * @MAX_NL80211_EXT_FEATURES: highest extended feature index.   */  enum nl80211_ext_feature_index {  	NL80211_EXT_FEATURE_VHT_IBSS, +	NL80211_EXT_FEATURE_RRM, +	NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER, +	NL80211_EXT_FEATURE_SCAN_START_TIME, +	NL80211_EXT_FEATURE_BSS_PARENT_TSF, +	NL80211_EXT_FEATURE_SET_SCAN_DWELL, +	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY, +	NL80211_EXT_FEATURE_BEACON_RATE_HT, +	NL80211_EXT_FEATURE_BEACON_RATE_VHT, +	NL80211_EXT_FEATURE_FILS_STA, +	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA, +	NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED, +	NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI, +	NL80211_EXT_FEATURE_CQM_RSSI_LIST, +	NL80211_EXT_FEATURE_FILS_SK_OFFLOAD, +	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK, +	NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X, +	NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME, +	NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP, +	NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE, +	NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION, +	NL80211_EXT_FEATURE_MFP_OPTIONAL, +	NL80211_EXT_FEATURE_LOW_SPAN_SCAN, +	NL80211_EXT_FEATURE_LOW_POWER_SCAN, +	NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN, +	NL80211_EXT_FEATURE_DFS_OFFLOAD, +	NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211,  	/* add new features before the definition below */  	NUM_NL80211_EXT_FEATURES, @@ -4399,12 +5109,31 @@ enum nl80211_connect_failed_reason {  };  /** + * enum nl80211_timeout_reason - timeout reasons + * + * @NL80211_TIMEOUT_UNSPECIFIED: Timeout reason unspecified. + * @NL80211_TIMEOUT_SCAN: Scan (AP discovery) timed out. + * @NL80211_TIMEOUT_AUTH: Authentication timed out. + * @NL80211_TIMEOUT_ASSOC: Association timed out. + */ +enum nl80211_timeout_reason { +	NL80211_TIMEOUT_UNSPECIFIED, +	NL80211_TIMEOUT_SCAN, +	NL80211_TIMEOUT_AUTH, +	NL80211_TIMEOUT_ASSOC, +}; + +/**   * enum nl80211_scan_flags -  scan request control flags   *   * Scan request control flags are used to control the handling   * of NL80211_CMD_TRIGGER_SCAN and NL80211_CMD_START_SCHED_SCAN   * requests.   * + * NL80211_SCAN_FLAG_LOW_SPAN, NL80211_SCAN_FLAG_LOW_POWER, and + * NL80211_SCAN_FLAG_HIGH_ACCURACY flags are exclusive of each other, i.e., only + * one of them can be used in the request. + *   * @NL80211_SCAN_FLAG_LOW_PRIORITY: scan request has low priority   * @NL80211_SCAN_FLAG_FLUSH: flush cache before scanning   * @NL80211_SCAN_FLAG_AP: force a scan even if the interface is configured @@ -4421,12 +5150,44 @@ enum nl80211_connect_failed_reason {   *	locally administered 1, multicast 0) is assumed.   *	This flag must not be requested when the feature isn't supported, check   *	the nl80211 feature flags for the device. + * @NL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME: fill the dwell time in the FILS + *	request parameters IE in the probe request + * @NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP: accept broadcast probe responses + * @NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE: send probe request frames at + *	rate of at least 5.5M. In case non OCE AP is dicovered in the channel, + *	only the first probe req in the channel will be sent in high rate. + * @NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION: allow probe request + *	tx deferral (dot11FILSProbeDelay shall be set to 15ms) + *	and suppression (if it has received a broadcast Probe Response frame, + *	Beacon frame or FILS Discovery frame from an AP that the STA considers + *	a suitable candidate for (re-)association - suitable in terms of + *	SSID and/or RSSI. + * @NL80211_SCAN_FLAG_LOW_SPAN: Span corresponds to the total time taken to + *	accomplish the scan. Thus, this flag intends the driver to perform the + *	scan request with lesser span/duration. It is specific to the driver + *	implementations on how this is accomplished. Scan accuracy may get + *	impacted with this flag. + * @NL80211_SCAN_FLAG_LOW_POWER: This flag intends the scan attempts to consume + *	optimal possible power. Drivers can resort to their specific means to + *	optimize the power. Scan accuracy may get impacted with this flag. + * @NL80211_SCAN_FLAG_HIGH_ACCURACY: Accuracy here intends to the extent of scan + *	results obtained. Thus HIGH_ACCURACY scan flag aims to get maximum + *	possible scan results. This flag hints the driver to use the best + *	possible scan configuration to improve the accuracy in scanning. + *	Latency and power use may get impacted with this flag.   */  enum nl80211_scan_flags { -	NL80211_SCAN_FLAG_LOW_PRIORITY			= 1<<0, -	NL80211_SCAN_FLAG_FLUSH				= 1<<1, -	NL80211_SCAN_FLAG_AP				= 1<<2, -	NL80211_SCAN_FLAG_RANDOM_ADDR			= 1<<3, +	NL80211_SCAN_FLAG_LOW_PRIORITY				= 1<<0, +	NL80211_SCAN_FLAG_FLUSH					= 1<<1, +	NL80211_SCAN_FLAG_AP					= 1<<2, +	NL80211_SCAN_FLAG_RANDOM_ADDR				= 1<<3, +	NL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME			= 1<<4, +	NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP		= 1<<5, +	NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE		= 1<<6, +	NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION	= 1<<7, +	NL80211_SCAN_FLAG_LOW_SPAN				= 1<<8, +	NL80211_SCAN_FLAG_LOW_POWER				= 1<<9, +	NL80211_SCAN_FLAG_HIGH_ACCURACY				= 1<<10,  };  /** @@ -4480,12 +5241,20 @@ enum nl80211_smps_mode {   *	change to the channel status.   * @NL80211_RADAR_NOP_FINISHED: The Non-Occupancy Period for this channel is   *	over, channel becomes usable. + * @NL80211_RADAR_PRE_CAC_EXPIRED: Channel Availability Check done on this + *	non-operating channel is expired and no longer valid. New CAC must + *	be done on this channel before starting the operation. This is not + *	applicable for ETSI dfs domain where pre-CAC is valid for ever. + * @NL80211_RADAR_CAC_STARTED: Channel Availability Check has been started, + *	should be generated by HW if NL80211_EXT_FEATURE_DFS_OFFLOAD is enabled.   */  enum nl80211_radar_event {  	NL80211_RADAR_DETECTED,  	NL80211_RADAR_CAC_FINISHED,  	NL80211_RADAR_CAC_ABORTED,  	NL80211_RADAR_NOP_FINISHED, +	NL80211_RADAR_PRE_CAC_EXPIRED, +	NL80211_RADAR_CAC_STARTED,  };  /** @@ -4585,4 +5354,251 @@ enum nl80211_tdls_peer_capability {  	NL80211_TDLS_PEER_WMM = 1<<2,  }; +/** + * enum nl80211_sched_scan_plan - scanning plan for scheduled scan + * @__NL80211_SCHED_SCAN_PLAN_INVALID: attribute number 0 is reserved + * @NL80211_SCHED_SCAN_PLAN_INTERVAL: interval between scan iterations. In + *	seconds (u32). + * @NL80211_SCHED_SCAN_PLAN_ITERATIONS: number of scan iterations in this + *	scan plan (u32). The last scan plan must not specify this attribute + *	because it will run infinitely. A value of zero is invalid as it will + *	make the scan plan meaningless. + * @NL80211_SCHED_SCAN_PLAN_MAX: highest scheduled scan plan attribute number + *	currently defined + * @__NL80211_SCHED_SCAN_PLAN_AFTER_LAST: internal use + */ +enum nl80211_sched_scan_plan { +	__NL80211_SCHED_SCAN_PLAN_INVALID, +	NL80211_SCHED_SCAN_PLAN_INTERVAL, +	NL80211_SCHED_SCAN_PLAN_ITERATIONS, + +	/* keep last */ +	__NL80211_SCHED_SCAN_PLAN_AFTER_LAST, +	NL80211_SCHED_SCAN_PLAN_MAX = +		__NL80211_SCHED_SCAN_PLAN_AFTER_LAST - 1 +}; + +/** + * struct nl80211_bss_select_rssi_adjust - RSSI adjustment parameters. + * + * @band: band of BSS that must match for RSSI value adjustment. The value + *	of this field is according to &enum nl80211_band. + * @delta: value used to adjust the RSSI value of matching BSS in dB. + */ +struct nl80211_bss_select_rssi_adjust { +	__u8 band; +	__s8 delta; +} __attribute__((packed)); + +/** + * enum nl80211_bss_select_attr - attributes for bss selection. + * + * @__NL80211_BSS_SELECT_ATTR_INVALID: reserved. + * @NL80211_BSS_SELECT_ATTR_RSSI: Flag indicating only RSSI-based BSS selection + *	is requested. + * @NL80211_BSS_SELECT_ATTR_BAND_PREF: attribute indicating BSS + *	selection should be done such that the specified band is preferred. + *	When there are multiple BSS-es in the preferred band, the driver + *	shall use RSSI-based BSS selection as a second step. The value of + *	this attribute is according to &enum nl80211_band (u32). + * @NL80211_BSS_SELECT_ATTR_RSSI_ADJUST: When present the RSSI level for + *	BSS-es in the specified band is to be adjusted before doing + *	RSSI-based BSS selection. The attribute value is a packed structure + *	value as specified by &struct nl80211_bss_select_rssi_adjust. + * @NL80211_BSS_SELECT_ATTR_MAX: highest bss select attribute number. + * @__NL80211_BSS_SELECT_ATTR_AFTER_LAST: internal use. + * + * One and only one of these attributes are found within %NL80211_ATTR_BSS_SELECT + * for %NL80211_CMD_CONNECT. It specifies the required BSS selection behaviour + * which the driver shall use. + */ +enum nl80211_bss_select_attr { +	__NL80211_BSS_SELECT_ATTR_INVALID, +	NL80211_BSS_SELECT_ATTR_RSSI, +	NL80211_BSS_SELECT_ATTR_BAND_PREF, +	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST, + +	/* keep last */ +	__NL80211_BSS_SELECT_ATTR_AFTER_LAST, +	NL80211_BSS_SELECT_ATTR_MAX = __NL80211_BSS_SELECT_ATTR_AFTER_LAST - 1 +}; + +/** + * enum nl80211_nan_function_type - NAN function type + * + * Defines the function type of a NAN function + * + * @NL80211_NAN_FUNC_PUBLISH: function is publish + * @NL80211_NAN_FUNC_SUBSCRIBE: function is subscribe + * @NL80211_NAN_FUNC_FOLLOW_UP: function is follow-up + */ +enum nl80211_nan_function_type { +	NL80211_NAN_FUNC_PUBLISH, +	NL80211_NAN_FUNC_SUBSCRIBE, +	NL80211_NAN_FUNC_FOLLOW_UP, + +	/* keep last */ +	__NL80211_NAN_FUNC_TYPE_AFTER_LAST, +	NL80211_NAN_FUNC_MAX_TYPE = __NL80211_NAN_FUNC_TYPE_AFTER_LAST - 1, +}; + +/** + * enum nl80211_nan_publish_type - NAN publish tx type + * + * Defines how to send publish Service Discovery Frames + * + * @NL80211_NAN_SOLICITED_PUBLISH: publish function is solicited + * @NL80211_NAN_UNSOLICITED_PUBLISH: publish function is unsolicited + */ +enum nl80211_nan_publish_type { +	NL80211_NAN_SOLICITED_PUBLISH = 1 << 0, +	NL80211_NAN_UNSOLICITED_PUBLISH = 1 << 1, +}; + +/** + * enum nl80211_nan_func_term_reason - NAN functions termination reason + * + * Defines termination reasons of a NAN function + * + * @NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST: requested by user + * @NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED: timeout + * @NL80211_NAN_FUNC_TERM_REASON_ERROR: errored + */ +enum nl80211_nan_func_term_reason { +	NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST, +	NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED, +	NL80211_NAN_FUNC_TERM_REASON_ERROR, +}; + +#define NL80211_NAN_FUNC_SERVICE_ID_LEN 6 +#define NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN 0xff +#define NL80211_NAN_FUNC_SRF_MAX_LEN 0xff + +/** + * enum nl80211_nan_func_attributes - NAN function attributes + * @__NL80211_NAN_FUNC_INVALID: invalid + * @NL80211_NAN_FUNC_TYPE: &enum nl80211_nan_function_type (u8). + * @NL80211_NAN_FUNC_SERVICE_ID: 6 bytes of the service ID hash as + *	specified in NAN spec. This is a binary attribute. + * @NL80211_NAN_FUNC_PUBLISH_TYPE: relevant if the function's type is + *	publish. Defines the transmission type for the publish Service Discovery + *	Frame, see &enum nl80211_nan_publish_type. Its type is u8. + * @NL80211_NAN_FUNC_PUBLISH_BCAST: relevant if the function is a solicited + *	publish. Should the solicited publish Service Discovery Frame be sent to + *	the NAN Broadcast address. This is a flag. + * @NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE: relevant if the function's type is + *	subscribe. Is the subscribe active. This is a flag. + * @NL80211_NAN_FUNC_FOLLOW_UP_ID: relevant if the function's type is follow up. + *	The instance ID for the follow up Service Discovery Frame. This is u8. + * @NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID: relevant if the function's type + *	is follow up. This is a u8. + *	The requestor instance ID for the follow up Service Discovery Frame. + * @NL80211_NAN_FUNC_FOLLOW_UP_DEST: the MAC address of the recipient of the + *	follow up Service Discovery Frame. This is a binary attribute. + * @NL80211_NAN_FUNC_CLOSE_RANGE: is this function limited for devices in a + *	close range. The range itself (RSSI) is defined by the device. + *	This is a flag. + * @NL80211_NAN_FUNC_TTL: strictly positive number of DWs this function should + *	stay active. If not present infinite TTL is assumed. This is a u32. + * @NL80211_NAN_FUNC_SERVICE_INFO: array of bytes describing the service + *	specific info. This is a binary attribute. + * @NL80211_NAN_FUNC_SRF: Service Receive Filter. This is a nested attribute. + *	See &enum nl80211_nan_srf_attributes. + * @NL80211_NAN_FUNC_RX_MATCH_FILTER: Receive Matching filter. This is a nested + *	attribute. It is a list of binary values. + * @NL80211_NAN_FUNC_TX_MATCH_FILTER: Transmit Matching filter. This is a + *	nested attribute. It is a list of binary values. + * @NL80211_NAN_FUNC_INSTANCE_ID: The instance ID of the function. + *	Its type is u8 and it cannot be 0. + * @NL80211_NAN_FUNC_TERM_REASON: NAN function termination reason. + *	See &enum nl80211_nan_func_term_reason. + * + * @NUM_NL80211_NAN_FUNC_ATTR: internal + * @NL80211_NAN_FUNC_ATTR_MAX: highest NAN function attribute + */ +enum nl80211_nan_func_attributes { +	__NL80211_NAN_FUNC_INVALID, +	NL80211_NAN_FUNC_TYPE, +	NL80211_NAN_FUNC_SERVICE_ID, +	NL80211_NAN_FUNC_PUBLISH_TYPE, +	NL80211_NAN_FUNC_PUBLISH_BCAST, +	NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE, +	NL80211_NAN_FUNC_FOLLOW_UP_ID, +	NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID, +	NL80211_NAN_FUNC_FOLLOW_UP_DEST, +	NL80211_NAN_FUNC_CLOSE_RANGE, +	NL80211_NAN_FUNC_TTL, +	NL80211_NAN_FUNC_SERVICE_INFO, +	NL80211_NAN_FUNC_SRF, +	NL80211_NAN_FUNC_RX_MATCH_FILTER, +	NL80211_NAN_FUNC_TX_MATCH_FILTER, +	NL80211_NAN_FUNC_INSTANCE_ID, +	NL80211_NAN_FUNC_TERM_REASON, + +	/* keep last */ +	NUM_NL80211_NAN_FUNC_ATTR, +	NL80211_NAN_FUNC_ATTR_MAX = NUM_NL80211_NAN_FUNC_ATTR - 1 +}; + +/** + * enum nl80211_nan_srf_attributes - NAN Service Response filter attributes + * @__NL80211_NAN_SRF_INVALID: invalid + * @NL80211_NAN_SRF_INCLUDE: present if the include bit of the SRF set. + *	This is a flag. + * @NL80211_NAN_SRF_BF: Bloom Filter. Present if and only if + *	&NL80211_NAN_SRF_MAC_ADDRS isn't present. This attribute is binary. + * @NL80211_NAN_SRF_BF_IDX: index of the Bloom Filter. Mandatory if + *	&NL80211_NAN_SRF_BF is present. This is a u8. + * @NL80211_NAN_SRF_MAC_ADDRS: list of MAC addresses for the SRF. Present if + *	and only if &NL80211_NAN_SRF_BF isn't present. This is a nested + *	attribute. Each nested attribute is a MAC address. + * @NUM_NL80211_NAN_SRF_ATTR: internal + * @NL80211_NAN_SRF_ATTR_MAX: highest NAN SRF attribute + */ +enum nl80211_nan_srf_attributes { +	__NL80211_NAN_SRF_INVALID, +	NL80211_NAN_SRF_INCLUDE, +	NL80211_NAN_SRF_BF, +	NL80211_NAN_SRF_BF_IDX, +	NL80211_NAN_SRF_MAC_ADDRS, + +	/* keep last */ +	NUM_NL80211_NAN_SRF_ATTR, +	NL80211_NAN_SRF_ATTR_MAX = NUM_NL80211_NAN_SRF_ATTR - 1, +}; + +/** + * enum nl80211_nan_match_attributes - NAN match attributes + * @__NL80211_NAN_MATCH_INVALID: invalid + * @NL80211_NAN_MATCH_FUNC_LOCAL: the local function that had the + *	match. This is a nested attribute. + *	See &enum nl80211_nan_func_attributes. + * @NL80211_NAN_MATCH_FUNC_PEER: the peer function + *	that caused the match. This is a nested attribute. + *	See &enum nl80211_nan_func_attributes. + * + * @NUM_NL80211_NAN_MATCH_ATTR: internal + * @NL80211_NAN_MATCH_ATTR_MAX: highest NAN match attribute + */ +enum nl80211_nan_match_attributes { +	__NL80211_NAN_MATCH_INVALID, +	NL80211_NAN_MATCH_FUNC_LOCAL, +	NL80211_NAN_MATCH_FUNC_PEER, + +	/* keep last */ +	NUM_NL80211_NAN_MATCH_ATTR, +	NL80211_NAN_MATCH_ATTR_MAX = NUM_NL80211_NAN_MATCH_ATTR - 1 +}; + +/** + * nl80211_external_auth_action - Action to perform with external + *     authentication request. Used by NL80211_ATTR_EXTERNAL_AUTH_ACTION. + * @NL80211_EXTERNAL_AUTH_START: Start the authentication. + * @NL80211_EXTERNAL_AUTH_ABORT: Abort the ongoing authentication. + */ +enum nl80211_external_auth_action { +	NL80211_EXTERNAL_AUTH_START, +	NL80211_EXTERNAL_AUTH_ABORT, +}; +  #endif /* __LINUX_NL80211_H */ @@ -18,7 +18,6 @@   * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.   */  #include "wavemon.h" -#include <locale.h>  #include <setjmp.h>  /* GLOBALS */ @@ -140,6 +139,7 @@ static void check_geometry(void)  int main(int argc, char *argv[])  { +	int bg_color = COLOR_BLACK;  	enum wavemon_screen cur, next;  	sigset_t blockmask, oldmask; @@ -148,9 +148,6 @@ int main(int argc, char *argv[])  	if (!isatty(STDIN_FILENO))  		errx(1, "input is not from a terminal"); -	/* honour numeric separators if the environment defines them */ -	setlocale(LC_NUMERIC, ""); -  	/* initialize the ncurses interface */  	initscr();  	noecho(); @@ -161,28 +158,32 @@ int main(int argc, char *argv[])  	check_geometry();  	start_color(); -	init_pair(CP_STANDARD,	COLOR_WHITE,	COLOR_BLACK); -	init_pair(CP_SCALEHI,	COLOR_RED,	COLOR_BLACK); -	init_pair(CP_SCALEMID,	COLOR_YELLOW,	COLOR_BLACK); -	init_pair(CP_SCALELOW,	COLOR_GREEN,	COLOR_BLACK); -	init_pair(CP_WTITLE,	COLOR_CYAN,	COLOR_BLACK); -	init_pair(CP_INACTIVE,	COLOR_CYAN,	COLOR_BLACK); +	if (conf.transparent_bg) { +		bg_color = -1; +		use_default_colors(); +	} +	init_pair(CP_STANDARD,	COLOR_WHITE,	bg_color); +	init_pair(CP_SCALEHI,	COLOR_RED,	bg_color); +	init_pair(CP_SCALEMID,	COLOR_YELLOW,	bg_color); +	init_pair(CP_SCALELOW,	COLOR_GREEN,	bg_color); +	init_pair(CP_WTITLE,	COLOR_CYAN,	bg_color); +	init_pair(CP_INACTIVE,	COLOR_CYAN,	bg_color);  	init_pair(CP_ACTIVE,	COLOR_CYAN,	COLOR_BLUE); -	init_pair(CP_STATSIG,	  COLOR_GREEN,	COLOR_BLACK); -	init_pair(CP_STATNOISE,	  COLOR_RED,	COLOR_BLACK); +	init_pair(CP_STATSIG,	  COLOR_GREEN,	bg_color); +	init_pair(CP_STATNOISE,	  COLOR_RED,	bg_color);  	init_pair(CP_STATSNR,	  COLOR_BLUE,	COLOR_BLUE); -	init_pair(CP_STATBKG,	  COLOR_BLUE,	COLOR_BLACK); +	init_pair(CP_STATBKG,	  COLOR_BLUE,	bg_color);  	init_pair(CP_STATSIG_S,	  COLOR_GREEN,	COLOR_BLUE);  	init_pair(CP_STATNOISE_S, COLOR_RED,	COLOR_BLUE); -	init_pair(CP_PREF_NORMAL, COLOR_WHITE,	COLOR_BLACK); +	init_pair(CP_PREF_NORMAL, COLOR_WHITE,	bg_color);  	init_pair(CP_PREF_SELECT, COLOR_WHITE,	COLOR_BLUE); -	init_pair(CP_PREF_ARROW,  COLOR_RED,	COLOR_BLACK); +	init_pair(CP_PREF_ARROW,  COLOR_RED,	bg_color); -	init_pair(CP_SCAN_CRYPT,  COLOR_RED,	COLOR_BLACK); -	init_pair(CP_SCAN_UNENC,  COLOR_GREEN,	COLOR_BLACK); -	init_pair(CP_SCAN_NON_AP, COLOR_YELLOW, COLOR_BLACK); +	init_pair(CP_SCAN_CRYPT,  COLOR_RED,	bg_color); +	init_pair(CP_SCAN_UNENC,  COLOR_GREEN,	bg_color); +	init_pair(CP_SCAN_NON_AP, COLOR_YELLOW, bg_color);  	/* Override signal handlers installed during ncurses initialisation. */  	xsignal(SIGCHLD, SIG_IGN); @@ -137,6 +137,7 @@ extern struct wavemon_conf {  	/* Boolean values */  	int	check_geometry,		/* ensure window is large enough */  		cisco_mac,		/* Cisco-style MAC addresses */ +		transparent_bg,		/* Use terminal background instead of black */  		override_bounds,	/* override autodetection */  		scan_sort_asc;		/* direction of @scan_sort_order */ @@ -171,8 +172,9 @@ struct conf_item {  	char	**list;		/* t_list: NULL-terminated array of strings */  	int	*dep;		/* dependency */ +	bool	hidden;		/* only allow to set via wavemonrc */ -	double	min,		/* value boundaries */ +	int	min,		/* value boundaries */  		max,  		inc;		/* increment for value changes */ @@ -382,6 +384,21 @@ static inline char *byte_units(const double bytes)  	return result;  } +/* Integer units - similar to %g for float. */ +static inline char *int_counts(uint32_t count) +{ +	static char result[0x10]; + +	if (count < 1000) +		sprintf(result, "%u", count); +	else if (count < 1000000) +		sprintf(result, "%uk", count/1000); +	else +		sprintf(result, "%.lg", (double)count); + +	return result; +} +  /**   * Compute exponentially weighted moving average   * @mavg:	old value of the moving average diff --git a/wavemonrc.5 b/wavemonrc.5 index 07356e4..e162fc8 100644 --- a/wavemonrc.5 +++ b/wavemonrc.5 @@ -1,4 +1,4 @@ -.TH wavemonrc 5 "January 2015" Linux "User Manuals" +.TH wavemonrc 5 "December 2018" Linux "User Manuals"  .SH NAME  $HOME/.wavemonrc \- wavemon configuration file  .SH DESCRIPTION @@ -145,6 +145,15 @@ will tell you when you should move closer to the base station.  Sets the threshold for the 'High threshold action'. Range: \-59..120dBm.  .P  .RE +.B transparent_bg = (on|off) +.RS +.RE +(Use transparent background) +.RS +If enabled, use a transparent background instead of black. This is +enabled by default and can only be turned off via the startup file. +.P +.RE  .B startup_screen = (info|histogram|scan window)  .RS  .RE | 
