aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Mathieson <martin.r.mathieson@googlemail.com>2009-03-24 17:28:30 +0000
committerMartin Mathieson <martin.r.mathieson@googlemail.com>2009-03-24 17:28:30 +0000
commitd1fec1b9853da1458a2c806ad0f400a2b1112036 (patch)
treefeaf1f0f4ae290a66e71c83cbb4eefcf327675ca
parent43682eea0086f66f649a1f241232795ff73f4621 (diff)
Only report CRC Status when we know it to be valid.
svn path=/trunk/; revision=27841
-rw-r--r--epan/dissectors/packet-catapult-dct2000.c16
-rw-r--r--epan/dissectors/packet-mac-lte.c23
-rw-r--r--epan/dissectors/packet-mac-lte.h6
-rw-r--r--gtk/mac_lte_stat_dlg.c10
4 files changed, 35 insertions, 20 deletions
diff --git a/epan/dissectors/packet-catapult-dct2000.c b/epan/dissectors/packet-catapult-dct2000.c
index 37cc2718de..610dbb3b3b 100644
--- a/epan/dissectors/packet-catapult-dct2000.c
+++ b/epan/dissectors/packet-catapult-dct2000.c
@@ -1326,7 +1326,7 @@ static void attach_mac_lte_info(packet_info *pinfo)
}
/* Populate the struct from outhdr values */
- p_mac_lte_info->crcStatus = TRUE;
+ p_mac_lte_info->crcStatusValid = FALSE;
p_mac_lte_info->radioType = outhdr_values[i++];
p_mac_lte_info->rntiType = outhdr_values[i++];
@@ -1340,10 +1340,20 @@ static void attach_mac_lte_info(packet_info *pinfo)
p_mac_lte_info->reTxCount = outhdr_values[i++];
}
if (outhdr_values_found > 9) {
- p_mac_lte_info->crcStatus = outhdr_values[i++];
+ /* CRC only valid for DL-SCH */
+ if ((p_mac_lte_info->direction == DIRECTION_DOWNLINK) &&
+ ((p_mac_lte_info->rntiType == C_RNTI) ||
+ (p_mac_lte_info->rntiType == SI_RNTI) ||
+ (p_mac_lte_info->rntiType == P_RNTI))) {
+
+ p_mac_lte_info->crcStatusValid = TRUE;
+ p_mac_lte_info->crcStatus = outhdr_values[i++];
+ }
+ else {
+ i++;
+ }
}
-
/* Store info in packet */
p_add_proto_data(pinfo->fd, proto_mac_lte, p_mac_lte_info);
}
diff --git a/epan/dissectors/packet-mac-lte.c b/epan/dissectors/packet-mac-lte.c
index 2200cc218a..631edeb3c9 100644
--- a/epan/dissectors/packet-mac-lte.c
+++ b/epan/dissectors/packet-mac-lte.c
@@ -1066,23 +1066,26 @@ void dissect_mac_lte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
}
- ti = proto_tree_add_uint(mac_lte_tree, hf_mac_lte_context_crc_status,
- tvb, 0, 0, p_mac_lte_info->crcStatus);
- PROTO_ITEM_SET_GENERATED(ti);
- if (p_mac_lte_info->crcStatus != TRUE) {
- expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_ERROR,
- "Frame has CRC error");
- if (check_col(pinfo->cinfo, COL_INFO)) {
- col_append_fstr(pinfo->cinfo, COL_INFO, "<CRC FAILURE>");
+ if (p_mac_lte_info->crcStatusValid) {
+ ti = proto_tree_add_uint(mac_lte_tree, hf_mac_lte_context_crc_status,
+ tvb, 0, 0, p_mac_lte_info->crcStatus);
+ PROTO_ITEM_SET_GENERATED(ti);
+ if (p_mac_lte_info->crcStatus != TRUE) {
+ expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_ERROR,
+ "Frame has CRC error");
+ if (check_col(pinfo->cinfo, COL_INFO)) {
+ col_append_fstr(pinfo->cinfo, COL_INFO, "<CRC FAILURE>");
+ }
}
}
/* Set context-info parts of tap struct */
tap_info.rnti = p_mac_lte_info->rnti;
- tap_info.rnti_type = p_mac_lte_info->rntiType;
- tap_info.is_predefined_data = p_mac_lte_info->isPredefinedData;
+ tap_info.rntiType = p_mac_lte_info->rntiType;
+ tap_info.isPredefinedData = p_mac_lte_info->isPredefinedData;
tap_info.reTxCount = p_mac_lte_info->reTxCount;
+ tap_info.crcStatusValid = p_mac_lte_info->crcStatusValid;
tap_info.crcStatus = p_mac_lte_info->crcStatus;
tap_info.direction = p_mac_lte_info->direction;
diff --git a/epan/dissectors/packet-mac-lte.h b/epan/dissectors/packet-mac-lte.h
index 56df48b67f..21d807ee04 100644
--- a/epan/dissectors/packet-mac-lte.h
+++ b/epan/dissectors/packet-mac-lte.h
@@ -53,6 +53,7 @@ typedef struct mac_lte_info
guint8 isPredefinedData;
guint16 length;
guint8 reTxCount;
+ guint8 crcStatusValid;
guint8 crcStatus;
} mac_lte_info;
@@ -60,9 +61,10 @@ typedef struct mac_lte_info
typedef struct mac_lte_tap_info {
/* Info from context */
guint16 rnti;
- guint8 rnti_type;
- guint8 is_predefined_data;
+ guint8 rntiType;
+ guint8 isPredefinedData;
guint8 reTxCount;
+ guint8 crcStatusValid;
guint8 crcStatus;
guint8 direction;
diff --git a/gtk/mac_lte_stat_dlg.c b/gtk/mac_lte_stat_dlg.c
index 65e9121d2a..7ce31e2288 100644
--- a/gtk/mac_lte_stat_dlg.c
+++ b/gtk/mac_lte_stat_dlg.c
@@ -289,7 +289,7 @@ mac_lte_stat_packet(void *phs, packet_info *pinfo, epan_dissect_t *edt _U_,
hs->number_of_packets++;
/* For common channels, just update global counters */
- switch (si->rnti_type) {
+ switch (si->rntiType) {
case P_RNTI:
common_stats.pch_frames++;
common_stats.pch_bytes += si->single_number_of_bytes;
@@ -336,8 +336,8 @@ mac_lte_stat_packet(void *phs, packet_info *pinfo, epan_dissect_t *edt _U_,
/* Update entry with details from si */
te->number_of_packets++;
te->stats.rnti = si->rnti;
- te->stats.is_predefined_data = si->is_predefined_data;
- if (!si->crcStatus) {
+ te->stats.is_predefined_data = si->isPredefinedData;
+ if (si->crcStatusValid && !si->crcStatus) {
if (si->direction == DIRECTION_UPLINK) {
te->stats.UL_CRC_errors++;
return 1;
@@ -356,7 +356,7 @@ mac_lte_stat_packet(void *phs, packet_info *pinfo, epan_dissect_t *edt _U_,
}
te->stats.UL_frames++;
- if (si->is_predefined_data) {
+ if (si->isPredefinedData) {
te->stats.UL_total_bytes += si->single_number_of_bytes;
}
else {
@@ -379,7 +379,7 @@ mac_lte_stat_packet(void *phs, packet_info *pinfo, epan_dissect_t *edt _U_,
te->stats.DL_frames++;
- if (si->is_predefined_data) {
+ if (si->isPredefinedData) {
te->stats.DL_total_bytes += si->single_number_of_bytes;
}
else {