aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rtps.c
diff options
context:
space:
mode:
authorismaelrti <ismael@rti.com>2018-11-21 15:35:33 +0100
committerAnders Broman <a.broman58@gmail.com>2018-11-23 05:48:41 +0000
commited8da33902a76695ad6c1b3b3c877aa654de0685 (patch)
tree3fd2628a773337805a02646eae92b9f95bbba0f4 /epan/dissectors/packet-rtps.c
parent2b1791b1eaa7835fcb4c309a47c65829b99496d8 (diff)
RTPS: Extra fields dissected in RTI DDS field PID_TYPE_CONSISTENCY.
In RTI Connext DDS 5.3.3 and later PID_TYPE_CONSISTENCY has six new fields: Ignore Sequence Bounds, Ignore String Bounds, Ignore Member Names, Prevent Type Widening, Force Type Validation, Ignore Enum Literal Names. Change-Id: I456097a3baf733351dcb86f2cba0a3f03d2fc100 Reviewed-on: https://code.wireshark.org/review/30753 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-rtps.c')
-rw-r--r--epan/dissectors/packet-rtps.c84
1 files changed, 81 insertions, 3 deletions
diff --git a/epan/dissectors/packet-rtps.c b/epan/dissectors/packet-rtps.c
index fb528e22cc..c79da0daed 100644
--- a/epan/dissectors/packet-rtps.c
+++ b/epan/dissectors/packet-rtps.c
@@ -284,6 +284,12 @@ static int hf_rtps_virtual_heartbeat_num_writers = -1;
static int hf_rtps_param_extended_parameter = -1;
static int hf_rtps_param_extended_pid_length = -1;
static int hf_rtps_param_type_consistency_kind = -1;
+static int hf_rtps_param_ignore_sequence_bounds = -1;
+static int hf_rtps_param_ignore_string_bounds = -1;
+static int hf_rtps_param_ignore_member_names = -1;
+static int hf_rtps_param_prevent_type_widening = -1;
+static int hf_rtps_param_force_type_validation = -1;
+static int hf_rtps_param_ignore_enum_literal_names = -1;
static int hf_rtps_parameter_data = -1;
static int hf_rtps_param_product_version_major = -1;
static int hf_rtps_param_product_version_minor = -1;
@@ -571,6 +577,7 @@ static expert_field ei_rtps_locator_port = EI_INIT;
static expert_field ei_rtps_more_samples_available = EI_INIT;
static expert_field ei_rtps_parameter_not_decoded = EI_INIT;
static expert_field ei_rtps_sm_octets_to_next_header_not_zero = EI_INIT;
+static expert_field pid_type_csonsistency_invalid_size = EI_INIT;
/***************************************************************************/
/* Preferences */
@@ -4567,15 +4574,55 @@ static gboolean dissect_parameter_sequence_rti_dds(proto_tree *rtps_parameter_tr
break;
}
- /* 0...2...........7...............15.............23...............31
+ /* Product Version Version 5.3.1 and earlier
+ * 0...2...........7...............15.............23...............31
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | PID_TYPE_CONSISTENCY_KIND | length |
* +---------------+---------------+---------------+---------------+
- * | unsigned short value | = = u n u s e d = = = = = = |
+ * | unsigned short value Kind | = = u n u s e d = = = = = = |
+ * +---------------+---------------+---------------+---------------+
+ *
+ * Product Version 5.3.3 and later
+ * 0...2...........7...............15.............23...............31
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | PID_TYPE_CONSISTENCY_KIND | length |
* +---------------+---------------+---------------+---------------+
+ * | unsigned short value Kind | Boolean ISeqB | Boolean IStrB |
+ * +---------------+---------------+---------------+---------------+
+ * | Boolean IMemN | Boolean PTypW | Boolean FtypV | Boolean IEnLN |
+ * +---------------+---------------+---------------+---------------+
+ * ISeqB = Ignore Sequence Names
+ * IStrB = Ignore String names
+ * IMemN = Ignore Member Names
+ * PTypW = Prevent Type Widening
+ * FtypV = Force Type Validation
+ * IEnLN = Ignore Enum Literal Names
*/
case PID_TYPE_CONSISTENCY: {
+ if (param_length !=4 && param_length !=8) {
+ expert_add_info_format(pinfo, rtps_parameter_tree,
+ &pid_type_csonsistency_invalid_size,
+ "PID_TYPE_CONSISTENCY invalid size. It has a size of %d bytes. Expected %d or %d bytes.",
+ param_length, 4, 8);
+ break;
+ }
proto_tree_add_item(rtps_parameter_tree, hf_rtps_param_type_consistency_kind, tvb, offset, 2, encoding);
+ /* Parameter size can be used as a discriminator between product versions. */
+ if (param_length == 8) {
+ offset += 2;
+ proto_tree_add_item(rtps_parameter_tree, hf_rtps_param_ignore_sequence_bounds,
+ tvb, offset, 1, encoding);
+ proto_tree_add_item(rtps_parameter_tree, hf_rtps_param_ignore_string_bounds,
+ tvb, offset + 1, 1, encoding);
+ proto_tree_add_item(rtps_parameter_tree, hf_rtps_param_ignore_member_names,
+ tvb, offset + 2, 1, encoding);
+ proto_tree_add_item(rtps_parameter_tree, hf_rtps_param_prevent_type_widening,
+ tvb, offset + 3, 1, encoding);
+ proto_tree_add_item(rtps_parameter_tree, hf_rtps_param_force_type_validation,
+ tvb, offset + 4, 1, encoding);
+ proto_tree_add_item(rtps_parameter_tree, hf_rtps_param_ignore_enum_literal_names,
+ tvb, offset + 5, 1, encoding);
+ }
break;
}
@@ -11428,6 +11475,36 @@ void proto_register_rtps(void) {
FT_UINT16, BASE_HEX, VALS(type_consistency_kind_vals), 0, NULL, HFILL }
},
+ { &hf_rtps_param_ignore_sequence_bounds, {
+ "Ignore Sequence Bounds", "rtps.param.ignore_sequence_bounds",
+ FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL }
+ },
+
+ { &hf_rtps_param_ignore_string_bounds, {
+ "Ignore String Bounds", "rtps.param.ignore_string_bounds",
+ FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL }
+ },
+
+ { &hf_rtps_param_ignore_member_names, {
+ "Ignore Member Names", "rtps.param.ignore_member_names",
+ FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL }
+ },
+
+ { &hf_rtps_param_prevent_type_widening, {
+ "Prevent Type Widening", "rtps.param.prevent_type_widening",
+ FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL }
+ },
+
+ { &hf_rtps_param_force_type_validation, {
+ "Force Type Validation", "rtps.param.force_type_validation",
+ FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL }
+ },
+
+ { &hf_rtps_param_ignore_enum_literal_names, {
+ "Ignore Enum Literal Names", "rtps.param.ignore_enum_literal_names",
+ FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL }
+ },
+
{ &hf_rtps_param_acknowledgment_kind, {
"Acknowledgment Kind", "rtps.param.acknowledgment_kind",
FT_UINT32, BASE_HEX, VALS(acknowledgement_kind_vals), 0, NULL, HFILL }
@@ -12446,7 +12523,8 @@ void proto_register_rtps(void) {
{ &ei_rtps_sm_octets_to_next_header_not_zero, { "rtps.sm.octetsToNextHeader.not_zero", PI_PROTOCOL, PI_WARN, "Should be ZERO", EXPFILL }},
{ &ei_rtps_extra_bytes, { "rtps.extra_bytes", PI_MALFORMED, PI_ERROR, "Don't know how to decode those extra bytes: %d", EXPFILL }},
{ &ei_rtps_missing_bytes, { "rtps.missing_bytes", PI_MALFORMED, PI_ERROR, "Not enough bytes to decode", EXPFILL }},
- { &ei_rtps_more_samples_available, { "rtps.more_samples_available", PI_PROTOCOL, PI_NOTE, "More samples available. Configure this limit from preferences dialog", EXPFILL }}
+ { &ei_rtps_more_samples_available, { "rtps.more_samples_available", PI_PROTOCOL, PI_NOTE, "More samples available. Configure this limit from preferences dialog", EXPFILL }},
+ { &pid_type_csonsistency_invalid_size, { "rtps.pid_type_consistency_invalid_size", PI_MALFORMED, PI_ERROR, "PID_TYPE_CONSISTENCY invalid size. Has a size of %d bytes. Expected %d or %d bytes.", EXPFILL }}
};
module_t *rtps_module;