summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ObsoleteFiles.inc2
-rw-r--r--UPDATING5
-rw-r--r--share/man/man4/ath.44
-rw-r--r--share/man/man4/ieee80211.41
-rw-r--r--share/man/man4/wi.45
-rw-r--r--share/man/man9/ieee80211_ioctl.96
-rw-r--r--tools/tools/tinybsd/conf/bridge/tinybsd.basefiles1
-rw-r--r--tools/tools/tinybsd/conf/default/tinybsd.basefiles1
-rw-r--r--tools/tools/tinybsd/conf/wireless/tinybsd.basefiles1
-rw-r--r--tools/tools/tinybsd/conf/wrap/tinybsd.basefiles1
-rw-r--r--usr.sbin/Makefile1
-rw-r--r--usr.sbin/wicontrol/Makefile9
-rw-r--r--usr.sbin/wicontrol/wicontrol.8591
-rw-r--r--usr.sbin/wicontrol/wicontrol.c1239
14 files changed, 7 insertions, 1860 deletions
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index fd5a327..4fd0bcd 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -14,6 +14,8 @@
# The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
#
+# 20070701: remove wicontrol
+OLD_FILES+=usr/sbin/wicontrol
# 20070625: umapfs removal
OLD_FILES+=rescue/mount_umapfs
OLD_FILES+=sbin/mount_umapfs
diff --git a/UPDATING b/UPDATING
index 14401aa..7abe697 100644
--- a/UPDATING
+++ b/UPDATING
@@ -21,6 +21,11 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 7.x IS SLOW:
developers choose to disable these features on build machines
to maximize performance.
+20070701:
+ The wicontrol(8) utility has been removed from the base system. wi(4)
+ cards should be configured using ifconfig(8), see the man page for more
+ information.
+
20070612:
By default, /etc/rc.d/sendmail no longer rebuilds the aliases
database if it is missing or older than the aliases file. If
diff --git a/share/man/man4/ath.4 b/share/man/man4/ath.4
index 5ee6996..c613836 100644
--- a/share/man/man4/ath.4
+++ b/share/man/man4/ath.4
@@ -262,7 +262,6 @@ This should not happen.
.Xr wi 4 ,
.Xr wlan 4 ,
.Xr ifconfig 8 ,
-.Xr wicontrol 8
.Sh HISTORY
The
.Nm
@@ -274,9 +273,6 @@ mode.
See
.Xr ifconfig 8
for information on how to change the channel.
-See
-.Xr wicontrol 8
-for information on different regulatory domains.
Different regulatory domains may not be able to communicate with each
other with 802.11a as different regulatory domains do not necessarily
have overlapping channels.
diff --git a/share/man/man4/ieee80211.4 b/share/man/man4/ieee80211.4
index ef20979..bbc8c5d 100644
--- a/share/man/man4/ieee80211.4
+++ b/share/man/man4/ieee80211.4
@@ -239,7 +239,6 @@ Set the powersave sleep time in msec to the value in
.Xr ancontrol 8 ,
.Xr ifconfig 8 ,
.Xr raycontrol 8 ,
-.Xr wicontrol 8
.Sh HISTORY
The
.Nm
diff --git a/share/man/man4/wi.4 b/share/man/man4/wi.4
index 3617901..51e9138 100644
--- a/share/man/man4/wi.4
+++ b/share/man/man4/wi.4
@@ -357,7 +357,6 @@ command.
.Xr pcic 4 ,
.Xr wlan 4 ,
.Xr ifconfig 8 ,
-.Xr wicontrol 8
.Rs
.%T HCF Light programming specification
.%O http://www.wavelan.com
@@ -380,10 +379,6 @@ mode.
See
.Xr ifconfig 8
for information on how to change the channel.
-See
-.Xr wicontrol 8
-for information on different regulatory domains.
-.Pp
The Intersil Prism family of chips' host-based access point mode has
bugs for station firmware versions prior to 0.8.3.
The driver currently precludes hostap functionality with older station
diff --git a/share/man/man9/ieee80211_ioctl.9 b/share/man/man9/ieee80211_ioctl.9
index 502577d..7f94bce 100644
--- a/share/man/man9/ieee80211_ioctl.9
+++ b/share/man/man9/ieee80211_ioctl.9
@@ -55,11 +55,6 @@ and
.Fn ieee80211_cfgset
functions implement a legacy interface for getting and setting 802.11
interface attributes respectively.
-The interface is compatible with the RIDs implemented by the legacy
-.Xr owi 4
-driver and used by the
-.Xr wicontrol 8
-utility.
.Pp
.\"
The
@@ -80,7 +75,6 @@ to use this as the catch-all in a switch statement to avoid code duplication.
.\"
.Sh SEE ALSO
.Xr ifconfig 8 ,
-.Xr wicontrol 8 ,
.Xr ieee80211 9 ,
.Xr ifnet 9
.Sh HISTORY
diff --git a/tools/tools/tinybsd/conf/bridge/tinybsd.basefiles b/tools/tools/tinybsd/conf/bridge/tinybsd.basefiles
index 3bfcbc2..63a860e 100644
--- a/tools/tools/tinybsd/conf/bridge/tinybsd.basefiles
+++ b/tools/tools/tinybsd/conf/bridge/tinybsd.basefiles
@@ -220,7 +220,6 @@ usr/sbin/vidcontrol
usr/sbin/vipw
usr/sbin/vnconfig
usr/sbin/watch
-usr/sbin/wicontrol
usr/sbin/pccardc
usr/sbin/pccardd
diff --git a/tools/tools/tinybsd/conf/default/tinybsd.basefiles b/tools/tools/tinybsd/conf/default/tinybsd.basefiles
index dbe0358..4db705f 100644
--- a/tools/tools/tinybsd/conf/default/tinybsd.basefiles
+++ b/tools/tools/tinybsd/conf/default/tinybsd.basefiles
@@ -231,7 +231,6 @@ usr/sbin/vidcontrol
usr/sbin/vipw
usr/sbin/vnconfig
usr/sbin/watch
-usr/sbin/wicontrol
usr/sbin/pccardc
usr/sbin/pccardd
diff --git a/tools/tools/tinybsd/conf/wireless/tinybsd.basefiles b/tools/tools/tinybsd/conf/wireless/tinybsd.basefiles
index 6029e98..e37dade 100644
--- a/tools/tools/tinybsd/conf/wireless/tinybsd.basefiles
+++ b/tools/tools/tinybsd/conf/wireless/tinybsd.basefiles
@@ -218,7 +218,6 @@ usr/sbin/vidcontrol
usr/sbin/vipw
usr/sbin/vnconfig
usr/sbin/watch
-usr/sbin/wicontrol
usr/sbin/pccardc
usr/sbin/pccardd
diff --git a/tools/tools/tinybsd/conf/wrap/tinybsd.basefiles b/tools/tools/tinybsd/conf/wrap/tinybsd.basefiles
index 6029e98..e37dade 100644
--- a/tools/tools/tinybsd/conf/wrap/tinybsd.basefiles
+++ b/tools/tools/tinybsd/conf/wrap/tinybsd.basefiles
@@ -218,7 +218,6 @@ usr/sbin/vidcontrol
usr/sbin/vipw
usr/sbin/vnconfig
usr/sbin/watch
-usr/sbin/wicontrol
usr/sbin/pccardc
usr/sbin/pccardd
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile
index 83b570b..6beb157 100644
--- a/usr.sbin/Makefile
+++ b/usr.sbin/Makefile
@@ -181,7 +181,6 @@ SUBDIR= ac \
vipw \
watch \
watchdogd \
- wicontrol \
${_wlconfig} \
wpa \
${_ypbind} \
diff --git a/usr.sbin/wicontrol/Makefile b/usr.sbin/wicontrol/Makefile
deleted file mode 100644
index b8ac802..0000000
--- a/usr.sbin/wicontrol/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# $FreeBSD$
-
-PROG= wicontrol
-MAN= wicontrol.8
-
-WARNS?= 2
-CFLAGS+= -DWICACHE
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/wicontrol/wicontrol.8 b/usr.sbin/wicontrol/wicontrol.8
deleted file mode 100644
index 2eadec5..0000000
--- a/usr.sbin/wicontrol/wicontrol.8
+++ /dev/null
@@ -1,591 +0,0 @@
-.\" Copyright (c) 1997, 1998, 1999
-.\" Bill Paul <wpaul@ctr.columbia.edu> All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by Bill Paul.
-.\" 4. Neither the name of the author nor the names of any co-contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
-.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-.\" THE POSSIBILITY OF SUCH DAMAGE.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd October 12, 2006
-.Dt WICONTROL 8
-.Os
-.Sh NAME
-.Nm wicontrol
-.Nd "configure Lucent, Intersil, and Atheros wireless devices"
-.Sh SYNOPSIS
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl o
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl l
-(dump associated stations)
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl L
-(list available access points)
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl t Ar tx_rate
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl n Ar network_name
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl s Ar station_name
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl c Cm 0 | 1
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl q Ar SSID
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl p Ar port_type
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl a Ar access_point_density
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl m Ar mac_address
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl d Ar max_data_length
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl e Cm 0 | 1
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl k Ar key
-.Op Fl v Cm 1 | 2 | 3 | 4
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl r Ar RTS_threshold
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl f Ar frequency
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl F Cm 0 | 1
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl P Cm 0 | 1
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl S Ar max_sleep_duration
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl T Cm 1 | 2 | 3 | 4
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl Z
-(zero signal cache)
-.Nm
-.Op Oo Fl i Oc Ar iface
-.Fl C
-(display signal cache)
-.Sh DESCRIPTION
-The
-.Nm
-utility controls the operation of Lucent, Intersil, and Atheros-based wireless
-networking devices via
-.Xr wi 4
-or
-.Xr ath 4
-driver.
-.Pp
-You should not use this program to configure IEEE 802.11 parameters.
-Use
-.Xr ifconfig 8
-instead to do those tasks (i.e., set SSID, WEP key, etc.).
-.Pp
-The
-.Nm
-utility can also be used to view the current settings of these parameters,
-dump out the values of the card's statistics counters, list associated
-stations (in HostAP mode), and scan for available access points.
-.Pp
-The
-.Ar iface
-argument given to
-.Nm
-should be the logical interface name associated with the Lucent, Intersil,
-and Atheros device
-.Li ( wi0 , wi1 , ath0 ,
-etc.).
-If none is specified then
-.Dq Li wi0
-is used as default.
-.Sh OPTIONS
-In the first synopsis form,
-.Nm
-displays the current settings of the specified wireless interface.
-It retrieves the current card settings from the driver and prints them
-out.
-.Pp
-The options are as follows:
-.Bl -tag -width indent
-.It Fl o
-Print out the statistics counters instead of the card settings.
-Encryption keys are only displayed if
-.Nm
-is run as root.
-.It Fl a Ar access_point_density
-Specify the
-access point density
-for a given interface.
-Legal values are
-.Cm 1
-(low),
-.Cm 2
-(medium) and
-.Cm 3
-(high).
-This setting influences some of the radio modem threshold settings.
-.It Fl m Ar mac_address
-Set the station address for the specified interface.
-The
-.Ar mac_address
-is specified as a series of six hexadecimal values separated by colons,
-e.g.,
-.Dq Li 00:60:1d:12:34:56 .
-This programs the new address into the card
-and updates the interface as well.
-.It Fl d Ar max_data_length
-Set the maximum receive and transmit frame size for a specified interface.
-The
-.Ar max_data_length
-can be any number from 350 to 2304.
-The default is 2304.
-.It Fl r Ar RTS_threshold
-Set the RTS/CTS threshold for a given interface.
-This controls the
-number of bytes used for the RTS/CTS handshake boundary.
-The
-.Ar RTS_threshold
-can be any value between 0 and 2347.
-The default is 2347.
-.It Fl Z
-Clear the signal strength cache maintained internally by the
-.Xr wi 4
-driver.
-.It Fl C
-Display the cached signal strength information maintained by the
-.Xr wi 4
-driver.
-The driver retains information about signal strength and
-noise level for packets received from different hosts.
-The signal
-strength and noise level values are displayed in units of dBms.
-The signal quality value is produced by subtracting the noise level
-from the signal strength (i.e., less noise and better signal yields
-better signal quality).
-.El
-.Sh DEPRECATED AND OBSOLETE OPTIONS
-The
-.Nm
-utility has a number of options that are now deprecated or obsolete, as they
-have been overtaken by extensions to
-.Xr ifconfig 8
-and changes to the driver.
-The deprecated and obsolete options are as follows:
-.Bl -tag -width indent
-.It Fl t Ar tx_rate
-This flag is deprecated.
-Use
-.Xr ifconfig 8
-.Cm mediaopt
-instead.
-.Pp
-Set the transmit rate of the specified interface.
-The legal values
-for the transmit rate vary depending on whether the interface is a
-standard WaveLAN/IEEE or a WaveLAN/IEEE Turbo adapter.
-The standard
-NICs support a maximum transmit rate of 2Mbps while the turbo NICs
-support a maximum speed of 6Mbps.
-The following table shows the
-legal transmit rate settings and the corresponding transmit speeds:
-.Bl -column ".Em TX\ rate" ".Em NIC\ speed" -offset indent
-.Em "TX rate NIC speed"
-.It Cm 1 Ta "Fixed Low (1Mbps)"
-.It Cm 2 Ta "Fixed Standard (2Mbps)"
-.It Cm 3 Ta "Auto Rate Select (High)"
-.It Cm 4 Ta "Fixed Medium (4Mbps)"
-.It Cm 5 Ta "Fixed High (6Mbps)"
-.It Cm 6 Ta "Auto Rate Select (Standard)"
-.It Cm 7 Ta "Auto Rate Select (Medium)"
-.El
-.Pp
-The default driver setting is
-.Cm 3
-(auto rate select).
-The numbers vary from card to card.
-.It Fl n Ar network_name
-This flag is deprecated.
-Use
-.Xr ifconfig 8
-.Cm ssid
-or
-.Cm nwid
-instead.
-.Pp
-Set the name of the service set (IBSS) that this station wishes to
-join.
-The
-.Ar network_name
-can be any text string up to 30 characters in length.
-The default name
-is the string
-.Dq Li ANY
-which should allow the station to connect to the first
-available access point.
-The interface should be set for BSS mode using
-the
-.Fl p
-flag in order for this to work.
-.Pp
-Note: the WaveLAN manual indicates that an empty string will allow the
-host to connect to any access point, however I have also seen a reference
-in another driver which indicates that the
-.Dq Li ANY
-string works as well.
-.It Fl s Ar station_name
-This flag is deprecated.
-Use
-.Xr ifconfig 8
-.Cm stationname
-or
-.Cm station
-instead.
-.Pp
-Sets the
-station name
-for the specified interface.
-The
-.Ar station_name
-is used for diagnostic purposes.
-The
-.Tn "Lucent WaveMANAGER"
-software can
-poll the names of remote hosts.
-.It Fl c Cm 0 | 1
-This flag is deprecated.
-IBSS networks are automatically created on those cards whose firmware
-supports it while in IBSS mode.
-.Pp
-Allow the station to create a service set (IBSS).
-Permitted values are
-.Cm 0
-(do not create IBSS) and
-.Cm 1
-(enable creation of IBSS).
-The default is
-.Cm 0 .
-.Pp
-Only newer versions of the Lucent firmware support this.
-.It Fl q Ar SSID
-This flag is deprecated.
-The
-.Cm ssid
-setting from
-.Xr ifconfig 8
-is the current preferred way of setting this parameter.
-.Pp
-Specify the name of an IBSS (SSID) to create on a given interface.
-The
-.Ar SSID
-can be any text string up to 30 characters long.
-.Pp
-Note: this option is provided for experimental purposes only: enabling
-the creation of an IBSS on a host system does not appear to actually work.
-.It Fl p Ar port_type
-This flag is deprecated.
-It should never be used.
-Do not use this flag.
-Its meaning depends on the type of card you are using, as well as the
-firmware you have installed in the card in some cases.
-Beware.
-Danger.
-Do not use.
-Instead, use the
-.Xr ifconfig 8
-.Cm media
-and
-.Cm mediaopt
-commands.
-.Pp
-Set the
-port type
-for a specified interface.
-The legal values for
-.Ar port_type
-are
-.Cm 1
-(BSS mode) and
-.Cm 3
-(ad-hoc) mode.
-In ad-hoc mode, the station can
-communicate directly with any other stations within direct radio range
-(provided that they are also operating in ad-hoc mode).
-In BSS mode,
-hosts must associate with a service set controlled by an access point,
-which relays traffic between end stations.
-The default setting is
-.Cm 1
-(BSS mode).
-Lucent cards have one set of meanings.
-Prism cards have another.
-Symbol cards have a third.
-Do not use this flag.
-.It Fl e Cm 0 | 1
-This flag is deprecated.
-It has been replaced by the
-.Xr ifconfig 8
-.Cm wepmode
-option.
-.Pp
-Enable or disable WEP encryption.
-Permitted values are
-.Cm 0
-(encryption disabled) or
-.Cm 1
-(encryption enabled).
-Encryption is off by default.
-.Pp
-Both 128-bit and 64-bit WEP have been broken.
-See the
-.Sx BUGS
-section for details.
-.It Fl k Ar key Op Fl v Cm 1 | 2 | 3 | 4
-This flag is obsolete.
-The
-.Xr ifconfig 8
-.Cm wepkey
-should be used instead.
-.Pp
-Set WEP encryption keys.
-There are four default encryption keys
-that can be programmed.
-A specific key can be set using
-the
-.Fl v
-flag.
-If the
-.Fl v
-flag is not specified, the first key will be set.
-Encryption keys
-can either be normal text (i.e.,
-.Dq Li hello )
-or a series of hexadecimal digits (i.e.,
-.Dq Li 0x1234512345 ) .
-For
-WaveLAN Turbo Silver cards, the key is restricted to 40 bits, hence
-the key can be either a 5 character text string or 10 hex digits.
-For WaveLAN Turbo Gold cards, the key can also be 104 bits,
-which means the key can be specified as either a 13 character text
-string or 26 hex digits in addition to the formats supported by the
-Silver cards.
-.Pp
-For maximum portability, hex keys are recommended;
-the mapping of text keys to WEP encryption is usually driver-specific.
-In particular, the
-.Tn Windows
-drivers do this mapping differently to
-.Fx .
-.Pp
-Note: Both 128-bit and 64-bit WEP encryption have been broken.
-See the
-.Sx BUGS
-section for details.
-.It Fl T Cm 1 | 2 | 3 | 4
-This flag is obsolete.
-The
-.Xr ifconfig 8
-.Cm weptxkey
-should be used instead.
-.Pp
-Specify which of the four WEP encryption keys will be used to
-encrypt transmitted packets.
-.Pp
-Note: Both 128-bit and 64-bit WEP have been broken.
-See the
-.Sx BUGS
-section for details.
-.It Fl f Ar frequency
-This flag is deprecated.
-Use
-.Xr ifconfig 8
-.Cm channel
-instead.
-.Pp
-Set the radio frequency of a given interface.
-The
-.Ar frequency
-should be specified as a channel ID as shown in the table below.
-The
-list of available frequencies is dependent on radio regulations specified
-by regional authorities.
-Recognized regulatory authorities include
-the FCC (United States), ETSI (Europe), France and Japan.
-Frequencies
-in the table are specified in MHz.
-.Bl -column ".Em Channel\ ID" ".Em FCC" ".Em ETSI" ".Em France" ".Em Japan" -offset indent
-.Em "Channel ID FCC ETSI France Japan"
-.It Cm 1 Ta "2412 2412 - 2412"
-.It Cm 2 Ta "2417 2417 - 2417"
-.It Cm 3 Ta "2422 2422 - 2422"
-.It Cm 4 Ta "2427 2427 - 2427"
-.It Cm 5 Ta "2432 2432 - 2432"
-.It Cm 6 Ta "2437 2437 - 2437"
-.It Cm 7 Ta "2442 2442 - 2442"
-.It Cm 8 Ta "2447 2447 - 2447"
-.It Cm 9 Ta "2452 2452 - 2452"
-.It Cm 10 Ta "2457 2457 2457 2457"
-.It Cm 11 Ta "2462 2462 2462 2462"
-.It Cm 12 Ta "- 2467 2467 2467"
-.It Cm 13 Ta "- 2472 2472 2472"
-.It Cm 14 Ta "- - - 2484"
-.El
-.Pp
-If an illegal channel is specified, the
-NIC will revert to its default channel.
-For NICs sold in the United States
-and Europe, the default channel is
-.Cm 3 .
-For NICs sold in France, the default channel is
-.Cm 11 .
-For NICs sold in Japan, the default channel is
-.Cm 14 ,
-and it is the only available channel for pre-11Mbps NICs.
-Note that two stations must be set to the same channel in order to
-communicate.
-.It Fl P Cm 0 | 1
-This flag is obsolete.
-The
-.Xr ifconfig 8
-.Cm powersave
-should be used instead.
-.Pp
-Enable or disable power management on a given interface.
-Enabling
-power management uses an alternating sleep/wake protocol to help
-conserve power on mobile stations, at the cost of some increased
-receive latency.
-Power management is off by default.
-Note that power
-management requires the cooperation of an access point in order to
-function; it is not functional in ad-hoc mode.
-Also, power management
-is only implemented in Lucent WavePOINT firmware version 2.03 or
-later, and in WaveLAN PCMCIA adapter firmware 2.00 or later.
-Older
-revisions will silently ignore the power management setting.
-Legal
-values for this parameter are
-.Cm 0
-(off) and
-.Cm 1
-(on).
-.It Fl S Ar max_sleep_interval
-This flag is obsolete.
-The
-.Xr ifconfig 8
-.Cm powersavesleep
-should be used instead.
-.Pp
-Specify the sleep interval to use when power management is enabled.
-The
-.Ar max_sleep_interval
-is specified in milliseconds.
-The default is 100.
-.El
-.Sh SEE ALSO
-.Xr ath 4 ,
-.Xr awi 4 ,
-.Xr ipsec 4 ,
-.Xr wi 4 ,
-.Xr ifconfig 8
-.Sh HISTORY
-The
-.Nm
-utility first appeared in
-.Fx 3.0 .
-.Sh AUTHORS
-The
-.Nm
-utility was written by
-.An Bill Paul Aq wpaul@ctr.columbia.edu .
-.Sh BUGS
-There are deprecated flags here that duplicate functionality of
-.Xr ifconfig 8 .
-These flags were deprecated in
-.Fx 5.1
-and will be removed in a future release.
-.Pp
-The WEP encryption method has been broken so that third parties
-can recover the keys in use relatively quickly at distances that are
-surprising to most people.
-Do not rely on WEP for anything but the most basic, remedial security.
-IPSEC will give you a higher level of security and should be used
-whenever possible.
-Do not trust access points or wireless machines that connect through
-them as they can provide no assurance that the traffic is legitimate.
-MAC addresses can easily be forged and should therefore not be used as
-the only access control.
-.Pp
-The attack on WEP is a passive attack, requiring only the ability to
-sniff packets on the network.
-The passive attack can be launched at a distance larger, up to many
-miles, than one might otherwise expect given a specialized antenna
-used in point to point applications.
-The attacker can recover the keys from a 128-bit WEP network with only
-5,000,000 to 6,000,000 packets.
-While this may sound like a large number of packets, empirical
-evidence suggests that this amount of traffic is generated in a few
-hours on a partially loaded network.
-Once a key has been compromised, the only remedial action is to
-discontinue it and use a new key.
-.Pp
-See
-.Pa http://www.cs.rice.edu/~astubble/wep/wep_attack.html
-for details of the attack.
-Many programs to assist in cracking WEP keys are widely available.
-.Pp
-If you must use WEP, you are strongly encouraged to pick keys whose
-bytes are random and not confined to
-.Tn ASCII
-characters.
-Brute force attacks on WEP keys are also possible.
-Experience has showns that
-.Tn ASCII
-keys can be cracked in less than a day.
-Even random bytes can be cracked in less than two weeks.
-.Pp
-Signal cache is broken right now.
diff --git a/usr.sbin/wicontrol/wicontrol.c b/usr.sbin/wicontrol/wicontrol.c
deleted file mode 100644
index 0a02986..0000000
--- a/usr.sbin/wicontrol/wicontrol.c
+++ /dev/null
@@ -1,1239 +0,0 @@
-/*
- * Copyright (c) 1997, 1998, 1999
- * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Bill Paul.
- * 4. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#if 0
-#ifndef lint
-static const char copyright[] = "@(#) Copyright (c) 1997, 1998, 1999\
- Bill Paul. All rights reserved.";
-#endif /* not lint */
-#endif
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/types.h>
-#include <sys/cdefs.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-
-#include <net/if.h>
-#include <net/if_var.h>
-#include <net/ethernet.h>
-
-#include <net80211/ieee80211.h>
-#include <net80211/ieee80211_ioctl.h>
-#include <dev/wi/if_wavelan_ieee.h>
-#include <dev/wi/if_wireg.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <errno.h>
-#include <err.h>
-
-static int wi_getval(const char *, struct wi_req *);
-static int wi_getvalmaybe(const char *, struct wi_req *);
-static void wi_setval(const char *, struct wi_req *);
-static void wi_printstr(struct wi_req *);
-static void wi_setstr(const char *, int, char *);
-static void wi_setbytes(const char *, int, char *, int);
-static void wi_setword(const char *, int, int);
-static void wi_sethex(const char *, int, char *);
-static void wi_printwords(struct wi_req *);
-static void wi_printbool(struct wi_req *);
-static void wi_printhex(struct wi_req *);
-static void wi_printaps(struct wi_req *);
-static void wi_dumpinfo(const char *);
-static void wi_dumpstats(const char *);
-static void wi_setkeys(const char *, char *, int);
-static void wi_printkeys(struct wi_req *);
-static void wi_printaplist(const char *);
-static int wi_hex2int(char);
-static void wi_str2key(char *, struct wi_key *);
-#ifdef WICACHE
-static void wi_zerocache(const char *);
-static void wi_readcache(const char *);
-#endif
-static void usage(const char *);
-static int listaps;
-static int quiet;
-
-/*
- * Print a value a la the %b format of the kernel's printf
- * (ripped screaming from ifconfig/ifconfig.c)
- */
-void
-printb(char *s, uint32_t v, char *bits)
-{
- int i, any = 0;
- char c;
-
- if (bits && *bits == 8)
- printf("%s=%o", s, v);
- else
- printf("%s=%x", s, v);
- bits++;
- if (bits) {
- putchar('<');
- while ((i = *bits++)) {
- if (v & (1 << (i-1))) {
- if (any)
- putchar(',');
- any = 1;
- for (; (c = *bits) > 32; bits++)
- putchar(c);
- } else
- for (; *bits > 32; bits++)
- ;
- }
- putchar('>');
- }
-}
-
-static int
-_wi_getval(const char *iface, struct wi_req *wreq)
-{
- struct ifreq ifr;
- int s;
- int retval;
-
- bzero((char *)&ifr, sizeof(ifr));
-
- strlcpy(ifr.ifr_name, iface, sizeof(ifr.ifr_name));
- ifr.ifr_data = (caddr_t)wreq;
-
- s = socket(AF_INET, SOCK_DGRAM, 0);
- if (s == -1)
- err(1, "socket");
- retval = ioctl(s, SIOCGWAVELAN, &ifr);
- close(s);
-
- return (retval);
-}
-
-static int
-wi_getval(const char *iface, struct wi_req *wreq)
-{
- if (_wi_getval(iface, wreq) == -1) {
- if (errno != EINPROGRESS)
- err(1, "SIOCGWAVELAN");
- return (-1);
- }
- return (0);
-}
-
-static int
-wi_getvalmaybe(const char *iface, struct wi_req *wreq)
-{
- if (_wi_getval(iface, wreq) == -1) {
- if (errno != EINPROGRESS && errno != EINVAL)
- err(1, "SIOCGWAVELAN");
- return (-1);
- }
- return (0);
-}
-
-static void
-wi_setval(const char *iface, struct wi_req *wreq)
-{
- struct ifreq ifr;
- int s;
-
- bzero((char *)&ifr, sizeof(ifr));
-
- strlcpy(ifr.ifr_name, iface, sizeof(ifr.ifr_name));
- ifr.ifr_data = (caddr_t)wreq;
-
- s = socket(AF_INET, SOCK_DGRAM, 0);
-
- if (s == -1)
- err(1, "socket");
-
- if (ioctl(s, SIOCSWAVELAN, &ifr) == -1)
- err(1, "SIOCSWAVELAN");
-
- close(s);
-
- return;
-}
-
-void
-wi_printstr(struct wi_req *wreq)
-{
- char *ptr;
- int i;
-
- if (wreq->wi_type == WI_RID_SERIALNO) {
- ptr = (char *)&wreq->wi_val;
- for (i = 0; i < (wreq->wi_len - 1) * 2; i++) {
- if (ptr[i] == '\0')
- ptr[i] = ' ';
- }
- } else {
- ptr = (char *)&wreq->wi_val[1];
- for (i = 0; i < wreq->wi_val[0]; i++) {
- if (ptr[i] == '\0')
- ptr[i] = ' ';
- }
- }
-
- ptr[i] = '\0';
- printf("[ %s ]", ptr);
-
- return;
-}
-
-void
-wi_setstr(const char *iface, int code, char *str)
-{
- struct wi_req wreq;
-
- if (iface == NULL)
- errx(1, "must specify interface name");
-
- if (str == NULL)
- errx(1, "must specify string");
-
- bzero((char *)&wreq, sizeof(wreq));
-
- if (strlen(str) > 30)
- errx(1, "string too long");
-
- wreq.wi_type = code;
- wreq.wi_len = 18;
- wreq.wi_val[0] = strlen(str);
- bcopy(str, (char *)&wreq.wi_val[1], strlen(str));
-
- wi_setval(iface, &wreq);
-
- return;
-}
-
-void
-wi_setbytes(const char *iface, int code, char *bytes, int len)
-{
- struct wi_req wreq;
-
- if (iface == NULL)
- errx(1, "must specify interface name");
-
- bzero((char *)&wreq, sizeof(wreq));
-
- wreq.wi_type = code;
- wreq.wi_len = (len / 2) + 1;
- bcopy(bytes, (char *)&wreq.wi_val[0], len);
-
- wi_setval(iface, &wreq);
-
- return;
-}
-
-void
-wi_setword(const char *iface, int code, int word)
-{
- struct wi_req wreq;
-
- bzero((char *)&wreq, sizeof(wreq));
-
- wreq.wi_type = code;
- wreq.wi_len = 2;
- wreq.wi_val[0] = word;
-
- wi_setval(iface, &wreq);
-
- return;
-}
-
-void
-wi_sethex(const char *iface, int code, char *str)
-{
- struct ether_addr *addr;
-
- if (str == NULL)
- errx(1, "must specify address");
-
- addr = ether_aton(str);
-
- if (addr == NULL)
- errx(1, "badly formatted address");
-
- wi_setbytes(iface, code, (char *)addr, ETHER_ADDR_LEN);
-
- return;
-}
-
-static int
-wi_hex2int(char c)
-{
- if (c >= '0' && c <= '9')
- return (c - '0');
- if (c >= 'A' && c <= 'F')
- return (c - 'A' + 10);
- if (c >= 'a' && c <= 'f')
- return (c - 'a' + 10);
-
- return (0);
-}
-
-static void
-wi_str2key(char *s, struct wi_key *k)
-{
- int n, i;
- char *p;
-
- /* Is this a hex string? */
- if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) {
- /* Yes, convert to int. */
- n = 0;
- p = (char *)&k->wi_keydat[0];
- for (i = 2; s[i] != '\0' && s[i + 1] != '\0'; i+= 2) {
- *p++ = (wi_hex2int(s[i]) << 4) + wi_hex2int(s[i + 1]);
- n++;
- }
- if (s[i] != '\0')
- errx(1, "hex strings must be of even length");
- k->wi_keylen = n;
- } else {
- /* No, just copy it in. */
- bcopy(s, k->wi_keydat, strlen(s));
- k->wi_keylen = strlen(s);
- }
-
- return;
-}
-
-static void
-wi_setkeys(const char *iface, char *key, int idx)
-{
- int keylen;
- struct wi_req wreq;
- struct wi_ltv_keys *keys;
- struct wi_key *k;
- int has_wep;
-
- bzero((char *)&wreq, sizeof(wreq));
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = WI_RID_WEP_AVAIL;
-
- if (wi_getval(iface, &wreq) == 0)
- has_wep = wreq.wi_val[0];
- else
- has_wep = 0;
- if (!has_wep)
- errx(1, "no WEP option available on this card");
-
- bzero((char *)&wreq, sizeof(wreq));
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = WI_RID_DEFLT_CRYPT_KEYS;
-
- if (wi_getval(iface, &wreq) == -1)
- errx(1, "Cannot get default key index");
- keys = (struct wi_ltv_keys *)&wreq;
-
- keylen = strlen(key);
- if (key[0] == '0' && (key[1] == 'x' || key[1] == 'X')) {
- if (keylen != 2 && keylen != 12 && keylen != 28) {
- errx(1, "encryption key must be 0, 10, or 26 "
- "hex digits long");
- }
- } else {
- if (keylen != 0 && keylen != 5 && keylen != 13) {
- errx(1, "encryption key must be 0, 5, or 13 "
- "bytes long");
- }
- }
-
- if (idx > 3)
- errx(1, "only 4 encryption keys available");
-
- k = &keys->wi_keys[idx];
- wi_str2key(key, k);
-
- wreq.wi_len = (sizeof(struct wi_ltv_keys) / 2) + 1;
- wreq.wi_type = WI_RID_DEFLT_CRYPT_KEYS;
- wi_setval(iface, &wreq);
-
- return;
-}
-
-static void
-wi_printkeys(struct wi_req *wreq)
-{
- int i, j;
- int isprintable;
- struct wi_key *k;
- struct wi_ltv_keys *keys;
- char *ptr;
-
- keys = (struct wi_ltv_keys *)wreq;
-
- for (i = 0; i < 4; i++) {
- k = &keys->wi_keys[i];
- ptr = (char *)k->wi_keydat;
- isprintable = 1;
- for (j = 0; j < k->wi_keylen; j++) {
- if (!isprint(ptr[j])) {
- isprintable = 0;
- break;
- }
- }
- if (isprintable) {
- ptr[j] = '\0';
- printf("[ %s ]", ptr);
- } else {
- printf("[ 0x");
- for (j = 0; j < k->wi_keylen; j++) {
- printf("%02x", ptr[j] & 0xFF);
- }
- printf(" ]");
-
- }
- }
-
- return;
-}
-
-void
-wi_printwords(struct wi_req *wreq)
-{
- int i;
-
- printf("[ ");
- for (i = 0; i < wreq->wi_len - 1; i++)
- printf("%d ", wreq->wi_val[i]);
- printf("]");
-
- return;
-}
-
-void
-wi_printswords(struct wi_req *wreq)
-{
- int i;
-
- printf("[ ");
- for (i = 0; i < wreq->wi_len - 1; i++)
- printf("%d ", ((int16_t *) wreq->wi_val)[i]);
- printf("]");
-
- return;
-}
-
-void
-wi_printhexwords(struct wi_req *wreq)
-{
- int i;
-
- printf("[ ");
- for (i = 0; i < wreq->wi_len - 1; i++)
- printf("%x ", wreq->wi_val[i]);
- printf("]");
-
- return;
-}
-
-void
-wi_printregdoms(struct wi_req *wreq)
-{
- int i;
- struct wi_ltv_domains *regdom = (struct wi_ltv_domains *)wreq;
-
- printf("[ ");
- for (i = 0; i < regdom->wi_num_dom; i++) {
- switch (regdom->wi_domains[i]) {
- case 0x10: printf("usa"); break;
- case 0x20: printf("canada"); break;
- case 0x30: printf("eu/au"); break;
- case 0x31: printf("es"); break;
- case 0x32: printf("fr"); break;
- case 0x40: printf("jp"); break;
- case 0x41: printf("jp new"); break;
- default: printf("0x%x", regdom->wi_domains[i]); break;
- }
- if (i < regdom->wi_num_dom - 1)
- printf(", ");
- }
- printf(" ]");
-
- return;
-}
-
-void
-wi_printbool(struct wi_req *wreq)
-{
- if (wreq->wi_val[0])
- printf("[ On ]");
- else
- printf("[ Off ]");
-
- return;
-}
-
-void
-wi_printhex(struct wi_req *wreq)
-{
- int i;
- unsigned char *c;
-
- c = (unsigned char *)&wreq->wi_val;
-
- printf("[ ");
- for (i = 0; i < (wreq->wi_len - 1) * 2; i++) {
- printf("%02x", c[i]);
- if (i < ((wreq->wi_len - 1) * 2) - 1)
- printf(":");
- }
-
- printf(" ]");
- return;
-}
-
-static float
-get_wiaprate(int inrate)
-{
- float rate;
-
- switch (inrate) {
- case WI_APRATE_1:
- rate = 1;
- break;
- case WI_APRATE_2:
- rate = 2;
- break;
- case WI_APRATE_5:
- rate = 5.5;
- break;
- case WI_APRATE_11:
- rate = 11;
- break;
-#ifdef WI_APRATE_0
- case WI_APRATE_0:
-#endif
- default:
- rate = 0;
- break;
- }
-
- return (rate);
-}
-
-void
-wi_printaplist(const char *iface)
-{
- int prism2, len, i = 0, j, r;
- struct wi_req wreq;
- struct wi_scan_p2_hdr *wi_p2_h;
- struct wi_scan_res *res;
- float rate;
-
- if (!quiet)
- printf("Available APs:\n");
-
- /* first determine if this is a prism2 card or not */
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = WI_RID_PRISM2;
-
- if (wi_getval(iface, &wreq) == 0)
- prism2 = wreq.wi_val[0];
- else
- prism2 = 0;
-
- /* send out a scan request */
- wreq.wi_len = prism2 ? 3 : 1;
- wreq.wi_type = WI_RID_SCAN_REQ;
-
- if (prism2) {
- wreq.wi_val[0] = 0x3FFF;
- wreq.wi_val[1] = 0x000F;
- }
-
- wi_setval(iface, &wreq);
-
- do {
- /*
- * sleep for 100 milliseconds so there's enough time for the card to
- * respond... prism2's take a little longer.
- */
- usleep(prism2 ? 500000 : 100000);
-
- /* get the scan results */
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = WI_RID_SCAN_RES;
- } while (wi_getval(iface, &wreq) == -1 && errno == EINPROGRESS);
-
- if (prism2) {
- wi_p2_h = (struct wi_scan_p2_hdr *)wreq.wi_val;
-
- /* if the reason is 0, this info is invalid */
- if (wi_p2_h->wi_reason == 0)
- return;
-
- i = 4;
- }
-
- len = prism2 ? WI_PRISM2_RES_SIZE : WI_WAVELAN_RES_SIZE;
-
- if (!quiet) {
- int nstations = ((wreq.wi_len * 2) - i) / len;
- printf("%d station%s:\n", nstations, nstations == 1 ? "" : "s");
- printf("%-16.16s BSSID Chan SN S N Intrvl Capinfo\n", "SSID");
- }
- for (; i < (wreq.wi_len * 2) - len; i += len) {
- res = (struct wi_scan_res *)((char *)wreq.wi_val + i);
-
- res->wi_ssid[res->wi_ssid_len] = '\0';
-
- printf("%-16.16s [ %02x:%02x:%02x:%02x:%02x:%02x ] [ %-2d ] "
- "[ %2d %2d %2d ] %3d ", res->wi_ssid,
- res->wi_bssid[0], res->wi_bssid[1], res->wi_bssid[2],
- res->wi_bssid[3], res->wi_bssid[4], res->wi_bssid[5],
- res->wi_chan, res->wi_signal - res->wi_noise,
- res->wi_signal, res->wi_noise, res->wi_interval);
-
- if (!quiet && res->wi_capinfo) {
- printf("[ ");
- if (res->wi_capinfo & WI_CAPINFO_ESS)
- printf("ess ");
- if (res->wi_capinfo & WI_CAPINFO_IBSS)
- printf("ibss ");
- if (res->wi_capinfo & IEEE80211_CAPINFO_CF_POLLABLE)
- printf("cfp ");
- if (res->wi_capinfo & IEEE80211_CAPINFO_CF_POLLREQ)
- printf("cfpr ");
- if (res->wi_capinfo & WI_CAPINFO_PRIV)
- printf("priv ");
- if (res->wi_capinfo & IEEE80211_CAPINFO_SHORT_PREAMBLE)
- printf("shpr ");
- if (res->wi_capinfo & IEEE80211_CAPINFO_PBCC)
- printf("pbcc ");
- if (res->wi_capinfo & IEEE80211_CAPINFO_CHNL_AGILITY)
- printf("chna ");
- if (res->wi_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME)
- printf("shst ");
- if (res->wi_capinfo & IEEE80211_CAPINFO_DSSSOFDM)
- printf("ofdm ");
- printf("] ");
- }
-
- if (prism2 && res->wi_srates[0] != 0) {
- printf("\n%16s [ ", "");
- for (j = 0; j < 10 && res->wi_srates[j] != 0; j++) {
- r = res->wi_srates[j] & IEEE80211_RATE_VAL;
- if (r & 1)
- printf("%d.%d", r / 2, (r % 2) * 5);
- else
- printf("%d", r / 2);
- printf("%s ", res->wi_srates[j] & IEEE80211_RATE_BASIC ? "b" : "");
- }
- printf("] ");
- rate = get_wiaprate(res->wi_rate);
- if (rate)
- printf("* %2.1f *\n", rate);
- }
- putchar('\n');
- }
-}
-
-#define WI_STRING 0x01
-#define WI_BOOL 0x02
-#define WI_WORDS 0x03
-#define WI_HEXBYTES 0x04
-#define WI_KEYSTRUCT 0x05
-#define WI_SWORDS 0x06
-#define WI_HEXWORDS 0x07
-#define WI_REGDOMS 0x08
-
-struct wi_table {
- int wi_code;
- int wi_type;
- const char *wi_str;
-};
-
-static struct wi_table wi_table[] = {
- { WI_RID_SERIALNO, WI_STRING, "NIC serial number:\t\t\t" },
- { WI_RID_NODENAME, WI_STRING, "Station name:\t\t\t\t" },
- { WI_RID_OWN_SSID, WI_STRING, "SSID for IBSS creation:\t\t\t" },
- { WI_RID_CURRENT_SSID, WI_STRING, "Current netname (SSID):\t\t\t" },
- { WI_RID_DESIRED_SSID, WI_STRING, "Desired netname (SSID):\t\t\t" },
- { WI_RID_CURRENT_BSSID, WI_HEXBYTES, "Current BSSID:\t\t\t\t" },
- { WI_RID_CHANNEL_LIST, WI_HEXWORDS, "Channel list:\t\t\t\t" },
- { WI_RID_OWN_CHNL, WI_WORDS, "IBSS channel:\t\t\t\t" },
- { WI_RID_CURRENT_CHAN, WI_WORDS, "Current channel:\t\t\t" },
- { WI_RID_COMMS_QUALITY, WI_WORDS, "Comms quality/signal/noise:\t\t" },
- { WI_RID_DBM_COMMS_QUAL, WI_SWORDS, "dBm Coms Quality:\t\t\t" },
- { WI_RID_PROMISC, WI_BOOL, "Promiscuous mode:\t\t\t" },
- { WI_RID_PROCFRAME, WI_BOOL, "Process 802.11b Frame:\t\t\t" },
- { WI_RID_PRISM2, WI_WORDS, "Intersil-Prism2 based card:\t\t" },
- { WI_RID_PORTTYPE, WI_WORDS, "Port type (1=BSS, 3=ad-hoc):\t\t"},
- { WI_RID_MAC_NODE, WI_HEXBYTES, "MAC address:\t\t\t\t"},
- { WI_RID_TX_RATE, WI_WORDS, "TX rate (selection):\t\t\t"},
- { WI_RID_CUR_TX_RATE, WI_WORDS, "TX rate (actual speed):\t\t\t"},
- { WI_RID_RTS_THRESH, WI_WORDS, "RTS/CTS handshake threshold:\t\t"},
- { WI_RID_CREATE_IBSS, WI_BOOL, "Create IBSS:\t\t\t\t" },
- { WI_RID_SYSTEM_SCALE, WI_WORDS, "Access point density:\t\t\t" },
- { WI_RID_PM_ENABLED, WI_WORDS, "Power Mgmt (1=on, 0=off):\t\t" },
- { WI_RID_MAX_SLEEP, WI_WORDS, "Max sleep time:\t\t\t\t" },
- { WI_RID_PRI_IDENTITY, WI_WORDS, "PRI Identity:\t\t\t\t" },
- { WI_RID_STA_IDENTITY, WI_WORDS, "STA Identity:\t\t\t\t" } ,
- { WI_RID_CARD_ID, WI_HEXWORDS, "Card ID register:\t\t\t" },
- { WI_RID_REG_DOMAINS, WI_REGDOMS, "Regulatory Domains:\t\t\t" },
- { WI_RID_TEMP_TYPE, WI_WORDS, "Temperature Range:\t\t\t" },
-#ifdef WI_EXTRA_INFO
- { WI_RID_PRI_SUP_RANGE, WI_WORDS, "PRI Sup Range:\t\t\t\t" },
- { WI_RID_CIF_ACT_RANGE, WI_WORDS, "CFI Act Sup Range:\t\t\t" },
- { WI_RID_STA_SUP_RANGE, WI_WORDS, "STA Sup Range:\t\t\t\t" } ,
- { WI_RID_MFI_ACT_RANGE, WI_WORDS, "MFI Act Sup Range:\t\t\t" } ,
-#endif
- { 0, 0, NULL }
-};
-
-static struct wi_table wi_crypt_table[] = {
- { WI_RID_ENCRYPTION, WI_BOOL, "WEP encryption:\t\t\t\t" },
- { WI_RID_TX_CRYPT_KEY, WI_WORDS, "TX encryption key:\t\t\t" },
- { WI_RID_DEFLT_CRYPT_KEYS, WI_KEYSTRUCT, "Encryption keys:\t\t\t" },
- { 0, 0, NULL }
-};
-
-static void
-wi_dumpinfo(const char *iface)
-{
- struct wi_req wreq;
- int i, has_wep;
- struct wi_table *w;
-
- bzero((char *)&wreq, sizeof(wreq));
-
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = WI_RID_WEP_AVAIL;
-
- if (wi_getval(iface, &wreq) == 0)
- has_wep = wreq.wi_val[0];
- else
- has_wep = 0;
-
- w = wi_table;
-
- for (i = 0; w[i].wi_type; i++) {
- bzero((char *)&wreq, sizeof(wreq));
-
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = w[i].wi_code;
-
- if (wi_getvalmaybe(iface, &wreq) == -1)
- continue;
- printf("%s", w[i].wi_str);
- switch(w[i].wi_type) {
- case WI_STRING:
- wi_printstr(&wreq);
- break;
- case WI_WORDS:
- wi_printwords(&wreq);
- break;
- case WI_SWORDS:
- wi_printswords(&wreq);
- break;
- case WI_HEXWORDS:
- wi_printhexwords(&wreq);
- break;
- case WI_REGDOMS:
- wi_printregdoms(&wreq);
- break;
- case WI_BOOL:
- wi_printbool(&wreq);
- break;
- case WI_HEXBYTES:
- wi_printhex(&wreq);
- break;
- default:
- break;
- }
- printf("\n");
- }
-
- if (has_wep) {
- w = wi_crypt_table;
- for (i = 0; w[i].wi_type; i++) {
- bzero((char *)&wreq, sizeof(wreq));
-
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = w[i].wi_code;
-
- if (wi_getval(iface, &wreq) == -1)
- continue;
- printf("%s", w[i].wi_str);
- switch(w[i].wi_type) {
- case WI_STRING:
- wi_printstr(&wreq);
- break;
- case WI_WORDS:
- if (wreq.wi_type == WI_RID_TX_CRYPT_KEY)
- wreq.wi_val[0]++;
- wi_printwords(&wreq);
- break;
- case WI_BOOL:
- wi_printbool(&wreq);
- break;
- case WI_HEXBYTES:
- wi_printhex(&wreq);
- break;
- case WI_KEYSTRUCT:
- wi_printkeys(&wreq);
- break;
- default:
- break;
- }
- printf("\n");
- }
- }
-
- if (listaps)
- wi_printaplist(iface);
-
- return;
-}
-
-static void
-wi_dumpstats(const char *iface)
-{
- struct wi_req wreq;
- struct wi_counters *c;
-
- if (iface == NULL)
- errx(1, "must specify interface name");
-
- bzero((char *)&wreq, sizeof(wreq));
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = WI_RID_IFACE_STATS;
-
- if (wi_getval(iface, &wreq) == -1)
- errx(1, "Cannot get interface stats");
-
- c = (struct wi_counters *)&wreq.wi_val;
-
- printf("Transmitted unicast frames:\t\t%d\n",
- c->wi_tx_unicast_frames);
- printf("Transmitted multicast frames:\t\t%d\n",
- c->wi_tx_multicast_frames);
- printf("Transmitted fragments:\t\t\t%d\n",
- c->wi_tx_fragments);
- printf("Transmitted unicast octets:\t\t%d\n",
- c->wi_tx_unicast_octets);
- printf("Transmitted multicast octets:\t\t%d\n",
- c->wi_tx_multicast_octets);
- printf("Single transmit retries:\t\t%d\n",
- c->wi_tx_single_retries);
- printf("Multiple transmit retries:\t\t%d\n",
- c->wi_tx_multi_retries);
- printf("Transmit retry limit exceeded:\t\t%d\n",
- c->wi_tx_retry_limit);
- printf("Transmit discards:\t\t\t%d\n",
- c->wi_tx_discards);
- printf("Transmit discards due to wrong SA:\t%d\n",
- c->wi_tx_discards_wrong_sa);
- printf("Received unicast frames:\t\t%d\n",
- c->wi_rx_unicast_frames);
- printf("Received multicast frames:\t\t%d\n",
- c->wi_rx_multicast_frames);
- printf("Received fragments:\t\t\t%d\n",
- c->wi_rx_fragments);
- printf("Received unicast octets:\t\t%d\n",
- c->wi_rx_unicast_octets);
- printf("Received multicast octets:\t\t%d\n",
- c->wi_rx_multicast_octets);
- printf("Receive FCS errors:\t\t\t%d\n",
- c->wi_rx_fcs_errors);
- printf("Receive discards due to no buffer:\t%d\n",
- c->wi_rx_discards_nobuf);
- printf("Can't decrypt WEP frame:\t\t%d\n",
- c->wi_rx_WEP_cant_decrypt);
- printf("Received message fragments:\t\t%d\n",
- c->wi_rx_msg_in_msg_frags);
- printf("Received message bad fragments:\t\t%d\n",
- c->wi_rx_msg_in_bad_msg_frags);
-
- return;
-}
-
-static void
-usage(const char *p)
-{
- fprintf(stderr, "usage: %s [[-i] iface]\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -o\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -l\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -L\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -t tx_rate\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -n network_name\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -s station_name\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -c 0|1\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -q SSID\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -p port_type\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -a access_point_density\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -m mac_address\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -d max_data_length\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -e 0|1\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -k key [-v 1|2|3|4]\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -r RTS_threshold\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -f frequency\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -F 0|1\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -P 0|1\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -S max_sleep_duration\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -T 1|2|3|4\n", p);
-#ifdef WICACHE
- fprintf(stderr, "\t%s [[-i] iface] -Z (zero signal cache)\n", p);
- fprintf(stderr, "\t%s [[-i] iface] -C (display signal cache)\n", p);
-#endif
-
- exit(1);
-}
-
-static void
-wi_printaps(struct wi_req *wreq)
-{
- struct wi_apinfo *w;
- int i, j, nstations, rate;
-
- nstations = *(int *)wreq->wi_val;
- printf("%d station%s:\n", nstations, nstations == 1 ? "" : "s");
- w = (struct wi_apinfo *)(((char *)&wreq->wi_val) + sizeof(int));
- for ( i = 0; i < nstations; i++, w++) {
- printf("ap[%d]:\n", i);
- if (w->scanreason) {
- static char *scanm[] = {
- "Host initiated",
- "Firmware initiated",
- "Inquiry request from host"
- };
- printf("\tScanReason:\t\t\t[ %s ]\n",
- scanm[w->scanreason - 1]);
- }
- printf("\tnetname (SSID):\t\t\t[ ");
- for (j = 0; j < w->namelen; j++) {
- printf("%c", w->name[j]);
- }
- printf(" ]\n");
- printf("\tBSSID:\t\t\t\t[ %02x:%02x:%02x:%02x:%02x:%02x ]\n",
- w->bssid[0]&0xff, w->bssid[1]&0xff,
- w->bssid[2]&0xff, w->bssid[3]&0xff,
- w->bssid[4]&0xff, w->bssid[5]&0xff);
- printf("\tChannel:\t\t\t[ %d ]\n", w->channel);
- printf("\tQuality/Signal/Noise [signal]:\t[ %d / %d / %d ]\n"
- "\t [dBm]:\t[ %d / %d / %d ]\n",
- w->quality, w->signal, w->noise,
- w->quality, w->signal - 149, w->noise - 149);
- printf("\tBSS Beacon Interval [msec]:\t[ %d ]\n", w->interval);
- printf("\tCapinfo:\t\t\t[ ");
- if (w->capinfo & IEEE80211_CAPINFO_ESS)
- printf("ESS ");
- if (w->capinfo & IEEE80211_CAPINFO_PRIVACY)
- printf("WEP ");
- printf("]\n");
-
- switch (w->rate) {
- case WI_APRATE_1:
- rate = 1;
- break;
- case WI_APRATE_2:
- rate = 2;
- break;
- case WI_APRATE_5:
- rate = 5.5;
- break;
- case WI_APRATE_11:
- rate = 11;
- break;
-#ifdef WI_APRATE_0
- case WI_APRATE_0:
-#endif
- default:
- rate = 0;
- break;
- }
- if (rate) printf("\tDataRate [Mbps]:\t\t[ %d ]\n", rate);
- }
-}
-
-static void
-wi_dumpstations(const char *iface)
-{
- struct wi_req wreq;
-
- if (iface == NULL)
- errx(1, "must specify interface name");
-
- bzero((char *)&wreq, sizeof(wreq));
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = WI_RID_READ_APS;
-
- if (wi_getval(iface, &wreq) == -1)
- errx(1, "Cannot get stations");
- wi_printaps(&wreq);
-}
-
-#ifdef WICACHE
-static void
-wi_zerocache(const char *iface)
-{
- struct wi_req wreq;
-
- if (iface == NULL)
- errx(1, "must specify interface name");
-
- bzero((char *)&wreq, sizeof(wreq));
- wreq.wi_len = 0;
- wreq.wi_type = WI_RID_ZERO_CACHE;
- wi_getval(iface, &wreq);
-}
-
-static void
-wi_readcache(const char *iface)
-{
- struct wi_req wreq;
- int *wi_sigitems;
- struct wi_sigcache *sc;
- char * pt;
- int i;
-
- if (iface == NULL)
- errx(1, "must specify interface name");
-
- bzero((char *)&wreq, sizeof(wreq));
- wreq.wi_len = WI_MAX_DATALEN;
- wreq.wi_type = WI_RID_READ_CACHE;
- if (wi_getval(iface, &wreq) == -1)
- errx(1, "Cannot read signal cache");
-
- wi_sigitems = (int *) &wreq.wi_val;
- pt = ((char *) &wreq.wi_val);
- pt += sizeof(int);
- sc = (struct wi_sigcache *) pt;
-
- for (i = 0; i < *wi_sigitems; i++) {
- printf("[%d/%d]:", i+1, *wi_sigitems);
- printf(" %02x:%02x:%02x:%02x:%02x:%02x,",
- sc->macsrc[0]&0xff,
- sc->macsrc[1]&0xff,
- sc->macsrc[2]&0xff,
- sc->macsrc[3]&0xff,
- sc->macsrc[4]&0xff,
- sc->macsrc[5]&0xff);
- printf(" %d.%d.%d.%d,",((sc->ipsrc >> 0) & 0xff),
- ((sc->ipsrc >> 8) & 0xff),
- ((sc->ipsrc >> 16) & 0xff),
- ((sc->ipsrc >> 24) & 0xff));
- printf(" sig: %d, noise: %d, qual: %d\n",
- sc->signal,
- sc->noise,
- sc->quality);
- sc++;
- }
-
- return;
-}
-#endif
-
-static void
-dep(const char *flag, const char *opt)
-{
- warnx("warning: flag %s deprecated, migrate to ifconfig %s", flag,
- opt);
-}
-
-int
-main(int argc, char *argv[])
-{
- int ch;
- const char *iface = NULL;
- char *p = argv[0];
- char *key = NULL;
- int modifier = 0;
-
- /* Get the interface name */
- opterr = 0;
- ch = getopt(argc, argv, "i:");
- if (ch == 'i') {
- iface = optarg;
- } else {
- if (argc > 1 && *argv[1] != '-') {
- iface = argv[1];
- optind = 2;
- } else {
- iface = "wi0";
- optind = 1;
- }
- optreset = 1;
- }
- opterr = 1;
-
- while((ch = getopt(argc, argv,
- "a:c:d:e:f:hi:k:lm:n:op:q:r:s:t:v:CF:LP:QS:T:Z")) != -1) {
- switch(ch) {
- case 'Z':
-#ifdef WICACHE
- wi_zerocache(iface);
-#else
- printf("WICACHE not available\n");
-#endif
- exit(0);
- break;
- case 'C':
-#ifdef WICACHE
- wi_readcache(iface);
-#else
- printf("WICACHE not available\n");
-#endif
- exit(0);
- break;
- case 'o':
- wi_dumpstats(iface);
- exit(0);
- break;
- case 'c':
- dep("c", "mediaopt");
- wi_setword(iface, WI_RID_CREATE_IBSS, atoi(optarg));
- exit(0);
- break;
- case 'd':
- wi_setword(iface, WI_RID_MAX_DATALEN, atoi(optarg));
- exit(0);
- break;
- case 'e':
- dep("e", "wepmode");
- wi_setword(iface, WI_RID_ENCRYPTION, atoi(optarg));
- exit(0);
- break;
- case 'f':
- dep("f", "channel");
- wi_setword(iface, WI_RID_OWN_CHNL, atoi(optarg));
- exit(0);
- break;
- case 'F':
- wi_setword(iface, WI_RID_PROCFRAME, atoi(optarg));
- exit(0);
- break;
- case 'k':
- dep("k", "wepkey");
- key = optarg;
- break;
- case 'L':
- listaps++;
- break;
- case 'l':
- wi_dumpstations(iface);
- exit(0);
- break;
- case 'p':
- dep("p", "mediaopt");
- wi_setword(iface, WI_RID_PORTTYPE, atoi(optarg));
- exit(0);
- break;
- case 'r':
- wi_setword(iface, WI_RID_RTS_THRESH, atoi(optarg));
- exit(0);
- break;
- case 't':
- dep("t", "mediaopt");
- wi_setword(iface, WI_RID_TX_RATE, atoi(optarg));
- exit(0);
- break;
- case 'n':
- dep("n", "ssid");
- wi_setstr(iface, WI_RID_DESIRED_SSID, optarg);
- exit(0);
- break;
- case 's':
- dep("s", "stationname");
- wi_setstr(iface, WI_RID_NODENAME, optarg);
- exit(0);
- break;
- case 'm':
- wi_sethex(iface, WI_RID_MAC_NODE, optarg);
- exit(0);
- break;
- case 'Q':
- quiet = 1;
- break;
- case 'q':
- dep("q", "ssid");
- wi_setstr(iface, WI_RID_OWN_SSID, optarg);
- exit(0);
- break;
- case 'S':
- dep("S", "powersavesleep");
- wi_setword(iface, WI_RID_MAX_SLEEP, atoi(optarg));
- exit(0);
- break;
- case 'T':
- dep("T", "weptxkey");
- wi_setword(iface,
- WI_RID_TX_CRYPT_KEY, atoi(optarg) - 1);
- exit(0);
- break;
- case 'P':
- dep("P", "powersave");
- wi_setword(iface, WI_RID_PM_ENABLED, atoi(optarg));
- exit(0);
- break;
- case 'a':
- wi_setword(iface, WI_RID_SYSTEM_SCALE, atoi(optarg));
- exit(0);
- break;
- case 'v':
- modifier = atoi(optarg);
- modifier--;
- break;
- case 'h':
- default:
- usage(p);
- break;
- }
- }
-
- if (iface == NULL)
- usage(p);
-
- if (key != NULL) {
- wi_setkeys(iface, key, modifier);
- exit(0);
- }
-
- if (listaps > 1) {
- wi_printaplist(iface);
- exit(0);
- }
-
- wi_dumpinfo(iface);
-
- exit(0);
-}
OpenPOWER on IntegriCloud