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>
This commit is contained in:
Victor Dodon 2016-03-18 01:57:13 -07:00 committed by Michael Mann
parent 7b3bfb80d8
commit c480652da9
3 changed files with 373 additions and 1 deletions

View File

@ -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[] = {

View File

@ -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" };

View File

@ -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
}