On Mar 26, 2012, at 2:17 AM, Cong Meng wrote:

> I drafted some description. Should I make an HTML version?

Yes, matching the style of the other ones, once the issues that are raised are 
resolved.

(Of course, for the diagrams, we just cheat and use <pre>.)

> LINKTYPE_VIRTIO_SCSI
> 
> Packet structure
> 
> +---------------+
> |  Pack Type    |
> |  (4 Octets)   |
> +---------------+
> |  Tag          |
> |  (4 Octets)   |
> +---------------+
> |  Initiator    |
> |  (4 Octets)   |
> +---------------+
> |  Target       |
> |  (4 Octets)   |
> +---------------+
> |  Lun          |
> |  (4 Octets)   |
> +---------------+
> |  CDB Size     |
> |  (4 Octets)   |
> +---------------+
> |  Sense Size   |
> |  (4 Octets)   |
> +---------------+
> |  Header Size  |
> |  (4 Octets)   |
> +---------------+
> |  Data Size    |
> |  (4 Octets)   |
> +---------------+
> |               |
> |  Header       |
> |               |
> +---------------+
> |               |
> |  Data         |
> |               |
> +---------------+
> 
> 
> Description
> 
> Pack Type:
>  REQ_CMD     0x000 
>  REQ_TMF     0x010 
>  REQ_ANQ     0x011 
>  REQ_ANS     0x012 
> 
>  RESP_CMD    0x100 
>  RESP_TMF    0x110 
>  RESP_ANQ    0x111 
>  RESP_ANS    0x112

So what do the packet types mean?  Are they:

        REQ_CMD         SCSI command
        RESP_CMD        SCSI command response

        REQ_TMF         task management function
        RESP_TMF        task management function response

        REQ_ANQ         asynchronous notification query
        RESP_ANQ        asynchronous notification query response

        REQ_ANS         asynchronous notification subscription
        RESP_ANS        asynchronous notification subscription response?

And do they all have the same contents, with the same fields filled in, or are 
some fields not used for some packet types?

> Tag:
>  The tag to match a response to corresponding request.

I.e., both requests and responses have tag values, and the tag values for a 
given request and its response are the same?

> CDB Size:
>  The maximal size of CDB. 
> 
> Sense Size:
>  The maximal size of Sense data.

So is that the maximum size or the actual size?  The description of a SCSI 
command request is

        struct virtio_scsi_req_cmd {
                // Read−only
                u8 lun[8];
                u64 id;
                u8      task_attr ;
                u8 prio;
                u8 crn;
                char    cdb [ cdb_size ] ;
                char    dataout [ ] ;
                // Write−only part
                u32     sense_len ;
                u32     residual ;
                u16     status_qualifier ;
                u8      status ;
                u8      response ;
                u8      sense [ sense_size ];
                char    datain [ ] ;
        };

so would "CDB Size" be the same as cdb_size and "Sense Size" be the same as 
sense_size?

> Header Size:
>  The size of the header of a request/response.
> 
> Data Size:
>  The size of Data-Out or Data-In.
> 
> Header:
>  The request or response header. 
>  This header is described in Appendix H of the virtio specification:
>  http://ozlabs.org/~rusty/virtio-spec/virtio-0.9.4.pdf

Are the headers:

        REQ_CMD, RESP_CMD               struct virtio_scsi_req_cmd
        REQ_TMF, RESP_TMF               struct virtio_scsi_ctrl containing 
struct virtio_scsi_ctrl_tmf
        REQ_ANQ, RESP_ANQ               struct virtio_scsi_ctrl containing 
struct virtio_scsi_ctrl_an
        REQ_ANS, RESP_ANS               struct virtio_scsi_ctrl containing 
struct virtio_scsi_ctrl_an

Or is the header for a REQ_xxx the "Read-only part" and for a RESP_XXX the 
"Write-only part"?

And do the headers include the LUN, given that the packet structure also 
includes a LUN - although the packet structure's LUN is 4 bytes rather than 8 
bytes?

Do they include the type field in struct virtio_scsi_ctrl, given that the type 
field seems to be VIRTIO_SCSI_T_TMF for REQ_TMF/RESP_TMF, 
VIRTIO_SCSI_T_AN_QUERY for REQ_ANQ/RESP_ANQ, and VIRTIO_SCSI_T_AN_SUBSCRIBE for 
REQ_ANS/RESP_ANS, so it's redundant?

> Data:
>  Data-Out or Data-In block.

The request description above includes "dataout" and "datain" fields; are those 
absent from the Header field and, instead, contained in the Data field?
-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.

Reply via email to