TECMP: Renaming to Device and Interface for TECMP 1.7

The new TECMP release renames as follows:
- Capture Module -> Device
- Channel -> Interface

Header fields (incl. filters) and Config UATs are affected.
This commit is contained in:
Dr. Lars Völker 2022-05-23 09:46:44 +02:00 committed by A Wireshark GitLab Utility
parent 75f31638f2
commit 96cf14ea01
1 changed files with 237 additions and 238 deletions

View File

@ -52,23 +52,23 @@ static dissector_table_t lin_subdissector_table;
/* Header fields */
/* TECMP */
static int hf_tecmp_cm_id = -1;
static int hf_tecmp_device_id = -1;
static int hf_tecmp_counter = -1;
static int hf_tecmp_version = -1;
static int hf_tecmp_msgtype = -1;
static int hf_tecmp_data_type = -1;
static int hf_tecmp_res = -1;
static int hf_tecmp_cmflags = -1;
static int hf_tecmp_cmflags_eos = -1;
static int hf_tecmp_cmflags_sos = -1;
static int hf_tecmp_cmflags_spy = -1;
static int hf_tecmp_cmflags_multi_frame = -1;
static int hf_tecmp_cmflags_cm_overflow = -1;
static int hf_tecmp_flags = -1;
static int hf_tecmp_flags_eos = -1;
static int hf_tecmp_flags_sos = -1;
static int hf_tecmp_flags_spy = -1;
static int hf_tecmp_flags_multi_frame = -1;
static int hf_tecmp_flags_dev_overflow = -1;
/* TECMP Payload */
static int hf_tecmp_payload_channelid = -1;
static int hf_tecmp_payload_channelname = -1;
static int hf_tecmp_payload_interface_id = -1;
static int hf_tecmp_payload_interface_name = -1;
static int hf_tecmp_payload_timestamp = -1;
static int hf_tecmp_payload_timestamp_ns = -1;
static int hf_tecmp_payload_timestamp_async = -1;
@ -168,35 +168,35 @@ static int hf_tecmp_payload_data_analog_value_amp_hour = -1;
static int hf_tecmp_payload_data_analog_value_celsius = -1;
/* TECMP Status Messsages */
/* Status Capture Module */
/* Status Device */
static int hf_tecmp_payload_status_vendor_id = -1;
static int hf_tecmp_payload_status_cm_version = -1;
static int hf_tecmp_payload_status_cm_type = -1;
static int hf_tecmp_payload_status_dev_version = -1;
static int hf_tecmp_payload_status_dev_type = -1;
static int hf_tecmp_payload_status_res = -1;
static int hf_tecmp_payload_status_length_vendor_data = -1;
static int hf_tecmp_payload_status_id = -1;
static int hf_tecmp_payload_status_device_id = -1;
static int hf_tecmp_payload_status_sn = -1;
static int hf_tecmp_payload_status_vendor_data = -1;
/* Status Bus */
static int hf_tecmp_payload_status_bus_data = -1;
static int hf_tecmp_payload_status_bus_data_entry = -1;
static int hf_tecmp_payload_status_bus_channelid = -1;
static int hf_tecmp_payload_status_bus_interface_id = -1;
static int hf_tecmp_payload_status_bus_total = -1;
static int hf_tecmp_payload_status_bus_errors = -1;
/* Status Capture Module Vendor Data Technica Engineering */
static int hf_tecmp_payload_status_cm_vendor_technica_res = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_sw = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_hw = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_buffer_fill_level = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_buffer_overflow = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_buffer_size = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_lifecycle = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_voltage = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_temperature = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_temperature_chassis = -1;
static int hf_tecmp_payload_status_cm_vendor_technica_temperature_silicon = -1;
/* Status Device Vendor Data Technica Engineering */
static int hf_tecmp_payload_status_dev_vendor_technica_res = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_sw = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_hw = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_buffer_fill_level = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_buffer_overflow = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_buffer_size = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_lifecycle = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_voltage = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_temperature = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_temperature_chassis = -1;
static int hf_tecmp_payload_status_dev_vendor_technica_temperature_silicon = -1;
#define VENDOR_TECHNICA_TEMP_MAX 127
#define VENDOR_TECHNICA_TEMP_NA -128
@ -217,22 +217,22 @@ static int hf_tecmp_payload_status_cfg_vendor_technica_segment_length = -1;
static int hf_tecmp_payload_status_cfg_vendor_technica_segment_data = -1;
/* TECMP Control Message */
static int hf_tecmp_payload_ctrl_msg_cm_id = -1;
static int hf_tecmp_payload_ctrl_msg_device_id = -1;
static int hf_tecmp_payload_ctrl_msg_id = -1;
/* protocol tree items */
static gint ett_tecmp = -1;
static gint ett_tecmp_cm_flags = -1;
static gint ett_tecmp_flags = -1;
static gint ett_tecmp_payload = -1;
static gint ett_tecmp_payload_channel_id = -1;
static gint ett_tecmp_payload_interface_id = -1;
static gint ett_tecmp_payload_data = -1;
static gint ett_tecmp_payload_timestamp = -1;
static gint ett_tecmp_payload_dataflags = -1;
static gint ett_tecmp_payload_data_id = -1;
static gint ett_tecmp_status_bus_data = -1;
static gint ett_tecmp_status_bus_data_entry = -1;
static gint ett_tecmp_status_cm_vendor_data = -1;
static gint ett_tecmp_status_dev_vendor_data = -1;
static gint ett_tecmp_status_bus_vendor_data = -1;
@ -242,7 +242,7 @@ static expert_field ef_tecmp_payload_length_mismatch = EI_INIT;
/* TECMP Type Names */
#define TECMP_MSG_TYPE_CTRL_MSG 0x00
#define TECMP_MSG_TYPE_STATUS_CM 0x01
#define TECMP_MSG_TYPE_STATUS_DEV 0x01
#define TECMP_MSG_TYPE_STATUS_BUS 0x02
#define TECMP_MSG_TYPE_LOG_STREAM 0x03
#define TECMP_MSG_TYPE_CFG_CM 0x04
@ -252,7 +252,7 @@ static expert_field ef_tecmp_payload_length_mismatch = EI_INIT;
/* Updated by ID Registry */
static const value_string msg_type_names[] = {
{TECMP_MSG_TYPE_CTRL_MSG, "Control Message"},
{TECMP_MSG_TYPE_STATUS_CM, "Status Capture Module"},
{TECMP_MSG_TYPE_STATUS_DEV, "Status Device"},
{TECMP_MSG_TYPE_STATUS_BUS, "Status Bus"},
{TECMP_MSG_TYPE_LOG_STREAM, "Logging Stream"},
{TECMP_MSG_TYPE_CFG_CM, "Status Configuration"},
@ -325,9 +325,9 @@ static const value_string tecmp_vendor_ids[] = {
{0, NULL}
};
/* Capture Module IDs */
/* Device IDs */
/* Can be overwritten/extended by config */
static const value_string tecmp_cm_id_prefixes[] = {
static const value_string tecmp_device_id_prefixes[] = {
{0x0030, "CM LIN Combo"},
{0x0040, "CM CAN Combo"},
{0x0060, "CM 100 High"},
@ -336,9 +336,9 @@ static const value_string tecmp_cm_id_prefixes[] = {
{0, NULL}
};
/* Capture Module Types */
/* Device Types */
/* Updated by ID Registry */
static const value_string tecmp_cm_types[] = {
static const value_string tecmp_device_types[] = {
{0x02, "CM LIN Combo"},
{0x04, "CM CAN Combo"},
{0x06, "CM 100 High"},
@ -478,30 +478,30 @@ typedef struct _generic_one_id_string {
gchar *name;
} generic_one_id_string_t;
/* Channel UAT */
typedef struct _channel_config {
/* Interface UAT */
typedef struct _interface_config {
guint id;
guint bus_id;
gchar *name;
} channel_config_t;
} interface_config_t;
#define DATAFILE_TECMP_CM_IDS "TECMP_capture_module_identifiers"
#define DATAFILE_TECMP_CH_IDS "TECMP_channel_identifiers"
#define DATAFILE_TECMP_DEVICE_IDS "TECMP_device_identifiers"
#define DATAFILE_TECMP_INTERFACE_IDS "TECMP_interface_identifiers"
static GHashTable *data_tecmp_cms = NULL;
static generic_one_id_string_t* tecmp_cms = NULL;
static guint tecmp_cms_num = 0;
static GHashTable *data_tecmp_devices = NULL;
static generic_one_id_string_t* tecmp_devices = NULL;
static guint tecmp_devices_num = 0;
UAT_HEX_CB_DEF(tecmp_cms, id, generic_one_id_string_t)
UAT_CSTRING_CB_DEF(tecmp_cms, name, generic_one_id_string_t)
UAT_HEX_CB_DEF(tecmp_devices, id, generic_one_id_string_t)
UAT_CSTRING_CB_DEF(tecmp_devices, name, generic_one_id_string_t)
static GHashTable *data_tecmp_channels = NULL;
static channel_config_t* tecmp_channels = NULL;
static guint tecmp_channel_num = 0;
static GHashTable *data_tecmp_interfaces = NULL;
static interface_config_t* tecmp_interfaces = NULL;
static guint tecmp_interfaces_num = 0;
UAT_HEX_CB_DEF(tecmp_channels, id, channel_config_t)
UAT_CSTRING_CB_DEF(tecmp_channels, name, channel_config_t)
UAT_HEX_CB_DEF(tecmp_channels, bus_id, channel_config_t)
UAT_HEX_CB_DEF(tecmp_interfaces, id, interface_config_t)
UAT_CSTRING_CB_DEF(tecmp_interfaces, name, interface_config_t)
UAT_HEX_CB_DEF(tecmp_interfaces, bus_id, interface_config_t)
/* generic UAT */
static void
@ -583,9 +583,9 @@ ht_lookup_name(GHashTable *ht, unsigned int identifier) {
/* ID -> ID, Name */
static void *
copy_channel_config_cb(void *n, const void *o, size_t size _U_) {
channel_config_t *new_rec = (channel_config_t *)n;
const channel_config_t *old_rec = (const channel_config_t *)o;
copy_interface_config_cb(void *n, const void *o, size_t size _U_) {
interface_config_t *new_rec = (interface_config_t *)n;
const interface_config_t *old_rec = (const interface_config_t *)o;
new_rec->id = old_rec->id;
new_rec->name = g_strdup(old_rec->name);
@ -594,8 +594,8 @@ copy_channel_config_cb(void *n, const void *o, size_t size _U_) {
}
static gboolean
update_channel_config(void *r, char **err) {
channel_config_t *rec = (channel_config_t *)r;
update_interface_config(void *r, char **err) {
interface_config_t *rec = (interface_config_t *)r;
if (rec->id > 0xffffffff) {
*err = ws_strdup_printf("We currently only support 32 bit identifiers (ID: %i Name: %s)", rec->id, rec->name);
@ -616,33 +616,33 @@ update_channel_config(void *r, char **err) {
}
static void
free_channel_config_cb(void *r) {
channel_config_t *rec = (channel_config_t *)r;
free_interface_config_cb(void *r) {
interface_config_t *rec = (interface_config_t *)r;
/* freeing result of g_strdup */
g_free(rec->name);
rec->name = NULL;
}
static channel_config_t *
ht_lookup_channel_config(unsigned int identifier) {
channel_config_t *tmp = NULL;
static interface_config_t *
ht_lookup_interface_config(unsigned int identifier) {
interface_config_t *tmp = NULL;
unsigned int *id = NULL;
if (data_tecmp_channels == NULL) {
if (data_tecmp_interfaces == NULL) {
return NULL;
}
id = wmem_new(wmem_epan_scope(), unsigned int);
*id = (unsigned int)identifier;
tmp = (channel_config_t *)g_hash_table_lookup(data_tecmp_channels, id);
tmp = (interface_config_t *)g_hash_table_lookup(data_tecmp_interfaces, id);
wmem_free(wmem_epan_scope(), id);
return tmp;
}
static gchar *
ht_channel_config_to_string(unsigned int identifier) {
channel_config_t *tmp = ht_lookup_channel_config(identifier);
ht_interface_config_to_string(unsigned int identifier) {
interface_config_t *tmp = ht_lookup_interface_config(identifier);
if (tmp == NULL) {
return NULL;
}
@ -651,8 +651,8 @@ ht_channel_config_to_string(unsigned int identifier) {
}
static guint16
ht_channel_config_to_bus_id(unsigned int identifier) {
channel_config_t *tmp = ht_lookup_channel_config(identifier);
ht_interface_config_to_bus_id(unsigned int identifier) {
interface_config_t *tmp = ht_lookup_interface_config(identifier);
if (tmp == NULL) {
/* 0 means basically any or none */
return 0;
@ -661,75 +661,74 @@ ht_channel_config_to_bus_id(unsigned int identifier) {
return tmp->bus_id;
}
/*** UAT TECMP_CM_IDs ***/
/*** UAT TECMP_DEVICE_IDs ***/
static void
post_update_tecmp_cms_cb(void) {
post_update_tecmp_devices_cb(void) {
/* destroy old hash table, if it exists */
if (data_tecmp_cms) {
g_hash_table_destroy(data_tecmp_cms);
data_tecmp_cms = NULL;
if (data_tecmp_devices) {
g_hash_table_destroy(data_tecmp_devices);
data_tecmp_devices = NULL;
}
/* create new hash table */
data_tecmp_cms = g_hash_table_new_full(g_int_hash, g_int_equal, &tecmp_free_key, &simple_free);
post_update_one_id_string_template_cb(tecmp_cms, tecmp_cms_num, data_tecmp_cms);
data_tecmp_devices = g_hash_table_new_full(g_int_hash, g_int_equal, &tecmp_free_key, &simple_free);
post_update_one_id_string_template_cb(tecmp_devices, tecmp_devices_num, data_tecmp_devices);
}
static void
post_update_tecmp_channels_cb(void) {
post_update_tecmp_interfaces_cb(void) {
guint i;
int *key = NULL;
/* destroy old hash table, if it exists */
if (data_tecmp_channels) {
g_hash_table_destroy(data_tecmp_channels);
data_tecmp_channels = NULL;
if (data_tecmp_interfaces) {
g_hash_table_destroy(data_tecmp_interfaces);
data_tecmp_interfaces = NULL;
}
/* create new hash table */
data_tecmp_channels = g_hash_table_new_full(g_int_hash, g_int_equal, &tecmp_free_key, NULL);
data_tecmp_interfaces = g_hash_table_new_full(g_int_hash, g_int_equal, &tecmp_free_key, NULL);
if (data_tecmp_channels == NULL || tecmp_channels == NULL || tecmp_channel_num == 0) {
if (data_tecmp_interfaces == NULL || tecmp_interfaces == NULL || tecmp_interfaces_num == 0) {
return;
}
for (i = 0; i < tecmp_channel_num; i++) {
for (i = 0; i < tecmp_interfaces_num; i++) {
key = wmem_new(wmem_epan_scope(), int);
*key = tecmp_channels[i].id;
g_hash_table_insert(data_tecmp_channels, key, &tecmp_channels[i]);
*key = tecmp_interfaces[i].id;
g_hash_table_insert(data_tecmp_interfaces, key, &tecmp_interfaces[i]);
}
}
static void
add_cm_id_text(proto_item *ti, guint16 cm_id) {
const gchar *descr = ht_lookup_name(data_tecmp_cms, cm_id);
add_device_id_text(proto_item *ti, guint16 device_id) {
const gchar *descr = ht_lookup_name(data_tecmp_devices, device_id);
if (descr != NULL) {
proto_item_append_text(ti, " (%s)", descr);
} else {
/* try to pick a default */
descr = val_to_str((cm_id & 0xfff0), tecmp_cm_id_prefixes, "Unknown/Unconfigured CM");
descr = val_to_str((device_id & 0xfff0), tecmp_device_id_prefixes, "Unknown/Unconfigured CM");
if (descr != NULL) {
if ((cm_id & 0x000f) == 0) {
proto_item_append_text(ti, " (%s %d (Default))", descr, (cm_id & 0x000f));
if ((device_id & 0x000f) == 0) {
proto_item_append_text(ti, " (%s %d (Default))", descr, (device_id & 0x000f));
} else {
proto_item_append_text(ti, " (%s %d)", descr, (cm_id & 0x000f));
proto_item_append_text(ti, " (%s %d)", descr, (device_id & 0x000f));
}
}
}
}
static void
add_channel_id_text_and_name(proto_item *ti, guint32 channel_id, tvbuff_t *tvb, gint offset) {
const gchar *descr = ht_channel_config_to_string(channel_id);
add_interface_id_text_and_name(proto_item *ti, guint32 interface_id, tvbuff_t *tvb, gint offset) {
const gchar *descr = ht_interface_config_to_string(interface_id);
if (descr != NULL) {
proto_item_append_text(ti, " (%s)", descr);
proto_tree *subtree = proto_item_add_subtree(ti, ett_tecmp_payload_channel_id);
proto_tree_add_string(subtree, hf_tecmp_payload_channelname, tvb, offset, 4, descr);
proto_tree *subtree = proto_item_add_subtree(ti, ett_tecmp_payload_interface_id);
proto_tree_add_string(subtree, hf_tecmp_payload_interface_name, tvb, offset, 4, descr);
}
}
@ -752,7 +751,7 @@ tecmp_entry_header_present(tvbuff_t *tvb, guint offset) {
static guint
dissect_tecmp_entry_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset_orig, guint tecmp_msg_type, guint16 msg_type,
gboolean first, guint16 *dataflags, guint32 *channel_id) {
gboolean first, guint16 *dataflags, guint32 *interface_id) {
proto_item *ti;
proto_tree *subtree = NULL;
guint offset = offset_orig;
@ -870,10 +869,10 @@ dissect_tecmp_entry_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
col_append_str(pinfo->cinfo, COL_INFO, val_to_str(msg_type, tecmp_msgtype_names, "Unknown (%d)"));
ti = proto_tree_add_item_ret_uint(tree, hf_tecmp_payload_channelid, tvb, offset, 4, ENC_BIG_ENDIAN, &tmp);
add_channel_id_text_and_name(ti, tmp, tvb, offset);
if (channel_id != NULL) {
*channel_id = tmp;
ti = proto_tree_add_item_ret_uint(tree, hf_tecmp_payload_interface_id, tvb, offset, 4, ENC_BIG_ENDIAN, &tmp);
add_interface_id_text_and_name(ti, tmp, tvb, offset);
if (interface_id != NULL) {
*interface_id = tmp;
}
ns = tvb_get_guint64(tvb, offset + 4, ENC_BIG_ENDIAN) & 0x3fffffffffffffff;
@ -1023,7 +1022,7 @@ dissect_tecmp_status_bus_vendor_data(tvbuff_t *tvb, packet_info *pinfo _U_, prot
}
static void
dissect_tecmp_status_cm_vendor_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_item *ti_root, guint8 vendor_id) {
dissect_tecmp_status_device_vendor_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto_item *ti_root, guint8 vendor_id) {
proto_tree *tree = NULL;
proto_item *ti = NULL;
gint offset = 0;
@ -1031,57 +1030,57 @@ dissect_tecmp_status_cm_vendor_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto
gint temperature = 0;
proto_item_append_text(ti_root, " (%s)", val_to_str(vendor_id, tecmp_vendor_ids, "(Unknown Vendor: %d)"));
tree = proto_item_add_subtree(ti_root, ett_tecmp_status_cm_vendor_data);
tree = proto_item_add_subtree(ti_root, ett_tecmp_status_dev_vendor_data);
switch (vendor_id) {
case TECMP_VENDOR_ID_TECHNICA:
proto_tree_add_item(tree, hf_tecmp_payload_status_cm_vendor_technica_res, tvb, offset, 1, ENC_NA);
proto_tree_add_item(tree, hf_tecmp_payload_status_dev_vendor_technica_res, tvb, offset, 1, ENC_NA);
offset += 1;
tmp = tvb_get_guint24(tvb, offset, ENC_BIG_ENDIAN);
proto_tree_add_string_format(tree, hf_tecmp_payload_status_cm_vendor_technica_sw, tvb, offset, 3, NULL,
proto_tree_add_string_format(tree, hf_tecmp_payload_status_dev_vendor_technica_sw, tvb, offset, 3, NULL,
"Software Version: v.%d.%d.%d",
(tmp&0x00ff0000)>>16, (tmp&0x0000ff00)>>8, tmp&0x000000ff);
offset += 3;
tmp = tvb_get_guint16(tvb, offset, ENC_BIG_ENDIAN);
proto_tree_add_string_format(tree, hf_tecmp_payload_status_cm_vendor_technica_hw, tvb, offset, 2, NULL,
"Hardware Version: v.%d.%d",
proto_tree_add_string_format(tree, hf_tecmp_payload_status_dev_vendor_technica_hw, tvb, offset, 2, NULL,
"Hardware Version: v.%d.%x",
(tmp & 0x0000ff00) >> 8, tmp & 0x000000ff);
offset += 2;
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_cm_vendor_technica_buffer_fill_level, tvb, offset, 1,
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_dev_vendor_technica_buffer_fill_level, tvb, offset, 1,
ENC_NA);
proto_item_append_text(ti, "%s", "%");
offset += 1;
proto_tree_add_item(tree, hf_tecmp_payload_status_cm_vendor_technica_buffer_overflow, tvb, offset, 1, ENC_NA);
proto_tree_add_item(tree, hf_tecmp_payload_status_dev_vendor_technica_buffer_overflow, tvb, offset, 1, ENC_NA);
offset += 1;
tmp = tvb_get_guint32(tvb, offset, ENC_BIG_ENDIAN);
proto_tree_add_uint_format_value(tree, hf_tecmp_payload_status_cm_vendor_technica_buffer_size, tvb, offset,
proto_tree_add_uint_format_value(tree, hf_tecmp_payload_status_dev_vendor_technica_buffer_size, tvb, offset,
4, tmp * 128, "%d MB", tmp * 128);
offset += 4;
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_cm_vendor_technica_lifecycle, tvb, offset, 8,
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_dev_vendor_technica_lifecycle, tvb, offset, 8,
ENC_BIG_ENDIAN);
proto_item_append_text(ti, " %s", "ns");
offset += 8;
tmp = tvb_get_guint16(tvb, offset, ENC_BIG_ENDIAN);
proto_tree_add_string_format_value(tree, hf_tecmp_payload_status_cm_vendor_technica_voltage, tvb, offset, 2, NULL,
proto_tree_add_string_format_value(tree, hf_tecmp_payload_status_dev_vendor_technica_voltage, tvb, offset, 2, NULL,
"%d.%d V", (tmp & 0x0000ff00) >> 8, tmp & 0x000000ff);
offset += 2;
if (tvb_captured_length_remaining(tvb, offset) == 1) {
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_cm_vendor_technica_temperature, tvb, offset, 1, ENC_NA);
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_dev_vendor_technica_temperature, tvb, offset, 1, ENC_NA);
proto_item_append_text(ti, "%s", UTF8_DEGREE_SIGN "C");
} else if (tvb_captured_length_remaining(tvb, offset) > 1) {
/* TECMP 1.5 and later */
temperature = tvb_get_gint8(tvb, offset);
if (temperature == VENDOR_TECHNICA_TEMP_NA) {
proto_tree_add_int_format_value(tree, hf_tecmp_payload_status_cm_vendor_technica_temperature_chassis, tvb, offset, 1, temperature, "%s", "Not Available");
proto_tree_add_int_format_value(tree, hf_tecmp_payload_status_dev_vendor_technica_temperature_chassis, tvb, offset, 1, temperature, "%s", "Not Available");
} else {
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_cm_vendor_technica_temperature_chassis, tvb, offset, 1, ENC_NA);
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_dev_vendor_technica_temperature_chassis, tvb, offset, 1, ENC_NA);
proto_item_append_text(ti, "%s", UTF8_DEGREE_SIGN "C");
if (temperature == VENDOR_TECHNICA_TEMP_MAX) {
proto_item_append_text(ti, " %s", "or more");
@ -1091,9 +1090,9 @@ dissect_tecmp_status_cm_vendor_data(tvbuff_t *tvb, packet_info *pinfo _U_, proto
temperature = tvb_get_gint8(tvb, offset);
if ( temperature == VENDOR_TECHNICA_TEMP_NA) {
proto_tree_add_int_format_value(tree, hf_tecmp_payload_status_cm_vendor_technica_temperature_silicon, tvb, offset, 1, temperature, "%s", "Not Available");
proto_tree_add_int_format_value(tree, hf_tecmp_payload_status_dev_vendor_technica_temperature_silicon, tvb, offset, 1, temperature, "%s", "Not Available");
} else {
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_cm_vendor_technica_temperature_silicon, tvb, offset, 1, ENC_NA);
ti = proto_tree_add_item(tree, hf_tecmp_payload_status_dev_vendor_technica_temperature_silicon, tvb, offset, 1, ENC_NA);
proto_item_append_text(ti, "%s", UTF8_DEGREE_SIGN "C");
if (temperature == VENDOR_TECHNICA_TEMP_MAX) {
proto_item_append_text(ti, " %s", "or more");
@ -1112,7 +1111,7 @@ dissect_tecmp_control_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g
proto_tree *tecmp_tree = NULL;
guint16 length = 0;
guint offset = offset_orig;
guint cm_id = 0;
guint device_id = 0;
if (tvb_captured_length_remaining(tvb, offset) >= (16 + 4)) {
length = tvb_get_guint16(tvb, offset + 12, ENC_BIG_ENDIAN);
@ -1124,9 +1123,9 @@ dissect_tecmp_control_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g
col_set_str(pinfo->cinfo, COL_INFO, "TECMP Control Message");
ti = proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_payload_ctrl_msg_cm_id, tvb, offset, 2, ENC_BIG_ENDIAN,
&cm_id);
add_cm_id_text(ti, (guint16)cm_id);
ti = proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_payload_ctrl_msg_device_id, tvb, offset, 2, ENC_BIG_ENDIAN,
&device_id);
add_device_id_text(ti, (guint16)device_id);
proto_tree_add_item(tecmp_tree, hf_tecmp_payload_ctrl_msg_id, tvb, offset+2, 2, ENC_BIG_ENDIAN);
offset += 4;
}
@ -1135,7 +1134,7 @@ dissect_tecmp_control_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g
}
static int
dissect_tecmp_status_cm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset_orig, guint16 msg_type,
dissect_tecmp_status_device(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset_orig, guint16 msg_type,
guint tecmp_msg_type) {
proto_item *ti = NULL;
proto_item *ti_tecmp_payload = NULL;
@ -1161,33 +1160,33 @@ dissect_tecmp_status_cm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gui
proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_payload_status_vendor_id, tvb, offset, 1, ENC_NA,
&vendor_id);
proto_tree_add_item(tecmp_tree, hf_tecmp_payload_status_cm_version, tvb, offset + 1, 1, ENC_NA);
proto_tree_add_item(tecmp_tree, hf_tecmp_payload_status_cm_type, tvb, offset + 2, 1, ENC_NA);
proto_tree_add_item(tecmp_tree, hf_tecmp_payload_status_dev_version, tvb, offset + 1, 1, ENC_NA);
proto_tree_add_item(tecmp_tree, hf_tecmp_payload_status_dev_type, tvb, offset + 2, 1, ENC_NA);
proto_tree_add_item(tecmp_tree, hf_tecmp_payload_status_res, tvb, offset + 3, 1, ENC_NA);
offset += 4;
proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_payload_status_length_vendor_data, tvb, offset, 2,
ENC_BIG_ENDIAN, &tmp);
vendor_data_len = (guint16)tmp;
ti = proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_payload_status_id, tvb, offset + 2, 2, ENC_BIG_ENDIAN,
ti = proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_payload_status_device_id, tvb, offset + 2, 2, ENC_BIG_ENDIAN,
&tmp);
add_cm_id_text(ti, (guint16)tmp);
add_device_id_text(ti, (guint16)tmp);
offset += 4;
proto_tree_add_item(tecmp_tree, hf_tecmp_payload_status_sn, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
switch (tecmp_msg_type) {
case TECMP_MSG_TYPE_STATUS_CM:
col_set_str(pinfo->cinfo, COL_INFO, "TECMP Status Capture Module");
proto_item_append_text(ti_tecmp_payload, " Status Capture Module");
case TECMP_MSG_TYPE_STATUS_DEV:
col_set_str(pinfo->cinfo, COL_INFO, "TECMP Status Device");
proto_item_append_text(ti_tecmp_payload, " Status Device");
if (vendor_data_len > 0) {
sub_tvb = tvb_new_subset_length_caplen(tvb, offset, (gint)vendor_data_len, (gint)vendor_data_len);
ti_tecmp_vendor_data = proto_tree_add_item(tecmp_tree, hf_tecmp_payload_status_vendor_data, tvb,
offset, (gint)vendor_data_len, ENC_NA);
dissect_tecmp_status_cm_vendor_data(sub_tvb, pinfo, ti_tecmp_vendor_data, (guint8)vendor_id);
dissect_tecmp_status_device_vendor_data(sub_tvb, pinfo, ti_tecmp_vendor_data, (guint8)vendor_id);
offset += vendor_data_len;
}
break;
@ -1209,14 +1208,14 @@ dissect_tecmp_status_cm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gui
proto_item_append_text(ti_tecmp_bus, " %d", i);
tecmp_tree_bus = proto_item_add_subtree(ti_tecmp_bus, ett_tecmp_status_bus_data_entry);
ti = proto_tree_add_item_ret_uint(tecmp_tree_bus, hf_tecmp_payload_status_bus_channelid, tvb, offset, 4,
ti = proto_tree_add_item_ret_uint(tecmp_tree_bus, hf_tecmp_payload_status_bus_interface_id, tvb, offset, 4,
ENC_NA, &tmp);
descr = ht_channel_config_to_string(tmp);
descr = ht_interface_config_to_string(tmp);
if (descr != NULL) {
proto_item_append_text(ti, " (%s)", descr);
proto_item_append_text(ti_tecmp_bus, ": (Channel ID: 0x%08x, %s)", tmp, descr);
proto_item_append_text(ti_tecmp_bus, ": (Interface ID: 0x%08x, %s)", tmp, descr);
} else {
proto_item_append_text(ti_tecmp_bus, ": (Channel ID: 0x%08x)", tmp);
proto_item_append_text(ti_tecmp_bus, ": (Interface ID: 0x%08x)", tmp);
}
proto_tree_add_item(tecmp_tree_bus, hf_tecmp_payload_status_bus_total, tvb, offset + 4, 4, ENC_NA);
@ -1252,7 +1251,7 @@ dissect_tecmp_status_cm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gui
break;
default:
proto_item_append_text(ti_tecmp_payload, " Status Capture Module");
proto_item_append_text(ti_tecmp_payload, " Status Device");
}
} else {
@ -1277,7 +1276,7 @@ dissect_tecmp_log_or_replay_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree
tvbuff_t *sub_tvb;
tvbuff_t *payload_tvb;
gboolean first = TRUE;
guint32 channel_id = 0;
guint32 interface_id = 0;
gdouble analog_value_scale_factor;
@ -1311,7 +1310,7 @@ dissect_tecmp_log_or_replay_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree
proto_item_append_text(ti_tecmp, " (%s)", val_to_str(msg_type, tecmp_msgtype_names, "Unknown (%d)"));
tecmp_tree = proto_item_add_subtree(ti_tecmp, ett_tecmp_payload);
offset += dissect_tecmp_entry_header(tvb, pinfo, tecmp_tree, offset, tecmp_msg_type, msg_type, first, &dataflags, &channel_id);
offset += dissect_tecmp_entry_header(tvb, pinfo, tecmp_tree, offset, tecmp_msg_type, msg_type, first, &dataflags, &interface_id);
first = FALSE;
@ -1322,7 +1321,7 @@ dissect_tecmp_log_or_replay_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree
switch (msg_type) {
case TECMP_DATA_TYPE_LIN:
proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_payload_data_id_field_8bit, sub_tvb, offset2, 1, ENC_NA, &(lin_info.id));
lin_info.bus_id = ht_channel_config_to_bus_id(channel_id);
lin_info.bus_id = ht_interface_config_to_bus_id(interface_id);
ti = proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_payload_data_length, sub_tvb, offset2 + 1, 1,
ENC_NA, &length2);
offset2 += 2;
@ -1372,7 +1371,7 @@ dissect_tecmp_log_or_replay_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree
can_info.fd = (msg_type == TECMP_DATA_TYPE_CAN_FD_DATA);
can_info.len = tvb_captured_length_remaining(sub_tvb, offset2);
can_info.bus_id = ht_channel_config_to_bus_id(channel_id);
can_info.bus_id = ht_interface_config_to_bus_id(interface_id);
/* luckely TECMP and SocketCAN share the first bit as indicator for 11 vs 29bit Identifiers */
can_info.id = tmp;
@ -1404,9 +1403,9 @@ dissect_tecmp_log_or_replay_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree
case TECMP_DATA_TYPE_FR_DATA:
/* lets set it based on config */
fr_info.bus_id = ht_channel_config_to_bus_id(channel_id);
fr_info.bus_id = ht_interface_config_to_bus_id(interface_id);
/* we assume "channel A" since we cannot know */
/* we assume "FlexRay Channel A" since we cannot know */
fr_info.ch = 0;
proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_payload_data_cycle, sub_tvb, offset2, 1, ENC_NA, &tmp);
@ -1513,14 +1512,14 @@ dissect_tecmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
guint offset = 0;
guint tecmp_type = 0;
guint tecmp_msg_type = 0;
guint cm_id = 0;
guint device_id = 0;
static int * const tecmp_cm_flags[] = {
&hf_tecmp_cmflags_eos,
&hf_tecmp_cmflags_sos,
&hf_tecmp_cmflags_spy,
&hf_tecmp_cmflags_multi_frame,
&hf_tecmp_cmflags_cm_overflow,
static int * const tecmp_flags[] = {
&hf_tecmp_flags_eos,
&hf_tecmp_flags_sos,
&hf_tecmp_flags_spy,
&hf_tecmp_flags_multi_frame,
&hf_tecmp_flags_dev_overflow,
NULL
};
@ -1533,8 +1532,8 @@ dissect_tecmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
tecmp_tree = NULL;
}
ti = proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_cm_id, tvb, offset, 2, ENC_BIG_ENDIAN, &cm_id);
add_cm_id_text(ti, (guint16)cm_id);
ti = proto_tree_add_item_ret_uint(tecmp_tree, hf_tecmp_device_id, tvb, offset, 2, ENC_BIG_ENDIAN, &device_id);
add_device_id_text(ti, (guint16)device_id);
offset += 2;
proto_tree_add_item(tecmp_tree, hf_tecmp_counter, tvb, offset, 2, ENC_BIG_ENDIAN);
@ -1552,7 +1551,7 @@ dissect_tecmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
proto_tree_add_item(tecmp_tree, hf_tecmp_res, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_bitmask(tecmp_tree, tvb, offset, hf_tecmp_cmflags, ett_tecmp_cm_flags, tecmp_cm_flags,
proto_tree_add_bitmask(tecmp_tree, tvb, offset, hf_tecmp_flags, ett_tecmp_flags, tecmp_flags,
ENC_BIG_ENDIAN);
offset += 2;
@ -1563,8 +1562,8 @@ dissect_tecmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U
case TECMP_MSG_TYPE_STATUS_BUS:
case TECMP_MSG_TYPE_CFG_CM:
case TECMP_MSG_TYPE_STATUS_CM:
offset += dissect_tecmp_status_cm(tvb, pinfo, tree, offset, (guint16)tecmp_msg_type, (guint8)tecmp_type);
case TECMP_MSG_TYPE_STATUS_DEV:
offset += dissect_tecmp_status_device(tvb, pinfo, tree, offset, (guint16)tecmp_msg_type, (guint8)tecmp_type);
break;
case TECMP_MSG_TYPE_LOG_STREAM:
@ -1583,11 +1582,11 @@ proto_register_tecmp_payload(void) {
expert_module_t *expert_module_tecmp_payload;
static hf_register_info hf[] = {
{ &hf_tecmp_payload_channelid,
{ "Channel ID", "tecmp.payload.channel_id",
{ &hf_tecmp_payload_interface_id,
{ "Interface ID", "tecmp.payload.interface_id",
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_channelname,
{ "Channel Name", "tecmp.payload.channel_name",
{ &hf_tecmp_payload_interface_name,
{ "ChannInterfaceel Name", "tecmp.payload.interface_name",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_timestamp,
{ "Timestamp", "tecmp.payload.timestamp",
@ -1665,38 +1664,38 @@ proto_register_tecmp_payload(void) {
{ "Checksum Error", "tecmp.payload.data_flags.checksum_error",
FT_BOOLEAN, 16, NULL, 0x2000, NULL, HFILL }},
{ &hf_tecmp_payload_data_flags_tx,
{ "TX (sent by Capture Module)", "tecmp.payload.data_flags.tx",
{ "TX (sent by Device)", "tecmp.payload.data_flags.tx",
FT_BOOLEAN, 16, NULL, 0x4000, NULL, HFILL }},
{ &hf_tecmp_payload_data_flags_overflow,
{ "Overflow (lost data)", "tecmp.payload.data_flags.Overflow",
FT_BOOLEAN, 16, NULL, 0x8000, NULL, HFILL }},
/* Control Message */
{ &hf_tecmp_payload_ctrl_msg_cm_id,
{ "Capture Module ID", "tecmp.payload.ctrl_msg.cm_id",
{ &hf_tecmp_payload_ctrl_msg_device_id,
{ "Device ID", "tecmp.payload.ctrl_msg.device_id",
FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_ctrl_msg_id,
{ "Control Message ID", "tecmp.payload.ctrl_msg.id",
FT_UINT16, BASE_HEX, VALS(tecmp_ctrl_msg_ids), 0x0, NULL, HFILL }},
/* Status Capture Module / Status Bus / Status Configuration */
/* Status Device / Status Bus / Status Configuration */
{ &hf_tecmp_payload_status_vendor_id,
{ "Vendor ID", "tecmp.payload.status.vendor_id",
FT_UINT8, BASE_HEX, VALS(tecmp_vendor_ids), 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_version,
{ "Capture Module Version", "tecmp.payload.status.cm_version",
{ &hf_tecmp_payload_status_dev_version,
{ "Device Version", "tecmp.payload.status.device_version",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_type,
{ "Capture Module Type", "tecmp.payload.status.cm_type",
FT_UINT8, BASE_HEX, VALS(tecmp_cm_types), 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_dev_type,
{ "Device Type", "tecmp.payload.status.device_type",
FT_UINT8, BASE_HEX, VALS(tecmp_device_types), 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_res,
{ "Reserved", "tecmp.payload.status.reserved",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_length_vendor_data,
{ "Length of Vendor Data", "tecmp.payload.status.vdata_len",
FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_id,
{ "Capture Module ID", "tecmp.payload.status.cm_id",
{ &hf_tecmp_payload_status_device_id,
{ "Device ID", "tecmp.payload.status.device_id",
FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_sn,
{ "Serial Number", "tecmp.payload.status.sn",
@ -1710,8 +1709,8 @@ proto_register_tecmp_payload(void) {
{ &hf_tecmp_payload_status_bus_data_entry,
{ "Bus Data Entry", "tecmp.payload.status.bus_data_entry",
FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_bus_channelid,
{ "Channel ID", "tecmp.payload.status.bus.channelid",
{ &hf_tecmp_payload_status_bus_interface_id,
{ "Interface ID", "tecmp.payload.status.bus.interface_id",
FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_bus_total,
{ "Messages Total", "tecmp.payload.status.bus.total",
@ -1720,39 +1719,39 @@ proto_register_tecmp_payload(void) {
{ "Errors Total", "tecmp.payload.status.bus.errors",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
/* Status Capture Module Vendor Data */
{ &hf_tecmp_payload_status_cm_vendor_technica_res,
{ "Reserved", "tecmp.payload.status_cm.vendor_technica.res",
/* Status Device Vendor Data */
{ &hf_tecmp_payload_status_dev_vendor_technica_res,
{ "Reserved", "tecmp.payload.status_dev.vendor_technica.res",
FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_vendor_technica_sw,
{ "Software Version", "tecmp.payload.status_cm.vendor_technica.sw_version",
{ &hf_tecmp_payload_status_dev_vendor_technica_sw,
{ "Software Version", "tecmp.payload.status_dev.vendor_technica.sw_version",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_vendor_technica_hw,
{ "Hardware Version", "tecmp.payload.status_cm.vendor_technica.hw_version",
{ &hf_tecmp_payload_status_dev_vendor_technica_hw,
{ "Hardware Version", "tecmp.payload.status_dev.vendor_technica.hw_version",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_vendor_technica_buffer_fill_level,
{ "Buffer Fill Level", "tecmp.payload.status_cm.vendor_technica.buffer_fill_level",
{ &hf_tecmp_payload_status_dev_vendor_technica_buffer_fill_level,
{ "Buffer Fill Level", "tecmp.payload.status_dev.vendor_technica.buffer_fill_level",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_vendor_technica_buffer_overflow,
{ "Buffer Overflow", "tecmp.payload.status_cm.vendor_technica.buffer_overflow",
{ &hf_tecmp_payload_status_dev_vendor_technica_buffer_overflow,
{ "Buffer Overflow", "tecmp.payload.status_dev.vendor_technica.buffer_overflow",
FT_BOOLEAN, BASE_DEC, TFS(&tfs_tecmp_technica_bufferoverflow), 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_vendor_technica_buffer_size,
{ "Buffer Size", "tecmp.payload.status_cm.vendor_technica.buffer_size",
{ &hf_tecmp_payload_status_dev_vendor_technica_buffer_size,
{ "Buffer Size", "tecmp.payload.status_dev.vendor_technica.buffer_size",
FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_vendor_technica_lifecycle,
{ "Lifecycle", "tecmp.payload.status_cm.vendor_technica.lifecycle",
{ &hf_tecmp_payload_status_dev_vendor_technica_lifecycle,
{ "Lifecycle", "tecmp.payload.status_dev.vendor_technica.lifecycle",
FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_vendor_technica_voltage,
{ "Voltage", "tecmp.payload.status_cm.vendor_technica.voltage",
{ &hf_tecmp_payload_status_dev_vendor_technica_voltage,
{ "Voltage", "tecmp.payload.status_dev.vendor_technica.voltage",
FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_vendor_technica_temperature,
{ "Temperature", "tecmp.payload.status_cm.vendor_technica.temperature",
{ &hf_tecmp_payload_status_dev_vendor_technica_temperature,
{ "Temperature", "tecmp.payload.status_dev.vendor_technica.temperature",
FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_payload_status_cm_vendor_technica_temperature_chassis,
{ "Temperature Chassis", "tecmp.payload.status_cm.vendor_technica.temperature_chassis",
{ &hf_tecmp_payload_status_dev_vendor_technica_temperature_chassis,
{ "Temperature Chassis", "tecmp.payload.status_dev.vendor_technica.temperature_chassis",
FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
{ &hf_tecmp_payload_status_cm_vendor_technica_temperature_silicon,
{ "Temperature Silicon", "tecmp.payload.status_cm.vendor_technica.temperature_silicon",
{ &hf_tecmp_payload_status_dev_vendor_technica_temperature_silicon,
{ "Temperature Silicon", "tecmp.payload.status_dev.vendor_technica.temperature_silicon",
FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL } },
/* Status Bus Vendor Data */
@ -1932,12 +1931,12 @@ proto_register_tecmp_payload(void) {
static gint *ett[] = {
&ett_tecmp_payload,
&ett_tecmp_payload_channel_id,
&ett_tecmp_payload_interface_id,
&ett_tecmp_payload_data,
&ett_tecmp_payload_timestamp,
&ett_tecmp_payload_dataflags,
&ett_tecmp_payload_data_id,
&ett_tecmp_status_cm_vendor_data,
&ett_tecmp_status_dev_vendor_data,
&ett_tecmp_status_bus_data,
&ett_tecmp_status_bus_data_entry,
&ett_tecmp_status_bus_vendor_data,
@ -1965,12 +1964,12 @@ proto_reg_handoff_tecmp_payload(void) {
void
proto_register_tecmp(void) {
module_t *tecmp_module = NULL;
uat_t *tecmp_cmid_uat = NULL;
uat_t *tecmp_channelid_uat = NULL;
uat_t *tecmp_device_id_uat = NULL;
uat_t *tecmp_interface_id_uat = NULL;
static hf_register_info hf[] = {
{ &hf_tecmp_cm_id,
{ "Capture Module ID", "tecmp.cm_id",
{ &hf_tecmp_device_id,
{ "Device ID", "tecmp.device_id",
FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_counter,
{ "Counter", "tecmp.counter",
@ -1987,42 +1986,42 @@ proto_register_tecmp(void) {
{ &hf_tecmp_res,
{ "Reserved", "tecmp.reserved",
FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_cmflags,
{ "CM Flags", "tecmp.cm_flags",
{ &hf_tecmp_flags,
{ "Device Flags", "tecmp.dev_flags",
FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
{ &hf_tecmp_cmflags_eos,
{ "End of Segment", "tecmp.cm_flags.eos",
{ &hf_tecmp_flags_eos,
{ "End of Segment", "tecmp.dev_flags.eos",
FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL }},
{ &hf_tecmp_cmflags_sos,
{ "Start of Segment", "tecmp.cm_flags.sos",
{ &hf_tecmp_flags_sos,
{ "Start of Segment", "tecmp.dev_flags.sos",
FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL }},
{ &hf_tecmp_cmflags_spy,
{ "Spy", "tecmp.cm_flags.spy",
{ &hf_tecmp_flags_spy,
{ "Spy", "tecmp.dev_flags.spy",
FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL }},
{ &hf_tecmp_cmflags_multi_frame,
{ "Multi Frame", "tecmp.cm_flags.multi_frame",
{ &hf_tecmp_flags_multi_frame,
{ "Multi Frame", "tecmp.dev_flags.multi_frame",
FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL }},
{ &hf_tecmp_cmflags_cm_overflow,
{ "Capture Module Overflow", "tecmp.cm_flags.cm_overflow",
{ &hf_tecmp_flags_dev_overflow,
{ "Device Overflow", "tecmp.dev_flags.device_overflow",
FT_BOOLEAN, 16, NULL, 0x8000, NULL, HFILL }},
};
static gint *ett[] = {
&ett_tecmp,
&ett_tecmp_cm_flags,
&ett_tecmp_flags,
};
/* UATs for user_data fields */
static uat_field_t tecmp_cm_id_uat_fields[] = {
UAT_FLD_HEX(tecmp_cms, id, "ID", "ID of the Capture Module (hex uint16 without leading 0x)"),
UAT_FLD_CSTRING(tecmp_cms, name, "Capture Module Name", "Name of the Capture Module (string)"),
static uat_field_t tecmp_device_id_uat_fields[] = {
UAT_FLD_HEX(tecmp_devices, id, "ID", "ID of the Device (hex uint16 without leading 0x)"),
UAT_FLD_CSTRING(tecmp_devices, name, "Device Name", "Name of the Device (string)"),
UAT_END_FIELDS
};
static uat_field_t tecmp_channel_id_uat_fields[] = {
UAT_FLD_HEX(tecmp_channels, id, "ID", "ID of the Channel (hex uint32 without leading 0x)"),
UAT_FLD_CSTRING(tecmp_channels, name, "Channel Name", "Name of the Channel (string)"),
UAT_FLD_HEX(tecmp_channels, bus_id, "Bus ID", "Bus ID of the Channel (hex uint16 without leading 0x)"),
static uat_field_t tecmp_interface_id_uat_fields[] = {
UAT_FLD_HEX(tecmp_interfaces, id, "ID", "ID of the Interface (hex uint32 without leading 0x)"),
UAT_FLD_CSTRING(tecmp_interfaces, name, "Interface Name", "Name of the Interface (string)"),
UAT_FLD_HEX(tecmp_interfaces, bus_id, "Bus ID", "Bus ID of the Interface (hex uint16 without leading 0x)"),
UAT_END_FIELDS
};
@ -2032,43 +2031,43 @@ proto_register_tecmp(void) {
tecmp_module = prefs_register_protocol(proto_tecmp, NULL);
/* UATs */
tecmp_cmid_uat = uat_new("TECMP Capture Modules",
tecmp_device_id_uat = uat_new("TECMP Devices",
sizeof(generic_one_id_string_t), /* record size */
DATAFILE_TECMP_CM_IDS, /* filename */
DATAFILE_TECMP_DEVICE_IDS, /* filename */
TRUE, /* from profile */
(void**)&tecmp_cms, /* data_ptr */
&tecmp_cms_num, /* numitems_ptr */
(void**)&tecmp_devices, /* data_ptr */
&tecmp_devices_num, /* numitems_ptr */
UAT_AFFECTS_DISSECTION, /* but not fields */
NULL, /* help */
copy_generic_one_id_string_cb, /* copy callback */
update_generic_one_identifier_16bit, /* update callback */
free_generic_one_id_string_cb, /* free callback */
post_update_tecmp_cms_cb, /* post update callback */
post_update_tecmp_devices_cb, /* post update callback */
NULL, /* reset callback */
tecmp_cm_id_uat_fields /* UAT field definitions */
tecmp_device_id_uat_fields /* UAT field definitions */
);
prefs_register_uat_preference(tecmp_module, "_udf_tecmp_cms", "Capture Modules",
"A table to define names of Capture Modules, which override default names.", tecmp_cmid_uat);
prefs_register_uat_preference(tecmp_module, "_udf_tecmp_devicess", "Devices",
"A table to define names of Devices, which override default names.", tecmp_device_id_uat);
tecmp_channelid_uat = uat_new("TECMP Channels",
sizeof(channel_config_t), /* record size */
DATAFILE_TECMP_CH_IDS, /* filename */
tecmp_interface_id_uat = uat_new("TECMP Interfaces",
sizeof(interface_config_t), /* record size */
DATAFILE_TECMP_INTERFACE_IDS, /* filename */
TRUE, /* from profile */
(void**)&tecmp_channels, /* data_ptr */
&tecmp_channel_num, /* numitems_ptr */
(void**)&tecmp_interfaces, /* data_ptr */
&tecmp_interfaces_num, /* numitems_ptr */
UAT_AFFECTS_DISSECTION, /* but not fields */
NULL, /* help */
copy_channel_config_cb, /* copy callback */
update_channel_config, /* update callback */
free_channel_config_cb, /* free callback */
post_update_tecmp_channels_cb, /* post update callback */
copy_interface_config_cb, /* copy callback */
update_interface_config, /* update callback */
free_interface_config_cb, /* free callback */
post_update_tecmp_interfaces_cb, /* post update callback */
NULL, /* reset callback */
tecmp_channel_id_uat_fields /* UAT field definitions */
tecmp_interface_id_uat_fields /* UAT field definitions */
);
prefs_register_uat_preference(tecmp_module, "_udf_tecmp_channels", "Channels",
"A table to define names of Channels.", tecmp_channelid_uat);
prefs_register_uat_preference(tecmp_module, "_udf_tecmp_interfaces", "Interfaces",
"A table to define names of Interfaces.", tecmp_interface_id_uat);
prefs_register_bool_preference(tecmp_module, "try_heuristic_first",
"Try heuristic sub-dissectors first",