Ethereal-dev: Re: [Ethereal-dev] Unused function parameters: Request for help

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

Date: Sun, 31 Mar 2002 00:05:45 -0800
Attached is a patch with the relevant changes for packet-scsi.c. I cannot get
rid of the pinfo variable in all the sub-dissectors since one of the
sub-dissectors requires it. I'm going to submit another patch after this is
integrated that will include a jump table to go to the associated
sub-dissectors as suggested by Ronnie Sahlberg when I first submitted the SCSI
decoder.

I also have included a bugfix for fixing the way the device type is
determined. Originally, the code to create a device type hash entry associated
with a src address was only done when the SCSI Inquiry response PDU was
decoded (i.e. executed only if (tree) was true). Fixed this to create the hash
entry on receiving a response irrespective of "tree" being non-NULL.

Dinesh
Joerg Mayer writes:
 >      46	packet-scsi.c
--
Index: packet-scsi.c
===================================================================
RCS file: /cvsroot/ethereal/packet-scsi.c,v
retrieving revision 1.7
diff -u -r1.7 packet-scsi.c
--- packet-scsi.c	2002/03/13 02:52:21	1.7
+++ packet-scsi.c	2002/03/31 07:58:18
@@ -1178,7 +1178,6 @@
 {
     scsi_task_data_t *cdata = NULL;
     scsi_task_id_t ckey, *req_key;
-    conversation_t *conversation;
     
     if ((pinfo != NULL) && (pinfo->private_data)) {
         ckey = *(scsi_task_id_t *)pinfo->private_data;
@@ -1202,7 +1201,6 @@
 {
     scsi_task_data_t *cdata = NULL;
     scsi_task_id_t ckey;
-    conversation_t *conversation;
 
     if ((pinfo != NULL) && (pinfo->private_data)) {
         ckey = *(scsi_task_id_t *)pinfo->private_data;
@@ -1218,7 +1216,6 @@
 {
     scsi_task_data_t *cdata = NULL;
     scsi_task_id_t ckey;
-    conversation_t *conversation;
 
     if ((pinfo != NULL) && (pinfo->private_data)) {
         ckey = *(scsi_task_id_t *)pinfo->private_data;
@@ -1275,8 +1272,8 @@
 }
 
 static void
-dissect_scsi_evpd (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                   guint offset, guint tot_len)
+dissect_scsi_evpd (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
+                   guint offset, guint tot_len _U_)
 {
     proto_tree *evpd_tree;
     proto_item *ti;
@@ -1355,13 +1352,12 @@
 }
 
 static void
-dissect_scsi_cmddt (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                    guint offset, guint tot_len)
+dissect_scsi_cmddt (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
+                    guint offset, guint tot_len _U_)
 {
     proto_tree *cmdt_tree;
     proto_item *ti;
-    guint opcode, plen, i;
-    guint8 flags;
+    guint plen;
 
     if (tree) {
         plen = tvb_get_guint8 (tvb, offset+5);
@@ -1392,12 +1388,24 @@
 {
     guint8 flags, i;
     gchar str[32];
-    guint tot_len, pcode, plen, replen;
-    conversation_t *conversation;
-    scsi_device_type dev = 0;
+    guint tot_len;
     scsi_devtype_data_t *devdata = NULL;
     scsi_devtype_key_t dkey, *req_key;
 
+    /* Add device type to list of known devices & their types */
+    COPY_ADDRESS (&(dkey.devid), &(pinfo->src));
+    devdata = (scsi_devtype_data_t *)g_hash_table_lookup (scsidev_req_hash,
+                                                          &dkey);
+    if (!devdata) {
+        req_key = g_mem_chunk_alloc (scsidev_req_keys);
+        COPY_ADDRESS (&(req_key->devid), &(pinfo->src));
+        
+        devdata = g_mem_chunk_alloc (scsidev_req_vals);
+        devdata->devtype = tvb_get_guint8 (tvb, offset) & 0x10;
+        
+        g_hash_table_insert (scsidev_req_hash, req_key, devdata);
+    }
+        
     if (!tree)
         return;
     
@@ -1436,20 +1444,6 @@
             return;
         }
 
-        /* Add device type to list of known devices & their types */
-        COPY_ADDRESS (&(dkey.devid), &(pinfo->src));
-        devdata = (scsi_devtype_data_t *)g_hash_table_lookup (scsidev_req_hash,
-                                                              &dkey);
-        if (!devdata) {
-            req_key = g_mem_chunk_alloc (scsidev_req_keys);
-            COPY_ADDRESS (&(req_key->devid), &(pinfo->src));
-
-            devdata = g_mem_chunk_alloc (scsidev_req_vals);
-            devdata->devtype = tvb_get_guint8 (tvb, offset) & 0x10;
-
-            g_hash_table_insert (scsidev_req_hash, req_key, devdata);
-        }
-        
         proto_tree_add_text (tree, tvb, offset, 1, "Peripheral Qualifier: 0x%x",
                              (tvb_get_guint8 (tvb, offset) & 0xF0)>>4);
         proto_tree_add_item (tree, hf_scsi_inq_devtype, tvb, offset, 1, 0);
@@ -1497,14 +1491,15 @@
 }
 
 static void
-dissect_scsi_extcopy (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                      guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_extcopy (tvbuff_t *tvb _U_, packet_info *pinfo _U_, 
+		      proto_tree *tree _U_, guint offset _U_, 
+		      gboolean isreq _U_, gboolean iscdb _U_)
 {
     
 }
 
 static void
-dissect_scsi_logselect (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_logselect (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                         guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -1534,7 +1529,7 @@
 }
 
 static void
-dissect_scsi_logsense (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_logsense (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                        guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -1568,8 +1563,8 @@
 }
 
 static guint8
-dissect_scsi_modepage (tvbuff_t *tvb, packet_info *pinfo, proto_tree *scsi_tree,
-                       guint offset)
+dissect_scsi_modepage (tvbuff_t *tvb, packet_info *pinfo _U_, 
+		       proto_tree *scsi_tree, guint offset)
 {
     guint8 pcode, plen, flags, proto;
     proto_tree *tree;
@@ -1835,9 +1830,9 @@
 static void
 dissect_scsi_modeselect6 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
                           guint offset, gboolean isreq, gboolean iscdb,
-                          guint payload_len)
+                          guint payload_len _U_)
 {
-    guint8 flags, pcode;
+    guint8 flags;
     guint tot_len, desclen, plen;
     
     if (!tree)
@@ -1901,11 +1896,11 @@
 static void
 dissect_scsi_modeselect10 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
                            guint offset, gboolean isreq, gboolean iscdb,
-                           guint payload_len)
+                           guint payload_len _U_)
 {
-    guint8 flags, pcode;
+    guint8 flags;
     gboolean longlba;
-    guint tot_len, desclen, plen;
+    guint tot_len, desclen;
     
     if (!tree)
         return;
@@ -1972,8 +1967,8 @@
                          guint offset, gboolean isreq, gboolean iscdb,
                          guint payload_len)
 {
-    guint8 flags, pcode;
-    guint tot_len, desclen, plen;
+    guint8 flags;
+    guint tot_len, desclen;
     
     if (!tree)
         return;
@@ -2032,8 +2027,7 @@
         }
         /* offset points to the start of the mode page */
         while ((tot_len > offset) && tvb_bytes_exist (tvb, offset, 2)) {
-            plen = dissect_scsi_modepage (tvb, pinfo, tree, offset);
-            offset += plen;
+            offset += dissect_scsi_modepage (tvb, pinfo, tree, offset);
         }
     }
 }
@@ -2043,9 +2037,9 @@
                           guint offset, gboolean isreq, gboolean iscdb,
                           guint payload_len)
 {
-    guint8 flags, pcode;
+    guint8 flags;
     gboolean longlba;
-    guint tot_len, desclen, plen;
+    guint tot_len, desclen;
  
     if (!tree)
         return;
@@ -2091,7 +2085,10 @@
         proto_tree_add_text (tree, tvb, offset+6, 1,
                              "Block Descriptor Length: %u", desclen);
         offset = 8;
-        tot_len -= 6;           /* tot_len does not include the len field */
+
+        if (payload_len && (tot_len > payload_len))
+            tot_len = payload_len;
+
         if (desclen) {
             proto_tree_add_text (tree, tvb, offset, 8, "No. of Blocks: %s",
                                  bytes_to_str (tvb_get_ptr (tvb, offset, 8),
@@ -2111,9 +2108,10 @@
 }
 
 static void
-dissect_scsi_persresvin (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                         guint offset, gboolean isreq, gboolean iscdb,
-                         scsi_task_data_t *cdata, guint payload_len)
+dissect_scsi_persresvin (tvbuff_t *tvb, packet_info *pinfo _U_,
+                         proto_tree *tree, guint offset, gboolean isreq,
+                         gboolean iscdb, scsi_task_data_t *cdata,
+                         guint payload_len)
 {
     guint8 flags;
     int numrec, i;
@@ -2175,9 +2173,10 @@
 }
 
 static void
-dissect_scsi_persresvout (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                          guint offset, gboolean isreq, gboolean iscdb,
-                          scsi_task_data_t *cdata, guint payload_len)
+dissect_scsi_persresvout (tvbuff_t *tvb, packet_info *pinfo _U_,
+                          proto_tree *tree, guint offset, gboolean isreq,
+                          gboolean iscdb, scsi_task_data_t *cdata _U_,
+                          guint payload_len _U_)
 {
     guint8 flags;
 
@@ -2202,8 +2201,9 @@
 }
 
 static void
-dissect_scsi_release6 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                       guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_release6 (tvbuff_t *tvb, packet_info *pinfo _U_,
+                       proto_tree *tree, guint offset, gboolean isreq,
+                       gboolean iscdb)
 {
     guint8 flags;
 
@@ -2220,7 +2220,7 @@
 }
 
 static void
-dissect_scsi_release10 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_release10 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, 
                         guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -2250,15 +2250,17 @@
 }
 
 static void
-dissect_scsi_reportdeviceid (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                             guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_reportdeviceid (tvbuff_t *tvb _U_, packet_info *pinfo _U_,
+                             proto_tree *tree _U_, guint offset _U_,
+                             gboolean isreq _U_, gboolean iscdb _U_)
 {
     
 }
 
 static void
-dissect_scsi_reportluns (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                         guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_reportluns (tvbuff_t *tvb, packet_info *pinfo _U_,
+                         proto_tree *tree, guint offset, gboolean isreq,
+                         gboolean iscdb)
 {
     guint8 flags;
     guint numelem, i;
@@ -2293,7 +2295,7 @@
 }
 
 static void
-dissect_scsi_reqsense (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_reqsense (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                        guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -2313,7 +2315,7 @@
 }
 
 static void
-dissect_scsi_reserve6 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_reserve6 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                        guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -2331,7 +2333,7 @@
 }
 
 static void
-dissect_scsi_reserve10 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_reserve10 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                         guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -2361,8 +2363,9 @@
 }
 
 static void
-dissect_scsi_testunitrdy (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                          guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_testunitrdy (tvbuff_t *tvb, packet_info *pinfo _U_,
+                          proto_tree *tree, guint offset, gboolean isreq,
+                          gboolean iscdb)
 {
     guint8 flags;
 
@@ -2379,8 +2382,9 @@
 }
 
 static void
-dissect_scsi_formatunit (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                         guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_formatunit (tvbuff_t *tvb, packet_info *pinfo _U_,
+                         proto_tree *tree, guint offset, gboolean isreq,
+                         gboolean iscdb)
 {
     guint8 flags;
 
@@ -2407,7 +2411,7 @@
 }
 
 static void
-dissect_scsi_rdwr6 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_rdwr6 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                     guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -2431,7 +2435,7 @@
 }
 
 static void
-dissect_scsi_rdwr10 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_rdwr10 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                      guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -2461,7 +2465,7 @@
 }
 
 static void
-dissect_scsi_rdwr12 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_rdwr12 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                      guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -2491,7 +2495,7 @@
 }
 
 static void
-dissect_scsi_rdwr16 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_rdwr16 (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                      guint offset, gboolean isreq, gboolean iscdb)
 {
     guint8 flags;
@@ -2514,8 +2518,9 @@
 }
 
 static void
-dissect_scsi_readcapacity (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                           guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_readcapacity (tvbuff_t *tvb, packet_info *pinfo _U_,
+                           proto_tree *tree, guint offset, gboolean isreq,
+                           gboolean iscdb)
 {
     guint8 flags;
     guint len;
@@ -2551,8 +2556,9 @@
 }
 
 static void
-dissect_scsi_readdefdata10 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                            guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_readdefdata10 (tvbuff_t *tvb, packet_info *pinfo _U_,
+                            proto_tree *tree, guint offset, gboolean isreq,
+                            gboolean iscdb)
 {
     guint8 flags;
 
@@ -2576,8 +2582,9 @@
 }
 
 static void
-dissect_scsi_readdefdata12 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                            guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_readdefdata12 (tvbuff_t *tvb, packet_info *pinfo _U_,
+                            proto_tree *tree, guint offset, gboolean isreq,
+                            gboolean iscdb)
 {
     guint8 flags;
 
@@ -2601,8 +2608,9 @@
 }
 
 static void
-dissect_scsi_reassignblks (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
-                           guint offset, gboolean isreq, gboolean iscdb)
+dissect_scsi_reassignblks (tvbuff_t *tvb, packet_info *pinfo _U_,
+                           proto_tree *tree, guint offset, gboolean isreq,
+                           gboolean iscdb)
 {
     guint8 flags;
 
@@ -2625,11 +2633,9 @@
 }
 
 static void
-dissect_scsi_varlencdb (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
+dissect_scsi_varlencdb (tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree,
                         guint offset, gboolean isreq, gboolean iscdb)
 {
-    guint8 flags;
-
     if (!tree)
         return;
     
@@ -2637,11 +2643,13 @@
         proto_tree_add_item (tree, hf_scsi_control, tvb, offset, 1, 0);
         proto_tree_add_item (tree, hf_scsi_add_cdblen, tvb, offset+6, 1, 0);
         proto_tree_add_item (tree, hf_scsi_svcaction, tvb, offset+7, 2, 0);
+
     }
 }
 
 void
-dissect_scsi_rsp (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+dissect_scsi_rsp (tvbuff_t *tvb _U_, packet_info *pinfo _U_,
+                  proto_tree *tree _U_)
 {
     /* Nothing to do here, just blow up the data structures for this SCSI
      * transaction
@@ -2657,9 +2665,6 @@
     guint8 flags;
     proto_item *ti;
     proto_tree *sns_tree;
-    scsi_device_type dev = 0;
-    scsi_devtype_key_t dkey;
-    scsi_devtype_data_t *devdata;
 
     scsi_end_task (pinfo);
     
@@ -2706,7 +2711,6 @@
     scsi_cmnd_type cmd = 0;     /* 0 is undefined type */
     scsi_device_type devtype = 0;
     gchar *valstr;
-    conversation_t *conversation;
     scsi_task_data_t *cdata;
     scsi_devtype_key_t dkey;
     scsi_devtype_data_t *devdata;
@@ -2975,7 +2979,7 @@
 }
 
 static void
-dissect_scsi (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+dissect_scsi (tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_)
 {
 }
 
@@ -2987,11 +2991,7 @@
     proto_tree *scsi_tree;
     guint8 opcode = 0xFF;
     scsi_cmnd_type cmd = 0;     /* 0 is undefined type */
-    gchar *valstr;
-    scsi_device_type dev = 0;
     scsi_task_data_t *cdata = NULL;
-    scsi_devtype_key_t dkey;
-    scsi_devtype_data_t *devdata;
     
     cdata = scsi_find_task (pinfo);
     

-- 
How few are our real wants, and how easy it is to satisfy them! Our imaginary
ones are boundless and insatiable. - Julius Charles Hare