Re: AoE driver
Re: AoE driver
- Subject: Re: AoE driver
- From: Dan Markarian <email@hidden>
- Date: Thu, 10 Feb 2005 16:20:22 -0500
Hi Sam,
IOBlockStorageDevice in IOStorageFamily is the high level interface for
a block storage device. It is independent of transport. It accepts
block reads and writes across doAsyncReadWrite(). These are abstract
methods left up to the developer to implement as appropriate to their
transport. We do have an ATA block storage interface at lower level in
case that is more of a fit.
IOBlockStorageDevice is the device object, that is, the nub. The
driver object is what publishes one device object for each hardware
device. It may be a subclass of IOService in the case of an agnostic
transport family. It contains the guts of your driver implementation.
It is the device object that represents the hardware device and what we
communicate across when we see someone publish one.
Dan
On 10 Feb 2005, at 3:33 PM, Sam Hopkins wrote:
Hello all,
I'm writing an AoE (ATA over Ethernet) driver for Darwin that will
enable Ethernet attached ATA devices like the Coraid EtherDrive blade
(coraid.com) to be used. Our current linux and freebsd drivers have
three main components:
o block device interface (per AoE device)
o network retransmit timer (per AoE device)
o network packet handler for ethernet type 0x88a2
The AoE driver is primarily responsible for translating block
read/write requests into AoE frames, retransmitting them when
responses don't come back in a certain time, and acknowledging the
requests as complete to the system when they do.
I've read a lot of documentation on the IO Kit system, but its
internals are sufficiently different from what we've previously done
that I can't see a clear way to proceed. I'm confused by the
driver/nub relationship. I think I need to write a provider for
something in the IOStorageFamily, but I can't figure out what, nor am
I clear on what my interfaces are for block reads/writes. Perhaps
someone can point to some clarifying documentation here (not
"IO Kit Fundamentals" -- I've read that).
As for the rexmit timer, I need a way for a function to be called
every X ms. So far all I've found towards this end is a way to use
IOLock instead of timeout. I don't think this helps me, but perhaps
I'm missing something.
Lastly, I need to register an Ethernet protocol handler. I read the
paper on NKEs, but am not sure whether I need a protocol handler NKE
or a data link NKE. If the former, is there an ethernet domain I use
in net_add_proto? If the latter, it seems I need to register a
separate filter per interface?
Any help would be appreciated.
Cheers,
Sam
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-kernel mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
email@hidden
This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-kernel mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
References: | |
| >AoE driver (From: Sam Hopkins <email@hidden>) |