Sat, 11 Mar 2006

Compaq RA4100

About a year ago Mike Miller from HP was kind enough to send me a RAID Array 4100 fibre channel disk tray for my tachyon driver project. Apparently there are a lot of these arrays out in the field because we do get a lot of requests about them on linux-scsi.

Unfortunately the RA4100 doesn't look like a regular SCSI disk. It implements the abandoned SCSI Controller Commands specification and is quite possibly the only device ever sold that does so. The Compaq cpqfc driver had all sorts of nasty, evil code to deal with the RA4100 because they were sold as a pair. And since this device appears to have quite the following, I decided to take a stab at understanding what needs to be done to support it. Obviously we can't and won't have a device-specific workaround in every fibre channel HBA driver.

And so the fun begins. I hooked up the RA4100 to a QLA2312 controller and I could see the TYPE_RAID device. All attempts to send INQUIRY or REPORT_LUNS failed. Then I hooked it up to an HP Tachyon controller under 2.4 and loaded cpqfc. Same thing. Apparently my RA4100 hasn't been configured so it doesn't expose any LUNs. Even with the SCC mangling in the Compaq driver.

Unfortunately (grr, Compaq!) you can only configure the RA4100 using Windows NT or 2000. And I don't happen to have any Windows machines. At all. My sister in law's retired Dell Celeron, however, could deliver in that department. I plugged in an Agilent Tachyon controller hoping to get Win2K to use it. But no. The Compaq driver only works with the Compaq branded (I assume PCI vendor id) boards. And I don't have a Compaq branded controller. Tons of Tachyons, but not a Compaq. So that was a no go.

Instead I started poking at the cpqfc driver to see what it does to mangle the cdbs being sent to the RA4100. Oh My God. It's *so* ugly. Look at IssueReportLunsCommand(), ScsiReportLunsDone(), fcFindLoggedInPort() and build_FCP_payload() in cpqfcTSworker.c and go throw up...

The sparse LUN mangling and INQUIRY snooping we can avoid. So all we need to handle is the addressing mode. But I'm still not sure how to attack this.

permanent link

back