aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-osi-options.c
diff options
context:
space:
mode:
authorChris Maynard <Christopher.Maynard@GTECH.COM>2013-08-20 18:30:46 +0000
committerChris Maynard <Christopher.Maynard@GTECH.COM>2013-08-20 18:30:46 +0000
commite37aa2ab5b58eea11c8721cbe58bbafcbbb83c0d (patch)
tree03ad2b2c4976211edd2026486ef715e16645edd6 /epan/dissectors/packet-osi-options.c
parente7242f0f3e01368505166aa76beda9b4d766d0da (diff)
Fix clang warning: Value stored to 'netl' is never read.
Other misc. whitespace changes. svn path=/trunk/; revision=51440
Diffstat (limited to 'epan/dissectors/packet-osi-options.c')
-rw-r--r--epan/dissectors/packet-osi-options.c863
1 files changed, 436 insertions, 427 deletions
diff --git a/epan/dissectors/packet-osi-options.c b/epan/dissectors/packet-osi-options.c
index 9792897f3d..499156bacf 100644
--- a/epan/dissectors/packet-osi-options.c
+++ b/epan/dissectors/packet-osi-options.c
@@ -43,87 +43,87 @@
/* ATN traffic types (ICAO doc 9705 Edition3 SV5 5.6.2.2.6.7.3) */
-#define ATN_TT_ATSC_NO_PREFERENCE 0x01
-#define ATN_TT_ATSC_CLASS_A 0x10
-#define ATN_TT_ATSC_CLASS_B 0x11
-#define ATN_TT_ATSC_CLASS_C 0x12
-#define ATN_TT_ATSC_CLASS_D 0x13
-#define ATN_TT_ATSC_CLASS_E 0x14
-#define ATN_TT_ATSC_CLASS_F 0x15
-#define ATN_TT_ATSC_CLASS_G 0x16
-#define ATN_TT_ATSC_CLASS_H 0x17
-#define ATN_TT_AOC_NO_PREFERENCE 0x21
-#define ATN_TT_AOC_G 0x22
-#define ATN_TT_AOC_V 0x23
-#define ATN_TT_AOC_S 0x24
-#define ATN_TT_AOC_H 0x25
-#define ATN_TT_AOC_M 0x26
-#define ATN_TT_AOC_G_V 0x27
-#define ATN_TT_AOC_G_V_S 0x28
-#define ATN_TT_AOC_G_V_H_S 0x29
-#define ATN_TT_ADM_NO_PREFERENCE 0x30
-#define ATN_TT_SYS_MGMT_NO_PREFERENCE 0x60
+#define ATN_TT_ATSC_NO_PREFERENCE 0x01
+#define ATN_TT_ATSC_CLASS_A 0x10
+#define ATN_TT_ATSC_CLASS_B 0x11
+#define ATN_TT_ATSC_CLASS_C 0x12
+#define ATN_TT_ATSC_CLASS_D 0x13
+#define ATN_TT_ATSC_CLASS_E 0x14
+#define ATN_TT_ATSC_CLASS_F 0x15
+#define ATN_TT_ATSC_CLASS_G 0x16
+#define ATN_TT_ATSC_CLASS_H 0x17
+#define ATN_TT_AOC_NO_PREFERENCE 0x21
+#define ATN_TT_AOC_G 0x22
+#define ATN_TT_AOC_V 0x23
+#define ATN_TT_AOC_S 0x24
+#define ATN_TT_AOC_H 0x25
+#define ATN_TT_AOC_M 0x26
+#define ATN_TT_AOC_G_V 0x27
+#define ATN_TT_AOC_G_V_S 0x28
+#define ATN_TT_AOC_G_V_H_S 0x29
+#define ATN_TT_ADM_NO_PREFERENCE 0x30
+#define ATN_TT_SYS_MGMT_NO_PREFERENCE 0x60
/* ATN security classification (ICAO doc 9705 Edition3 SV5 5.6.2.2.6.8.3) */
-#define ATN_SC_UNCLASSIFIED 0x01
-#define ATN_SC_RESTRICTED 0x02
-#define ATN_SC_CONFIDENTIAL 0x03
-#define ATN_SC_SECRET 0x04
-#define ATN_SC_TOP_SECRET 0x05
+#define ATN_SC_UNCLASSIFIED 0x01
+#define ATN_SC_RESTRICTED 0x02
+#define ATN_SC_CONFIDENTIAL 0x03
+#define ATN_SC_SECRET 0x04
+#define ATN_SC_TOP_SECRET 0x05
/* ATN security label records */
-#define OSI_OPT_SECURITY_ATN_SR 0xc0
-#define OSI_OPT_SECURITY_ATN_TT 0x0f
-#define OSI_OPT_SECURITY_ATN_SC 0x03
-#define OSI_OPT_SECURITY_ATN_SR_LEN 6
-#define OSI_OPT_SECURITY_ATN_TT_LEN 1
-#define OSI_OPT_SECURITY_ATN_SC_LEN 1
+#define OSI_OPT_SECURITY_ATN_SR 0xc0
+#define OSI_OPT_SECURITY_ATN_TT 0x0f
+#define OSI_OPT_SECURITY_ATN_SC 0x03
+#define OSI_OPT_SECURITY_ATN_SR_LEN 6
+#define OSI_OPT_SECURITY_ATN_TT_LEN 1
+#define OSI_OPT_SECURITY_ATN_SC_LEN 1
#define OSI_OPT_SECURITY_ATN_SI_MAX_LEN 8
-#define OSI_OPT_SECURITY 0xc5
-#define OSI_OPT_QOS_MAINTANANCE 0xc3
-#define OSI_OPT_PRIORITY 0xcd
-#define OSI_OPT_ADDRESS_MASK 0xe1
-#define OSI_OPT_SNPA_MASK 0xe2
-#define OSI_OPT_ES_CONFIG_TIMER 0xc6
-
-#define OSI_OPT_MAX_PRIORITY 0x0e
-
-#define OSI_OPT_PADDING 0xcc
-#define OSI_OPT_SOURCE_ROUTING 0xc8
-#define OSI_OPT_RECORD_OF_ROUTE 0xcb
-#define OSI_OPT_REASON_OF_DISCARD 0xc1
-
-#define OSI_OPT_SEC_MASK 0xc0
-#define OSI_OPT_SEC_RESERVED 0x00
-#define OSI_OPT_SEC_SRC_ADR_SPEC 0x40
-#define OSI_OPT_SEC_DST_ADR_SPEC 0x80
-#define OSI_OPT_SEC_GLOBAL_UNIQUE 0xc0
-
-#define OSI_OPT_QOS_MASK 0xc0
-#define OSI_OPT_QOS_RESERVED 0x00
-#define OSI_OPT_QOS_SRC_ADR_SPEC 0x40
-#define OSI_OPT_QOS_DST_ADR_SPEC 0x80
-#define OSI_OPT_QOS_GLOBAL_UNIQUE 0xc0
-
-#define OSI_OPT_QOS_SUB_MASK 0x3f
-#define OSI_OPT_QOS_SUB_RSVD 0x20
-#define OSI_OPT_QOS_SUB_SEQ_VS_TRS 0x10
-#define OSI_OPT_QOS_SUB_CONG_EXPED 0x08
-#define OSI_OPT_QOS_SUB_TSD_VS_COST 0x04
-#define OSI_OPT_QOS_SUB_RESERR_TRS 0x02
-#define OSI_OPT_QOS_SUB_RESERR_COST 0x01
-
-#define OSI_OPT_RFD_GENERAL 0x00
-#define OSI_OPT_RFD_ADDRESS 0x80
-#define OSI_OPT_RFD_SOURCE_ROUTING 0x90
-#define OSI_OPT_RFD_LIFETIME 0xa0
-#define OSI_OPT_RFD_PDU_DISCARDED 0xb0
-#define OSI_OPT_RFD_REASSEMBLY 0xc0
-
-#define OSI_OPT_RFD_MASK 0xf0
-#define OSI_OPT_RFD_SUB_MASK 0x0f
+#define OSI_OPT_SECURITY 0xc5
+#define OSI_OPT_QOS_MAINTANANCE 0xc3
+#define OSI_OPT_PRIORITY 0xcd
+#define OSI_OPT_ADDRESS_MASK 0xe1
+#define OSI_OPT_SNPA_MASK 0xe2
+#define OSI_OPT_ES_CONFIG_TIMER 0xc6
+
+#define OSI_OPT_MAX_PRIORITY 0x0e
+
+#define OSI_OPT_PADDING 0xcc
+#define OSI_OPT_SOURCE_ROUTING 0xc8
+#define OSI_OPT_RECORD_OF_ROUTE 0xcb
+#define OSI_OPT_REASON_OF_DISCARD 0xc1
+
+#define OSI_OPT_SEC_MASK 0xc0
+#define OSI_OPT_SEC_RESERVED 0x00
+#define OSI_OPT_SEC_SRC_ADR_SPEC 0x40
+#define OSI_OPT_SEC_DST_ADR_SPEC 0x80
+#define OSI_OPT_SEC_GLOBAL_UNIQUE 0xc0
+
+#define OSI_OPT_QOS_MASK 0xc0
+#define OSI_OPT_QOS_RESERVED 0x00
+#define OSI_OPT_QOS_SRC_ADR_SPEC 0x40
+#define OSI_OPT_QOS_DST_ADR_SPEC 0x80
+#define OSI_OPT_QOS_GLOBAL_UNIQUE 0xc0
+
+#define OSI_OPT_QOS_SUB_MASK 0x3f
+#define OSI_OPT_QOS_SUB_RSVD 0x20
+#define OSI_OPT_QOS_SUB_SEQ_VS_TRS 0x10
+#define OSI_OPT_QOS_SUB_CONG_EXPED 0x08
+#define OSI_OPT_QOS_SUB_TSD_VS_COST 0x04
+#define OSI_OPT_QOS_SUB_RESERR_TRS 0x02
+#define OSI_OPT_QOS_SUB_RESERR_COST 0x01
+
+#define OSI_OPT_RFD_GENERAL 0x00
+#define OSI_OPT_RFD_ADDRESS 0x80
+#define OSI_OPT_RFD_SOURCE_ROUTING 0x90
+#define OSI_OPT_RFD_LIFETIME 0xa0
+#define OSI_OPT_RFD_PDU_DISCARDED 0xb0
+#define OSI_OPT_RFD_REASSEMBLY 0xc0
+
+#define OSI_OPT_RFD_MASK 0xf0
+#define OSI_OPT_RFD_SUB_MASK 0x0f
extern gboolean clnp_decode_atn_options; /* as defined in packet-clnp.c */
extern int hf_clnp_atntt; /* as defined in packet-clnp.c */
@@ -133,168 +133,178 @@ static gint ott_osi_options = -1;
static gint ott_osi_qos = -1;
static gint ott_osi_route = -1;
static gint ott_osi_redirect = -1;
-static const guchar atn_security_registration_val[] = { 0x06, 0x04, 0x2b, 0x1b, 0x00, 0x00 }; /* =iso(1).org(3).ICAO(27).ATN(0).TrafficType(0)*/
+static const guchar atn_security_registration_val[] = {
+ 0x06, 0x04, 0x2b, 0x1b, 0x00, 0x00
+}; /* =iso(1).org(3).ICAO(27).ATN(0).TrafficType(0)*/
static const value_string osi_opt_sec_atn_sr_vals[] = {
- { OSI_OPT_SECURITY_ATN_SR, "ATN Security Label"},
- { 0, NULL} };
+ {OSI_OPT_SECURITY_ATN_SR, "ATN Security Label"},
+ {0, NULL}
+};
static const value_string osi_opt_sec_atn_si_vals[] = {
- { OSI_OPT_SECURITY_ATN_TT, "Traffic Type and Routing"},
- { OSI_OPT_SECURITY_ATN_SC, "Security classification"},
- { 0, NULL} };
+ {OSI_OPT_SECURITY_ATN_TT, "Traffic Type and Routing"},
+ {OSI_OPT_SECURITY_ATN_SC, "Security classification"},
+ {0, NULL}
+};
static const value_string osi_opt_sec_atn_tt_vals[] = {
- { ATN_TT_ATSC_NO_PREFERENCE, "ATSC No preference"},
- { ATN_TT_ATSC_CLASS_A, "ATSC Class A"},
- { ATN_TT_ATSC_CLASS_B, "ATSC Class B"},
- { ATN_TT_ATSC_CLASS_C, "ATSC Class C"},
- { ATN_TT_ATSC_CLASS_D, "ATSC Class D"},
- { ATN_TT_ATSC_CLASS_E, "ATSC Class E"},
- { ATN_TT_ATSC_CLASS_F, "ATSC Class F"},
- { ATN_TT_ATSC_CLASS_G, "ATSC Class G"},
- { ATN_TT_ATSC_CLASS_H, "ATSC Class H"},
- { ATN_TT_AOC_NO_PREFERENCE, "AOC No preference"},
- { ATN_TT_AOC_G, "AOC Gatelink only"},
- { ATN_TT_AOC_V, "AOC VHF only"},
- { ATN_TT_AOC_S, "AOC Satellite only"},
- { ATN_TT_AOC_H, "AOC HF only"},
- { ATN_TT_AOC_M, "AOC Mode S only"},
- { ATN_TT_AOC_G_V, "AOC Gatelink first, then VHF"},
- { ATN_TT_AOC_G_V_S, "AOC Gatelink first, then VHF, then Satellite"},
- { ATN_TT_AOC_G_V_H_S, "AOC Gatelink first, then VHF, then HF, then Satellite"},
- { ATN_TT_ADM_NO_PREFERENCE, "ATN Administrative No preference"},
- { ATN_TT_SYS_MGMT_NO_PREFERENCE,"ATN Systems Management No preference"},
- { 0, NULL} };
+ {ATN_TT_ATSC_NO_PREFERENCE, "ATSC No preference"},
+ {ATN_TT_ATSC_CLASS_A, "ATSC Class A"},
+ {ATN_TT_ATSC_CLASS_B, "ATSC Class B"},
+ {ATN_TT_ATSC_CLASS_C, "ATSC Class C"},
+ {ATN_TT_ATSC_CLASS_D, "ATSC Class D"},
+ {ATN_TT_ATSC_CLASS_E, "ATSC Class E"},
+ {ATN_TT_ATSC_CLASS_F, "ATSC Class F"},
+ {ATN_TT_ATSC_CLASS_G, "ATSC Class G"},
+ {ATN_TT_ATSC_CLASS_H, "ATSC Class H"},
+ {ATN_TT_AOC_NO_PREFERENCE, "AOC No preference"},
+ {ATN_TT_AOC_G, "AOC Gatelink only"},
+ {ATN_TT_AOC_V, "AOC VHF only"},
+ {ATN_TT_AOC_S, "AOC Satellite only"},
+ {ATN_TT_AOC_H, "AOC HF only"},
+ {ATN_TT_AOC_M, "AOC Mode S only"},
+ {ATN_TT_AOC_G_V, "AOC Gatelink first, then VHF"},
+ {ATN_TT_AOC_G_V_S, "AOC Gatelink first, then VHF, then Satellite"},
+ {ATN_TT_AOC_G_V_H_S, "AOC Gatelink first, then VHF, then HF, then Satellite"},
+ {ATN_TT_ADM_NO_PREFERENCE, "ATN Administrative No preference"},
+ {ATN_TT_SYS_MGMT_NO_PREFERENCE, "ATN Systems Management No preference"},
+ {0, NULL}
+};
static const value_string osi_opt_sec_atn_sc_vals[] = {
- { ATN_SC_UNCLASSIFIED, "unclassified"},
- { ATN_SC_RESTRICTED, "restricted"},
- { ATN_SC_CONFIDENTIAL, "confidential"},
- { ATN_SC_SECRET, "secret"},
- { ATN_SC_TOP_SECRET, "top secret"},
- { 0, NULL} };
-
+ {ATN_SC_UNCLASSIFIED, "unclassified"},
+ {ATN_SC_RESTRICTED, "restricted"},
+ {ATN_SC_CONFIDENTIAL, "confidential"},
+ {ATN_SC_SECRET, "secret"},
+ {ATN_SC_TOP_SECRET, "top secret"},
+ {0, NULL}
+};
static const value_string osi_opt_sec_vals[] = {
- { OSI_OPT_SEC_RESERVED, "Reserved"},
- { OSI_OPT_SEC_SRC_ADR_SPEC, "Source Address Specific"},
- { OSI_OPT_SEC_DST_ADR_SPEC, "Destination Address Specific"},
- { OSI_OPT_SEC_GLOBAL_UNIQUE, "Globally Unique"},
- { 0, NULL} };
+ {OSI_OPT_SEC_RESERVED, "Reserved"},
+ {OSI_OPT_SEC_SRC_ADR_SPEC, "Source Address Specific"},
+ {OSI_OPT_SEC_DST_ADR_SPEC, "Destination Address Specific"},
+ {OSI_OPT_SEC_GLOBAL_UNIQUE, "Globally Unique"},
+ {0, NULL}
+};
static const value_string osi_opt_qos_vals[] = {
- { OSI_OPT_QOS_RESERVED, "Reserved"},
- { OSI_OPT_QOS_SRC_ADR_SPEC, "Source Address Specific"},
- { OSI_OPT_QOS_DST_ADR_SPEC, "Destination Address Specific"},
- { OSI_OPT_QOS_GLOBAL_UNIQUE, "Globally Unique"},
- { 0, NULL} };
+ {OSI_OPT_QOS_RESERVED, "Reserved"},
+ {OSI_OPT_QOS_SRC_ADR_SPEC, "Source Address Specific"},
+ {OSI_OPT_QOS_DST_ADR_SPEC, "Destination Address Specific"},
+ {OSI_OPT_QOS_GLOBAL_UNIQUE, "Globally Unique"},
+ {0, NULL}
+};
static const value_string osi_opt_qos_sub_vals[] = {
- { 0x20, " xx10 0000 Reserved"},
- { 0x10, " xx01 0000 Sequencing versus transit delay"},
- { 0x08, " xx00 1000 Congestion experienced"},
- { 0x04, " xx00 0100 Transit delay versus cost"},
- { 0x02, " xx00 0010 Residual error probability versus transit delay"},
- { 0x01, " xx00 0001 Residual error probability versus cost"},
- { 0, NULL} };
+ {0x20, " xx10 0000 Reserved"},
+ {0x10, " xx01 0000 Sequencing versus transit delay"},
+ {0x08, " xx00 1000 Congestion experienced"},
+ {0x04, " xx00 0100 Transit delay versus cost"},
+ {0x02, " xx00 0010 Residual error probability versus transit delay"},
+ {0x01, " xx00 0001 Residual error probability versus cost"},
+ {0, NULL}
+};
static const value_string osi_opt_rfd_general[] = {
- { 0x00, "Reason not specified"},
- { 0x01, "Protocol procedure error"},
- { 0x02, "Incorrect checksum"},
- { 0x03, "PDU discarded due to congestion"},
- { 0x04, "Header syntax error ( cannot be parsed )"},
- { 0x05, "Segmentation needed but not permitted"},
- { 0x06, "Incomplete PDU received"},
- { 0x07, "Duplicate option"},
- { 0, NULL} };
+ {0x00, "Reason not specified"},
+ {0x01, "Protocol procedure error"},
+ {0x02, "Incorrect checksum"},
+ {0x03, "PDU discarded due to congestion"},
+ {0x04, "Header syntax error ( cannot be parsed )"},
+ {0x05, "Segmentation needed but not permitted"},
+ {0x06, "Incomplete PDU received"},
+ {0x07, "Duplicate option"},
+ {0, NULL}
+};
static const value_string osi_opt_rfd_address[] = {
- { 0x00, "Destination Address unreachable"},
- { 0x01, "Destination Address unknown"},
- { 0, NULL} };
+ {0x00, "Destination Address unreachable"},
+ {0x01, "Destination Address unknown"},
+ {0, NULL}
+};
static const value_string osi_opt_rfd_src_route[] = {
- { 0x00, "Unspecified source routing error"},
- { 0x01, "Syntax error in source routing field"},
- { 0x02, "Unknown address in source routing field"},
- { 0x03, "Path not acceptable"},
- { 0, NULL} };
+ {0x00, "Unspecified source routing error"},
+ {0x01, "Syntax error in source routing field"},
+ {0x02, "Unknown address in source routing field"},
+ {0x03, "Path not acceptable"},
+ {0, NULL}
+};
static const value_string osi_opt_rfd_lifetime[] = {
- { 0x00, "Lifetime expired while data unit in transit"},
- { 0x01, "Lifetime expired during reassembly"},
- { 0, NULL} };
+ {0x00, "Lifetime expired while data unit in transit"},
+ {0x01, "Lifetime expired during reassembly"},
+ {0, NULL}
+};
static const value_string osi_opt_rfd_discarded[] = {
- { 0x00, "Unsupported option not specified"},
- { 0x01, "Unsupported protocol version"},
- { 0x02, "Unsupported security option"},
- { 0x03, "Unsupported source routing option"},
- { 0x04, "Unsupported recording of route option"},
- { 0, NULL} };
+ {0x00, "Unsupported option not specified"},
+ {0x01, "Unsupported protocol version"},
+ {0x02, "Unsupported security option"},
+ {0x03, "Unsupported source routing option"},
+ {0x04, "Unsupported recording of route option"},
+ {0, NULL}
+};
static const value_string osi_opt_rfd_reassembly[] = {
- { 0x00, "Reassembly interference"},
- { 0, NULL} };
+ {0x00, "Reassembly interference"},
+ {0, NULL} };
static void
-dissect_option_qos( const guchar type, const guchar sub_type, int offset,
- guchar len, tvbuff_t *tvb, proto_tree *tree ) {
-
+dissect_option_qos(const guchar type, const guchar sub_type, int offset,
+ guchar len, tvbuff_t *tvb, proto_tree *tree)
+{
guchar tmp_type = 0;
proto_item *ti;
proto_tree *osi_qos_tree = NULL;
+ ti = proto_tree_add_text(tree, tvb, offset, len,
+ "Quality of service maintenance: %s",
+ val_to_str(type, osi_opt_qos_vals, "Unknown (0x%x)"));
- ti = proto_tree_add_text( tree, tvb, offset, len,
- "Quality of service maintenance: %s",
- val_to_str( type, osi_opt_qos_vals, "Unknown (0x%x)") );
-
- osi_qos_tree = proto_item_add_subtree( ti, ott_osi_qos );
-
- if ( OSI_OPT_SEC_MASK == type ) { /* Analye BIT field to get all Values */
+ osi_qos_tree = proto_item_add_subtree(ti, ott_osi_qos);
+ if ( OSI_OPT_SEC_MASK == type ) { /* Analye BIT field to get all Values */
tmp_type = sub_type & OSI_OPT_QOS_SUB_RSVD;
if ( tmp_type ) {
- proto_tree_add_text( osi_qos_tree, tvb, offset, len, "%s",
- val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
+ proto_tree_add_text(osi_qos_tree, tvb, offset, len, "%s",
+ val_to_str(tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)"));
}
tmp_type = sub_type & OSI_OPT_QOS_SUB_SEQ_VS_TRS;
if ( tmp_type ) {
- proto_tree_add_text( osi_qos_tree, tvb, offset, len, "%s",
- val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
+ proto_tree_add_text(osi_qos_tree, tvb, offset, len, "%s",
+ val_to_str(tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)"));
}
tmp_type = sub_type &OSI_OPT_QOS_SUB_CONG_EXPED;
if ( tmp_type ) {
- proto_tree_add_text( osi_qos_tree, tvb, offset, len, "%s",
- val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
+ proto_tree_add_text(osi_qos_tree, tvb, offset, len, "%s",
+ val_to_str(tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)"));
}
tmp_type = sub_type & OSI_OPT_QOS_SUB_TSD_VS_COST;
-
if ( tmp_type ) {
- proto_tree_add_text( osi_qos_tree, tvb, offset, len, "%s",
- val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
+ proto_tree_add_text(osi_qos_tree, tvb, offset, len, "%s",
+ val_to_str(tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)"));
}
tmp_type = sub_type & OSI_OPT_QOS_SUB_RESERR_TRS;
if ( tmp_type ) {
- proto_tree_add_text( osi_qos_tree, tvb, offset, len, "%s",
- val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
+ proto_tree_add_text(osi_qos_tree, tvb, offset, len, "%s",
+ val_to_str(tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)"));
}
tmp_type = sub_type & OSI_OPT_QOS_SUB_RESERR_COST;
if ( tmp_type ) {
- proto_tree_add_text( osi_qos_tree, tvb, offset, len, "%s",
- val_to_str( tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)") );
+ proto_tree_add_text(osi_qos_tree, tvb, offset, len, "%s",
+ val_to_str(tmp_type, osi_opt_qos_sub_vals, "Unknown (0x%x)"));
}
}
}
static void
-dissect_option_route( guchar parm_type, int offset, guchar parm_len,
- tvbuff_t *tvb, proto_tree *tree ) {
-
+dissect_option_route(guchar parm_type, int offset, guchar parm_len,
+ tvbuff_t *tvb, proto_tree *tree )
+{
guchar next_hop = 0;
guint16 this_hop = 0;
guchar netl = 0;
@@ -306,220 +316,198 @@ dissect_option_route( guchar parm_type, int offset, guchar parm_len,
proto_tree *osi_route_tree = NULL;
if ( parm_type == OSI_OPT_SOURCE_ROUTING ) {
- next_hop = tvb_get_guint8(tvb, offset + 1 );
- netl = tvb_get_guint8(tvb, next_hop + 2 );
- this_hop = offset + 2; /* points to first netl */
-
- proto_tree_add_text( tree, tvb, offset + next_hop, netl,
- "Source Routing: %s ( Next Hop Highlighted In Data Buffer )",
- (tvb_get_guint8(tvb, offset) == 0) ? "Partial Source Routing" :
- "Complete Source Routing" );
+ next_hop = tvb_get_guint8(tvb, offset + 1);
+ netl = tvb_get_guint8(tvb, next_hop + 2);
+ this_hop = offset + 2; /* points to first netl */
+
+ proto_tree_add_text(tree, tvb, offset + next_hop, netl,
+ "Source Routing: %s ( Next Hop Highlighted In Data Buffer )",
+ (tvb_get_guint8(tvb, offset) == 0) ? "Partial Source Routing" :
+ "Complete Source Routing");
}
else if ( parm_type == OSI_OPT_RECORD_OF_ROUTE ) {
- crr = tvb_get_guint8(tvb, offset );
- last_hop = tvb_get_guint8(tvb, offset + 1 );
- ti = proto_tree_add_text( tree, tvb, offset , parm_len ,
- "Route Recording: %s ",
- (crr == 0) ? "Partial Route Recording" :
- "Complete Route Recording" );
- osi_route_tree = proto_item_add_subtree( ti, ott_osi_route );
+ crr = tvb_get_guint8(tvb, offset);
+ last_hop = tvb_get_guint8(tvb, offset + 1);
+ ti = proto_tree_add_text(tree, tvb, offset, parm_len, "Route Recording: %s ",
+ (crr == 0) ? "Partial Route Recording" :
+ "Complete Route Recording");
+ osi_route_tree = proto_item_add_subtree(ti, ott_osi_route);
/* Complete Route Recording or Partial Route Recording */
- if (crr == 0)
- proto_tree_add_text( osi_route_tree, tvb, offset , 1,
- "Partial Route Recording");
- if (crr == 1)
- proto_tree_add_text( osi_route_tree, tvb, offset , 1,
- "Complete Route Recording");
+ if ( crr == 0 )
+ proto_tree_add_text(osi_route_tree, tvb, offset, 1, "Partial Route Recording");
+ if ( crr == 1 )
+ proto_tree_add_text(osi_route_tree, tvb, offset, 1, "Complete Route Recording");
+
/* "last_hop" is either :
* 0x03 : special value for no NET recorded yet.
- * 0xFF : special value telling there is no more place
+ * 0xFF : special value telling there is no more place
in the Route Recording Allocated Length and
therefore next NETs won't be recorded.
- * Other value : Total length of recorded NETs so far.
+ * Other value : Total length of recorded NETs so far.
*/
- if (last_hop == 0x03)
- proto_tree_add_text( osi_route_tree, tvb, offset + 1, 1,
- "No Network Entity Titles Recorded Yet");
- if (last_hop == 0xFF)
- proto_tree_add_text( osi_route_tree, tvb, offset + 1, 1,
- "Recording Terminated : No more space !");
- netl = tvb_get_guint8(tvb, this_hop + 2 );
+ if ( last_hop == 0x03 )
+ proto_tree_add_text(osi_route_tree, tvb, offset + 1, 1,
+ "No Network Entity Titles Recorded Yet");
+ if ( last_hop == 0xFF )
+ proto_tree_add_text(osi_route_tree, tvb, offset + 1, 1,
+ "Recording Terminated : No more space !");
if ( last_hop == 255 || last_hop == 0x03 )
this_hop = parm_len + 1; /* recording terminated,
- or not begun, nothing to show */
+ * or not begun, nothing to show */
else
- this_hop = offset + 2; /* points to first netl */
+ this_hop = offset + 2; /* points to first netl */
}
-
+
while ( this_hop < offset + last_hop -2 ) { /* -2 for crr and last_hop */
- netl = tvb_get_guint8(tvb, this_hop );
- proto_tree_add_text( osi_route_tree, tvb, this_hop , netl + 1,
- "Hop #%3u NETL: %2u, NET: %s",
- cnt_hops++,
- netl,
- print_nsap_net( tvb_get_ptr(tvb, this_hop + 1, netl), netl ) );
+ netl = tvb_get_guint8(tvb, this_hop);
+ proto_tree_add_text(osi_route_tree, tvb, this_hop, netl + 1,
+ "Hop #%3u NETL: %2u, NET: %s", cnt_hops++, netl,
+ print_nsap_net(tvb_get_ptr(tvb, this_hop + 1, netl), netl));
this_hop += 1 + netl;
}
}
-
-
-
static void
-dissect_option_rfd( const guchar error, const guchar field, int offset,
- guchar len, tvbuff_t *tvb, proto_tree *tree ) {
+dissect_option_rfd(const guchar error, const guchar field, int offset,
+ guchar len, tvbuff_t *tvb, proto_tree *tree )
+{
guchar error_class = 0;
- static const char *format_string[] =
- { "Reason for discard {General} : %s, in field %u",
- "Reason for discard {Address} : %s, in field %u",
- "Reason for discard {Source Routing} : %s, in field %u",
- "Reason for discard {Lifetime} : %s, in field %u",
- "Reason for discard {PDU discarded} : %s, in field %u",
- "Reason for discard {Reassembly} : %s, in field %u"
- };
+ static const char *format_string[] = {
+ "Reason for discard {General} : %s, in field %u",
+ "Reason for discard {Address} : %s, in field %u",
+ "Reason for discard {Source Routing} : %s, in field %u",
+ "Reason for discard {Lifetime} : %s, in field %u",
+ "Reason for discard {PDU discarded} : %s, in field %u",
+ "Reason for discard {Reassembly} : %s, in field %u"
+ };
error_class = error & OSI_OPT_RFD_MASK;
tvb_ensure_bytes_exist(tvb, offset + field, 1);
if ( OSI_OPT_RFD_GENERAL == error_class ) {
- proto_tree_add_text( tree, tvb, offset + field, 1, format_string[0],
- val_to_str( error & OSI_OPT_RFD_SUB_MASK,
- osi_opt_rfd_general, "Unknown (0x%x)"), field );
- }
- else if ( OSI_OPT_RFD_ADDRESS == error_class ) {
- proto_tree_add_text( tree, tvb, offset + field, 1, format_string[1],
- val_to_str( error & OSI_OPT_RFD_SUB_MASK,
- osi_opt_rfd_address, "Unknown (0x%x)"), field );
- }
- else if ( OSI_OPT_RFD_SOURCE_ROUTING == error_class ) {
- proto_tree_add_text( tree, tvb, offset + field, 1, format_string[2],
- val_to_str( error & OSI_OPT_RFD_SUB_MASK,
- osi_opt_rfd_src_route, "Unknown (0x%x)"), field );
- }
- else if ( OSI_OPT_RFD_LIFETIME == error_class ) {
- proto_tree_add_text( tree, tvb, offset + field, 1, format_string[3],
- val_to_str( error & OSI_OPT_RFD_SUB_MASK,
- osi_opt_rfd_lifetime, "Unknown (0x%x)"), field );
- }
- else if ( OSI_OPT_RFD_PDU_DISCARDED == error_class ) {
- proto_tree_add_text( tree, tvb, offset + field, 1, format_string[4],
- val_to_str( error & OSI_OPT_RFD_SUB_MASK,
- osi_opt_rfd_discarded, "Unknown (0x%x)"), field );
- }
- else if ( OSI_OPT_RFD_REASSEMBLY == error_class ) {
- proto_tree_add_text( tree, tvb, offset + field, 1, format_string[5],
- val_to_str( error & OSI_OPT_RFD_SUB_MASK,
- osi_opt_rfd_reassembly, "Unknown (0x%x)"), field );
- }
- else {
- proto_tree_add_text( tree, tvb, offset, len,
- "Reason for discard: UNKNOWN Error Class" );
+ proto_tree_add_text(tree, tvb, offset + field, 1, format_string[0],
+ val_to_str(error & OSI_OPT_RFD_SUB_MASK,
+ osi_opt_rfd_general, "Unknown (0x%x)"),
+ field);
+ } else if ( OSI_OPT_RFD_ADDRESS == error_class ) {
+ proto_tree_add_text(tree, tvb, offset + field, 1, format_string[1],
+ val_to_str(error & OSI_OPT_RFD_SUB_MASK,
+ osi_opt_rfd_address, "Unknown (0x%x)"),
+ field);
+ } else if ( OSI_OPT_RFD_SOURCE_ROUTING == error_class ) {
+ proto_tree_add_text(tree, tvb, offset + field, 1, format_string[2],
+ val_to_str(error & OSI_OPT_RFD_SUB_MASK,
+ osi_opt_rfd_src_route, "Unknown (0x%x)"),
+ field);
+ } else if ( OSI_OPT_RFD_LIFETIME == error_class ) {
+ proto_tree_add_text(tree, tvb, offset + field, 1, format_string[3],
+ val_to_str(error & OSI_OPT_RFD_SUB_MASK,
+ osi_opt_rfd_lifetime, "Unknown (0x%x)"),
+ field);
+ } else if ( OSI_OPT_RFD_PDU_DISCARDED == error_class ) {
+ proto_tree_add_text(tree, tvb, offset + field, 1, format_string[4],
+ val_to_str(error & OSI_OPT_RFD_SUB_MASK,
+ osi_opt_rfd_discarded, "Unknown (0x%x)"),
+ field);
+ } else if ( OSI_OPT_RFD_REASSEMBLY == error_class ) {
+ proto_tree_add_text(tree, tvb, offset + field, 1, format_string[5],
+ val_to_str(error & OSI_OPT_RFD_SUB_MASK,
+ osi_opt_rfd_reassembly, "Unknown (0x%x)"),
+ field);
+ } else {
+ proto_tree_add_text(tree, tvb, offset, len,
+ "Reason for discard: UNKNOWN Error Class");
}
}
/* dissect ATN security label used for policy based interdomain routing.*/
/* For details see ICAO doc 9705 Edition 3 SV5 5.6.2.2.2.2 */
static void
-dissect_option_atn_security_label(
- const guchar sub_type,
- guchar length,
- tvbuff_t *tvb,
- guint offset,
- proto_tree *tree ) {
+dissect_option_atn_security_label(const guchar sub_type, guchar length,
+ tvbuff_t *tvb, guint offset,
+ proto_tree *tree)
+{
proto_item *ti;
- proto_tree *atn_sl_tree = NULL;
+ proto_tree *atn_sl_tree = NULL;
guchar len = 0;
guint8 tag_name = 0;
guint security_info_end = 0;
-
/* check for ATN security label */
- if( OSI_OPT_SECURITY_ATN_SR != sub_type ){
- return; } /* FALLTHROUGH */
+ if ( OSI_OPT_SECURITY_ATN_SR != sub_type )
+ return;
/* check Security Registration Length */
len = tvb_get_guint8(tvb, ++offset);
- if( OSI_OPT_SECURITY_ATN_SR_LEN != len ){
- return; } /* FALLTHROUGH */
-
- /* check Security Registration ID */
- if (tvb_memeql(tvb, ++offset , atn_security_registration_val, OSI_OPT_SECURITY_ATN_SR_LEN )){
- return; } /* FALLTHROUGH */
-
- ti = proto_tree_add_text( tree, tvb, offset, length,
- "%s",
- val_to_str( sub_type, osi_opt_sec_atn_sr_vals, "Unknown (0x%x)"));
-
- atn_sl_tree = proto_item_add_subtree( ti, ott_osi_qos );
- offset+=OSI_OPT_SECURITY_ATN_SR_LEN ;
-
- /* Security Information length */
- len = tvb_get_guint8(tvb, offset);
-
- if(OSI_OPT_SECURITY_ATN_SI_MAX_LEN < len){
- /* FALLTHROUGH */
- return;}
-
- offset++;
-
- security_info_end = offset + len;
- while( offset < security_info_end ){
-
- /* check tag name length*/
- len = tvb_get_guint8(tvb, offset ); /* check tag name length*/
- if( len != 1 ){
- return; } /* FALLTHROUGH */
-
- offset++;
-
- tag_name = tvb_get_guint8(tvb, offset);
- offset++;
-
- switch(tag_name){
- case OSI_OPT_SECURITY_ATN_TT:
- /* check tag set length*/
- len = tvb_get_guint8(tvb, offset);
- if( len != OSI_OPT_SECURITY_ATN_TT_LEN ){
- return; } /* FALLTHROUGH */
-
- offset ++;
-
- proto_tree_add_uint_format(atn_sl_tree, hf_clnp_atntt, tvb, offset, 1,
- tvb_get_guint8(tvb, offset ),
- "%s: %s",
- val_to_str( OSI_OPT_SECURITY_ATN_TT, osi_opt_sec_atn_si_vals, "Unknown (0x%x)"),
- val_to_str( tvb_get_guint8(tvb, offset ), osi_opt_sec_atn_tt_vals, "Unknown (0x%x)") );
-
- offset += len ;
-
- break;
- case OSI_OPT_SECURITY_ATN_SC:
- /* check tag set length*/
- len = tvb_get_guint8(tvb, offset );
- if( len != OSI_OPT_SECURITY_ATN_SC_LEN ){
- /* FALLTHROUGH */
- return;
- }
- offset ++;
- proto_tree_add_uint_format(atn_sl_tree, hf_clnp_atnsc, tvb, offset, 1,
- tvb_get_guint8(tvb, offset ),
- "%s: %s",
- val_to_str( OSI_OPT_SECURITY_ATN_SC, osi_opt_sec_atn_si_vals, "Unknown (0x%x)"),
- val_to_str( tvb_get_guint8(tvb, offset ), osi_opt_sec_atn_sc_vals, "Unknown (0x%x)") );
-
- offset += len ;
-
- break;
- default:
- /* FALLTHROUGH */
- return;
- }
+ if ( OSI_OPT_SECURITY_ATN_SR_LEN != len )
+ return;
+
+ /* check Security Registration ID */
+ if ( tvb_memeql(tvb, ++offset , atn_security_registration_val, OSI_OPT_SECURITY_ATN_SR_LEN) )
+ return;
+
+ ti = proto_tree_add_text(tree, tvb, offset, length, "%s",
+ val_to_str(sub_type, osi_opt_sec_atn_sr_vals, "Unknown (0x%x)"));
+
+ atn_sl_tree = proto_item_add_subtree(ti, ott_osi_qos);
+ offset += OSI_OPT_SECURITY_ATN_SR_LEN;
+
+ /* Security Information length */
+ len = tvb_get_guint8(tvb, offset);
+
+ if ( OSI_OPT_SECURITY_ATN_SI_MAX_LEN < len )
+ return;
+
+ offset++;
+
+ security_info_end = offset + len;
+ while ( offset < security_info_end ) {
+ /* check tag name length*/
+ len = tvb_get_guint8(tvb, offset); /* check tag name length*/
+ if ( len != 1 )
+ return;
+
+ offset++;
- }
-
+ tag_name = tvb_get_guint8(tvb, offset);
+ offset++;
+
+ switch(tag_name) {
+ case OSI_OPT_SECURITY_ATN_TT:
+ /* check tag set length*/
+ len = tvb_get_guint8(tvb, offset);
+ if ( len != OSI_OPT_SECURITY_ATN_TT_LEN )
+ return;
+
+ offset++;
+ proto_tree_add_uint_format(atn_sl_tree, hf_clnp_atntt, tvb, offset, 1,
+ tvb_get_guint8(tvb, offset), "%s: %s",
+ val_to_str(OSI_OPT_SECURITY_ATN_TT, osi_opt_sec_atn_si_vals, "Unknown (0x%x)"),
+ val_to_str(tvb_get_guint8(tvb, offset ), osi_opt_sec_atn_tt_vals, "Unknown (0x%x)"));
+ offset += len;
+ break;
+
+ case OSI_OPT_SECURITY_ATN_SC:
+ /* check tag set length*/
+ len = tvb_get_guint8(tvb, offset);
+ if ( len != OSI_OPT_SECURITY_ATN_SC_LEN )
+ return;
+
+ offset++;
+ proto_tree_add_uint_format(atn_sl_tree, hf_clnp_atnsc, tvb, offset, 1,
+ tvb_get_guint8(tvb, offset), "%s: %s",
+ val_to_str(OSI_OPT_SECURITY_ATN_SC, osi_opt_sec_atn_si_vals, "Unknown (0x%x)"),
+ val_to_str(tvb_get_guint8(tvb, offset ), osi_opt_sec_atn_sc_vals, "Unknown (0x%x)"));
+ offset += len;
+ break;
+
+ default:
+ return;
+ }
+ }
}
/* ############################## Dissection Functions ###################### */
@@ -542,96 +530,103 @@ dissect_option_atn_security_label(
* void, but we will add to the proto_tree if it is not NULL.
*/
void
-dissect_osi_options( guchar opt_len, tvbuff_t *tvb,
- int offset, proto_tree *tree) {
- proto_item *ti;
- proto_tree *osi_option_tree = NULL;
- guchar parm_len = 0;
- guchar parm_type = 0;
- guint8 octet;
-
- if (tree) {
- if ( 0 == opt_len ) {
- proto_tree_add_text( tree, tvb, offset, 0,
- "### No Options for this PDU ###" );
+dissect_osi_options(guchar opt_len, tvbuff_t *tvb, int offset, proto_tree *tree)
+{
+ proto_item *ti;
+ proto_tree *osi_option_tree = NULL;
+ guchar parm_len = 0;
+ guchar parm_type = 0;
+ guint8 octet;
+
+ if (tree) {
+ if ( 0 == opt_len ) {
+ proto_tree_add_text(tree, tvb, offset, 0,
+ "### No Options for this PDU ###");
return;
- }
+ }
- ti = proto_tree_add_text( tree, tvb, offset, opt_len,
- "### Option Section ###" );
- osi_option_tree = proto_item_add_subtree( ti, ott_osi_options );
+ ti = proto_tree_add_text(tree, tvb, offset, opt_len,
+ "### Option Section ###");
+ osi_option_tree = proto_item_add_subtree(ti, ott_osi_options);
- while ( 0 < opt_len ) {
- parm_type = (int) tvb_get_guint8(tvb, offset);
- offset++;
- parm_len = (int) tvb_get_guint8(tvb, offset);
- offset++;
+ while ( 0 < opt_len ) {
+ parm_type = tvb_get_guint8(tvb, offset++);
+ parm_len = tvb_get_guint8(tvb, offset++);
- switch ( parm_type ) {
- case OSI_OPT_QOS_MAINTANANCE:
- octet = tvb_get_guint8(tvb, offset);
- dissect_option_qos( (guchar) (octet&OSI_OPT_QOS_MASK),
- (guchar) (octet&OSI_OPT_QOS_SUB_MASK),
- offset, parm_len, tvb, osi_option_tree );
+ switch ( parm_type ) {
+ case OSI_OPT_QOS_MAINTANANCE:
+ octet = tvb_get_guint8(tvb, offset);
+ dissect_option_qos((guchar)(octet & OSI_OPT_QOS_MASK),
+ (guchar)(octet&OSI_OPT_QOS_SUB_MASK),
+ offset, parm_len, tvb, osi_option_tree);
break;
- case OSI_OPT_SECURITY:
- octet = tvb_get_guint8(tvb, offset);
- if ( clnp_decode_atn_options ){
- dissect_option_atn_security_label(octet,parm_len,tvb, offset, osi_option_tree );
- }else {
- proto_tree_add_text( osi_option_tree, tvb, offset, parm_len,
- "Security type: %s",
- val_to_str( octet&OSI_OPT_SEC_MASK,
- osi_opt_sec_vals, "Unknown (0x%x)") );
- }
-
+ case OSI_OPT_SECURITY:
+ octet = tvb_get_guint8(tvb, offset);
+ if ( clnp_decode_atn_options ) {
+ dissect_option_atn_security_label(octet,parm_len,tvb, offset,
+ osi_option_tree);
+ } else {
+ proto_tree_add_text(osi_option_tree, tvb, offset, parm_len,
+ "Security type: %s",
+ val_to_str(octet&OSI_OPT_SEC_MASK,
+ osi_opt_sec_vals, "Unknown (0x%x)"));
+ }
break;
- case OSI_OPT_PRIORITY:
- octet = tvb_get_guint8(tvb, offset);
- if ( OSI_OPT_MAX_PRIORITY >= octet ) {
- proto_tree_add_text( osi_option_tree, tvb, offset, parm_len,
- "Priority : %u", octet );
- }
- else {
- proto_tree_add_text( osi_option_tree, tvb, offset, parm_len,
- "Priority : %u ( Invalid )",
- octet );
- }
+
+ case OSI_OPT_PRIORITY:
+ octet = tvb_get_guint8(tvb, offset);
+ if ( OSI_OPT_MAX_PRIORITY >= octet ) {
+ proto_tree_add_text(osi_option_tree, tvb, offset, parm_len,
+ "Priority : %u", octet);
+ } else {
+ proto_tree_add_text(osi_option_tree, tvb, offset, parm_len,
+ "Priority : %u ( Invalid )", octet);
+ }
break;
- case OSI_OPT_ADDRESS_MASK:
- proto_tree_add_text( osi_option_tree, tvb, offset, parm_len,
- "Address Mask: %s",
- print_area( tvb_get_ptr(tvb, offset, parm_len), parm_len ) );
+
+ case OSI_OPT_ADDRESS_MASK:
+ proto_tree_add_text(osi_option_tree, tvb, offset, parm_len,
+ "Address Mask: %s",
+ print_area(tvb_get_ptr(tvb, offset, parm_len),
+ parm_len));
break;
- case OSI_OPT_SNPA_MASK:
- proto_tree_add_text( osi_option_tree, tvb, offset, parm_len,
- "SNPA Mask : %s",
- print_system_id( tvb_get_ptr(tvb, offset, parm_len), parm_len ));
+
+ case OSI_OPT_SNPA_MASK:
+ proto_tree_add_text(osi_option_tree, tvb, offset, parm_len,
+ "SNPA Mask : %s",
+ print_system_id(tvb_get_ptr(tvb, offset,
+ parm_len),
+ parm_len));
break;
- case OSI_OPT_ES_CONFIG_TIMER:
- proto_tree_add_text( osi_option_tree, tvb, offset, parm_len,
- "ESCT : %u seconds", tvb_get_ntohs( tvb, offset ) );
+
+ case OSI_OPT_ES_CONFIG_TIMER:
+ proto_tree_add_text(osi_option_tree, tvb, offset, parm_len,
+ "ESCT : %u seconds",
+ tvb_get_ntohs(tvb, offset));
break;
- case OSI_OPT_PADDING:
- proto_tree_add_text( osi_option_tree, tvb, offset, parm_len,
- "Padding : %u Octets", parm_len ) ;
+
+ case OSI_OPT_PADDING:
+ proto_tree_add_text(osi_option_tree, tvb, offset, parm_len,
+ "Padding : %u Octets", parm_len);
break;
- case OSI_OPT_SOURCE_ROUTING:
- case OSI_OPT_RECORD_OF_ROUTE:
- dissect_option_route( parm_type,
- offset, parm_len, tvb, osi_option_tree );
+
+ case OSI_OPT_SOURCE_ROUTING:
+ case OSI_OPT_RECORD_OF_ROUTE:
+ dissect_option_route(parm_type, offset, parm_len, tvb,
+ osi_option_tree);
break;
- case OSI_OPT_REASON_OF_DISCARD:
- dissect_option_rfd( tvb_get_guint8(tvb, offset),
- tvb_get_guint8(tvb, offset + 1),
- offset, parm_len, tvb, osi_option_tree );
+
+ case OSI_OPT_REASON_OF_DISCARD:
+ dissect_option_rfd(tvb_get_guint8(tvb, offset),
+ tvb_get_guint8(tvb, offset + 1), offset, parm_len,
+ tvb, osi_option_tree);
break;
- }
- opt_len -= parm_len + 2;
- offset += parm_len;
}
- }
+ opt_len -= parm_len + 2;
+ offset += parm_len;
+ }
+ }
} /* dissect-osi-options */
@@ -658,7 +653,21 @@ proto_register_osi_options(void) {
&ott_osi_options,
&ott_osi_qos,
&ott_osi_route,
- &ott_osi_redirect,
+ &ott_osi_redirect
};
- proto_register_subtree_array( ott, array_length(ott));
+ proto_register_subtree_array(ott, array_length(ott));
}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 2
+ * tab-width: 2
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=2 tabstop=2 expandtab:
+ * :indentSize=2:tabSize=2:noTabs=true:
+ */
+