Remove the arl(4) driver. It is reported to not work on 6.x or later
even though the driver hasn't changed since 4.x (last known working release).
This commit is contained in:
parent
0c036c44dd
commit
94f923b69d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=180257
@ -14,6 +14,12 @@
|
||||
# The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
|
||||
#
|
||||
|
||||
# 20080704: arl(4) removed
|
||||
.if ${TARGET_ARCH} == "i386"
|
||||
OLD_FILES+=usr/sbin/arlcontrol
|
||||
OLD_FILES+=usr/share/man/man4/arl.4.gz
|
||||
OLD_FILES+=usr/share/man/man8/arlcontrol.8.gz
|
||||
.endif
|
||||
# 20080703: sunlabel only for sparc64
|
||||
.if ${TARGET_ARCH} != "sparc64"
|
||||
OLD_FILES+=sbin/sunlabel
|
||||
|
@ -12,7 +12,6 @@ MAN= acpi_aiboost.4 \
|
||||
amdpm.4 \
|
||||
apm.4 \
|
||||
ar.4 \
|
||||
arl.4 \
|
||||
ce.4 \
|
||||
cp.4 \
|
||||
CPU_ELAN.4 \
|
||||
|
@ -1,115 +0,0 @@
|
||||
.\" Copyright (c) 2004
|
||||
.\" Ivan Sharov <ivan.sharov@iname.com>. 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 Ivan Sharov.
|
||||
.\" 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 Ivan Sharov 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 Ivan Sharov 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 July 16, 2005
|
||||
.Dt ARL 4 i386
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm arl
|
||||
.Nd "Aironet Arlan 655 wireless network adapter driver"
|
||||
.Sh SYNOPSIS
|
||||
To compile this driver into the kernel,
|
||||
place the following line in your
|
||||
kernel configuration file:
|
||||
.Bd -ragged -offset indent
|
||||
.Cd "device arl"
|
||||
.Ed
|
||||
.Pp
|
||||
Alternatively, to load the driver as a
|
||||
module at boot time, place the following line in
|
||||
.Xr loader.conf 5 :
|
||||
.Bd -literal -offset indent
|
||||
if_arl_load="YES"
|
||||
.Ed
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
driver provides support for Aironet Arlan 655
|
||||
wireless network adapters.
|
||||
The Arlan 655 series adapters operate at 354kbps, 512kbps, 1Mbps and 2Mbps.
|
||||
.Pp
|
||||
The Aironet Arlan 655 devices support Aironet TMA, Aironet Non-TMA
|
||||
and PSP operating modes.
|
||||
.Pp
|
||||
By default, the
|
||||
.Nm
|
||||
driver configures the Aironet Arlan 655 card for TMA operation.
|
||||
.Pp
|
||||
To set up Radio Network parameters, use
|
||||
.Xr arlcontrol 8 .
|
||||
.Sh SEE ALSO
|
||||
.Xr arp 4 ,
|
||||
.Xr netintro 4 ,
|
||||
.Xr arlcontrol 8 ,
|
||||
.Xr ifconfig 8
|
||||
.Sh LIMITATIONS
|
||||
When using
|
||||
.Xr ifconfig 8
|
||||
for setting
|
||||
.Va SSID
|
||||
you must use a 4-byte even hexadecimal digit value and it must start with
|
||||
00 or 02.
|
||||
.Pp
|
||||
You can change
|
||||
.Va channel
|
||||
for current
|
||||
.Va country
|
||||
only through
|
||||
.Xr ifconfig 8 .
|
||||
You must use
|
||||
.Xr arlcontrol 8
|
||||
for changing
|
||||
.Va country .
|
||||
.Pp
|
||||
Cannot change link-level address.
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
device driver first appeared in
|
||||
.Fx 5.3 .
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
The
|
||||
.Nm
|
||||
driver was initially written by
|
||||
.An Ivan Sharov Aq ivan.sharov@iname.com .
|
||||
.Aq ran@styx.aic.net
|
||||
wrote the
|
||||
.Xr arlcontrol 8
|
||||
utility and added
|
||||
.Xr ioctl 2
|
||||
support to the driver.
|
||||
.An Stanislav Svirid Aq count@riss-telecom.ru
|
||||
ported this driver to the new ISA architecture, merged some al driver changes,
|
||||
fixed some bugs and made it a module.
|
||||
.An Yuri Kurenkov Aq y.kurenkov@init.ru
|
||||
wrote this manpage.
|
@ -153,8 +153,6 @@ dev/arcmsr/arcmsr.c optional arcmsr pci
|
||||
dev/ar/if_ar.c optional ar
|
||||
dev/ar/if_ar_isa.c optional ar isa
|
||||
dev/ar/if_ar_pci.c optional ar pci
|
||||
dev/arl/if_arl.c optional arl
|
||||
dev/arl/if_arl_isa.c optional arl isa
|
||||
dev/asmc/asmc.c optional asmc isa
|
||||
dev/atkbdc/atkbd.c optional atkbd atkbdc
|
||||
dev/atkbdc/atkbd_atkbdc.c optional atkbd atkbdc
|
||||
|
1307
sys/dev/arl/if_arl.c
1307
sys/dev/arl/if_arl.c
File diff suppressed because it is too large
Load Diff
@ -1,344 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1999-2001, Ivan Sharov, Vitaly Belekhov.
|
||||
* Copyright (c) 2004 Stanislav Svirid.
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR OR CONTRIBUTORS 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.
|
||||
*
|
||||
* $RISS: if_arl/dev/arl/if_arl_isa.c,v 1.7 2004/03/16 05:30:38 count Exp $
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "opt_inet.h"
|
||||
|
||||
#ifdef INET
|
||||
#define ARLCACHE
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/kernel.h>
|
||||
#include <sys/malloc.h>
|
||||
|
||||
#include <sys/module.h>
|
||||
#include <sys/bus.h>
|
||||
#include <machine/bus.h>
|
||||
#include <machine/resource.h>
|
||||
#include <sys/rman.h>
|
||||
|
||||
#include <net/ethernet.h>
|
||||
#include <net/if.h>
|
||||
#include <net/if_arp.h>
|
||||
#include <net/if_mib.h>
|
||||
#include <net/if_media.h>
|
||||
|
||||
#include <isa/isavar.h>
|
||||
#include <isa/pnpvar.h>
|
||||
#include <isa/isa_common.h>
|
||||
|
||||
#include <machine/md_var.h>
|
||||
#include <vm/vm.h>
|
||||
#include <vm/pmap.h>
|
||||
#include <vm/vm_param.h>
|
||||
|
||||
#include <dev/arl/if_arlreg.h>
|
||||
|
||||
static void arl_isa_identify(driver_t *, device_t);
|
||||
static int arl_isa_probe (device_t);
|
||||
static int arl_isa_attach (device_t);
|
||||
static int arl_isa_detach (device_t);
|
||||
static char* arl_make_desc (u_int8_t, u_int8_t);
|
||||
|
||||
#define ARL_MAX_ATYPE_LEN 10
|
||||
static struct arl_type {
|
||||
u_int8_t type;
|
||||
char* desc;
|
||||
}
|
||||
arl_type_list[] = {
|
||||
{ 0, "450" },
|
||||
{ 1, "650" },
|
||||
{ 0xb, "670" },
|
||||
{ 0xc, "670E" },
|
||||
{ 0xd, "650E" },
|
||||
{ 0xe, "440LT" },
|
||||
{ 0x2e, "655" },
|
||||
{ 0x6b, "IC2200" },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
#define ARL_MAX_RTYPE_LEN 10
|
||||
struct radio_type {
|
||||
u_int8_t type;
|
||||
char* desc;
|
||||
} radio_type_list [] = {
|
||||
{ 1, "092/094" },
|
||||
{ 2, "020" },
|
||||
{ 3, "092A" },
|
||||
{ 4, "020B" },
|
||||
{ 5, "095" },
|
||||
{ 6, "024" },
|
||||
{ 7, "025B" },
|
||||
{ 8, "024B" },
|
||||
{ 9, "024C" },
|
||||
{10, "025C" },
|
||||
{11, "024-1A" },
|
||||
{12, "025-1A" },
|
||||
};
|
||||
|
||||
|
||||
static char*
|
||||
arl_make_desc(hw_type, radio_mod)
|
||||
u_int8_t hw_type;
|
||||
u_int8_t radio_mod;
|
||||
{
|
||||
static char desc[80];
|
||||
char atype[ARL_MAX_ATYPE_LEN], rtype[ARL_MAX_RTYPE_LEN];
|
||||
int i;
|
||||
|
||||
*atype = *rtype = 0;
|
||||
|
||||
/* arl type */
|
||||
for(i = 0; arl_type_list[i].desc; i++) {
|
||||
if (arl_type_list[i].type == hw_type)
|
||||
break;
|
||||
}
|
||||
|
||||
if (arl_type_list[i].desc)
|
||||
strncpy(atype, arl_type_list[i].desc, ARL_MAX_ATYPE_LEN);
|
||||
else
|
||||
snprintf(atype, ARL_MAX_ATYPE_LEN, "(0x%x)", hw_type);
|
||||
|
||||
/* radio type */
|
||||
for(i = 0; radio_type_list[i].desc; i++)
|
||||
if (radio_type_list[i].type == radio_mod)
|
||||
break;
|
||||
|
||||
if (radio_type_list[i].desc)
|
||||
strncpy(rtype, radio_type_list[i].desc, ARL_MAX_RTYPE_LEN);
|
||||
else
|
||||
snprintf(rtype, ARL_MAX_RTYPE_LEN, "(0x%x)", radio_mod);
|
||||
|
||||
snprintf(desc, 80, "ArLan type %s, radio module %s", atype, rtype);
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
#define ARL_ADDR2VEC(addr) (1 << ((addr - ARL_BASE_START) / ARL_BASE_STEP))
|
||||
|
||||
static void
|
||||
arl_isa_identify (driver_t *driver, device_t parent)
|
||||
{
|
||||
device_t child;
|
||||
struct arl_softc *sc;
|
||||
int chunk, found, i;
|
||||
u_int16_t free_mem = 0xFFFF;
|
||||
|
||||
if (bootverbose)
|
||||
printf("arl: in identify\n");
|
||||
|
||||
/* Try avoid already added devices */
|
||||
for (i = 0; (child = device_find_child(parent, "arl", i)) != NULL; i++) {
|
||||
chunk = bus_get_resource_start(child, SYS_RES_MEMORY, 0);
|
||||
if (bootverbose)
|
||||
device_printf(child, "found at iomem = 0x%0x\n", chunk);
|
||||
if (chunk >= ARL_BASE_START && chunk <= ARL_BASE_END)
|
||||
free_mem ^= ARL_ADDR2VEC(chunk);
|
||||
}
|
||||
|
||||
if (bootverbose)
|
||||
printf("arl: free mem vector = 0x%x\n", free_mem);
|
||||
|
||||
for (chunk = ARL_BASE_START; chunk <= ARL_BASE_END; chunk += ARL_BASE_STEP) {
|
||||
/* If device 'arl' with this chunk was found early - skip it */
|
||||
if ( !(free_mem & ARL_ADDR2VEC(chunk)) )
|
||||
continue;
|
||||
|
||||
found = 0;
|
||||
child = BUS_ADD_CHILD(parent, ISA_ORDER_SPECULATIVE, "arl", -1);
|
||||
device_set_driver(child, driver);
|
||||
sc = device_get_softc(child);
|
||||
bzero(sc, sizeof(*sc));
|
||||
|
||||
bus_set_resource(child, SYS_RES_MEMORY, sc->mem_rid, chunk,
|
||||
ARL_BASE_STEP);
|
||||
|
||||
if (arl_alloc_memory(child, sc->mem_rid, ARL_BASE_STEP) == 0) {
|
||||
ar = (struct arl_private *) rman_get_virtual(sc->mem_res);
|
||||
if (!bcmp(ar->textRegion, ARLAN_SIGN, sizeof(ARLAN_SIGN) - 1))
|
||||
found++;
|
||||
}
|
||||
|
||||
if (bootverbose)
|
||||
device_printf(child, "%sfound at 0x%x\n",
|
||||
!found ? "not " : "", chunk);
|
||||
|
||||
arl_release_resources(child);
|
||||
if (!found) {
|
||||
bus_delete_resource(child, SYS_RES_MEMORY, sc->mem_rid);
|
||||
device_delete_child(parent, child);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
arl_isa_probe (device_t dev)
|
||||
{
|
||||
struct arl_softc *sc = device_get_softc(dev);
|
||||
int error;
|
||||
u_char *ptr;
|
||||
u_int8_t irq;
|
||||
|
||||
if (isa_get_vendorid(dev))
|
||||
return (ENXIO);
|
||||
|
||||
sc->arl_dev = dev;
|
||||
if (bootverbose)
|
||||
device_printf(dev, "in probe\n");
|
||||
|
||||
error = arl_alloc_memory(dev, 0, ARL_BASE_STEP);
|
||||
if (error) {
|
||||
if (bootverbose)
|
||||
device_printf(dev, "Error allocating memory (%d)\n", error);
|
||||
return (error);
|
||||
}
|
||||
|
||||
ar = (struct arl_private *) rman_get_virtual(sc->mem_res);
|
||||
if (bcmp(ar->textRegion, ARLAN_SIGN, sizeof(ARLAN_SIGN) - 1)) {
|
||||
if (bootverbose)
|
||||
device_printf(dev, "not found\n");
|
||||
error = ENOENT;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
irq = ar->irqLevel;
|
||||
if (irq == 2)
|
||||
irq = 9;
|
||||
|
||||
error = bus_set_resource(dev, SYS_RES_IRQ, 0, irq, 1);
|
||||
if (error)
|
||||
goto bad;
|
||||
|
||||
error = arl_alloc_irq(dev, 0, 0);
|
||||
if (error) {
|
||||
if (bootverbose)
|
||||
device_printf(dev, "Can't allocate IRQ %d\n", irq);
|
||||
goto bad;
|
||||
}
|
||||
|
||||
ar->controlRegister = 1; /* freeze board */
|
||||
|
||||
/* Memory test */
|
||||
for (ptr = (u_char *) ar;
|
||||
ptr < ((u_char *) ar + ARL_BASE_STEP - 1); ptr++) {
|
||||
u_char c;
|
||||
|
||||
c = *ptr; *ptr = ~(*ptr);
|
||||
if (*ptr != (u_char)~c) {
|
||||
device_printf(dev, "board memory failed at [%lx]\n",
|
||||
rman_get_start(sc->mem_res) + (ptr - (u_char *)ar));
|
||||
break; /* skip memory test */
|
||||
}
|
||||
}
|
||||
|
||||
bzero((void *) ar, ARL_BASE_STEP - 1); /* clear board ram */
|
||||
|
||||
if (arl_wait_reset(sc, 100, ARDELAY)) {
|
||||
error = ENXIO;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
if (ar->diagnosticInfo == 0xFF) {
|
||||
device_set_desc_copy(dev, arl_make_desc(ar->hardwareType,
|
||||
ar->radioModule));
|
||||
error = 0;
|
||||
} else {
|
||||
if (bootverbose)
|
||||
device_printf(dev, "board self-test failed (0x%x)!\n",
|
||||
ar->diagnosticInfo);
|
||||
error = ENXIO;
|
||||
}
|
||||
|
||||
bad:
|
||||
arl_release_resources(dev);
|
||||
|
||||
return (error);
|
||||
}
|
||||
|
||||
static int
|
||||
arl_isa_attach (device_t dev)
|
||||
{
|
||||
struct arl_softc *sc = device_get_softc(dev);
|
||||
|
||||
sc->arl_dev = dev;
|
||||
if (bootverbose)
|
||||
device_printf(dev, "in attach\n");
|
||||
|
||||
arl_alloc_memory(dev, sc->mem_rid, ARL_BASE_STEP);
|
||||
arl_alloc_irq(dev, sc->irq_rid, 0);
|
||||
|
||||
return arl_attach(dev);
|
||||
}
|
||||
|
||||
static int
|
||||
arl_isa_detach(device_t dev)
|
||||
{
|
||||
struct arl_softc *sc = device_get_softc(dev);
|
||||
|
||||
ARL_LOCK(sc);
|
||||
arl_stop(sc);
|
||||
ARL_UNLOCK(sc);
|
||||
callout_drain(&sc->arl_timer);
|
||||
ether_ifdetach(sc->arl_ifp);
|
||||
ifmedia_removeall(&sc->arl_ifmedia);
|
||||
bus_teardown_intr(dev, sc->irq_res, sc->irq_handle);
|
||||
if_free(sc->arl_ifp);
|
||||
arl_release_resources(dev);
|
||||
mtx_destroy(&sc->arl_lock);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static device_method_t arl_isa_methods[] = {
|
||||
/* Device interface */
|
||||
DEVMETHOD(device_identify, arl_isa_identify),
|
||||
DEVMETHOD(device_probe, arl_isa_probe),
|
||||
DEVMETHOD(device_attach, arl_isa_attach),
|
||||
DEVMETHOD(device_detach, arl_isa_detach),
|
||||
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static driver_t arl_isa_driver = {
|
||||
"arl",
|
||||
arl_isa_methods,
|
||||
sizeof(struct arl_softc)
|
||||
};
|
||||
|
||||
extern devclass_t arl_devclass;
|
||||
|
||||
DRIVER_MODULE(arl, isa, arl_isa_driver, arl_devclass, 0, 0);
|
||||
MODULE_DEPEND(arl, isa, 1, 1, 1);
|
||||
MODULE_DEPEND(arl, ether, 1, 1, 1);
|
@ -1,344 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1999-2001, Ivan Sharov, Vitaly Belekhov.
|
||||
* Copyright (c) 2004 Stanislav Svirid.
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR OR CONTRIBUTORS 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.
|
||||
*
|
||||
* $RISS: if_arl/dev/arl/if_arlreg.h,v 1.4 2004/03/16 04:43:27 count Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _IF_ARLREG_H
|
||||
#define _IF_ARLREG_H
|
||||
|
||||
#define ARL_BASE_START 0xC0000
|
||||
#define ARL_BASE_END 0xDE000
|
||||
#define ARL_BASE_STEP 0x2000
|
||||
|
||||
#define ARLAN_NAME_SIZE 16
|
||||
#define ARLAN_NAME "ArLan655-SCT"
|
||||
|
||||
/*
|
||||
* Statistics
|
||||
*/
|
||||
struct arl_stats {
|
||||
u_int32_t numDatagramsTransmitted;
|
||||
u_int32_t numReTransmissions;
|
||||
u_int32_t numFramesDiscarded;
|
||||
u_int32_t numDatagramsReceived;
|
||||
u_int32_t numDuplicateReceivedFrames;
|
||||
u_int32_t numDatagramsDiscarded;
|
||||
u_int16_t maxNumReTransmitDatagram;
|
||||
u_int16_t maxNumReTransmitFrames;
|
||||
u_int16_t maxNumConsecutiveDuplicateFrames;
|
||||
u_int32_t numBytesTransmitted;
|
||||
u_int32_t numBytesReceived;
|
||||
u_int32_t numCRCErrors;
|
||||
u_int32_t numLengthErrors;
|
||||
u_int32_t numAbortErrors;
|
||||
u_int32_t numTXUnderruns;
|
||||
u_int32_t numRXOverruns;
|
||||
u_int32_t numHoldOffs;
|
||||
u_int32_t numFramesTransmitted;
|
||||
u_int32_t numFramesReceived;
|
||||
u_int32_t numReceiveFramesLost;
|
||||
u_int32_t numRXBufferOverflows;
|
||||
u_int32_t numFramesDiscardedAddrMismatch;
|
||||
u_int32_t numFramesDiscardedSIDMismatch;
|
||||
u_int32_t numPollsTransmistted;
|
||||
u_int32_t numPollAcknowledges;
|
||||
u_int32_t numStatusVectorTimeouts;
|
||||
u_int32_t numNACKReceived;
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* Arlan private structure in memomory
|
||||
*/
|
||||
struct arl_private {
|
||||
/* Header Signature */
|
||||
char textRegion[48];
|
||||
u_int8_t resetFlag;
|
||||
u_int8_t diagnosticInfo;
|
||||
u_int16_t diagnosticOffset;
|
||||
u_int8_t _1[12];
|
||||
u_int8_t lanCardNodeId[6];
|
||||
u_int8_t broadcastAddress[6];
|
||||
u_int8_t hardwareType;
|
||||
u_int8_t majorHardwareVersion;
|
||||
u_int8_t minorHardwareVersion;
|
||||
u_int8_t radioModule;
|
||||
u_int8_t defaultChannelSet;
|
||||
u_int8_t _2[47];
|
||||
|
||||
/* Control/Status Block - 0x0080 */
|
||||
u_int8_t interruptInProgress;
|
||||
u_int8_t cntrlRegImage;
|
||||
u_int8_t _3[14];
|
||||
u_int8_t commandByte;
|
||||
u_int8_t commandParameter[15];
|
||||
|
||||
/* Receive Status - 0x00a0 */
|
||||
u_int8_t rxStatusVector;
|
||||
u_int8_t rxFrmType;
|
||||
u_int16_t rxOffset;
|
||||
u_int16_t rxLength;
|
||||
u_int8_t rxSrc[6];
|
||||
u_int8_t rxBroadcastFlag;
|
||||
u_int8_t rxQuality;
|
||||
u_int8_t scrambled;
|
||||
u_int8_t _4[1];
|
||||
|
||||
/* Transmit Status - 0x00b0 */
|
||||
u_int8_t txStatusVector;
|
||||
u_int8_t txAckQuality;
|
||||
u_int8_t numRetries;
|
||||
u_int8_t _5[14];
|
||||
u_int8_t registeredRouter[6];
|
||||
u_int8_t backboneRouter[6];
|
||||
u_int8_t registrationStatus;
|
||||
u_int8_t configuredStatusFlag;
|
||||
u_int8_t _6[1];
|
||||
u_int8_t ultimateDestAddress[6];
|
||||
u_int8_t immedDestAddress[6];
|
||||
u_int8_t immedSrcAddress[6];
|
||||
u_int16_t rxSequenceNumber;
|
||||
u_int8_t assignedLocaltalkAddress;
|
||||
u_int8_t _7[27];
|
||||
|
||||
/* System Parameter Block */
|
||||
|
||||
/* - Driver Parameters (Novell Specific) */
|
||||
|
||||
u_int16_t txTimeout;
|
||||
u_int16_t transportTime;
|
||||
u_int8_t _8[4];
|
||||
|
||||
/* - Configuration Parameters */
|
||||
u_int8_t irqLevel;
|
||||
u_int8_t spreadingCode;
|
||||
u_int8_t channelSet;
|
||||
u_int8_t channelNumber;
|
||||
u_int16_t radioNodeId;
|
||||
u_int8_t _9[2];
|
||||
u_int8_t scramblingDisable;
|
||||
u_int8_t radioType;
|
||||
u_int16_t routerId;
|
||||
u_int8_t _10[9];
|
||||
u_int8_t txAttenuation;
|
||||
u_int8_t systemId[4]; /* on an odd address for a long !!! */
|
||||
u_int16_t globalChecksum;
|
||||
u_int8_t _11[4];
|
||||
u_int16_t maxDatagramSize;
|
||||
u_int16_t maxFrameSize;
|
||||
u_int8_t maxRetries;
|
||||
u_int8_t receiveMode;
|
||||
u_int8_t priority;
|
||||
u_int8_t rootOrRepeater;
|
||||
u_int8_t specifiedRouter[6];
|
||||
u_int16_t fastPollPeriod;
|
||||
u_int8_t pollDecay;
|
||||
u_int8_t fastPollDelay[2];
|
||||
u_int8_t arlThreshold;
|
||||
u_int8_t arlDecay;
|
||||
u_int8_t _12[1];
|
||||
u_int16_t specRouterTimeout;
|
||||
u_int8_t _13[5];
|
||||
|
||||
/* Scrambled Area */
|
||||
u_int8_t SID[4];
|
||||
u_int8_t encryptionKey[12];
|
||||
u_int8_t _14[2];
|
||||
u_int8_t waitTime[2];
|
||||
u_int8_t lParameter[2];
|
||||
u_int8_t _15[3];
|
||||
u_int16_t headerSize;
|
||||
u_int16_t sectionChecksum;
|
||||
|
||||
u_int8_t registrationMode;
|
||||
u_int8_t registrationFill;
|
||||
u_int16_t pollPeriod;
|
||||
u_int16_t refreshPeriod;
|
||||
u_int8_t name[ARLAN_NAME_SIZE];
|
||||
u_int8_t NID[6];
|
||||
u_int8_t localTalkAddress;
|
||||
u_int8_t codeFormat;
|
||||
u_int8_t SSCode[64];
|
||||
|
||||
u_int8_t _16[0x140];
|
||||
|
||||
/* Statistics Block - 0x0300 */
|
||||
u_int8_t hostcpuLock;
|
||||
u_int8_t lancpuLock;
|
||||
u_int8_t resetTime[18];
|
||||
|
||||
struct arl_stats stat;
|
||||
|
||||
u_int8_t _17[0x86];
|
||||
|
||||
u_int8_t txBuffer[0x800];
|
||||
u_int8_t rxBuffer[0x800];
|
||||
|
||||
u_int8_t _18[0x0bfd];
|
||||
u_int8_t resetFlag1;
|
||||
u_int8_t _19;
|
||||
u_int8_t controlRegister;
|
||||
};
|
||||
|
||||
/*
|
||||
* Transmit parametrs
|
||||
*/
|
||||
struct arl_tx_param {
|
||||
u_int16_t offset;
|
||||
u_int16_t length;
|
||||
u_int8_t dest[6];
|
||||
u_int8_t clear;
|
||||
u_int8_t retries;
|
||||
u_int8_t routing;
|
||||
u_int8_t scrambled;
|
||||
};
|
||||
|
||||
#define ARL_HARDWARE_RESET 0x01
|
||||
#define ARL_CHANNEL_ATTENTION 0x02
|
||||
#define ARL_INTERRUPT_ENABLE 0x04
|
||||
#define ARL_CLEAR_INTERRUPT 0x08
|
||||
|
||||
/* additions for sys/sockio.h ( socket ioctl parameters for arlan card ) */
|
||||
|
||||
#define SIOCGARLQLT _IOWR('i', 70, struct ifreq) /* get QUALITY */
|
||||
#define SIOCGARLALL _IOWR('i', 71, struct ifreq) /* get ALL */
|
||||
#define SIOCSARLALL _IOWR('i', 72, struct ifreq) /* set paramter (who_set) */
|
||||
#define SIOCGARLSTB _IOWR('i', 73, struct ifreq) /* get statistic block */
|
||||
|
||||
/*
|
||||
* Arlan request struct via ioctl
|
||||
*/
|
||||
struct arl_cfg_param {
|
||||
u_char name[ARLAN_NAME_SIZE];
|
||||
u_int8_t sid[4];
|
||||
u_int8_t channelSet;
|
||||
u_int8_t channelNumber;
|
||||
u_int8_t spreadingCode;
|
||||
u_int8_t registrationMode;
|
||||
u_int8_t lanCardNodeId[6];
|
||||
u_int8_t specifiedRouter[6];
|
||||
u_int8_t hardwareType;
|
||||
u_int8_t majorHardwareVersion;
|
||||
u_int8_t minorHardwareVersion;
|
||||
u_int8_t radioModule;
|
||||
u_int8_t priority;
|
||||
u_int8_t receiveMode;
|
||||
u_int8_t txRetry;
|
||||
};
|
||||
|
||||
struct arl_req {
|
||||
u_int32_t what_set;
|
||||
struct arl_cfg_param cfg;
|
||||
};
|
||||
|
||||
#ifdef ARLCACHE
|
||||
#define MAXARLCACHE 16
|
||||
#define ARLCACHE_RX 0
|
||||
#define ARLCACHE_TX 1
|
||||
|
||||
struct arl_sigcache {
|
||||
u_int8_t macsrc[6]; /* unique MAC address for entry */
|
||||
u_int8_t level[2];
|
||||
u_int8_t quality[2];
|
||||
};
|
||||
#endif
|
||||
|
||||
#define ARLAN_SET_name 0x0001
|
||||
#define ARLAN_SET_sid 0x0002
|
||||
#define ARLAN_SET_channelSet 0x0004
|
||||
#define ARLAN_SET_channelNumber 0x0008
|
||||
#define ARLAN_SET_spreadingCode 0x0010
|
||||
#define ARLAN_SET_registrationMode 0x0020
|
||||
#define ARLAN_SET_lanCardNodeId 0x0040
|
||||
#define ARLAN_SET_specifiedRouter 0x0080
|
||||
#define ARLAN_SET_priority 0x0100
|
||||
#define ARLAN_SET_receiveMode 0x0200
|
||||
#define ARLAN_SET_txRetry 0x0400
|
||||
|
||||
#ifdef _KERNEL
|
||||
struct arl_softc {
|
||||
struct ifnet *arl_ifp;
|
||||
device_t arl_dev;
|
||||
|
||||
struct arl_private * arl_mem; /* arlan data */
|
||||
|
||||
struct arl_cfg_param arl_cfg; /* arlan vars in our mem */
|
||||
u_char arl_control;
|
||||
|
||||
int mem_rid; /* resource id for mem */
|
||||
struct resource* mem_res; /* resource for mem */
|
||||
int irq_rid; /* resource id for irq */
|
||||
struct resource* irq_res; /* resource for irq */
|
||||
void* irq_handle; /* handle for irq handler */
|
||||
|
||||
u_char arl_tx[2048];
|
||||
int tx_len;
|
||||
u_char arl_rx[2048];
|
||||
int rx_len;
|
||||
|
||||
#ifdef ARLCACHE
|
||||
struct arl_sigcache arl_sigcache[MAXARLCACHE];
|
||||
#endif
|
||||
struct ifmedia arl_ifmedia;
|
||||
struct callout arl_timer;
|
||||
struct mtx arl_lock;
|
||||
};
|
||||
|
||||
#define ARL_LOCK(sc) mtx_lock(&(sc)->arl_lock)
|
||||
#define ARL_UNLOCK(sc) mtx_unlock(&(sc)->arl_lock)
|
||||
#define ARL_LOCK_ASSERT(sc) mtx_assert(&(sc)->arl_lock, MA_OWNED)
|
||||
#endif
|
||||
|
||||
#define ARLAN_SIGN "TELESYSTEM"
|
||||
#define ARLAN_HEADER_SIZE 0x0C
|
||||
|
||||
#define ar sc->arl_mem
|
||||
#define arcfg sc->arl_cfg
|
||||
|
||||
#define ARDELAY 10000
|
||||
#define ARDELAY1 50000
|
||||
|
||||
#define WAIT_RESET(cnt, delay) \
|
||||
do { \
|
||||
int i; \
|
||||
for (i = cnt; i && ar->resetFlag; i--) { \
|
||||
DELAY(delay); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#ifdef _KERNEL
|
||||
void arl_release_resources (device_t);
|
||||
int arl_alloc_memory (device_t, int, int);
|
||||
int arl_alloc_irq (device_t, int, int);
|
||||
int arl_attach (device_t);
|
||||
int arl_wait_reset (struct arl_softc *, int, int);
|
||||
void arl_stop (struct arl_softc *);
|
||||
|
||||
driver_intr_t arl_intr;
|
||||
#endif
|
||||
|
||||
#endif /* _IF_ARLREG_H */
|
@ -563,7 +563,6 @@ hint.mse.0.irq="5"
|
||||
|
||||
# ar: Arnet SYNC/570i hdlc sync 2/4 port V.35/X.21 serial driver
|
||||
# (requires sppp)
|
||||
# arl: Aironet Arlan 655 wireless adapters.
|
||||
# ath: Atheros a/b/g WiFi adapters (requires ath_hal and wlan)
|
||||
# ce: Cronyx Tau-PCI/32 sync single/dual port G.703/E1 serial adaptor
|
||||
# with 32 HDLC subchannels (requires sppp (default), or NETGRAPH if
|
||||
@ -605,10 +604,6 @@ hint.ar.0.at="isa"
|
||||
hint.ar.0.port="0x300"
|
||||
hint.ar.0.irq="10"
|
||||
hint.ar.0.maddr="0xd0000"
|
||||
device arl
|
||||
hint.arl.0.at="isa"
|
||||
hint.arl.0.irq="9"
|
||||
hint.arl.0.maddr="0xd0000"
|
||||
device ce
|
||||
device cp
|
||||
device cs
|
||||
|
@ -23,7 +23,6 @@ SUBDIR= ${_3dfx} \
|
||||
${_ar} \
|
||||
${_arcmsr} \
|
||||
${_arcnet} \
|
||||
${_arl} \
|
||||
${_asmc} \
|
||||
${_asr} \
|
||||
ata \
|
||||
@ -452,7 +451,6 @@ _aac= aac
|
||||
_acpi= acpi
|
||||
_ahb= ahb
|
||||
_arcmsr= arcmsr
|
||||
_arl= arl
|
||||
_asmc= asmc
|
||||
_asr= asr
|
||||
_bios= bios
|
||||
|
@ -1,16 +0,0 @@
|
||||
# $RISS: if_arl/modules/if_arl/Makefile,v 1.3 2003/01/13 08:05:29 frol Exp $
|
||||
# $FreeBSD$
|
||||
|
||||
.PATH: ${.CURDIR}/../../dev/arl
|
||||
|
||||
KMOD= if_arl
|
||||
SRCS= if_arl.c if_arl_isa.c
|
||||
SRCS+= opt_inet.h device_if.h bus_if.h isa_if.h
|
||||
CFLAGS+= -I${.CURDIR}/../..
|
||||
|
||||
.if !defined(KERNBUILDDIR)
|
||||
opt_inet.h:
|
||||
echo "#define INET 1" > opt_inet.h
|
||||
.endif
|
||||
|
||||
.include <bsd.kmod.mk>
|
@ -12,7 +12,6 @@ SUBDIR= ac \
|
||||
ancontrol \
|
||||
${_apm} \
|
||||
${_apmd} \
|
||||
${_arlcontrol} \
|
||||
arp \
|
||||
${_asf} \
|
||||
${_atm} \
|
||||
@ -317,7 +316,6 @@ _zzz= zzz
|
||||
.if ${MK_ACPI} != "no"
|
||||
_acpi= acpi
|
||||
.endif
|
||||
_arlcontrol= arlcontrol
|
||||
_boot0cfg= boot0cfg
|
||||
_wlconfig= wlconfig
|
||||
.elif ${MACHINE} == "pc98"
|
||||
|
@ -1,10 +0,0 @@
|
||||
#
|
||||
# $RISS: if_arl/arlconfig/Makefile,v 1.5 2003/01/13 08:05:29 frol Exp $
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
PROG= arlcontrol
|
||||
CFLAGS+= -I${.CURDIR}/../../sys -DARLCACHE
|
||||
MAN= arlcontrol.8
|
||||
|
||||
.include <bsd.prog.mk>
|
@ -1,166 +0,0 @@
|
||||
.\" Copyright (c) 2004
|
||||
.\" <ran@styx.aic.net>. All right 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 <ran@styx.aic.net>
|
||||
.\" 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 ran@styx.aic.net 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 <ran@styx.aic.net> 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 March 15, 2004
|
||||
.Dt ARLCONTROL 8 i386
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm arlcontrol
|
||||
.Nd configure Aironet Arlan 655 device
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Ar iface
|
||||
.Nm
|
||||
.Ar iface Cm country Ar country Pq Cm 9 Ns - Ns Cm 15
|
||||
.Nm
|
||||
.Ar iface Cm priority Ar priority Pq Cm normal , high , highest
|
||||
.Nm
|
||||
.Ar iface Cm txretry Ar txretry
|
||||
.Nm
|
||||
.Ar iface Cm stat
|
||||
.Nm
|
||||
.Ar iface Cm quality
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
utility controls the operation of Aironet Arlan 655 wireless networking
|
||||
devices via the
|
||||
.Xr arl 4
|
||||
driver.
|
||||
Most of the parameters that can be changed are related to the
|
||||
Aironet protocol which the Aironet Arlan 655 card implements.
|
||||
The
|
||||
.Nm
|
||||
utility can also be used to view the current NIC status, configuration,
|
||||
and to dump out the values of the card's statistics counters.
|
||||
.Pp
|
||||
The
|
||||
.Ar iface
|
||||
argument given to
|
||||
.Nm
|
||||
should be the logical interface name associated with the Aironet Arlan 655
|
||||
device
|
||||
.Li ( arl0 , arl1 ,
|
||||
etc.) and must be specified.
|
||||
.Sh OPTIONS
|
||||
The options are as follows:
|
||||
.Bl -tag -width indent
|
||||
.It Ar iface
|
||||
Display current settings of the specified wireless interface.
|
||||
This retrieves current card settings from the driver and prints
|
||||
them out.
|
||||
.It Ar iface Cm country Ar country Pq Cm 9 Ns - Ns Cm 15
|
||||
Chose
|
||||
.Ar country , channel
|
||||
parameters that depend on the
|
||||
.Ar country
|
||||
according to the following table:
|
||||
.Bl -column ".No North America" ".Em Channel" ".Em MHz"
|
||||
.Em "Country Ch_Set MHz"
|
||||
.It "North America" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
|
||||
.It "U.S.A" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
|
||||
.It "Canada" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
|
||||
.It "Mexico" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
|
||||
.It "New Zealand" Ta 9 Ta "2412, 2427, 2442, 2457, 2465"
|
||||
.It "E.T.S.I" Ta 10 Ta "2412, 2427, 2442, 2457, 2472"
|
||||
.It "Japan" Ta 11 Ta "2484"
|
||||
.It "France" Ta 12 Ta "2457, 2465, 2475"
|
||||
.It "Australia" Ta 13 Ta "2411, 2425, 2439"
|
||||
.It "Germany" Ta 14 Ta "2427, 2442, 2457"
|
||||
.It "U.K.(MPT1349)" Ta 15 Ta "2460"
|
||||
.It "U.K." Ta 15 Ta "2460"
|
||||
.It "Spain" Ta 15 Ta "2460"
|
||||
.El
|
||||
.It Ar iface Cm priority Ar priority Pq Cm normal , high , highest
|
||||
Use the
|
||||
.Ar priority
|
||||
parameter to set the priority of the Arlan 655 Radio Media Access Control
|
||||
the values are
|
||||
.Cm normal , high
|
||||
or
|
||||
.Cm highest .
|
||||
The higher the priority is set, the more likely this unit will be the first
|
||||
to successfully transmit a packet when multiple units are trying
|
||||
to transmit at the same time.
|
||||
.Pp
|
||||
The percentage of units on your network that you set to values other than
|
||||
.Cm normal
|
||||
should be kept small - 10 percent or less.
|
||||
.It Ar iface Cm txretry Ar txretry
|
||||
Set transmit retries.
|
||||
Default is 0.
|
||||
.It Ar iface Cm stat
|
||||
Print internal Arlan 655 statistics block.
|
||||
.It Ar iface Cm quality
|
||||
Display the cached signal level and quality maintained by the
|
||||
.Xr arl 4
|
||||
driver.
|
||||
The driver retains information about quality and level for packets
|
||||
received from different hosts.
|
||||
Also the driver extracts values from ACK packets.
|
||||
.El
|
||||
.Sh EXAMPLES
|
||||
.Bd -literal -offset indent
|
||||
arlcontrol arl0 country 11 priority high
|
||||
arlcontrol arl0 quality
|
||||
arlcontrol arl0 stat
|
||||
arlcontrol arl0
|
||||
.Ed
|
||||
.Pp
|
||||
You can configure the Arlan 655 card from
|
||||
.Pa /etc/start_if.arl0 .
|
||||
For example:
|
||||
.Bd -literal -offset indent
|
||||
#!/bin/sh
|
||||
/usr/sbin/arlcontrol country 9 priority highest
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
.Xr arl 4
|
||||
.Rs
|
||||
.%T "Arlan 655 ISA Wireless LAN Client Card User Guide"
|
||||
.Re
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
utility first appeared in
|
||||
.Fx 5.3 .
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
The
|
||||
.Nm
|
||||
utility was written by
|
||||
.Aq ran@styx.aic.net .
|
||||
This manpage was written by
|
||||
.An Yuri Kurenkov Aq y.kurenkov@init.ru .
|
||||
.Sh BUGS
|
||||
Aironet Arlan 640 bridges and Arlan 630 access points do not understand
|
||||
country codes other than 9.
|
@ -1,430 +0,0 @@
|
||||
/*
|
||||
* $RISS: if_arl/arlconfig/arlconfig.c,v 1.5 2004/03/16 05:00:21 count Exp $
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/ethernet.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/if_ether.h>
|
||||
|
||||
#include <err.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include <dev/arl/if_arlreg.h>
|
||||
|
||||
struct freq_list {
|
||||
short fr_no;
|
||||
char* name;
|
||||
};
|
||||
|
||||
struct freq_list freq_list_1[] = {
|
||||
{ 0, "908.50" },
|
||||
{ 1, "910.06" },
|
||||
{ 2, "915.52" },
|
||||
{ 3, "915.00" },
|
||||
{ 4, "917.83" },
|
||||
{ 5, "919.22" },
|
||||
{ 6, "922.26" },
|
||||
{ 7, "911.45" },
|
||||
{ 8, "915.00" },
|
||||
{ 9, "918.55" },
|
||||
{ 10,"915.00" },
|
||||
{ 11,"915.00" }
|
||||
};
|
||||
|
||||
struct freq_list freq_list_6[] = {
|
||||
{ 0, "920.31" },
|
||||
{ 1, "920.33" },
|
||||
{ 2, "921.55" },
|
||||
{ 3, "922.17" },
|
||||
{ 4, "922.79" },
|
||||
{ 5, "921.46" },
|
||||
{ 6, "921.55" }
|
||||
};
|
||||
|
||||
struct freq_list freq_list_9[] = {
|
||||
{ 0, "Bad" },
|
||||
{ 1, "2412" },
|
||||
{ 2, "2427" },
|
||||
{ 3, "2442" },
|
||||
{ 4, "2457" },
|
||||
{ 5, "2465" }
|
||||
};
|
||||
|
||||
|
||||
struct freq_list freq_list_10[] = {
|
||||
{ 0, "Bad" },
|
||||
{ 1, "2412" },
|
||||
{ 2, "2427" },
|
||||
{ 3, "2442" },
|
||||
{ 4, "2457" },
|
||||
{ 5, "2472" }
|
||||
};
|
||||
|
||||
struct freq_list freq_list_11[] = {
|
||||
{ 0, "Bad" },
|
||||
{ 1, "2484" }
|
||||
};
|
||||
|
||||
struct freq_list freq_list_12[] = {
|
||||
{ 0, "Bad" },
|
||||
{ 1, "2457" },
|
||||
{ 2, "2465" },
|
||||
{ 3, "2472" },
|
||||
};
|
||||
|
||||
struct freq_list freq_list_13[] = {
|
||||
{ 0, "Bad" },
|
||||
{ 1, "2411" },
|
||||
{ 2, "2425" },
|
||||
{ 3, "2439" }
|
||||
};
|
||||
|
||||
struct freq_list freq_list_14[] = {
|
||||
{ 0, "Bad" },
|
||||
{ 1, "2427" },
|
||||
{ 2, "2442" },
|
||||
{ 3, "2457" }
|
||||
};
|
||||
|
||||
struct freq_list freq_list_15[] = {
|
||||
{ 0, "Bad" },
|
||||
{ 1, "2460" }
|
||||
};
|
||||
|
||||
#define MAXFREQ(a) sizeof(a)/sizeof(struct freq_list)
|
||||
|
||||
struct rate_list {
|
||||
short rate_no;
|
||||
char* name;
|
||||
};
|
||||
|
||||
struct rate_list rate_list_2400[] = {
|
||||
{ 0, "Bad" },
|
||||
{ 1, "354" },
|
||||
{ 2, "512" },
|
||||
{ 3, "1000" },
|
||||
{ 4, "2000" }
|
||||
};
|
||||
|
||||
struct radio_type {
|
||||
int id;
|
||||
char* name;
|
||||
} radio_type_list [] = {
|
||||
{ 0, "No EPROM" },
|
||||
{ 1, "092/094" },
|
||||
{ 2, "020" },
|
||||
{ 3, "092A" },
|
||||
{ 4, "020B" },
|
||||
{ 5, "095" },
|
||||
{ 6, "024" },
|
||||
{ 7, "025B" },
|
||||
{ 8, "024B" },
|
||||
{ 9, "024C" },
|
||||
{10, "025C" },
|
||||
{11, "024-1A" },
|
||||
{12, "025-1A" },
|
||||
{13, "Other" }
|
||||
};
|
||||
|
||||
static struct ch_list {
|
||||
short chan;
|
||||
char* fr;
|
||||
char* country;
|
||||
struct rate_list* rate;
|
||||
struct freq_list* freq;
|
||||
int max_freq;
|
||||
} CHSET[] = {
|
||||
{ 0, 0, 0, 0, 0, 0 },
|
||||
{ 1, "900 Mhz", "Canada, U.S.A., Mexico", 0, freq_list_1, MAXFREQ(freq_list_1) },
|
||||
{ 2, 0, 0, 0, 0, 0 },
|
||||
{ 3, 0, 0, 0, 0, 0 },
|
||||
{ 4, 0, 0, 0, 0, 0 },
|
||||
{ 5, 0, 0, 0, 0, 0 },
|
||||
{ 6, "900 Mhz", "Australia", 0, freq_list_6, MAXFREQ(freq_list_6) },
|
||||
{ 7, 0, 0, 0, 0, 0 },
|
||||
{ 8, 0, 0, 0, 0, 0 },
|
||||
{ 9, "2400 Mhz", "North America", rate_list_2400, freq_list_9, MAXFREQ(freq_list_9) },
|
||||
{ 10, "2400 Mhz", "E.T.S.I", rate_list_2400, freq_list_10, MAXFREQ(freq_list_10) },
|
||||
{ 11, "2400 Mhz", "Japan", rate_list_2400, freq_list_11, MAXFREQ(freq_list_11) },
|
||||
{ 12, "2400 Mhz", "France", rate_list_2400, freq_list_12, MAXFREQ(freq_list_12) },
|
||||
{ 13, "2400 Mhz", "Australia", rate_list_2400, freq_list_13, MAXFREQ(freq_list_13) },
|
||||
{ 14, "2400 Mhz", "Germany", rate_list_2400, freq_list_14, MAXFREQ(freq_list_14) },
|
||||
{ 15, "2400 Mhz", "U.K.(MPT1349),Spain", rate_list_2400, freq_list_15, MAXFREQ(freq_list_15) }
|
||||
};
|
||||
|
||||
char* registrationMode[] = {
|
||||
"NON-TMA",
|
||||
"TMA",
|
||||
"PSP"
|
||||
};
|
||||
|
||||
char* priorityList[] = {
|
||||
"normal",
|
||||
"high",
|
||||
"highest"
|
||||
};
|
||||
|
||||
void
|
||||
usage()
|
||||
{
|
||||
const char *progname = getprogname();
|
||||
|
||||
#if 0
|
||||
fprintf(stderr, "\nArlan configuration utility.\n\n");
|
||||
#endif
|
||||
fprintf(stderr, "Usage: %s <ifname> [<param> <value> ...]\n", progname);
|
||||
fprintf(stderr, "\t<ifname>\tArlan interface name.\n");
|
||||
fprintf(stderr, "\t<param>\t\tParameter name (see below).\n");
|
||||
fprintf(stderr, "\t<value>\t\tNew value for parameter.\n");
|
||||
fprintf(stderr, "Parameter name:\t\tValue:\n");
|
||||
fprintf(stderr, "\tcountry\t\tset Country (9-15)\n");
|
||||
fprintf(stderr, "\tpriority\tset Priority (normal, high, highest)\n");
|
||||
fprintf(stderr, "\ttxretry\t\tset Arlan Tx retry.\n");
|
||||
fprintf(stderr, "or: %s <ifname> stat\n", progname);
|
||||
fprintf(stderr, "\tprint internal arlan statistics block\n");
|
||||
#ifdef ARLCACHE
|
||||
fprintf(stderr,"or: %s <ifname> quality\n", progname);
|
||||
fprintf(stderr,"\tprint receive packet level and quality\n");
|
||||
#endif
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void
|
||||
print_al(struct arl_cfg_param *arl_io)
|
||||
{
|
||||
printf("Arlan-655(IC2000) type 0x%x v%d.%d, radio module type %s\n",
|
||||
arl_io->hardwareType,
|
||||
arl_io->majorHardwareVersion,
|
||||
arl_io->minorHardwareVersion,
|
||||
(arl_io->radioModule < 13) ?
|
||||
radio_type_list[arl_io->radioModule].name : "Unknown" );
|
||||
printf("\tname %s, sid 0x%06x, mode %s, num tx retry %d\n",
|
||||
arl_io->name,
|
||||
*(int *)arl_io->sid,
|
||||
(arl_io->registrationMode < 3) ?
|
||||
registrationMode[arl_io->registrationMode]:"Unknown",
|
||||
arl_io->txRetry );
|
||||
printf("\tchannel set %d, %s, %s\n",
|
||||
arl_io->channelSet,
|
||||
CHSET[arl_io->channelSet].fr,
|
||||
CHSET[arl_io->channelSet].country);
|
||||
printf("\tfrequency %s Mhz, bitrate %s kb/s, priority %s, receive mode %d\n",
|
||||
(CHSET[arl_io->channelSet].freq &&
|
||||
CHSET[arl_io->channelSet].max_freq > arl_io->channelNumber) ?
|
||||
CHSET[arl_io->channelSet].freq[arl_io->channelNumber].name :
|
||||
"unknown",
|
||||
(CHSET[arl_io->channelSet].rate) ?
|
||||
CHSET[arl_io->channelSet].rate[arl_io->spreadingCode].name :
|
||||
"unknown",
|
||||
arl_io->priority <= 2 ?
|
||||
priorityList[arl_io->priority] : "unknown",
|
||||
arl_io->receiveMode);
|
||||
printf("\tether %s",
|
||||
(char *)ether_ntoa((struct ether_addr *)arl_io->lanCardNodeId));
|
||||
printf(" registered to %s\n",
|
||||
(char *)ether_ntoa((struct ether_addr *)arl_io->specifiedRouter));
|
||||
}
|
||||
|
||||
void
|
||||
print_stb( struct arl_stats stb )
|
||||
{
|
||||
printf("Arlan internal statistics block\n\n");
|
||||
printf("%8u\tdatagrams transmitted\n",
|
||||
stb.numDatagramsTransmitted);
|
||||
printf("%8u\tre-transmitted\n",
|
||||
stb.numReTransmissions);
|
||||
printf("%8u\tframes discarded internally in a router\n",
|
||||
stb.numFramesDiscarded);
|
||||
printf("%8u\tdatagrams received\n",
|
||||
stb.numDatagramsReceived);
|
||||
printf("%8u\tduplicate received frame\n",
|
||||
stb.numDuplicateReceivedFrames);
|
||||
printf("%8u\tdatagrams discarded due to unavailable mail box buffer\n",
|
||||
stb.numDatagramsDiscarded);
|
||||
printf("%8d\tmaximum of re-transmissions datagram\n",
|
||||
stb.maxNumReTransmitDatagram);
|
||||
printf("%8d\tmaximum of re-transmissions frame\n",
|
||||
stb.maxNumReTransmitFrames);
|
||||
printf("%8d\tmaximum of consecutive duplicate received frames\n",
|
||||
stb.maxNumConsecutiveDuplicateFrames);
|
||||
printf("%8u\tbytes transmitted\n",
|
||||
stb.numBytesTransmitted);
|
||||
printf("%8u\tbytes received\n",
|
||||
stb.numBytesReceived);
|
||||
printf("%8u\tCRC errors\n",
|
||||
stb.numCRCErrors);
|
||||
printf("%8u\tlength errors\n",
|
||||
stb.numLengthErrors);
|
||||
printf("%8u\tabort errors\n",
|
||||
stb.numAbortErrors);
|
||||
printf("%8u\tTX underuns\n",
|
||||
stb.numTXUnderruns);
|
||||
printf("%8u\tRX overruns\n",
|
||||
stb.numRXOverruns);
|
||||
printf("%8u\tHold Offs (channel tested busy, tx delayed)\n",
|
||||
stb.numHoldOffs);
|
||||
printf("%8u\tframes transmitted\n",
|
||||
stb.numFramesTransmitted);
|
||||
printf("%8u\tframes received\n",
|
||||
stb.numFramesReceived);
|
||||
printf("%8u\treceive frames lost due unavailable buffer\n",
|
||||
stb.numReceiveFramesLost);
|
||||
printf("%8u\tRX buffer overflows \n",
|
||||
stb.numRXBufferOverflows);
|
||||
printf("%8u\tframes discarded due to Address mismatch\n",
|
||||
stb.numFramesDiscardedAddrMismatch);
|
||||
printf("%8u\tframes discarded due to SID mismatch\n",
|
||||
stb.numFramesDiscardedSIDMismatch);
|
||||
printf("%8u\tpolls transmitted\n",
|
||||
stb.numPollsTransmistted);
|
||||
printf("%8u\tpoll acknowledges received\n",
|
||||
stb.numPollAcknowledges);
|
||||
printf("%8u\tstatus vector timeout\n",
|
||||
stb.numStatusVectorTimeouts);
|
||||
printf("%8u\tNACK packets received\n",
|
||||
stb.numNACKReceived);
|
||||
}
|
||||
|
||||
#ifdef ARLCACHE
|
||||
void
|
||||
print_qlt(struct arl_sigcache *qlt)
|
||||
{
|
||||
int i;
|
||||
u_int8_t zero[6] = {0, 0, 0, 0, 0, 0};
|
||||
|
||||
for (i = 0; i < MAXARLCACHE && bcmp(qlt->macsrc, zero, 6); i++) {
|
||||
printf("[%d]:", i+1);
|
||||
printf(" %02x:%02x:%02x:%02x:%02x:%02x,",
|
||||
qlt->macsrc[0]&0xff,
|
||||
qlt->macsrc[1]&0xff,
|
||||
qlt->macsrc[2]&0xff,
|
||||
qlt->macsrc[3]&0xff,
|
||||
qlt->macsrc[4]&0xff,
|
||||
qlt->macsrc[5]&0xff);
|
||||
printf(" rx lvl/qlty: %d/%d,", qlt->level[ARLCACHE_RX],
|
||||
qlt->quality[ARLCACHE_RX]);
|
||||
printf(" tx lvl/qlty: %d/%d", qlt->level[ARLCACHE_TX],
|
||||
qlt->quality[ARLCACHE_TX]);
|
||||
printf("\n");
|
||||
qlt++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct ifreq ifr;
|
||||
struct arl_req arl_io;
|
||||
struct ether_addr *ea;
|
||||
struct arl_stats stb;
|
||||
struct arl_sigcache qlt[MAXARLCACHE];
|
||||
int sd, argind, val = -1;
|
||||
char *param, *value;
|
||||
|
||||
if (argc < 2)
|
||||
usage();
|
||||
|
||||
sd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (sd < 0)
|
||||
err(1,"socket");
|
||||
strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
|
||||
ifr.ifr_addr.sa_family = AF_INET;
|
||||
bzero(&arl_io, sizeof(arl_io));
|
||||
ifr.ifr_data = (caddr_t)&arl_io;
|
||||
|
||||
if (argc == 2) {
|
||||
if (ioctl(sd, SIOCGARLALL, (caddr_t)&ifr))
|
||||
err(1,"Get ALL");
|
||||
print_al(&arl_io.cfg);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (argc == 3) {
|
||||
if (!strcasecmp(argv[2], "stat")) {
|
||||
strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
|
||||
ifr.ifr_addr.sa_family = AF_INET;
|
||||
ifr.ifr_data = (caddr_t)&stb;
|
||||
if (ioctl(sd, SIOCGARLSTB, (caddr_t)&ifr))
|
||||
err(1,"Get STB");
|
||||
print_stb(stb);
|
||||
exit(0);
|
||||
}
|
||||
#ifdef ARLCACHE
|
||||
if (!strcasecmp( argv[2],"quality")) {
|
||||
printf("\n");
|
||||
strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
|
||||
ifr.ifr_addr.sa_family = AF_INET;
|
||||
ifr.ifr_data = (caddr_t)qlt;
|
||||
if (ioctl(sd, SIOCGARLQLT, (caddr_t)&ifr))
|
||||
err(1,"Get QLT");
|
||||
print_qlt(qlt);
|
||||
exit(0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
arl_io.what_set = 0;
|
||||
|
||||
for (argind = 2; argind < argc; argind += 2) {
|
||||
param = argv[argind];
|
||||
value = argv[argind+1];
|
||||
val = -1;
|
||||
|
||||
if (!strcasecmp(param, "priority")) {
|
||||
if (!strcasecmp(value, "normal"))
|
||||
val = 0;
|
||||
else if (!strcasecmp(value, "high"))
|
||||
val = 1;
|
||||
else if (!strcasecmp(value, "highest"))
|
||||
val = 2;
|
||||
if (val == -1)
|
||||
err( 1, "Bad priority - %s", value);
|
||||
arl_io.cfg.priority = val;
|
||||
arl_io.what_set |= ARLAN_SET_priority;
|
||||
}
|
||||
|
||||
if (!strcasecmp(param, "parent")) {
|
||||
if ((ea = (struct ether_addr*) ether_aton(value)) == NULL)
|
||||
err (1, "Bad parent's MAC - %s", value);
|
||||
for (val = 0; val < 6; val++) {
|
||||
arl_io.cfg.specifiedRouter[val] =
|
||||
(int) ea->octet[val];
|
||||
}
|
||||
arl_io.what_set |= ARLAN_SET_specifiedRouter;
|
||||
}
|
||||
|
||||
if (!strcasecmp(param, "country")) {
|
||||
arl_io.cfg.channelSet = atoi(value);
|
||||
arl_io.what_set |= ARLAN_SET_channelSet;
|
||||
}
|
||||
|
||||
if (!strcasecmp(param, "txretry")) {
|
||||
arl_io.cfg.txRetry = atoi(value);
|
||||
arl_io.what_set |= ARLAN_SET_txRetry;
|
||||
}
|
||||
}
|
||||
|
||||
if (arl_io.what_set) {
|
||||
if (ioctl(sd, SIOCSARLALL, (caddr_t)&ifr))
|
||||
err (1, "Set ALL" );
|
||||
if (ioctl(sd, SIOCGARLALL, (caddr_t)&ifr))
|
||||
err (1, "Get ALL");
|
||||
print_al(&arl_io.cfg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user