how CAM/HBA probe for devices?
Danny Braniss
danny at cs.huji.ac.il
Tue Feb 8 09:50:37 PST 2005
> Danny Braniss wrote:
>
> > i have been writing a driver for the iSCSI, and am concentrating
> > on the initiator side.
> > So far i mannaged to get to first base, ie, managed to login onto a target,
> > but now im stuck.
> > After several hours of reading/searching, this is avoiding me:
> > how can i get the CAM to probe for devices on this 'controller'?
> > thanks,
> > danny
> >
>
> A scan is performed when CAM gets an XPT_SCAN_BUS command. This happens
> automatically during boot after the XPT_RESET_BUS command finishes. A
> driver or userland app can send an XPT_SCAN_BUS command at any time via
> various interfaces.
>
> However, you've just hit the first big blocker in iSCSI support. CAM is
> oriented around parallel SCSI, and in parallel SCSI you do a linear scan
> of targets from 0 to 7 or 15, depending on the bus width. LUNs are also
> scanned linearly on each target, though we need to implement the
> REPORT_LUNS feature so that we can efficiently detect high LUNs without
> needing a linear scan. Anyways, the linear scan of targets works
> because the range is very small and bounded.
>
> For iSCSI, this obviously won't work. CAM has no concept of iSCSI
> addresses, and even if it did, doing a linear scan of even a small
> subnet would be prohibitively expensive. What is really needed is a new
> XPT layer that understands iSCSI. By this, I mean a layer that
> understands how to properly scan and detect targets, how to log into
> them, etc. It should also have a certain amount of flexibility so that
> hardware-assisted solutions can plug in and pick-and-choose the pieces
> they need from the transport layer.
>
i was thinking in tricking the CAM layer in thinking that the iSCSI
is a HBA, with only one bus/target, at least till i can understand
the protocol, then it will be time to see how many session/targets
can be realized.
> Lucent did an iSCSI initiator for FreeBSD 4.x a while back and I think
> they got around all of this by telling CAM not to auto-scan at boot,
> followed by having the driver announce devices to CAM directly (look at
> the ATAPI-CAM code for an example of how to do this) and do all the
> detection and login work behind CAM's back. This really should only be
> considered a hack though. If you're interested, I might be able to dig
> up the link to it. We never pursued integrating it to the FreeBSD tree
> because of very restrictive licensing terms on it.
>
i got the lucent driver, if that's what you mean by digging up ...
> I started some preliminary work last spring on cleaning up CAM to
> segregate parallel SCSI knowledge into its own module. This should
> eventually allow a system where multiple XPT modules can live together
> and each provide a different transport. At the end, I'd like to see
> transports for p-scsi, iscsi, sas, ata/sata, and fc. This is of course
> in my fantasy world of inifinite hacking time =-) If you're interested
> in helping, I'd love to talk to you some more offline.
>
sure!
> Please don't let this scare you away from what you're doing. iSCSI
> support is badly needed, and I'm thrilled that your working on it. If
> there is anything I can do to help, please ask.
im not scared, just can't see the wood because of the trees :-)
i mean, trying to write a klm/iSCSI/CAM/SCSI/TCP-IP driver is fun, but
can't expect to know SAM-n, sockets, threads/mutex/etc, etc.
i'm trying to work with what there is, and in the way try to learn how iSCSI
works. in doing so, trying to design the software.
the next thing i need, and im looking now at the atapi-cam, is to figure out
how i can tye my loose ends.
>
> Scott
More information about the freebsd-scsi
mailing list