summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/wi/if_wi.c25
-rw-r--r--sys/dev/wi/if_wireg.h7
-rw-r--r--sys/i386/isa/if_wi.c25
-rw-r--r--sys/i386/isa/if_wireg.h7
-rw-r--r--usr.sbin/wicontrol/wicontrol.820
-rw-r--r--usr.sbin/wicontrol/wicontrol.c10
6 files changed, 75 insertions, 19 deletions
diff --git a/sys/dev/wi/if_wi.c b/sys/dev/wi/if_wi.c
index 35f585e..5a4948d 100644
--- a/sys/dev/wi/if_wi.c
+++ b/sys/dev/wi/if_wi.c
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: if_wi.c,v 1.48 1999/05/05 00:32:13 wpaul Exp wpaul $
+ * $Id: if_wi.c,v 1.52 1999/05/06 16:28:02 wpaul Exp $
*/
/*
@@ -116,7 +116,7 @@
#if !defined(lint)
static const char rcsid[] =
- "$Id: if_wi.c,v 1.48 1999/05/05 00:32:13 wpaul Exp wpaul $";
+ "$Id: if_wi.c,v 1.52 1999/05/06 16:28:02 wpaul Exp $";
#endif
static struct wi_softc wi_softc[NWI];
@@ -275,6 +275,7 @@ static int wi_attach(isa_dev)
{
struct wi_softc *sc;
struct wi_ltv_macaddr mac;
+ struct wi_ltv_gen gen;
struct ifnet *ifp;
char ifname[IFNAMSIZ];
@@ -330,6 +331,17 @@ static int wi_attach(isa_dev)
sc->wi_max_data_len = WI_DEFAULT_DATALEN;
sc->wi_create_ibss = WI_DEFAULT_CREATE_IBSS;
+ /*
+ * Read the default channel from the NIC. This may vary
+ * depending on the country where the NIC was purchased, so
+ * we can't hard-code a default and expect it to work for
+ * everyone.
+ */
+ gen.wi_type = WI_RID_OWN_CHNL;
+ gen.wi_len = 2;
+ wi_read_record(sc, &gen);
+ sc->wi_channel = gen.wi_val;
+
bzero((char *)&sc->wi_stats, sizeof(sc->wi_stats));
wi_init(sc);
@@ -941,6 +953,9 @@ static void wi_setdef(sc, wreq)
case WI_RID_CREATE_IBSS:
sc->wi_create_ibss = wreq->wi_val[0];
break;
+ case WI_RID_OWN_CHNL:
+ sc->wi_channel = wreq->wi_val[0];
+ break;
case WI_RID_NODENAME:
bzero(sc->wi_node_name, sizeof(sc->wi_node_name));
bcopy((char *)&wreq->wi_val[1], sc->wi_node_name, 30);
@@ -957,6 +972,9 @@ static void wi_setdef(sc, wreq)
break;
}
+ /* Reinitialize WaveLAN. */
+ wi_init(sc);
+
return;
}
@@ -1094,6 +1112,9 @@ static void wi_init(xsc)
/* Specify the network name */
WI_SETSTR(WI_RID_DESIRED_SSID, sc->wi_net_name);
+ /* Specify the frequency to use */
+ WI_SETVAL(WI_RID_OWN_CHNL, sc->wi_channel);
+
/* Program the nodename. */
WI_SETSTR(WI_RID_NODENAME, sc->wi_node_name);
diff --git a/sys/dev/wi/if_wireg.h b/sys/dev/wi/if_wireg.h
index 271092d..a2db415 100644
--- a/sys/dev/wi/if_wireg.h
+++ b/sys/dev/wi/if_wireg.h
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: if_wireg.h,v 1.29 1999/05/06 03:05:48 wpaul Exp $
+ * $Id: if_wireg.h,v 1.30 1999/05/06 16:12:06 wpaul Exp $
*/
struct wi_counters {
@@ -73,6 +73,7 @@ struct wi_softc {
u_int16_t wi_ap_density;
u_int16_t wi_tx_rate;
u_int16_t wi_create_ibss;
+ u_int16_t wi_channel;
char wi_node_name[32];
char wi_net_name[32];
char wi_ibss_name[32];
@@ -111,6 +112,8 @@ struct wi_softc {
#define WI_DEFAULT_IBSS "FreeBSD IBSS"
+#define WI_DEFAULT_CHAN 3
+
/*
* register space access macros
*/
@@ -456,7 +459,7 @@ struct wi_ltv_ssid {
/*
* Set communications channel (radio frequency).
*/
-#define WI_RID_CHNL 0xFC03
+#define WI_RID_OWN_CHNL 0xFC03
/*
* Frame data size.
diff --git a/sys/i386/isa/if_wi.c b/sys/i386/isa/if_wi.c
index 35f585e..5a4948d 100644
--- a/sys/i386/isa/if_wi.c
+++ b/sys/i386/isa/if_wi.c
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: if_wi.c,v 1.48 1999/05/05 00:32:13 wpaul Exp wpaul $
+ * $Id: if_wi.c,v 1.52 1999/05/06 16:28:02 wpaul Exp $
*/
/*
@@ -116,7 +116,7 @@
#if !defined(lint)
static const char rcsid[] =
- "$Id: if_wi.c,v 1.48 1999/05/05 00:32:13 wpaul Exp wpaul $";
+ "$Id: if_wi.c,v 1.52 1999/05/06 16:28:02 wpaul Exp $";
#endif
static struct wi_softc wi_softc[NWI];
@@ -275,6 +275,7 @@ static int wi_attach(isa_dev)
{
struct wi_softc *sc;
struct wi_ltv_macaddr mac;
+ struct wi_ltv_gen gen;
struct ifnet *ifp;
char ifname[IFNAMSIZ];
@@ -330,6 +331,17 @@ static int wi_attach(isa_dev)
sc->wi_max_data_len = WI_DEFAULT_DATALEN;
sc->wi_create_ibss = WI_DEFAULT_CREATE_IBSS;
+ /*
+ * Read the default channel from the NIC. This may vary
+ * depending on the country where the NIC was purchased, so
+ * we can't hard-code a default and expect it to work for
+ * everyone.
+ */
+ gen.wi_type = WI_RID_OWN_CHNL;
+ gen.wi_len = 2;
+ wi_read_record(sc, &gen);
+ sc->wi_channel = gen.wi_val;
+
bzero((char *)&sc->wi_stats, sizeof(sc->wi_stats));
wi_init(sc);
@@ -941,6 +953,9 @@ static void wi_setdef(sc, wreq)
case WI_RID_CREATE_IBSS:
sc->wi_create_ibss = wreq->wi_val[0];
break;
+ case WI_RID_OWN_CHNL:
+ sc->wi_channel = wreq->wi_val[0];
+ break;
case WI_RID_NODENAME:
bzero(sc->wi_node_name, sizeof(sc->wi_node_name));
bcopy((char *)&wreq->wi_val[1], sc->wi_node_name, 30);
@@ -957,6 +972,9 @@ static void wi_setdef(sc, wreq)
break;
}
+ /* Reinitialize WaveLAN. */
+ wi_init(sc);
+
return;
}
@@ -1094,6 +1112,9 @@ static void wi_init(xsc)
/* Specify the network name */
WI_SETSTR(WI_RID_DESIRED_SSID, sc->wi_net_name);
+ /* Specify the frequency to use */
+ WI_SETVAL(WI_RID_OWN_CHNL, sc->wi_channel);
+
/* Program the nodename. */
WI_SETSTR(WI_RID_NODENAME, sc->wi_node_name);
diff --git a/sys/i386/isa/if_wireg.h b/sys/i386/isa/if_wireg.h
index 271092d..a2db415 100644
--- a/sys/i386/isa/if_wireg.h
+++ b/sys/i386/isa/if_wireg.h
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: if_wireg.h,v 1.29 1999/05/06 03:05:48 wpaul Exp $
+ * $Id: if_wireg.h,v 1.30 1999/05/06 16:12:06 wpaul Exp $
*/
struct wi_counters {
@@ -73,6 +73,7 @@ struct wi_softc {
u_int16_t wi_ap_density;
u_int16_t wi_tx_rate;
u_int16_t wi_create_ibss;
+ u_int16_t wi_channel;
char wi_node_name[32];
char wi_net_name[32];
char wi_ibss_name[32];
@@ -111,6 +112,8 @@ struct wi_softc {
#define WI_DEFAULT_IBSS "FreeBSD IBSS"
+#define WI_DEFAULT_CHAN 3
+
/*
* register space access macros
*/
@@ -456,7 +459,7 @@ struct wi_ltv_ssid {
/*
* Set communications channel (radio frequency).
*/
-#define WI_RID_CHNL 0xFC03
+#define WI_RID_OWN_CHNL 0xFC03
/*
* Frame data size.
diff --git a/usr.sbin/wicontrol/wicontrol.8 b/usr.sbin/wicontrol/wicontrol.8
index 629a9c7..03a96ee 100644
--- a/usr.sbin/wicontrol/wicontrol.8
+++ b/usr.sbin/wicontrol/wicontrol.8
@@ -59,6 +59,8 @@
.Fl i Ar iface Fl d Ar max data length
.Nm wicontrol
.Fl i Ar iface Fl r Ar RTS threshold
+.Nm wicontrol
+.Fl i Ar iface Fl f Ar frequency
.Sh DESCRIPTION
The
.Nm
@@ -79,14 +81,7 @@ The
argument given to
.Nm
should be the logical interface name associated with the WaveLAN/IEEE
-device (wi0, wi1, etc...). Interface parameters should only be changed
-when the interface is down. If the interface is already up, you should
-use the
-.Xr ifconfig 8
-command to bring the interface down, then set the interface parameters
-with
-.Nm ,
-and then bring the interface up again.
+device (wi0, wi1, etc...).
.Sh OPTIONS
The options are as follows:
.Bl -tag -width Fl
@@ -171,6 +166,15 @@ Set the RTS/CTS threshold for a given interface. This controls the
number of bytes used for the RTS/CTS handhake boundary. The
.Ar RTS threshold
can be any value between 0 and 2047. The default is 2347.
+.It Fl i Ar iface Fl f frequency
+Specify the radio frequency to use for a given interface. There are
+a small number of different channels available use in different geographical
+areas. Known values are 3 (2422Mhz) for the United States, 11 (2422Mhz)
+for France and 14 (2484Mhz) for Japan, however the NIC may accept any
+channel number between 0 and 14. If an illegal channel is specified, the
+NIC will revert to its default channel. For NIC sold in the United States,
+the default channel is 3. Note that two stations must be
+set to the same channel in order to communicate.
.El
.Sh SEE ALSO
.Xr wi 4 ,
diff --git a/usr.sbin/wicontrol/wicontrol.c b/usr.sbin/wicontrol/wicontrol.c
index 87cd90e..4bd0200 100644
--- a/usr.sbin/wicontrol/wicontrol.c
+++ b/usr.sbin/wicontrol/wicontrol.c
@@ -29,7 +29,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: wicontrol.c,v 1.15 1999/05/06 03:05:48 wpaul Exp $
+ * $Id: wicontrol.c,v 1.16 1999/05/06 16:12:06 wpaul Exp $
*/
#include <sys/types.h>
@@ -56,7 +56,7 @@
static const char copyright[] = "@(#) Copyright (c) 1997, 1998, 1999\
Bill Paul. All rights reserved.";
static const char rcsid[] =
- "@(#) $Id: wicontrol.c,v 1.15 1999/05/06 03:05:48 wpaul Exp $";
+ "@(#) $Id: wicontrol.c,v 1.16 1999/05/06 16:12:06 wpaul Exp $";
#endif
static void wi_getval __P((char *, struct wi_req *));
@@ -438,7 +438,7 @@ int main(argc, argv)
char *iface = NULL;
char *p = argv[0];
- while((ch = getopt(argc, argv, "hoc:d:i:p:r:q:t:n:s:m:")) != -1) {
+ while((ch = getopt(argc, argv, "hoc:d:f:i:p:r:q:t:n:s:m:")) != -1) {
switch(ch) {
case 'o':
wi_dumpstats(iface);
@@ -455,6 +455,10 @@ int main(argc, argv)
wi_setword(iface, WI_RID_MAX_DATALEN, atoi(optarg));
exit(0);
break;
+ case 'f':
+ wi_setword(iface, WI_RID_OWN_CHNL, atoi(optarg));
+ exit(0);
+ break;
case 'p':
wi_setword(iface, WI_RID_PORTTYPE, atoi(optarg));
exit(0);
OpenPOWER on IntegriCloud