Avid S3L-X, AVB, and the Netgear GS724Tv4 network switch

I’m part of the audio team at ICF, and learned that we had an unused Netgear GS724Tv4  network switch lying around. The switch was originally purchased to connect multiple AVB devices together, similar to the MOTU AVB Switch, but with more ports, and because the MOTU doesn’t work with the Avid S3L. Unfortunately, nobody had ever gotten it to work with AVB, so I took a stab and wrote up the instructions below.

Using a Netgear GS724Tv4 network switch to pass AVB between a Mac Pro and the Avid S3L-X

I can confirm that the switch works (firmware version 6.3.1.19 tested).

Starting with factory default settings, here are the step-by-step instructions. These instructions came from Updating Netgear GS724Tv4 config for Tesira AVnu certification with one small modification.

  1. Click on the Switching tab, then click on the Auto-VoIP sub-page. In the “Protocol Based Port Settings” table, click the checkbox in the top-left corner to select all ports and enable Auto VoIP Mode for all ports. Then, click Apply in the bottom-right corner.
  2. Click on the 802.1AS sub-page. Set the 802.1AS Status to Enable. Then, click Apply in the bottom-right corner. There will be an EAV advisory note which pops up after you hit Apply, which you can ignore.
  3. While still on the 802.1AS sub-page click on the Advanced > 802.1AS Port Settings. In the purple header row at the top of the list select the check box to select all ports. (Consider to uncheck ports g25 and g26 to prevent AVB traffic flowing into the backbone network.) Enter a value of 5000 for the Pdelay Threshold. Then, click Apply in the bottom-right corner.
  4. Click on the MRP sub-page. Set the MSRP Mode to Enable. Ensure that all other options are disabled. Also, set MSRP Max Fan In Ports to 26. Then, click Apply in the bottom-right corner. There will be an EAV advisory note which pops up after you hit Apply, which you can ignore.
  5. While still on the MRP sub-page click on the Advanced > MRP Port Settings. In the purple header row at the top of the list click the checkbox to select all ports and then select Enable for MVRP Mode and MSRP Mode and enter values of 20 for the Join Time, 120 for the Leave Timer, and 2500 for the Leave All Timer. Then, click Apply in the bottom-right corner.
  6. Click on the VLAN sub-page. Under the Advanced settings choose Voice VLAN Configuration. Enable the Voice VLAN Global Admin Mode at the top of the page. Then, click Apply in the bottom-right corner.
  7. While still on the VLAN sub-page, under the Advanced settings choose VLAN Membership. In the  VLAN ID dropdown choose VLAN ID 2, in the Group Operation dropdown choose Tag All. Then, click Apply in the bottom-right corner.
  8. Click on the LAG sub-page. In the purple header row at the top of the LAG Configuration list select the check box to select all ports and select Disable for Admin Mode, STP Mode, and Link Trap.  Then, click Apply in the bottom-right corner.
  9. Power cycle the switch.

The one small modification to the instructions was in step 4, where I removed references to MVRP. In my experience, enabling MVRP will cause the E3 to lose connection to its internal network switch, and the only way to fix this is to cleanly shutdown the E3, then remove the power plug and wait for the green power light to go out. I did not test enabling it for everything except the E3. (Apparently this is a known issue — search for VSW-10570 in the “What’s New in VENUE 4.6.1” document that comes with the VENUE 4.6.1 release.)

If you want to use Dante and AVB together, I suggest reading the Using Dante and AVB protocols together on the Netgear GS724Tv4 switch document. As of 2018-01-22 I haven’t tested those instructions.

Avid VENUE S3L-X, AVB, and macOS High Sierra

Long story short, if you need use an Avid S3L-X with macOS and playback via AVB, do not install macOS High Sierra. macOS Mojave works fine, as does the older macOS Sierra, but High Sierra has clocking issues that manifest as constant clicking during playback, rendering the audio unusable.

If all you need to do is record via AVB, macOS High Sierra works without issue.

References

Note, all versions of macOS High Sierra through 10.13.6 are affected.

[Update 2019-03-03] I continue to have no problems with macOS Mojave (currently 10.14.3).
[Update 2018-09-29] Preliminary testing with macOS Mojave (10.14.0) and 64-channel recording and playback indicates that the AVB problems have been fixed.
[Update 2018-07-28]
Increased affected versions to 10.13.6.
[Update 2018-06-05]
Increased affected versions to 10.13.5.
[Update 2018-03-31]
Increased affected versions to 10.13.4.

Booting an Avid S3L-X remotely with Wake-on-LAN

E3 Engine

The E3 engine can be remotely powered on and started using the Wake-on-LAN protocol.

To remotely wake the E3 engine, you need three things:

  1. A computer that is connected to the same Ethernet network as the E3 engine.
  2. The MAC address of the engine. You can get the MAC address by going to the Options > Devices tab and right-clicking on the E3 engine image.
  3. The IP subnet address of the network. (Optional, depending on the software used.)

To shut the E3 engine down, use the VENUE Options > System > Shutdown button.

Software to wake the E3 engine

There are several software packages available to send the special Wake-on-LAN Magic Packet.

Mac

  • Wake On Lan by Depicus (Mac App Store, $1.99)
  • Remote Desktop (Apple, $79.99) – Also useful for controlling the S3L-X remotely.

Windows

  • MagicPacket by DecaTec (Microsoft Store, Free)
  • Wake On Lan by Sepiro Ltd (Microsoft Store, Free)

Command-line

For those comfortable with the command-line, a short Python script will also do the job. Save this script somewhere as wakeonlan.py and make it executable with chmod +x.

#!/usr/bin/env python
# https://apple.stackexchange.com/questions/95246/wake-other-computers-from-mac-osx

import socket
import sys

if len(sys.argv) < 3:
 print "Usage: wakeonlan.py <ADR> <MAC> (example: 192.168.1.255 00:11:22:33:44:55)"
 sys.exit(1)

mac = sys.argv[2]
data = ''.join(['FF' * 6, mac.replace(':', '') * 16])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(data.decode("hex"), (sys.argv[1], 9))

Myself, I keep a copy of the script in my ~/usr/bin directory. To wake my system, I call the command like this, where 172.16.0.255 is the subnet of my network, and 00:90:fb:4a:13:9e the MAC address of my E3 engine.

$ ~/usr/bin/wakeonlan.py 172.16.0.255 00:90:fb:4a:13:9e

Stage 16 Box

The Stage 16 Box cannot be remotely power cycled without additional equipment. Some suggestions include:

  • Furman CN-1800S + Furman BB-RS232 giving control via Ethernet.
  • Furman M-8S (US) or the Furman PS-8RE III (Europe) connected to the GPIO connection from the E3 engine, along with an event (saved in the default show) to latch a GPIO when the system is started. Attempt only if you feel comfortable with electronics. If you would like me to build this setup and demonstrate it, send me an email.

Moving to OS X Lion…

I decided to take the plunge into OS X Lion. Based on previous experience with .0 releases of OS X, you’d think I’d know better than to install another one, but alas I simply couldn’t wait. 🙂 This article will chronicle surprises and workarounds I’ve dealt with along the way.

I have a few different machines at home:
– Late 2007 13″ MacBook
– Late 2009 27″ iMac
– Early 2010 13″ MacBook Pro

The MacBook Pro is provided by my employer, so it won’t be touched.

the iMac

I started with the iMac. Download of Lion was smooth with decent bandwidth. It took a few hours, but I figured it would. Keeping the non-technical user in mind, I figured that Apple would take the approach of removing the installer once it was installed, so I backed up the disk image (http://osxdaily.com/2011/06/08/create-burn-bootable-mac-os-x-lion-install-disc/) to my NAS before installing. Good thing I did as the installer was removed. Install was smooth. No issues.

SSL Issues
The only major issue I ran into was that SSL wasn’t working in Chrome or Safari, which also caused problems for iTunes and the App Store. I run a Squid proxy at home, and even though I don’t have SSL going through the proxy (it goes DIRECT instead), I still had issues. Turns out I needed to check the “Automatic Proxy Configuration” box as well (https://discussions.apple.com/message/15663396#15663396) in the Network Settings, something not previously needed.

Multiple Desktop Screens
The one minor issue I had was that I previously had four desktops, configured through spaces, but I couldn’t figure out how to do the same in Lion. Completely by accident, I figured out that when I was in the Mission Control environment, placing my mouse pointer on the right edge of the screen near the top, caused a plus (+) icon thingy to pop out. Clicking it allowed me to create more desktops. I later found in the Keyboard section of the System Preferences that I could change the keyboard shortcuts to flip between screens. My old settings were carried over from Snow Leopard, so no changes were necessary.

the MacBook

Last night, I stayed up until 03.00 working on the MacBook. Ha!

Knowing that Lion was coming out soon, I figured this would be a good time to also add some RAM and upgrade the HDD in the machine. I planned to go from 2G to 4G of memory, but unfortunately one of the memory sticks I bought seems to be bad as the Mac beeps in a very upset manner, and Google tells me that the particular beep sequence means the memory isn’t passing checks. So, I’m only at 3G instead of 4G.

For the HDD, I choose the Seagate Momentus XT 320G as it has 4G of MLC cache added on, and the drive will cache frequently used things on its own. I

Interesting videos from the TED Women 2010 conference

In my day-to-day job, I work for the most part with men. I don’t mind, but from time-to-time I wonder and think about why there are so few women in my industry. As my interest has grown, I’ve started working with an internal women’s group to support other women in my office in their career and professional growth.

I’m also a long-time TED viewer, and recently got the opportunity to watch a live stream of the TEDWomen Conference through the women’s group. Several of the videos were very intriguing, but only a few were streamed. Looking more through the TED site, I’ve found a couple more that I felt were worth sharing with a larger audience.

Sheryl Sandberg: Why we have too few women leaders
Facebook COO Sheryl Sandberg looks at why a smaller percentage of women than men reach the top of their professions — and offers 3 powerful pieces of advice to women aiming for the C-suite.
http://www.ted.com/talks/sheryl_sandberg_why_we_have_too_few_women_leaders.html

Halla Tomasdottir: A feminine response to Iceland’s financial crash
Halla Tomasdottir managed to take her company Audur Capital through the eye of the financial storm in Iceland by applying 5 traditionally “feminine” values to financial services. At TEDWomen, she talks about these values and the importance of balance.
http://www.ted.com/talks/halla_tomasdottir.html

– k8

The absolute minimum IPC Android Service I could make work

I’m not a Java programmer by trade, but I do dabble now and again with it. As such, I’m kind of slow when it comes to solving coding problems for the first time.

I’m working on an Android project where I want to:
  • do some processing and background downloads of HTML data in a Service,
  • communicate to the service using IPC
  • build the IPC interface with AIDL
Mostly for my own personal reference in the future, I’ve typed up the bare minimum of code I need to get this going again in the future. Because Blogger doesn’t have the nicest of interfaces for editing this post, I’ve included it in my Snippets page.

shFlags now in OpenCSW tree

A coworker of mine, Maciej Blizinski, has become the proud maintainer of the OpenCSW shflags package for Solaris machines. He also maintaines the log4sh package as well (another of my shell libraries). Grab them if you like!

http://www.opencsw.org/packages/log4sh
http://www.opencsw.org/packages/shflags

My struggle to setup a Linksys WRT54GS v.4 in client-bridge mode

The problem

I’ve been fighting for weeks now trying to get my home wireless network to work smoothly. I’m living in an apartment in Ireland, built in the 1970’s, that has concrete walls for every single wall in the house. It does wonders for my wireless signal, and to date the only thing that has provided a decent (albeit not strong) signal in all rooms was a Linksys WAP54G.

I recently purchased my first Mac desktop (the wonderful Apple 27″ iMac with the quad-core i7 chip). It is a brilliant machine, the fastest I’ve ever owned, and I didn’t want to limit it with a slow wireless connection. My partner and I both have Mac laptops as well, and I wanted to see a speed improvement there too. Finally, we both have Wifi enabled phones, I have an iPod, there are a couple of AirPort Express for broadcasting iTunes music and sharing a printer, an AppleTV for renting movies, and a Popcorn Hour A-110 that we stream movies to (using one of the AirPort Express as a bridge).
To improve my network, I went with the latest Apple AirPort Extreme (Simultaneous Dual-Band II). My hope was that I could 802.11n at 5GHz for the Macs, and 802.11n and 802.11g at 2.4GHz for the rest. Unfortunately though, despite MUCH fiddling (trying lots of channels, fiddling with this that and the other, etc.), I kept running into problems. First off, the only place in the apartment where I could get a usable 5GHz signal (decent as defined by sustaining more than 3MiB/s transfers) was at the kitchen table about 5m away from the AirPort (through one wall). In my bedroom (about 10m away from the AirPort and through three walls) where the 27″ iMac is, I usually could get between 24-144Mbps signal (never constant) and could usually sustain around 1.7MiB/s transfers. And, I could not for the life of me get a good streaming signal – one that always worked without pauses – to stream movies to the Popcorn Hour in the living room (about 10m away and two walls). Sometimes, yes, but not always. This situation is actually worse than it was before!
I must say that I love the AirPort Express for its ease of configuration, and its IPv6 support, but it just isn’t working for me with the vast amount of concrete I have.

To try to solve my problems with my iMac, I decided to configure an old Linksys WRT54GS I have in a client-bridge configuration. The Linksys has two spiffy antennas with potentially better gain than the built-in antenna of the iMac. I chose the WRT54GS as it has a built-in switch – which would be nice to have in the bedroom – whereas the WAP54G I used in the past has only a single port.
As it turns out, after spending literally hours trying to get such a configuration working, the solution was incredibly simple. I found lots of interesting but conflicting information on the web about how to do this, but was unable to get any of it to work. I must be honest and state that I did not want to use the nvram command to do the configuration. I just find that such by-hand configurations are hard to reproduce should I need to someday, and prefer to have a documented, easy-to-understand, and repeatable solution instead.
I finally decided to forge ahead without docs to see what I could get going.
The solution


This section assumes a cleanly installed OpenWrt firmware on the router. (See below on how to reflash with TFTP if you need.) It also assumes you are logged into the more advanced Administration mode (not the default Essentials mode) of the OpenWrt interface.
Configure the WAN interface (Network > Interfaces > WAN)
I changed nothing here.
wan
Protocol: DHCP
Bridge interfaces: unchecked
Interface: eth0.1
Zone: wan
Configure the LAN interface (Network > Interfaces > LAN)

My local network subnet is 172.18.0/24 so I placed the LAN interface within that subnet. By doing this, I can telnet into the router without needing to specially configure a machine to talk to it.
lan
Protocol: static
Bridge interfaces: checked
Enable STP: unchecked
Interface: eth0.0
Zone: lan
IPv4-Address: 172.18.0.11
IPv4-Netmask: 255.255.255.0
IPv4-Gateway: 172.18.0.1
DNS-Server (added): 172.18.0.1
Click Save.

Configure the wireless to join my existing network (Network > Wifi > WL0)
Device wl0
enable: checked
Channel: auto
Transmit Power (dBm): 70
802.11h (added): checked
WMM Mode (added): checked
Interfaces
ESSID: KWAB
Network: lan
Mode: Client
Encryption: WPA2-PSK
Key: ******* (I’m not giving that up!! 😉 )
Click Save.
Switch (Network > Switch)
The Linksys WRT54GS v.4 uses slightly different VLAN ports than other routers. Basically, the WAN port is #0, whereas most other routers it is #4. I updated accordingly.
ETH0
ethX.0: 0 1 2 3 5*
ethX.1: 4 5
Click Save.
DHCP (Network > DHCP)
DHCP is enabled by default. It must be disabled. Uncheck the Dynamic DHCP option.
Click Save.
Apply all the changes (Changes > Save and Apply)
Once the settings are applied, the router should be pingable at 172.18.0.11 and the normal network should also be accessible using normal means (in my case DHCP). I have noticed that the router sometimes gets confused at this point, and a simple reboot [by pulling the plug] fixes that.
Enable multicasting
By default, the network interfaces do not support the full set of multicasting required for Bonjour and mDNS to work (two things I can’t live without with my Macs). To get them going, we need a quick shell script.
Edit the /etc/firewall.user script, and add these lines to it:
# enable full multicasting
for iface in br-lan eth0 eth0.0 eth0.1 wl0; do
ifconfig ${iface} allmulti
done
Run the script to setup the multicasting. In case you were wondering, Tte script will be executed automatically by the firewall script on subsequents boots.
We’re done!
The Result
After all was said and done… I still wasn’t happy 🙁
The iMac talking directly to the AirPort Extreme (jumping between 24-144Mbit/s as reported by the AirPort) was usually able to sustain 1.7MiB/s transfers, while the Linksys (jumping between 18-54Mbit/s as reported by the AirPort) could usually sustain only around 400KiB/s, more than 4x slower. Grumble.
I also use IPv6 on my network, but the Linksys isn’t bridging it through. It means when I do lookups for addresses like freenas.local (my NAS) I get the IPv6 address which I cannot talk to. There is probably a solution to that, but I haven’t looked into it yet.
In any case, back to the drawing board.
References
OpenWrt release: Kamakaze 8.09.2

Reflashing with TFTP
More than once, I locked myself out of the router during my fiddling. Luckily, OpenWrt has a default boot mode one can go into by holding down the reset button during power-on, releasing it once the DMZ LED lights. In this mode, the IP of the router returns [temporarily until reboot] to 192.186.1.1, and it allows telnet access without a password. Using telnet, I was able to manually erase the firmware, then reflash new firmware with TFTP.
To reset the router, I followed these steps:
  1. Placed a copy of OpenWrt in my ~/Downloads folder
  2. Changed to my ~/Downloads folder
    $ cd ~/Downloads
  3. Set a static IP on my laptop to 192.168.1.2
  4. Added a manual ARP entry (needed later for TFTP) to 192.168.1.2 (valid for OS X 10.5/10.6)
    $ sudo arp -s 192.168.1.1 00:16:b6:1e:a2:3f
  5. Telnetted into the router. For this to work, you must be plugged into the LAN portion of the router (the switch section) and not the WAN port (the Internet port).
    $ telnet 192.168.1.1
  6. Erased the flash on the router
    # mtd erase linux
  7. Pulled the power out of the router
  8. Started TFTP on my laptop
  9. $ tftp 192.168.1.1
    tftp> mode binary
    tftp> rexmt 1
    tftp> timeout 90
    tftp> trace
    Packet tracing on.
    tftp> put openwrt-wrt54gs_v4-squashfs.bin
  10. Plugged the router back in
  11. Waited for the firmware to flash. You should see something similar to this if the upload works:
    sent DATA 
    received ACK
    sent DATA
    received ACK
    ...
    sent DATA
    received ACK
    Sent 2166816 bytes in 61.9 seconds

    The number of blocks will of course be different for the release of OpenWrt you use.

The router will reboot on its own, and become available on the IP 192.168.1.1.

Getting Freenet running on Nexenta

THIS IS A WORK IN PROGRESS. I don’t have full working instructions yet 🙁

I had a few problems getting Freenet 0.7.5 running on my Nexenta 2.0 Server installation, so I thought I would mention what I did.

Summary

To get Freenet running under Nexenta 2.0 Server, you need the following:

Freenet 0.7.5 wrapper
http://downloads.freenetproject.org/alpha/installer/freenet07.tar.gz
Freenet 01222 build
http://freenet.googlecode.com/files/freenet-build01222.jar
apt-get installed packages
java-runtime-headless nevada-compat

Instructions:

  1. Install the packages with apt-get.
  2. Extract the freenet07.tar.gz package somewhere.
  3. Copy the freenet-build01222.jar file into the extracted package directory where the run.sh file is. Name it freenet.jar
  4. Start the software with run.sh start.
  5. Try to figure out the rest because I haven’t had time.

Detail

I run my Nexenta server in a closet with no keyboard or monitor attached, so getting Freenet running in a headless mode was desirable. Using the headless system instructions from the “Linux and other Unix-like systems” section Freenet Download page, I got the software installed.

wget http://downloads.freenetproject.org/alpha/installer/freenet07.tar.gz
cat freenet07.tar.gz | gzip -d | tar xv
cd freenet
./run.sh start

When I called the run.sh script though, it failed as I didn’t have Java installed.

$ ./run.sh  start
Enabling the auto-update feature
Detecting tcp-ports availability...
Can not bind fproxy to 8888: let's try 8889 instead.
/opt/freenet/0.7/bin/1run.sh: line 49: java: command not found
/opt/freenet/0.7/bin/1run.sh: line 53: java: command not found
Can not bind any socket on 127.0.0.1:
              IT SHOULDN'T HAPPEN!

Make sure your loopback interface is properly configured. Delete Freenet's directory and retry.

So, I installed the java-runtime-headless package. It in turn pulled in a few extra packages and recommended a few more. I ignored the recommendations.

$ sudo apt-get install java-runtime-headless

Trying to run it again, I got a new error.

$ ./run.sh  start
Unable to locate any of the following binaries:
/opt/freenet/0.7/./bin/wrapper-solaris-i86pc-32
/opt/freenet/0.7/./bin/wrapper
Starting Freenet 0.7...

Let's start the node without the wrapper, you'll have to daemonize it yourself.
dl failure on line 685Error: failed /usr/lib/jvm/java-6-sun-1.6.0.10/jre/lib/i386/client/libjvm.so, because ld.so.1: java: fatal: libCrun.so.1: open failed: No such file or directory

After some searching on Google, I found an article entitled Installing JDK6 in Nexenta Zone that mentioning the need for the nevada-compt to fix the libCrun.so.1 error. So, I installed that package.

$ sudo apt-get install nexenta-compat

Trying to run it again, I got a new error.

$ ./run.sh  start
Unable to locate any of the following binaries:
/opt/freenet/0.7/./bin/wrapper-solaris-i86pc-32
/opt/freenet/0.7/./bin/wrapper
Starting Freenet 0.7...

Let's start the node without the wrapper, you'll have to daemonize it yourself.
Exception in thread "main" java.lang.NoClassDefFoundError: freenet/node/NodeStarter
Caused by: java.lang.ClassNotFoundException: freenet.node.NodeStarter
      at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
      at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: freenet.node.NodeStarter.  Program will exit.

Argh… After poking around I now figured out that the actual Freenet software wasn’t included in the freenet07.tar.gz package. Looking at the files provided on http://freenet.googlecode.com/ I found the freenet-build01222.jar that looked interesting. I downloaded a copy to the same directory where the run.sh script was.

$ wget http://freenet.googlecode.com/files/freenet-build01222.jar -O freenet.jar

Trying to run it again, I got a new error.

$ ./run.sh startUnable to locate any of the following binaries:
/opt/freenet/0.7/./bin/wrapper-solaris-i86pc-32
/opt/freenet/0.7/./bin/wrapper
Starting Freenet 0.7...

Let's start the node without the wrapper, you'll have to daemonize it yourself.
Exception in thread "main" java.lang.NoClassDefFoundError: org/tanukisoftware/wrapper/WrapperListener
      at java.lang.ClassLoader.defineClass1(Native Method)
      at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
      at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
      at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
      at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
      at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
      at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Caused by: java.lang.ClassNotFoundException: org.tanukisoftware.wrapper.WrapperListener
      at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
      at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
      ... 12 more
Could not find the main class: freenet.node.NodeStarter.  Program will exit.

I’m giving up for the moment. I’ve got other work to do, so I’ll put this on the back burner. Maybe somebody else can figure this out.

I fought the Silicon Image 3114 with Solaris and won!

The battle
My latest battle has been against a 4-port SATA-I PCI RAID card powered by the Silicon Image 3114 chipset (it shows up as a pci1095,3114 device). As luck would have it, the card did not work out of the box with Solaris, but some Google searches did provide some hints.
In my research, I found that the card is not a true hardware RAID card as there is no actual RAID magic happening in the chip. It is all in the provided software driver (hense the Windows only drivers). The chip basically allows the computer to “understand” how the drives get sliced and diced, and does the appropriate translation so the machine can speak to the drives. Nothing else. No wonder Solaris didn’t like it. Myself, I don’t at all care that the RAID is less than functional as I plan to use ZFS+raidz for my filesystems anyway.
For Solaris to recognize the drives, the card must be flashed with the IDE version of the BIOS (see the Silicon Image link above). If one has a DOS floppy around, this process should be a piece of cake. Considering I don’t own a floppy drive anymore, and also don’t have a CDROM in my server, the process turned out to be more challenging. In the end I was successful, but it took me about 6hrs of fiddling to get it done. (The Ultimate Boot CD was a lifesaver.)
The real sticking point for me was a simple command I ran the previous night in an attempt to get the card to work. According to OpenSolaris Bug ID 6595150, all I had to do was run an update_drv command to get things going. It added an entry to the bottom of /etc/driver_aliases to indicate that the RAID card was in fact associated with the ata driver, something that made complete sense to me at the time. Turns out, this bug is from an older version of OpenSolaris, and I never should have run this command. Of course the OS was never nice enough to tell me anything, so I was flying in the dark trying to figure out why nothing was working. After literally hours of debugging – this after the many hours already spent trying to flash the annoying little card – I removed the line and everything started working. Yay!
Moral of the story
When everyone else on Internet says you need to flash the BIOS with the IDE version for this particular card, listen to their wisdom. You don’t need to fiddle with things.
The system I got the card running on
OS: Nexenta 2.0RC3 (based on OpenSolaris b104+)
CPU: VIA Samuel 2 @800MHz
What I got running
For those who care, here is a semi-complete list of items I purchased. My goal was adding ~900G of redundant storage to my little Nexenta based Solaris server. I had practically no space free in the case as there is only a single 3.5″ drive bay, and a single 5.25″ drive bay. And, as the motherboard itself is pretty old, it only has two PATA connectors, USB 1.1, and a single PCI slot. In other words, not much to work with. As such, I felt that filling the single PCI slot with a 4-port SATA card and adding a special drive enclosure that would hold four 2.5″ drives was the way to go. My server sits in a closet and all of my machines connect via wireless, so high disk I/O bandwidth was not one of my design goals.
4-bay 2.5″ SATA HDD in 5.25″ drive enclosure
4-port SATA-I PCI card
This seems to be a generic card as I have seen pictures that look exactly the same from other venders, such a LINDY in the US.

4x Western Digital 320G Scorpio 2.5″ SATA HDD