I finally got my hands on one of these beasts after seeing it
'supported' by someone on the m0n0wall forums (circa 2003) and decided
to see what it takes to upgrade its hardware and retrofit it with a
modern operating system -- OpenBSD of course. I'm providing this
eMail as a bit of a prod for some extra information as well as to
share my extrapolations to a publicly archived list.
The Nortel Contivity 100 is a small gray computer measuring
approximately 36.5cm x 30.5cm x 7.0cm and weighs approximately 4.3KG.
Externally, there is a power connector and accompanying power switch,
115VAC/230VAC switch, 10/100 ethernet port (sis1), DB9 console port
(tty00), PCI slot, and 8-pin DIP Switch (SW1) in the rear. The front
houses seven 10/100 ethernet ports connected to an internal switch as
well as their corresponding status LEDs (10/100 Link/Activity and Full
Duplex) as well as a Power/HDD Activity LED and 8 proprietary LEDs
that are controlled by some odd SETLEDS.EXE program in the root of the
original Nortel software (Instant Internet Version 7.10 on this one).
After removing the chassis by pulling 3 phillips screws from the rear
of the unit and 4 from each side, the top of the chassis slides
rearward/upward to expose the mainboard, power supply, internal switch
and a single 3.5" HDD bay. The mainboard is a (super?) Socket7 with
two IDE ATA66 interfaces (one of which is occupied by an IDE -> CF
converter, complete with 8MB of CF), a 168-pin PC100 SDRAM slot, a CPU
slot with a Cyrix 333 (clocked at 266MHz with a 66MHz FSB), two 10/100
ethernet interfaces (both sis(4), one external as mentioned earlier
and one is attached via a proprietary 10-pin connector jumped to the
internal 8-port switch -- it has internal connectivity/activity and
duplex LEDs(green)), 3 3-pin fan headers, one 15-pin VGA header (J16),
one 4-pin DIP Switch (SW3) that controls FSB, one 8-pin DIP Switch
(SW2) that controls CPU Multiplier and VCore, 12MB of on-board RAM, a
Via VT8501 north bridge, a Via VT82C686A south bridge, a PCI slot (PCI
Bios Revision 2.1), a header for ATX power, keylock, HDD activity,
reset switch (all unused by default), and a standard ATX power
connector. There is another header, J12, which is unidentified as
well as a watchdog trace that is identified by J14 just above the
CR2032 battery.
The Contivity 100 also houses a physically-separate 8-port 10/100
switch internally. 7 Ports are accessible via RJ45 connectors
externally, and one is connected to the mainboard via the same 10-pin
proprietary jumper mentioned earlier. The switch seems to be 'dumb',
using an Allayer AL104 standalone 8-port switch which utilizes a
Broadcom BCM5228 transciever. It is powered by a 6-pin connector from
the power supply.
The proprietary LEDs on the front of the unit are connected to a PCB
which is connected via ribbon cable to DAUG.LCD header on the
mainboard. I'm not sure how to interface this and disassembling the
SETLEDS.EXE didn't yield enough clues as to its operation, but it
would have been nice if Nortel had used a standard GPIO circuit.
The power supply is not much to mention, with no internal enclosure or
markings that depect its rated output.
There are three (relatively noisy) fans in the unit, one 40mm unit on
the side by the PCI slot, one 50mm unit on the CPU and one 60mm unit
in front of the PSU.
On to the OpenBSD part!
After installing OpenBSD 3.9 (Generic i386) to a 512MB CF card using a
CF-> IDE adapter in another machine, I removed the default Nortel 8MB
CF card and installed 256MB of PC100 RAM. I also set the default
console to tty00 @ 9600bps. ('tip tty00' connects perfectly to the
Contivity from another machine). dmesg follows:
OpenBSD 3.9 (GENERIC) #617: Thu Mar 2 02:26:48 MST 2006
[EMAIL PROTECTED]:/usr/src/sys/arch/i386/compile/GENERIC
cpu0: Cyrix 6x86MX ("CyrixInstead" 686-class) 267 MHz
cpu0: FPU,DE,TSC,MSR,CX8,PGE,CMOV,MMX,TM2,CNXT-ID
real mem = 280600576 (274024K)
avail mem = 248532992 (242708K)
using 3450 buffers containing 14131200 bytes (13800K) of memory
mainbus0 (root)
bios0 at mainbus0: AT/286+(bb) BIOS, date 01/05/01, BIOS32 rev. 0 @ 0xfb2e0
apm0 at bios0: Power Management spec V1.2
apm0: AC on, battery charge unknown
apm0: flags 70102 dobusy 1 doidle 1
pcibios0 at bios0: rev 2.1 @ 0xf0000/0xb768
pcibios0: PCI IRQ Routing Table rev 1.0 @ 0xfddd0/144 (7 entries)
pcibios0: PCI Exclusive IRQs: 10 11 12
pcibios0: PCI Interrupt Router at 000:07:0 ("VIA VT82C596A ISA" rev 0x00)
pcibios0: PCI bus #1 is the last bus
bios0: ROM list: 0xc0000/0x9000! 0xd0000/0x2200! 0xd3000/0x2200
cpu0 at mainbus0
pci0 at mainbus0 bus 0: configuration mode 1 (no bios)
pchb0 at pci0 dev 0 function 0 "VIA VT8501" rev 0x04
ppb0 at pci0 dev 1 function 0 "VIA VT8501 AGP" rev 0x00
pci1 at ppb0 bus 1
vga1 at pci1 dev 0 function 0 "Trident CyberBlade i7" rev 0x5d
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
pcib0 at pci0 dev 7 function 0 "VIA VT82C686 ISA" rev 0x22
pciide0 at pci0 dev 7 function 1 "VIA VT82C571 IDE" rev 0x10: ATA66,
channel 0 configured to compatibility, channel 1 configured to
compatibility
wd0 at pciide0 channel 0 drive 0: <TOSHIBA THNCF512MMG>
wd0: 1-sector PIO, LBA, 488MB, 1000944 sectors
wd0(pciide0:0:0): using PIO mode 0
viaenv0 at pci0 dev 7 function 4 "VIA VT82C686 SMBus" rev 0x30
sis0 at pci0 dev 8 function 0 "NS DP83815 10/100" rev 0x00, DP83815C:
irq 10, address 00:e0:7b:f2:c1:72
nsphyter0 at sis0 phy 0: DP83815 10/100 PHY, rev. 1
sis1 at pci0 dev 9 function 0 "NS DP83815 10/100" rev 0x00, DP83815C:
irq 12, address 00:e0:7b:f2:c1:73
nsphyter1 at sis1 phy 0: DP83815 10/100 PHY, rev. 1
isa0 at pcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pcppi0 at isa0 port 0x61
midi0 at pcppi0: <PC speaker>
spkr0 at pcppi0
npx0 at isa0 port 0xf0/16: using exception 16
pccom0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
pccom0: console
biomask ebed netmask ffed ttymask ffef
pctr: user-level cycle counter enabled
dkcsum: wd0 matches BIOS drive 0x80
dkcsum: wd1 matches BIOS drive 0x81
root on wd0a
rootdev=0x0 rrootdev=0x300 rawdev=0x302
Take note of the viaenv0, and what hw.sensors pulls up:
hw.sensors.0=viaenv0, TSENS1, temp, 33.40 degC / 92.12 degF
hw.sensors.1=viaenv0, TSENS2, temp, 29.52 degC / 85.14 degF
hw.sensors.2=viaenv0, TSENS3, temp, 26.60 degC / 79.88 degF
hw.sensors.3=viaenv0, FAN1, fanrpm, 5672 RPM
hw.sensors.4=viaenv0, FAN2, fanrpm, 5720 RPM
hw.sensors.5=viaenv0, VSENS1, volts_dc, 2.25 V
hw.sensors.6=viaenv0, VSENS2, volts_dc, 2.61 V
hw.sensors.7=viaenv0, Vcore, volts_dc, 3.33 V
hw.sensors.8=viaenv0, VSENS3, volts_dc, 5.03 V
hw.sensors.9=viaenv0, VSENS4, volts_dc, 11.89 V
It 'just works', a beautiful thing!
Now, to address an oddity that others have reported -- the watchdog
circuit. I have NOT cut my watchdog circuit and have installed
OpenBSD on 3 of these units so far. There is an apm0 device, but I'm
not sure if it does much. There is not a watchdog device recognized
by OpenBSD, nor are any of the sysctls for it set. My units do not
reboot after 2 minutes -- in fact, some have been operating for days.
Might anyone have an explanation for the phenom?
A few SSL performance figures with the default CPU (though this test
is less than ideal, I'm not about to compile a kernel on this thing
for timings):
[EMAIL PROTECTED] ~]# openssl speed -evp aes-128-cbc
To get the most accurate results, try to run this
program when this computer is idle.
Doing aes-128-cbc for 3s on 16 size blocks: 652261 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 64 size blocks: 186141 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 48027 aes-128-cbc's in 2.98s
Doing aes-128-cbc for 3s on 1024 size blocks: 12204 aes-128-cbc's in 3.01s
Doing aes-128-cbc for 3s on 8192 size blocks: 1524 aes-128-cbc's in 3.00s
OpenSSL 0.9.7g 11 Apr 2005
built on: date not available
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) aes(partial) blow
compiler: information not available
available timing options: USE_TOD HZ=100 [sysconf value]
timing function used: getrusage
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128-cbc 3478.73k 3971.01k 4119.76k 4154.81k 4161.54k
I don't have any switching performance figures for the AL104, but
perhaps I will post an addendum if I get the chance to test that
aspect. Testing packet-forwarding ability on this CPU is probably
worthless, but I may do that at a later date as well just for
reference.
On to upgrades/modifications:
CPU: I've now dropped in an AMD K6-2 550MHz CPU with an upgraded
heatsink. I had to make some changes to SW2 and SW3. SW2 pins 1,2,3
(CPU Multiplier) had to be modified for 5.5 instead of the default
Cyrix 4.5. SW2 pins 4,5,6,7,8 had to be modified for a 2.3V CPU Core
instead of the default 2.2V for the Cyrix. SW3 pins 1,2,3,4 were
changed to fix the FSB to 100MHz -- a diagram of this switch will
follow as it is NOT silkscreened onto the mainboard for its settings.
The BIOS would not boot for certain FSB adjustments, and are hence
labelled 'unknown'.
SW 2 settings
1 2 3 4 = FSB (approximately)
Off, Off, Off, Off = 60MHz
On, Off, Off, Off = 66MHz
Off, On, Off, Off = 70MHz
Off, Off, Off, On = 75MHz
On, Off, Off, On = 80MHz
On, Off, On, Off = 84MHz
Off, On, Off, On = 84MHz
On, On, Off, Off = 90MHz
Off, On, On, Off = 95MHz
Off, Off, On, Off = 97MHz
On, On, On, Off = 100MHz
On, On, Off, On = 105MHz
Off, Off, On, On = 110MHz
Off, On, On, On = unknown
On, Off, On, On = unknown
On, On, On, On = unknown
Here is a dmesg with the AMD K6-2 550, and a quick OpenSSL speed test.
OpenBSD 3.9 (GENERIC) #617: Thu Mar 2 02:26:48 MST 2006
[EMAIL PROTECTED]:/usr/src/sys/arch/i386/compile/GENERIC
cpu0: AMD-K6(tm) 3D processor ("AuthenticAMD" 586-class) 551 MHz
cpu0: FPU,V86,DE,PSE,TSC,MSR,MCE,CX8,PGE,MMX
real mem = 280600576 (274024K)
avail mem = 248532992 (242708K)
using 3450 buffers containing 14131200 bytes (13800K) of memory
mainbus0 (root)
bios0 at mainbus0: AT/286+(bb) BIOS, date 01/05/01, BIOS32 rev. 0 @ 0xfb2e0
apm0 at bios0: Power Management spec V1.2
apm0: AC on, battery charge unknown
apm0: flags 70102 dobusy 1 doidle 1
pcibios0 at bios0: rev 2.1 @ 0xf0000/0xb768
pcibios0: PCI IRQ Routing Table rev 1.0 @ 0xfddd0/144 (7 entries)
pcibios0: PCI Exclusive IRQs: 10 11 12
pcibios0: PCI Interrupt Router at 000:07:0 ("VIA VT82C596A ISA" rev 0x00)
pcibios0: PCI bus #1 is the last bus
bios0: ROM list: 0xc0000/0x9000! 0xd0000/0x2200! 0xd3000/0x2200
cpu0 at mainbus0
pci0 at mainbus0 bus 0: configuration mode 1 (no bios)
pchb0 at pci0 dev 0 function 0 "VIA VT8501" rev 0x04
ppb0 at pci0 dev 1 function 0 "VIA VT8501 AGP" rev 0x00
pci1 at ppb0 bus 1
vga1 at pci1 dev 0 function 0 "Trident CyberBlade i7" rev 0x5d
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
pcib0 at pci0 dev 7 function 0 "VIA VT82C686 ISA" rev 0x22
pciide0 at pci0 dev 7 function 1 "VIA VT82C571 IDE" rev 0x10: ATA66,
channel 0 configured to compatibility, channel 1 configured to
compatibility
wd0 at pciide0 channel 0 drive 0: <TOSHIBA THNCF512MMG>
wd0: 1-sector PIO, LBA, 488MB, 1000944 sectors
wd0(pciide0:0:0): using PIO mode 0
viaenv0 at pci0 dev 7 function 4 "VIA VT82C686 SMBus" rev 0x30
sis0 at pci0 dev 8 function 0 "NS DP83815 10/100" rev 0x00, DP83815C:
irq 10, address 00:e0:7b:f2:c1:72
nsphyter0 at sis0 phy 0: DP83815 10/100 PHY, rev. 1
sis1 at pci0 dev 9 function 0 "NS DP83815 10/100" rev 0x00, DP83815C:
irq 12, address 00:e0:7b:f2:c1:73
nsphyter1 at sis1 phy 0: DP83815 10/100 PHY, rev. 1
isa0 at pcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pcppi0 at isa0 port 0x61
midi0 at pcppi0: <PC speaker>
spkr0 at pcppi0
npx0 at isa0 port 0xf0/16: using exception 16
pccom0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
pccom0: console
biomask ebed netmask ffed ttymask ffef
pctr: user-level cycle counter enabled
mtrr: K6-family MTRR support (2 registers)
dkcsum: wd0 matches BIOS drive 0x80
root on wd0a
rootdev=0x0 rrootdev=0x300 rawdev=0x302
[EMAIL PROTECTED] ~]# openssl speed -evp aes-128-cbc
To get the most accurate results, try to run this
program when this computer is idle.
Doing aes-128-cbc for 3s on 16 size blocks: 1276812 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 64 size blocks: 465224 aes-128-cbc's in 2.99s
Doing aes-128-cbc for 3s on 256 size blocks: 120704 aes-128-cbc's in 3.01s
Doing aes-128-cbc for 3s on 1024 size blocks: 30456 aes-128-cbc's in 3.01s
Doing aes-128-cbc for 3s on 8192 size blocks: 3814 aes-128-cbc's in 3.00s
OpenSSL 0.9.7g 11 Apr 2005
built on: date not available
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long)
aes(partial) blowfish(idx)
compiler: information not available
available timing options: USE_TOD HZ=100 [sysconf value]
timing function used: getrusage
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128-cbc 6809.66k 9950.69k 10273.32k 10368.65k 10414.76k
I have also tried a few PCI cards, including a couple of quad-ethernet
boards, a soekris-produced HiFn 7955 (decent results, excepting the
PCI latency and transfer overhead), and even a SCSI card and SCSI
drive (though I suspect this is too much for the little PSU to handle
long-term). An IDE drive comes up fine on the second IDE channel,
though I've only tested a 60GB Seagate Barracuda ATA IV.
The main drawback to this device is its size and noise. A larger HSF
and slower RPM CPU fan would work wonders, and some experimentation
with the other two fans has yielded interesting, yet mixed, results
when checking the onboard sensors. Someone with a passion for cooling
could probably work wonders on it, though I'm not that person today.
It is rumoured that these units can accept up to 512MB of RAM, but
I've only gone so far as 256MB as it's more than enough for my
application (whatever that is). For the record, this is an 'E68'
unit, though I can't seem to tell the difference between it and the
'E70' units. There are also 'E67's but I don't have any of those.
Perhaps they are differences in BIOS revisions, 'Instant Internet' or
something else I have yet to locate.
On my todo list are the following:
Map out the 'unknown' header, J12, which I think is for a PS2 keyboard/mouse.
Put in a PCI video card or attach to the onboard header to have a look
at the BIOS information, but I don't have the necessary parts/pieces
on-hand at the moment.
Map out the 'Configure' 8-pin DIP switch (SW1) on the rear of the
chassis -- perhaps there is a BIOS -> COM redirect here or some
setting of console speed, parity, bits? Right now they are all set to
Off.
Find a way to control the 8 proprietary LEDs on the front of the
chassis. After the unit has booted (~70s with 256MB of RAM), only the
Power/HDD light remains lit (green, flashes orange on HDD activity).
They can be set to Red, Green or Orange with the setleds.exe utility
in DOS -- /? output below:
SETLEDS 1.2 - Set LEDs utility
(C) Copyright Performance Technology, Inc. 2000
Usage:
SETLEDS [/GREEN=<hex>] [/RED=<hex>] [/ORANGE=<hex>] [/POWER] [/WAIT=<secs>]
[/CYCLE=<color>] [/DELAY=<ticks>] [TIMES=<count>]
Additional information from Google for the curious:
http://faq.pfsense.com/index.php?sid=57092&lang=en&action=artikel&cat=2&id=27&artlang=en
http://m0n0.ch/wall/list/showmsg.php?id=20/40
http://m0n0.ch/wall/list/showmsg.php?id=178/15
http://www.freebsdforums.org/forums/showthread.php?t=17436