aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-mac-lte.c
diff options
context:
space:
mode:
authorMathias Kurth <mathias.kurth@commsolid.com>2017-04-10 10:45:08 +0200
committerPascal Quantin <pascal.quantin@gmail.com>2017-04-11 12:33:37 +0000
commit90c2e34cbd988179187422b48f8d9f28e4f0e9ed (patch)
treefebc69111191a831b3c6291b4160d9ccabac680e /epan/dissectors/packet-mac-lte.c
parent87fc4cc5d7d7838d9fb708ca0c00166014d4ace8 (diff)
NB-IoT SRB1bis implementation
Change-Id: If0c9dd3f3ca2321aaf9176330299a32f611d34ce Reviewed-on: https://code.wireshark.org/review/20990 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-mac-lte.c')
-rw-r--r--epan/dissectors/packet-mac-lte.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/epan/dissectors/packet-mac-lte.c b/epan/dissectors/packet-mac-lte.c
index a65ce97ace..f6339e302e 100644
--- a/epan/dissectors/packet-mac-lte.c
+++ b/epan/dissectors/packet-mac-lte.c
@@ -3371,7 +3371,7 @@ static void call_rlc_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
guint8 mode, guint8 direction, guint16 ueid,
guint16 channelType, guint16 channelId,
guint8 sequenceNumberLength,
- guint8 priority, gboolean rlcExtLiField)
+ guint8 priority, gboolean rlcExtLiField, mac_lte_nb_mode nbMode)
{
tvbuff_t *rb_tvb = tvb_new_subset_length(tvb, offset, data_length);
struct rlc_lte_info *p_rlc_lte_info;
@@ -3392,6 +3392,11 @@ static void call_rlc_dissector(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
p_rlc_lte_info->pduLength = data_length;
p_rlc_lte_info->sequenceNumberLength = sequenceNumberLength;
p_rlc_lte_info->extendedLiField = rlcExtLiField;
+ if (nbMode == nb_mode) {
+ p_rlc_lte_info->nbMode = rlc_nb_mode;
+ } else {
+ p_rlc_lte_info->nbMode = rlc_no_nb_mode;
+ }
/* Store info in packet */
p_add_proto_data(wmem_file_scope(), pinfo, proto_rlc_lte, 0, p_rlc_lte_info);
@@ -5694,7 +5699,9 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
}
/* LCID 1 and 2 can be assumed to be srb1&2, so can dissect as RLC AM */
- else if ((lcids[n] == 1) || (lcids[n] == 2)) {
+ /* LCID 3 in NB mode can be assumed to be srb1bis, so can dissect as RLC AM */
+ else if ((lcids[n] == 1) || (lcids[n] == 2) ||
+ (p_mac_lte_info->nbMode == nb_mode && lcids[n] == 3)) {
if (global_mac_lte_attempt_srb_decode) {
/* Call RLC dissector */
call_rlc_dissector(tvb, pinfo, tree, pdu_ti, offset, data_length,
@@ -5702,7 +5709,7 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
CHANNEL_TYPE_SRB, lcids[n], 0,
get_mac_lte_channel_priority(p_mac_lte_info->ueid,
lcids[n], p_mac_lte_info->direction),
- FALSE);
+ FALSE, p_mac_lte_info->nbMode);
/* Hide raw view of bytes */
PROTO_ITEM_SET_HIDDEN(sdu_ti);
@@ -5735,7 +5742,7 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
call_rlc_dissector(tvb, pinfo, tree, pdu_ti, offset, data_length,
RLC_UM_MODE, p_mac_lte_info->direction, p_mac_lte_info->ueid,
CHANNEL_TYPE_DRB, (guint16)drb_id, seqnum_length,
- priority, FALSE);
+ priority, FALSE, p_mac_lte_info->nbMode);
break;
case rlcAM:
case rlcAMulExtLiField:
@@ -5756,13 +5763,13 @@ static void dissect_ulsch_or_dlsch(tvbuff_t *tvb, packet_info *pinfo, proto_tree
call_rlc_dissector(tvb, pinfo, tree, pdu_ti, offset, data_length,
RLC_AM_MODE, p_mac_lte_info->direction, p_mac_lte_info->ueid,
CHANNEL_TYPE_DRB, (guint16)drb_id, seqnum_length,
- priority, rlc_ext_li_field);
+ priority, rlc_ext_li_field, p_mac_lte_info->nbMode);
break;
case rlcTM:
call_rlc_dissector(tvb, pinfo, tree, pdu_ti, offset, data_length,
RLC_TM_MODE, p_mac_lte_info->direction, p_mac_lte_info->ueid,
CHANNEL_TYPE_DRB, (guint16)drb_id, 0,
- priority, FALSE);
+ priority, FALSE, p_mac_lte_info->nbMode);
break;
case rlcRaw:
/* Nothing to do! */
@@ -6219,12 +6226,12 @@ static void dissect_mch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, pro
/* Call RLC dissector */
call_rlc_dissector(tvb, pinfo, tree, pdu_ti, offset, data_length,
RLC_UM_MODE, DIRECTION_DOWNLINK, 0,
- CHANNEL_TYPE_MCCH, 0, 5, 0, FALSE);
+ CHANNEL_TYPE_MCCH, 0, 5, 0, FALSE, p_mac_lte_info->nbMode);
} else if ((lcids[n] <= 28) && global_mac_lte_call_rlc_for_mtch) {
/* Call RLC dissector */
call_rlc_dissector(tvb, pinfo, tree, pdu_ti, offset, data_length,
RLC_UM_MODE, DIRECTION_DOWNLINK, 0,
- CHANNEL_TYPE_MTCH, 0, 5, 0, FALSE);
+ CHANNEL_TYPE_MTCH, 0, 5, 0, FALSE, p_mac_lte_info->nbMode);
} else {
/* Dissect SDU as raw bytes */
sdu_ti = proto_tree_add_bytes_format(tree, hf_mac_lte_mch_sdu, tvb, offset, pdu_lengths[n],