11#ifndef __PACKET_SCSI_H_
12#define __PACKET_SCSI_H_
27#define SCSI_CMDSET_DEFAULT 0x80
28#define SCSI_CMDSET_MASK 0x7f
45 uint32_t first_exchange_frame;
46 uint32_t last_exchange_frame;
51#define SCSI_DATA_READ 0x0001
52#define SCSI_DATA_WRITE 0x0002
68 uint32_t bidir_data_length;
80#define SCSI_PDU_TYPE_CDB 1
81#define SCSI_PDU_TYPE_DATA 2
82#define SCSI_PDU_TYPE_RSP 4
83#define SCSI_PDU_TYPE_SNS 5
92typedef void (*scsi_dissector_t)(tvbuff_t *tvb,
packet_info *pinfo,
93 proto_tree *tree,
unsigned offset,
94 bool isreq,
bool iscdb,
95 uint32_t payload_len, scsi_task_data_t *cdata);
98 scsi_dissector_t func;
103#define SCSI_SPC_ACCESS_CONTROL_IN 0x86
104#define SCSI_SPC_ACCESS_CONTROL_OUT 0x87
105#define SCSI_SPC_CHANGE_DEFINITION 0x40
106#define SCSI_SPC_COMPARE 0x39
107#define SCSI_SPC_COPY 0x18
108#define SCSI_SPC_COPY_AND_VERIFY 0x3A
109#define SCSI_SPC_INQUIRY 0x12
110#define SCSI_SPC_EXTCOPY 0x83
111#define SCSI_SPC_RECVCOPY 0x84
112#define SCSI_SPC_LOGSELECT 0x4C
113#define SCSI_SPC_LOGSENSE 0x4D
114#define SCSI_SPC_MODESELECT6 0x15
115#define SCSI_SPC_MODESELECT10 0x55
116#define SCSI_SPC_MODESENSE6 0x1A
117#define SCSI_SPC_MODESENSE10 0x5A
118#define SCSI_SPC_PERSRESVIN 0x5E
119#define SCSI_SPC_PERSRESVOUT 0x5F
120#define SCSI_SPC_PREVMEDREMOVAL 0x1E
121#define SCSI_SPC_READBUFFER 0x3C
122#define SCSI_SPC_RCVDIAGRESULTS 0x1C
123#define SCSI_SPC_RELEASE6 0x17
124#define SCSI_SPC_RELEASE10 0x57
125#define SCSI_SPC_MGMT_PROTOCOL_IN 0xA3
126#define SCSI_SPC_REPORTLUNS 0xA0
127#define SCSI_SPC_REQSENSE 0x03
128#define SCSI_SPC_RESERVE6 0x16
129#define SCSI_SPC_RESERVE10 0x56
130#define SCSI_SPC_SENDDIAG 0x1D
131#define SCSI_SPC_SETDEVICEID 0xA4
132#define SCSI_SPC_TESTUNITRDY 0x00
133#define SCSI_SPC_WRITEBUFFER 0x3B
134#define SCSI_SPC_VARLENCDB 0x7F
136void dissect_spc_inquiry(tvbuff_t *tvb,
packet_info *pinfo, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb, uint32_t payload_len, scsi_task_data_t *cdata);
137void dissect_spc_logselect(tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
138void dissect_spc_logsense(tvbuff_t *tvb,
packet_info *pinfo, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
139void dissect_spc_mgmt_protocol_in(tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
140void dissect_spc_modeselect6(tvbuff_t *tvb,
packet_info *pinfo, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len, scsi_task_data_t *cdata);
141void dissect_spc_modesense6(tvbuff_t *tvb,
packet_info *pinfo, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len, scsi_task_data_t *cdata);
142void dissect_spc_modeselect10(tvbuff_t *tvb,
packet_info *pinfo, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len, scsi_task_data_t *cdata);
143void dissect_spc_modesense10(tvbuff_t *tvb,
packet_info *pinfo, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len, scsi_task_data_t *cdata);
144void dissect_spc_persistentreservein(tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len, scsi_task_data_t *cdata);
145void dissect_spc_persistentreserveout(tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
146void dissect_spc_reportluns(tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
147void dissect_spc_testunitready (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
148void dissect_spc_requestsense (tvbuff_t *tvb,
packet_info *pinfo, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
149void dissect_spc_preventallowmediaremoval (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
150void dissect_spc_writebuffer (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb _U_,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
151void dissect_spc_reserve6 (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
152void dissect_spc_release6 (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
153void dissect_spc_reserve10 (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
154void dissect_spc_release10 (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
155void dissect_spc_senddiagnostic (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
156void dissect_spc_extcopy (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata);
157void dissect_spc_recvcopy (tvbuff_t *tvb,
packet_info *pinfo _U_, proto_tree *tree,
unsigned offset,
bool isreq,
bool iscdb,
unsigned payload_len _U_, scsi_task_data_t *cdata _U_);
176#define SCSI_DEV_UNKNOWN -1
177#define SCSI_DEV_SBC 0x0
178#define SCSI_DEV_SSC 0x1
179#define SCSI_DEV_PRNT 0x2
180#define SCSI_DEV_PROC 0x3
181#define SCSI_DEV_WORM 0x4
182#define SCSI_DEV_CDROM 0x5
183#define SCSI_DEV_SCAN 0x6
184#define SCSI_DEV_OPTMEM 0x7
185#define SCSI_DEV_SMC 0x8
186#define SCSI_DEV_COMM 0x9
187#define SCSI_DEV_RAID 0xC
188#define SCSI_DEV_SES 0xD
189#define SCSI_DEV_RBC 0xE
190#define SCSI_DEV_OCRW 0xF
191#define SCSI_DEV_OSD 0x11
192#define SCSI_DEV_ADC 0x12
193#define SCSI_DEV_NOLUN 0x1F
195#define SCSI_DEV_BITS 0x1F
196#define SCSI_MS_PCODE_BITS 0x3F
201void dissect_scsi_cdb (tvbuff_t *,
packet_info *, proto_tree *,
202 int, itlq_nexus_t *, itl_nexus_t *);
203void dissect_scsi_rsp (tvbuff_t *,
packet_info *, proto_tree *, itlq_nexus_t *, itl_nexus_t *, uint8_t);
204void dissect_scsi_payload (tvbuff_t *,
packet_info *, proto_tree *,
205 bool, itlq_nexus_t *, itl_nexus_t *,
206 uint32_t relative_offset);
207void dissect_scsi_snsinfo (tvbuff_t *,
packet_info *, proto_tree *,
unsigned,
unsigned, itlq_nexus_t *, itl_nexus_t *);
209void dissect_scsi_lun(proto_tree *, tvbuff_t *,
unsigned);
211extern int *
const cdb_control_fields[6];
212extern int ett_scsi_control;
213extern int hf_scsi_control;
214extern int hf_scsi_alloclen16;
217#define SHORT_FORM_BLOCK_ID 0x00
218#define SHORT_FORM_VENDOR_SPECIFIC 0x01
219#define LONG_FORM 0x06
220#define EXTENDED_FORM 0x08
221#define SERVICE_READ_CAPACITY16 0x10
222#define SERVICE_READ_LONG16 0x11
223#define SERVICE_WRITE_LONG16 0x11
224#define SERVICE_GET_LBA_STATUS 0x12
225#define SERVICE_REPORT_REFERRALS 0x13
230extern value_string_ext scsi_asc_val_ext;
233#define MPI_MANAGEMENT_PROTOCOL_IN 0x10
234#define MPI_REPORT_SUPPORTED_OPERATION_CODES 0x0C
252#define TRY_SCSI_CDB_ALLOC_LEN(length_arg) \
255 volatile unsigned try_offset; \
256 uint32_t try_end_data_offset=0; \
258 try_tvb=tvb_new_subset_length(tvb_a, offset_a, length_arg); \
262#define END_TRY_SCSI_CDB_ALLOC_LEN \
263 if(try_end_data_offset){ \
267 tvb_get_uint8(try_tvb,try_end_data_offset); \
270 CATCH(BoundsError) { \
274 CATCH(ContainedBoundsError) { \
283 CATCH(ReportedBoundsError) { \
287 THROW(ScsiBoundsError); \
301#define SET_SCSI_DATA_END(offset_arg) \
302 try_end_data_offset=offset_arg;
struct conversation conversation_t
struct _packet_info packet_info
Represents the metadata and indexing information for a single captured frame.
Definition packet-scsi.h:26
Definition packet-scsi.h:44
Definition packet-scsi.h:97
Definition packet-scsi.h:84
struct _value_string value_string
Mapping between a 32-bit integer value and its string representation.