And with them attached.

Martin Mathieson wrote:

Hi,

These patches
- add a few more chargecontrol AVPs, and add the vendor-id where needed
- report as expert info when AVPs' lengths don't match their type

Regards,
Martin


_______________________________________________
Wireshark-dev mailing list
Wireshark-dev@wireshark.org
http://www.wireshark.org/mailman/listinfo/wireshark-dev


Index: epan/dissectors/packet-diameter.c
===================================================================
--- epan/dissectors/packet-diameter.c   (revision 18734)
+++ epan/dissectors/packet-diameter.c   (working copy)
@@ -1902,10 +1902,14 @@
                                                                
proto_tree_add_item(avpi_tree, hf_diameter_avp_data_v6addr,
                                                                                
    tvb, offset, avpDataLength, FALSE);
                                                        } else {
-                                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
-                                                                               
            tvb, offset, avpDataLength,
-                                                                               
            tvb_get_ptr(tvb, offset, avpDataLength),
-                                                                               
            "Error! Bad Address Length (Address in RFC3588 format?)");
+                                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                                                               
                 tvb, offset, avpDataLength,
+                                                                               
                 tvb_get_ptr(tvb, offset, avpDataLength),
+                                                                               
                 "Error! Bad Address Length (Address in RFC3588 format?)");
+                                                               
expert_add_info_format(pinfo, ti,
+                                                                               
       PI_MALFORMED, PI_NOTE,
+                                                                               
       "Bad Address Length (%u)",
+                                                                               
       avpDataLength);
                                                        }
                                                        break;
                                                case DIAMETER_RFC:
@@ -1935,10 +1939,14 @@
                                                proto_tree_add_item(avpi_tree, 
hf_diameter_avp_data_int32,
                                                                    tvb, 
offset, avpDataLength, FALSE);
                                        } else {
-                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
-                                                                           
tvb, offset, avpDataLength,
-                                                                           
tvb_get_ptr(tvb, offset, avpDataLength),
-                                                                           
"Error!  Bad Integer32 Length");
+                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                                                               
 tvb, offset, avpDataLength,
+                                                                               
 tvb_get_ptr(tvb, offset, avpDataLength),
+                                                                               
"Error!  Bad Integer32 Length");
+                                               expert_add_info_format(pinfo, 
ti,
+                                                                      
PI_MALFORMED, PI_NOTE,
+                                                                      "Bad 
Integer32 Length (%u)",
+                                                                      
avpDataLength);
                                        }
                                        break;
 
@@ -1951,10 +1959,14 @@
                                                                           tvb, 
offset, avpDataLength, data,
                                                                           
"Value: 0x%08x (%u)", data, data);
                                        } else {
-                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
-                                                                           
tvb, offset, avpDataLength,
-                                                                           
tvb_get_ptr(tvb, offset, avpDataLength),
-                                                                           
"Error!  Bad Unsigned32 Length");
+                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                                                               
 tvb, offset, avpDataLength,
+                                                                               
 tvb_get_ptr(tvb, offset, avpDataLength),
+                                                                               
 "Error!  Bad Unsigned32 Length");
+                                               expert_add_info_format(pinfo, 
ti,
+                                                                      
PI_MALFORMED, PI_NOTE,
+                                                                      "Bad 
Unsigned32 Length (%u)",
+                                                                      
avpDataLength);
                                        }
                                        break;
 
@@ -1969,10 +1981,14 @@
                                                                           
"Value: 0x%08x (%u): %s", data,
                                                                           
data, valstr);
                                        } else {
-                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
-                                                                           
tvb, offset, avpDataLength,
-                                                                           
tvb_get_ptr(tvb, offset, avpDataLength),
-                                                                           
"Error!  Bad Enumerated Length");
+                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                                                               
tvb, offset, avpDataLength,
+                                                                               
tvb_get_ptr(tvb, offset, avpDataLength),
+                                                                               
"Error!  Bad Enumerated Length");
+                                               expert_add_info_format(pinfo, 
ti,
+                                                                      
PI_MALFORMED, PI_NOTE,
+                                                                      "Bad 
Enumerated Length (%u)",
+                                                                      
avpDataLength);
                                        }
                                        break;
 
@@ -1981,10 +1997,14 @@
                                                proto_tree_add_item(avpi_tree, 
hf_diameter_avp_data_int64,
                                                                    tvb, 
offset, 8, FALSE);
                                        } else {
-                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
                                                                            
tvb, offset, avpDataLength,
                                                                            
tvb_get_ptr(tvb, offset, avpDataLength),
                                                                            
"Error!  Bad Integer64 Length");
+                                               expert_add_info_format(pinfo, 
ti,
+                                                                      
PI_MALFORMED, PI_NOTE,
+                                                                      "Bad 
Integer64 Length (%u)",
+                                                                      
avpDataLength);
                                        }
                                        break;
 
@@ -1993,10 +2013,14 @@
                                                proto_tree_add_item(avpi_tree, 
hf_diameter_avp_data_uint64,
                                                                    tvb, 
offset, 8, FALSE);
                                        } else {
-                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
-                                                                           
tvb, offset, avpDataLength,
-                                                                           
tvb_get_ptr(tvb, offset, avpDataLength),
-                                                                           
"Error!  Bad Unsigned64 Length");
+                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                                                               
tvb, offset, avpDataLength,
+                                                                               
tvb_get_ptr(tvb, offset, avpDataLength),
+                                                                              
"Error!  Bad Unsigned64 Length");
+                                               expert_add_info_format(pinfo, 
ti,
+                                                                      
PI_MALFORMED, PI_NOTE,
+                                                                      "Bad 
Unsigned64 Length (%u)",
+                                                                      
avpDataLength);
                                        }
                                        break;
 
@@ -2025,10 +2049,14 @@
                                                                                
    "Error!  Time before 00:00:00 UTC, January 1, 1970");
                                                }
                                        } else {
-                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
-                                                                           
tvb, offset, avpDataLength,
-                                                                           
tvb_get_ptr(tvb, offset, avpDataLength),
-                                                                           
"Error!  Bad Time Length");
+                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                                                               
 tvb, offset, avpDataLength,
+                                                                               
 tvb_get_ptr(tvb, offset, avpDataLength),
+                                                                               
 "Error!  Bad Time Length");
+                                               expert_add_info_format(pinfo, 
ti,
+                                                                      
PI_MALFORMED, PI_NOTE,
+                                                                      "Bad 
Time Length (%u)",
+                                                                      
avpDataLength);
                                        }
                                        break;
 
@@ -2043,10 +2071,14 @@
                                                                           
"Value: 0x%08x (%u): %s", data,
                                                                           
data, valstr);
                                        } else {
-                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
-                                                                           
tvb, offset, avpDataLength,
-                                                                           
tvb_get_ptr(tvb, offset, avpDataLength),
-                                                                           
"Error!  Bad Enumerated Length");
+                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                                                               
 tvb, offset, avpDataLength,
+                                                                               
 tvb_get_ptr(tvb, offset, avpDataLength),
+                                                                               
 "Error!  Bad Enumerated Length");
+                                               expert_add_info_format(pinfo, 
ti,
+                                                                      
PI_MALFORMED, PI_NOTE,
+                                                                      "Bad 
Enumerated Length (%u)",
+                                                                      
avpDataLength);
                                        }
                                        break;
 
@@ -2054,10 +2086,14 @@
                                        if (avpDataLength == 4) {
                                                proto_tree_add_item(avpi_tree, 
hf_diameter_vendor_id, tvb, offset, avpDataLength, FALSE);
                                        } else {
-                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
                                                                            
tvb, offset, avpDataLength,
                                                                            
tvb_get_ptr(tvb, offset, avpDataLength),
                                                                            
"Error!  Bad Vendor ID Length");
+                                               expert_add_info_format(pinfo, 
ti,
+                                                                      
PI_MALFORMED, PI_NOTE,
+                                                                      "Bad 
Vendor ID Length (%u)",
+                                                                      
avpDataLength);
                                        }
                                        break;
 
@@ -2072,10 +2108,14 @@
                                                                           
"Application ID: %s %d (0x%08x)",
                                                                           
valstr, data, data);
                                        } else {
-                                               
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
-                                                                           
tvb, offset, avpDataLength,
-                                                                           
tvb_get_ptr(tvb, offset, avpDataLength),
-                                                                           
"Error!  Bad Application ID Length");
+                                               ti = 
proto_tree_add_bytes_format(avpi_tree, hf_diameter_avp_data_bytes,
+                                                                               
 tvb, offset, avpDataLength,
+                                                                               
 tvb_get_ptr(tvb, offset, avpDataLength),
+                                                                               
 "Error!  Bad Application ID Length");
+                                               expert_add_info_format(pinfo, 
ti,
+                                                                      
PI_MALFORMED, PI_NOTE,
+                                                                      "Bad 
Application ID Length (%u)",
+                                                                      
avpDataLength);
                                        }
                                        break;
 
@@ -2104,10 +2144,9 @@
                                }
                                        break;
                                case DIAMETER_PRIVATE_ID:
-                               {
                                        proto_tree_add_item(avpi_tree, 
hf_diameter_avp_private_id,
                                                            tvb, offset, 
avpDataLength, FALSE);
-                               }
+                                       break;
 
                                default:
                                case DIAMETER_OCTET_STRING:
Index: diameter/chargecontrol.xml
===================================================================
--- diameter/chargecontrol.xml  (revision 18734)
+++ diameter/chargecontrol.xml  (working copy)
@@ -11,15 +11,16 @@
                <avp name="CC-Correlation-Id" code="411" mandatory="may" 
may-encrypt="yes" protected="may" vendor-bit="mustnot">
                        <type type-name="OctetString"/>
                </avp>
+               <avp name="CC-Input-Octets" code="412" mandatory="must">
+                       <type type-name="Unsigned64"/>
+               </avp>
                <avp name="CC-Money" code="413" mandatory="must">
                        <grouped>
                                <gavp name="Unit-Value"/>
                                <gavp name="Currency-Code"/>
                        </grouped>
                </avp>
-               <avp name="CC-Input-Octets" code="412" mandatory="must">
-                       <type type-name="Unsigned64"/>
-               </avp>
+
                <avp name="CC-Output-Octets" code="414" mandatory="must" 
may-encrypt="yes" protected="may" vendor-bit="mustnot">
                        <type type-name="Unsigned64"/>
                </avp>
@@ -275,17 +276,17 @@
                </avp>
 
                <!-- Definition from SH specs -->
-               <avp name="MSISDN" code="701" mandatory="must" 
vendor-bit="mustnot" may-encrypt="yes">
+               <avp name="MSISDN" code="701" mandatory="must" 
vendor-bit="mustnot" may-encrypt="yes" vendor-id="TGPP">
                        <type type-name="OctetString"/>
                </avp>
 
-               <avp name="Time-Quota-Threshold" code="868" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="Time-Quota-Threshold" code="868" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="Unsigned32"/>
                </avp>
-               <avp name="Volume-Quota-Threshold" code="869" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="Volume-Quota-Threshold" code="869" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="Unsigned32"/>
                </avp>
-               <avp name="Trigger-Type" code="870" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="Trigger-Type" code="870" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="Enumerated"/>
                        <enum name="CHANGE_IN_SGSN_IP_ADDRESS" code="1"/>
                        <enum name="CHANGE_IN_QOS" code="2"/>
@@ -312,10 +313,10 @@
                        <enum name="CHANGEINLOCATION_CellId" code="34"/>
                        <enum name="CHANGEINPARTICIPANTS_Number" code="50"/>
                </avp>
-               <avp name="Quota-Holding-Time" code="871" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="Quota-Holding-Time" code="871" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="Unsigned32"/>
                </avp>
-               <avp name="Reporting-Reason" code="872" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="Reporting-Reason" code="872" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="Enumerated"/>
                        <enum name="THRESHOLD" code="0"/>
                        <enum name="QHT" code="1"/>
@@ -327,7 +328,7 @@
                        <enum name="FORCED_REAUTHORISATION" code="7"/>
                        <enum name="POOL_EXHAUSTED" code="8"/>
                </avp>
-               <avp name="Service-Information" code="873" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="Service-Information" code="873" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <grouped>
                                <gavp name="PS-Information"/>
                                <gavp name="WLAN-Information"/>
@@ -338,19 +339,41 @@
                                <gavp name="MBMS-Information"/>
                        </grouped>
                </avp>
-               <avp name="PS-Information" code="874" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
-                       <type type-name="UTF8String"/>
+               <avp name="PS-Information" code="874" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
+                       <grouped>
+                               <gavp name="3GPP-Charging-Id"/>
+                               <gavp name="3GPP-PDP Type"/>
+                               <gavp name="PDP-Address"/>
+                               <gavp name="3GPP-GPRS-Negotiated-QoS-Profile"/>
+                               <gavp name="SGSN-Address"/>
+                               <gavp name="GGSN-Address"/>
+                               <gavp name="CG-Address"/>
+                               <gavp name="3GPP-IMSI-MCC-MNC"/>
+                               <gavp name="3GPP-GGSN- MCC-MNC"/>
+                               <gavp name="3GPP-NSAPI"/>
+                               <gavp name="Called-Station-Id"/>
+                               <gavp name="3GPP-Session-Stop-Indicator"/>
+                               <gavp name="3GPP-Selection-Mode"/>
+                               <gavp name="3GPP-Charging-Characteristics"/>
+                               <gavp name="3GPP-SGSN-MCC-MNC"/>
+                               <gavp name="3GPP-MS-TimeZone"/>
+                               <gavp name="3GPP-CAMEL-Charging-Info"/>
+                               <gavp name="Charging-Rule-Base-Name"/>
+                               <gavp name="3GPP-User-Location-Info"/>
+                               <gavp name="3GPP-RAT-Type"/>
+                               <gavp name="PS-Furnish-Charging-Information"/>
+                       </grouped>
                </avp>
-               <avp name="WLAN-Information" code="875" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="WLAN-Information" code="875" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="UTF8String"/>
                </avp>
-               <avp name="IMS-Information" code="876" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="IMS-Information" code="876" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="UTF8String"/>
                </avp>
-               <avp name="MMS-Information" code="877" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="MMS-Information" code="877" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="UTF8String"/>
                </avp>
-               <avp name="LCS-Information" code="878" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="LCS-Information" code="878" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <grouped>
                                <gavp name="LCS-Client-ID"/>
                                <gavp name="Location-Type"/>
@@ -360,16 +383,29 @@
                                <gavp name="MSISDN"/>
                        </grouped>
                </avp>
-               <avp name="PoC-Information" code="879" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="PoC-Information" code="879" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="UTF8String"/>
                </avp>
-               <avp name="MBMS-Information" code="880" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="MBMS-Information" code="880" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="UTF8String"/>
                </avp>
-               <avp name="Quota-Consumption-Time" code="881" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
+               <avp name="Quota-Consumption-Time" code="881" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
                        <type type-name="Unsigned32"/>
                </avp>
+               <avp name="Expires" code="888" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
+                       <type type-name="Unsigned32"/>
+               </avp>
 
+               <avp name="Charging-Rule-Base-Name" code="1004" 
mandatory="must" may-encrypt="no" protected="may" vendor-bit="must" 
vendor-id="TGPP">
+                       <type type-name="UTF8String"/>
+               </avp>
+
+               <avp name="PDP-Address" code="1227" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
+                       <type type-name="IPAddress"/>
+               </avp>
+               <avp name="SGSN-Address" code="1228" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must" vendor-id="TGPP">
+                       <type type-name="IPAddress"/>
+               </avp>
                <avp name="LCS-Client-Name" code="1231" mandatory="must" 
may-encrypt="no" protected="may" vendor-bit="must">
                        <type type-name="UTF8String"/>
                </avp>
_______________________________________________
Wireshark-dev mailing list
Wireshark-dev@wireshark.org
http://www.wireshark.org/mailman/listinfo/wireshark-dev

Reply via email to