aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Dodon <dodonvictor@gmail.com>2016-03-18 01:57:13 -0700
committerMichael Mann <mmann78@netscape.net>2016-03-26 19:05:07 +0000
commitc480652da9bac5856d8796955fd5fcc23ae741b3 (patch)
tree69a63dfc15ed394f5b031ed3af694f19d18bc741
parent7b3bfb80d8c2fbfeb06286a824dd8f8269c6386e (diff)
bootp: Add support for iSNS (RFC4174) dissection
Change-Id: I2d1807e631991d4115ca33d351e85c36272c209b Reviewed-on: https://code.wireshark.org/review/14523 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
-rw-r--r--epan/dissectors/packet-bootp.c372
-rw-r--r--epan/tfs.c1
-rw-r--r--epan/tfs.h1
3 files changed, 373 insertions, 1 deletions
diff --git a/epan/dissectors/packet-bootp.c b/epan/dissectors/packet-bootp.c
index 8b9b09ccdf..a5d7f50505 100644
--- a/epan/dissectors/packet-bootp.c
+++ b/epan/dissectors/packet-bootp.c
@@ -43,6 +43,7 @@
* RFC 3825: Dynamic Host Configuration Protocol Option for Coordinate-based Location Configuration Information
* RFC 3925: Vendor-Identifying Vendor Options for Dynamic Host Configuration Protocol version 4 (DHCPv4)
* RFC 3942: Reclassifying DHCPv4 Options
+ * RFC 4174: The IPv4 Dynamic Host Configuration Protocol (DHCP) Option for the Internet Storage Name Service
* RFC 4243: Vendor-Specific Information Suboption for the Dynamic Host Configuration Protocol (DHCP) Relay Agent Option
* RFC 4361: Node-specific Client Identifiers for Dynamic Host Configuration Protocol Version Four (DHCPv4)
* RFC 4388: Dynamic Host Configuration Protocol (DHCP) Leasequery
@@ -387,6 +388,42 @@ static int hf_bootp_option82_vrf_name_vpn_id_index = -1;
/* 82:151 suboptions end */
static int hf_bootp_option82_server_id_override_cisco = -1; /* 82:152 */
+static int hf_bootp_option_isns_functions = -1;
+static int hf_bootp_option_isns_functions_enabled = -1;
+static int hf_bootp_option_isns_functions_dd_authorization = -1;
+static int hf_bootp_option_isns_functions_sec_policy_distibution = -1;
+static int hf_bootp_option_isns_functions_reserved = -1;
+
+static int hf_bootp_option_isns_discovery_domain_access = -1;
+static int hf_bootp_option_isns_discovery_domain_access_enabled = -1;
+static int hf_bootp_option_isns_discovery_domain_access_control_node = -1;
+static int hf_bootp_option_isns_discovery_domain_access_iscsi_target = -1;
+static int hf_bootp_option_isns_discovery_domain_access_iscsi_inititator = -1;
+static int hf_bootp_option_isns_discovery_domain_access_ifcp_target_port = -1;
+static int hf_bootp_option_isns_discovery_domain_access_ifcp_initiator_port = -1;
+static int hf_bootp_option_isns_discovery_domain_access_reserved = -1;
+
+static int hf_bootp_option_isns_administrative_flags = -1;
+static int hf_bootp_option_isns_administrative_flags_enabled = -1;
+static int hf_bootp_option_isns_administrative_flags_heartbeat = -1;
+static int hf_bootp_option_isns_administrative_flags_management_scns = -1;
+static int hf_bootp_option_isns_administrative_flags_default_dd = -1;
+static int hf_bootp_option_isns_administrative_flags_reserved = -1;
+
+static int hf_bootp_option_isns_server_security_bitmap = -1;
+static int hf_bootp_option_isns_server_security_bitmap_enabled = -1;
+static int hf_bootp_option_isns_server_security_bitmap_ike_ipsec_enabled = -1;
+static int hf_bootp_option_isns_server_security_bitmap_main_mode = -1;
+static int hf_bootp_option_isns_server_security_bitmap_aggressive_mode = -1;
+static int hf_bootp_option_isns_server_security_bitmap_pfs = -1;
+static int hf_bootp_option_isns_server_security_bitmap_transport_mode = -1;
+static int hf_bootp_option_isns_server_security_bitmap_tunnel_mode = -1;
+static int hf_bootp_option_isns_server_security_bitmap_reserved = -1;
+
+static int hf_bootp_option_isns_heartbeat_originator_addr = -1;
+static int hf_bootp_option_isns_primary_server_addr = -1;
+static int hf_bootp_option_isns_secondary_server_addr_list = -1;
+
static int hf_bootp_option_novell_dss_string = -1; /* 85 */
static int hf_bootp_option_novell_dss_ip = -1; /* 85 */
static int hf_bootp_option_novell_ds_tree_name = -1; /* 86 */
@@ -519,6 +556,11 @@ static gint ett_bootp_fqdn = -1;
static gint ett_bootp_fqdn_flags = -1;
static gint ett_bootp_filename_option = -1;
static gint ett_bootp_server_hostname = -1;
+static gint ett_bootp_isns_functions = -1;
+static gint ett_bootp_isns_discovery_domain_access = -1;
+static gint ett_bootp_isns_administrative_flags = -1;
+static gint ett_bootp_isns_server_security_bitmap = -1;
+static gint ett_bootp_isns_secondary_server_addr = -1;
static expert_field ei_bootp_bad_length = EI_INIT;
static expert_field ei_bootp_bad_bitfield = EI_INIT;
@@ -543,6 +585,7 @@ static expert_field ei_bootp_end_option_missing = EI_INIT;
static expert_field ei_bootp_client_address_not_given = EI_INIT;
static expert_field ei_bootp_server_name_overloaded_by_dhcp = EI_INIT;
static expert_field ei_bootp_boot_filename_overloaded_by_dhcp = EI_INIT;
+static expert_field ei_bootp_option_isns_ignored_bitfield = EI_INIT;
static dissector_handle_t bootp_handle;
@@ -776,6 +819,38 @@ static const enum_val_t bootp_uuid_endian_vals[] = {
#define F_FQDN_N 0x08
#define F_FQDN_MBZ 0xf0
+#define ISNS_BITFIELD_NZ_MUST_BE_IGNORED(mask, ena_flag) \
+ ((mask) && !((mask) & (ena_flag)))
+
+/* iSNS bit fields */
+#define F_ISNS_FUNCTIONS_ENABLED 0x0001
+#define F_ISNS_FUNCTIONS_DD_AUTH 0x0002
+#define F_ISNS_FUNCTIONS_SEC_POLICY 0x0004
+#define F_ISNS_FUNCTIONS_RESERVED 0xFFF8
+
+#define F_ISNS_DD_ACCESS_ENABLED 0x0001
+#define F_ISNS_DD_ACCESS_CTRL_NODE 0x0002
+#define F_ISNS_DD_ACCESS_ISCSI_TARGET 0x0004
+#define F_ISNS_DD_ACCESS_ISCSI_INITIATOR 0x0008
+#define F_ISNS_DD_ACCESS_IFCP_TARGET_PORT 0x0010
+#define F_ISNS_DD_ACCESS_IFCP_INITIATOR_PORT 0x0020
+#define F_ISNS_DD_ACCESS_RESERVED 0xFFC0
+
+#define F_ISNS_ADMIN_FLAGS_ENABLED 0x0001
+#define F_ISNS_ADMIN_FLAGS_HEARTBEAT 0x0002
+#define F_ISNS_ADMIN_FLAGS_MANAGEMENT_SCNS 0x0004
+#define F_ISNS_ADMIN_FLAGS_DEFAULT_DD 0x0008
+#define F_ISNS_ADMIN_FLAGS_RESERVED 0xFFF0
+
+#define F_ISNS_SRV_SEC_BITMAP_ENABLED 0x0001
+#define F_ISNS_SRV_SEC_BITMAP_IKE_IPSEC 0x0002
+#define F_ISNS_SRV_SEC_BITMAP_MAIN_MODE 0x0004
+#define F_ISNS_SRV_SEC_BITMAP_AGGRESSIVE 0x0008
+#define F_ISNS_SRV_SEC_BITMAP_PFS 0x0010
+#define F_ISNS_SRV_SEC_BITMAP_TRASPORT_MODE 0x0020
+#define F_ISNS_SRV_SEC_BITMAP_TUNNEL_MODE 0x0040
+#define F_ISNS_SRV_SEC_BITMAP_RESERVED 0xFF80
+
static const true_false_string tfs_fqdn_s = {
"Server",
"Client"
@@ -796,6 +871,16 @@ static const true_false_string tfs_fqdn_n = {
"Some server updates"
};
+static const true_false_string tfs_isns_function_dd_based_auth = {
+ "Automatically allowed access",
+ "Explicitly performed",
+};
+
+static const true_false_string tfs_isns_functions_sec_distrib = {
+ "Download from iSNS server",
+ "By other means",
+};
+
enum field_type {
special,
none,
@@ -879,6 +964,8 @@ static int dissect_vendor_cl_suboption(packet_info *pinfo, proto_item *v_ti, pro
tvbuff_t *tvb, int optoff, int optend);
static int dissect_vendor_generic_suboption(packet_info *pinfo, proto_item *v_ti, proto_tree *v_tree,
tvbuff_t *tvb, int optoff, int optend);
+static int dissect_isns(packet_info *pinfo, proto_item *v_ti, proto_tree *v_tree,
+ tvbuff_t *tvb, int optoff, int optlen);
#define OPT53_DISCOVER "Discover"
/* http://www.iana.org/assignments/bootp-dhcp-parameters */
@@ -1147,7 +1234,7 @@ static struct opt_info default_bootp_opt[BOOTP_OPT_NUM] = {
/* 80 */ { "Rapid commit", opaque, NULL },
/* 81 */ { "Client Fully Qualified Domain Name", special, NULL},
/* 82 */ { "Agent Information Option", special, NULL},
-/* 83 */ { "iSNS [TODO:RFC4174]", opaque, NULL },
+/* 83 */ { "iSNS", opaque, NULL },
/* 84 */ { "Removed/Unassigned", opaque, NULL },
/* 85 */ { "Novell Directory Services Servers", special, NULL},
/* 86 */ { "Novell Directory Services Tree Name", string, &hf_bootp_option_novell_ds_tree_name },
@@ -2206,6 +2293,10 @@ bootp_option(tvbuff_t *tvb, packet_info *pinfo, proto_tree *bp_tree, proto_item
optoff = bootp_dhcp_decode_agent_info(pinfo, vti, v_tree, tvb, optoff, optend);
break;
+ case 83: /* iSNS Option (RFC 4174) */
+ optoff = dissect_isns(pinfo, vti, v_tree, tvb, optoff, optlen);
+ break;
+
case 85: /* Novell Servers (RFC 2241) */
/* Option 85 can be sent as a string */
/* Added by Greg Morris (gmorris[AT]novell.com) */
@@ -3367,6 +3458,123 @@ rfc3825_fixpoint_to_decimal(struct rfc3825_location_fixpoint_t *fixpoint, struct
return RFC3825_NOERROR;
}
+static int dissect_isns(packet_info *pinfo, proto_item *v_ti, proto_tree *v_tree,
+ tvbuff_t *tvb, int optoff, int optlen)
+{
+ static const int *isns_functions_hf_flags[] = {
+ &hf_bootp_option_isns_functions_enabled,
+ &hf_bootp_option_isns_functions_dd_authorization,
+ &hf_bootp_option_isns_functions_sec_policy_distibution,
+ &hf_bootp_option_isns_functions_reserved,
+ NULL
+ };
+
+ static const int *isns_dda_hf_flags[] = {
+ &hf_bootp_option_isns_discovery_domain_access_enabled,
+ &hf_bootp_option_isns_discovery_domain_access_control_node,
+ &hf_bootp_option_isns_discovery_domain_access_iscsi_target,
+ &hf_bootp_option_isns_discovery_domain_access_iscsi_inititator,
+ &hf_bootp_option_isns_discovery_domain_access_ifcp_target_port,
+ &hf_bootp_option_isns_discovery_domain_access_ifcp_initiator_port,
+ &hf_bootp_option_isns_discovery_domain_access_reserved,
+ NULL
+ };
+
+ static const int *isns_administrative_flags[] = {
+ &hf_bootp_option_isns_administrative_flags_enabled,
+ &hf_bootp_option_isns_administrative_flags_heartbeat,
+ &hf_bootp_option_isns_administrative_flags_management_scns,
+ &hf_bootp_option_isns_administrative_flags_default_dd,
+ &hf_bootp_option_isns_administrative_flags_reserved,
+ NULL
+ };
+
+ static const int *isns_server_security_flags[] = {
+ &hf_bootp_option_isns_server_security_bitmap_enabled,
+ &hf_bootp_option_isns_server_security_bitmap_ike_ipsec_enabled,
+ &hf_bootp_option_isns_server_security_bitmap_main_mode,
+ &hf_bootp_option_isns_server_security_bitmap_aggressive_mode,
+ &hf_bootp_option_isns_server_security_bitmap_pfs,
+ &hf_bootp_option_isns_server_security_bitmap_transport_mode,
+ &hf_bootp_option_isns_server_security_bitmap_tunnel_mode,
+ &hf_bootp_option_isns_server_security_bitmap_reserved,
+ NULL
+ };
+
+ guint16 function_flags, dd_access_flags, administrative_flags;
+ guint32 server_security_flags;
+ proto_tree *tree;
+ proto_item *item;
+ int optend, heartbeat_set = 0;
+
+ if (optlen < 14) {
+ expert_add_info_format(pinfo, v_ti, &ei_bootp_bad_length, "length must be >= 14");
+ return optoff;
+ }
+ optend = optoff + optlen;
+
+ item = proto_tree_add_bitmask(v_tree, tvb, optoff, hf_bootp_option_isns_functions,
+ ett_bootp_isns_functions, isns_functions_hf_flags, ENC_BIG_ENDIAN);
+ function_flags = tvb_get_ntohs(tvb, optoff);
+ /* RFC 4174, section "2.1. iSNS Functions Field" specifies that if
+ * the field "Function Fields Enabled" is set to 0, then "the contents
+ * of all other iSNS Function fields MUST be ignored. We will display
+ * the fields but add an informational expert info. This goes for all
+ * the bitmasks: iSNS Functions, DD Access, Administrative Flags, iSNS
+ * Server Security Bitmap */
+ if (ISNS_BITFIELD_NZ_MUST_BE_IGNORED(function_flags, F_ISNS_FUNCTIONS_ENABLED))
+ expert_add_info(pinfo, item, &ei_bootp_option_isns_ignored_bitfield);
+
+ optoff += 2;
+ item = proto_tree_add_bitmask(v_tree, tvb, optoff, hf_bootp_option_isns_discovery_domain_access,
+ ett_bootp_isns_discovery_domain_access, isns_dda_hf_flags, ENC_BIG_ENDIAN);
+ dd_access_flags = tvb_get_ntohs(tvb, optoff);
+ if (ISNS_BITFIELD_NZ_MUST_BE_IGNORED(dd_access_flags, F_ISNS_DD_ACCESS_ENABLED))
+ expert_add_info(pinfo, item, &ei_bootp_option_isns_ignored_bitfield);
+
+ optoff += 2;
+ administrative_flags = tvb_get_ntohs(tvb, optoff);
+ if (administrative_flags & F_ISNS_ADMIN_FLAGS_ENABLED) {
+ if ((administrative_flags & F_ISNS_ADMIN_FLAGS_HEARTBEAT)) {
+ if (optlen < 18) {
+ expert_add_info_format(pinfo, v_ti, &ei_bootp_bad_length, "length must be >= 18");
+ return optoff;
+ }
+ heartbeat_set = 1;
+ }
+ }
+ item = proto_tree_add_bitmask(v_tree, tvb, optoff, hf_bootp_option_isns_administrative_flags,
+ ett_bootp_isns_administrative_flags, isns_administrative_flags, ENC_BIG_ENDIAN);
+ if (ISNS_BITFIELD_NZ_MUST_BE_IGNORED(administrative_flags, F_ISNS_ADMIN_FLAGS_ENABLED))
+ expert_add_info(pinfo, item, &ei_bootp_option_isns_ignored_bitfield);
+
+ optoff += 2;
+ item = proto_tree_add_bitmask(v_tree, tvb, optoff, hf_bootp_option_isns_server_security_bitmap,
+ ett_bootp_isns_server_security_bitmap, isns_server_security_flags, ENC_BIG_ENDIAN);
+ server_security_flags = tvb_get_ntohl(tvb, optoff);
+ if (ISNS_BITFIELD_NZ_MUST_BE_IGNORED(server_security_flags, F_ISNS_SRV_SEC_BITMAP_ENABLED))
+ expert_add_info(pinfo, item, &ei_bootp_option_isns_ignored_bitfield);
+
+ optoff += 4;
+ if (heartbeat_set) {
+ proto_tree_add_item(v_tree, hf_bootp_option_isns_heartbeat_originator_addr,
+ tvb, optoff, 4, ENC_BIG_ENDIAN);
+ optoff += 4;
+ }
+
+ proto_tree_add_item(v_tree, hf_bootp_option_isns_primary_server_addr,
+ tvb, optoff, 4, ENC_BIG_ENDIAN);
+
+ optoff += 4;
+ if (optoff < optend) {
+ tree = proto_tree_add_subtree(v_tree, tvb, optoff, 0, ett_bootp_isns_secondary_server_addr,
+ &item, "Secondary iSNS Servers");
+ optoff += bootp_handle_basic_types(pinfo, tree, item, tvb, ipv4_list, optoff, optend - optoff,
+ &hf_bootp_option_isns_secondary_server_addr_list, NULL);
+ }
+ return optoff;
+}
+
static const value_string option43_cl_suboption_vals[] = {
{ 0, "Padding" },
{ 1, "Suboption Request List" },
@@ -7208,6 +7416,162 @@ proto_register_bootp(void)
"Option 82:152 Server ID Override (Cisco proprietary)", HFILL }},
+ { &hf_bootp_option_isns_functions,
+ { "iSNS Functions", "bootp.option.isns.functions",
+ FT_UINT16, BASE_HEX, NULL, 0x00,
+ "iSNS: the functions supported by the iSNS servers", HFILL }},
+
+ { &hf_bootp_option_isns_functions_enabled,
+ { "Function Fields Enabled", "bootp.option.isns.functions.enabled",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_FUNCTIONS_ENABLED,
+ "If set to zero, then the contents of all other iSNS Function fields MUST be ignored", HFILL }},
+
+ { &hf_bootp_option_isns_functions_dd_authorization,
+ { "Discovery Domain based Authorization", "bootp.option.isns.functions.dd_base_authorization",
+ FT_BOOLEAN, 16, TFS(&tfs_isns_function_dd_based_auth), F_ISNS_FUNCTIONS_DD_AUTH,
+ "If set to zero, then access authorization must be explicitly performed by each device", HFILL }},
+
+ { &hf_bootp_option_isns_functions_sec_policy_distibution,
+ { "Security Policy Distribution", "bootp.option.isns.functions.sec_policy_distribution",
+ FT_BOOLEAN, 16, TFS(&tfs_isns_functions_sec_distrib), F_ISNS_FUNCTIONS_SEC_POLICY,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_functions_reserved,
+ { "Reserved flags", "bootp.option.isns.functions.reserved",
+ FT_UINT16, BASE_HEX, NULL, F_ISNS_FUNCTIONS_RESERVED,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_discovery_domain_access,
+ { "Discovery Domain Access flags", "bootp.option.isns.discovery_domain_access",
+ FT_UINT16, BASE_HEX, NULL, 0x00,
+ "iSNS: the types of iSNS clients that are allowed to modify Discovery Domains", HFILL }},
+
+ { &hf_bootp_option_isns_discovery_domain_access_enabled,
+ { "Discovery Domain Enabled", "bootp.option.isns.discovery_domain_access.enabled",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_DD_ACCESS_ENABLED,
+ "If set to zero, then the contents of the remainder of this field MUST be ignored", HFILL }},
+
+ { &hf_bootp_option_isns_discovery_domain_access_control_node,
+ { "Control Node", "bootp.option.isns.discovery_domain_access_control.node",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_DD_ACCESS_CTRL_NODE,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_discovery_domain_access_iscsi_target,
+ { "iSCSI Target", "bootp.option.isns.discovery_domain_access.iscsi_target",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_DD_ACCESS_ISCSI_TARGET,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_discovery_domain_access_iscsi_inititator,
+ { "iSCSI Initiator", "bootp.option.isns.discovery_domain_access.iscsi_initiator",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_DD_ACCESS_ISCSI_INITIATOR,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_discovery_domain_access_ifcp_target_port,
+ { "iFCP Target Port", "bootp.option.isns.discovery_domain_access.ifcp_target_port",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_DD_ACCESS_IFCP_TARGET_PORT,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_discovery_domain_access_ifcp_initiator_port,
+ { "iFCP Initiator Port", "bootp.option.isns.discovery_domain_access.initiator_target_port",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_DD_ACCESS_IFCP_INITIATOR_PORT,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_discovery_domain_access_reserved,
+ { "Reserved Flags", "bootp.option.isns.discovery_domain_access.reserved",
+ FT_UINT16, BASE_HEX, NULL, F_ISNS_DD_ACCESS_RESERVED,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_administrative_flags,
+ { "Administrative Flags", "bootp.option.isns.administrative_flags",
+ FT_UINT16, BASE_HEX, NULL, 0x00,
+ "iSNS: administrative settings for the iSNS servers discovered through the DHCP query", HFILL }},
+
+ { &hf_bootp_option_isns_administrative_flags_enabled,
+ { "Administrative Flags Enabled", "bootp.option.isns.administrative_flags.enabled",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_ADMIN_FLAGS_ENABLED,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_administrative_flags_heartbeat,
+ { "Heartbeat", "bootp.option.isns.administrative_flags.heartbeat",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_ADMIN_FLAGS_HEARTBEAT,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_administrative_flags_management_scns,
+ { "Management SCNs", "bootp.option.isns.administrative_flags.management_scns",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_ADMIN_FLAGS_MANAGEMENT_SCNS,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_administrative_flags_default_dd,
+ { "Default Discovery Domain", "bootp.option.isns.administrative_flags.default_discovery_domain",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_ADMIN_FLAGS_DEFAULT_DD,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_administrative_flags_reserved,
+ { "Reserved Flags", "bootp.option.isns.administrative_flags.reserved",
+ FT_UINT16, BASE_HEX, NULL, F_ISNS_ADMIN_FLAGS_RESERVED,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_server_security_bitmap,
+ { "iSNS Server Security Bitmap", "bootp.option.isns.server_security_bitmap",
+ FT_UINT32, BASE_HEX, NULL, 0x00,
+ "iSNS: server security settings", HFILL }},
+
+ { &hf_bootp_option_isns_server_security_bitmap_enabled,
+ { "Server Security Bitmap Enabled", "bootp.option.isns.server_security_bitmap.enabled",
+ FT_BOOLEAN, 16, TFS(&tfs_yes_no), F_ISNS_SRV_SEC_BITMAP_ENABLED,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_server_security_bitmap_ike_ipsec_enabled,
+ { "IKE/IPSec", "bootp.option.isns.server_security_bitmap.ike_ipsec_enabled",
+ FT_BOOLEAN, 16, TFS(&tfs_enabled_disabled), F_ISNS_SRV_SEC_BITMAP_IKE_IPSEC,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_server_security_bitmap_main_mode,
+ { "Main Mode", "bootp.option.isns.server_security_bitmap.main_mode",
+ FT_BOOLEAN, 16, TFS(&tfs_enabled_disabled), F_ISNS_SRV_SEC_BITMAP_MAIN_MODE,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_server_security_bitmap_aggressive_mode,
+ { "Aggresive Mode", "bootp.option.isns.server_security_bitmap.aggressive_mode",
+ FT_BOOLEAN, 16, TFS(&tfs_enabled_disabled), F_ISNS_SRV_SEC_BITMAP_AGGRESSIVE,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_server_security_bitmap_pfs,
+ { "PFS", "bootp.option.isns.server_security_bitmap.pfs",
+ FT_BOOLEAN, 16, TFS(&tfs_enabled_disabled), F_ISNS_SRV_SEC_BITMAP_PFS,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_server_security_bitmap_transport_mode,
+ { "Transport Mode", "bootp.option.isns.server_security_bitmap.transport_mode",
+ FT_BOOLEAN, 16, TFS(&tfs_preferred_no_preference), F_ISNS_SRV_SEC_BITMAP_TRASPORT_MODE,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_server_security_bitmap_tunnel_mode,
+ { "Tunnel Mode", "bootp.option.isns.server_security_bitmap.tunnel_mode",
+ FT_BOOLEAN, 16, TFS(&tfs_preferred_no_preference), F_ISNS_SRV_SEC_BITMAP_TUNNEL_MODE,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_server_security_bitmap_reserved,
+ { "Reserved Flags", "bootp.option.isns.server_security_bitmap.reserved",
+ FT_UINT16, BASE_HEX, NULL, F_ISNS_SRV_SEC_BITMAP_RESERVED,
+ NULL, HFILL }},
+
+ { &hf_bootp_option_isns_primary_server_addr,
+ { "Primary Server Address", "bootp.option.isns.primary_server_addr",
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ "iSNS: IP address of the primary server", HFILL }},
+
+ { &hf_bootp_option_isns_heartbeat_originator_addr,
+ { "Heartbeat Originator Address", "bootp.option.isns.heartbeat_originator_addr",
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ "iSNS: IP address from which the iSNS heartbeat originates", HFILL }},
+
+ { &hf_bootp_option_isns_secondary_server_addr_list,
+ { "Secondary Server Address", "bootp.option.isns.secondary_server_addr",
+ FT_IPv4, BASE_NONE, NULL, 0x00,
+ "iSNS: a list of IP addresses of the secondary iSNS servers", HFILL }},
+
+
{ &hf_bootp_option_novell_dss_string,
{ "Novell Directory Services Servers String", "bootp.option.novell_dss.string",
FT_STRINGZ, BASE_NONE, NULL, 0x0,
@@ -7803,6 +8167,11 @@ proto_register_bootp(void)
&ett_bootp_filename_option,
&ett_bootp_server_hostname,
&ett_bootp_fqdn_flags,
+ &ett_bootp_isns_functions,
+ &ett_bootp_isns_discovery_domain_access,
+ &ett_bootp_isns_administrative_flags,
+ &ett_bootp_isns_server_security_bitmap,
+ &ett_bootp_isns_secondary_server_addr,
};
static ei_register_info ei[] = {
@@ -7829,6 +8198,7 @@ proto_register_bootp(void)
{ &ei_bootp_client_address_not_given, { "bootp.client_address_not_given", PI_PROTOCOL, PI_NOTE, "Client address not given", EXPFILL }},
{ &ei_bootp_server_name_overloaded_by_dhcp, { "bootp.server_name_overloaded_by_dhcp", PI_PROTOCOL, PI_NOTE, "Server name option overloaded by DHCP", EXPFILL }},
{ &ei_bootp_boot_filename_overloaded_by_dhcp, { "bootp.boot_filename_overloaded_by_dhcp", PI_PROTOCOL, PI_NOTE, "Boot file name option overloaded by DHCP", EXPFILL }},
+ { &ei_bootp_option_isns_ignored_bitfield, { "bootp.option.isns.ignored_bitfield", PI_PROTOCOL, PI_NOTE, "Enabled field is not set - non-zero bitmask ignored", EXPFILL }},
};
static tap_param bootp_stat_params[] = {
diff --git a/epan/tfs.c b/epan/tfs.c
index a7f4b734c4..48afa7fb96 100644
--- a/epan/tfs.c
+++ b/epan/tfs.c
@@ -90,4 +90,5 @@ const true_false_string tfs_defined_not_defined = { "Defined", "Not defined" };
const true_false_string tfs_constructed_primitive = { "Constructed", "Primitive" };
const true_false_string tfs_client_server = { "Client", "Server" };
const true_false_string tfs_server_client = { "Server", "Client" };
+const true_false_string tfs_preferred_no_preference = { "Preferred", "No preference" };
diff --git a/epan/tfs.h b/epan/tfs.h
index 6b4816da11..93b28a8277 100644
--- a/epan/tfs.h
+++ b/epan/tfs.h
@@ -105,6 +105,7 @@ WS_DLL_PUBLIC const true_false_string tfs_defined_not_defined;
WS_DLL_PUBLIC const true_false_string tfs_constructed_primitive;
WS_DLL_PUBLIC const true_false_string tfs_client_server;
WS_DLL_PUBLIC const true_false_string tfs_server_client;
+WS_DLL_PUBLIC const true_false_string tfs_preferred_no_preference;
#ifdef __cplusplus
}