(please, keep myself on CC as I'm not subscribed)

Hi,

The IPMI Completion Codes in range 80-BEh are command-specific so
it must consider the command before translate it.

The Get Session Challenge completion code response is implemented
according with IPMIv2_0rev1_0.pdf, page 306, table 22-20.
(patch attached)

-- 
Flávio
[PATCH]: Fix IPMI Completion Code translation.

The IPMI Completion Codes in range 80-BEh are command-specific so 
it must consider the command before translate it.

The Get Session Challenge completion code response is implemented
according with IPMIv2_0rev1_0.pdf, page 306, table 22-20.
 
Signed-of-by Flavio Leitner <[EMAIL PROTECTED]>


Index: wireshark-0.99.5/epan/dissectors/packet-ipmi.c
===================================================================
--- wireshark-0.99.5.orig/epan/dissectors/packet-ipmi.c
+++ wireshark-0.99.5/epan/dissectors/packet-ipmi.c
@@ -569,6 +569,13 @@ static const true_false_string ipmi_payl
   "Payload is unencrypted"
 };
 
+/* IPMIv2_0rev1_0.pdf, page 306, table 22-20 */
+static const value_string ipmi_chccode_vals[] = {
+       { 0x81, "Invalid user name" },
+       { 0x82, "Null user name (User 1) not enabled" },
+       { 0x00, NULL },
+};
+
 static const value_string ipmi_ccode_vals[] = {
        { 0x00, "Command completed normally" },
        /* added by lane */
@@ -3970,6 +3977,23 @@ get_netfn_cmd_text(guint8 netfn, guint8 
        }
 }
 
+static const char *
+get_ccode_cmd_text(guint8 cmd, guint8 ccode)
+{
+
+       /* command-specific codes 80-BEh */
+       if (ccode >= 0x80 && ccode <= 0xBE) {
+               switch (cmd) {
+                       /* Get Session Challenge */
+                       case 0x39:
+                               return val_to_str(ccode, ipmi_chccode_vals, 
+                                           "Unknown (0x%02x)");
+               }
+       }
+
+       return val_to_str(ccode, ipmi_ccode_vals, "Unknown (0x%02x)");
+}
+
 static void
 dissect_ipmi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
@@ -4053,7 +4077,7 @@ dissect_ipmi(tvbuff_t *tvb, packet_info 
                                col_add_fstr(pinfo->cinfo, COL_INFO, "%s, %s: 
%s",
                                     get_netfn_cmd_text(netfn, cmd),
                                     val_to_str(netfn, ipmi_netfn_vals, 
"Unknown (0x%02x)"),
-                                    val_to_str(ccode, ipmi_ccode_vals, 
"Unknown (0x%02x)"));
+                                    get_ccode_cmd_text(cmd, ccode));
                        else
                                col_add_fstr(pinfo->cinfo, COL_INFO, "%s, %s",
                                     get_netfn_cmd_text(netfn, cmd),
@@ -4251,8 +4275,9 @@ dissect_ipmi(tvbuff_t *tvb, packet_info 
 
        /* completion code */
        if (tree && response) {
-               proto_tree_add_item(ipmi_tree, hf_ipmi_msg_ccode,
-                                   tvb, offset++, 1, TRUE);
+               proto_tree_add_text(ipmi_tree, tvb, offset++, 1,
+                                   "Completion Code: %s (0x%02x)",
+                                   get_ccode_cmd_text(cmd, ccode), ccode);
        }
        
 
_______________________________________________
Wireshark-dev mailing list
[email protected]
http://www.wireshark.org/mailman/listinfo/wireshark-dev

Reply via email to