Agere Systems ORiNOCO RG-1000 Residential Gateway
aka HP 802.11b Wireless LAN Small Business Access Point

ORiNOCO RG-1000

This page describes the Agere Systems (previously Lucent) ORiNOCO RG-1000 Residential Gateway. HP co-brands this device, selling it as the HP 802.11b Wireless LAN Small Business Access Point (p/n P1981A).

The RG-1000, by some accounts, is the same as the Apple AirPort Base Station, but placed in a different package. I've never opened up an AirPort Base Station, so I cannot verify this claim.

Enough already! What's Inside?

Like any good engineer, the first thing I did with my RG-100 was to open it up.

The radio in the RG-1000 is based on a stock ORiNOCO 802.11b Silver PC card that is plugged into a small motherboard containing a PC card connector and an AMD chipset. The modem in the RG-1000 lives on a daughter board that plugs into the under side of the motherboard.

In the HP co-branded device, the PC card, which no ordinary user would ever see, amusingly is the co-branded variety, as can be seen in the picture below.

Internals of the RG-1000

The "silver" card used in the RG-1000 only supports 64-bit WEP (40-bit RC4), and therefore the RG-1000 only supports 64-bit WEP.

The trick to modify an Apple AirPort Base Station from 64-bit WEP to 128-bit WEP (104-bit RC4) works fine on the RG-1000.

The Good, The Bad, and The Ugly

The best thing about the RG-1000 is that it is relatively cheap. The street price is under $300 (US). The Apple AirPort Base Station, with arguably better industrial design, is priced similarly.

Good

bullet Price
bullet Works in BSS mode as a bridge
bullet Contains a 56k modem (if one cares about such a thing ... see below)

Bad

bullet Single 10Base-T port
bullet 64-bit WEP (40-bit RC4)
bullet 15 dBm power output (~30 mW)

Network Operation

The RG-1000 can operate in a few different modes. It can act as a residential gateway in several limited configurations. If you presently use a modem to dial out to an ISP, the RG-1000 can do that automagically and can NAT your internal network of wired and 802.11b hosts. If you have a broadband 10/100Base-T connection, e.g. DSL modem or cable modem, the RG-1000 can connect to your modem. However, as the single 10Base-T port must be used to connect to your modem, all of your internal hosts must connect via 802.11b. (It may be possible to operate the RG-1000 in "lollipop" fashion to allow connectivity for both wired and wireless internal hosts, but this would not advisable as it would not be secure.) I am not using my RG-1000 in any of these modes, so I cannot comment on how well the RG-1000 works in these fashions.

The RG-1000 can act as a straightforward 802.11b access point. In this mode, the RG-1000 behaves as an IEEE 802 bridge. If you have an existing residential gateway/firewall and existing 10/100Base-T hosts, this is the best mode to use, as it simply "extends" your internal network with 802.11b connectivity.

N.B., other 802.11b products exist on the market that contain a pair of 10/100Base-T ports. These can properly act as a residential gateway for both wired and wireless internal hosts.

Performance

With a good or excellent radio connection, I get a reliable 400 KB/s of throughput to the other hosts on my home network, as measured by ttcp/wsttcp.

The test setup involved an HP OmniBook 60000 running Windows 2000 Professional with an ORiNOCO Gold PC Card, an Intel Express 460T switch, a 700 MHz Pentium III server with an Intel PCI EtherExpress Pro100 NIC running RedHat 7.0, and (of course) the RG-1000 operating in AP/bridge mode. By comparison, I get 110 KB/sec with the same machines with a full-duplex 100Base-T connection, using the 3Com 10/100 Mini PCI card in the OmniBook in lieu of the ORiNOCO Gold PC Card.

[ch@heavens ch]$ ttcp -t snaggle-wired
ttcp-t: buflen=8192, nbuf=2048, align=16384/+0, port=5001 tcp -> snaggle-wired
ttcp-t: socket
ttcp-t: connect
ttcp-t: 16777216 bytes in 1.44 real seconds = 11341.02 KB/sec +++
ttcp-t: 2048 I/O calls, msec/call = 0.72, calls/sec = 1417.63
ttcp-t: 0.0user 0.1sys 0:01real 11% 0i+0d 0maxrss 0+2pf 0+0csw
[ch@heavens ch]$ ttcp -t snaggle-wifi
ttcp-t: buflen=8192, nbuf=2048, align=16384/+0, port=5001 tcp -> snaggle-wifi
ttcp-t: socket
ttcp-t: connect
ttcp-t: 16777216 bytes in 39.06 real seconds = 419.46 KB/sec +++
ttcp-t: 2048 I/O calls, msec/call = 19.53, calls/sec = 52.43
ttcp-t: 0.0user 0.1sys 0:39real 0% 0i+0d 0maxrss 0+2pf 0+0csw
[ch@heavens ch]$ 

Performance becomes very poor if power management is enable on the card in the OmniBook. I haven't yet investigated why.

Configuration

Configuration is accomplished via SNMP. You may use either the ORiNOCO RG Setup Utility or a GPL'ed configurator written by Jon Sevy.

It is worthwhile starting with the ORiNOCO RG Setup Utility, for the simple reason that it will flash the RG-1000 firmware (and presumably the PC card firmware, but I'm not certain) with the latest bits, with very little fuss. The downside is the need to use a Windows PC. I highly recommend discarding the CD-ROM that comes with the RG-1000 and downloading the latest software from ORiNOCO before proceeding. The ORiNOCO software is wizard-based and designed to be as simple as possible to use. As such, it doesn't let you configure all the options in the device.

Alternatively, you can use the Apple AirPort Base Station Configurator by Jon Sevy. This is a Java program that should run under any JRE. The AABS Configurator allows you to tweak all the options in the RG-1000 and is certainly the way to go if you are familiar with IPv4 networking. If you perform the 128-bit WEP upgrade, you will have to use the AABS Configurator (and specifically the 128-bit version) as the ORiNOCO RG Setup Utility simply won't let you specify a 128-bit WEP key.

Management

The RG-1000 supports SNMP, which is a good thing even for home environments.

Here's a walk through the MIB's.

[ch@heavens ch]$ snmpwalk rg1000 secret 
system.sysDescr.0 = RG-1000 V3.79 SN-00UT52260791 V3.65
system.sysObjectID.0 = OID: enterprises.762.2
system.sysUpTime.0 = Timeticks: (23981638) 2 days, 18:36:56.38
system.sysContact.0 = 
system.sysName.0 = ORINOCO RG-1000 secret
system.sysLocation.0 = 
system.sysServices.0 = 2
interfaces.ifNumber.0 = 3
interfaces.ifTable.ifEntry.ifIndex.1 = 1
interfaces.ifTable.ifEntry.ifIndex.2 = 2
interfaces.ifTable.ifEntry.ifIndex.3 = 3
interfaces.ifTable.ifEntry.ifDescr.1 = AMD PCNetISA
interfaces.ifTable.ifEntry.ifDescr.2 = WaveLAN/IEEE
interfaces.ifTable.ifEntry.ifDescr.3 = V.90 Modem: AMBIT KITTY VERSIO
interfaces.ifTable.ifEntry.ifType.1 = ethernetCsmacd(6)
interfaces.ifTable.ifEntry.ifType.2 = ethernetCsmacd(6)
interfaces.ifTable.ifEntry.ifType.3 = propPointToPointSerial(22)
interfaces.ifTable.ifEntry.ifMtu.1 = 1522
interfaces.ifTable.ifEntry.ifMtu.2 = 1522
interfaces.ifTable.ifEntry.ifMtu.3 = 1522
interfaces.ifTable.ifEntry.ifSpeed.1 = Gauge: 10000000
interfaces.ifTable.ifEntry.ifSpeed.2 = Gauge: 11000000
interfaces.ifTable.ifEntry.ifSpeed.3 = Gauge: 115200
interfaces.ifTable.ifEntry.ifPhysAddress.1 = secret
interfaces.ifTable.ifEntry.ifPhysAddress.2 = secret
interfaces.ifTable.ifEntry.ifPhysAddress.3 = 0:0:0:0:0:0
interfaces.ifTable.ifEntry.ifAdminStatus.1 = up(1)
interfaces.ifTable.ifEntry.ifAdminStatus.2 = up(1)
interfaces.ifTable.ifEntry.ifAdminStatus.3 = down(2)
interfaces.ifTable.ifEntry.ifOperStatus.1 = up(1)
interfaces.ifTable.ifEntry.ifOperStatus.2 = up(1)
interfaces.ifTable.ifEntry.ifOperStatus.3 = down(2)
interfaces.ifTable.ifEntry.ifLastChange.1 = Timeticks: (0) 0:00:00.00
interfaces.ifTable.ifEntry.ifLastChange.2 = Timeticks: (0) 0:00:00.00
interfaces.ifTable.ifEntry.ifLastChange.3 = Timeticks: (0) 0:00:00.00
interfaces.ifTable.ifEntry.ifInOctets.1 = 624144534
interfaces.ifTable.ifEntry.ifInOctets.2 = 49301682
interfaces.ifTable.ifEntry.ifInOctets.3 = 0
interfaces.ifTable.ifEntry.ifInUcastPkts.1 = 551867
interfaces.ifTable.ifEntry.ifInUcastPkts.2 = 389586
interfaces.ifTable.ifEntry.ifInUcastPkts.3 = 0
interfaces.ifTable.ifEntry.ifInNUcastPkts.1 = 6073
interfaces.ifTable.ifEntry.ifInNUcastPkts.2 = 6750
interfaces.ifTable.ifEntry.ifInNUcastPkts.3 = 0
interfaces.ifTable.ifEntry.ifInDiscards.1 = 0
interfaces.ifTable.ifEntry.ifInDiscards.2 = 0
interfaces.ifTable.ifEntry.ifInDiscards.3 = 0
interfaces.ifTable.ifEntry.ifInErrors.1 = 2374
interfaces.ifTable.ifEntry.ifInErrors.2 = 2231
interfaces.ifTable.ifEntry.ifInErrors.3 = 0
interfaces.ifTable.ifEntry.ifInUnknownProtos.1 = 0
interfaces.ifTable.ifEntry.ifInUnknownProtos.2 = 0
interfaces.ifTable.ifEntry.ifInUnknownProtos.3 = 0
interfaces.ifTable.ifEntry.ifOutOctets.1 = 49442637
interfaces.ifTable.ifEntry.ifOutOctets.2 = 624156054
interfaces.ifTable.ifEntry.ifOutOctets.3 = 0
interfaces.ifTable.ifEntry.ifOutUcastPkts.1 = 389475
interfaces.ifTable.ifEntry.ifOutUcastPkts.2 = 549544
interfaces.ifTable.ifEntry.ifOutUcastPkts.3 = 0
interfaces.ifTable.ifEntry.ifOutNUcastPkts.1 = 9212
interfaces.ifTable.ifEntry.ifOutNUcastPkts.2 = 8552
interfaces.ifTable.ifEntry.ifOutNUcastPkts.3 = 0
interfaces.ifTable.ifEntry.ifOutDiscards.1 = 0
interfaces.ifTable.ifEntry.ifOutDiscards.2 = 0
interfaces.ifTable.ifEntry.ifOutDiscards.3 = 0
interfaces.ifTable.ifEntry.ifOutErrors.1 = 2
interfaces.ifTable.ifEntry.ifOutErrors.2 = 1558
interfaces.ifTable.ifEntry.ifOutErrors.3 = 0
interfaces.ifTable.ifEntry.ifOutQLen.1 = Gauge: 0
interfaces.ifTable.ifEntry.ifOutQLen.2 = Gauge: 0
interfaces.ifTable.ifEntry.ifOutQLen.3 = Gauge: 0
interfaces.ifTable.ifEntry.ifSpecific.1 = OID: transmission.7
interfaces.ifTable.ifEntry.ifSpecific.2 = OID: .iso.2.840.10036
interfaces.ifTable.ifEntry.ifSpecific.3 = OID: transmission.33
ip.ipForwarding.0 = notForwarding(2)
ip.ipDefaultTTL.0 = 255
ip.ipInReceives.0 = 945509
ip.ipInHdrErrors.0 = 0
ip.ipInAddrErrors.0 = 0
ip.ipForwDatagrams.0 = 0
ip.ipInUnknownProtos.0 = 0
ip.ipInDiscards.0 = 0
ip.ipInDelivers.0 = 162
ip.ipOutRequests.0 = 175
ip.ipOutDiscards.0 = 0
ip.ipOutNoRoutes.0 = 0
ip.ipReasmTimeout.0 = 0
ip.ipReasmReqds.0 = 0
ip.ipReasmOKs.0 = 0
ip.ipReasmFails.0 = 0
ip.ipFragOKs.0 = 0
ip.ipFragFails.0 = 0
ip.ipFragCreates.0 = 0
ip.ipAddrTable.ipAddrEntry.ipAdEntAddr.10.0.0.10 = IpAddress: 10.0.0.10
ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.10.0.0.10 = 1
ip.ipAddrTable.ipAddrEntry.ipAdEntNetMask.10.0.0.10 = IpAddress: 0.0.0.0
ip.ipAddrTable.ipAddrEntry.ipAdEntBcastAddr.10.0.0.10 = 1
ip.ipAddrTable.ipAddrEntry.ipAdEntReasmMaxSize.10.0.0.10 = 0
ip.ipRouteTable.ipRouteEntry.ipRouteDest.0.0.0.0 = IpAddress: 0.0.0.0
ip.ipRouteTable.ipRouteEntry.ipRouteIfIndex.0.0.0.0 = 1
ip.ipRouteTable.ipRouteEntry.ipRouteMetric1.0.0.0.0 = 0
ip.ipRouteTable.ipRouteEntry.ipRouteMetric2.0.0.0.0 = -1
ip.ipRouteTable.ipRouteEntry.ipRouteMetric3.0.0.0.0 = -1
ip.ipRouteTable.ipRouteEntry.ipRouteMetric4.0.0.0.0 = -1
ip.ipRouteTable.ipRouteEntry.ipRouteNextHop.0.0.0.0 = IpAddress: 10.0.0.254
ip.ipRouteTable.ipRouteEntry.ipRouteType.0.0.0.0 = direct(3)
ip.ipRouteTable.ipRouteEntry.ipRouteProto.0.0.0.0 = local(2)
ip.ipRouteTable.ipRouteEntry.ipRouteAge.0.0.0.0 = 0
ip.ipRouteTable.ipRouteEntry.ipRouteMask.0.0.0.0 = IpAddress: 0.0.0.0
ip.ipRouteTable.ipRouteEntry.ipRouteMetric5.0.0.0.0 = -1
ip.ipRouteTable.ipRouteEntry.ipRouteInfo.0.0.0.0 = OID: .ccitt.nullOID
ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaIfIndex.1.10.0.0.1 = 1
ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaIfIndex.1.10.0.0.254 = 1
ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress.1.10.0.0.1 = secret
ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaPhysAddress.1.10.0.0.254 = secret
ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaNetAddress.1.10.0.0.1 = IpAddress: 10.0.0.1
ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaNetAddress.1.10.0.0.254 = IpAddress: 10.0.0.254
ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaType.1.10.0.0.1 = dynamic(3)
ip.ipNetToMediaTable.ipNetToMediaEntry.ipNetToMediaType.1.10.0.0.254 = dynamic(3)
ip.ipRoutingDiscards.0 = 0
icmp.icmpInMsgs.0 = 0
icmp.icmpInErrors.0 = 0
icmp.icmpInDestUnreachs.0 = 0
icmp.icmpInTimeExcds.0 = 0
icmp.icmpInParmProbs.0 = 0
icmp.icmpInSrcQuenchs.0 = 0
icmp.icmpInRedirects.0 = 0
icmp.icmpInEchos.0 = 0
icmp.icmpInEchoReps.0 = 0
icmp.icmpInTimestamps.0 = 0
icmp.icmpInTimestampReps.0 = 0
icmp.icmpInAddrMasks.0 = 0
icmp.icmpInAddrMaskReps.0 = 0
icmp.icmpOutMsgs.0 = 0
icmp.icmpOutErrors.0 = 0
icmp.icmpOutDestUnreachs.0 = 0
icmp.icmpOutTimeExcds.0 = 0
icmp.icmpOutParmProbs.0 = 0
icmp.icmpOutSrcQuenchs.0 = 0
icmp.icmpOutRedirects.0 = 0
icmp.icmpOutEchos.0 = 0
icmp.icmpOutEchoReps.0 = 0
icmp.icmpOutTimestamps.0 = 0
icmp.icmpOutTimestampReps.0 = 0
icmp.icmpOutAddrMasks.0 = 0
icmp.icmpOutAddrMaskReps.0 = 0
udp.udpInDatagrams.0 = 226
udp.udpNoPorts.0 = 0
udp.udpInErrors.0 = 0
udp.udpOutDatagrams.0 = 241
udp.udpTable.udpEntry.udpLocalAddress.0.0.0.0.161 = IpAddress: 0.0.0.0
udp.udpTable.udpEntry.udpLocalPort.0.0.0.0.161 = 161
transmission.7.2.1.1.1 = 1
transmission.7.2.1.1.2 = 2
transmission.7.2.1.2.1 = 1218
transmission.7.2.1.2.2 = 0
transmission.7.2.1.3.1 = 1218
transmission.7.2.1.3.2 = 2231
transmission.7.2.1.4.1 = 210
transmission.7.2.1.4.2 = 35954
transmission.7.2.1.5.1 = 330
transmission.7.2.1.5.2 = 6529
transmission.7.2.1.6.1 = 0
transmission.7.2.1.6.2 = 0
transmission.7.2.1.7.1 = 2725
transmission.7.2.1.7.2 = 0
transmission.7.2.1.8.1 = 0
transmission.7.2.1.8.2 = 0
transmission.7.2.1.9.1 = 2
transmission.7.2.1.9.2 = 1558
transmission.7.2.1.10.1 = 0
transmission.7.2.1.10.2 = 0
transmission.7.2.1.11.1 = 0
transmission.7.2.1.11.2 = 0
transmission.7.2.1.13.1 = 0
transmission.7.2.1.13.2 = 0
transmission.7.2.1.16.1 = 1156
transmission.7.2.1.16.2 = 0
snmp.snmpInPkts.0 = 238
snmp.snmpOutPkts.0 = 238
snmp.snmpInBadVersions.0 = 0
snmp.snmpInBadCommunityNames.0 = 0
snmp.snmpInBadCommunityUses.0 = 2
snmp.snmpInASNParseErrs.0 = 0
snmp.snmpInTooBigs.0 = 0
snmp.snmpInNoSuchNames.0 = 0
snmp.snmpInBadValues.0 = 0
snmp.snmpInReadOnlys.0 = 0
snmp.snmpInGenErrs.0 = 0
snmp.snmpInTotalReqVars.0 = 212
snmp.snmpInTotalSetVars.0 = 34
snmp.snmpInGetRequests.0 = 23
snmp.snmpInGetNexts.0 = 193
snmp.snmpInSetRequests.0 = 36
snmp.snmpInGetResponses.0 = 0
snmp.snmpInTraps.0 = 0
snmp.snmpOutTooBigs.0 = 0
snmp.snmpOutNoSuchNames.0 = 2
snmp.snmpOutBadValues.0 = 0
snmp.snmpOutGenErrs.0 = 0
snmp.snmpOutGetRequests.0 = 0
snmp.snmpOutGetNexts.0 = 0
snmp.snmpOutSetRequests.0 = 0
snmp.snmpOutGetResponses.0 = 262
snmp.snmpOutTraps.0 = 0
snmp.snmpEnableAuthenTraps.0 = enabled(1)
17.1.1.0 = Hex: 00 02 2D 15 2D D0 
17.1.2.0 = 3
17.1.3.0 = 2
17.1.4.1.1.1 = 1
17.1.4.1.1.2 = 2
17.1.4.1.1.3 = 3
17.1.4.1.2.1 = 1
17.1.4.1.2.2 = 2
17.1.4.1.2.3 = 3
17.1.4.1.3.1 = OID: .ccitt.nullOID
17.1.4.1.3.2 = OID: .ccitt.nullOID
17.1.4.1.3.3 = OID: .ccitt.nullOID
17.1.4.1.4.1 = 0
17.1.4.1.4.2 = 0
17.1.4.1.4.3 = 0
17.1.4.1.5.1 = 0
17.1.4.1.5.2 = 0
17.1.4.1.5.3 = 0
17.4.1.0 = 0
17.4.2.0 = 300
17.4.3.1.1.0.2.45.12.148.153 = Hex: secret 
17.4.3.1.1.0.48.193.10.147.196 = Hex: secret 
17.4.3.1.1.0.128.200.248.71.2 = Hex: secret 
17.4.3.1.1.0.144.39.246.170.35 = Hex: secret 
17.4.3.1.1.0.160.204.59.40.207 = Hex: secret 
17.4.3.1.2.0.2.45.12.148.153 = 2
17.4.3.1.2.0.48.193.10.147.196 = 1
17.4.3.1.2.0.128.200.248.71.2 = 1
17.4.3.1.2.0.144.39.246.170.35 = 1
17.4.3.1.2.0.160.204.59.40.207 = 1
17.4.3.1.3.0.2.45.12.148.153 = 3
17.4.3.1.3.0.48.193.10.147.196 = 3
17.4.3.1.3.0.128.200.248.71.2 = 3
17.4.3.1.3.0.144.39.246.170.35 = 3
17.4.3.1.3.0.160.204.59.40.207 = 3
17.4.4.1.1.1 = 1
17.4.4.1.1.2 = 2
17.4.4.1.1.3 = 3
17.4.4.1.2.1 = 0
17.4.4.1.2.2 = 0
17.4.4.1.2.3 = 0
17.4.4.1.3.1 = 555476
17.4.4.1.3.2 = 396165
17.4.4.1.3.3 = 0
17.4.4.1.4.1 = 396165
17.4.4.1.4.2 = 555477
17.4.4.1.4.3 = 0
17.4.4.1.5.1 = 0
17.4.4.1.5.2 = 0
17.4.4.1.5.3 = 0

There is also an undocumented 1.3.6.1.4.1.762.2.5.* MIB that is used for link testing.

line

Written by Christopher Hoover <ch@murgatroid.com>. Comments and corrections welcome. Last edited 03/04/2002 .


Valid HTML 4.0! Blue Ribbon Campaign