diff options
author | Victor Dodon <dodonvictor@gmail.com> | 2016-03-18 01:57:13 -0700 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2016-03-26 19:05:07 +0000 |
commit | c480652da9bac5856d8796955fd5fcc23ae741b3 (patch) | |
tree | 69a63dfc15ed394f5b031ed3af694f19d18bc741 | |
parent | 7b3bfb80d8c2fbfeb06286a824dd8f8269c6386e (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.c | 372 | ||||
-rw-r--r-- | epan/tfs.c | 1 | ||||
-rw-r--r-- | epan/tfs.h | 1 |
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 } |