aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgrahamb <grahamb@f5534014-38df-0310-8fa8-9805f1628bb7>2011-12-09 12:42:31 +0000
committergrahamb <grahamb@f5534014-38df-0310-8fa8-9805f1628bb7>2011-12-09 12:42:31 +0000
commite875cc8573667607fcc756e254e02eb27cc0d22d (patch)
tree7f7aa80871aea52bb733c781c61df56874c178e2
parent55df38fa9893a0d1a5d26ecb569524b43dea6c8a (diff)
Added definition and handling for IIN Function Code Not Implemented bit.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@40127 f5534014-38df-0310-8fa8-9805f1628bb7
-rw-r--r--epan/dissectors/packet-dnp.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/epan/dissectors/packet-dnp.c b/epan/dissectors/packet-dnp.c
index c3be0cae54..051eb3d603 100644
--- a/epan/dissectors/packet-dnp.c
+++ b/epan/dissectors/packet-dnp.c
@@ -183,7 +183,7 @@
#define AL_IIN_RST 0x8000 /* Bit 7 - Device Restart */
/* Octet 2 */
- /* 0x0001 Bit 0 - Reserved */
+#define AL_IIN_FCNI 0x0001 /* Bit 0 - Function code not implemented */
#define AL_IIN_OBJU 0x0002 /* Bit 1 - Requested Objects Unknown */
#define AL_IIN_PIOOR 0x0004 /* Bit 2 - Parameters Invalid or Out of Range */
#define AL_IIN_EBO 0x0008 /* Bit 3 - Event Buffer Overflow */
@@ -531,6 +531,7 @@ static int hf_dnp3_al_iin_tsr = -1;
static int hf_dnp3_al_iin_dol = -1;
static int hf_dnp3_al_iin_dt = -1;
static int hf_dnp3_al_iin_rst = -1;
+static int hf_dnp3_al_iin_fcni = -1;
static int hf_dnp3_al_iin_obju = -1;
static int hf_dnp3_al_iin_pioor = -1;
static int hf_dnp3_al_iin_ebo = -1;
@@ -732,6 +733,7 @@ static const value_string dnp3_al_iin_vals[] _U_ = {
{ AL_IIN_DOL, "Digital Outputs in Local Mode" },
{ AL_IIN_DT, "Device Trouble" },
{ AL_IIN_RST, "Device Restart" },
+ { AL_IIN_FCNI, "Function Code not implemented" },
{ AL_IIN_OBJU, "Requested Objects Unknown" },
{ AL_IIN_PIOOR, "Parameters Invalid or Out of Range" },
{ AL_IIN_EBO, "Event Buffer Overflow" },
@@ -1234,6 +1236,7 @@ dnp3_al_process_iin(tvbuff_t *tvb, int offset, proto_tree *al_tree)
if (al_iin & AL_IIN_EBO) comma_needed = add_item_text(tiin, "Event Buffer Overflow", comma_needed);
if (al_iin & AL_IIN_PIOOR) comma_needed = add_item_text(tiin, "Parameters Invalid or Out of Range", comma_needed);
if (al_iin & AL_IIN_OBJU) comma_needed = add_item_text(tiin, "Requested Objects Unknown", comma_needed);
+ if (al_iin & AL_IIN_FCNI) comma_needed = add_item_text(tiin, "Function code not implemented", comma_needed);
proto_item_append_text(tiin, " (0x%04x)", al_iin);
iin_tree = proto_item_add_subtree(tiin, ett_dnp3_al_iin);
@@ -1250,6 +1253,7 @@ dnp3_al_process_iin(tvbuff_t *tvb, int offset, proto_tree *al_tree)
proto_tree_add_item(iin_tree, hf_dnp3_al_iin_ebo, tvb, offset, 2, ENC_BIG_ENDIAN);
proto_tree_add_item(iin_tree, hf_dnp3_al_iin_pioor, tvb, offset, 2, ENC_BIG_ENDIAN);
proto_tree_add_item(iin_tree, hf_dnp3_al_iin_obju, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(iin_tree, hf_dnp3_al_iin_fcni, tvb, offset, 2, ENC_BIG_ENDIAN);
}
/*****************************************************************/
@@ -2708,25 +2712,25 @@ dissect_dnp3_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
/* Set up structures needed to add the protocol subtree and manage it */
- proto_item *ti = NULL, *tdl, *tc, *al_chunks, *hidden_item;
- proto_tree *dnp3_tree = NULL, *dl_tree = NULL, *tr_tree = NULL, *field_tree = NULL, *al_tree = NULL;
- int offset = 0, temp_offset = 0;
- gboolean dl_prm, tr_fir, tr_fin;
- guint8 dl_len, dl_ctl, dl_func, tr_ctl, tr_seq;
- const gchar *func_code_str;
- guint16 dl_dst, dl_src, dl_crc, calc_dl_crc;
- guint8 *tmp = NULL, *tmp_ptr;
- guint8 data_len;
- int data_offset;
- gboolean crc_OK = FALSE;
- tvbuff_t *al_tvb = NULL, *next_tvb;
- guint i;
- guint conv_seq_number;
- gboolean save_fragmented;
- fragment_data *frag_msg;
- gboolean update_col_info = TRUE;
- conversation_t *conversation;
- dnp3_conv_t *conv_data_ptr;
+ proto_item *ti = NULL, *tdl, *tc, *al_chunks, *hidden_item;
+ proto_tree *dnp3_tree = NULL, *dl_tree = NULL, *tr_tree = NULL, *field_tree = NULL, *al_tree = NULL;
+ int offset = 0, temp_offset = 0;
+ gboolean dl_prm, tr_fir, tr_fin;
+ guint8 dl_len, dl_ctl, dl_func, tr_ctl, tr_seq;
+ const gchar *func_code_str;
+ guint16 dl_dst, dl_src, dl_crc, calc_dl_crc;
+ guint8 *tmp = NULL, *tmp_ptr;
+ guint8 data_len;
+ int data_offset;
+ gboolean crc_OK = FALSE;
+ tvbuff_t *al_tvb = NULL, *next_tvb;
+ guint i;
+ guint conv_seq_number;
+ gboolean save_fragmented;
+ fragment_data *frag_msg;
+ gboolean update_col_info = TRUE;
+ conversation_t *conversation;
+ dnp3_conv_t *conv_data_ptr;
dl_conversation_key_t dl_conversation_key;
@@ -3187,6 +3191,9 @@ proto_register_dnp3(void)
{ &hf_dnp3_al_iin_rst,
{ "Device Restart", "dnp3.al.iin.rst", FT_BOOLEAN, 16, TFS(&tfs_set_notset), AL_IIN_RST, NULL, HFILL }},
+ { &hf_dnp3_al_iin_fcni,
+ { "Function Code not implemented", "dnp3.al.iin.fcni", FT_BOOLEAN, 16, TFS(&tfs_set_notset), AL_IIN_FCNI, NULL, HFILL }},
+
{ &hf_dnp3_al_iin_obju,
{ "Requested Objects Unknown", "dnp3.al.iin.obju", FT_BOOLEAN, 16, TFS(&tfs_set_notset), AL_IIN_OBJU, NULL, HFILL }},