aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-gmr1_rr.c
diff options
context:
space:
mode:
authorIvan Nardi <nardi.ivan@gmail.com>2017-06-14 20:14:30 +0200
committerMichael Mann <mmann78@netscape.net>2017-06-15 11:48:11 +0000
commit1d657acf2d86173087c28cce9f33e11299815fd5 (patch)
tree637066077a8dbbc882adef3813d7472c3519ad8b /epan/dissectors/packet-gmr1_rr.c
parentb62346b3040fe4ee6cebb7e5a3f1894d9ab767cc (diff)
gsm-a, nas-eps: enhance handling of missing mandatory i.e.
When a mandatory information element is missing, try to report an expert info, instead of throwing a fatal malformed exception (or of reporting nothing at all). According to TS 24.007 11.2.3, a mandatory i.e. may be part of the imperative part of the message, so that expert info should be at PI_ERROR level Change-Id: Id399c236f2923db36540bbda0d29d666548f7cbd Reviewed-on: https://code.wireshark.org/review/22134 Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com> Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-gmr1_rr.c')
-rw-r--r--epan/dissectors/packet-gmr1_rr.c141
1 files changed, 76 insertions, 65 deletions
diff --git a/epan/dissectors/packet-gmr1_rr.c b/epan/dissectors/packet-gmr1_rr.c
index fd47e47586..c8cbb85cde 100644
--- a/epan/dissectors/packet-gmr1_rr.c
+++ b/epan/dissectors/packet-gmr1_rr.c
@@ -33,6 +33,7 @@
#include "config.h"
#include <epan/packet.h>
+#include <epan/expert.h>
#include "packet-gmr1_common.h"
@@ -50,6 +51,7 @@ static gint ett_msg_ccch = -1;
static gint ett_rr_pd = -1;
+static expert_field ei_gmr1_missing_mandatory_element = EI_INIT;
/* ------------------------------------------------------------------------ */
@@ -1227,54 +1229,54 @@ GMR1_MSG_FUNC(gmr1_rr_msg_imm_ass)
/* MES Information Flag [1] 11.5.2.44 - M V 1 */
mif = tvb_get_guint8(tvb, curr_offset);
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_MES_INFO_FLG, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_MES_INFO_FLG, NULL, ei_gmr1_missing_mandatory_element);
/* Request Reference 1 (MES1) [1] 11.5.2.30 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES1", ei_gmr1_missing_mandatory_element);
/* GPS Discriminator [1] 11.5.2.101 - C V 2 */
if ((mif & 0x03) != 0x02) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_DISCR, " - MES1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_DISCR, " - MES1", ei_gmr1_missing_mandatory_element);
}
/* Channel Description [1] 11.5.2.5 - C V 4 */
if ((mif & 0x03) != 0x03) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_DESC, " - MES1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_DESC, " - MES1", ei_gmr1_missing_mandatory_element);
}
/* Timing Offset [1] 11.5.2.40 - C V 2 */
if ((mif & 0x03) != 0x03) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TIMING_OFS, " - MES1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TIMING_OFS, " - MES1", ei_gmr1_missing_mandatory_element);
}
/* Frequency Offset [1] 11.5.2.49 - C V 2 */
if ((mif & 0x03) != 0x03) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_FREQ_OFS, " - MES1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_FREQ_OFS, " - MES1", ei_gmr1_missing_mandatory_element);
}
/* Idle Mode Pos. Upd. Info. [1] 11.5.2.54 - C V 2 */
if (mif & 0x04) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_POS_UPD_INFO, " - Idle Mode");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_POS_UPD_INFO, " - Idle Mode", ei_gmr1_missing_mandatory_element);
}
/* Ded. Mode Pos. Upd. Info. [1] 11.5.2.54 - C V 2 */
if (mif & 0x08) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_POS_UPD_INFO, " - Dedicated Mode");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_POS_UPD_INFO, " - Dedicated Mode", ei_gmr1_missing_mandatory_element);
}
/* Request Reference 2 (MES2) [1] 11.5.2.30 - C V 2 */
if (mif & 0x10) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES2");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES2", ei_gmr1_missing_mandatory_element);
}
/* Request Reference 3 (MES3) [1] 11.5.2.30 - C V 2 */
if (mif & 0x20) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES3");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES3", ei_gmr1_missing_mandatory_element);
}
/* Request Reference 4 (MES4) [1] 11.5.2.30 - C V 2 */
if (mif & 0x40) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES4");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES4", ei_gmr1_missing_mandatory_element);
}
/* IA Rest Octets [1] 11.5.2.16 - M V 0..18 */
@@ -1291,50 +1293,50 @@ GMR1_MSG_FUNC(gmr1_rr_msg_imm_ass_rej_1)
GMR1_MSG_FUNC_BEGIN
/* Request Reference 1 (MES1) [1] 11.5.2.30 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES1", ei_gmr1_missing_mandatory_element);
/* GPS Discriminator [1] 11.5.2.101 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_DISCR, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_DISCR, NULL, ei_gmr1_missing_mandatory_element);
/* Reject Cause [1] 11.5.2.56 - M V 1 */
rej_cause = tvb_get_guint8(tvb, curr_offset);
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REJECT_CAUSE, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REJECT_CAUSE, NULL, ei_gmr1_missing_mandatory_element);
/* Wait Indication 1 (MES1) [4] 10.5.2.43 - C V 1 */
if ((rej_cause & 0xfc) == 0x00) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_WAIT_IND, " - MES1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_WAIT_IND, " - MES1", ei_gmr1_missing_mandatory_element);
}
/* Request Reference 2 (MES2) [1] 11.5.2.30 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES2");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES2", ei_gmr1_missing_mandatory_element);
/* Wait Indication 2 (MES2) [4] 10.5.2.43 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_WAIT_IND, " - MES2");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_WAIT_IND, " - MES2", ei_gmr1_missing_mandatory_element);
/* Request Reference 3 (MES3) [1] 11.5.2.30 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES3");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES3", ei_gmr1_missing_mandatory_element);
/* Wait Indication 3 (MES3) [4] 10.5.2.43 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_WAIT_IND, " - MES3");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_WAIT_IND, " - MES3", ei_gmr1_missing_mandatory_element);
/* Request Reference 4 (MES4) [1] 11.5.2.30 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES4");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, " - MES4", ei_gmr1_missing_mandatory_element);
/* Wait Indication 4 (MES4) [4] 10.5.2.43 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_WAIT_IND, " - MES4");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_WAIT_IND, " - MES4", ei_gmr1_missing_mandatory_element);
/* Idle Mode Position Update Info. [1] 11.5.2.54 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_POS_UPD_INFO, " - Idle Mode");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_POS_UPD_INFO, " - Idle Mode", ei_gmr1_missing_mandatory_element);
/* BCCH Carrier Specification [1] 11.5.2.55 - C V 2 */
if (rej_cause & 1) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_BCCH_CARRIER, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_BCCH_CARRIER, NULL, ei_gmr1_missing_mandatory_element);
}
/* MSC ID [1] 11.5.2.100 - C V 1 */
if ((rej_cause & 0xfc) == 0x5c) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_MSC_ID, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_MSC_ID, NULL, ei_gmr1_missing_mandatory_element);
}
/* IAR Rest Octets [1] 11.5.2.17 - M V 1..4 */
@@ -1349,13 +1351,13 @@ GMR1_MSG_FUNC(gmr1_rr_msg_pos_verif_notify)
GMR1_MSG_FUNC_BEGIN
/* Request Reference [1] 11.5.2.30 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_REQ_REF, NULL, ei_gmr1_missing_mandatory_element);
/* GPS Discriminator [1] 11.5.2.101 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_DISCR, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_DISCR, NULL, ei_gmr1_missing_mandatory_element);
/* Position Display [1] 11.5.2.52 - M V 11 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_POS_DISPLAY, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_POS_DISPLAY, NULL, ei_gmr1_missing_mandatory_element);
/* 78 Idle Mode Position Update Info. [1] 11.5.2.54 - O TV 3 */
ELEM_OPT_TV(0x78, GMR1_IE_RR, GMR1_IE_RR_POS_UPD_INFO, NULL);
@@ -1372,28 +1374,28 @@ GMR1_MSG_FUNC(gmr1_rr_msg_imm_ass_2)
GMR1_MSG_FUNC_BEGIN
/* USF [3] 11.5.2.110 - M V 3 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_USF, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_USF, NULL, ei_gmr1_missing_mandatory_element);
/* Timing Advance Index [3] 10.1.18.3.4 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TIMING_ADV_IDX, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TIMING_ADV_IDX, NULL, ei_gmr1_missing_mandatory_element);
/* TLLI [5] 12.16 - M V 4 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TLLI, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TLLI, NULL, ei_gmr1_missing_mandatory_element);
/* Timing Offset [1] 11.5.2.40 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TIMING_OFS, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TIMING_OFS, NULL, ei_gmr1_missing_mandatory_element);
/* Frequency Offset [1] 11.5.2.49 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_FREQ_OFS, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_FREQ_OFS, NULL, ei_gmr1_missing_mandatory_element);
/* Packet Imm. Ass. Type 2 Params. [3] 11.5.2.107 - M V 5 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_IMM_ASS_2_PRM, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_IMM_ASS_2_PRM, NULL, ei_gmr1_missing_mandatory_element);
/* Packet Frequency Parameters [3] 11.5.2.106 - M V 3 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_FREQ_PRM, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_FREQ_PRM, NULL, ei_gmr1_missing_mandatory_element);
/* Packet Power Control Parameters [3] 10.1.18.3.3 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_PWR_CTRL_PRM, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_PWR_CTRL_PRM, NULL, ei_gmr1_missing_mandatory_element);
GMR1_MSG_FUNC_END
}
@@ -1406,25 +1408,25 @@ GMR1_MSG_FUNC(gmr1_rr_msg_imm_ass_3)
/* Page Mode [1] 11.5.2.26 - M V 1/2 */
/* Spare Half Octet [1] 11.5.1.8 - M V 1/2 */
ELEM_MAND_VV_SHORT(GMR1_IE_RR, GMR1_IE_RR_PAGE_MODE,
- GMR1_IE_COMMON, GMR1_IE_COM_SPARE_NIBBLE);
+ GMR1_IE_COMMON, GMR1_IE_COM_SPARE_NIBBLE, ei_gmr1_missing_mandatory_element);
/* Persistence Level [3] 10.1.18.4.2 - M V 2 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PERSISTENCE_LVL, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PERSISTENCE_LVL, NULL, ei_gmr1_missing_mandatory_element);
/* Timing Advance Index [3] 10.1.18.3.4 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TIMING_ADV_IDX, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TIMING_ADV_IDX, NULL, ei_gmr1_missing_mandatory_element);
/* TLLI [5] 12.16 - M V 4 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TLLI, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TLLI, NULL, ei_gmr1_missing_mandatory_element);
/* Packet Imm. Ass. Type 3 Params [3] 11.5.2.105 - M V 3 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_IMM_ASS_3_PRM, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_IMM_ASS_3_PRM, NULL, ei_gmr1_missing_mandatory_element);
/* Packet Frequency Parameters [3] 11.5.2.106 - M V 3 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_FREQ_PRM, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_FREQ_PRM, NULL, ei_gmr1_missing_mandatory_element);
/* Packet Power Control Parameters [3] 10.1.18.3.3 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_PWR_CTRL_PRM, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PKT_PWR_CTRL_PRM, NULL, ei_gmr1_missing_mandatory_element);
/* P1 Rest Octets [1] 11.5.2.23 - M V 6 */
/* FIXME */
@@ -1440,7 +1442,7 @@ GMR1_MSG_FUNC(gmr1_rr_msg_ciph_mode_cmd)
/* Cipher Mode Setting [4] 10.5.2.9 - M V 1/2 */
/* Cipher Response [4] 10.5.2.10 - M V 1/2 */
ELEM_MAND_VV_SHORT(GMR1_IE_RR, GMR1_IE_RR_CIPH_MODE_SETTING,
- GMR1_IE_RR, GMR1_IE_RR_CIPH_RESP);
+ GMR1_IE_RR, GMR1_IE_RR_CIPH_RESP, ei_gmr1_missing_mandatory_element);
/* 75 Position Display [1] 11.5.2.52 - O TV 12 */
ELEM_OPT_TV(0x75, GMR1_IE_RR, GMR1_IE_RR_POS_DISPLAY, NULL);
@@ -1468,7 +1470,7 @@ GMR1_MSG_FUNC(gmr1_rr_msg_ass_cmd_1)
GMR1_MSG_FUNC_BEGIN
/* Channel Description [1] 11.5.2.5 - M V 4 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_DESC, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_DESC, NULL, ei_gmr1_missing_mandatory_element);
/* 7D Timing Offset [1] 11.5.2.40 - O TV 3 */
ELEM_OPT_TV(0x7D, GMR1_IE_RR, GMR1_IE_RR_TIMING_OFS, NULL);
@@ -1494,7 +1496,7 @@ GMR1_MSG_FUNC(gmr1_rr_msg_chan_release)
GMR1_MSG_FUNC_BEGIN
/* RR Cause [1] 11.5.2.31 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CAUSE, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CAUSE, NULL, ei_gmr1_missing_mandatory_element);
GMR1_MSG_FUNC_END
}
@@ -1511,66 +1513,66 @@ GMR1_MSG_FUNC(gmr1_rr_msg_pag_req_3)
tam = (tvb_get_guint8(tvb, curr_offset) & 0xf0) >> 4;
ELEM_MAND_VV_SHORT(GMR1_IE_RR, GMR1_IE_RR_PAGE_MODE,
- GMR1_IE_RR, GMR1_IE_RR_TMSI_AVAIL_MSK);
+ GMR1_IE_RR, GMR1_IE_RR_TMSI_AVAIL_MSK, ei_gmr1_missing_mandatory_element);
/* Mobile Identity 1 (TMSI) [4] 10.5.2.42 - C V 4 */
if (tam & 0x01) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TMSI_PTMSI, " - 1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TMSI_PTMSI, " - 1", ei_gmr1_missing_mandatory_element);
}
/* GPS Almanac Data 1 [1] 11.5.2.63 - C V 5 */
if (!(tam & 0x01)) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_ALMANAC, " - 1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_ALMANAC, " - 1", ei_gmr1_missing_mandatory_element);
}
/* Mobile Identity 2 (TMSI) [4] 10.5.2.42 - C V 4 */
if (tam & 0x02) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TMSI_PTMSI, " - 2");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TMSI_PTMSI, " - 2", ei_gmr1_missing_mandatory_element);
}
/* GPS Almanac Data 2 [1] 11.5.2.63 - C V 5 */
if (!(tam & 0x02)) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_ALMANAC, " - 2");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_ALMANAC, " - 2", ei_gmr1_missing_mandatory_element);
}
/* Mobile Identity 3 (TMSI) [4] 10.5.2.42 - C V 4 */
if (tam & 0x04) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TMSI_PTMSI, " - 3");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TMSI_PTMSI, " - 3", ei_gmr1_missing_mandatory_element);
}
/* GPS Almanac Data 3 [1] 11.5.2.63 - C V 5 */
if (!(tam & 0x04)) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_ALMANAC, " - 3");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_ALMANAC, " - 3", ei_gmr1_missing_mandatory_element);
}
/* Mobile Identity 4 (TMSI) [4] 10.5.2.42 - C V 4 */
if (tam & 0x08) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TMSI_PTMSI, " - 4");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_TMSI_PTMSI, " - 4", ei_gmr1_missing_mandatory_element);
}
/* GPS Almanac Data 4 [1] 11.5.2.63 - C V 5 */
if (!(tam & 0x08)) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_ALMANAC, " - 4");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_GPS_ALMANAC, " - 4", ei_gmr1_missing_mandatory_element);
}
/* Paging Information 1 [1] 11.5.2.51 - C V 1 */
if (tam & 0x01) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PAGE_INFO, " - 1");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PAGE_INFO, " - 1", ei_gmr1_missing_mandatory_element);
}
/* Paging Information 2 [1] 11.5.2.51 - C V 1 */
if (tam & 0x02) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PAGE_INFO, " - 2");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PAGE_INFO, " - 2", ei_gmr1_missing_mandatory_element);
}
/* Paging Information 3 [1] 11.5.2.51 - C V 1 */
if (tam & 0x04) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PAGE_INFO, " - 3");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PAGE_INFO, " - 3", ei_gmr1_missing_mandatory_element);
}
/* Paging Information 4 [1] 11.5.2.51 - C V 1 */
if (tam & 0x08) {
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PAGE_INFO, " - 4");
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_PAGE_INFO, " - 4", ei_gmr1_missing_mandatory_element);
}
GMR1_MSG_FUNC_END
@@ -1584,13 +1586,13 @@ GMR1_MSG_FUNC(gmr1_rr_msg_pag_resp)
/* Ciphering Key Sequence Number [4] 10.5.1.2 - M V 1/2 */
/* Spare Half Octet [1] 11.5.1.8 - M V 1/2 */
ELEM_MAND_VV_SHORT(GSM_A_PDU_TYPE_COMMON, DE_CIPH_KEY_SEQ_NUM,
- GMR1_IE_COMMON, GMR1_IE_COM_SPARE_NIBBLE);
+ GMR1_IE_COMMON, GMR1_IE_COM_SPARE_NIBBLE, ei_gmr1_missing_mandatory_element);
/* Mobile Earth Station Classmark 2 [1] 11.5.1.6 - M L V 4 */
- ELEM_MAND_LV(GMR1_IE_COMMON, GMR1_IE_COM_CM2, NULL);
+ ELEM_MAND_LV(GMR1_IE_COMMON, GMR1_IE_COM_CM2, NULL, ei_gmr1_missing_mandatory_element);
/* Mobile Identity [4] 10.5.1.4 - M L V 2-9 */
- ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL);
+ ELEM_MAND_LV(GSM_A_PDU_TYPE_COMMON, DE_MID, NULL, ei_gmr1_missing_mandatory_element);
GMR1_MSG_FUNC_END
}
@@ -1601,10 +1603,10 @@ GMR1_MSG_FUNC(gmr1_rr_msg_chan_mode_modify)
GMR1_MSG_FUNC_BEGIN
/* Channel Description [1] 11.5.2.5 - M V 4 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_DESC, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_DESC, NULL, ei_gmr1_missing_mandatory_element);
/* Channel Mode [1] 11.5.2.6 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_MODE, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_MODE, NULL, ei_gmr1_missing_mandatory_element);
GMR1_MSG_FUNC_END
}
@@ -1615,10 +1617,10 @@ GMR1_MSG_FUNC(gmr1_rr_msg_chan_mode_mod_ack)
GMR1_MSG_FUNC_BEGIN
/* Channel Description [1] 11.5.2.5 - M V 4 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_DESC, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_DESC, NULL, ei_gmr1_missing_mandatory_element);
/* Channel Mode [1] 11.5.2.6 - M V 1 */
- ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_MODE, NULL);
+ ELEM_MAND_V(GMR1_IE_RR, GMR1_IE_RR_CHAN_MODE, NULL, ei_gmr1_missing_mandatory_element);
GMR1_MSG_FUNC_END
}
@@ -2419,6 +2421,12 @@ proto_register_gmr1_rr(void)
},
};
+ static ei_register_info ei[] = {
+ { &ei_gmr1_missing_mandatory_element, { "gmr1.rr.missing_mandatory_element", PI_PROTOCOL, PI_ERROR, "Missing Mandatory element, rest of dissection is suspect", EXPFILL }},
+ };
+
+ expert_module_t* expert_gmr1_rr;
+
#define NUM_INDIVIDUAL_ELEMS 2
static gint *ett[NUM_INDIVIDUAL_ELEMS +
NUM_GMR1_IE_RR +
@@ -2449,6 +2457,9 @@ proto_register_gmr1_rr(void)
proto_register_field_array(proto_gmr1_rr, hf, array_length(hf));
+ expert_gmr1_rr = expert_register_protocol(proto_gmr1_rr);
+ expert_register_field_array(expert_gmr1_rr, ei, array_length(ei));
+
/* Register the protocol name and field description */
proto_gmr1_ccch = proto_register_protocol("GEO-Mobile Radio (1) CCCH", "GMR-1 CCCH", "gmr1.ccch");