diff --git a/epan/dissectors/packet-bgp.c b/epan/dissectors/packet-bgp.c index 23d7f09fa3..252e92902b 100644 --- a/epan/dissectors/packet-bgp.c +++ b/epan/dissectors/packet-bgp.c @@ -392,7 +392,7 @@ static gint ett_bgp_ext_com_flags = -1; /* extended communities flags tree */ static gint ett_bgp_ssa = -1; /* safi specific attribute */ static gint ett_bgp_ssa_subtree = -1; /* safi specific attribute Subtrees */ static gint ett_bgp_orf = -1; /* orf (outbound route filter) tree */ -static gint ett_bgp_orf_entry = -1; /* orf entry tree */ +static gint ett_bgp_orf_entry = -1; /* orf entry tree */ /* desegmentation */ static gboolean bgp_desegment = TRUE; @@ -427,7 +427,7 @@ decode_prefix4(proto_tree *tree, int hf_addr, tvbuff_t *tvb, gint offset, /* put prefix into protocol tree */ ti = proto_tree_add_text(tree, tvb, offset, tlen != 0 ? tlen : 1 + length, "%s/%u", - ip_to_str(ip_addr.addr_bytes), plen); + ip_to_str(ip_addr.addr_bytes), plen); prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix); proto_tree_add_text(prefix_tree, tvb, offset, 1, "%s prefix length: %u", tag, plen); @@ -538,118 +538,118 @@ mp_addr_to_str (guint16 afi, guint8 safi, tvbuff_t *tvb, gint offset, emem_strbu length = 0 ; switch (afi) { case AFNUM_INET: - switch (safi) { - case SAFNUM_UNICAST: - case SAFNUM_MULCAST: - case SAFNUM_UNIMULC: - case SAFNUM_MPLS_LABEL: - case SAFNUM_TUNNEL: - length = 4 ; - ip4addr = tvb_get_ipv4(tvb, offset); - ep_strbuf_append(strbuf, ip_to_str((guint8 *)&ip4addr)); - break; - case SAFNUM_LAB_VPNUNICAST: - case SAFNUM_LAB_VPNMULCAST: - case SAFNUM_LAB_VPNUNIMULC: - rd_type=tvb_get_ntohs(tvb,offset) ; - switch (rd_type) { - case FORMAT_AS2_LOC: - length = 8 + sizeof(ip4addr); - ip4addr = tvb_get_ipv4(tvb, offset + 8); /* Next Hop */ - ep_strbuf_printf(strbuf, "Empty Label Stack RD=%u:%u IPv4=%s", - tvb_get_ntohs(tvb, offset + 2), - tvb_get_ntohl(tvb, offset + 4), - ip_to_str((guint8 *)&ip4addr)); - break; - case FORMAT_IP_LOC: - length = 8 + sizeof(ip4addr); - ip4addr = tvb_get_ipv4(tvb, offset + 2); /* IP part of the RD */ - ip4addr2 = tvb_get_ipv4(tvb, offset + 8); /* Next Hop */ - ep_strbuf_printf(strbuf, "Empty Label Stack RD=%s:%u IPv4=%s", - ip_to_str((guint8 *)&ip4addr), - tvb_get_ntohs(tvb, offset + 6), - ip_to_str((guint8 *)&ip4addr2)); - break ; - default: - length = 0 ; - ep_strbuf_printf(strbuf, "Unknown (0x%04x) labeled VPN IPv4 address format",rd_type); - break; - } - break; + switch (safi) { + case SAFNUM_UNICAST: + case SAFNUM_MULCAST: + case SAFNUM_UNIMULC: + case SAFNUM_MPLS_LABEL: + case SAFNUM_TUNNEL: + length = 4 ; + ip4addr = tvb_get_ipv4(tvb, offset); + ep_strbuf_append(strbuf, ip_to_str((guint8 *)&ip4addr)); + break; + case SAFNUM_LAB_VPNUNICAST: + case SAFNUM_LAB_VPNMULCAST: + case SAFNUM_LAB_VPNUNIMULC: + rd_type=tvb_get_ntohs(tvb,offset) ; + switch (rd_type) { + case FORMAT_AS2_LOC: + length = 8 + sizeof(ip4addr); + ip4addr = tvb_get_ipv4(tvb, offset + 8); /* Next Hop */ + ep_strbuf_printf(strbuf, "Empty Label Stack RD=%u:%u IPv4=%s", + tvb_get_ntohs(tvb, offset + 2), + tvb_get_ntohl(tvb, offset + 4), + ip_to_str((guint8 *)&ip4addr)); + break; + case FORMAT_IP_LOC: + length = 8 + sizeof(ip4addr); + ip4addr = tvb_get_ipv4(tvb, offset + 2); /* IP part of the RD */ + ip4addr2 = tvb_get_ipv4(tvb, offset + 8); /* Next Hop */ + ep_strbuf_printf(strbuf, "Empty Label Stack RD=%s:%u IPv4=%s", + ip_to_str((guint8 *)&ip4addr), + tvb_get_ntohs(tvb, offset + 6), + ip_to_str((guint8 *)&ip4addr2)); + break ; default: length = 0 ; - ep_strbuf_printf(strbuf, "Unknown SAFI (%u) for AFI %u", safi, afi); + ep_strbuf_printf(strbuf, "Unknown (0x%04x) labeled VPN IPv4 address format",rd_type); break; - } - break; + } /* switch (rd_type) */ + break; + default: + length = 0 ; + ep_strbuf_printf(strbuf, "Unknown SAFI (%u) for AFI %u", safi, afi); + break; + } /* switch (safi) */ + break; case AFNUM_INET6: - switch (safi) { - case SAFNUM_UNICAST: - case SAFNUM_MULCAST: - case SAFNUM_UNIMULC: - case SAFNUM_MPLS_LABEL: - case SAFNUM_TUNNEL: - length = 16 ; - tvb_get_ipv6(tvb, offset, &ip6addr); - ep_strbuf_printf(strbuf, "%s", ip6_to_str(&ip6addr)); + switch (safi) { + case SAFNUM_UNICAST: + case SAFNUM_MULCAST: + case SAFNUM_UNIMULC: + case SAFNUM_MPLS_LABEL: + case SAFNUM_TUNNEL: + length = 16 ; + tvb_get_ipv6(tvb, offset, &ip6addr); + ep_strbuf_printf(strbuf, "%s", ip6_to_str(&ip6addr)); + break; + case SAFNUM_LAB_VPNUNICAST: + case SAFNUM_LAB_VPNMULCAST: + case SAFNUM_LAB_VPNUNIMULC: + rd_type=tvb_get_ntohs(tvb,offset) ; + switch (rd_type) { + case FORMAT_AS2_LOC: + length = 8 + 16; + tvb_get_ipv6(tvb, offset + 8, &ip6addr); /* Next Hop */ + ep_strbuf_printf(strbuf, "Empty Label Stack RD=%u:%u IPv6=%s", + tvb_get_ntohs(tvb, offset + 2), + tvb_get_ntohl(tvb, offset + 4), + ip6_to_str(&ip6addr)); break; - case SAFNUM_LAB_VPNUNICAST: - case SAFNUM_LAB_VPNMULCAST: - case SAFNUM_LAB_VPNUNIMULC: - rd_type=tvb_get_ntohs(tvb,offset) ; - switch (rd_type) { - case FORMAT_AS2_LOC: - length = 8 + 16; - tvb_get_ipv6(tvb, offset + 8, &ip6addr); /* Next Hop */ - ep_strbuf_printf(strbuf, "Empty Label Stack RD=%u:%u IPv6=%s", - tvb_get_ntohs(tvb, offset + 2), - tvb_get_ntohl(tvb, offset + 4), - ip6_to_str(&ip6addr)); - break; - case FORMAT_IP_LOC: - length = 8 + 16; - ip4addr = tvb_get_ipv4(tvb, offset + 2); /* IP part of the RD */ - tvb_get_ipv6(tvb, offset + 8, &ip6addr); /* Next Hop */ - ep_strbuf_printf(strbuf, "Empty Label Stack RD=%s:%u IPv6=%s", - ip_to_str((guint8 *)&ip4addr), - tvb_get_ntohs(tvb, offset + 6), - ip6_to_str(&ip6addr)); - break ; - default: - length = 0 ; - ep_strbuf_printf(strbuf, "Unknown (0x%04x) labeled VPN IPv6 address format",rd_type); - break; - } - break; + case FORMAT_IP_LOC: + length = 8 + 16; + ip4addr = tvb_get_ipv4(tvb, offset + 2); /* IP part of the RD */ + tvb_get_ipv6(tvb, offset + 8, &ip6addr); /* Next Hop */ + ep_strbuf_printf(strbuf, "Empty Label Stack RD=%s:%u IPv6=%s", + ip_to_str((guint8 *)&ip4addr), + tvb_get_ntohs(tvb, offset + 6), + ip6_to_str(&ip6addr)); + break ; default: length = 0 ; - ep_strbuf_printf(strbuf, "Unknown SAFI (%u) for AFI %u", safi, afi); + ep_strbuf_printf(strbuf, "Unknown (0x%04x) labeled VPN IPv6 address format",rd_type); break; - } - break; + } /* switch (rd_type) */ + break; + default: + length = 0 ; + ep_strbuf_printf(strbuf, "Unknown SAFI (%u) for AFI %u", safi, afi); + break; + } /* switch (safi) */ + break; case AFNUM_L2VPN: - case AFNUM_L2VPN_OLD: - switch (safi) { - case SAFNUM_LAB_VPNUNICAST: /* only labeles prefixes do make sense */ - case SAFNUM_LAB_VPNMULCAST: - case SAFNUM_LAB_VPNUNIMULC: - case SAFNUM_VPLS: - length = 4; /* the next-hop is simply an ipv4 addr */ - ip4addr = tvb_get_ipv4(tvb, offset + 0); - ep_strbuf_printf(strbuf, "IPv4=%s", + case AFNUM_L2VPN_OLD: + switch (safi) { + case SAFNUM_LAB_VPNUNICAST: /* only labeles prefixes do make sense */ + case SAFNUM_LAB_VPNMULCAST: + case SAFNUM_LAB_VPNUNIMULC: + case SAFNUM_VPLS: + length = 4; /* the next-hop is simply an ipv4 addr */ + ip4addr = tvb_get_ipv4(tvb, offset + 0); + ep_strbuf_printf(strbuf, "IPv4=%s", ip_to_str((guint8 *)&ip4addr)); - break; - default: - length = 0 ; - ep_strbuf_printf(strbuf, "Unknown SAFI (%u) for AFI %u", safi, afi); - break; - } - break; + break; + default: + length = 0 ; + ep_strbuf_printf(strbuf, "Unknown SAFI (%u) for AFI %u", safi, afi); + break; + } /* switch (safi) */ + break; default: - length = 0 ; - ep_strbuf_printf(strbuf, "Unknown AFI (%u) value", afi); - break; - } + length = 0 ; + ep_strbuf_printf(strbuf, "Unknown AFI (%u) value", afi); + break; + } /* switch (afi) */ return(length) ; } @@ -682,422 +682,422 @@ decode_prefix_MP(proto_tree *tree, int hf_addr4, int hf_addr6, case AFNUM_INET: switch (safi) { - case SAFNUM_UNICAST: - case SAFNUM_MULCAST: - case SAFNUM_UNIMULC: - total_length = decode_prefix4(tree, hf_addr4, tvb, offset, 0, tag); - if (total_length < 0) - return -1; - break; + case SAFNUM_UNICAST: + case SAFNUM_MULCAST: + case SAFNUM_UNIMULC: + total_length = decode_prefix4(tree, hf_addr4, tvb, offset, 0, tag); + if (total_length < 0) + return -1; + break; - case SAFNUM_MPLS_LABEL: - plen = tvb_get_guint8(tvb, offset); - stack_strbuf = ep_strbuf_new_label(NULL); - labnum = decode_MPLS_stack(tvb, offset + 1, stack_strbuf); + case SAFNUM_MPLS_LABEL: + plen = tvb_get_guint8(tvb, offset); + stack_strbuf = ep_strbuf_new_label(NULL); + labnum = decode_MPLS_stack(tvb, offset + 1, stack_strbuf); - offset += (1 + labnum * 3); - if (plen <= (labnum * 3*8)) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled IPv4 prefix length %u invalid", - tag, plen); - return -1; - } - plen -= (labnum * 3*8); - length = ipv4_addr_and_mask(tvb, offset, ip4addr.addr_bytes, plen); - if (length < 0) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled IPv4 prefix length %u invalid", - tag, plen + (labnum * 3*8)); - return -1; - } - - ti = proto_tree_add_text(tree, tvb, start_offset, - (offset + length) - start_offset, - "Label Stack=%s IPv4=%s/%u", - stack_strbuf->str, ip_to_str(ip4addr.addr_bytes), plen); - prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix); - proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u", - tag, plen + labnum * 3 * 8); - proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, "%s Label Stack: %s", - tag, stack_strbuf->str); - if (hf_addr4 != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset, - length, ip4addr.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset, length, - "%s IPv4 prefix: %s", - tag, ip_to_str(ip4addr.addr_bytes)); - } - total_length = (1 + labnum*3) + length; - break; - - case SAFNUM_TUNNEL: - plen = tvb_get_guint8(tvb, offset); - if (plen <= 16){ - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Tunnel IPv4 prefix length %u invalid", - tag, plen); - return -1; - } - tnl_id = tvb_get_ntohs(tvb, offset + 1); - offset += 3; /* Length + Tunnel Id */ - plen -= 16; /* 2-octet Identifier */ - length = ipv4_addr_and_mask(tvb, offset, ip4addr.addr_bytes, plen); - if (length < 0) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Tunnel IPv4 prefix length %u invalid", - tag, plen + 16); - return -1; - } - ti = proto_tree_add_text(tree, tvb, start_offset, - (offset + length) - start_offset, - "Tunnel Identifier=0x%x IPv4=%s/%u", - tnl_id, ip_to_str(ip4addr.addr_bytes), plen); - prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix); - - proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u", - tag, plen + 16); - proto_tree_add_item(prefix_tree, hf_bgp_mp_nlri_tnl_id, tvb, - start_offset + 1, 2, FALSE); - if (hf_addr4 != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset, - length, ip4addr.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset, length, - "%s IPv4 prefix: %s", - tag, ip_to_str(ip4addr.addr_bytes)); - } - total_length = 1 + 2 + length; /* length field + Tunnel Id + IPv4 len */ - break; - - case SAFNUM_LAB_VPNUNICAST: - case SAFNUM_LAB_VPNMULCAST: - case SAFNUM_LAB_VPNUNIMULC: - plen = tvb_get_guint8(tvb, offset); - stack_strbuf = ep_strbuf_new_label(NULL); - labnum = decode_MPLS_stack(tvb, offset + 1, stack_strbuf); - - offset += (1 + labnum * 3); - if (plen <= (labnum * 3*8)) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled VPN IPv4 prefix length %u invalid", - tag, plen); - return -1; - } - plen -= (labnum * 3*8); - - rd_type = tvb_get_ntohs(tvb, offset); - if (plen < 8*8) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled VPN IPv4 prefix length %u invalid", - tag, plen + (labnum * 3*8)); - return -1; - } - plen -= 8*8; - - switch (rd_type) { - - case FORMAT_AS2_LOC: /* Code borrowed from the decode_prefix4 function */ - length = ipv4_addr_and_mask(tvb, offset + 8, ip4addr.addr_bytes, plen); + offset += (1 + labnum * 3); + if (plen <= (labnum * 3*8)) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled IPv4 prefix length %u invalid", + tag, plen); + return -1; + } + plen -= (labnum * 3*8); + length = ipv4_addr_and_mask(tvb, offset, ip4addr.addr_bytes, plen); if (length < 0) { proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled VPN IPv4 prefix length %u invalid", - tag, plen + (labnum * 3*8) + 8*8); + "%s Labeled IPv4 prefix length %u invalid", + tag, plen + (labnum * 3*8)); return -1; } ti = proto_tree_add_text(tree, tvb, start_offset, - (offset + 8 + length) - start_offset, - "Label Stack=%s RD=%u:%u, IPv4=%s/%u", - stack_strbuf->str, - tvb_get_ntohs(tvb, offset + 2), - tvb_get_ntohl(tvb, offset + 4), - ip_to_str(ip4addr.addr_bytes), plen); + (offset + length) - start_offset, + "Label Stack=%s IPv4=%s/%u", + stack_strbuf->str, ip_to_str(ip4addr.addr_bytes), plen); prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix); proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u", - tag, plen + labnum * 3 * 8 + 8 * 8); - proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, - "%s Label Stack: %s", tag, stack_strbuf->str); - proto_tree_add_text(prefix_tree, tvb, start_offset + 1 + 3 * labnum, 8, - "%s Route Distinguisher: %u:%u", tag, tvb_get_ntohs(tvb, offset + 2), - tvb_get_ntohl(tvb, offset + 4)); + tag, plen + labnum * 3 * 8); + proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, "%s Label Stack: %s", + tag, stack_strbuf->str); if (hf_addr4 != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, - offset + 8, length, ip4addr.addr); + proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset, + length, ip4addr.addr); } else { - proto_tree_add_text(prefix_tree, tvb, offset + 8, - length, "%s IPv4 prefix: %s", tag, - ip_to_str(ip4addr.addr_bytes)); + proto_tree_add_text(prefix_tree, tvb, offset, length, + "%s IPv4 prefix: %s", + tag, ip_to_str(ip4addr.addr_bytes)); } - total_length = (1 + labnum * 3 + 8) + length; + total_length = (1 + labnum*3) + length; break; - case FORMAT_IP_LOC: /* Code borrowed from the decode_prefix4 function */ - tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 2, 4); - - length = ipv4_addr_and_mask(tvb, offset + 8, ip4addr2.addr_bytes, plen); - if (length < 0) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled VPN IPv4 prefix length %u invalid", - tag, plen + (labnum * 3*8) + 8*8); - return -1; + case SAFNUM_TUNNEL: + plen = tvb_get_guint8(tvb, offset); + if (plen <= 16){ + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Tunnel IPv4 prefix length %u invalid", + tag, plen); + return -1; + } + tnl_id = tvb_get_ntohs(tvb, offset + 1); + offset += 3; /* Length + Tunnel Id */ + plen -= 16; /* 2-octet Identifier */ + length = ipv4_addr_and_mask(tvb, offset, ip4addr.addr_bytes, plen); + if (length < 0) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Tunnel IPv4 prefix length %u invalid", + tag, plen + 16); + return -1; } - ti = proto_tree_add_text(tree, tvb, start_offset, - (offset + 8 + length) - start_offset, - "Label Stack=%s RD=%s:%u, IPv4=%s/%u", - stack_strbuf->str, - ip_to_str(ip4addr.addr_bytes), - tvb_get_ntohs(tvb, offset + 6), - ip_to_str(ip4addr2.addr_bytes), - plen); - prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix); - proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u", - tag, plen + labnum * 3 * 8 + 8 * 8); - proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, - "%s Label Stack: %s", tag, stack_strbuf->str); - proto_tree_add_text(prefix_tree, tvb, start_offset + 1 + 3 * labnum, 8, - "%s Route Distinguisher: %s:%u", tag, ip_to_str(ip4addr.addr_bytes), - tvb_get_ntohs(tvb, offset + 6)); - if (hf_addr4 != -1) { - proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, - offset + 8, length, ip4addr2.addr); - } else { - proto_tree_add_text(prefix_tree, tvb, offset + 8, - length, "%s IPv4 prefix: %s", tag, - ip_to_str(ip4addr2.addr_bytes)); - } - total_length = (1 + labnum * 3 + 8) + length; + (offset + length) - start_offset, + "Tunnel Identifier=0x%x IPv4=%s/%u", + tnl_id, ip_to_str(ip4addr.addr_bytes), plen); + prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix); + + proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u", + tag, plen + 16); + proto_tree_add_item(prefix_tree, hf_bgp_mp_nlri_tnl_id, tvb, + start_offset + 1, 2, FALSE); + if (hf_addr4 != -1) { + proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, offset, + length, ip4addr.addr); + } else { + proto_tree_add_text(prefix_tree, tvb, offset, length, + "%s IPv4 prefix: %s", + tag, ip_to_str(ip4addr.addr_bytes)); + } + total_length = 1 + 2 + length; /* length field + Tunnel Id + IPv4 len */ + break; + + case SAFNUM_LAB_VPNUNICAST: + case SAFNUM_LAB_VPNMULCAST: + case SAFNUM_LAB_VPNUNIMULC: + plen = tvb_get_guint8(tvb, offset); + stack_strbuf = ep_strbuf_new_label(NULL); + labnum = decode_MPLS_stack(tvb, offset + 1, stack_strbuf); + + offset += (1 + labnum * 3); + if (plen <= (labnum * 3*8)) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled VPN IPv4 prefix length %u invalid", + tag, plen); + return -1; + } + plen -= (labnum * 3*8); + + rd_type = tvb_get_ntohs(tvb, offset); + if (plen < 8*8) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled VPN IPv4 prefix length %u invalid", + tag, plen + (labnum * 3*8)); + return -1; + } + plen -= 8*8; + + switch (rd_type) { + + case FORMAT_AS2_LOC: /* Code borrowed from the decode_prefix4 function */ + length = ipv4_addr_and_mask(tvb, offset + 8, ip4addr.addr_bytes, plen); + if (length < 0) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled VPN IPv4 prefix length %u invalid", + tag, plen + (labnum * 3*8) + 8*8); + return -1; + } + + ti = proto_tree_add_text(tree, tvb, start_offset, + (offset + 8 + length) - start_offset, + "Label Stack=%s RD=%u:%u, IPv4=%s/%u", + stack_strbuf->str, + tvb_get_ntohs(tvb, offset + 2), + tvb_get_ntohl(tvb, offset + 4), + ip_to_str(ip4addr.addr_bytes), plen); + prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix); + proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u", + tag, plen + labnum * 3 * 8 + 8 * 8); + proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, + "%s Label Stack: %s", tag, stack_strbuf->str); + proto_tree_add_text(prefix_tree, tvb, start_offset + 1 + 3 * labnum, 8, + "%s Route Distinguisher: %u:%u", tag, tvb_get_ntohs(tvb, offset + 2), + tvb_get_ntohl(tvb, offset + 4)); + if (hf_addr4 != -1) { + proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, + offset + 8, length, ip4addr.addr); + } else { + proto_tree_add_text(prefix_tree, tvb, offset + 8, + length, "%s IPv4 prefix: %s", tag, + ip_to_str(ip4addr.addr_bytes)); + } + total_length = (1 + labnum * 3 + 8) + length; + break; + + case FORMAT_IP_LOC: /* Code borrowed from the decode_prefix4 function */ + tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 2, 4); + + length = ipv4_addr_and_mask(tvb, offset + 8, ip4addr2.addr_bytes, plen); + if (length < 0) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled VPN IPv4 prefix length %u invalid", + tag, plen + (labnum * 3*8) + 8*8); + return -1; + } + + ti = proto_tree_add_text(tree, tvb, start_offset, + (offset + 8 + length) - start_offset, + "Label Stack=%s RD=%s:%u, IPv4=%s/%u", + stack_strbuf->str, + ip_to_str(ip4addr.addr_bytes), + tvb_get_ntohs(tvb, offset + 6), + ip_to_str(ip4addr2.addr_bytes), + plen); + prefix_tree = proto_item_add_subtree(ti, ett_bgp_prefix); + proto_tree_add_text(prefix_tree, tvb, start_offset, 1, "%s Prefix length: %u", + tag, plen + labnum * 3 * 8 + 8 * 8); + proto_tree_add_text(prefix_tree, tvb, start_offset + 1, 3 * labnum, + "%s Label Stack: %s", tag, stack_strbuf->str); + proto_tree_add_text(prefix_tree, tvb, start_offset + 1 + 3 * labnum, 8, + "%s Route Distinguisher: %s:%u", tag, ip_to_str(ip4addr.addr_bytes), + tvb_get_ntohs(tvb, offset + 6)); + if (hf_addr4 != -1) { + proto_tree_add_ipv4(prefix_tree, hf_addr4, tvb, + offset + 8, length, ip4addr2.addr); + } else { + proto_tree_add_text(prefix_tree, tvb, offset + 8, + length, "%s IPv4 prefix: %s", tag, + ip_to_str(ip4addr2.addr_bytes)); + } + total_length = (1 + labnum * 3 + 8) + length; + break; + + default: + proto_tree_add_text(tree, tvb, start_offset, + (offset - start_offset) + 2, + "Unknown labeled VPN IPv4 address format %u", rd_type); + return -1; + } /* switch (rd_type) */ break; default: - proto_tree_add_text(tree, tvb, start_offset, - (offset - start_offset) + 2, - "Unknown labeled VPN IPv4 address format %u", rd_type); + proto_tree_add_text(tree, tvb, start_offset, 0, + "Unknown SAFI (%u) for AFI %u", safi, afi); return -1; - } - break; - - default: - proto_tree_add_text(tree, tvb, start_offset, 0, - "Unknown SAFI (%u) for AFI %u", safi, afi); - return -1; - } + } /* switch (safi) */ break; case AFNUM_INET6: switch (safi) { - case SAFNUM_UNICAST: - case SAFNUM_MULCAST: - case SAFNUM_UNIMULC: - total_length = decode_prefix6(tree, hf_addr6, tvb, offset, 0, tag); - if (total_length < 0) - return -1; - break; - - case SAFNUM_MPLS_LABEL: - plen = tvb_get_guint8(tvb, offset); - stack_strbuf = ep_strbuf_new_label(NULL); - labnum = decode_MPLS_stack(tvb, offset + 1, stack_strbuf); - - offset += (1 + labnum * 3); - if (plen <= (labnum * 3*8)) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled IPv6 prefix length %u invalid", tag, plen); - return -1; - } - plen -= (labnum * 3*8); - - length = ipv6_addr_and_mask(tvb, offset, &ip6addr, plen); - if (length < 0) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled IPv6 prefix length %u invalid", - tag, plen + (labnum * 3*8)); - return -1; - } - - ti = proto_tree_add_text(tree, tvb, start_offset, - (offset + length) - start_offset, - "Label Stack=%s, IPv6=%s/%u", - stack_strbuf->str, - ip6_to_str(&ip6addr), plen); - total_length = (1 + labnum * 3) + length; - break; - - case SAFNUM_TUNNEL: - plen = tvb_get_guint8(tvb, offset); - if (plen <= 16){ - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Tunnel IPv6 prefix length %u invalid", - tag, plen); - return -1; - } - tnl_id = tvb_get_ntohs(tvb, offset + 1); - offset += 3; /* Length + Tunnel Id */ - plen -= 16; /* 2-octet Identifier */ - length = ipv6_addr_and_mask(tvb, offset, &ip6addr, plen); - if (length < 0) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Tunnel IPv6 prefix length %u invalid", - tag, plen + 16); - return -1; - } - ti = proto_tree_add_text(tree, tvb, start_offset, - (offset + length) - start_offset, - "Tunnel Identifier=0x%x IPv6=%s/%u", - tnl_id, ip6_to_str(&ip6addr), plen); - total_length = (1 + 2) + length; /* length field + Tunnel Id + IPv4 len */ - break; - - case SAFNUM_LAB_VPNUNICAST: - case SAFNUM_LAB_VPNMULCAST: - case SAFNUM_LAB_VPNUNIMULC: - plen = tvb_get_guint8(tvb, offset); - stack_strbuf = ep_strbuf_new_label(NULL); - labnum = decode_MPLS_stack(tvb, offset + 1, stack_strbuf); - - offset += (1 + labnum * 3); - if (plen <= (labnum * 3*8)) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled VPN IPv6 prefix length %u invalid", tag, plen); - return -1; - } - plen -= (labnum * 3*8); - - rd_type = tvb_get_ntohs(tvb,offset); - if (plen < 8*8) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled VPN IPv6 prefix length %u invalid", - tag, plen + (labnum * 3*8)); - return -1; - } - plen -= 8*8; - - switch (rd_type) { - - case FORMAT_AS2_LOC: - length = ipv6_addr_and_mask(tvb, offset + 8, &ip6addr, plen); - if (length < 0) { - proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled VPN IPv6 prefix length %u invalid", - tag, plen + (labnum * 3*8) + 8*8); + case SAFNUM_UNICAST: + case SAFNUM_MULCAST: + case SAFNUM_UNIMULC: + total_length = decode_prefix6(tree, hf_addr6, tvb, offset, 0, tag); + if (total_length < 0) return -1; - } - - ti = proto_tree_add_text(tree, tvb, start_offset, - (offset + 8 + length) - start_offset, - "Label Stack=%s RD=%u:%u, IPv6=%s/%u", - stack_strbuf->str, - tvb_get_ntohs(tvb, offset + 2), - tvb_get_ntohl(tvb, offset + 4), - ip6_to_str(&ip6addr), plen); - total_length = (1 + labnum * 3 + 8) + length; break; - case FORMAT_IP_LOC: - tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 2, 4); + case SAFNUM_MPLS_LABEL: + plen = tvb_get_guint8(tvb, offset); + stack_strbuf = ep_strbuf_new_label(NULL); + labnum = decode_MPLS_stack(tvb, offset + 1, stack_strbuf); - length = ipv6_addr_and_mask(tvb, offset + 8, &ip6addr, plen); + offset += (1 + labnum * 3); + if (plen <= (labnum * 3*8)) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled IPv6 prefix length %u invalid", tag, plen); + return -1; + } + plen -= (labnum * 3*8); + + length = ipv6_addr_and_mask(tvb, offset, &ip6addr, plen); if (length < 0) { proto_tree_add_text(tree, tvb, start_offset, 1, - "%s Labeled VPN IPv6 prefix length %u invalid", - tag, plen + (labnum * 3*8) + 8*8); + "%s Labeled IPv6 prefix length %u invalid", + tag, plen + (labnum * 3*8)); return -1; } ti = proto_tree_add_text(tree, tvb, start_offset, - (offset + 8 + length) - start_offset, - "Label Stack=%s RD=%s:%u, IPv6=%s/%u", - stack_strbuf->str, - ip_to_str(ip4addr.addr_bytes), - tvb_get_ntohs(tvb, offset + 6), - ip6_to_str(&ip6addr), plen); - total_length = (1 + labnum * 3 + 8) + length; + (offset + length) - start_offset, + "Label Stack=%s, IPv6=%s/%u", + stack_strbuf->str, + ip6_to_str(&ip6addr), plen); + total_length = (1 + labnum * 3) + length; + break; + + case SAFNUM_TUNNEL: + plen = tvb_get_guint8(tvb, offset); + if (plen <= 16){ + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Tunnel IPv6 prefix length %u invalid", + tag, plen); + return -1; + } + tnl_id = tvb_get_ntohs(tvb, offset + 1); + offset += 3; /* Length + Tunnel Id */ + plen -= 16; /* 2-octet Identifier */ + length = ipv6_addr_and_mask(tvb, offset, &ip6addr, plen); + if (length < 0) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Tunnel IPv6 prefix length %u invalid", + tag, plen + 16); + return -1; + } + ti = proto_tree_add_text(tree, tvb, start_offset, + (offset + length) - start_offset, + "Tunnel Identifier=0x%x IPv6=%s/%u", + tnl_id, ip6_to_str(&ip6addr), plen); + total_length = (1 + 2) + length; /* length field + Tunnel Id + IPv4 len */ + break; + + case SAFNUM_LAB_VPNUNICAST: + case SAFNUM_LAB_VPNMULCAST: + case SAFNUM_LAB_VPNUNIMULC: + plen = tvb_get_guint8(tvb, offset); + stack_strbuf = ep_strbuf_new_label(NULL); + labnum = decode_MPLS_stack(tvb, offset + 1, stack_strbuf); + + offset += (1 + labnum * 3); + if (plen <= (labnum * 3*8)) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled VPN IPv6 prefix length %u invalid", tag, plen); + return -1; + } + plen -= (labnum * 3*8); + + rd_type = tvb_get_ntohs(tvb,offset); + if (plen < 8*8) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled VPN IPv6 prefix length %u invalid", + tag, plen + (labnum * 3*8)); + return -1; + } + plen -= 8*8; + + switch (rd_type) { + + case FORMAT_AS2_LOC: + length = ipv6_addr_and_mask(tvb, offset + 8, &ip6addr, plen); + if (length < 0) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled VPN IPv6 prefix length %u invalid", + tag, plen + (labnum * 3*8) + 8*8); + return -1; + } + + ti = proto_tree_add_text(tree, tvb, start_offset, + (offset + 8 + length) - start_offset, + "Label Stack=%s RD=%u:%u, IPv6=%s/%u", + stack_strbuf->str, + tvb_get_ntohs(tvb, offset + 2), + tvb_get_ntohl(tvb, offset + 4), + ip6_to_str(&ip6addr), plen); + total_length = (1 + labnum * 3 + 8) + length; + break; + + case FORMAT_IP_LOC: + tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 2, 4); + + length = ipv6_addr_and_mask(tvb, offset + 8, &ip6addr, plen); + if (length < 0) { + proto_tree_add_text(tree, tvb, start_offset, 1, + "%s Labeled VPN IPv6 prefix length %u invalid", + tag, plen + (labnum * 3*8) + 8*8); + return -1; + } + + ti = proto_tree_add_text(tree, tvb, start_offset, + (offset + 8 + length) - start_offset, + "Label Stack=%s RD=%s:%u, IPv6=%s/%u", + stack_strbuf->str, + ip_to_str(ip4addr.addr_bytes), + tvb_get_ntohs(tvb, offset + 6), + ip6_to_str(&ip6addr), plen); + total_length = (1 + labnum * 3 + 8) + length; + break; + + default: + proto_tree_add_text(tree, tvb, start_offset, 0, + "Unknown labeled VPN IPv6 address format %u", rd_type); + return -1; + } /* switch (rd_type) */ break; default: proto_tree_add_text(tree, tvb, start_offset, 0, - "Unknown labeled VPN IPv6 address format %u", rd_type); + "Unknown SAFI (%u) for AFI %u", safi, afi); return -1; - } - break; - - default: - proto_tree_add_text(tree, tvb, start_offset, 0, - "Unknown SAFI (%u) for AFI %u", safi, afi); - return -1; - } + } /* switch (safi) */ break; case AFNUM_L2VPN: case AFNUM_L2VPN_OLD: switch (safi) { - case SAFNUM_LAB_VPNUNICAST: - case SAFNUM_LAB_VPNMULCAST: - case SAFNUM_LAB_VPNUNIMULC: - case SAFNUM_VPLS: - plen = tvb_get_ntohs(tvb,offset); - rd_type=tvb_get_ntohs(tvb,offset+2); - ce_id=tvb_get_ntohs(tvb,offset+10); - labblk_off=tvb_get_ntohs(tvb,offset+12); - labblk_size=tvb_get_ntohs(tvb,offset+14); - stack_strbuf = ep_strbuf_new_label(NULL); - labnum = decode_MPLS_stack(tvb, offset + 16, stack_strbuf); + case SAFNUM_LAB_VPNUNICAST: + case SAFNUM_LAB_VPNMULCAST: + case SAFNUM_LAB_VPNUNIMULC: + case SAFNUM_VPLS: + plen = tvb_get_ntohs(tvb,offset); + rd_type=tvb_get_ntohs(tvb,offset+2); + ce_id=tvb_get_ntohs(tvb,offset+10); + labblk_off=tvb_get_ntohs(tvb,offset+12); + labblk_size=tvb_get_ntohs(tvb,offset+14); + stack_strbuf = ep_strbuf_new_label(NULL); + labnum = decode_MPLS_stack(tvb, offset + 16, stack_strbuf); - switch (rd_type) { + switch (rd_type) { - case FORMAT_AS2_LOC: - tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 6, 4); - proto_tree_add_text(tree, tvb, start_offset, - (offset + plen + 1) - start_offset, - "RD: %u:%s, CE-ID: %u, Label-Block Offset: %u, " - "Label-Block Size: %u Label Base %s", - tvb_get_ntohs(tvb, offset + 4), - ip_to_str(ip4addr.addr_bytes), - ce_id, - labblk_off, - labblk_size, - stack_strbuf->str); - break; + case FORMAT_AS2_LOC: + tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 6, 4); + proto_tree_add_text(tree, tvb, start_offset, + (offset + plen + 1) - start_offset, + "RD: %u:%s, CE-ID: %u, Label-Block Offset: %u, " + "Label-Block Size: %u Label Base %s", + tvb_get_ntohs(tvb, offset + 4), + ip_to_str(ip4addr.addr_bytes), + ce_id, + labblk_off, + labblk_size, + stack_strbuf->str); + break; - case FORMAT_IP_LOC: - tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 4, 4); - proto_tree_add_text(tree, tvb, offset, - (offset + plen + 1) - start_offset, - "RD: %s:%u, CE-ID: %u, Label-Block Offset: %u, " - "Label-Block Size: %u, Label Base %s", - ip_to_str(ip4addr.addr_bytes), - tvb_get_ntohs(tvb, offset + 8), - ce_id, - labblk_off, - labblk_size, - stack_strbuf->str); + case FORMAT_IP_LOC: + tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 4, 4); + proto_tree_add_text(tree, tvb, offset, + (offset + plen + 1) - start_offset, + "RD: %s:%u, CE-ID: %u, Label-Block Offset: %u, " + "Label-Block Size: %u, Label Base %s", + ip_to_str(ip4addr.addr_bytes), + tvb_get_ntohs(tvb, offset + 8), + ce_id, + labblk_off, + labblk_size, + stack_strbuf->str); + break; + + default: + proto_tree_add_text(tree, tvb, start_offset, + (offset - start_offset) + 2, + "Unknown labeled VPN address format %u", rd_type); + return -1; + } /* switch (rd_type) */ + /* FIXME there are subTLVs left to decode ... for now lets omit them */ + total_length = plen+2; break; default: - proto_tree_add_text(tree, tvb, start_offset, - (offset - start_offset) + 2, - "Unknown labeled VPN address format %u", rd_type); + proto_tree_add_text(tree, tvb, start_offset, 0, + "Unknown SAFI (%u) for AFI %u", safi, afi); return -1; - } - /* FIXME there are subTLVs left to decode ... for now lets omit them */ - total_length = plen+2; - break; + } /* switch (safi) */ + break; default: proto_tree_add_text(tree, tvb, start_offset, 0, - "Unknown SAFI (%u) for AFI %u", safi, afi); + "Unknown AFI (%u) value", afi); return -1; - } - break; - - default: - proto_tree_add_text(tree, tvb, start_offset, 0, - "Unknown AFI (%u) value", afi); - return -1; - } + } /* switch (afi) */ return(total_length); } @@ -1117,220 +1117,220 @@ dissect_bgp_capability_item(tvbuff_t *tvb, int *p, proto_tree *tree, int ctype, /* check the capability type */ switch (ctype) { - case BGP_CAPABILITY_RESERVED: - proto_tree_add_text(tree, tvb, *p - 2, 1, - "Capability code: %s (%d)", val_to_str(ctype, - capability_vals, "Unknown capability"), ctype); - proto_tree_add_text(tree, tvb, *p - 1, - 1, "Capability length: %u byte%s", clen, - plurality(clen, "", "s")); - if (clen != 0) { - proto_tree_add_text(tree, tvb, *p, - clen, "Capability value: Unknown"); - } - *p += clen; - break; - case BGP_CAPABILITY_MULTIPROTOCOL: - proto_tree_add_text(tree, tvb, *p - 2, 1, - "Capability code: %s (%d)", val_to_str(ctype, - capability_vals, "Unknown capability"), ctype); - if (clen != 4) { - proto_tree_add_text(tree, tvb, *p - 1, - 1, "Capability length: Invalid"); - proto_tree_add_text(tree, tvb, *p, - clen, "Capability value: Unknown"); - } - else { - proto_tree_add_text(tree, tvb, *p - 1, - 1, "Capability length: %u byte%s", clen, - plurality(clen, "", "s")); - ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); - subtree = proto_item_add_subtree(ti, ett_bgp_option); - /* AFI */ - i = tvb_get_ntohs(tvb, *p); - proto_tree_add_text(subtree, tvb, *p, - 2, "Address family identifier: %s (%u)", - val_to_str(i, afn_vals, "Unknown"), i); - *p += 2; - /* Reserved */ - proto_tree_add_text(subtree, tvb, *p, 1, "Reserved: 1 byte"); - (*p)++; - /* SAFI */ - i = tvb_get_guint8(tvb, *p); - proto_tree_add_text(subtree, tvb, *p, - 1, "Subsequent address family identifier: %s (%u)", - val_to_str(i, bgpattr_nlri_safi, - i >= 128 ? "Vendor specific" : "Unknown"), i); - (*p)++; - } - break; - case BGP_CAPABILITY_GRACEFUL_RESTART: - proto_tree_add_text(tree, tvb, *p - 2, 1, - "Capability code: %s (%d)", val_to_str(ctype, - capability_vals, "Unknown capability"), ctype); - if (clen < 6) { - proto_tree_add_text(tree, tvb, *p, - clen, "Capability value: Invalid"); - *p += clen; - } - else { - proto_tree_add_text(tree, tvb, *p - 1, - 1, "Capability length: %u byte%s", clen, - plurality(clen, "", "s")); - ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); - subtree = proto_item_add_subtree(ti, ett_bgp_option); - /* Timers */ - i = tvb_get_ntohs(tvb, *p); - proto_tree_add_text(subtree, tvb, *p, - 2, "Restart Flags: [%s], Restart Time %us", - (i&0x8000) ? "R" : "none", i&0xfff); - *p += 2; - tclen = clen - 2; - /* - * what follows is alist of AFI/SAFI/flag triplets - * read it until the TLV ends - */ - while (tclen >=4) { - /* AFI */ - i = tvb_get_ntohs(tvb, *p); - proto_tree_add_text(subtree, tvb, *p, - 2, "Address family identifier: %s (%u)", - val_to_str(i, afn_vals, "Unknown"), i); - *p += 2; - /* SAFI */ - i = tvb_get_guint8(tvb, *p); - proto_tree_add_text(subtree, tvb, *p, - 1, "Subsequent address family identifier: %s (%u)", - val_to_str(i, bgpattr_nlri_safi, - i >= 128 ? "Vendor specific" : "Unknown"), i); - (*p)++; - /* flags */ - i = tvb_get_guint8(tvb, *p); - proto_tree_add_text(subtree, tvb, *p, 1, - "Preserve forwarding state: %s", - (i&0x80) ? "yes" : "no"); - (*p)++; - tclen-=4; - } - } - break; - case BGP_CAPABILITY_4_OCTET_AS_NUMBER: - proto_tree_add_text(tree, tvb, *p - 2, 1, - "Capability code: %s (%d)", val_to_str(ctype, - capability_vals, "Unknown capability"), ctype); - if (clen != 4) { - proto_tree_add_text(tree, tvb, *p, - clen, "Capability value: Invalid"); - } - else { - proto_tree_add_text(tree, tvb, *p - 1, - 1, "Capability length: %u byte%s", clen, - plurality(clen, "", "s")); - ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); - subtree = proto_item_add_subtree(ti, ett_bgp_option); - proto_tree_add_text(subtree, tvb, *p, 4, - "AS number: %d", tvb_get_ntohl(tvb, *p)); - } - *p += clen; - break; - case BGP_CAPABILITY_DYNAMIC_CAPABILITY: - proto_tree_add_text(tree, tvb, *p - 2, 1, - "Capability code: %s (%d)", val_to_str(ctype, - capability_vals, "Unknown capability"), ctype); - proto_tree_add_text(tree, tvb, *p - 1, 1, - "Capability length: %u byte%s", clen, - plurality(clen, "", "s")); - if (clen > 0) { - ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); - subtree = proto_item_add_subtree(ti, ett_bgp_option); - for (i = 0; (int)i <= clen; i++) { - proto_tree_add_text(subtree, tvb, *p, 1, - "Capability code: %s (%d)", val_to_str(ctype, - capability_vals, "Unknown capability"), - tvb_get_guint8(tvb, *p)); - (*p)++; - } - } - break; - case BGP_CAPABILITY_ROUTE_REFRESH_CISCO: - case BGP_CAPABILITY_ROUTE_REFRESH: - proto_tree_add_text(tree, tvb, *p - 2, 1, - "Capability code: %s (%d)", val_to_str(ctype, - capability_vals, "Unknown capability"), ctype); - if (clen != 0) { - proto_tree_add_text(tree, tvb, *p, - clen, "Capability value: Invalid"); - } - else { - proto_tree_add_text(tree, tvb, *p - 1, - 1, "Capability length: %u byte%s", clen, - plurality(clen, "", "s")); - } - *p += clen; - break; - case BGP_CAPABILITY_ORF_CISCO: - case BGP_CAPABILITY_COOPERATIVE_ROUTE_FILTERING: - proto_tree_add_text(tree, tvb, *p - 2, 1, - "Capability code: %s (%d)", val_to_str(ctype, - capability_vals, "Unknown capability"), ctype); - proto_tree_add_text(tree, tvb, *p - 1, - 1, "Capability length: %u byte%s", clen, - plurality(clen, "", "s")); - ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); - subtree = proto_item_add_subtree(ti, ett_bgp_option); - /* AFI */ - i = tvb_get_ntohs(tvb, *p); - proto_tree_add_text(subtree, tvb, *p, - 2, "Address family identifier: %s (%u)", - val_to_str(i, afn_vals, "Unknown"), i); - *p += 2; - /* Reserved */ - proto_tree_add_text(subtree, tvb, *p, 1, "Reserved: 1 byte"); - (*p)++; - /* SAFI */ - i = tvb_get_guint8(tvb, *p); - proto_tree_add_text(subtree, tvb, *p, - 1, "Subsequent address family identifier: %s (%u)", - val_to_str(i, bgpattr_nlri_safi, - i >= 128 ? "Vendor specific" : "Unknown"), i); - (*p)++; - /* Number of ORFs */ - orfnum = tvb_get_guint8(tvb, *p); - proto_tree_add_text(subtree, tvb, *p, 1, "Number of ORFs: %u", orfnum); - (*p)++; - for (i=0; i= 128 ? "Private use" : "Unknown", ctype); - proto_tree_add_text(tree, tvb, *p - 1, - 1, "Capability length: %u byte%s", clen, - plurality(clen, "", "s")); - if (clen != 0) { - proto_tree_add_text(tree, tvb, *p, - clen, "Capability value: Unknown"); - } - *p += clen; - break; - } + case BGP_CAPABILITY_RESERVED: + proto_tree_add_text(tree, tvb, *p - 2, 1, + "Capability code: %s (%d)", val_to_str(ctype, + capability_vals, "Unknown capability"), ctype); + proto_tree_add_text(tree, tvb, *p - 1, + 1, "Capability length: %u byte%s", clen, + plurality(clen, "", "s")); + if (clen != 0) { + proto_tree_add_text(tree, tvb, *p, + clen, "Capability value: Unknown"); + } + *p += clen; + break; + case BGP_CAPABILITY_MULTIPROTOCOL: + proto_tree_add_text(tree, tvb, *p - 2, 1, + "Capability code: %s (%d)", val_to_str(ctype, + capability_vals, "Unknown capability"), ctype); + if (clen != 4) { + proto_tree_add_text(tree, tvb, *p - 1, + 1, "Capability length: Invalid"); + proto_tree_add_text(tree, tvb, *p, + clen, "Capability value: Unknown"); + } + else { + proto_tree_add_text(tree, tvb, *p - 1, + 1, "Capability length: %u byte%s", clen, + plurality(clen, "", "s")); + ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); + subtree = proto_item_add_subtree(ti, ett_bgp_option); + /* AFI */ + i = tvb_get_ntohs(tvb, *p); + proto_tree_add_text(subtree, tvb, *p, + 2, "Address family identifier: %s (%u)", + val_to_str(i, afn_vals, "Unknown"), i); + *p += 2; + /* Reserved */ + proto_tree_add_text(subtree, tvb, *p, 1, "Reserved: 1 byte"); + (*p)++; + /* SAFI */ + i = tvb_get_guint8(tvb, *p); + proto_tree_add_text(subtree, tvb, *p, + 1, "Subsequent address family identifier: %s (%u)", + val_to_str(i, bgpattr_nlri_safi, + i >= 128 ? "Vendor specific" : "Unknown"), i); + (*p)++; + } + break; + case BGP_CAPABILITY_GRACEFUL_RESTART: + proto_tree_add_text(tree, tvb, *p - 2, 1, + "Capability code: %s (%d)", val_to_str(ctype, + capability_vals, "Unknown capability"), ctype); + if (clen < 6) { + proto_tree_add_text(tree, tvb, *p, + clen, "Capability value: Invalid"); + *p += clen; + } + else { + proto_tree_add_text(tree, tvb, *p - 1, + 1, "Capability length: %u byte%s", clen, + plurality(clen, "", "s")); + ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); + subtree = proto_item_add_subtree(ti, ett_bgp_option); + /* Timers */ + i = tvb_get_ntohs(tvb, *p); + proto_tree_add_text(subtree, tvb, *p, + 2, "Restart Flags: [%s], Restart Time %us", + (i&0x8000) ? "R" : "none", i&0xfff); + *p += 2; + tclen = clen - 2; + /* + * what follows is alist of AFI/SAFI/flag triplets + * read it until the TLV ends + */ + while (tclen >=4) { + /* AFI */ + i = tvb_get_ntohs(tvb, *p); + proto_tree_add_text(subtree, tvb, *p, + 2, "Address family identifier: %s (%u)", + val_to_str(i, afn_vals, "Unknown"), i); + *p += 2; + /* SAFI */ + i = tvb_get_guint8(tvb, *p); + proto_tree_add_text(subtree, tvb, *p, + 1, "Subsequent address family identifier: %s (%u)", + val_to_str(i, bgpattr_nlri_safi, + i >= 128 ? "Vendor specific" : "Unknown"), i); + (*p)++; + /* flags */ + i = tvb_get_guint8(tvb, *p); + proto_tree_add_text(subtree, tvb, *p, 1, + "Preserve forwarding state: %s", + (i&0x80) ? "yes" : "no"); + (*p)++; + tclen-=4; + } + } + break; + case BGP_CAPABILITY_4_OCTET_AS_NUMBER: + proto_tree_add_text(tree, tvb, *p - 2, 1, + "Capability code: %s (%d)", val_to_str(ctype, + capability_vals, "Unknown capability"), ctype); + if (clen != 4) { + proto_tree_add_text(tree, tvb, *p, + clen, "Capability value: Invalid"); + } + else { + proto_tree_add_text(tree, tvb, *p - 1, + 1, "Capability length: %u byte%s", clen, + plurality(clen, "", "s")); + ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); + subtree = proto_item_add_subtree(ti, ett_bgp_option); + proto_tree_add_text(subtree, tvb, *p, 4, + "AS number: %d", tvb_get_ntohl(tvb, *p)); + } + *p += clen; + break; + case BGP_CAPABILITY_DYNAMIC_CAPABILITY: + proto_tree_add_text(tree, tvb, *p - 2, 1, + "Capability code: %s (%d)", val_to_str(ctype, + capability_vals, "Unknown capability"), ctype); + proto_tree_add_text(tree, tvb, *p - 1, 1, + "Capability length: %u byte%s", clen, + plurality(clen, "", "s")); + if (clen > 0) { + ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); + subtree = proto_item_add_subtree(ti, ett_bgp_option); + for (i = 0; (int)i <= clen; i++) { + proto_tree_add_text(subtree, tvb, *p, 1, + "Capability code: %s (%d)", val_to_str(ctype, + capability_vals, "Unknown capability"), + tvb_get_guint8(tvb, *p)); + (*p)++; + } + } + break; + case BGP_CAPABILITY_ROUTE_REFRESH_CISCO: + case BGP_CAPABILITY_ROUTE_REFRESH: + proto_tree_add_text(tree, tvb, *p - 2, 1, + "Capability code: %s (%d)", val_to_str(ctype, + capability_vals, "Unknown capability"), ctype); + if (clen != 0) { + proto_tree_add_text(tree, tvb, *p, + clen, "Capability value: Invalid"); + } + else { + proto_tree_add_text(tree, tvb, *p - 1, + 1, "Capability length: %u byte%s", clen, + plurality(clen, "", "s")); + } + *p += clen; + break; + case BGP_CAPABILITY_ORF_CISCO: + case BGP_CAPABILITY_COOPERATIVE_ROUTE_FILTERING: + proto_tree_add_text(tree, tvb, *p - 2, 1, + "Capability code: %s (%d)", val_to_str(ctype, + capability_vals, "Unknown capability"), ctype); + proto_tree_add_text(tree, tvb, *p - 1, + 1, "Capability length: %u byte%s", clen, + plurality(clen, "", "s")); + ti = proto_tree_add_text(tree, tvb, *p, clen, "Capability value"); + subtree = proto_item_add_subtree(ti, ett_bgp_option); + /* AFI */ + i = tvb_get_ntohs(tvb, *p); + proto_tree_add_text(subtree, tvb, *p, + 2, "Address family identifier: %s (%u)", + val_to_str(i, afn_vals, "Unknown"), i); + *p += 2; + /* Reserved */ + proto_tree_add_text(subtree, tvb, *p, 1, "Reserved: 1 byte"); + (*p)++; + /* SAFI */ + i = tvb_get_guint8(tvb, *p); + proto_tree_add_text(subtree, tvb, *p, + 1, "Subsequent address family identifier: %s (%u)", + val_to_str(i, bgpattr_nlri_safi, + i >= 128 ? "Vendor specific" : "Unknown"), i); + (*p)++; + /* Number of ORFs */ + orfnum = tvb_get_guint8(tvb, *p); + proto_tree_add_text(subtree, tvb, *p, 1, "Number of ORFs: %u", orfnum); + (*p)++; + for (i=0; i= 128 ? "Private use" : "Unknown", ctype); + proto_tree_add_text(tree, tvb, *p - 1, + 1, "Capability length: %u byte%s", clen, + plurality(clen, "", "s")); + if (clen != 0) { + proto_tree_add_text(tree, tvb, *p, + clen, "Capability value: Unknown"); + } + *p += clen; + break; + } /* switch (ctype) */ } @@ -1338,10 +1338,10 @@ dissect_bgp_capability_item(tvbuff_t *tvb, int *p, proto_tree *tree, int ctype, * Dissect a BGP OPEN message. */ static const value_string community_vals[] = { - { BGP_COMM_NO_EXPORT, "NO_EXPORT" }, - { BGP_COMM_NO_ADVERTISE, "NO_ADVERTISE" }, - { BGP_COMM_NO_EXPORT_SUBCONFED, "NO_EXPORT_SUBCONFED" }, - { 0, NULL } + { BGP_COMM_NO_EXPORT, "NO_EXPORT" }, + { BGP_COMM_NO_ADVERTISE, "NO_ADVERTISE" }, + { BGP_COMM_NO_EXPORT_SUBCONFED, "NO_EXPORT_SUBCONFED" }, + { 0, NULL } }; static void @@ -1402,46 +1402,46 @@ dissect_bgp_open(tvbuff_t *tvb, proto_tree *tree) /* check the type */ switch (ptype) { - case BGP_OPTION_AUTHENTICATION: - proto_tree_add_text(subtree, tvb, p - 2, 2 + plen, - "Authentication information (%u byte%s)", plen, - plurality(plen, "", "s")); - break; - case BGP_OPTION_CAPABILITY: - /* grab the capability code */ - cend = p - 1 + plen; - ctype = tvb_get_guint8(tvb, p++); - clen = tvb_get_guint8(tvb, p++); - ti = proto_tree_add_text(subtree, tvb, p - 4, - 2 + plen, "Capabilities Advertisement (%u bytes)", - 2 + plen); - subtree1 = proto_item_add_subtree(ti, ett_bgp_option); - proto_tree_add_text(subtree1, tvb, p - 4, - 1, "Parameter type: Capabilities (2)"); - proto_tree_add_text(subtree1, tvb, p - 3, - 1, "Parameter length: %u byte%s", plen, - plurality(plen, "", "s")); - p -= 2; + case BGP_OPTION_AUTHENTICATION: + proto_tree_add_text(subtree, tvb, p - 2, 2 + plen, + "Authentication information (%u byte%s)", plen, + plurality(plen, "", "s")); + break; + case BGP_OPTION_CAPABILITY: + /* grab the capability code */ + cend = p - 1 + plen; + ctype = tvb_get_guint8(tvb, p++); + clen = tvb_get_guint8(tvb, p++); + ti = proto_tree_add_text(subtree, tvb, p - 4, + 2 + plen, "Capabilities Advertisement (%u bytes)", + 2 + plen); + subtree1 = proto_item_add_subtree(ti, ett_bgp_option); + proto_tree_add_text(subtree1, tvb, p - 4, + 1, "Parameter type: Capabilities (2)"); + proto_tree_add_text(subtree1, tvb, p - 3, + 1, "Parameter length: %u byte%s", plen, + plurality(plen, "", "s")); + p -= 2; - /* step through all of the capabilities */ - while (p < cend) { - ctype = tvb_get_guint8(tvb, p++); - clen = tvb_get_guint8(tvb, p++); + /* step through all of the capabilities */ + while (p < cend) { + ctype = tvb_get_guint8(tvb, p++); + clen = tvb_get_guint8(tvb, p++); - ti = proto_tree_add_text(subtree1, tvb, p - 2, - 2 + clen, "%s (%u byte%s)", val_to_str(ctype, - capability_vals, "Unknown capability"), - 2 + clen, plurality(clen, "", "s")); - subtree2 = proto_item_add_subtree(ti, ett_bgp_option); - dissect_bgp_capability_item(tvb, &p, - subtree2, ctype, clen); - } - break; - default: - proto_tree_add_text(subtree, tvb, p - 2, 2 + plen, - "Unknown optional parameter"); - break; - } + ti = proto_tree_add_text(subtree1, tvb, p - 2, + 2 + clen, "%s (%u byte%s)", val_to_str(ctype, + capability_vals, "Unknown capability"), + 2 + clen, plurality(clen, "", "s")); + subtree2 = proto_item_add_subtree(ti, ett_bgp_option); + dissect_bgp_capability_item(tvb, &p, + subtree2, ctype, clen); + } + break; + default: + proto_tree_add_text(subtree, tvb, p - 2, 2 + plen, + "Unknown optional parameter"); + break; + } /* switch (ptype) */ } } } @@ -1552,259 +1552,259 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree) helps browsing attrs. */ /* the first switch prints things in the title of the subtree */ switch (bgpa.bgpa_type) { - case BGPTYPE_ORIGIN: - if (tlen != 1) - goto default_attribute_top; - msg = val_to_str(tvb_get_guint8(tvb, o + i + aoff), bgpattr_origin, "Unknown"); - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s: %s (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - msg, tlen + aoff, plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_AS_PATH: - case BGPTYPE_NEW_AS_PATH: - /* (o + i + aoff) = - (o + current attribute + aoff bytes to first tuple) */ - q = o + i + aoff; - end = q + tlen; - /* must be freed by second switch! */ - /* "tlen * 11" (10 digits + space) should be a good estimate - of how long the AS path string could be */ - if (as_path_emstr == NULL) - as_path_emstr = ep_strbuf_sized_new((tlen + 1) * 11, 0); - ep_strbuf_truncate(as_path_emstr, 0); + case BGPTYPE_ORIGIN: + if (tlen != 1) + goto default_attribute_top; + msg = val_to_str(tvb_get_guint8(tvb, o + i + aoff), bgpattr_origin, "Unknown"); + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s: %s (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + msg, tlen + aoff, plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_AS_PATH: + case BGPTYPE_NEW_AS_PATH: + /* (o + i + aoff) = + (o + current attribute + aoff bytes to first tuple) */ + q = o + i + aoff; + end = q + tlen; + /* must be freed by second switch! */ + /* "tlen * 11" (10 digits + space) should be a good estimate + of how long the AS path string could be */ + if (as_path_emstr == NULL) + as_path_emstr = ep_strbuf_sized_new((tlen + 1) * 11, 0); + ep_strbuf_truncate(as_path_emstr, 0); - /* estimate the length of the AS number */ - if (bgpa.bgpa_type == BGPTYPE_NEW_AS_PATH) - asn_len = 4; - else { - if (bgp_asn_len == 0) { - k = q; - while (k < end) { - k++; - length = tvb_get_guint8(tvb, k++); - k += length * 2; - } - asn_len = (k == end) ? 2 : 4; - } - else { - asn_len = bgp_asn_len; - } - } - - /* snarf each AS path */ - while (q < end) { - type = tvb_get_guint8(tvb, q++); - if (as_path_emstr->len > 1 && - as_path_emstr->str[as_path_emstr->len - 1] != ' ') - ep_strbuf_append_c(as_path_emstr, ' '); - if (type == AS_SET) { - ep_strbuf_append_c(as_path_emstr, '{'); - } - else if (type == AS_CONFED_SET) { - ep_strbuf_append_c(as_path_emstr, '['); - } - else if (type == AS_CONFED_SEQUENCE) { - ep_strbuf_append_c(as_path_emstr, '('); - } - length = tvb_get_guint8(tvb, q++); - - /* snarf each value in path */ - for (j = 0; j < length; j++) { - ep_strbuf_append_printf(as_path_emstr, "%u%s", - (asn_len == 2) ? - tvb_get_ntohs(tvb, q) : tvb_get_ntohl(tvb, q), - (type == AS_SET || type == AS_CONFED_SET) ? - ", " : " "); - q += asn_len; + /* estimate the length of the AS number */ + if (bgpa.bgpa_type == BGPTYPE_NEW_AS_PATH) + asn_len = 4; + else { + if (bgp_asn_len == 0) { + k = q; + while (k < end) { + k++; + length = tvb_get_guint8(tvb, k++); + k += length * 2; + } + asn_len = (k == end) ? 2 : 4; + } + else { + asn_len = bgp_asn_len; + } } + /* snarf each AS path */ + while (q < end) { + type = tvb_get_guint8(tvb, q++); + if (as_path_emstr->len > 1 && + as_path_emstr->str[as_path_emstr->len - 1] != ' ') + ep_strbuf_append_c(as_path_emstr, ' '); + if (type == AS_SET) { + ep_strbuf_append_c(as_path_emstr, '{'); + } + else if (type == AS_CONFED_SET) { + ep_strbuf_append_c(as_path_emstr, '['); + } + else if (type == AS_CONFED_SEQUENCE) { + ep_strbuf_append_c(as_path_emstr, '('); + } + length = tvb_get_guint8(tvb, q++); + + /* snarf each value in path */ + for (j = 0; j < length; j++) { + ep_strbuf_append_printf(as_path_emstr, "%u%s", + (asn_len == 2) ? + tvb_get_ntohs(tvb, q) : tvb_get_ntohl(tvb, q), + (type == AS_SET || type == AS_CONFED_SET) ? + ", " : " "); + q += asn_len; + } + + /* cleanup end of string */ + if (type == AS_SET) { + ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 2); + ep_strbuf_append_c(as_path_emstr, '}'); + } + else if (type == AS_CONFED_SET) { + ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 2); + ep_strbuf_append_c(as_path_emstr, ']'); + } + else if (type == AS_CONFED_SEQUENCE) { + ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1); + ep_strbuf_append_c(as_path_emstr, ')'); + } + else { + ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1); + } + } + + /* check for empty AS_PATH */ + if (tlen == 0) + ep_strbuf_printf(as_path_emstr, "empty"); + + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s: %s (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + as_path_emstr->str, tlen + aoff, + plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_NEXT_HOP: + if (tlen != 4) + goto default_attribute_top; + ipaddr = tvb_get_ipv4(tvb, o + i + aoff); + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s: %s (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + ip_to_str((guint8 *)&ipaddr), tlen + aoff, + plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_MULTI_EXIT_DISC: + if (tlen != 4) + goto default_attribute_top; + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s: %u (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + tvb_get_ntohl(tvb, o + i + aoff), tlen + aoff, + plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_LOCAL_PREF: + if (tlen != 4) + goto default_attribute_top; + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s: %u (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + tvb_get_ntohl(tvb, o + i + aoff), tlen + aoff, + plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_ATOMIC_AGGREGATE: + if (tlen != 0) + goto default_attribute_top; + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + tlen + aoff, plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_AGGREGATOR: + if (tlen != 6 && tlen != 8) + goto default_attribute_top; + case BGPTYPE_NEW_AGGREGATOR: + if (bgpa.bgpa_type == BGPTYPE_NEW_AGGREGATOR && tlen != 8) + goto default_attribute_top; + asn_len = tlen - 4; + ipaddr = tvb_get_ipv4(tvb, o + i + aoff + asn_len); + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s: AS: %u origin: %s (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + (asn_len == 2) ? tvb_get_ntohs(tvb, o + i + aoff) : + tvb_get_ntohl(tvb, o + i + aoff), + ip_to_str((guint8 *)&ipaddr), + tlen + aoff, plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_COMMUNITIES: + if (tlen % 4 != 0) + goto default_attribute_top; + + /* (o + i + aoff) = + (o + current attribute + aoff bytes to first tuple) */ + q = o + i + aoff; + end = q + tlen; + /* must be freed by second switch! */ + /* "tlen * 12" (5 digits, a :, 5 digits + space ) should be + a good estimate of how long the communities string could + be */ + if (communities_emstr == NULL) + communities_emstr = ep_strbuf_sized_new((tlen + 1) * 12, 0); + ep_strbuf_truncate(communities_emstr, 0); + + /* snarf each community */ + while (q < end) { + /* check for well-known communities */ + if (tvb_get_ntohl(tvb, q) == BGP_COMM_NO_EXPORT) + ep_strbuf_append(communities_emstr, "NO_EXPORT "); + else if (tvb_get_ntohl(tvb, q) == BGP_COMM_NO_ADVERTISE) + ep_strbuf_append(communities_emstr, "NO_ADVERTISE "); + else if (tvb_get_ntohl(tvb, q) == BGP_COMM_NO_EXPORT_SUBCONFED) + ep_strbuf_append(communities_emstr, "NO_EXPORT_SUBCONFED "); + else { + ep_strbuf_append_printf(communities_emstr, "%u:%u ", + tvb_get_ntohs(tvb, q), + tvb_get_ntohs(tvb, q + 2)); + } + q += 4; + } /* cleanup end of string */ - if (type == AS_SET) { - ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 2); - ep_strbuf_append_c(as_path_emstr, '}'); + ep_strbuf_truncate(communities_emstr, communities_emstr->len - 1); + + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s: %s (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + communities_emstr->str, tlen + aoff, + plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_ORIGINATOR_ID: + if (tlen != 4) + goto default_attribute_top; + ipaddr = tvb_get_ipv4(tvb, o + i + aoff); + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s: %s (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + ip_to_str((guint8 *)&ipaddr), + tlen + aoff, plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_CLUSTER_LIST: + if (tlen % 4 != 0) + goto default_attribute_top; + + /* (o + i + aoff) = + (o + current attribute + aoff bytes to first tuple) */ + q = o + i + aoff; + end = q + tlen; + /* must be freed by second switch! */ + /* "tlen * 16" (12 digits, 3 dots + space ) should be + a good estimate of how long the cluster_list string could + be */ + if (cluster_list_emstr == NULL) + cluster_list_emstr = ep_strbuf_sized_new((tlen + 1) * 16, 0); + ep_strbuf_truncate(cluster_list_emstr, 0); + + /* snarf each cluster list */ + while (q < end) { + ipaddr = tvb_get_ipv4(tvb, q); + ep_strbuf_append_printf(cluster_list_emstr, "%s ", ip_to_str((guint8 *)&ipaddr)); + q += 4; } - else if (type == AS_CONFED_SET) { - ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 2); - ep_strbuf_append_c(as_path_emstr, ']'); - } - else if (type == AS_CONFED_SEQUENCE) { - ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1); - ep_strbuf_append_c(as_path_emstr, ')'); - } - else { - ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1); - } - } + /* cleanup end of string */ + ep_strbuf_truncate(cluster_list_emstr, cluster_list_emstr->len - 1); - /* check for empty AS_PATH */ - if (tlen == 0) - ep_strbuf_printf(as_path_emstr, "empty"); + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s: %s (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + cluster_list_emstr->str, tlen + aoff, + plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_EXTENDED_COMMUNITY: + if (tlen %8 != 0) + break; + ti = proto_tree_add_text(subtree,tvb,o+i,tlen+aoff, + "%s: (%u byte%s)", + val_to_str(bgpa.bgpa_type,bgpattr_type,"Unknown"), + tlen + aoff, + plurality(tlen + aoff, "", "s")); + break; + case BGPTYPE_SAFI_SPECIFIC_ATTR: + ti = proto_tree_add_text(subtree,tvb,o+i,tlen+aoff, + "%s: (%u byte%s)", + val_to_str(bgpa.bgpa_type,bgpattr_type,"Unknown"), + tlen + aoff, + plurality(tlen + aoff, "", "s")); + break; - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s: %s (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - as_path_emstr->str, tlen + aoff, - plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_NEXT_HOP: - if (tlen != 4) - goto default_attribute_top; - ipaddr = tvb_get_ipv4(tvb, o + i + aoff); - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s: %s (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - ip_to_str((guint8 *)&ipaddr), tlen + aoff, - plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_MULTI_EXIT_DISC: - if (tlen != 4) - goto default_attribute_top; - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s: %u (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - tvb_get_ntohl(tvb, o + i + aoff), tlen + aoff, - plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_LOCAL_PREF: - if (tlen != 4) - goto default_attribute_top; - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s: %u (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - tvb_get_ntohl(tvb, o + i + aoff), tlen + aoff, - plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_ATOMIC_AGGREGATE: - if (tlen != 0) - goto default_attribute_top; - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - tlen + aoff, plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_AGGREGATOR: - if (tlen != 6 && tlen != 8) - goto default_attribute_top; - case BGPTYPE_NEW_AGGREGATOR: - if (bgpa.bgpa_type == BGPTYPE_NEW_AGGREGATOR && tlen != 8) - goto default_attribute_top; - asn_len = tlen - 4; - ipaddr = tvb_get_ipv4(tvb, o + i + aoff + asn_len); - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s: AS: %u origin: %s (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - (asn_len == 2) ? tvb_get_ntohs(tvb, o + i + aoff) : - tvb_get_ntohl(tvb, o + i + aoff), - ip_to_str((guint8 *)&ipaddr), - tlen + aoff, plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_COMMUNITIES: - if (tlen % 4 != 0) - goto default_attribute_top; - - /* (o + i + aoff) = - (o + current attribute + aoff bytes to first tuple) */ - q = o + i + aoff; - end = q + tlen; - /* must be freed by second switch! */ - /* "tlen * 12" (5 digits, a :, 5 digits + space ) should be - a good estimate of how long the communities string could - be */ - if (communities_emstr == NULL) - communities_emstr = ep_strbuf_sized_new((tlen + 1) * 12, 0); - ep_strbuf_truncate(communities_emstr, 0); - - /* snarf each community */ - while (q < end) { - /* check for well-known communities */ - if (tvb_get_ntohl(tvb, q) == BGP_COMM_NO_EXPORT) - ep_strbuf_append(communities_emstr, "NO_EXPORT "); - else if (tvb_get_ntohl(tvb, q) == BGP_COMM_NO_ADVERTISE) - ep_strbuf_append(communities_emstr, "NO_ADVERTISE "); - else if (tvb_get_ntohl(tvb, q) == BGP_COMM_NO_EXPORT_SUBCONFED) - ep_strbuf_append(communities_emstr, "NO_EXPORT_SUBCONFED "); - else { - ep_strbuf_append_printf(communities_emstr, "%u:%u ", - tvb_get_ntohs(tvb, q), - tvb_get_ntohs(tvb, q + 2)); - } - q += 4; - } - /* cleanup end of string */ - ep_strbuf_truncate(communities_emstr, communities_emstr->len - 1); - - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s: %s (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - communities_emstr->str, tlen + aoff, - plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_ORIGINATOR_ID: - if (tlen != 4) - goto default_attribute_top; - ipaddr = tvb_get_ipv4(tvb, o + i + aoff); - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s: %s (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - ip_to_str((guint8 *)&ipaddr), - tlen + aoff, plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_CLUSTER_LIST: - if (tlen % 4 != 0) - goto default_attribute_top; - - /* (o + i + aoff) = - (o + current attribute + aoff bytes to first tuple) */ - q = o + i + aoff; - end = q + tlen; - /* must be freed by second switch! */ - /* "tlen * 16" (12 digits, 3 dots + space ) should be - a good estimate of how long the cluster_list string could - be */ - if (cluster_list_emstr == NULL) - cluster_list_emstr = ep_strbuf_sized_new((tlen + 1) * 16, 0); - ep_strbuf_truncate(cluster_list_emstr, 0); - - /* snarf each cluster list */ - while (q < end) { - ipaddr = tvb_get_ipv4(tvb, q); - ep_strbuf_append_printf(cluster_list_emstr, "%s ", ip_to_str((guint8 *)&ipaddr)); - q += 4; - } - /* cleanup end of string */ - ep_strbuf_truncate(cluster_list_emstr, cluster_list_emstr->len - 1); - - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s: %s (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - cluster_list_emstr->str, tlen + aoff, - plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_EXTENDED_COMMUNITY: - if (tlen %8 != 0) - break; - ti = proto_tree_add_text(subtree,tvb,o+i,tlen+aoff, - "%s: (%u byte%s)", - val_to_str(bgpa.bgpa_type,bgpattr_type,"Unknown"), - tlen + aoff, - plurality(tlen + aoff, "", "s")); - break; - case BGPTYPE_SAFI_SPECIFIC_ATTR: - ti = proto_tree_add_text(subtree,tvb,o+i,tlen+aoff, - "%s: (%u byte%s)", - val_to_str(bgpa.bgpa_type,bgpattr_type,"Unknown"), - tlen + aoff, - plurality(tlen + aoff, "", "s")); - break; - - default: - default_attribute_top: - ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, - "%s (%u byte%s)", - val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), - tlen + aoff, plurality(tlen + aoff, "", "s")); - } /* end of first switch */ + default: + default_attribute_top: + ti = proto_tree_add_text(subtree, tvb, o + i, tlen + aoff, + "%s (%u byte%s)", + val_to_str(bgpa.bgpa_type, bgpattr_type, "Unknown"), + tlen + aoff, plurality(tlen + aoff, "", "s")); + } /* switch (bgpa.bgpa_type) */ /* end of first switch */ subtree2 = proto_item_add_subtree(ti, ett_bgp_attr); /* figure out flags */ @@ -1868,393 +1868,393 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree) /* the second switch prints things in the actual subtree of each attribute */ switch (bgpa.bgpa_type) { - case BGPTYPE_ORIGIN: - if (tlen != 1) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Origin (invalid): %u byte%s", tlen, - plurality(tlen, "", "s")); - } else { - proto_tree_add_item(subtree2, hf_bgp_origin, tvb, - o + i + aoff, 1, FALSE); - } - break; - case BGPTYPE_AS_PATH: - case BGPTYPE_NEW_AS_PATH: - ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "AS path: %s", as_path_emstr->str); - as_paths_tree = proto_item_add_subtree(ti, ett_bgp_as_paths); + case BGPTYPE_ORIGIN: + if (tlen != 1) { + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Origin (invalid): %u byte%s", tlen, + plurality(tlen, "", "s")); + } else { + proto_tree_add_item(subtree2, hf_bgp_origin, tvb, + o + i + aoff, 1, FALSE); + } + break; + case BGPTYPE_AS_PATH: + case BGPTYPE_NEW_AS_PATH: + ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "AS path: %s", as_path_emstr->str); + as_paths_tree = proto_item_add_subtree(ti, ett_bgp_as_paths); - /* (o + i + aoff) = - (o + current attribute + aoff bytes to first tuple) */ - q = o + i + aoff; - end = q + tlen; + /* (o + i + aoff) = + (o + current attribute + aoff bytes to first tuple) */ + q = o + i + aoff; + end = q + tlen; - /* snarf each AS path tuple, we have to step through each one - again to make a separate subtree so we can't just reuse - as_path_gstr from above */ - /* XXX - Can we use some g_string*() trickery instead, e.g. - g_string_erase()? */ - while (q < end) { - ep_strbuf_truncate(as_path_emstr, 0); - type = tvb_get_guint8(tvb, q++); - if (type == AS_SET) { - ep_strbuf_append_c(as_path_emstr, '{'); - } - else if (type == AS_CONFED_SET) { - ep_strbuf_append_c(as_path_emstr, '['); - } - else if (type == AS_CONFED_SEQUENCE) { - ep_strbuf_append_c(as_path_emstr, '('); - } - length = tvb_get_guint8(tvb, q++); + /* snarf each AS path tuple, we have to step through each one + again to make a separate subtree so we can't just reuse + as_path_gstr from above */ + /* XXX - Can we use some g_string*() trickery instead, e.g. + g_string_erase()? */ + while (q < end) { + ep_strbuf_truncate(as_path_emstr, 0); + type = tvb_get_guint8(tvb, q++); + if (type == AS_SET) { + ep_strbuf_append_c(as_path_emstr, '{'); + } + else if (type == AS_CONFED_SET) { + ep_strbuf_append_c(as_path_emstr, '['); + } + else if (type == AS_CONFED_SEQUENCE) { + ep_strbuf_append_c(as_path_emstr, '('); + } + length = tvb_get_guint8(tvb, q++); - /* snarf each value in path */ - for (j = 0; j < length; j++) { - ep_strbuf_append_printf(as_path_emstr, "%u%s", - (asn_len == 2) ? - tvb_get_ntohs(tvb, q) : tvb_get_ntohl(tvb, q), - (type == AS_SET || type == AS_CONFED_SET) ? ", " : " "); - q += asn_len; - } + /* snarf each value in path */ + for (j = 0; j < length; j++) { + ep_strbuf_append_printf(as_path_emstr, "%u%s", + (asn_len == 2) ? + tvb_get_ntohs(tvb, q) : tvb_get_ntohl(tvb, q), + (type == AS_SET || type == AS_CONFED_SET) ? ", " : " "); + q += asn_len; + } - /* cleanup end of string */ - if (type == AS_SET) { - ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 2); - ep_strbuf_append_c(as_path_emstr, '}'); - } - else if (type == AS_CONFED_SET) { - ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 2); - ep_strbuf_append_c(as_path_emstr, ']'); - } - else if (type == AS_CONFED_SEQUENCE) { - ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1); - ep_strbuf_append_c(as_path_emstr, ')'); - } - else { - ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1); - } + /* cleanup end of string */ + if (type == AS_SET) { + ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 2); + ep_strbuf_append_c(as_path_emstr, '}'); + } + else if (type == AS_CONFED_SET) { + ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 2); + ep_strbuf_append_c(as_path_emstr, ']'); + } + else if (type == AS_CONFED_SEQUENCE) { + ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1); + ep_strbuf_append_c(as_path_emstr, ')'); + } + else { + ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1); + } - /* length here means number of ASs, ie length * 2 bytes */ - ti = proto_tree_add_text(as_paths_tree, tvb, - q - length * asn_len - 2, - length * asn_len + 2, "AS path segment: %s", as_path_emstr->str); - as_path_tree = proto_item_add_subtree(ti, ett_bgp_as_paths); - proto_tree_add_text(as_path_tree, tvb, q - length * asn_len - 2, - 1, "Path segment type: %s (%u)", - val_to_str(type, as_segment_type, "Unknown"), type); - proto_tree_add_text(as_path_tree, tvb, q - length * asn_len - 1, - 1, "Path segment length: %u AS%s", length, - plurality(length, "", "s")); + /* length here means number of ASs, ie length * 2 bytes */ + ti = proto_tree_add_text(as_paths_tree, tvb, + q - length * asn_len - 2, + length * asn_len + 2, "AS path segment: %s", as_path_emstr->str); + as_path_tree = proto_item_add_subtree(ti, ett_bgp_as_paths); + proto_tree_add_text(as_path_tree, tvb, q - length * asn_len - 2, + 1, "Path segment type: %s (%u)", + val_to_str(type, as_segment_type, "Unknown"), type); + proto_tree_add_text(as_path_tree, tvb, q - length * asn_len - 1, + 1, "Path segment length: %u AS%s", length, + plurality(length, "", "s")); - /* backup and reprint path segment value(s) only */ - q -= asn_len * length; - ti = proto_tree_add_text(as_path_tree, tvb, q, - length * asn_len, "Path segment value:"); - as_path_segment_tree = proto_item_add_subtree(ti, - ett_bgp_as_path_segments); - for (j = 0; j < length; j++) { - as_path_item = (asn_len == 2) ? + /* backup and reprint path segment value(s) only */ + q -= asn_len * length; + ti = proto_tree_add_text(as_path_tree, tvb, q, + length * asn_len, "Path segment value:"); + as_path_segment_tree = proto_item_add_subtree(ti, + ett_bgp_as_path_segments); + for (j = 0; j < length; j++) { + as_path_item = (asn_len == 2) ? tvb_get_ntohs(tvb, q) : tvb_get_ntohl(tvb, q); - proto_item_append_text(ti, " %u", as_path_item); - hidden_item = proto_tree_add_uint(as_path_tree, hf_bgp_as_path, tvb, - q, asn_len, as_path_item); - PROTO_ITEM_SET_HIDDEN(hidden_item); - q += asn_len; + proto_item_append_text(ti, " %u", as_path_item); + hidden_item = proto_tree_add_uint(as_path_tree, hf_bgp_as_path, tvb, + q, asn_len, as_path_item); + PROTO_ITEM_SET_HIDDEN(hidden_item); + q += asn_len; + } } - } - break; - case BGPTYPE_NEXT_HOP: - if (tlen != 4) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Next hop (invalid): %u byte%s", tlen, - plurality(tlen, "", "s")); - } else { - proto_tree_add_item(subtree2, hf_bgp_next_hop, tvb, - o + i + aoff, tlen, FALSE); - } - break; - case BGPTYPE_MULTI_EXIT_DISC: - if (tlen != 4) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Multiple exit discriminator (invalid): %u byte%s", - tlen, plurality(tlen, "", "s")); - } else { - proto_tree_add_item(subtree2, hf_bgp_multi_exit_disc, tvb, - o + i + aoff, tlen, FALSE); - } - break; - case BGPTYPE_LOCAL_PREF: - if (tlen != 4) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Local preference (invalid): %u byte%s", tlen, - plurality(tlen, "", "s")); - } else { - proto_tree_add_item(subtree2, hf_bgp_local_pref, tvb, - o + i + aoff, tlen, FALSE); - } - break; - case BGPTYPE_ATOMIC_AGGREGATE: - if (tlen != 0) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Atomic aggregate (invalid): %u byte%s", tlen, - plurality(tlen, "", "s")); - } - break; - case BGPTYPE_AGGREGATOR: - if (tlen != 6 && tlen != 8) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Aggregator (invalid): %u byte%s", tlen, - plurality(tlen, "", "s")); - break; - } - case BGPTYPE_NEW_AGGREGATOR: - if (bgpa.bgpa_type == BGPTYPE_NEW_AGGREGATOR && tlen != 8) - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Aggregator (invalid): %u byte%s", tlen, - plurality(tlen, "", "s")); - else { - asn_len = tlen - 4; - aggregator_as = (asn_len == 2) ? + break; + case BGPTYPE_NEXT_HOP: + if (tlen != 4) { + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Next hop (invalid): %u byte%s", tlen, + plurality(tlen, "", "s")); + } else { + proto_tree_add_item(subtree2, hf_bgp_next_hop, tvb, + o + i + aoff, tlen, FALSE); + } + break; + case BGPTYPE_MULTI_EXIT_DISC: + if (tlen != 4) { + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Multiple exit discriminator (invalid): %u byte%s", + tlen, plurality(tlen, "", "s")); + } else { + proto_tree_add_item(subtree2, hf_bgp_multi_exit_disc, tvb, + o + i + aoff, tlen, FALSE); + } + break; + case BGPTYPE_LOCAL_PREF: + if (tlen != 4) { + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Local preference (invalid): %u byte%s", tlen, + plurality(tlen, "", "s")); + } else { + proto_tree_add_item(subtree2, hf_bgp_local_pref, tvb, + o + i + aoff, tlen, FALSE); + } + break; + case BGPTYPE_ATOMIC_AGGREGATE: + if (tlen != 0) { + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Atomic aggregate (invalid): %u byte%s", tlen, + plurality(tlen, "", "s")); + } + break; + case BGPTYPE_AGGREGATOR: + if (tlen != 6 && tlen != 8) { + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Aggregator (invalid): %u byte%s", tlen, + plurality(tlen, "", "s")); + break; + } + case BGPTYPE_NEW_AGGREGATOR: + if (bgpa.bgpa_type == BGPTYPE_NEW_AGGREGATOR && tlen != 8) + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Aggregator (invalid): %u byte%s", tlen, + plurality(tlen, "", "s")); + else { + asn_len = tlen - 4; + aggregator_as = (asn_len == 2) ? tvb_get_ntohs(tvb, o + i + aoff) : tvb_get_ntohl(tvb, o + i + aoff); - proto_tree_add_uint(subtree2, hf_bgp_aggregator_as, tvb, - o + i + aoff, asn_len, aggregator_as); - proto_tree_add_item(subtree2, hf_bgp_aggregator_origin, tvb, - o + i + aoff + asn_len, 4, FALSE); - } - break; - case BGPTYPE_COMMUNITIES: - if (tlen % 4 != 0) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Communities (invalid): %u byte%s", tlen, - plurality(tlen, "", "s")); - break; - } - - ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Communities: %s", communities_emstr->str); - communities_tree = proto_item_add_subtree(ti, - ett_bgp_communities); - - /* (o + i + aoff) = - (o + current attribute + aoff bytes to first tuple) */ - q = o + i + aoff; - end = q + tlen; - - /* snarf each community */ - while (q < end) { - /* check for reserved values */ - guint32 community = tvb_get_ntohl(tvb, q); - if ((community & 0xFFFF0000) == FOURHEX0 || - (community & 0xFFFF0000) == FOURHEXF) { - proto_tree_add_text(communities_tree, tvb, - q - 3 + aoff, 4, - "Community: %s (0x%08x)", - val_to_str(community, community_vals, "(reserved)"), - community); + proto_tree_add_uint(subtree2, hf_bgp_aggregator_as, tvb, + o + i + aoff, asn_len, aggregator_as); + proto_tree_add_item(subtree2, hf_bgp_aggregator_origin, tvb, + o + i + aoff + asn_len, 4, FALSE); } - else { - ti = proto_tree_add_text(communities_tree, tvb, - q - 3 + aoff, 4, "Community: %u:%u", - tvb_get_ntohs(tvb, q), tvb_get_ntohs(tvb, q + 2)); - community_tree = proto_item_add_subtree(ti, - ett_bgp_communities); - proto_tree_add_item(community_tree, hf_bgp_community_as, - tvb, q - 3 + aoff, 2, FALSE); - proto_tree_add_item(community_tree, hf_bgp_community_value, - tvb, q - 1 + aoff, 2, FALSE); + break; + case BGPTYPE_COMMUNITIES: + if (tlen % 4 != 0) { + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Communities (invalid): %u byte%s", tlen, + plurality(tlen, "", "s")); + break; } - q += 4; - } + ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Communities: %s", communities_emstr->str); + communities_tree = proto_item_add_subtree(ti, + ett_bgp_communities); - break; - case BGPTYPE_ORIGINATOR_ID: - if (tlen != 4) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Originator identifier (invalid): %u byte%s", tlen, - plurality(tlen, "", "s")); - } else { - proto_tree_add_item(subtree2, hf_bgp_originator_id, tvb, - o + i + aoff, tlen, FALSE); - } - break; - case BGPTYPE_MP_REACH_NLRI: - /* - * RFC 2545 specifies that there may be more than one - * address in the MP_REACH_NLRI attribute in section - * 3, "Constructing the Next Hop field". - * - * Yes, RFC 2858 says you can't do that, and, yes, RFC - * 2858 obsoletes RFC 2283, which says you can do that, - * but that doesn't mean we shouldn't dissect packets - * that conform to RFC 2283 but not RFC 2858, as some - * device on the network might implement the 2283-style - * BGP extensions rather than RFC 2858-style extensions. - */ - af = tvb_get_ntohs(tvb, o + i + aoff); - proto_tree_add_text(subtree2, tvb, o + i + aoff, 2, - "Address family: %s (%u)", - val_to_str(af, afn_vals, "Unknown"), af); - saf = tvb_get_guint8(tvb, o + i + aoff + 2) ; - proto_tree_add_text(subtree2, tvb, o + i + aoff + 2, 1, - "Subsequent address family identifier: %s (%u)", - val_to_str(saf, bgpattr_nlri_safi, saf >= 128 ? "Vendor specific" : "Unknown"), - saf); - nexthop_len = tvb_get_guint8(tvb, o + i + aoff + 3); - ti = proto_tree_add_text(subtree2, tvb, o + i + aoff + 3, - nexthop_len + 1, - "Next hop network address (%d byte%s)", - nexthop_len, plurality(nexthop_len, "", "s")); - subtree3 = proto_item_add_subtree(ti, ett_bgp_mp_nhna); + /* (o + i + aoff) = + (o + current attribute + aoff bytes to first tuple) */ + q = o + i + aoff; + end = q + tlen; + + /* snarf each community */ + while (q < end) { + /* check for reserved values */ + guint32 community = tvb_get_ntohl(tvb, q); + if ((community & 0xFFFF0000) == FOURHEX0 || + (community & 0xFFFF0000) == FOURHEXF) { + proto_tree_add_text(communities_tree, tvb, + q - 3 + aoff, 4, + "Community: %s (0x%08x)", + val_to_str(community, community_vals, "(reserved)"), + community); + } + else { + ti = proto_tree_add_text(communities_tree, tvb, + q - 3 + aoff, 4, "Community: %u:%u", + tvb_get_ntohs(tvb, q), tvb_get_ntohs(tvb, q + 2)); + community_tree = proto_item_add_subtree(ti, + ett_bgp_communities); + proto_tree_add_item(community_tree, hf_bgp_community_as, + tvb, q - 3 + aoff, 2, FALSE); + proto_tree_add_item(community_tree, hf_bgp_community_value, + tvb, q - 1 + aoff, 2, FALSE); + } + + q += 4; + } - /* - * The addresses don't contain lengths, so if we - * don't understand the address family type, we - * cannot parse the subsequent addresses as we - * don't know how long they are. - */ - switch (af) { - default: - proto_tree_add_text(subtree3, tvb, o + i + aoff + 4, - nexthop_len, "Unknown Address Family"); break; - - case AFNUM_INET: - case AFNUM_INET6: - case AFNUM_L2VPN: - case AFNUM_L2VPN_OLD: - - j = 0; - while (j < nexthop_len) { - advance = mp_addr_to_str(af, saf, tvb, o + i + aoff + 4 + j, - junk_emstr) ; - if (advance == 0) /* catch if this is a unknown AFI type*/ - break; - if (j + advance > nexthop_len) - break; - proto_tree_add_text(subtree3, tvb,o + i + aoff + 4 + j, - advance, "Next hop: %s (%u)", junk_emstr->str, advance); - j += advance; - } + case BGPTYPE_ORIGINATOR_ID: + if (tlen != 4) { + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Originator identifier (invalid): %u byte%s", tlen, + plurality(tlen, "", "s")); + } else { + proto_tree_add_item(subtree2, hf_bgp_originator_id, tvb, + o + i + aoff, tlen, FALSE); + } break; - } + case BGPTYPE_MP_REACH_NLRI: + /* + * RFC 2545 specifies that there may be more than one + * address in the MP_REACH_NLRI attribute in section + * 3, "Constructing the Next Hop field". + * + * Yes, RFC 2858 says you can't do that, and, yes, RFC + * 2858 obsoletes RFC 2283, which says you can do that, + * but that doesn't mean we shouldn't dissect packets + * that conform to RFC 2283 but not RFC 2858, as some + * device on the network might implement the 2283-style + * BGP extensions rather than RFC 2858-style extensions. + */ + af = tvb_get_ntohs(tvb, o + i + aoff); + proto_tree_add_text(subtree2, tvb, o + i + aoff, 2, + "Address family: %s (%u)", + val_to_str(af, afn_vals, "Unknown"), af); + saf = tvb_get_guint8(tvb, o + i + aoff + 2) ; + proto_tree_add_text(subtree2, tvb, o + i + aoff + 2, 1, + "Subsequent address family identifier: %s (%u)", + val_to_str(saf, bgpattr_nlri_safi, saf >= 128 ? "Vendor specific" : "Unknown"), + saf); + nexthop_len = tvb_get_guint8(tvb, o + i + aoff + 3); + ti = proto_tree_add_text(subtree2, tvb, o + i + aoff + 3, + nexthop_len + 1, + "Next hop network address (%d byte%s)", + nexthop_len, plurality(nexthop_len, "", "s")); + subtree3 = proto_item_add_subtree(ti, ett_bgp_mp_nhna); - aoff_save = aoff; - tlen -= nexthop_len + 4; - aoff += nexthop_len + 4 ; + /* + * The addresses don't contain lengths, so if we + * don't understand the address family type, we + * cannot parse the subsequent addresses as we + * don't know how long they are. + */ + switch (af) { + default: + proto_tree_add_text(subtree3, tvb, o + i + aoff + 4, + nexthop_len, "Unknown Address Family"); + break; - off = 0; - snpa = tvb_get_guint8(tvb, o + i + aoff); - ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, 1, - "Subnetwork points of attachment: %u", snpa); - off++; - if (snpa) { + case AFNUM_INET: + case AFNUM_INET6: + case AFNUM_L2VPN: + case AFNUM_L2VPN_OLD: + + j = 0; + while (j < nexthop_len) { + advance = mp_addr_to_str(af, saf, tvb, o + i + aoff + 4 + j, + junk_emstr) ; + if (advance == 0) /* catch if this is a unknown AFI type*/ + break; + if (j + advance > nexthop_len) + break; + proto_tree_add_text(subtree3, tvb,o + i + aoff + 4 + j, + advance, "Next hop: %s (%u)", junk_emstr->str, advance); + j += advance; + } + break; + } /* switch (af) */ + + aoff_save = aoff; + tlen -= nexthop_len + 4; + aoff += nexthop_len + 4 ; + + off = 0; + snpa = tvb_get_guint8(tvb, o + i + aoff); + ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, 1, + "Subnetwork points of attachment: %u", snpa); + off++; + if (snpa) { subtree3 = proto_item_add_subtree(ti, ett_bgp_mp_snpa); for (/*nothing*/; snpa > 0; snpa--) { - proto_tree_add_text(subtree3, tvb, o + i + aoff + off, 1, - "SNPA length: %u", tvb_get_guint8(tvb, o + i + aoff + off)); - off++; - proto_tree_add_text(subtree3, tvb, o + i + aoff + off, - tvb_get_guint8(tvb, o + i + aoff + off - 1), - "SNPA (%u byte%s)", tvb_get_guint8(tvb, o + i + aoff + off - 1), - plurality(tvb_get_guint8(tvb, o + i + aoff + off - 1), "", "s")); - off += tvb_get_guint8(tvb, o + i + aoff + off - 1); + proto_tree_add_text(subtree3, tvb, o + i + aoff + off, 1, + "SNPA length: %u", tvb_get_guint8(tvb, o + i + aoff + off)); + off++; + proto_tree_add_text(subtree3, tvb, o + i + aoff + off, + tvb_get_guint8(tvb, o + i + aoff + off - 1), + "SNPA (%u byte%s)", tvb_get_guint8(tvb, o + i + aoff + off - 1), + plurality(tvb_get_guint8(tvb, o + i + aoff + off - 1), "", "s")); + off += tvb_get_guint8(tvb, o + i + aoff + off - 1); } - } - tlen -= off; - aoff += off; + } + tlen -= off; + aoff += off; - ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Network layer reachability information (%u byte%s)", - tlen, plurality(tlen, "", "s")); - if (tlen) { - subtree3 = proto_item_add_subtree(ti,ett_bgp_mp_reach_nlri); - if (af != AFNUM_INET && af != AFNUM_INET6 && af != AFNUM_L2VPN) { - proto_tree_add_text(subtree3, tvb, o + i + aoff, - tlen, "Unknown Address Family"); - } else { - while (tlen > 0) { + ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Network layer reachability information (%u byte%s)", + tlen, plurality(tlen, "", "s")); + if (tlen) { + subtree3 = proto_item_add_subtree(ti,ett_bgp_mp_reach_nlri); + if (af != AFNUM_INET && af != AFNUM_INET6 && af != AFNUM_L2VPN) { + proto_tree_add_text(subtree3, tvb, o + i + aoff, + tlen, "Unknown Address Family"); + } else { + while (tlen > 0) { advance = decode_prefix_MP(subtree3, - hf_bgp_mp_reach_nlri_ipv4_prefix, - -1, - af, saf, - tvb, o + i + aoff, "MP Reach NLRI"); + hf_bgp_mp_reach_nlri_ipv4_prefix, + -1, + af, saf, + tvb, o + i + aoff, "MP Reach NLRI"); if (advance < 0) break; tlen -= advance; aoff += advance; + } } - } - } - aoff = aoff_save; - break; - case BGPTYPE_MP_UNREACH_NLRI: - af = tvb_get_ntohs(tvb, o + i + aoff); - proto_tree_add_text(subtree2, tvb, o + i + aoff, 2, - "Address family: %s (%u)", - val_to_str(af, afn_vals, "Unknown"), af); - saf = tvb_get_guint8(tvb, o + i + aoff + 2) ; - proto_tree_add_text(subtree2, tvb, o + i + aoff + 2, 1, - "Subsequent address family identifier: %s (%u)", - val_to_str(saf, bgpattr_nlri_safi, saf >= 128 ? "Vendor specific" : "Unknown"), - saf); - ti = proto_tree_add_text(subtree2, tvb, o + i + aoff + 3, - tlen - 3, "Withdrawn routes (%u byte%s)", tlen - 3, - plurality(tlen - 3, "", "s")); - - aoff_save = aoff; - tlen -= 3; - aoff += 3; - if (tlen > 0) { - subtree3 = proto_item_add_subtree(ti,ett_bgp_mp_unreach_nlri); - - while (tlen > 0) { - advance = decode_prefix_MP(subtree3, - hf_bgp_mp_unreach_nlri_ipv4_prefix, - -1, - af, saf, - tvb, o + i + aoff, "MP Unreach NLRI"); - if (advance < 0) - break; - tlen -= advance; - aoff += advance; } - } - aoff = aoff_save; - break; - case BGPTYPE_CLUSTER_LIST: - if (tlen % 4 != 0) { - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Cluster list (invalid): %u byte%s", tlen, - plurality(tlen, "", "s")); + aoff = aoff_save; break; - } + case BGPTYPE_MP_UNREACH_NLRI: + af = tvb_get_ntohs(tvb, o + i + aoff); + proto_tree_add_text(subtree2, tvb, o + i + aoff, 2, + "Address family: %s (%u)", + val_to_str(af, afn_vals, "Unknown"), af); + saf = tvb_get_guint8(tvb, o + i + aoff + 2) ; + proto_tree_add_text(subtree2, tvb, o + i + aoff + 2, 1, + "Subsequent address family identifier: %s (%u)", + val_to_str(saf, bgpattr_nlri_safi, saf >= 128 ? "Vendor specific" : "Unknown"), + saf); + ti = proto_tree_add_text(subtree2, tvb, o + i + aoff + 3, + tlen - 3, "Withdrawn routes (%u byte%s)", tlen - 3, + plurality(tlen - 3, "", "s")); - ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Cluster list: %s", cluster_list_emstr->str); - cluster_list_tree = proto_item_add_subtree(ti, - ett_bgp_cluster_list); + aoff_save = aoff; + tlen -= 3; + aoff += 3; + if (tlen > 0) { + subtree3 = proto_item_add_subtree(ti,ett_bgp_mp_unreach_nlri); - /* (o + i + aoff) = - (o + current attribute + aoff bytes to first tuple) */ - q = o + i + aoff; - end = q + tlen; + while (tlen > 0) { + advance = decode_prefix_MP(subtree3, + hf_bgp_mp_unreach_nlri_ipv4_prefix, + -1, + af, saf, + tvb, o + i + aoff, "MP Unreach NLRI"); + if (advance < 0) + break; + tlen -= advance; + aoff += advance; + } + } + aoff = aoff_save; + break; + case BGPTYPE_CLUSTER_LIST: + if (tlen % 4 != 0) { + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Cluster list (invalid): %u byte%s", tlen, + plurality(tlen, "", "s")); + break; + } - /* snarf each cluster identifier */ - while (q < end) { - proto_tree_add_item(cluster_list_tree, hf_bgp_cluster_list, - tvb, q - 3 + aoff, 4, FALSE); - q += 4; - } + ti = proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Cluster list: %s", cluster_list_emstr->str); + cluster_list_tree = proto_item_add_subtree(ti, + ett_bgp_cluster_list); - break; - case BGPTYPE_EXTENDED_COMMUNITY: - if (tlen %8 != 0) { + /* (o + i + aoff) = + (o + current attribute + aoff bytes to first tuple) */ + q = o + i + aoff; + end = q + tlen; + + /* snarf each cluster identifier */ + while (q < end) { + proto_tree_add_item(cluster_list_tree, hf_bgp_cluster_list, + tvb, q - 3 + aoff, 4, FALSE); + q += 4; + } + + break; + case BGPTYPE_EXTENDED_COMMUNITY: + if (tlen %8 != 0) { proto_tree_add_text(subtree3, tvb, o + i + aoff, tlen, "Extended community (invalid) : %u byte%s", tlen, - plurality(tlen, "", "s")); - } else { + plurality(tlen, "", "s")); + } else { q = o + i + aoff ; end = o + i + aoff + tlen ; ti = proto_tree_add_text(subtree2,tvb,q,tlen, "Carried Extended communities"); @@ -2268,77 +2268,77 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree) is_extended_type = FALSE; /* handle regular types (8 bit) */ switch (ext_com8) { - case BGP_EXT_COM_QOS_MARK_T: - case BGP_EXT_COM_QOS_MARK_NT: - is_regular_type = TRUE; - ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_emstr->str); + case BGP_EXT_COM_QOS_MARK_T: + case BGP_EXT_COM_QOS_MARK_NT: + is_regular_type = TRUE; + ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_emstr->str); - subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities); - ti = proto_tree_add_text(subtree4, tvb, q, 1, - "Type: 0x%02x", tvb_get_guint8(tvb,q)); - ti = proto_tree_add_text(subtree4, tvb, q+1, 1, - "Flags: 0x%02x", tvb_get_guint8(tvb,q+1)); - subtree5 = proto_item_add_subtree(ti,ett_bgp_ext_com_flags); - /* add flag bitfield */ - ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), - 0x10, 8, "Remarking", "No Remarking")); - ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), - 0x08, 8, "Ignored marking", "No Ignored marking")); - ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), - 0x04, 8, "Aggregation of markings", "No Aggregation of markings")); + subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities); + ti = proto_tree_add_text(subtree4, tvb, q, 1, + "Type: 0x%02x", tvb_get_guint8(tvb,q)); + ti = proto_tree_add_text(subtree4, tvb, q+1, 1, + "Flags: 0x%02x", tvb_get_guint8(tvb,q+1)); + subtree5 = proto_item_add_subtree(ti,ett_bgp_ext_com_flags); + /* add flag bitfield */ + ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), + 0x10, 8, "Remarking", "No Remarking")); + ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), + 0x08, 8, "Ignored marking", "No Ignored marking")); + ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), + 0x04, 8, "Aggregation of markings", "No Aggregation of markings")); - ti = proto_tree_add_text(subtree4, tvb, q+2, 1, - "QoS Set Number: 0x%02x", tvb_get_guint8(tvb,q+2)); - ti = proto_tree_add_text(subtree4, tvb, q+3, 1, - "Technology Type: 0x%02x (%s)", tvb_get_guint8(tvb,q+3), - val_to_str(tvb_get_guint8(tvb,q+3),qos_tech_type,"Unknown")); - ti = proto_tree_add_text(subtree4, tvb, q+4, 2, - "QoS Marking O (16 bit): %s", decode_numeric_bitfield(tvb_get_ntohs(tvb,q+4), - 0xffff, 16, "0x%04x")); - ti = proto_tree_add_text(subtree4, tvb, q+6, 1, - "QoS Marking A (8 bit): %s (decimal %d)", decode_numeric_bitfield(tvb_get_guint8(tvb,q+6), - 0xff, 8, "0x%02x"), tvb_get_guint8(tvb,q+6)); - ti = proto_tree_add_text(subtree4, tvb, q+7, 1, - "Defaults to zero: 0x%02x", tvb_get_guint8(tvb,q+7)); - break; - case BGP_EXT_COM_COS_CAP_T: - is_regular_type = TRUE; - ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_emstr->str); + ti = proto_tree_add_text(subtree4, tvb, q+2, 1, + "QoS Set Number: 0x%02x", tvb_get_guint8(tvb,q+2)); + ti = proto_tree_add_text(subtree4, tvb, q+3, 1, + "Technology Type: 0x%02x (%s)", tvb_get_guint8(tvb,q+3), + val_to_str(tvb_get_guint8(tvb,q+3),qos_tech_type,"Unknown")); + ti = proto_tree_add_text(subtree4, tvb, q+4, 2, + "QoS Marking O (16 bit): %s", decode_numeric_bitfield(tvb_get_ntohs(tvb,q+4), + 0xffff, 16, "0x%04x")); + ti = proto_tree_add_text(subtree4, tvb, q+6, 1, + "QoS Marking A (8 bit): %s (decimal %d)", decode_numeric_bitfield(tvb_get_guint8(tvb,q+6), + 0xff, 8, "0x%02x"), tvb_get_guint8(tvb,q+6)); + ti = proto_tree_add_text(subtree4, tvb, q+7, 1, + "Defaults to zero: 0x%02x", tvb_get_guint8(tvb,q+7)); + break; + case BGP_EXT_COM_COS_CAP_T: + is_regular_type = TRUE; + ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_emstr->str); - subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities); - ti = proto_tree_add_text(subtree4, tvb, q, 1, - "Type: 0x%02x", tvb_get_guint8(tvb,q)); - ti = proto_tree_add_text(subtree4, tvb, q+1, 1, - "Flags byte 1 : 0x%02x", tvb_get_guint8(tvb,q+1)); - subtree5 = proto_item_add_subtree(ti,ett_bgp_ext_com_flags); - /* add flag bitfield */ - ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), - 0x80, 8, "BE class supported", "BE class NOT supported")); - ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), - 0x40, 8, "EF class supported", "EF class NOT supported")); - ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), - 0x20, 8, "AF class supported", "AF class NOT supported")); - ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), - 0x10, 8, "LE class supported", "LE class NOT supported")); - ti = proto_tree_add_text(subtree4, tvb, q+2, 1, - "Flags byte 2..7 : 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", - tvb_get_guint8(tvb,q+2),tvb_get_guint8(tvb,q+3),tvb_get_guint8(tvb,q+4), - tvb_get_guint8(tvb,q+5),tvb_get_guint8(tvb,q+6),tvb_get_guint8(tvb,q+7)); - break; - } + subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities); + ti = proto_tree_add_text(subtree4, tvb, q, 1, + "Type: 0x%02x", tvb_get_guint8(tvb,q)); + ti = proto_tree_add_text(subtree4, tvb, q+1, 1, + "Flags byte 1 : 0x%02x", tvb_get_guint8(tvb,q+1)); + subtree5 = proto_item_add_subtree(ti,ett_bgp_ext_com_flags); + /* add flag bitfield */ + ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), + 0x80, 8, "BE class supported", "BE class NOT supported")); + ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), + 0x40, 8, "EF class supported", "EF class NOT supported")); + ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), + 0x20, 8, "AF class supported", "AF class NOT supported")); + ti = proto_tree_add_text(subtree5, tvb, q+1, 1, "%s", decode_boolean_bitfield(tvb_get_guint8(tvb,q+1), + 0x10, 8, "LE class supported", "LE class NOT supported")); + ti = proto_tree_add_text(subtree4, tvb, q+2, 1, + "Flags byte 2..7 : 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", + tvb_get_guint8(tvb,q+2),tvb_get_guint8(tvb,q+3),tvb_get_guint8(tvb,q+4), + tvb_get_guint8(tvb,q+5),tvb_get_guint8(tvb,q+6),tvb_get_guint8(tvb,q+7)); + break; + } /* switch (ext_com8) */ if (!is_regular_type) { - ep_strbuf_append(junk_emstr, val_to_str(ext_com,bgpext_com_type,"Unknown")); + ep_strbuf_append(junk_emstr, val_to_str(ext_com,bgpext_com_type,"Unknown")); - /* handle extended length types (16 bit) */ - switch (ext_com) { + /* handle extended length types (16 bit) */ + switch (ext_com) { case BGP_EXT_COM_RT_0: case BGP_EXT_COM_RT_2: case BGP_EXT_COM_RO_0: case BGP_EXT_COM_RO_2: is_extended_type = TRUE; ep_strbuf_append_printf(junk_emstr, ": %u%s%d", - tvb_get_ntohs(tvb,q+2),":",tvb_get_ntohl(tvb,q+4)); + tvb_get_ntohs(tvb,q+2),":",tvb_get_ntohl(tvb,q+4)); proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_emstr->str); break ; case BGP_EXT_COM_RT_1: @@ -2346,7 +2346,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree) is_extended_type = TRUE; ipaddr = tvb_get_ipv4(tvb,q+2); ep_strbuf_append_printf(junk_emstr, ": %s%s%u", - ip_to_str((guint8 *)&ipaddr),":",tvb_get_ntohs(tvb,q+6)); + ip_to_str((guint8 *)&ipaddr),":",tvb_get_ntohs(tvb,q+6)); proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_emstr->str); break; case BGP_EXT_COM_VPN_ORIGIN: @@ -2360,7 +2360,7 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree) is_extended_type = TRUE; ipaddr = tvb_get_ipv4(tvb,q+2); ep_strbuf_append_printf(junk_emstr, ": Area: %s, Type: %s", ip_to_str((guint8 *)&ipaddr), - val_to_str(tvb_get_guint8(tvb,q+6),bgpext_ospf_rtype,"Unknown")); + val_to_str(tvb_get_guint8(tvb,q+6),bgpext_ospf_rtype,"Unknown")); /* print OSPF Metric type if selected */ /* always print E2 even if not external route -- receiving router should ignore */ if ( (tvb_get_guint8(tvb,q+7)) & BGP_OSPF_RTYPE_METRIC_TYPE ) { @@ -2381,20 +2381,20 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree) case BGP_EXT_COM_L2INFO: is_extended_type = TRUE; ep_strbuf_append_printf(junk_emstr, - ": %s, Control Flags: %s%s%s%s%s, MTU: %u byte%s", - val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"), - tvb_get_guint8(tvb,q+3) ? "" : "none", - tvb_get_ntohs(tvb,q+3)&0x08 ? "Q" : "", - tvb_get_ntohs(tvb,q+3)&0x04 ? "F" : "", - tvb_get_ntohs(tvb,q+3)&0x02 ? "C" : "", - tvb_get_ntohs(tvb,q+3)&0x01 ? "S" : "", - tvb_get_ntohs(tvb,q+4), - plurality(tvb_get_ntohs(tvb,q+4), "", "s")); + ": %s, Control Flags: %s%s%s%s%s, MTU: %u byte%s", + val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown"), + tvb_get_guint8(tvb,q+3) ? "" : "none", + tvb_get_ntohs(tvb,q+3)&0x08 ? "Q" : "", + tvb_get_ntohs(tvb,q+3)&0x04 ? "F" : "", + tvb_get_ntohs(tvb,q+3)&0x02 ? "C" : "", + tvb_get_ntohs(tvb,q+3)&0x01 ? "S" : "", + tvb_get_ntohs(tvb,q+4), + plurality(tvb_get_ntohs(tvb,q+4), "", "s")); ti = proto_tree_add_text(subtree3,tvb,q,8, "%s",junk_emstr->str); subtree4 = proto_item_add_subtree(ti,ett_bgp_extended_communities); proto_tree_add_text(subtree4,tvb,q+2,1, "Encapsulation: %s", - val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown")); + val_to_str(tvb_get_guint8(tvb,q+2),bgp_l2vpn_encaps,"Unknown")); proto_tree_add_text(subtree4,tvb,q+3,1, "Control Flags: %s%sControl Word %s required, Sequenced delivery %s required", tvb_get_ntohs(tvb,q+3)&0x08 ? "Q flag (Reserved) set" : "", tvb_get_ntohs(tvb,q+3)&0x04 ? "F flag (reserved) set" : "", @@ -2404,93 +2404,93 @@ dissect_bgp_update(tvbuff_t *tvb, proto_tree *tree) tvb_get_ntohs(tvb,q+4), plurality(tvb_get_ntohs(tvb,q+4), "", "s")); break; - } + } /* switch (ext_com) */ } if (!is_regular_type && !is_extended_type) proto_tree_add_text(subtree3,tvb,q,8, "%s","Unknown"); q = q + 8; } - } - break; - case BGPTYPE_SAFI_SPECIFIC_ATTR: - q = o + i + aoff; - end = o + i + aoff + tlen ; + } + break; + case BGPTYPE_SAFI_SPECIFIC_ATTR: + q = o + i + aoff; + end = o + i + aoff + tlen ; - while(q < end) { - ssa_type = tvb_get_ntohs(tvb, q) & BGP_SSA_TYPE; - ssa_len = tvb_get_ntohs(tvb, q + 2); + while(q < end) { + ssa_type = tvb_get_ntohs(tvb, q) & BGP_SSA_TYPE; + ssa_len = tvb_get_ntohs(tvb, q + 2); - ti = proto_tree_add_text(subtree2, tvb, q, MIN(ssa_len + 4, end - q), - "%s Information", - val_to_str(ssa_type, bgp_ssa_type, "Unknown SSA")); - subtree3 = proto_item_add_subtree(ti, ett_bgp_ssa); + ti = proto_tree_add_text(subtree2, tvb, q, MIN(ssa_len + 4, end - q), + "%s Information", + val_to_str(ssa_type, bgp_ssa_type, "Unknown SSA")); + subtree3 = proto_item_add_subtree(ti, ett_bgp_ssa); - proto_tree_add_item(subtree3, hf_bgp_ssa_t, tvb, - q, 1, FALSE); - hidden_item = proto_tree_add_item(subtree3, hf_bgp_ssa_type, tvb, - q, 2, FALSE); - PROTO_ITEM_SET_HIDDEN(hidden_item); - proto_tree_add_text(subtree3, tvb, q, 2, - "Type: %s", val_to_str(ssa_type, bgp_ssa_type, "Unknown")); - if ((ssa_len == 0) || (q + ssa_len > end)) { - proto_tree_add_text(subtree3, tvb, q + 2, end - q - 2, - "Invalid Length of %u", ssa_len); - break; - } - proto_tree_add_item(subtree3, hf_bgp_ssa_len, tvb, - q + 2, 2, FALSE); + proto_tree_add_item(subtree3, hf_bgp_ssa_t, tvb, + q, 1, FALSE); + hidden_item = proto_tree_add_item(subtree3, hf_bgp_ssa_type, tvb, + q, 2, FALSE); + PROTO_ITEM_SET_HIDDEN(hidden_item); + proto_tree_add_text(subtree3, tvb, q, 2, + "Type: %s", val_to_str(ssa_type, bgp_ssa_type, "Unknown")); + if ((ssa_len == 0) || (q + ssa_len > end)) { + proto_tree_add_text(subtree3, tvb, q + 2, end - q - 2, + "Invalid Length of %u", ssa_len); + break; + } + proto_tree_add_item(subtree3, hf_bgp_ssa_len, tvb, + q + 2, 2, FALSE); - switch(ssa_type){ - case BGP_SSA_L2TPv3: - proto_tree_add_item(subtree3, hf_bgp_ssa_l2tpv3_pref, tvb, - q + 4, 2, FALSE); + switch (ssa_type) { + case BGP_SSA_L2TPv3: + proto_tree_add_item(subtree3, hf_bgp_ssa_l2tpv3_pref, tvb, + q + 4, 2, FALSE); - ti = proto_tree_add_text(subtree3, tvb, q + 6, 1, "Flags"); - subtree4 = proto_item_add_subtree(ti, ett_bgp_ssa_subtree) ; - proto_tree_add_item(subtree4, hf_bgp_ssa_l2tpv3_s, tvb, - q + 6, 1, FALSE); - proto_tree_add_item(subtree4, hf_bgp_ssa_l2tpv3_unused, tvb, - q + 6, 1, FALSE); + ti = proto_tree_add_text(subtree3, tvb, q + 6, 1, "Flags"); + subtree4 = proto_item_add_subtree(ti, ett_bgp_ssa_subtree) ; + proto_tree_add_item(subtree4, hf_bgp_ssa_l2tpv3_s, tvb, + q + 6, 1, FALSE); + proto_tree_add_item(subtree4, hf_bgp_ssa_l2tpv3_unused, tvb, + q + 6, 1, FALSE); - ssa_v3_len = tvb_get_guint8(tvb, q + 7); - if (ssa_v3_len + 8 == ssa_len){ - proto_tree_add_item(subtree3, hf_bgp_ssa_l2tpv3_cookie_len, tvb, - q + 7, 1, FALSE); - } else { - proto_tree_add_text(subtree3, tvb, q + 7, 1, - "Invalid Cookie Length of %u", ssa_v3_len); - q += ssa_len + 4; /* 4 from type and length */ - break; - } - proto_tree_add_item(subtree3, hf_bgp_ssa_l2tpv3_session_id, tvb, - q + 8, 4, FALSE); - if (ssa_v3_len) + ssa_v3_len = tvb_get_guint8(tvb, q + 7); + if (ssa_v3_len + 8 == ssa_len){ + proto_tree_add_item(subtree3, hf_bgp_ssa_l2tpv3_cookie_len, tvb, + q + 7, 1, FALSE); + } else { + proto_tree_add_text(subtree3, tvb, q + 7, 1, + "Invalid Cookie Length of %u", ssa_v3_len); + q += ssa_len + 4; /* 4 from type and length */ + break; + } + proto_tree_add_item(subtree3, hf_bgp_ssa_l2tpv3_session_id, tvb, + q + 8, 4, FALSE); + if (ssa_v3_len) proto_tree_add_item(subtree3, hf_bgp_ssa_l2tpv3_cookie, tvb, - q + 12, ssa_v3_len, FALSE); - q += ssa_len + 4; /* 4 from type and length */ - break; - case BGP_SSA_mGRE: - case BGP_SSA_IPSec: - case BGP_SSA_MPLS: - default: - proto_tree_add_item(subtree3, hf_bgp_ssa_value, tvb, - q + 4, ssa_len, FALSE); - q += ssa_len + 4; /* 4 from type and length */ - break; - case BGP_SSA_L2TPv3_IN_IPSec: - case BGP_SSA_mGRE_IN_IPSec: - /* These contain BGP_SSA_IPSec and BGP_SSA_L2TPv3/BGP_SSA_mGRE */ - q += 4; /* 4 from type and length */ - break; - } - } - break; + q + 12, ssa_v3_len, FALSE); + q += ssa_len + 4; /* 4 from type and length */ + break; + case BGP_SSA_mGRE: + case BGP_SSA_IPSec: + case BGP_SSA_MPLS: + default: + proto_tree_add_item(subtree3, hf_bgp_ssa_value, tvb, + q + 4, ssa_len, FALSE); + q += ssa_len + 4; /* 4 from type and length */ + break; + case BGP_SSA_L2TPv3_IN_IPSec: + case BGP_SSA_mGRE_IN_IPSec: + /* These contain BGP_SSA_IPSec and BGP_SSA_L2TPv3/BGP_SSA_mGRE */ + q += 4; /* 4 from type and length */ + break; + } /* switch (bgpa.bgpa_type) */ + } + break; - default: - proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, - "Unknown (%u byte%s)", tlen, plurality(tlen, "", "s")); - break; - } /* end of second switch */ + default: + proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen, + "Unknown (%u byte%s)", tlen, plurality(tlen, "", "s")); + break; + } /* switch (bgpa.bgpa_type) */ /* end of second switch */ i += alen + aoff; } @@ -2569,19 +2569,19 @@ dissect_bgp_route_refresh(tvbuff_t *tvb, proto_tree *tree) int p; /* tvb offset counter */ int pend; /* end of list of entries for one orf type */ guint16 hlen; /* tvb RR msg length */ - proto_item *ti; /* tree item */ - proto_item *ti1; /* tree item */ - proto_tree *subtree; /* tree for orf */ - proto_tree *subtree1; /* tree for orf entry */ - guint8 orftype; /* ORF Type */ - guint8 orfwhen; /* ORF flag: immediate, defer */ - guint16 orflen; /* ORF len */ - guint8 entryflag; /* ORF Entry flag: action(add,del,delall) match(permit,deny) */ - guint32 entryseq; /* ORF Entry sequence number */ - int entrylen; /* ORF Entry length */ - guint8 pfx_ge; /* ORF PrefixList mask lower bound */ - guint8 pfx_le; /* ORF PrefixList mask upper bound */ - int advance; /* tmp */ + proto_item *ti; /* tree item */ + proto_item *ti1; /* tree item */ + proto_tree *subtree; /* tree for orf */ + proto_tree *subtree1; /* tree for orf entry */ + guint8 orftype; /* ORF Type */ + guint8 orfwhen; /* ORF flag: immediate, defer */ + guint16 orflen; /* ORF len */ + guint8 entryflag; /* ORF Entry flag: action(add,del,delall) match(permit,deny) */ + guint32 entryseq; /* ORF Entry sequence number */ + int entrylen; /* ORF Entry length */ + guint8 pfx_ge; /* ORF PrefixList mask lower bound */ + guint8 pfx_le; /* ORF PrefixList mask upper bound */ + int advance; /* tmp */ /* @@ -2725,9 +2725,9 @@ dissect_bgp_pdu(tvbuff_t *volatile tvb, packet_info *pinfo, proto_tree *tree, guint16 bgp_len; /* Message length */ guint8 bgp_type; /* Message type */ const char *typ; /* Message type (string) */ - proto_item *ti; /* tree item */ - proto_tree *bgp_tree; /* BGP packet tree */ - proto_tree *bgp1_tree; /* BGP message tree */ + proto_item *ti; /* tree item */ + proto_tree *bgp_tree; /* BGP packet tree */ + proto_tree *bgp1_tree; /* BGP message tree */ bgp_len = tvb_get_ntohs(tvb, BGP_MARKER_SIZE); bgp_type = tvb_get_guint8(tvb, BGP_MARKER_SIZE + 2); @@ -2748,28 +2748,28 @@ dissect_bgp_pdu(tvbuff_t *volatile tvb, packet_info *pinfo, proto_tree *tree, /* add a different tree for each message type */ switch (bgp_type) { - case BGP_OPEN: - bgp1_tree = proto_item_add_subtree(ti, ett_bgp_open); - break; - case BGP_UPDATE: - bgp1_tree = proto_item_add_subtree(ti, ett_bgp_update); - break; - case BGP_NOTIFICATION: - bgp1_tree = proto_item_add_subtree(ti, ett_bgp_notification); - break; - case BGP_KEEPALIVE: - bgp1_tree = proto_item_add_subtree(ti, ett_bgp); - break; - case BGP_ROUTE_REFRESH_CISCO: - case BGP_ROUTE_REFRESH: - bgp1_tree = proto_item_add_subtree(ti, ett_bgp_route_refresh); - break; - case BGP_CAPABILITY: - bgp1_tree = proto_item_add_subtree(ti, ett_bgp_capability); - break; - default: - bgp1_tree = proto_item_add_subtree(ti, ett_bgp); - break; + case BGP_OPEN: + bgp1_tree = proto_item_add_subtree(ti, ett_bgp_open); + break; + case BGP_UPDATE: + bgp1_tree = proto_item_add_subtree(ti, ett_bgp_update); + break; + case BGP_NOTIFICATION: + bgp1_tree = proto_item_add_subtree(ti, ett_bgp_notification); + break; + case BGP_KEEPALIVE: + bgp1_tree = proto_item_add_subtree(ti, ett_bgp); + break; + case BGP_ROUTE_REFRESH_CISCO: + case BGP_ROUTE_REFRESH: + bgp1_tree = proto_item_add_subtree(ti, ett_bgp_route_refresh); + break; + case BGP_CAPABILITY: + bgp1_tree = proto_item_add_subtree(ti, ett_bgp_capability); + break; + default: + bgp1_tree = proto_item_add_subtree(ti, ett_bgp); + break; } proto_tree_add_text(bgp1_tree, tvb, 0, BGP_MARKER_SIZE, @@ -2791,27 +2791,27 @@ dissect_bgp_pdu(tvbuff_t *volatile tvb, packet_info *pinfo, proto_tree *tree, bgp_type); switch (bgp_type) { - case BGP_OPEN: - dissect_bgp_open(tvb, bgp1_tree); - break; - case BGP_UPDATE: - dissect_bgp_update(tvb, bgp1_tree); - break; - case BGP_NOTIFICATION: - dissect_bgp_notification(tvb, bgp1_tree); - break; - case BGP_KEEPALIVE: - /* no data in KEEPALIVE messages */ - break; - case BGP_ROUTE_REFRESH_CISCO: - case BGP_ROUTE_REFRESH: - dissect_bgp_route_refresh(tvb, bgp1_tree); - break; - case BGP_CAPABILITY: - dissect_bgp_capability(tvb, bgp1_tree); - break; - default: - break; + case BGP_OPEN: + dissect_bgp_open(tvb, bgp1_tree); + break; + case BGP_UPDATE: + dissect_bgp_update(tvb, bgp1_tree); + break; + case BGP_NOTIFICATION: + dissect_bgp_notification(tvb, bgp1_tree); + break; + case BGP_KEEPALIVE: + /* no data in KEEPALIVE messages */ + break; + case BGP_ROUTE_REFRESH_CISCO: + case BGP_ROUTE_REFRESH: + dissect_bgp_route_refresh(tvb, bgp1_tree); + break; + case BGP_CAPABILITY: + dissect_bgp_capability(tvb, bgp1_tree); + break; + default: + break; } } } diff --git a/epan/dissectors/packet-bittorrent.c b/epan/dissectors/packet-bittorrent.c index f1377214bb..48d4dafb99 100644 --- a/epan/dissectors/packet-bittorrent.c +++ b/epan/dissectors/packet-bittorrent.c @@ -92,35 +92,35 @@ static const value_string bittorrent_messages[] = { }; static const value_string azureus_priorities[] = { - { 0, "Low" }, - { 1, "Normal" }, - { 2, "High" }, - { 0, NULL } + { 0, "Low" }, + { 1, "Normal" }, + { 2, "High" }, + { 0, NULL } }; struct amp_message { - const char *name; - guint32 value; + const char *name; + guint32 value; }; static const struct amp_message amp_messages[] = { - { "BT_KEEP_ALIVE", AZUREUS_MESSAGE_KEEP_ALIVE }, - { "BT_CHOKE", BITTORRENT_MESSAGE_CHOKE }, - { "BT_UNCHOKE", BITTORRENT_MESSAGE_UNCHOKE }, - { "BT_INTERESTED", BITTORRENT_MESSAGE_INTERESTED }, - { "BT_UNINTERESTED", BITTORRENT_MESSAGE_NOT_INTERESTED }, - { "BT_HAVE", BITTORRENT_MESSAGE_HAVE }, - { "BT_BITFIELD", BITTORRENT_MESSAGE_BITFIELD }, - { "BT_REQUEST", BITTORRENT_MESSAGE_REQUEST }, - { "BT_PIECE", BITTORRENT_MESSAGE_PIECE }, - { "BT_CANCEL", BITTORRENT_MESSAGE_CANCEL }, - { "AZ_HANDSHAKE", AZUREUS_MESSAGE_HANDSHAKE }, - { "BT_HANDSHAKE", AZUREUS_MESSAGE_BT_HANDSHAKE }, - { "AZ_PEER_EXCHANGE", AZUREUS_MESSAGE_PEER_EXCHANGE }, - { "JPC_HELLO", AZUREUS_MESSAGE_JPC_HELLO }, - { "JPC_REPLY", AZUREUS_MESSAGE_JPC_REPLY }, - { NULL, 0 } + { "BT_KEEP_ALIVE", AZUREUS_MESSAGE_KEEP_ALIVE }, + { "BT_CHOKE", BITTORRENT_MESSAGE_CHOKE }, + { "BT_UNCHOKE", BITTORRENT_MESSAGE_UNCHOKE }, + { "BT_INTERESTED", BITTORRENT_MESSAGE_INTERESTED }, + { "BT_UNINTERESTED", BITTORRENT_MESSAGE_NOT_INTERESTED }, + { "BT_HAVE", BITTORRENT_MESSAGE_HAVE }, + { "BT_BITFIELD", BITTORRENT_MESSAGE_BITFIELD }, + { "BT_REQUEST", BITTORRENT_MESSAGE_REQUEST }, + { "BT_PIECE", BITTORRENT_MESSAGE_PIECE }, + { "BT_CANCEL", BITTORRENT_MESSAGE_CANCEL }, + { "AZ_HANDSHAKE", AZUREUS_MESSAGE_HANDSHAKE }, + { "BT_HANDSHAKE", AZUREUS_MESSAGE_BT_HANDSHAKE }, + { "AZ_PEER_EXCHANGE", AZUREUS_MESSAGE_PEER_EXCHANGE }, + { "JPC_HELLO", AZUREUS_MESSAGE_JPC_HELLO }, + { "JPC_REPLY", AZUREUS_MESSAGE_JPC_REPLY }, + { NULL, 0 } }; static dissector_handle_t dissector_handle; @@ -306,260 +306,260 @@ static guint get_bittorrent_pdu_length(packet_info *pinfo _U_, tvbuff_t *tvb, in } static int dissect_bencoding_str(tvbuff_t *tvb, packet_info *pinfo _U_, - int offset, int length, proto_tree *tree, proto_item *ti, int treeadd) + int offset, int length, proto_tree *tree, proto_item *ti, int treeadd) { - guint8 ch; - int stringlen = 0, nextstringlen; - int used; - int izero = 0; + guint8 ch; + int stringlen = 0, nextstringlen; + int used; + int izero = 0; - if (length<2) { - if (tree) { - proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid String"); - } - return -1; - } - - used = 0; - - while (length>=1) { - ch = tvb_get_guint8(tvb, offset+used); - length--; - used++; - - if (ch==':' && used>1) { - if (stringlen>length || stringlen<0) { - if (tree) { - proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid String Length"); - } - return -1; - } + if (length<2) { if (tree) { - proto_tree_add_uint(tree, hf_bittorrent_bstr_length, tvb, offset, used, stringlen); - proto_tree_add_item(tree, hf_bittorrent_bstr, tvb, offset+used, stringlen, FALSE); - - if (treeadd==1) { - proto_item_append_text(ti, " Key: %s", format_text(ep_tvb_memdup(tvb, offset+used, stringlen), stringlen)); - } - if (treeadd==2) { - proto_item_append_text(ti, " Value: %s", format_text(ep_tvb_memdup(tvb, offset+used, stringlen), stringlen)); - } + proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid String"); } - return used+stringlen; - } + return -1; + } - if (!izero && ch>='0' && ch<='9') { - if (ch=='0' && used==1) { - izero = 1; + used = 0; + + while (length>=1) { + ch = tvb_get_guint8(tvb, offset+used); + length--; + used++; + + if (ch==':' && used>1) { + if (stringlen>length || stringlen<0) { + if (tree) { + proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid String Length"); + } + return -1; + } + if (tree) { + proto_tree_add_uint(tree, hf_bittorrent_bstr_length, tvb, offset, used, stringlen); + proto_tree_add_item(tree, hf_bittorrent_bstr, tvb, offset+used, stringlen, FALSE); + + if (treeadd==1) { + proto_item_append_text(ti, " Key: %s", format_text(ep_tvb_memdup(tvb, offset+used, stringlen), stringlen)); + } + if (treeadd==2) { + proto_item_append_text(ti, " Value: %s", format_text(ep_tvb_memdup(tvb, offset+used, stringlen), stringlen)); + } + } + return used+stringlen; } - nextstringlen = (stringlen * 10) + (ch - '0'); - if (nextstringlen>=stringlen) { - stringlen = nextstringlen; - continue; + if (!izero && ch>='0' && ch<='9') { + if (ch=='0' && used==1) { + izero = 1; + } + + nextstringlen = (stringlen * 10) + (ch - '0'); + if (nextstringlen>=stringlen) { + stringlen = nextstringlen; + continue; + } } - } - if (tree) { - proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid String"); - } - return -1; - } + if (tree) { + proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid String"); + } + return -1; + } - if (tree) { - proto_tree_add_text(tree, tvb, offset, length, "Truncated Data"); - } - return -1; + if (tree) { + proto_tree_add_text(tree, tvb, offset, length, "Truncated Data"); + } + return -1; } static int dissect_bencoding_int(tvbuff_t *tvb, packet_info *pinfo _U_, - int offset, int length, proto_tree *tree, proto_item *ti, int treeadd) + int offset, int length, proto_tree *tree, proto_item *ti, int treeadd) { - gint32 ival=0; - int neg = 0; - int izero = 0; - int used; - guint8 ch; + gint32 ival=0; + int neg = 0; + int izero = 0; + int used; + guint8 ch; - if (length<3) { - if (tree) { - proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid Integer"); - } - return -1; - } - - length--; - used = 1; - - while (length>=1) { - ch = tvb_get_guint8(tvb, offset+used); - length--; - used++; - - switch (ch) { - case 'e': + if (length<3) { if (tree) { - if (neg) ival = -ival; - proto_tree_add_int(tree, hf_bittorrent_bint, tvb, offset, used, ival); - if (treeadd==2) { - proto_item_append_text(ti, " Value: %d", ival); - } - } - return used; - - case '-': - if (used==2) { - neg = 1; - break; - } - /* Fall through */ - - default: - if (!(ch=='0' && used==3 && neg)) { /* -0 is invalid */ - if (ch=='0' && used==2) { /* as is 0[0-9]+ */ - izero = 1; - break; - } - if (!izero && ch>='0' && ch<='9') { - ival = (ival * 10) + (ch - '0'); - break; - } - } - - if (tree) { - proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid Integer"); + proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid Integer"); } return -1; - } - } + } - if (tree) { - proto_tree_add_text(tree, tvb, offset, length, "Truncated Data"); - } - return -1; + length--; + used = 1; + + while (length>=1) { + ch = tvb_get_guint8(tvb, offset+used); + length--; + used++; + + switch (ch) { + case 'e': + if (tree) { + if (neg) ival = -ival; + proto_tree_add_int(tree, hf_bittorrent_bint, tvb, offset, used, ival); + if (treeadd==2) { + proto_item_append_text(ti, " Value: %d", ival); + } + } + return used; + + case '-': + if (used==2) { + neg = 1; + break; + } + /* Fall through */ + + default: + if (!(ch=='0' && used==3 && neg)) { /* -0 is invalid */ + if (ch=='0' && used==2) { /* as is 0[0-9]+ */ + izero = 1; + break; + } + if (!izero && ch>='0' && ch<='9') { + ival = (ival * 10) + (ch - '0'); + break; + } + } + + if (tree) { + proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid Integer"); + } + return -1; + } + } + + if (tree) { + proto_tree_add_text(tree, tvb, offset, length, "Truncated Data"); + } + return -1; } static int dissect_bencoding_rec(tvbuff_t *tvb, packet_info *pinfo _U_, - int offset, int length, proto_tree *tree, int level, proto_item *treei, int treeadd) + int offset, int length, proto_tree *tree, int level, proto_item *treei, int treeadd) { - guint8 op; - int oplen = 0, op1len, op2len; - int used; + guint8 op; + int oplen = 0, op1len, op2len; + int used; - proto_item *ti = NULL, *td = NULL; - proto_tree *itree = NULL, *dtree = NULL; + proto_item *ti = NULL, *td = NULL; + proto_tree *itree = NULL, *dtree = NULL; - if (level>10) { - proto_tree_add_text(tree, tvb, offset, -1, "Decode Aborted: Nested Too Deep"); - return -1; - } - if (length<1) { - proto_tree_add_text(tree, tvb, offset, -1, "Truncated Data"); - return length; - } + if (level>10) { + proto_tree_add_text(tree, tvb, offset, -1, "Decode Aborted: Nested Too Deep"); + return -1; + } + if (length<1) { + proto_tree_add_text(tree, tvb, offset, -1, "Truncated Data"); + return length; + } - op = tvb_get_guint8(tvb, offset); - if (tree) { - oplen = dissect_bencoding_rec(tvb, pinfo, offset, length, NULL, level, NULL, 0); - if (oplen<0) oplen = length; - } + op = tvb_get_guint8(tvb, offset); + if (tree) { + oplen = dissect_bencoding_rec(tvb, pinfo, offset, length, NULL, level, NULL, 0); + if (oplen<0) oplen = length; + } - switch (op) { - case 'd': - if (tree) { - td = proto_tree_add_item(tree, hf_bittorrent_bdict, tvb, offset, oplen, FALSE); - dtree = proto_item_add_subtree(td, ett_bittorrent_bdict); - } - - used = 1; - length--; - - while (length>=1) { - op = tvb_get_guint8(tvb, offset+used); - - if (op=='e') { - return used+1; + switch (op) { + case 'd': + if (tree) { + td = proto_tree_add_item(tree, hf_bittorrent_bdict, tvb, offset, oplen, FALSE); + dtree = proto_item_add_subtree(td, ett_bittorrent_bdict); } - op1len = dissect_bencoding_str(tvb, pinfo, offset+used, length, NULL, NULL, 0); - if (op1len<0) { - if (dtree) { - proto_tree_add_text(dtree, tvb, offset+used, -1, "Decode Aborted: Invalid Dictionary Key"); - } - return op1len; - } + used = 1; + length--; - op2len = -1; - if (length-op1len>2) - op2len = dissect_bencoding_rec(tvb, pinfo, offset+used+op1len, length-op1len, NULL, level+1, NULL, 0); - if (op2len<0) { - if (dtree) { - proto_tree_add_text(dtree, tvb, offset+used+op1len, -1, "Decode Aborted: Invalid Dictionary Value"); - } - return op2len; - } + while (length>=1) { + op = tvb_get_guint8(tvb, offset+used); + if (op=='e') { + return used+1; + } + + op1len = dissect_bencoding_str(tvb, pinfo, offset+used, length, NULL, NULL, 0); + if (op1len<0) { + if (dtree) { + proto_tree_add_text(dtree, tvb, offset+used, -1, "Decode Aborted: Invalid Dictionary Key"); + } + return op1len; + } + + op2len = -1; + if (length-op1len>2) + op2len = dissect_bencoding_rec(tvb, pinfo, offset+used+op1len, length-op1len, NULL, level+1, NULL, 0); + if (op2len<0) { + if (dtree) { + proto_tree_add_text(dtree, tvb, offset+used+op1len, -1, "Decode Aborted: Invalid Dictionary Value"); + } + return op2len; + } + + if (dtree) { + ti = proto_tree_add_item(dtree, hf_bittorrent_bdict_entry, tvb, offset+used, op1len+op2len, FALSE); + itree = proto_item_add_subtree(ti, ett_bittorrent_bdict_entry); + + dissect_bencoding_str(tvb, pinfo, offset+used, length, itree, ti, 1); + dissect_bencoding_rec(tvb, pinfo, offset+used+op1len, length-op1len, itree, level+1, ti, 2); + } + + used += op1len+op2len; + length -= op1len+op2len; + } if (dtree) { - ti = proto_tree_add_item(dtree, hf_bittorrent_bdict_entry, tvb, offset+used, op1len+op2len, FALSE); - itree = proto_item_add_subtree(ti, ett_bittorrent_bdict_entry); + proto_tree_add_text(dtree, tvb, offset+used, -1, "Truncated Data"); + } + return -1; - dissect_bencoding_str(tvb, pinfo, offset+used, length, itree, ti, 1); - dissect_bencoding_rec(tvb, pinfo, offset+used+op1len, length-op1len, itree, level+1, ti, 2); + case 'l': + if (tree) { + ti = proto_tree_add_item(tree, hf_bittorrent_blist, tvb, offset, oplen, FALSE); + itree = proto_item_add_subtree(ti, ett_bittorrent_blist); } - used += op1len+op2len; - length -= op1len+op2len; - } - if (dtree) { - proto_tree_add_text(dtree, tvb, offset+used, -1, "Truncated Data"); - } - return -1; + used = 1; + length--; - case 'l': - if (tree) { - ti = proto_tree_add_item(tree, hf_bittorrent_blist, tvb, offset, oplen, FALSE); - itree = proto_item_add_subtree(ti, ett_bittorrent_blist); - } + while (length>=1) { + op = tvb_get_guint8(tvb, offset+used); - used = 1; - length--; + if (op=='e') { + return used+1; + } - while (length>=1) { - op = tvb_get_guint8(tvb, offset+used); + oplen = dissect_bencoding_rec(tvb, pinfo, offset+used, length, itree, level+1, ti, 0); + if (oplen<1) return oplen; - if (op=='e') { - return used+1; + used += oplen; + length -= oplen; + } + if (itree) { + proto_tree_add_text(itree, tvb, offset+used, -1, "Truncated Data"); + } + return -1; + + case 'i': + return dissect_bencoding_int(tvb, pinfo, offset, length, tree, treei, treeadd); + + default: + if (op>='1' && op<='9') { + return dissect_bencoding_str(tvb, pinfo, offset, length, tree, treei, treeadd); } - oplen = dissect_bencoding_rec(tvb, pinfo, offset+used, length, itree, level+1, ti, 0); - if (oplen<1) return oplen; + if (tree) { + proto_tree_add_text(tree, tvb, offset, -1, "Decode Aborted: Invalid Bencoding"); + } + } - used += oplen; - length -= oplen; - } - if (itree) { - proto_tree_add_text(itree, tvb, offset+used, -1, "Truncated Data"); - } - return -1; - - case 'i': - return dissect_bencoding_int(tvb, pinfo, offset, length, tree, treei, treeadd); - - default: - if (op>='1' && op<='9') { - return dissect_bencoding_str(tvb, pinfo, offset, length, tree, treei, treeadd); - } - - if (tree) { - proto_tree_add_text(tree, tvb, offset, -1, "Decode Aborted: Invalid Bencoding"); - } - } - - return -1; + return -1; } static void dissect_bencoding(tvbuff_t *tvb, packet_info *pinfo _U_, - int offset, int length, proto_tree *tree) + int offset, int length, proto_tree *tree) { dissect_bencoding_rec(tvb, pinfo, offset, length, tree, 0, NULL, 0); } @@ -586,53 +586,55 @@ static void dissect_bittorrent_message (tvbuff_t *tvb, packet_info *pinfo, proto type = tvb_get_guint8(tvb, offset + BITTORRENT_HEADER_LENGTH); if (type==BITTORRENT_MESSAGE_CHOKE && length>4) { - /* - * Choke messages have no payload, so this is likely an Azureus - * Messaging Protocol packet - */ - if (!tvb_bytes_exist(tvb, offset + BITTORRENT_HEADER_LENGTH, 4)) - return; + /* + * Choke messages have no payload, so this is likely an Azureus + * Messaging Protocol packet + */ + if (!tvb_bytes_exist(tvb, offset + BITTORRENT_HEADER_LENGTH, 4)) + return; - typelen = tvb_get_ntohl(tvb, offset + BITTORRENT_HEADER_LENGTH); - if (4+typelen+1<=length) { - if (!tvb_bytes_exist(tvb, offset + BITTORRENT_HEADER_LENGTH + 4, typelen+1)) - return; + typelen = tvb_get_ntohl(tvb, offset + BITTORRENT_HEADER_LENGTH); + if (4+typelen+1<=length) { + if (!tvb_bytes_exist(tvb, offset + BITTORRENT_HEADER_LENGTH + 4, typelen+1)) + return; - for ( i=0 ; amp_messages[i].name ; i++ ) { - if (strlen(amp_messages[i].name)==typelen && - tvb_memeql(tvb, offset + BITTORRENT_HEADER_LENGTH + 4, - amp_messages[i].name, (int)strlen(amp_messages[i].name))==0) { + for ( i=0 ; amp_messages[i].name ; i++ ) { + if (strlen(amp_messages[i].name)==typelen && + tvb_memeql(tvb, offset + BITTORRENT_HEADER_LENGTH + 4, + amp_messages[i].name, (int)strlen(amp_messages[i].name))==0) { - prio = tvb_get_guint8(tvb, offset + BITTORRENT_HEADER_LENGTH + 4 + typelen); - if (prio==0 || prio==1 || prio==2) { - type = amp_messages[i].value; - doffset = BITTORRENT_HEADER_LENGTH + 4 + typelen + 1; - isamp = 1; - } - break; - } - } - } + prio = tvb_get_guint8(tvb, offset + BITTORRENT_HEADER_LENGTH + 4 + typelen); + if (prio==0 || prio==1 || prio==2) { + type = amp_messages[i].value; + doffset = BITTORRENT_HEADER_LENGTH + 4 + typelen + 1; + isamp = 1; + } + break; + } + } + } } msgtype = match_strval(type, bittorrent_messages); - /* if (msgtype == NULL && isamp) { - msgtype = match_strval(type, azureus_messages); - } */ +#if 0 + if (msgtype == NULL && isamp) { + msgtype = match_strval(type, azureus_messages); + } +#endif if (msgtype == NULL) { proto_tree_add_text(tree, tvb, offset, -1, "Continuation data"); col_set_str(pinfo->cinfo, COL_INFO, "Continuation data"); return; } } else { - /* not enough bytes of the header, stop here */ - return; + /* not enough bytes of the header, stop here */ + return; } if (isamp) { - ti = proto_tree_add_item(tree, hf_azureus_msg, tvb, offset, length + BITTORRENT_HEADER_LENGTH, FALSE); + ti = proto_tree_add_item(tree, hf_azureus_msg, tvb, offset, length + BITTORRENT_HEADER_LENGTH, FALSE); } else { - ti = proto_tree_add_item(tree, hf_bittorrent_msg, tvb, offset, length + BITTORRENT_HEADER_LENGTH, FALSE); + ti = proto_tree_add_item(tree, hf_bittorrent_msg, tvb, offset, length + BITTORRENT_HEADER_LENGTH, FALSE); } mtree = proto_item_add_subtree(ti, ett_bittorrent_msg); @@ -649,17 +651,17 @@ static void dissect_bittorrent_message (tvbuff_t *tvb, packet_info *pinfo, proto /* If the tvb_bytes_exist() call above returned FALSE, this will throw an exception, so we won't use msgtype or type. */ if (isamp) { - proto_tree_add_item(mtree, hf_azureus_msg_type_len, tvb, offset, 4, FALSE); - proto_tree_add_item(mtree, hf_azureus_msg_type, tvb, offset+4, typelen, FALSE); - proto_item_append_text(ti, ": Len %u, %s", length, msgtype); - proto_tree_add_item(mtree, hf_azureus_msg_prio, tvb, offset+4+typelen, 1, FALSE); - offset += 4+typelen+1; - length -= 4+typelen+1; + proto_tree_add_item(mtree, hf_azureus_msg_type_len, tvb, offset, 4, FALSE); + proto_tree_add_item(mtree, hf_azureus_msg_type, tvb, offset+4, typelen, FALSE); + proto_item_append_text(ti, ": Len %u, %s", length, msgtype); + proto_tree_add_item(mtree, hf_azureus_msg_prio, tvb, offset+4+typelen, 1, FALSE); + offset += 4+typelen+1; + length -= 4+typelen+1; } else { - proto_tree_add_item(mtree, hf_bittorrent_msg_type, tvb, offset, 1, FALSE); - proto_item_append_text(ti, ": Len:%u, %s", length, msgtype); - offset += 1; - length -= 1; + proto_tree_add_item(mtree, hf_bittorrent_msg_type, tvb, offset, 1, FALSE); + proto_item_append_text(ti, ": Len:%u, %s", length, msgtype); + offset += 1; + length -= 1; } col_set_str(pinfo->cinfo, COL_INFO, msgtype); @@ -673,25 +675,25 @@ static void dissect_bittorrent_message (tvbuff_t *tvb, packet_info *pinfo, proto case BITTORRENT_MESSAGE_REQUEST: case BITTORRENT_MESSAGE_CANCEL: - piece_index = tvb_get_ntohl(tvb, offset); + piece_index = tvb_get_ntohl(tvb, offset); proto_tree_add_uint(mtree, hf_bittorrent_piece_index, tvb, offset, 4, piece_index); offset += 4; - piece_begin = tvb_get_ntohl(tvb, offset); + piece_begin = tvb_get_ntohl(tvb, offset); proto_tree_add_uint(mtree, hf_bittorrent_piece_begin, tvb, offset, 4, piece_begin); offset += 4; - piece_length = tvb_get_ntohl(tvb, offset); + piece_length = tvb_get_ntohl(tvb, offset); proto_tree_add_uint(mtree, hf_bittorrent_piece_length, tvb, offset, 4, piece_length); proto_item_append_text(ti, ", Piece (Idx:0x%x,Begin:0x%x,Len:0x%x)", piece_index, piece_begin, piece_length); if (check_col(pinfo->cinfo, COL_INFO)) { col_append_fstr(pinfo->cinfo, COL_INFO, ", Piece (Idx:0x%x,Begin:0x%x,Len:0x%x)", piece_index, piece_begin, piece_length); - } + } break; case BITTORRENT_MESSAGE_HAVE: - piece_index = tvb_get_ntohl(tvb, offset); + piece_index = tvb_get_ntohl(tvb, offset); proto_tree_add_item(mtree, hf_bittorrent_piece_index, tvb, offset, 4, FALSE); proto_item_append_text(ti, ", Piece (Idx:0x%x)", piece_index); if (check_col(pinfo->cinfo, COL_INFO)) { col_append_fstr(pinfo->cinfo, COL_INFO, ", Piece (Idx:0x%x)", piece_index); - } + } break; case BITTORRENT_MESSAGE_BITFIELD: @@ -699,15 +701,15 @@ static void dissect_bittorrent_message (tvbuff_t *tvb, packet_info *pinfo, proto proto_item_append_text(ti, ", Len:0x%x", length); if (check_col(pinfo->cinfo, COL_INFO)) { col_append_fstr(pinfo->cinfo, COL_INFO, ", Len:0x%x", length); - } + } break; case BITTORRENT_MESSAGE_PIECE: - piece_index = tvb_get_ntohl(tvb, offset); + piece_index = tvb_get_ntohl(tvb, offset); proto_tree_add_uint(mtree, hf_bittorrent_piece_index, tvb, offset, 4, piece_index); offset += 4; length -= 4; - piece_begin = tvb_get_ntohl(tvb, offset); + piece_begin = tvb_get_ntohl(tvb, offset); proto_tree_add_item(mtree, hf_bittorrent_piece_begin, tvb, offset, 4, piece_begin); offset += 4; length -= 4; @@ -715,25 +717,25 @@ static void dissect_bittorrent_message (tvbuff_t *tvb, packet_info *pinfo, proto proto_item_append_text(ti, ", Idx:0x%x,Begin:0x%x,Len:0x%x", piece_index, piece_begin, length); if (check_col(pinfo->cinfo, COL_INFO)) { col_append_fstr(pinfo->cinfo, COL_INFO, ", Idx:0x%x,Begin:0x%x,Len:0x%x", piece_index, piece_begin, length); - } + } break; case AZUREUS_MESSAGE_HANDSHAKE: case AZUREUS_MESSAGE_PEER_EXCHANGE: - dissect_bencoding(tvb, pinfo, offset, length, mtree); - break; + dissect_bencoding(tvb, pinfo, offset, length, mtree); + break; case AZUREUS_MESSAGE_JPC_HELLO: - stringlen = tvb_get_ntohl(tvb, offset); - proto_tree_add_item(mtree, hf_azureus_jpc_addrlen, tvb, offset, 4, FALSE); - proto_tree_add_item(mtree, hf_azureus_jpc_addr, tvb, offset+4, stringlen, FALSE); - proto_tree_add_item(mtree, hf_azureus_jpc_port, tvb, offset+4+stringlen, 4, FALSE); - proto_tree_add_item(mtree, hf_azureus_jpc_session, tvb, offset+4+stringlen+4, 4, FALSE); - break; + stringlen = tvb_get_ntohl(tvb, offset); + proto_tree_add_item(mtree, hf_azureus_jpc_addrlen, tvb, offset, 4, FALSE); + proto_tree_add_item(mtree, hf_azureus_jpc_addr, tvb, offset+4, stringlen, FALSE); + proto_tree_add_item(mtree, hf_azureus_jpc_port, tvb, offset+4+stringlen, 4, FALSE); + proto_tree_add_item(mtree, hf_azureus_jpc_session, tvb, offset+4+stringlen+4, 4, FALSE); + break; case AZUREUS_MESSAGE_JPC_REPLY: - proto_tree_add_item(mtree, hf_azureus_jpc_session, tvb, offset, 4, FALSE); - break; + proto_tree_add_item(mtree, hf_azureus_jpc_session, tvb, offset, 4, FALSE); + break; default: break; @@ -759,12 +761,12 @@ static void dissect_bittorrent_welcome (tvbuff_t *tvb, packet_info *pinfo _U_, p if(decode_client_information) { for(i = 0; peer_id[i].id[0] != '\0'; ++i) { - if(tvb_memeql(tvb, offset, peer_id[i].id, (int)strlen(peer_id[i].id)) == 0) { - version = tvb_get_ephemeral_string(tvb, offset + (int)strlen(peer_id[i].id), - peer_id[i].ver_len); + if(tvb_memeql(tvb, offset, peer_id[i].id, (int)strlen(peer_id[i].id)) == 0) { + version = tvb_get_ephemeral_string(tvb, offset + (int)strlen(peer_id[i].id), + peer_id[i].ver_len); proto_tree_add_text(tree, tvb, offset, 20, "Client is %s v%s", - peer_id[i].name, - format_text((guchar*)version, peer_id[i].ver_len)); + peer_id[i].name, + format_text((guchar*)version, peer_id[i].ver_len)); break; } } @@ -828,125 +830,124 @@ proto_register_bittorrent(void) { static hf_register_info hf[] = { { &hf_bittorrent_field_length, - { "Field Length", "bittorrent.length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } + { "Field Length", "bittorrent.length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_prot_name_len, - { "Protocol Name Length", "bittorrent.protocol.name.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } + { "Protocol Name Length", "bittorrent.protocol.name.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_prot_name, - { "Protocol Name", "bittorrent.protocol.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Protocol Name", "bittorrent.protocol.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_reserved, - { "Reserved Extension Bytes", "bittorrent.reserved", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Reserved Extension Bytes", "bittorrent.reserved", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_sha1_hash, - { "SHA1 Hash of info dictionary", "bittorrent.info_hash", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "SHA1 Hash of info dictionary", "bittorrent.info_hash", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_peer_id, - { "Peer ID", "bittorrent.peer_id", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Peer ID", "bittorrent.peer_id", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_msg, - { "Message", "bittorrent.msg", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Message", "bittorrent.msg", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_msg_len, - { "Message Length", "bittorrent.msg.length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } + { "Message Length", "bittorrent.msg.length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_msg_type, - { "Message Type", "bittorrent.msg.type", FT_UINT8, BASE_DEC, VALS(bittorrent_messages), 0x0, NULL, HFILL } + { "Message Type", "bittorrent.msg.type", FT_UINT8, BASE_DEC, VALS(bittorrent_messages), 0x0, NULL, HFILL } }, { &hf_azureus_msg, - { "Azureus Message", "bittorrent.azureus_msg", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Azureus Message", "bittorrent.azureus_msg", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_azureus_msg_type_len, - { "Message Type Length", "bittorrent.msg.typelen", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } + { "Message Type Length", "bittorrent.msg.typelen", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_azureus_msg_type, - { "Message Type", "bittorrent.msg.aztype", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Message Type", "bittorrent.msg.aztype", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_azureus_msg_prio, - { "Message Priority", "bittorrent.msg.prio", FT_UINT8, BASE_DEC, VALS(azureus_priorities), 0x0, NULL, HFILL } + { "Message Priority", "bittorrent.msg.prio", FT_UINT8, BASE_DEC, VALS(azureus_priorities), 0x0, NULL, HFILL } }, { &hf_bittorrent_bitfield_data, - { "Bitfield data", "bittorrent.msg.bitfield", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Bitfield data", "bittorrent.msg.bitfield", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_piece_index, - { "Piece index", "bittorrent.piece.index", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } + { "Piece index", "bittorrent.piece.index", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_piece_begin, - { "Begin offset of piece", "bittorrent.piece.begin", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } + { "Begin offset of piece", "bittorrent.piece.begin", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_piece_data, - { "Data in a piece", "bittorrent.piece.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Data in a piece", "bittorrent.piece.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_piece_length, - { "Piece Length", "bittorrent.piece.length", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } + { "Piece Length", "bittorrent.piece.length", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_bstr_length, - { "String Length", "bittorrent.bstr.length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } + { "String Length", "bittorrent.bstr.length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_bstr, - { "String", "bittorrent.bstr", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "String", "bittorrent.bstr", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_bint, - { "Integer", "bittorrent.bint", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } + { "Integer", "bittorrent.bint", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_bdict, - { "Dictionary", "bittorrent.bdict", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Dictionary", "bittorrent.bdict", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_bdict_entry, - { "Entry", "bittorrent.bdict.entry", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Entry", "bittorrent.bdict.entry", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_bittorrent_blist, - { "List", "bittorrent.blist", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "List", "bittorrent.blist", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_azureus_jpc_addrlen, - { "Cache Address Length", "bittorrent.jpc.addr.length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } + { "Cache Address Length", "bittorrent.jpc.addr.length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_azureus_jpc_addr, - { "Cache Address", "bittorrent.jpc.addr", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } + { "Cache Address", "bittorrent.jpc.addr", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_azureus_jpc_port, - { "Port", "bittorrent.jpc.port", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } + { "Port", "bittorrent.jpc.port", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_azureus_jpc_session, - { "Session ID", "bittorrent.jpc.session", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } + { "Session ID", "bittorrent.jpc.session", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } } - }; + }; - static gint *ett[] = { - &ett_bittorrent, - &ett_bittorrent_msg, - &ett_peer_id, - &ett_bittorrent_bdict, - &ett_bittorrent_bdict_entry, - &ett_bittorrent_blist - }; + static gint *ett[] = { + &ett_bittorrent, + &ett_bittorrent_msg, + &ett_peer_id, + &ett_bittorrent_bdict, + &ett_bittorrent_bdict_entry, + &ett_bittorrent_blist + }; - module_t *bittorrent_module; + module_t *bittorrent_module; - proto_bittorrent = proto_register_protocol("BitTorrent", "BitTorrent", "bittorrent"); - proto_register_field_array(proto_bittorrent, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); + proto_bittorrent = proto_register_protocol("BitTorrent", "BitTorrent", "bittorrent"); + proto_register_field_array(proto_bittorrent, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); - register_dissector("bittorrent.tcp", dissect_bittorrent, proto_bittorrent); + register_dissector("bittorrent.tcp", dissect_bittorrent, proto_bittorrent); - bittorrent_module = prefs_register_protocol(proto_bittorrent, NULL); - prefs_register_bool_preference(bittorrent_module, "desegment", - "Reassemble BitTorrent messages spanning multiple TCP segments", - "Whether the BitTorrent dissector should reassemble messages spanning multiple TCP segments." - " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.", - &bittorrent_desegment); - prefs_register_bool_preference(bittorrent_module, "decode_client", - "Decode the peer_id of the handshake messages", - "Enabling this will tell which BitTorrent client that produced the handshake message", - &decode_client_information); + bittorrent_module = prefs_register_protocol(proto_bittorrent, NULL); + prefs_register_bool_preference(bittorrent_module, "desegment", + "Reassemble BitTorrent messages spanning multiple TCP segments", + "Whether the BitTorrent dissector should reassemble messages spanning multiple TCP segments." + " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.", + &bittorrent_desegment); + prefs_register_bool_preference(bittorrent_module, "decode_client", + "Decode the peer_id of the handshake messages", + "Enabling this will tell which BitTorrent client that produced the handshake message", + &decode_client_information); } void proto_reg_handoff_bittorrent(void) { -/* dissector_handle = create_dissector_handle(dissect_bittorrent, proto_bittorrent); */ dissector_handle = find_dissector("bittorrent.tcp"); #if 0 dissector_add("tcp.port", 6881, dissector_handle); @@ -961,3 +962,16 @@ proto_reg_handoff_bittorrent(void) #endif heur_dissector_add("tcp", test_bittorrent_packet, proto_bittorrent); } + +/* + * Editor modelines + * + * Local Variables: + * c-basic-offset: 3 + * tab-width: 3 + * indent-tabs-mode: nil + * End: + * + * ex: set shiftwidth=3 tabstop=3 expandtab + * :indentSize=3:tabSize=3:noTabs=true: + */ diff --git a/epan/dissectors/packet-dcerpc-netlogon.c b/epan/dissectors/packet-dcerpc-netlogon.c index 2e1b44274e..ad4283c835 100644 --- a/epan/dissectors/packet-dcerpc-netlogon.c +++ b/epan/dissectors/packet-dcerpc-netlogon.c @@ -55,13 +55,13 @@ extern const char *gbl_nt_password; #define debugprintf(...) fprintf(stderr,__VA_ARGS__) static void printnbyte(const guint8* tab,int nb,const char* txt,const char* txt2) { - int i=0; - debugprintf("%s ",txt); - for(i=0;iname == NULL || key2->name ==NULL) - return ((key1->dstport == key2->dstport) && ADDRESSES_EQUAL(&key1->src,&key2->src) && - ADDRESSES_EQUAL(&key1->dst,&key2->dst)); + return ((key1->dstport == key2->dstport) && ADDRESSES_EQUAL(&key1->src,&key2->src) && + ADDRESSES_EQUAL(&key1->dst,&key2->dst)); else - return ((strcmp(key1->name,key2->name)==0) && ADDRESSES_EQUAL(&key1->src,&key2->src) && - ADDRESSES_EQUAL(&key1->dst,&key2->dst)); + return ((strcmp(key1->name,key2->name)==0) && ADDRESSES_EQUAL(&key1->src,&key2->src) && + ADDRESSES_EQUAL(&key1->dst,&key2->dst)); } guint @@ -589,14 +590,14 @@ netlogon_auth_hash (gconstpointer k) const netlogon_auth_key *key1 = (const netlogon_auth_key *)k; guint hash_val1; if(key1->name == NULL) { - hash_val1 = key1->dstport; + hash_val1 = key1->dstport; } else { - unsigned int i = 0; - hash_val1 = 0; - for(i=0; iname);i++) { - hash_val1 += key1->name[i]; - } + unsigned int i = 0; + hash_val1 = 0; + for(i=0; iname);i++) { + hash_val1 += key1->name[i]; + } } ADD_ADDRESS_TO_HASH(hash_val1, &key1->src); @@ -605,172 +606,172 @@ netlogon_auth_hash (gconstpointer k) } static int netlogon_dissect_EXTRA_FLAGS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) { - guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; - dcerpc_info *di; + guint32 mask; + proto_item *item = NULL; + proto_tree *tree = NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, - hf_netlogon_extraflags, &mask); + offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, + hf_netlogon_extraflags, &mask); - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_extraflags, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_trust_flags); - } + if(parent_tree){ + item = proto_tree_add_uint(parent_tree, hf_netlogon_extraflags, + tvb, offset-4, 4, mask); + tree = proto_item_add_subtree(item, ett_trust_flags); + } - proto_tree_add_boolean(tree, hf_netlogon_extra_flags_root_forest, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_dc_firsthop, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_rodc_to_dc, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_rodc_ntlm, - tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_extra_flags_root_forest, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_flags_dc_firsthop, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_flags_rodc_to_dc, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_flags_rodc_ntlm, + tvb, offset-4, 4, mask); - return offset; + return offset; } int dissect_ndr_lm_nt_hash_cb(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep, int hf_index, - dcerpc_callback_fnct_t *callback, - void *callback_args) + packet_info *pinfo, proto_tree *tree, + guint8 *drep, int hf_index, + dcerpc_callback_fnct_t *callback, + void *callback_args) { - dcerpc_info *di = pinfo->private_data; - guint16 len, size; + dcerpc_info *di = pinfo->private_data; + guint16 len, size; - /* Structure starts with short, but is aligned for longs */ + /* Structure starts with short, but is aligned for longs */ - ALIGN_TO_4_BYTES; + ALIGN_TO_4_BYTES; + + if (di->conformant_run) + return offset; + +#if 0 + struct { + short len; + short size; + [size_is(size/2), length_is(len/2), ptr] unsigned short *string; + } HASH; + +#endif + + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_nt_cs_len, &len); + + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_nt_cs_size, &size); + + offset = dissect_ndr_pointer_cb(tvb, offset, pinfo, tree, drep, + dissect_ndr_char_cvstring, NDR_POINTER_UNIQUE, + "Bytes Array", hf_index, callback, callback_args); - if (di->conformant_run) return offset; - - /* - struct { - short len; - short size; - [size_is(size/2), length_is(len/2), ptr] unsigned short *string; - } HASH; - - */ - - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_nt_cs_len, &len); - - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_nt_cs_size, &size); - - offset = dissect_ndr_pointer_cb(tvb, offset, pinfo, tree, drep, - dissect_ndr_char_cvstring, NDR_POINTER_UNIQUE, - "Bytes Array", hf_index, callback, callback_args); - - return offset; } static int dissect_ndr_lm_nt_hash_helper(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep, int hf_index, int levels _U_, - gboolean add_subtree) + packet_info *pinfo, proto_tree *tree, + guint8 *drep, int hf_index, int levels _U_, + gboolean add_subtree) { - proto_item *item; - proto_tree *subtree = tree; + proto_item *item; + proto_tree *subtree = tree; - if (add_subtree) { + if (add_subtree) { - item = proto_tree_add_text( - tree, tvb, offset, 0, "%s", - proto_registrar_get_name(hf_index)); + item = proto_tree_add_text( + tree, tvb, offset, 0, "%s", + proto_registrar_get_name(hf_index)); - subtree = proto_item_add_subtree(item,ett_LM_OWF_PASSWORD); - } + subtree = proto_item_add_subtree(item,ett_LM_OWF_PASSWORD); + } - return dissect_ndr_lm_nt_hash_cb( - tvb, offset, pinfo, subtree, drep, hf_index, - NULL, NULL); + return dissect_ndr_lm_nt_hash_cb( + tvb, offset, pinfo, subtree, drep, hf_index, + NULL, NULL); /*cb_wstr_postprocess, GINT_TO_POINTER(2 + levels));*/ } static int netlogon_dissect_USER_ACCOUNT_CONTROL(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) { - guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; - dcerpc_info *di; + guint32 mask; + proto_item *item = NULL; + proto_tree *tree = NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, - hf_netlogon_user_account_control, &mask); + offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, + hf_netlogon_user_account_control, &mask); - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_user_account_control, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_user_account_control); - } + if(parent_tree){ + item = proto_tree_add_uint(parent_tree, hf_netlogon_user_account_control, + tvb, offset-4, 4, mask); + tree = proto_item_add_subtree(item, ett_user_account_control); + } - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_dont_require_preauth, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_use_des_key_only, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_not_delegated, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_trusted_for_delegation, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_smartcard_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_encrypted_text_password_allowed, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_account_auto_locked, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_dont_expire_password, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_server_trust_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_workstation_trust_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_interdomain_trust_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_mns_logon_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_normal_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_temp_duplicate_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_password_not_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_home_directory_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_account_disabled, - tvb, offset-4, 4, mask); - return offset; + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_dont_require_preauth, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_use_des_key_only, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_not_delegated, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_trusted_for_delegation, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_smartcard_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_encrypted_text_password_allowed, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_account_auto_locked, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_dont_expire_password, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_server_trust_account, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_workstation_trust_account, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_interdomain_trust_account, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_mns_logon_account, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_normal_account, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_temp_duplicate_account, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_password_not_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_home_directory_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_account_control_account_disabled, + tvb, offset-4, 4, mask); + return offset; } static int netlogon_dissect_LOGONSRV_HANDLE(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Server Handle", - hf_netlogon_logonsrv_handle, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Server Handle", + hf_netlogon_logonsrv_handle, 0); - return offset; + return offset; } /* @@ -794,61 +795,61 @@ netlogon_dissect_LOGONSRV_HANDLE(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_VALIDATION_UAS_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Effective Account", - hf_netlogon_acct_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Effective Account", + hf_netlogon_acct_name, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_priv, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_priv, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_auth_flags, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_auth_flags, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_count, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_count, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_bad_pw_count, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_bad_pw_count, NULL); - offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_logon_time, NULL); + offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_logon_time, NULL); - offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_last_logoff_time, NULL); + offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_last_logoff_time, NULL); - offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_logoff_time, NULL); + offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_logoff_time, NULL); - offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_kickoff_time, NULL); + offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_kickoff_time, NULL); - offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_pwd_age, NULL); + offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_pwd_age, NULL); - offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_pwd_can_change_time, NULL); + offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_pwd_can_change_time, NULL); - offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_pwd_must_change_time, NULL); + offset = dissect_ndr_time_t(tvb, offset, pinfo, tree, drep, hf_netlogon_pwd_must_change_time, NULL); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Computer", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Computer", hf_netlogon_computer_name, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Domain", hf_netlogon_domain_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Domain", hf_netlogon_domain_name, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Script", hf_netlogon_logon_script, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Script", hf_netlogon_logon_script, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } /* @@ -861,33 +862,33 @@ netlogon_dissect_VALIDATION_UAS_INFO(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrlogonuaslogon_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Account", hf_netlogon_acct_name, CB_STR_COL_INFO); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Account", hf_netlogon_acct_name, CB_STR_COL_INFO); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Workstation", hf_netlogon_workstation, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Workstation", hf_netlogon_workstation, 0); - return offset; + return offset; } static int netlogon_dissect_netrlogonuaslogon_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION_UAS_INFO, NDR_POINTER_UNIQUE, - "VALIDATION_UAS_INFO", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION_UAS_INFO, NDR_POINTER_UNIQUE, + "VALIDATION_UAS_INFO", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } /* @@ -898,24 +899,24 @@ netlogon_dissect_netrlogonuaslogon_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_LOGOFF_UAS_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - proto_tree_add_text(tree, tvb, offset, 4, "Duration: unknown time format"); - offset+= 4; + proto_tree_add_text(tree, tvb, offset, 4, "Duration: unknown time format"); + offset+= 4; - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_count16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_count16, NULL); - return offset; + return offset; } /* @@ -928,55 +929,55 @@ netlogon_dissect_LOGOFF_UAS_INFO(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrlogonuaslogoff_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Account", hf_netlogon_acct_name, CB_STR_COL_INFO); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Account", hf_netlogon_acct_name, CB_STR_COL_INFO); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Workstation", hf_netlogon_workstation, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Workstation", hf_netlogon_workstation, 0); - return offset; + return offset; } static int netlogon_dissect_netrlogonuaslogoff_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_LOGOFF_UAS_INFO, NDR_POINTER_REF, - "LOGOFF_UAS_INFO", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_LOGOFF_UAS_INFO, NDR_POINTER_REF, + "LOGOFF_UAS_INFO", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_BYTE_byte(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_char, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_char, NULL); - return offset; + return offset; } static int netlogon_dissect_BYTE_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_byte); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_byte); - return offset; + return offset; } @@ -993,49 +994,49 @@ netlogon_dissect_BYTE_array(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_LOGON_IDENTITY_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "IDENTITY_INFO:"); - tree = proto_item_add_subtree(item, ett_IDENTITY_INFO); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "IDENTITY_INFO:"); + tree = proto_item_add_subtree(item, ett_IDENTITY_INFO); + } - /* XXX: It would be nice to get the domain and account name - displayed in COL_INFO. */ + /* XXX: It would be nice to get the domain and account name + displayed in COL_INFO. */ - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_dom, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_dom, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_param_ctrl, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_param_ctrl, NULL); - offset = dissect_ndr_duint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_id, NULL); + offset = dissect_ndr_duint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_id, NULL); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_acct_name, 1); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_acct_name, 1); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_workstation, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_workstation, 0); #ifdef REMOVED - /* NetMon does not recognize these bytes. Ill comment them out until someone complains */ - /* XXX 8 extra bytes here */ - /* there were 8 extra bytes, either here or in NETWORK_INFO that does not match - the idl file. Could be a bug in either the NETLOGON implementation or in the - idl file. - */ - offset = netlogon_dissect_8_unknown_bytes(tvb, offset, pinfo, tree, drep); + /* NetMon does not recognize these bytes. Ill comment them out until someone complains */ + /* XXX 8 extra bytes here */ + /* there were 8 extra bytes, either here or in NETWORK_INFO that does not match + the idl file. Could be a bug in either the NETLOGON implementation or in the + idl file. + */ + offset = netlogon_dissect_8_unknown_bytes(tvb, offset, pinfo, tree, drep); #endif - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } @@ -1046,30 +1047,30 @@ netlogon_dissect_LOGON_IDENTITY_INFO(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_LM_OWF_PASSWORD(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep _U_) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep _U_) { - proto_item *item=NULL; - proto_tree *tree=NULL; - dcerpc_info *di; + proto_item *item=NULL; + proto_tree *tree=NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect.*/ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect.*/ + return offset; + } - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 16, - "LM_OWF_PASSWORD:"); - tree = proto_item_add_subtree(item, ett_LM_OWF_PASSWORD); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 16, + "LM_OWF_PASSWORD:"); + tree = proto_item_add_subtree(item, ett_LM_OWF_PASSWORD); + } - proto_tree_add_item(tree, hf_netlogon_lm_owf_password, tvb, offset, 16, - FALSE); - offset += 16; + proto_tree_add_item(tree, hf_netlogon_lm_owf_password, tvb, offset, 16, + FALSE); + offset += 16; - return offset; + return offset; } /* @@ -1079,30 +1080,30 @@ netlogon_dissect_LM_OWF_PASSWORD(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_NT_OWF_PASSWORD(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep _U_) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep _U_) { - proto_item *item=NULL; - proto_tree *tree=NULL; - dcerpc_info *di; + proto_item *item=NULL; + proto_tree *tree=NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect.*/ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect.*/ + return offset; + } - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 16, - "NT_OWF_PASSWORD:"); - tree = proto_item_add_subtree(item, ett_NT_OWF_PASSWORD); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 16, + "NT_OWF_PASSWORD:"); + tree = proto_item_add_subtree(item, ett_NT_OWF_PASSWORD); + } - proto_tree_add_item(tree, hf_netlogon_nt_owf_password, tvb, offset, 16, - FALSE); - offset += 16; + proto_tree_add_item(tree, hf_netlogon_nt_owf_password, tvb, offset, 16, + FALSE); + offset += 16; - return offset; + return offset; } @@ -1115,19 +1116,19 @@ netlogon_dissect_NT_OWF_PASSWORD(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_INTERACTIVE_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = netlogon_dissect_LOGON_IDENTITY_INFO(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGON_IDENTITY_INFO(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_LM_OWF_PASSWORD(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LM_OWF_PASSWORD(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_NT_OWF_PASSWORD(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_NT_OWF_PASSWORD(tvb, offset, + pinfo, tree, drep); - return offset; + return offset; } /* @@ -1137,22 +1138,22 @@ netlogon_dissect_INTERACTIVE_INFO(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_CHALLENGE(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep _U_) + packet_info *pinfo, proto_tree *tree, + guint8 *drep _U_) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect.*/ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect.*/ + return offset; + } - proto_tree_add_item(tree, hf_netlogon_challenge, tvb, offset, 8, - FALSE); - offset += 8; + proto_tree_add_item(tree, hf_netlogon_challenge, tvb, offset, 8, + FALSE); + offset += 8; - return offset; + return offset; } #if 0 @@ -1165,88 +1166,87 @@ netlogon_dissect_CHALLENGE(tvbuff_t *tvb, int offset, * IDL } NETWORK_INFO; */ static void dissect_nt_chal_resp_cb(packet_info *pinfo _U_, proto_tree *tree, - proto_item *item _U_, tvbuff_t *tvb, - int start_offset, int end_offset, - void *callback_args ) + proto_item *item _U_, tvbuff_t *tvb, + int start_offset, int end_offset, + void *callback_args ) { - int len; - gint options = GPOINTER_TO_INT(callback_args); - gint levels = CB_STR_ITEM_LEVELS(options); - char *s; + int len; + gint options = GPOINTER_TO_INT(callback_args); + gint levels = CB_STR_ITEM_LEVELS(options); + char *s; - /* Skip over 3 guint32's in NDR format */ + /* Skip over 3 guint32's in NDR format */ - if (start_offset % 4) - start_offset += 4 - (start_offset % 4); + if (start_offset % 4) + start_offset += 4 - (start_offset % 4); - start_offset += 12; - len = end_offset - start_offset; + start_offset += 12; + len = end_offset - start_offset; - s = tvb_bytes_to_str(tvb, start_offset, len); + s = tvb_bytes_to_str(tvb, start_offset, len); - /* Append string to upper-level proto_items */ + /* Append string to upper-level proto_items */ - if (levels > 0 && item && s && s[0]) { - proto_item_append_text(item, ": %s", s); - item = item->parent; - levels--; - if (levels > 0) { - proto_item_append_text(item, ": %s", s); - item = item->parent; - levels--; - while (levels > 0) { - proto_item_append_text(item, " %s", s); + if (levels > 0 && item && s && s[0]) { + proto_item_append_text(item, ": %s", s); item = item->parent; levels--; - } + if (levels > 0) { + proto_item_append_text(item, ": %s", s); + item = item->parent; + levels--; + while (levels > 0) { + proto_item_append_text(item, " %s", s); + item = item->parent; + levels--; + } + } } - } - /* Call ntlmv2 response dissector */ + /* Call ntlmv2 response dissector */ - if (len > 24) - dissect_ntlmv2_response(tvb, tree, start_offset, len); + if (len > 24) + dissect_ntlmv2_response(tvb, tree, start_offset, len); } #endif static int netlogon_dissect_NETWORK_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = netlogon_dissect_LOGON_IDENTITY_INFO(tvb, offset, - pinfo, tree, drep); - offset = netlogon_dissect_CHALLENGE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGON_IDENTITY_INFO(tvb, offset, + pinfo, tree, drep); + offset = netlogon_dissect_CHALLENGE(tvb, offset, + pinfo, tree, drep); #if 0 - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "NT ", - hf_netlogon_nt_owf_password, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_data_length, NULL); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "NT ", + hf_netlogon_nt_owf_password, 0); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_data_length, NULL); #endif - offset = dissect_ndr_lm_nt_hash_helper(tvb,offset,pinfo, tree, drep, hf_netlogon_lm_chal_resp, 0,TRUE); - offset = dissect_ndr_lm_nt_hash_helper(tvb,offset,pinfo, tree, drep, hf_netlogon_lm_chal_resp, 0,TRUE); - /* Not really sure that it really works with NTLM v2 ....*/ + offset = dissect_ndr_lm_nt_hash_helper(tvb,offset,pinfo, tree, drep, hf_netlogon_lm_chal_resp, 0,TRUE); + offset = dissect_ndr_lm_nt_hash_helper(tvb,offset,pinfo, tree, drep, hf_netlogon_lm_chal_resp, 0,TRUE); + /* Not really sure that it really works with NTLM v2 ....*/ #if 0 - offset = netlogon_dissect_LM_OWF_PASSWORD(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LM_OWF_PASSWORD(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_NT_OWF_PASSWORD(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_NT_OWF_PASSWORD(tvb, offset, + pinfo, tree, drep); #endif - return offset; + return offset; #if 0 - offset = dissect_ndr_counted_byte_array_cb( - tvb, offset, pinfo, tree, drep, hf_netlogon_nt_chal_resp, - dissect_nt_chal_resp_cb,GINT_TO_POINTER(2)); - hf_netlogon_nt_chal_resp, 0); + offset = dissect_ndr_counted_byte_array_cb( + tvb, offset, pinfo, tree, drep, hf_netlogon_nt_chal_resp, + dissect_nt_chal_resp_cb,GINT_TO_POINTER(2)); - offset = dissect_ndr_counted_byte_array(tvb, offset, pinfo, tree, drep, - hf_netlogon_lm_chal_resp, 0); + offset = dissect_ndr_counted_byte_array(tvb, offset, pinfo, tree, drep, + hf_netlogon_lm_chal_resp, 0); - return offset; + return offset; #endif } @@ -1260,45 +1260,45 @@ netlogon_dissect_NETWORK_INFO(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_SERVICE_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = netlogon_dissect_LOGON_IDENTITY_INFO(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGON_IDENTITY_INFO(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_LM_OWF_PASSWORD(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LM_OWF_PASSWORD(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_NT_OWF_PASSWORD(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_NT_OWF_PASSWORD(tvb, offset, + pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_GENERIC_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; - dcerpc_call_value *dcv; + dcerpc_info *di; + dcerpc_call_value *dcv; - di=pinfo->private_data; - dcv = (dcerpc_call_value *)di->call_data; + di=pinfo->private_data; + dcv = (dcerpc_call_value *)di->call_data; - offset = netlogon_dissect_LOGON_IDENTITY_INFO(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGON_IDENTITY_INFO(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_package_name, 0|CB_STR_SAVE); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_package_name, 0|CB_STR_SAVE); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_data_length, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_data_length, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_REF, - "Logon Data", -1); - return offset; + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_REF, + "Logon Data", -1); + return offset; } /* * IDL typedef [switch_type(short)] union { @@ -1309,51 +1309,51 @@ netlogon_dissect_GENERIC_INFO(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_LEVEL(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - guint16 level; + guint16 level; - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_level16, &level); - ALIGN_TO_4_BYTES; - switch(level){ - case 1: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_INTERACTIVE_INFO, NDR_POINTER_UNIQUE, - "INTERACTIVE_INFO:", -1); - break; - case 2: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_NETWORK_INFO, NDR_POINTER_UNIQUE, - "NETWORK_INFO:", -1); - break; - case 3: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_SERVICE_INFO, NDR_POINTER_UNIQUE, - "SERVICE_INFO:", -1); - case 4: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_GENERIC_INFO, NDR_POINTER_UNIQUE, - "GENERIC_INFO:", -1); - break; - case 5: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_INTERACTIVE_INFO, NDR_POINTER_UNIQUE, - "INTERACTIVE_TRANSITIVE_INFO:", -1); - break; - case 6: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_NETWORK_INFO, NDR_POINTER_UNIQUE, - "NETWORK_TRANSITIVE_INFO", -1); - break; - case 7: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_SERVICE_INFO, NDR_POINTER_UNIQUE, - "SERVICE_TRANSITIVE_INFO", -1); - break; - } - return offset; + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_level16, &level); + ALIGN_TO_4_BYTES; + switch(level){ + case 1: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_INTERACTIVE_INFO, NDR_POINTER_UNIQUE, + "INTERACTIVE_INFO:", -1); + break; + case 2: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_NETWORK_INFO, NDR_POINTER_UNIQUE, + "NETWORK_INFO:", -1); + break; + case 3: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_SERVICE_INFO, NDR_POINTER_UNIQUE, + "SERVICE_INFO:", -1); + case 4: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_GENERIC_INFO, NDR_POINTER_UNIQUE, + "GENERIC_INFO:", -1); + break; + case 5: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_INTERACTIVE_INFO, NDR_POINTER_UNIQUE, + "INTERACTIVE_TRANSITIVE_INFO:", -1); + break; + case 6: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_NETWORK_INFO, NDR_POINTER_UNIQUE, + "NETWORK_TRANSITIVE_INFO", -1); + break; + case 7: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_SERVICE_INFO, NDR_POINTER_UNIQUE, + "SERVICE_TRANSITIVE_INFO", -1); + break; + } + return offset; } /* @@ -1363,22 +1363,22 @@ netlogon_dissect_LEVEL(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_CREDENTIAL(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep _U_) + packet_info *pinfo, proto_tree *tree, + guint8 *drep _U_) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect.*/ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect.*/ + return offset; + } - proto_tree_add_item(tree, hf_netlogon_credential, tvb, offset, 8, - FALSE); - offset += 8; + proto_tree_add_item(tree, hf_netlogon_credential, tvb, offset, 8, + FALSE); + offset += 8; - return offset; + return offset; } @@ -1390,82 +1390,82 @@ netlogon_dissect_CREDENTIAL(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_AUTHENTICATOR(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; - nstime_t ts; + dcerpc_info *di; + nstime_t ts; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset = netlogon_dissect_CREDENTIAL(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_CREDENTIAL(tvb, offset, + pinfo, tree, drep); - /* - * XXX - this appears to be a UNIX time_t in some credentials, but - * appears to be random junk in other credentials. - * For example, it looks like a UNIX time_t in "credential" - * AUTHENTICATORs, but like random junk in "return_authenticator" - * AUTHENTICATORs. - */ - ALIGN_TO_4_BYTES; - ts.secs = tvb_get_letohl(tvb, offset); - ts.nsecs = 0; - proto_tree_add_time(tree, hf_netlogon_timestamp, tvb, offset, 4, &ts); - offset+= 4; + /* + * XXX - this appears to be a UNIX time_t in some credentials, but + * appears to be random junk in other credentials. + * For example, it looks like a UNIX time_t in "credential" + * AUTHENTICATORs, but like random junk in "return_authenticator" + * AUTHENTICATORs. + */ + ALIGN_TO_4_BYTES; + ts.secs = tvb_get_letohl(tvb, offset); + ts.nsecs = 0; + proto_tree_add_time(tree, hf_netlogon_timestamp, tvb, offset, 4, &ts); + offset+= 4; - return offset; + return offset; } static const true_false_string group_attrs_mandatory = { - "The MANDATORY bit is SET", - "The mandatory bit is NOT set", + "The MANDATORY bit is SET", + "The mandatory bit is NOT set", }; static const true_false_string group_attrs_enabled_by_default = { - "The ENABLED_BY_DEFAULT bit is SET", - "The enabled_by_default bit is NOT set", + "The ENABLED_BY_DEFAULT bit is SET", + "The enabled_by_default bit is NOT set", }; static const true_false_string group_attrs_enabled = { - "The enabled bit is SET", - "The enabled bit is NOT set", + "The enabled bit is SET", + "The enabled bit is NOT set", }; static int netlogon_dissect_GROUP_MEMBERSHIP_ATTRIBUTES(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) { - guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; - dcerpc_info *di; + guint32 mask; + proto_item *item = NULL; + proto_tree *tree = NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, - hf_netlogon_attrs, &mask); + offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, + hf_netlogon_attrs, &mask); - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_attrs, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_group_attrs); - } + if(parent_tree){ + item = proto_tree_add_uint(parent_tree, hf_netlogon_attrs, + tvb, offset-4, 4, mask); + tree = proto_item_add_subtree(item, ett_group_attrs); + } - proto_tree_add_boolean(tree, hf_netlogon_group_attrs_enabled, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_group_attrs_enabled_by_default, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_group_attrs_mandatory, - tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_group_attrs_enabled, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_group_attrs_enabled_by_default, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_group_attrs_mandatory, + tvb, offset-4, 4, mask); - return offset; + return offset; } /* @@ -1476,36 +1476,36 @@ netlogon_dissect_GROUP_MEMBERSHIP_ATTRIBUTES(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_GROUP_MEMBERSHIP(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; + proto_item *item=NULL; + proto_tree *tree=NULL; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "GROUP_MEMBERSHIP:"); - tree = proto_item_add_subtree(item, ett_GROUP_MEMBERSHIP); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "GROUP_MEMBERSHIP:"); + tree = proto_item_add_subtree(item, ett_GROUP_MEMBERSHIP); + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_group_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_group_rid, NULL); - offset = netlogon_dissect_GROUP_MEMBERSHIP_ATTRIBUTES(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_GROUP_MEMBERSHIP_ATTRIBUTES(tvb, offset, + pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_GROUP_MEMBERSHIP_ARRAY(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_GROUP_MEMBERSHIP); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_GROUP_MEMBERSHIP); - return offset; + return offset; } /* @@ -1515,64 +1515,64 @@ netlogon_dissect_GROUP_MEMBERSHIP_ARRAY(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_USER_SESSION_KEY(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep _U_) + packet_info *pinfo, proto_tree *tree, + guint8 *drep _U_) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect.*/ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect.*/ + return offset; + } - proto_tree_add_item(tree, hf_netlogon_user_session_key, tvb, offset, 16, - FALSE); - offset += 16; + proto_tree_add_item(tree, hf_netlogon_user_session_key, tvb, offset, 16, + FALSE); + offset += 16; - return offset; + return offset; } static const true_false_string user_flags_extra_sids= { - "The EXTRA_SIDS bit is SET", - "The extra_sids is NOT set", + "The EXTRA_SIDS bit is SET", + "The extra_sids is NOT set", }; static const true_false_string user_flags_resource_groups= { - "The RESOURCE_GROUPS bit is SET", - "The resource_groups is NOT set", + "The RESOURCE_GROUPS bit is SET", + "The resource_groups is NOT set", }; static int netlogon_dissect_USER_FLAGS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) { - guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; - dcerpc_info *di; + guint32 mask; + proto_item *item = NULL; + proto_tree *tree = NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, - hf_netlogon_user_flags, &mask); + offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, + hf_netlogon_user_flags, &mask); - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_user_flags, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_user_flags); - } + if(parent_tree){ + item = proto_tree_add_uint(parent_tree, hf_netlogon_user_flags, + tvb, offset-4, 4, mask); + tree = proto_item_add_subtree(item, ett_user_flags); + } - proto_tree_add_boolean(tree, hf_netlogon_user_flags_resource_groups, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_flags_extra_sids, - tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_flags_resource_groups, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_user_flags_extra_sids, + tvb, offset-4, 4, mask); - return offset; + return offset; } /* @@ -1607,110 +1607,110 @@ netlogon_dissect_USER_FLAGS(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_VALIDATION_SAM_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_logoff_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_logoff_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_kickoff_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_kickoff_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_last_set_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_last_set_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_can_change_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_can_change_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_must_change_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_must_change_time); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_acct_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_acct_name, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_full_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_full_name, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_script, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_script, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_profile_path, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_profile_path, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_home_dir, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_home_dir, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dir_drive, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dir_drive, 0); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_count16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_count16, NULL); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_bad_pw_count16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_bad_pw_count16, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_group_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_group_rid, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_rids, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_rids, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE, - "GROUP_MEMBERSHIP_ARRAY", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE, + "GROUP_MEMBERSHIP_ARRAY", -1); - offset = netlogon_dissect_USER_FLAGS(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_USER_FLAGS(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_USER_SESSION_KEY(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_USER_SESSION_KEY(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_srv, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_srv, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_dom, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_dom, 0); - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy1_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy1_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy2_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy2_long, NULL); - offset = netlogon_dissect_USER_ACCOUNT_CONTROL(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_USER_ACCOUNT_CONTROL(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy4_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy4_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy5_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy5_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy6_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy6_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy7_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy7_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy8_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy8_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy9_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy9_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy10_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy10_long, NULL); - return offset; + return offset; } @@ -1749,148 +1749,148 @@ netlogon_dissect_VALIDATION_SAM_INFO(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_VALIDATION_SAM_INFO2(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = netlogon_dissect_VALIDATION_SAM_INFO(tvb,offset,pinfo,tree,drep); + offset = netlogon_dissect_VALIDATION_SAM_INFO(tvb,offset,pinfo,tree,drep); #if 0 - int i; + int i; - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_logoff_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_logoff_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_kickoff_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_kickoff_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_last_set_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_last_set_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_can_change_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_can_change_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_must_change_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_must_change_time); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_acct_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_acct_name, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_full_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_full_name, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_script, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_script, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_profile_path, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_profile_path, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_home_dir, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_home_dir, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dir_drive, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dir_drive, 0); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_count16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_count16, NULL); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_bad_pw_count16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_bad_pw_count16, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_group_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_group_rid, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_rids, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_rids, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE, - "GROUP_MEMBERSHIP_ARRAY", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE, + "GROUP_MEMBERSHIP_ARRAY", -1); - offset = netlogon_dissect_USER_FLAGS(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_USER_FLAGS(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_USER_SESSION_KEY(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_USER_SESSION_KEY(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_srv, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_srv, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_dom, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_dom, 0); - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - for(i=0;i<2;i++){ - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); - } - offset = netlogon_dissect_USER_ACCOUNT_CONTROL(tvb, offset, - pinfo, tree, drep); + for(i=0;i<2;i++){ + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); + } + offset = netlogon_dissect_USER_ACCOUNT_CONTROL(tvb, offset, + pinfo, tree, drep); - for(i=0;i<7;i++){ - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); - } + for(i=0;i<7;i++){ + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); + } #endif - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_sid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_sid, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - dissect_ndr_nt_SID_AND_ATTRIBUTES_ARRAY, NDR_POINTER_UNIQUE, - "SID_AND_ATTRIBUTES_ARRAY:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + dissect_ndr_nt_SID_AND_ATTRIBUTES_ARRAY, NDR_POINTER_UNIQUE, + "SID_AND_ATTRIBUTES_ARRAY:", -1); - return offset; + return offset; } static int netlogon_dissect_VALIDATION_SAM_INFO4(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = netlogon_dissect_VALIDATION_SAM_INFO2(tvb,offset,pinfo,tree,drep); + offset = netlogon_dissect_VALIDATION_SAM_INFO2(tvb,offset,pinfo,tree,drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_dnslogondomainname, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_dnslogondomainname, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_upn, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_upn, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string2, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string2, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string3, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string3, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string4, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string4, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string5, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string5, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string6, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string6, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string7, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string7, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string8, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string8, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string9, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string9, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string10, 0); - return offset; + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string10, 0); + return offset; } /* * IDL typedef struct { @@ -1924,220 +1924,222 @@ netlogon_dissect_VALIDATION_SAM_INFO4(tvbuff_t *tvb, int offset, * IDL [unique] SID_AND_ATTRIBS; * IDL [unique] SID resourcegroupdomainsid; * IDL long resourcegroupcount; -qqq + qqq * IDL } PAC_LOGON_INFO; */ int netlogon_dissect_PAC_LOGON_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - guint32 rgc; - offset = netlogon_dissect_VALIDATION_SAM_INFO(tvb,offset,pinfo,tree,drep); + guint32 rgc; + offset = netlogon_dissect_VALIDATION_SAM_INFO(tvb,offset,pinfo,tree,drep); #if 0 - int i; + int i; - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_logoff_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_logoff_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_kickoff_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_kickoff_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_last_set_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_last_set_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_can_change_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_can_change_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_must_change_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_must_change_time); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_acct_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_acct_name, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_full_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_full_name, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_script, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_script, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_profile_path, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_profile_path, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_home_dir, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_home_dir, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dir_drive, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dir_drive, 0); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_count16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_count16, NULL); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_bad_pw_count16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_bad_pw_count16, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_group_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_group_rid, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_rids, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_rids, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE, - "GROUP_MEMBERSHIP_ARRAY", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE, + "GROUP_MEMBERSHIP_ARRAY", -1); - offset = netlogon_dissect_USER_FLAGS(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_USER_FLAGS(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_USER_SESSION_KEY(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_USER_SESSION_KEY(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_srv, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_srv, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_dom, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_dom, 0); - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - for(i=0;i<2;i++){ - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); - } - offset = netlogon_dissect_USER_ACCOUNT_CONTROL(tvb, offset, - pinfo, tree, drep); + for(i=0;i<2;i++){ + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); + } + offset = netlogon_dissect_USER_ACCOUNT_CONTROL(tvb, offset, + pinfo, tree, drep); - for(i=0;i<7;i++){ - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); - } + for(i=0;i<7;i++){ + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); + } #endif - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_sid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_sid, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - dissect_ndr_nt_SID_AND_ATTRIBUTES_ARRAY, NDR_POINTER_UNIQUE, - "SID_AND_ATTRIBUTES_ARRAY:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + dissect_ndr_nt_SID_AND_ATTRIBUTES_ARRAY, NDR_POINTER_UNIQUE, + "SID_AND_ATTRIBUTES_ARRAY:", -1); - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_resourcegroupcount, &rgc); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_resourcegroupcount, &rgc); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE, - "ResourceGroupIDs", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_GROUP_MEMBERSHIP_ARRAY, NDR_POINTER_UNIQUE, + "ResourceGroupIDs", -1); - return offset; + return offset; } static int netlogon_dissect_CONSTRAINED_DELEGATION_name(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_string, 0); - return offset; + return offset; } static int netlogon_dissect_CONSTRAINED_DELEGATION_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CONSTRAINED_DELEGATION_name); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONSTRAINED_DELEGATION_name); - return offset; + return offset; } int netlogon_dissect_PAC_CONSTRAINED_DELEGATION(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_string, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CONSTRAINED_DELEGATION_array, NDR_POINTER_UNIQUE, - "names:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONSTRAINED_DELEGATION_array, NDR_POINTER_UNIQUE, + "names:", -1); - return offset; + return offset; } -/* + +#if 0 static int netlogon_dissect_PAC(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep _U_) + packet_info *pinfo, proto_tree *tree, + guint8 *drep _U_) { - dcerpc_info *di; - guint32 pac_size; + dcerpc_info *di; + guint32 pac_size; - di=pinfo->private_data; - if(di->conformant_run){ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + return offset; + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_pac_size, &pac_size); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_pac_size, &pac_size); - proto_tree_add_item(tree, hf_netlogon_pac_data, tvb, offset, pac_size, - FALSE); - offset += pac_size; + proto_tree_add_item(tree, hf_netlogon_pac_data, tvb, offset, pac_size, + FALSE); + offset += pac_size; - return offset; + return offset; } static int netlogon_dissect_AUTH(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep _U_) + packet_info *pinfo, proto_tree *tree, + guint8 *drep _U_) { - dcerpc_info *di; - guint32 auth_size; + dcerpc_info *di; + guint32 auth_size; - di=pinfo->private_data; - if(di->conformant_run){ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + return offset; + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_auth_size, &auth_size); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_auth_size, &auth_size); - proto_tree_add_item(tree, hf_netlogon_auth_data, tvb, offset, auth_size, - FALSE); - offset += auth_size; + proto_tree_add_item(tree, hf_netlogon_auth_data, tvb, offset, auth_size, + FALSE); + offset += auth_size; - return offset; + return offset; } -*/ +#endif + static int netlogon_dissect_VALIDATION_GENERIC_INFO2 (tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_data_length, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_data_length, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_REF, - "Validation Data", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_REF, + "Validation Data", -1); - return offset; + return offset; } /* * IDL typedef struct { @@ -2158,65 +2160,66 @@ netlogon_dissect_VALIDATION_GENERIC_INFO2 (tvbuff_t *tvb, int offset, * IDL UNICODESTRING dummy4; * IDL } VALIDATION_PAC_INFO; */ -/* Not used (anymore ?) +#if 0 /* Not used (anymore ?) */ static int netlogon_dissect_VALIDATION_PAC_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - int i; + int i; - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_pac_size, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_pac_size, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_PAC, NDR_POINTER_UNIQUE, "PAC:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_PAC, NDR_POINTER_UNIQUE, "PAC:", -1); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_dom, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_dom, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_srv, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_srv, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_principal, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_principal, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_auth_size, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_auth_size, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTH, NDR_POINTER_UNIQUE, "AUTH:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTH, NDR_POINTER_UNIQUE, "AUTH:", -1); - offset = netlogon_dissect_USER_SESSION_KEY(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_USER_SESSION_KEY(tvb, offset, + pinfo, tree, drep); - for(i=0;i<2;i++){ - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); - } - offset = netlogon_dissect_USER_ACCOUNT_CONTROL(tvb, offset, - pinfo, tree, drep); + for(i=0;i<2;i++){ + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); + } + offset = netlogon_dissect_USER_ACCOUNT_CONTROL(tvb, offset, + pinfo, tree, drep); - for(i=0;i<7;i++){ - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); - } + for(i=0;i<7;i++){ + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); + } - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - return offset; + return offset; } -*/ +#endif + /* * IDL typedef [switch_type(short)] union { * IDL [case(1)][unique] VALIDATION_UAS *uas; @@ -2230,48 +2233,48 @@ netlogon_dissect_VALIDATION_PAC_INFO(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_VALIDATION(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - guint16 level; + guint16 level; - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_validation_level, &level); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_validation_level, &level); - ALIGN_TO_4_BYTES; - switch(level){ - case 1: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION_UAS_INFO, NDR_POINTER_UNIQUE, - "VALIDATION_UAS_INFO:", -1); - break; - case 2: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION_SAM_INFO, NDR_POINTER_UNIQUE, - "VALIDATION_SAM_INFO:", -1); - break; - case 3: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION_SAM_INFO2, NDR_POINTER_UNIQUE, - "VALIDATION_SAM_INFO2:", -1); - break; - case 4: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION_GENERIC_INFO2, NDR_POINTER_UNIQUE, - "VALIDATION_INFO:", -1); - break; - case 5: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION_GENERIC_INFO2, NDR_POINTER_UNIQUE, - "VALIDATION_INFO2:", -1); - break; - case 6: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION_SAM_INFO4, NDR_POINTER_UNIQUE, - "VALIDATION_SAM_INFO4:", -1); - break; - } - return offset; + ALIGN_TO_4_BYTES; + switch(level){ + case 1: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION_UAS_INFO, NDR_POINTER_UNIQUE, + "VALIDATION_UAS_INFO:", -1); + break; + case 2: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION_SAM_INFO, NDR_POINTER_UNIQUE, + "VALIDATION_SAM_INFO:", -1); + break; + case 3: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION_SAM_INFO2, NDR_POINTER_UNIQUE, + "VALIDATION_SAM_INFO2:", -1); + break; + case 4: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION_GENERIC_INFO2, NDR_POINTER_UNIQUE, + "VALIDATION_INFO:", -1); + break; + case 5: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION_GENERIC_INFO2, NDR_POINTER_UNIQUE, + "VALIDATION_INFO2:", -1); + break; + case 6: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION_SAM_INFO4, NDR_POINTER_UNIQUE, + "VALIDATION_SAM_INFO4:", -1); + break; + } + return offset; } /* * IDL long NetrLogonSamLogonWithFlags( @@ -2289,59 +2292,59 @@ netlogon_dissect_VALIDATION(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrlogonsamlogonflags_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Computer Name", - hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Computer Name", + hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_level16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_level16, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_LEVEL, NDR_POINTER_REF, - "LEVEL: LogonLevel", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_LEVEL, NDR_POINTER_REF, + "LEVEL: LogonLevel", -1); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_validation_level, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_validation_level, NULL); - offset = netlogon_dissect_EXTRA_FLAGS(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_EXTRA_FLAGS(tvb, offset, pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_netrlogonsamlogonflags_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION, NDR_POINTER_REF, - "VALIDATION:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION, NDR_POINTER_REF, + "VALIDATION:", -1); - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_authoritative, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_authoritative, NULL); - offset = netlogon_dissect_EXTRA_FLAGS(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_EXTRA_FLAGS(tvb, offset, pinfo, tree, drep); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -2361,55 +2364,55 @@ netlogon_dissect_netrlogonsamlogonflags_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrlogonsamlogon_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Computer Name", - hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Computer Name", + hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_level16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_level16, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_LEVEL, NDR_POINTER_REF, - "LEVEL: LogonLevel", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_LEVEL, NDR_POINTER_REF, + "LEVEL: LogonLevel", -1); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_validation_level, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_validation_level, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogonsamlogon_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION, NDR_POINTER_REF, - "VALIDATION:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION, NDR_POINTER_REF, + "VALIDATION:", -1); - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_authoritative, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_authoritative, NULL); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -2425,63 +2428,63 @@ netlogon_dissect_netrlogonsamlogon_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrlogonsamlogoff_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Computer Name", - hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Computer Name", + hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_level16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_level16, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_LEVEL, NDR_POINTER_REF, - "LEVEL: logoninformation", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_LEVEL, NDR_POINTER_REF, + "LEVEL: logoninformation", -1); - return offset; + return offset; } static int netlogon_dissect_netrlogonsamlogoff_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static void generate_hash_key(packet_info *pinfo,unsigned char is_server,netlogon_auth_key *key,char* name) { - if(is_server) { - key->dstport = pinfo->srcport; - COPY_ADDRESS(&key->dst,&pinfo->src); - COPY_ADDRESS(&key->src,&pinfo->dst); - /* name has been durably allocated */ - key->name = name; - } - else { - COPY_ADDRESS(&key->dst,&pinfo->dst); - COPY_ADDRESS(&key->src,&pinfo->src); - key->dstport = pinfo->destport; - /* name has been durably allocated */ - key->name = name; - } + if(is_server) { + key->dstport = pinfo->srcport; + COPY_ADDRESS(&key->dst,&pinfo->src); + COPY_ADDRESS(&key->src,&pinfo->dst); + /* name has been durably allocated */ + key->name = name; + } + else { + COPY_ADDRESS(&key->dst,&pinfo->dst); + COPY_ADDRESS(&key->src,&pinfo->src); + key->dstport = pinfo->destport; + /* name has been durably allocated */ + key->name = name; + } } @@ -2495,138 +2498,138 @@ static void generate_hash_key(packet_info *pinfo,unsigned char is_server,netlogo */ static int netlogon_dissect_netrserverreqchallenge_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - /*int oldoffset = offset;*/ - size_t txt_len = 0; - netlogon_auth_vars *vars; - netlogon_auth_vars *existing_vars; - netlogon_auth_key *key = se_alloc(sizeof(netlogon_auth_key)); - guint8 tab[8] = { 0,0,0,0,0,0,0,0}; - dcerpc_info *di = (dcerpc_info *)pinfo->private_data; - dcerpc_call_value *dcv = (dcerpc_call_value *)di->call_data; + /*int oldoffset = offset;*/ + size_t txt_len = 0; + netlogon_auth_vars *vars; + netlogon_auth_vars *existing_vars; + netlogon_auth_key *key = se_alloc(sizeof(netlogon_auth_key)); + guint8 tab[8] = { 0,0,0,0,0,0,0,0}; + dcerpc_info *di = (dcerpc_info *)pinfo->private_data; + dcerpc_call_value *dcv = (dcerpc_call_value *)di->call_data; - /* As we are not always keeping this it could be more intelligent to g_malloc it - and if we decide to keep it then transform it into se_alloc */ - vars = se_alloc(sizeof(netlogon_auth_vars)); - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_pointer_cb( - tvb, offset, pinfo, tree, drep, - dissect_ndr_wchar_cvstring, NDR_POINTER_REF, - "Computer Name", hf_netlogon_computer_name, - cb_wstr_postprocess, - GINT_TO_POINTER(CB_STR_COL_INFO |CB_STR_SAVE | 1)); + /* As we are not always keeping this it could be more intelligent to g_malloc it + and if we decide to keep it then transform it into se_alloc */ + vars = se_alloc(sizeof(netlogon_auth_vars)); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, pinfo, tree, drep); + offset = dissect_ndr_pointer_cb( + tvb, offset, pinfo, tree, drep, + dissect_ndr_wchar_cvstring, NDR_POINTER_REF, + "Computer Name", hf_netlogon_computer_name, + cb_wstr_postprocess, + GINT_TO_POINTER(CB_STR_COL_INFO |CB_STR_SAVE | 1)); - txt_len = strlen(dcv->private_data); - debugprintf("1)Len %d offset %d txt %s\n",txt_len,offset,(char*)dcv->private_data); - vars->client_name = se_strdup(dcv->private_data); - debugprintf("2)Len %d offset %d txt %s\n",txt_len,offset,vars->client_name); + txt_len = strlen(dcv->private_data); + debugprintf("1)Len %d offset %d txt %s\n",txt_len,offset,(char*)dcv->private_data); + vars->client_name = se_strdup(dcv->private_data); + debugprintf("2)Len %d offset %d txt %s\n",txt_len,offset,vars->client_name); - offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, tree, drep, - hf_client_challenge,&vars->client_challenge); - memcpy(tab,&vars->client_challenge,8); + offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, tree, drep, + hf_client_challenge,&vars->client_challenge); + memcpy(tab,&vars->client_challenge,8); - vars->start = pinfo->fd->num; - vars->next_start = -1; - vars->next = NULL; + vars->start = pinfo->fd->num; + vars->next_start = -1; + vars->next = NULL; - generate_hash_key(pinfo,0,key,NULL); - existing_vars = NULL; - existing_vars = g_hash_table_lookup(netlogon_auths, key); - if (!existing_vars) { - g_hash_table_insert(netlogon_auths, key, vars); - } - else { - while(existing_vars->next != NULL && existing_vars->start <= vars->start) { - existing_vars = existing_vars->next; - } - if(existing_vars->next != NULL || existing_vars == vars) { - debugprintf("It seems that I already record this vars %d\n",vars->start); + generate_hash_key(pinfo,0,key,NULL); + existing_vars = NULL; + existing_vars = g_hash_table_lookup(netlogon_auths, key); + if (!existing_vars) { + g_hash_table_insert(netlogon_auths, key, vars); } else { - existing_vars->next_start = pinfo->fd->num; - existing_vars->next = vars; + while(existing_vars->next != NULL && existing_vars->start <= vars->start) { + existing_vars = existing_vars->next; + } + if(existing_vars->next != NULL || existing_vars == vars) { + debugprintf("It seems that I already record this vars %d\n",vars->start); + } + else { + existing_vars->next_start = pinfo->fd->num; + existing_vars->next = vars; + } } - } - /* used by other rpc that use schannel ie lsa */ - /* - generate_hash_key(pinfo,0,key,vars->client_name); - existing_vars = NULL; - existing_vars = g_hash_table_lookup(schannel_auths, key); - if (!existing_vars) - { - g_hash_table_insert(schannel_auths, key, vars); - } - else - { - while(existing_vars->next != NULL && existing_vars->start <= vars->start) { + /* used by other rpc that use schannel ie lsa */ + /* + generate_hash_key(pinfo,0,key,vars->client_name); + existing_vars = NULL; + existing_vars = g_hash_table_lookup(schannel_auths, key); + if (!existing_vars) + { + g_hash_table_insert(schannel_auths, key, vars); + } + else + { + while(existing_vars->next != NULL && existing_vars->start <= vars->start) { existing_vars = existing_vars->next; - } - if(existing_vars->next != NULL || existing_vars == vars) { + } + if(existing_vars->next != NULL || existing_vars == vars) { debugprintf("It seems that I already record this vars (schannel hash)%d\n",vars->start); - } - else { + } + else { existing_vars->next_start = pinfo->fd->num; existing_vars->next = vars; - } - } - */ - return offset; + } + } + */ + return offset; } static int netlogon_dissect_netrserverreqchallenge_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - netlogon_auth_vars *vars; - netlogon_auth_key key; - guint64 server_challenge; + netlogon_auth_vars *vars; + netlogon_auth_key key; + guint64 server_challenge; - generate_hash_key(pinfo,1,&key,NULL); - vars = g_hash_table_lookup(netlogon_auths,(gconstpointer*) &key); + generate_hash_key(pinfo,1,&key,NULL); + vars = g_hash_table_lookup(netlogon_auths,(gconstpointer*) &key); - offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, tree, drep, - hf_server_challenge, &server_challenge); - /*offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CREDENTIAL, NDR_POINTER_REF, - "CREDENTIAL: server credential", -1);*/ + offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, tree, drep, + hf_server_challenge, &server_challenge); + /*offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CREDENTIAL, NDR_POINTER_REF, + "CREDENTIAL: server credential", -1);*/ - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); - if(vars != NULL) { - while(vars !=NULL && vars->next_start != -1 && vars->next_start < (int)pinfo->fd->num ) - { - vars = vars->next; - debugprintf("looping challenge reply... %d %d \n",vars->next_start,pinfo->fd->num); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); + if(vars != NULL) { + while(vars !=NULL && vars->next_start != -1 && vars->next_start < (int)pinfo->fd->num ) + { + vars = vars->next; + debugprintf("looping challenge reply... %d %d \n",vars->next_start,pinfo->fd->num); + } + if(vars == NULL) + { + debugprintf("Something strange happened while searching for challenge_reply\n"); + } + else + { + vars->server_challenge = server_challenge; + } } - if(vars == NULL) - { - debugprintf("Something strange happened while searching for challenge_reply\n"); - } - else - { - vars->server_challenge = server_challenge; - } - } /* else { - debugprintf("Vars not found in challenge reply\n"); + debugprintf("Vars not found in challenge reply\n"); } */ - return offset; + return offset; } static int netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_secure_channel_type, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_secure_channel_type, NULL); - return offset; + return offset; } @@ -2642,38 +2645,38 @@ netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrserverauthenticate_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "User Name", hf_netlogon_acct_name, CB_STR_COL_INFO); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "User Name", hf_netlogon_acct_name, CB_STR_COL_INFO); - offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, CB_STR_COL_INFO); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, CB_STR_COL_INFO); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CREDENTIAL, NDR_POINTER_REF, - "CREDENTIAL: client challenge", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CREDENTIAL, NDR_POINTER_REF, + "CREDENTIAL: client challenge", -1); - return offset; + return offset; } static int netlogon_dissect_netrserverauthenticate_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CREDENTIAL, NDR_POINTER_REF, - "CREDENTIAL: server challenge", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CREDENTIAL, NDR_POINTER_REF, + "CREDENTIAL: server challenge", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -2685,22 +2688,22 @@ netlogon_dissect_netrserverauthenticate_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_ENCRYPTED_LM_OWF_PASSWORD(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep _U_) + packet_info *pinfo, proto_tree *tree, + guint8 *drep _U_) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect.*/ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect.*/ + return offset; + } - proto_tree_add_item(tree, hf_netlogon_encrypted_lm_owf_password, tvb, offset, 16, - FALSE); - offset += 16; + proto_tree_add_item(tree, hf_netlogon_encrypted_lm_owf_password, tvb, offset, 16, + FALSE); + offset += 16; - return offset; + return offset; } /* @@ -2716,42 +2719,42 @@ netlogon_dissect_ENCRYPTED_LM_OWF_PASSWORD(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrserverpasswordset_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "User Name", hf_netlogon_acct_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "User Name", hf_netlogon_acct_name, 0); - offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_ENCRYPTED_LM_OWF_PASSWORD, NDR_POINTER_REF, - "ENCRYPTED_LM_OWF_PASSWORD: hashed_pwd", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_ENCRYPTED_LM_OWF_PASSWORD, NDR_POINTER_REF, + "ENCRYPTED_LM_OWF_PASSWORD: hashed_pwd", -1); - return offset; + return offset; } static int netlogon_dissect_netrserverpasswordset_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -2770,37 +2773,37 @@ netlogon_dissect_netrserverpasswordset_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_DELETE_USER(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Account Name", hf_netlogon_acct_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Account Name", hf_netlogon_acct_name, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } @@ -2813,43 +2816,43 @@ netlogon_dissect_DELTA_DELETE_USER(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_SENSITIVE_DATA(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; - guint32 data_len; + dcerpc_info *di; + guint32 data_len; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_sensitive_data_len, &data_len); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_sensitive_data_len, &data_len); - proto_tree_add_item(tree, hf_netlogon_sensitive_data, tvb, offset, - data_len, FALSE); - offset += data_len; + proto_tree_add_item(tree, hf_netlogon_sensitive_data, tvb, offset, + data_len, FALSE); + offset += data_len; - return offset; + return offset; } static int netlogon_dissect_USER_PRIVATE_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_sensitive_data_flag, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_sensitive_data_flag, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_sensitive_data_len, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_sensitive_data_len, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_SENSITIVE_DATA, NDR_POINTER_UNIQUE, - "SENSITIVE_DATA", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_SENSITIVE_DATA, NDR_POINTER_UNIQUE, + "SENSITIVE_DATA", -1); - return offset; + return offset; } int @@ -2898,118 +2901,118 @@ lsarpc_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto */ static int netlogon_dissect_DELTA_USER(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_acct_name, 3); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_acct_name, 3); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_full_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_full_name, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_group_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_group_rid, NULL); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_home_dir, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_home_dir, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dir_drive, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dir_drive, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_script, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_script, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_acct_desc, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_acct_desc, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_workstations, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_workstations, 0); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_logoff_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_logoff_time); - offset = dissect_ndr_nt_LOGON_HOURS(tvb, offset, pinfo, tree, drep); + offset = dissect_ndr_nt_LOGON_HOURS(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_bad_pw_count16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_bad_pw_count16, NULL); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_count16, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_count16, NULL); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_last_set_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_last_set_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_acct_expiry_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_acct_expiry_time); - offset = dissect_ndr_nt_acct_ctrl(tvb, offset, pinfo, tree, drep); + offset = dissect_ndr_nt_acct_ctrl(tvb, offset, pinfo, tree, drep); - offset = netlogon_dissect_LM_OWF_PASSWORD(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LM_OWF_PASSWORD(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_NT_OWF_PASSWORD(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_NT_OWF_PASSWORD(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_nt_pwd_present, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_nt_pwd_present, NULL); - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_lm_pwd_present, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_lm_pwd_present, NULL); - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_expired, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_expired, NULL); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_comment, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_comment, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_parameters, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_parameters, 0); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_country, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_country, NULL); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_codepage, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_codepage, NULL); - offset = netlogon_dissect_USER_PRIVATE_INFO(tvb, offset, pinfo, tree, - drep); + offset = netlogon_dissect_USER_PRIVATE_INFO(tvb, offset, pinfo, tree, + drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_security_information, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_security_information, NULL); - offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); + offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } @@ -3038,66 +3041,66 @@ netlogon_dissect_DELTA_USER(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_DOMAIN(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_domain_name, 3); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_domain_name, 3); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_oem_info, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_oem_info, 0); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_kickoff_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_kickoff_time); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_minpasswdlen, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_minpasswdlen, NULL); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_passwdhistorylen, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_passwdhistorylen, NULL); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_must_change_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_must_change_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_pwd_can_change_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_pwd_can_change_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_domain_modify_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_domain_modify_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_domain_create_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_domain_create_time); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_security_information, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_security_information, NULL); - offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); + offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } @@ -3120,48 +3123,48 @@ netlogon_dissect_DELTA_DOMAIN(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_GROUP(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_group_name, 3); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_group_name, 3); - offset = netlogon_dissect_GROUP_MEMBERSHIP(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_GROUP_MEMBERSHIP(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_group_desc, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_group_desc, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_security_information, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_security_information, NULL); - offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); + offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } @@ -3181,89 +3184,89 @@ netlogon_dissect_DELTA_GROUP(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_RENAME(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; + di=pinfo->private_data; - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - di->hf_index, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + di->hf_index, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - di->hf_index, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + di->hf_index, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } static int netlogon_dissect_RID(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); - return offset; + return offset; } static int netlogon_dissect_RID_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_RID); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_RID); - return offset; + return offset; } static int netlogon_dissect_ATTRIB(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_attrs, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_attrs, NULL); - return offset; + return offset; } static int netlogon_dissect_ATTRIB_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_ATTRIB); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_ATTRIB); - return offset; + return offset; } /* @@ -3279,33 +3282,33 @@ netlogon_dissect_ATTRIB_array(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_GROUP_MEMBER(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_RID_array, NDR_POINTER_UNIQUE, - "RIDs:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_RID_array, NDR_POINTER_UNIQUE, + "RIDs:", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_ATTRIB_array, NDR_POINTER_UNIQUE, - "Attribs:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_ATTRIB_array, NDR_POINTER_UNIQUE, + "Attribs:", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_rids, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_rids, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } @@ -3327,45 +3330,45 @@ netlogon_dissect_DELTA_GROUP_MEMBER(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_ALIAS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_alias_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_alias_name, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_alias_rid, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_alias_rid, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_security_information, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_security_information, NULL); - offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); + offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } @@ -3380,47 +3383,47 @@ netlogon_dissect_DELTA_ALIAS(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_ALIAS_MEMBER(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_nt_PSID_ARRAY(tvb, offset, pinfo, tree, drep); + offset = dissect_ndr_nt_PSID_ARRAY(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } static int netlogon_dissect_EVENT_AUDIT_OPTION(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_event_audit_option, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_event_audit_option, NULL); - return offset; + return offset; } static int netlogon_dissect_EVENT_AUDIT_OPTIONS_ARRAY(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_EVENT_AUDIT_OPTION); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_EVENT_AUDIT_OPTION); - return offset; + return offset; } @@ -3436,39 +3439,39 @@ netlogon_dissect_EVENT_AUDIT_OPTIONS_ARRAY(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_QUOTA_LIMITS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "QUOTA_LIMTS:"); - tree = proto_item_add_subtree(item, ett_QUOTA_LIMITS); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "QUOTA_LIMTS:"); + tree = proto_item_add_subtree(item, ett_QUOTA_LIMITS); + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_pagedpoollimit, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_pagedpoollimit, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_nonpagedpoollimit, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_nonpagedpoollimit, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_minworkingsetsize, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_minworkingsetsize, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_maxworkingsetsize, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_maxworkingsetsize, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_pagefilelimit, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_pagefilelimit, NULL); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_timelimit); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_timelimit); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } @@ -3498,92 +3501,92 @@ netlogon_dissect_QUOTA_LIMITS(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_POLICY(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_max_log_size, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_max_log_size, NULL); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_audit_retention_period); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_audit_retention_period); - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_auditing_mode, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_auditing_mode, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_max_audit_event_count, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_max_audit_event_count, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_EVENT_AUDIT_OPTIONS_ARRAY, NDR_POINTER_UNIQUE, - "Event Audit Options:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_EVENT_AUDIT_OPTIONS_ARRAY, NDR_POINTER_UNIQUE, + "Event Audit Options:", -1); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_domain_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_domain_name, 0); - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - offset = netlogon_dissect_QUOTA_LIMITS(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_QUOTA_LIMITS(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_db_modify_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_db_modify_time); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_db_create_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_db_create_time); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_security_information, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_security_information, NULL); - offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); + offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } static int netlogon_dissect_CONTROLLER(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dc_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dc_name, 0); - return offset; + return offset; } static int netlogon_dissect_CONTROLLER_ARRAY(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CONTROLLER); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONTROLLER); - return offset; + return offset; } @@ -3606,94 +3609,94 @@ netlogon_dissect_CONTROLLER_ARRAY(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_TRUSTED_DOMAINS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_domain_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_domain_name, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_controllers, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_controllers, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CONTROLLER_ARRAY, NDR_POINTER_UNIQUE, - "Domain Controllers:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONTROLLER_ARRAY, NDR_POINTER_UNIQUE, + "Domain Controllers:", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_security_information, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_security_information, NULL); - offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); + offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } static int netlogon_dissect_PRIV_ATTR(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_attrs, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_attrs, NULL); - return offset; + return offset; } static int netlogon_dissect_PRIV_ATTR_ARRAY(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_PRIV_ATTR); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_PRIV_ATTR); - return offset; + return offset; } static int netlogon_dissect_PRIV_NAME(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_privilege_name, 1); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_privilege_name, 1); - return offset; + return offset; } static int netlogon_dissect_PRIV_NAME_ARRAY(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_PRIV_NAME); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_PRIV_NAME); - return offset; + return offset; } @@ -3719,59 +3722,59 @@ netlogon_dissect_PRIV_NAME_ARRAY(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_ACCOUNTS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_privilege_entries, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_privilege_entries, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_privilege_control, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_privilege_control, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_PRIV_ATTR_ARRAY, NDR_POINTER_UNIQUE, - "PRIV_ATTR_ARRAY:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_PRIV_ATTR_ARRAY, NDR_POINTER_UNIQUE, + "PRIV_ATTR_ARRAY:", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_PRIV_NAME_ARRAY, NDR_POINTER_UNIQUE, - "PRIV_NAME_ARRAY:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_PRIV_NAME_ARRAY, NDR_POINTER_UNIQUE, + "PRIV_NAME_ARRAY:", -1); - offset = netlogon_dissect_QUOTA_LIMITS(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_QUOTA_LIMITS(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_systemflags, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_systemflags, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_security_information, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_security_information, NULL); - offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); + offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } /* @@ -3783,60 +3786,60 @@ netlogon_dissect_DELTA_ACCOUNTS(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_CIPHER_VALUE_DATA(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; - guint32 data_len; + dcerpc_info *di; + guint32 data_len; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, - hf_netlogon_cipher_maxlen, NULL); + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, + hf_netlogon_cipher_maxlen, NULL); - /* skip offset */ - offset += 4; + /* skip offset */ + offset += 4; - offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, - hf_netlogon_cipher_len, &data_len); + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, + hf_netlogon_cipher_len, &data_len); - proto_tree_add_item(tree, di->hf_index, tvb, offset, - data_len, FALSE); - offset += data_len; + proto_tree_add_item(tree, di->hf_index, tvb, offset, + data_len, FALSE); + offset += data_len; - return offset; + return offset; } static int netlogon_dissect_CIPHER_VALUE(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep, const char *name, int hf_index) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep, const char *name, int hf_index) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "%s", name); - tree = proto_item_add_subtree(item, ett_CYPHER_VALUE); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "%s", name); + tree = proto_item_add_subtree(item, ett_CYPHER_VALUE); + } - offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, - hf_netlogon_cipher_len, NULL); + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, + hf_netlogon_cipher_len, NULL); - offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, - hf_netlogon_cipher_maxlen, NULL); + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, + hf_netlogon_cipher_maxlen, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CIPHER_VALUE_DATA, NDR_POINTER_UNIQUE, - name, hf_index); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CIPHER_VALUE_DATA, NDR_POINTER_UNIQUE, + name, hf_index); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } /* @@ -3859,55 +3862,55 @@ netlogon_dissect_CIPHER_VALUE(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_SECRET(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = netlogon_dissect_CIPHER_VALUE(tvb, offset, - pinfo, tree, drep, - "CIPHER_VALUE: current cipher value", - hf_netlogon_cipher_current_data); + offset = netlogon_dissect_CIPHER_VALUE(tvb, offset, + pinfo, tree, drep, + "CIPHER_VALUE: current cipher value", + hf_netlogon_cipher_current_data); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_cipher_current_set_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_cipher_current_set_time); - offset = netlogon_dissect_CIPHER_VALUE(tvb, offset, - pinfo, tree, drep, - "CIPHER_VALUE: old cipher value", - hf_netlogon_cipher_old_data); + offset = netlogon_dissect_CIPHER_VALUE(tvb, offset, + pinfo, tree, drep, + "CIPHER_VALUE: old cipher value", + hf_netlogon_cipher_old_data); - offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, - hf_netlogon_cipher_old_set_time); + offset = dissect_ndr_nt_NTTIME(tvb, offset, pinfo, tree, drep, + hf_netlogon_cipher_old_set_time); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_security_information, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_security_information, NULL); - offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); + offset = lsarpc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } /* @@ -3918,62 +3921,63 @@ netlogon_dissect_DELTA_SECRET(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_MODIFIED_COUNT(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_duint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_modify_count, NULL); + offset = dissect_ndr_duint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_modify_count, NULL); - return offset; + return offset; } -#define DT_DELTA_DOMAIN 1 -#define DT_DELTA_GROUP 2 -#define DT_DELTA_DELETE_GROUP 3 -#define DT_DELTA_RENAME_GROUP 4 -#define DT_DELTA_USER 5 -#define DT_DELTA_DELETE_USER 6 -#define DT_DELTA_RENAME_USER 7 -#define DT_DELTA_GROUP_MEMBER 8 -#define DT_DELTA_ALIAS 9 -#define DT_DELTA_DELETE_ALIAS 10 -#define DT_DELTA_RENAME_ALIAS 11 -#define DT_DELTA_ALIAS_MEMBER 12 -#define DT_DELTA_POLICY 13 -#define DT_DELTA_TRUSTED_DOMAINS 14 -#define DT_DELTA_DELETE_TRUST 15 -#define DT_DELTA_ACCOUNTS 16 -#define DT_DELTA_DELETE_ACCOUNT 17 -#define DT_DELTA_SECRET 18 -#define DT_DELTA_DELETE_SECRET 19 -#define DT_DELTA_DELETE_GROUP2 20 -#define DT_DELTA_DELETE_USER2 21 -#define DT_MODIFIED_COUNT 22 +#define DT_DELTA_DOMAIN 1 +#define DT_DELTA_GROUP 2 +#define DT_DELTA_DELETE_GROUP 3 +#define DT_DELTA_RENAME_GROUP 4 +#define DT_DELTA_USER 5 +#define DT_DELTA_DELETE_USER 6 +#define DT_DELTA_RENAME_USER 7 +#define DT_DELTA_GROUP_MEMBER 8 +#define DT_DELTA_ALIAS 9 +#define DT_DELTA_DELETE_ALIAS 10 +#define DT_DELTA_RENAME_ALIAS 11 +#define DT_DELTA_ALIAS_MEMBER 12 +#define DT_DELTA_POLICY 13 +#define DT_DELTA_TRUSTED_DOMAINS 14 +#define DT_DELTA_DELETE_TRUST 15 +#define DT_DELTA_ACCOUNTS 16 +#define DT_DELTA_DELETE_ACCOUNT 17 +#define DT_DELTA_SECRET 18 +#define DT_DELTA_DELETE_SECRET 19 +#define DT_DELTA_DELETE_GROUP2 20 +#define DT_DELTA_DELETE_USER2 21 +#define DT_MODIFIED_COUNT 22 + static const value_string delta_type_vals[] = { - { DT_DELTA_DOMAIN, "Domain" }, - { DT_DELTA_GROUP, "Group" }, - { DT_DELTA_DELETE_GROUP, "Delete Group" }, - { DT_DELTA_RENAME_GROUP, "Rename Group" }, - { DT_DELTA_USER, "User" }, - { DT_DELTA_DELETE_USER, "Delete User" }, - { DT_DELTA_RENAME_USER, "Rename User" }, - { DT_DELTA_GROUP_MEMBER, "Group Member" }, - { DT_DELTA_ALIAS, "Alias" }, - { DT_DELTA_DELETE_ALIAS, "Delete Alias" }, - { DT_DELTA_RENAME_ALIAS, "Rename Alias" }, - { DT_DELTA_ALIAS_MEMBER, "Alias Member" }, - { DT_DELTA_POLICY, "Policy" }, - { DT_DELTA_TRUSTED_DOMAINS, "Trusted Domains" }, - { DT_DELTA_DELETE_TRUST, "Delete Trust" }, - { DT_DELTA_ACCOUNTS, "Accounts" }, - { DT_DELTA_DELETE_ACCOUNT, "Delete Account" }, - { DT_DELTA_SECRET, "Secret" }, - { DT_DELTA_DELETE_SECRET, "Delete Secret" }, - { DT_DELTA_DELETE_GROUP2, "Delete Group2" }, - { DT_DELTA_DELETE_USER2, "Delete User2" }, - { DT_MODIFIED_COUNT, "Modified Count" }, - { 0, NULL } + { DT_DELTA_DOMAIN, "Domain" }, + { DT_DELTA_GROUP, "Group" }, + { DT_DELTA_DELETE_GROUP, "Delete Group" }, + { DT_DELTA_RENAME_GROUP, "Rename Group" }, + { DT_DELTA_USER, "User" }, + { DT_DELTA_DELETE_USER, "Delete User" }, + { DT_DELTA_RENAME_USER, "Rename User" }, + { DT_DELTA_GROUP_MEMBER, "Group Member" }, + { DT_DELTA_ALIAS, "Alias" }, + { DT_DELTA_DELETE_ALIAS, "Delete Alias" }, + { DT_DELTA_RENAME_ALIAS, "Rename Alias" }, + { DT_DELTA_ALIAS_MEMBER, "Alias Member" }, + { DT_DELTA_POLICY, "Policy" }, + { DT_DELTA_TRUSTED_DOMAINS, "Trusted Domains" }, + { DT_DELTA_DELETE_TRUST, "Delete Trust" }, + { DT_DELTA_ACCOUNTS, "Accounts" }, + { DT_DELTA_DELETE_ACCOUNT, "Delete Account" }, + { DT_DELTA_SECRET, "Secret" }, + { DT_DELTA_DELETE_SECRET, "Delete Secret" }, + { DT_DELTA_DELETE_GROUP2, "Delete Group2" }, + { DT_DELTA_DELETE_USER2, "Delete User2" }, + { DT_MODIFIED_COUNT, "Modified Count" }, + { 0, NULL } }; /* * IDL typedef [switch_type(short)] union { @@ -4003,109 +4007,109 @@ static const value_string delta_type_vals[] = { */ static int netlogon_dissect_DELTA_UNION(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; - guint16 level; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; + guint16 level; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "DELTA_UNION:"); - tree = proto_item_add_subtree(item, ett_DELTA_UNION); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "DELTA_UNION:"); + tree = proto_item_add_subtree(item, ett_DELTA_UNION); + } - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_delta_type, &level); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_delta_type, &level); - ALIGN_TO_4_BYTES; - switch(level){ - case 1: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_DOMAIN, NDR_POINTER_UNIQUE, - "DELTA_DOMAIN:", -1); - break; - case 2: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_GROUP, NDR_POINTER_UNIQUE, - "DELTA_GROUP:", -1); - break; - case 4: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_RENAME, NDR_POINTER_UNIQUE, - "DELTA_RENAME_GROUP:", hf_netlogon_group_name); - break; - case 5: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_USER, NDR_POINTER_UNIQUE, - "DELTA_USER:", -1); - break; - case 7: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_RENAME, NDR_POINTER_UNIQUE, - "DELTA_RENAME_USER:", hf_netlogon_acct_name); - break; - case 8: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_GROUP_MEMBER, NDR_POINTER_UNIQUE, - "DELTA_GROUP_MEMBER:", -1); - break; - case 9: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_ALIAS, NDR_POINTER_UNIQUE, - "DELTA_ALIAS:", -1); - break; - case 11: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_RENAME, NDR_POINTER_UNIQUE, - "DELTA_RENAME_ALIAS:", hf_netlogon_alias_name); - break; - case 12: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_ALIAS_MEMBER, NDR_POINTER_UNIQUE, - "DELTA_ALIAS_MEMBER:", -1); - break; - case 13: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_POLICY, NDR_POINTER_UNIQUE, - "DELTA_POLICY:", -1); - break; - case 14: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_TRUSTED_DOMAINS, NDR_POINTER_UNIQUE, - "DELTA_TRUSTED_DOMAINS:", -1); - break; - case 16: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_ACCOUNTS, NDR_POINTER_UNIQUE, - "DELTA_ACCOUNTS:", -1); - break; - case 18: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_SECRET, NDR_POINTER_UNIQUE, - "DELTA_SECRET:", -1); - break; - case 20: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_DELETE_USER, NDR_POINTER_UNIQUE, - "DELTA_DELETE_GROUP:", -1); - break; - case 21: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_DELETE_USER, NDR_POINTER_UNIQUE, - "DELTA_DELETE_USER:", -1); - break; - case 22: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_MODIFIED_COUNT, NDR_POINTER_UNIQUE, - "MODIFIED_COUNT:", -1); - break; - } + ALIGN_TO_4_BYTES; + switch(level){ + case 1: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_DOMAIN, NDR_POINTER_UNIQUE, + "DELTA_DOMAIN:", -1); + break; + case 2: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_GROUP, NDR_POINTER_UNIQUE, + "DELTA_GROUP:", -1); + break; + case 4: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_RENAME, NDR_POINTER_UNIQUE, + "DELTA_RENAME_GROUP:", hf_netlogon_group_name); + break; + case 5: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_USER, NDR_POINTER_UNIQUE, + "DELTA_USER:", -1); + break; + case 7: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_RENAME, NDR_POINTER_UNIQUE, + "DELTA_RENAME_USER:", hf_netlogon_acct_name); + break; + case 8: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_GROUP_MEMBER, NDR_POINTER_UNIQUE, + "DELTA_GROUP_MEMBER:", -1); + break; + case 9: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_ALIAS, NDR_POINTER_UNIQUE, + "DELTA_ALIAS:", -1); + break; + case 11: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_RENAME, NDR_POINTER_UNIQUE, + "DELTA_RENAME_ALIAS:", hf_netlogon_alias_name); + break; + case 12: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_ALIAS_MEMBER, NDR_POINTER_UNIQUE, + "DELTA_ALIAS_MEMBER:", -1); + break; + case 13: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_POLICY, NDR_POINTER_UNIQUE, + "DELTA_POLICY:", -1); + break; + case 14: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_TRUSTED_DOMAINS, NDR_POINTER_UNIQUE, + "DELTA_TRUSTED_DOMAINS:", -1); + break; + case 16: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_ACCOUNTS, NDR_POINTER_UNIQUE, + "DELTA_ACCOUNTS:", -1); + break; + case 18: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_SECRET, NDR_POINTER_UNIQUE, + "DELTA_SECRET:", -1); + break; + case 20: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_DELETE_USER, NDR_POINTER_UNIQUE, + "DELTA_DELETE_GROUP:", -1); + break; + case 21: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_DELETE_USER, NDR_POINTER_UNIQUE, + "DELTA_DELETE_USER:", -1); + break; + case 22: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_MODIFIED_COUNT, NDR_POINTER_UNIQUE, + "MODIFIED_COUNT:", -1); + break; + } - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } @@ -4137,110 +4141,110 @@ netlogon_dissect_DELTA_UNION(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_ID_UNION(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; - guint16 level; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; + guint16 level; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "DELTA_ID_UNION:"); - tree = proto_item_add_subtree(item, ett_DELTA_ID_UNION); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "DELTA_ID_UNION:"); + tree = proto_item_add_subtree(item, ett_DELTA_ID_UNION); + } - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_delta_type, &level); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_delta_type, &level); - ALIGN_TO_4_BYTES; - switch(level){ - case 1: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_group_rid, NULL); - break; - case 2: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 3: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 4: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 5: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 6: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 7: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 8: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 9: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 10: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 11: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 12: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 13: - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - break; - case 14: - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - break; - case 15: - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - break; - case 16: - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - break; - case 17: - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - break; - case 18: - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, - tree, drep, NDR_POINTER_UNIQUE, "unknown", - hf_netlogon_unknown_string, 0); - break; - case 19: - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, - tree, drep, NDR_POINTER_UNIQUE, "unknown", - hf_netlogon_unknown_string, 0); - break; - case 20: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - case 21: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_user_rid, NULL); - break; - } + ALIGN_TO_4_BYTES; + switch(level){ + case 1: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_group_rid, NULL); + break; + case 2: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 3: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 4: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 5: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 6: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 7: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 8: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 9: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 10: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 11: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 12: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 13: + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + break; + case 14: + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + break; + case 15: + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + break; + case 16: + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + break; + case 17: + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + break; + case 18: + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, + tree, drep, NDR_POINTER_UNIQUE, "unknown", + hf_netlogon_unknown_string, 0); + break; + case 19: + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, + tree, drep, NDR_POINTER_UNIQUE, "unknown", + hf_netlogon_unknown_string, 0); + break; + case 20: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + case 21: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_user_rid, NULL); + break; + } - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } /* @@ -4252,45 +4256,45 @@ netlogon_dissect_DELTA_ID_UNION(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_ENUM(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; - guint16 type; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; + guint16 type; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "DELTA_ENUM:"); - tree = proto_item_add_subtree(item, ett_DELTA_ENUM); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "DELTA_ENUM:"); + tree = proto_item_add_subtree(item, ett_DELTA_ENUM); + } - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_delta_type, &type); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_delta_type, &type); - proto_item_append_text(item, "%s", val_to_str( - type, delta_type_vals, "Unknown")); + proto_item_append_text(item, "%s", val_to_str( + type, delta_type_vals, "Unknown")); - offset = netlogon_dissect_DELTA_ID_UNION(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_DELTA_ID_UNION(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_DELTA_UNION(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_DELTA_UNION(tvb, offset, + pinfo, tree, drep); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } static int netlogon_dissect_DELTA_ENUM_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_ENUM); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_ENUM); - return offset; + return offset; } /* @@ -4301,17 +4305,17 @@ netlogon_dissect_DELTA_ENUM_array(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_DELTA_ENUM_ARRAY(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_deltas, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_deltas, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_ENUM_array, NDR_POINTER_UNIQUE, - "DELTA_ENUM: deltas", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_ENUM_array, NDR_POINTER_UNIQUE, + "DELTA_ENUM: deltas", -1); - return offset; + return offset; } @@ -4329,54 +4333,54 @@ netlogon_dissect_DELTA_ENUM_ARRAY(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrdatabasedeltas_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_database_id, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_database_id, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_MODIFIED_COUNT, NDR_POINTER_REF, - "MODIFIED_COUNT: domain modified count", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_MODIFIED_COUNT, NDR_POINTER_REF, + "MODIFIED_COUNT: domain modified count", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_max_size, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_max_size, NULL); - return offset; + return offset; } static int netlogon_dissect_netrdatabasedeltas_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_MODIFIED_COUNT, NDR_POINTER_REF, - "MODIFIED_COUNT: domain modified count", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_MODIFIED_COUNT, NDR_POINTER_REF, + "MODIFIED_COUNT: domain modified count", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE, - "DELTA_ENUM_ARRAY: deltas", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE, + "DELTA_ENUM_ARRAY: deltas", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -4394,54 +4398,54 @@ netlogon_dissect_netrdatabasedeltas_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrdatabasesync_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_database_id, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_database_id, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_sync_context, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_sync_context, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_max_size, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_max_size, NULL); - return offset; + return offset; } static int netlogon_dissect_netrdatabasesync_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_sync_context, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_sync_context, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE, - "DELTA_ENUM_ARRAY: deltas", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE, + "DELTA_ENUM_ARRAY: deltas", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } /* @@ -4453,27 +4457,27 @@ netlogon_dissect_netrdatabasesync_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_UAS_INFO_0(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - proto_tree_add_item(tree, hf_netlogon_computer_name, tvb, offset, 16, FALSE); - offset += 16; + proto_tree_add_item(tree, hf_netlogon_computer_name, tvb, offset, 16, FALSE); + offset += 16; - proto_tree_add_text(tree, tvb, offset, 4, "Time Created: unknown time format"); - offset+= 4; + proto_tree_add_text(tree, tvb, offset, 4, "Time Created: unknown time format"); + offset+= 4; - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_serial_number, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_serial_number, NULL); - return offset; + return offset; } @@ -4494,63 +4498,63 @@ netlogon_dissect_UAS_INFO_0(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netraccountdeltas_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_UAS_INFO_0, NDR_POINTER_REF, - "UAS_INFO_0: RecordID", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_UAS_INFO_0, NDR_POINTER_REF, + "UAS_INFO_0: RecordID", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_count, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_count, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_max_size, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_max_size, NULL); - return offset; + return offset; } static int netlogon_dissect_netraccountdeltas_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_REF, - "BYTE_array: Buffer", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_REF, + "BYTE_array: Buffer", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_count, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_count, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_entries, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_entries, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_UAS_INFO_0, NDR_POINTER_REF, - "UAS_INFO_0: RecordID", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_UAS_INFO_0, NDR_POINTER_REF, + "UAS_INFO_0: RecordID", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -4572,62 +4576,62 @@ netlogon_dissect_netraccountdeltas_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netraccountsync_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reference, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reference, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_max_size, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_max_size, NULL); - return offset; + return offset; } static int netlogon_dissect_netraccountsync_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_REF, - "BYTE_array: Buffer", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_REF, + "BYTE_array: Buffer", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_count, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_count, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_entries, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_entries, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_next_reference, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_next_reference, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_UAS_INFO_0, NDR_POINTER_REF, - "UAS_INFO_0: RecordID", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_UAS_INFO_0, NDR_POINTER_REF, + "UAS_INFO_0: RecordID", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -4640,27 +4644,27 @@ netlogon_dissect_netraccountsync_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrgetdcname_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Domain", hf_netlogon_domain_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Domain", hf_netlogon_domain_name, 0); - return offset; + return offset; } static int netlogon_dissect_netrgetdcname_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Domain", hf_netlogon_dc_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Domain", hf_netlogon_dc_name, 0); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -4673,16 +4677,16 @@ netlogon_dissect_netrgetdcname_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_NETLOGON_INFO_1(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_flags, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_flags, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_pdc_connection_status, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_pdc_connection_status, NULL); - return offset; + return offset; } @@ -4696,23 +4700,23 @@ netlogon_dissect_NETLOGON_INFO_1(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_NETLOGON_INFO_2(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_flags, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_flags, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_pdc_connection_status, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_pdc_connection_status, NULL); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Trusted DC Name", - hf_netlogon_trusted_dc_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Trusted DC Name", + hf_netlogon_trusted_dc_name, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_tc_connection_status, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_tc_connection_status, NULL); - return offset; + return offset; } @@ -4729,31 +4733,31 @@ netlogon_dissect_NETLOGON_INFO_2(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_NETLOGON_INFO_3(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_flags, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_flags, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_logon_attempts, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_logon_attempts, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_reserved, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_reserved, NULL); - return offset; + return offset; } @@ -4766,34 +4770,34 @@ netlogon_dissect_NETLOGON_INFO_3(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_CONTROL_QUERY_INFORMATION(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - guint32 level; + guint32 level; - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, &level); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, &level); - ALIGN_TO_4_BYTES; - switch(level){ - case 1: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_NETLOGON_INFO_1, NDR_POINTER_UNIQUE, - "NETLOGON_INFO_1:", -1); - break; - case 2: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_NETLOGON_INFO_2, NDR_POINTER_UNIQUE, - "NETLOGON_INFO_2:", -1); - break; - case 3: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_NETLOGON_INFO_3, NDR_POINTER_UNIQUE, - "NETLOGON_INFO_3:", -1); - break; - } + ALIGN_TO_4_BYTES; + switch(level){ + case 1: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_NETLOGON_INFO_1, NDR_POINTER_UNIQUE, + "NETLOGON_INFO_1:", -1); + break; + case 2: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_NETLOGON_INFO_2, NDR_POINTER_UNIQUE, + "NETLOGON_INFO_2:", -1); + break; + case 3: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_NETLOGON_INFO_3, NDR_POINTER_UNIQUE, + "NETLOGON_INFO_3:", -1); + break; + } - return offset; + return offset; } @@ -4807,31 +4811,31 @@ netlogon_dissect_CONTROL_QUERY_INFORMATION(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrlogoncontrol_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_code, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_code, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogoncontrol_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CONTROL_QUERY_INFORMATION, NDR_POINTER_REF, - "CONTROL_QUERY_INFORMATION:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONTROL_QUERY_INFORMATION, NDR_POINTER_REF, + "CONTROL_QUERY_INFORMATION:", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } @@ -4844,28 +4848,28 @@ netlogon_dissect_netrlogoncontrol_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrgetanydcname_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Server Handle", - hf_netlogon_logonsrv_handle, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Server Handle", + hf_netlogon_logonsrv_handle, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Domain", hf_netlogon_domain_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Domain", hf_netlogon_domain_name, 0); - return offset; + return offset; } static int netlogon_dissect_netrgetanydcname_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Domain", hf_netlogon_dc_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Domain", hf_netlogon_dc_name, 0); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } @@ -4886,38 +4890,38 @@ netlogon_dissect_netrgetanydcname_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_CONTROL_DATA_INFORMATION(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - guint32 level; + guint32 level; - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, &level); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, &level); - ALIGN_TO_4_BYTES; - switch(level){ - case 5: - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, - tree, drep, NDR_POINTER_UNIQUE, "unknown", - hf_netlogon_unknown_string, 0); - break; - case 6: - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, - tree, drep, NDR_POINTER_UNIQUE, "unknown", - hf_netlogon_unknown_string, 0); - break; - case 0xfffe: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); - break; - case 8: - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, - tree, drep, NDR_POINTER_UNIQUE, "unknown", - hf_netlogon_unknown_string, 0); - break; - } + ALIGN_TO_4_BYTES; + switch(level){ + case 5: + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, + tree, drep, NDR_POINTER_UNIQUE, "unknown", + hf_netlogon_unknown_string, 0); + break; + case 6: + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, + tree, drep, NDR_POINTER_UNIQUE, "unknown", + hf_netlogon_unknown_string, 0); + break; + case 0xfffe: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); + break; + case 8: + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, + tree, drep, NDR_POINTER_UNIQUE, "unknown", + hf_netlogon_unknown_string, 0); + break; + } - return offset; + return offset; } @@ -4932,41 +4936,41 @@ netlogon_dissect_CONTROL_DATA_INFORMATION(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrlogoncontrol2_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_code, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_code, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CONTROL_DATA_INFORMATION, NDR_POINTER_REF, - "CONTROL_DATA_INFORMATION: ", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONTROL_DATA_INFORMATION, NDR_POINTER_REF, + "CONTROL_DATA_INFORMATION: ", -1); - return offset; + return offset; } static int netlogon_dissect_netrlogoncontrol2_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - guint32 status; + guint32 status; - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CONTROL_QUERY_INFORMATION, NDR_POINTER_REF, - "CONTROL_QUERY_INFORMATION:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONTROL_QUERY_INFORMATION, NDR_POINTER_REF, + "CONTROL_QUERY_INFORMATION:", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_netlogon_werr_rc, &status); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hf_netlogon_werr_rc, &status); - if (status != 0 && check_col(pinfo->cinfo, COL_INFO)) - col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown WERR error 0x%08x")); + if (status != 0 && check_col(pinfo->cinfo, COL_INFO)) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown WERR error 0x%08x")); - return offset; + return offset; } @@ -4987,56 +4991,56 @@ netlogon_dissect_netrlogoncontrol2_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrdatabasesync2_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_database_id, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_database_id, NULL); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_restart_state, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_restart_state, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_sync_context, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_sync_context, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_max_size, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_max_size, NULL); - return offset; + return offset; } static int netlogon_dissect_netrdatabasesync2_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_sync_context, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_sync_context, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE, - "DELTA_ENUM_ARRAY: deltas", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE, + "DELTA_ENUM_ARRAY: deltas", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -5053,48 +5057,48 @@ netlogon_dissect_netrdatabasesync2_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrdatabaseredo_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Server Handle", hf_netlogon_logonsrv_handle, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_REF, - "Change log entry: ", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_REF, + "Change log entry: ", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_max_log_size, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_max_log_size, NULL); - return offset; + return offset; } static int netlogon_dissect_netrdatabaseredo_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE, - "DELTA_ENUM_ARRAY: deltas", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DELTA_ENUM_ARRAY, NDR_POINTER_UNIQUE, + "DELTA_ENUM_ARRAY: deltas", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } @@ -5109,703 +5113,709 @@ netlogon_dissect_netrdatabaseredo_reply(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrlogoncontrol2ex_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_code, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_code, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CONTROL_DATA_INFORMATION, NDR_POINTER_REF, - "CONTROL_DATA_INFORMATION: ", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONTROL_DATA_INFORMATION, NDR_POINTER_REF, + "CONTROL_DATA_INFORMATION: ", -1); - return offset; + return offset; } static int netlogon_dissect_netrlogoncontrol2ex_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CONTROL_QUERY_INFORMATION, NDR_POINTER_REF, - "CONTROL_QUERY_INFORMATION:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONTROL_QUERY_INFORMATION, NDR_POINTER_REF, + "CONTROL_QUERY_INFORMATION:", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } static const value_string trust_type_vals[] = { - { 1, "NT4 Domain" }, - { 2, "AD Domain" }, - { 3, "MIT Kerberos realm" }, - { 4, "DCE realm" }, - { 0, NULL } + { 1, "NT4 Domain" }, + { 2, "AD Domain" }, + { 3, "MIT Kerberos realm" }, + { 4, "DCE realm" }, + { 0, NULL } }; -#define DS_INET_ADDRESS 1 -#define DS_NETBIOS_ADDRESS 2 +#define DS_INET_ADDRESS 1 +#define DS_NETBIOS_ADDRESS 2 + static const value_string dc_address_types[] = { - { DS_INET_ADDRESS, "IP/DNS name" }, - { DS_NETBIOS_ADDRESS, "NetBIOS name" }, - { 0, NULL} + { DS_INET_ADDRESS, "IP/DNS name" }, + { DS_NETBIOS_ADDRESS, "NetBIOS name" }, + { 0, NULL} }; -#define RQ_ROOT_FOREST 0x0001 -#define RQ_DC_XFOREST 0x0002 -#define RQ_RODC_DIF_DOMAIN 0x0004 -#define RQ_NTLM_FROM_RODC 0x0008 +#define RQ_ROOT_FOREST 0x0001 +#define RQ_DC_XFOREST 0x0002 +#define RQ_RODC_DIF_DOMAIN 0x0004 +#define RQ_NTLM_FROM_RODC 0x0008 + +#define DS_DOMAIN_IN_FOREST 0x0001 +#define DS_DOMAIN_DIRECT_OUTBOUND 0x0002 +#define DS_DOMAIN_TREE_ROOT 0x0004 +#define DS_DOMAIN_PRIMARY 0x0008 +#define DS_DOMAIN_NATIVE_MODE 0x0010 +#define DS_DOMAIN_DIRECT_INBOUND 0x0020 -#define DS_DOMAIN_IN_FOREST 0x0001 -#define DS_DOMAIN_DIRECT_OUTBOUND 0x0002 -#define DS_DOMAIN_TREE_ROOT 0x0004 -#define DS_DOMAIN_PRIMARY 0x0008 -#define DS_DOMAIN_NATIVE_MODE 0x0010 -#define DS_DOMAIN_DIRECT_INBOUND 0x0020 static const true_false_string trust_inbound = { - "There is a DIRECT INBOUND trust for the servers domain", - "There is NO direct inbound trust for the servers domain" + "There is a DIRECT INBOUND trust for the servers domain", + "There is NO direct inbound trust for the servers domain" }; static const true_false_string trust_outbound = { - "There is a DIRECT OUTBOUND trust for this domain", - "There is NO direct outbound trust for this domain" + "There is a DIRECT OUTBOUND trust for this domain", + "There is NO direct outbound trust for this domain" }; static const true_false_string trust_in_forest = { - "The domain is a member IN the same FOREST as the queried server", - "The domain is NOT a member of the queried servers domain" + "The domain is a member IN the same FOREST as the queried server", + "The domain is NOT a member of the queried servers domain" }; static const true_false_string trust_native_mode = { - "The primary domain is a NATIVE MODE w2k domain", - "The primary is NOT a native mode w2k domain" + "The primary domain is a NATIVE MODE w2k domain", + "The primary is NOT a native mode w2k domain" }; static const true_false_string trust_primary = { - "The domain is the PRIMARY domain of the queried server", - "The domain is NOT the primary domain of the queried server" + "The domain is the PRIMARY domain of the queried server", + "The domain is NOT the primary domain of the queried server" }; static const true_false_string trust_tree_root = { - "The domain is the ROOT of a domain TREE", - "The domain is NOT a root of a domain tree" + "The domain is the ROOT of a domain TREE", + "The domain is NOT a root of a domain tree" }; static int netlogon_dissect_DOMAIN_TRUST_FLAGS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) { - guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; - dcerpc_info *di; + guint32 mask; + proto_item *item = NULL; + proto_tree *tree = NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, - hf_netlogon_trust_flags, &mask); + offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, + hf_netlogon_trust_flags, &mask); - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_trust_flags, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_trust_flags); - } + if(parent_tree){ + item = proto_tree_add_uint(parent_tree, hf_netlogon_trust_flags, + tvb, offset-4, 4, mask); + tree = proto_item_add_subtree(item, ett_trust_flags); + } - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_inbound, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_native_mode, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_primary, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_tree_root, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_outbound, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_in_forest, - tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_flags_inbound, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_flags_native_mode, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_flags_primary, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_flags_tree_root, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_flags_outbound, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_flags_in_forest, + tvb, offset-4, 4, mask); - return offset; + return offset; } static const true_false_string trust_attribs_non_transitive = { - "This is a NON TRANSITIVE trust relation", - "This is a normal trust" + "This is a NON TRANSITIVE trust relation", + "This is a normal trust" }; static const true_false_string trust_attribs_uplevel_only = { - "This is an UPLEVEL ONLY trust relation", - "This is a normal trust" + "This is an UPLEVEL ONLY trust relation", + "This is a normal trust" }; static const true_false_string trust_attribs_quarantined_domain = { - "This is a QUARANTINED DOMAIN (so don't expect lookupsids to work)", - "This is a normal trust" + "This is a QUARANTINED DOMAIN (so don't expect lookupsids to work)", + "This is a normal trust" }; static const true_false_string trust_attribs_forest_transitive = { - "This is a FOREST TRANSITIVE trust", - "This is a normal trust" + "This is a FOREST TRANSITIVE trust", + "This is a normal trust" }; static const true_false_string trust_attribs_cross_organization = { - "This is a CROSS ORGANIZATION trust", - "This is a normal trust" + "This is a CROSS ORGANIZATION trust", + "This is a normal trust" }; static const true_false_string trust_attribs_within_forest = { - "This is a WITHIN FOREST trust", - "This is a normal trust" + "This is a WITHIN FOREST trust", + "This is a normal trust" }; static const true_false_string trust_attribs_treat_as_external = { - "TREAT this trust AS an EXTERNAL trust", - "This is a normal trust" + "TREAT this trust AS an EXTERNAL trust", + "This is a normal trust" }; static int netlogon_dissect_DOMAIN_TRUST_ATTRIBS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) { - guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; - dcerpc_info *di; + guint32 mask; + proto_item *item = NULL; + proto_tree *tree = NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, - hf_netlogon_trust_attribs, &mask); + offset = dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, + hf_netlogon_trust_attribs, &mask); - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_trust_attribs, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_trust_attribs); - } + if(parent_tree){ + item = proto_tree_add_uint(parent_tree, hf_netlogon_trust_attribs, + tvb, offset-4, 4, mask); + tree = proto_item_add_subtree(item, ett_trust_attribs); + } - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_treat_as_external, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_within_forest, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_cross_organization, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_forest_transitive, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_quarantined_domain, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_uplevel_only, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_non_transitive, - tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_treat_as_external, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_within_forest, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_cross_organization, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_forest_transitive, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_quarantined_domain, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_uplevel_only, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_non_transitive, + tvb, offset-4, 4, mask); - return offset; + return offset; } -#define DS_FORCE_REDISCOVERY 0x00000001 -#define DS_DIRECTORY_SERVICE_REQUIRED 0x00000010 -#define DS_DIRECTORY_SERVICE_PREFERRED 0x00000020 -#define DS_GC_SERVER_REQUIRED 0x00000040 -#define DS_PDC_REQUIRED 0x00000080 -#define DS_BACKGROUND_ONLY 0x00000100 -#define DS_IP_REQUIRED 0x00000200 -#define DS_KDC_REQUIRED 0x00000400 -#define DS_TIMESERV_REQUIRED 0x00000800 -#define DS_WRITABLE_REQUIRED 0x00001000 -#define DS_GOOD_TIMESERV_PREFERRED 0x00002000 -#define DS_AVOID_SELF 0x00004000 -#define DS_ONLY_LDAP_NEEDED 0x00008000 -#define DS_IS_FLAT_NAME 0x00010000 -#define DS_IS_DNS_NAME 0x00020000 -#define DS_RETURN_DNS_NAME 0x40000000 -#define DS_RETURN_FLAT_NAME 0x80000000 +#define DS_FORCE_REDISCOVERY 0x00000001 +#define DS_DIRECTORY_SERVICE_REQUIRED 0x00000010 +#define DS_DIRECTORY_SERVICE_PREFERRED 0x00000020 +#define DS_GC_SERVER_REQUIRED 0x00000040 +#define DS_PDC_REQUIRED 0x00000080 +#define DS_BACKGROUND_ONLY 0x00000100 +#define DS_IP_REQUIRED 0x00000200 +#define DS_KDC_REQUIRED 0x00000400 +#define DS_TIMESERV_REQUIRED 0x00000800 +#define DS_WRITABLE_REQUIRED 0x00001000 +#define DS_GOOD_TIMESERV_PREFERRED 0x00002000 +#define DS_AVOID_SELF 0x00004000 +#define DS_ONLY_LDAP_NEEDED 0x00008000 +#define DS_IS_FLAT_NAME 0x00010000 +#define DS_IS_DNS_NAME 0x00020000 +#define DS_RETURN_DNS_NAME 0x40000000 +#define DS_RETURN_FLAT_NAME 0x80000000 + static const true_false_string get_dcname_request_flags_force_rediscovery = { - "FORCE REDISCOVERY of any cached data", - "You may return cached data" + "FORCE REDISCOVERY of any cached data", + "You may return cached data" }; static const true_false_string get_dcname_request_flags_directory_service_required = { - "DIRECTORY SERVICE is REQUIRED on the server", - "We do NOT require directory service servers" + "DIRECTORY SERVICE is REQUIRED on the server", + "We do NOT require directory service servers" }; static const true_false_string get_dcname_request_flags_directory_service_preferred = { - "DIRECTORY SERVICE servers are PREFERRED", - "We do NOT have a preference for directory service servers" + "DIRECTORY SERVICE servers are PREFERRED", + "We do NOT have a preference for directory service servers" }; static const true_false_string get_dcname_request_flags_gc_server_required = { - "GC SERVER is REQUIRED", - "gc server is NOT required" + "GC SERVER is REQUIRED", + "gc server is NOT required" }; static const true_false_string get_dcname_request_flags_pdc_required = { - "PDC SERVER is REQUIRED", - "pdc server is NOT required" + "PDC SERVER is REQUIRED", + "pdc server is NOT required" }; static const true_false_string get_dcname_request_flags_background_only = { - "Only return cached data, even if it has expired", - "Return cached data unless it has expired" + "Only return cached data, even if it has expired", + "Return cached data unless it has expired" }; static const true_false_string get_dcname_request_flags_ip_required = { - "IP address is REQUIRED", - "ip address is NOT required" + "IP address is REQUIRED", + "ip address is NOT required" }; static const true_false_string get_dcname_request_flags_kdc_required = { - "KDC server is REQUIRED", - "kdc server is NOT required" + "KDC server is REQUIRED", + "kdc server is NOT required" }; static const true_false_string get_dcname_request_flags_timeserv_required = { - "TIMESERV service is REQUIRED", - "timeserv service is NOT required" + "TIMESERV service is REQUIRED", + "timeserv service is NOT required" }; static const true_false_string get_dcname_request_flags_writable_required = { - "the returned dc MUST be WRITEABLE", - "a read-only dc may be returned" + "the returned dc MUST be WRITEABLE", + "a read-only dc may be returned" }; static const true_false_string get_dcname_request_flags_good_timeserv_preferred = { - "GOOD TIMESERV servers are PREFERRED", - "we do NOT have a preference for good timeserv servers" + "GOOD TIMESERV servers are PREFERRED", + "we do NOT have a preference for good timeserv servers" }; static const true_false_string get_dcname_request_flags_avoid_self = { - "do NOT return self as dc; return someone else", - "you may return yourSELF as the dc" + "do NOT return self as dc; return someone else", + "you may return yourSELF as the dc" }; static const true_false_string get_dcname_request_flags_only_ldap_needed = { - "we ONLY NEED LDAP; you don't have to return a dc", - "we need a normal dc; an ldap only server will not do" + "we ONLY NEED LDAP; you don't have to return a dc", + "we need a normal dc; an ldap only server will not do" }; static const true_false_string get_dcname_request_flags_is_flat_name = { - "the name we specify is a NetBIOS name", - "the name we specify is NOT a NetBIOS name" + "the name we specify is a NetBIOS name", + "the name we specify is NOT a NetBIOS name" }; static const true_false_string get_dcname_request_flags_is_dns_name = { - "the name we specify is a DNS name", - "ther name we specify is NOT a dns name" + "the name we specify is a DNS name", + "ther name we specify is NOT a dns name" }; static const true_false_string get_dcname_request_flags_return_dns_name = { - "return a DNS name", - "you may return a NON-dns name" + "return a DNS name", + "you may return a NON-dns name" }; static const true_false_string get_dcname_request_flags_return_flat_name = { - "return a NetBIOS name", - "you may return a NON-NetBIOS name" + "return a NetBIOS name", + "you may return a NON-NetBIOS name" }; static int netlogon_dissect_GET_DCNAME_REQUEST_FLAGS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) { - guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; - dcerpc_info *di; + guint32 mask; + proto_item *item = NULL; + proto_tree *tree = NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, - hf_netlogon_get_dcname_request_flags, &mask); + offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, + hf_netlogon_get_dcname_request_flags, &mask); - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_get_dcname_request_flags, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_get_dcname_request_flags); - } + if(parent_tree){ + item = proto_tree_add_uint(parent_tree, hf_netlogon_get_dcname_request_flags, + tvb, offset-4, 4, mask); + tree = proto_item_add_subtree(item, ett_get_dcname_request_flags); + } - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_return_flat_name, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_return_dns_name, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_is_flat_name, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_is_dns_name, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_only_ldap_needed, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_avoid_self, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_good_timeserv_preferred, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_writable_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_timeserv_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_kdc_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_ip_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_background_only, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_pdc_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_gc_server_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_directory_service_preferred, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_directory_service_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_force_rediscovery, - tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_return_flat_name, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_return_dns_name, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_is_flat_name, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_is_dns_name, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_only_ldap_needed, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_avoid_self, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_good_timeserv_preferred, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_writable_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_timeserv_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_kdc_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_ip_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_background_only, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_pdc_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_gc_server_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_directory_service_preferred, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_directory_service_required, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_force_rediscovery, + tvb, offset-4, 4, mask); - return offset; + return offset; } -#define DS_PDC_FLAG 0x00000001 -#define DS_GC_FLAG 0x00000004 -#define DS_LDAP_FLAG 0x00000008 -#define DS_DS_FLAG 0x00000010 -#define DS_KDC_FLAG 0x00000020 -#define DS_TIMESERV_FLAG 0x00000040 -#define DS_CLOSEST_FLAG 0x00000080 -#define DS_WRITABLE_FLAG 0x00000100 -#define DS_GOOD_TIMESERV_FLAG 0x00000200 -#define DS_NDNC_FLAG 0x00000400 -#define DS_DNS_CONTROLLER_FLAG 0x20000000 -#define DS_DNS_DOMAIN_FLAG 0x40000000 -#define DS_DNS_FOREST_FLAG 0x80000000 +#define DS_PDC_FLAG 0x00000001 +#define DS_GC_FLAG 0x00000004 +#define DS_LDAP_FLAG 0x00000008 +#define DS_DS_FLAG 0x00000010 +#define DS_KDC_FLAG 0x00000020 +#define DS_TIMESERV_FLAG 0x00000040 +#define DS_CLOSEST_FLAG 0x00000080 +#define DS_WRITABLE_FLAG 0x00000100 +#define DS_GOOD_TIMESERV_FLAG 0x00000200 +#define DS_NDNC_FLAG 0x00000400 +#define DS_DNS_CONTROLLER_FLAG 0x20000000 +#define DS_DNS_DOMAIN_FLAG 0x40000000 +#define DS_DNS_FOREST_FLAG 0x80000000 + static const true_false_string dc_flags_pdc_flag = { - "this is the PDC of the domain", - "this is NOT the pdc of the domain" + "this is the PDC of the domain", + "this is NOT the pdc of the domain" }; static const true_false_string dc_flags_gc_flag = { - "this is the GC of the forest", - "this is NOT the gc of the forest" + "this is the GC of the forest", + "this is NOT the gc of the forest" }; static const true_false_string dc_flags_ldap_flag = { - "this is an LDAP server", - "this is NOT an ldap server" + "this is an LDAP server", + "this is NOT an ldap server" }; static const true_false_string dc_flags_ds_flag = { - "this is a DS server", - "this is NOT a ds server" + "this is a DS server", + "this is NOT a ds server" }; static const true_false_string dc_flags_kdc_flag = { - "this is a KDC server", - "this is NOT a kdc server" + "this is a KDC server", + "this is NOT a kdc server" }; static const true_false_string dc_flags_timeserv_flag = { - "this is a TIMESERV server", - "this is NOT a timeserv server" + "this is a TIMESERV server", + "this is NOT a timeserv server" }; static const true_false_string dc_flags_closest_flag = { - "this is the CLOSEST server", - "this is NOT the closest server" + "this is the CLOSEST server", + "this is NOT the closest server" }; static const true_false_string dc_flags_writable_flag = { - "this server has a WRITABLE ds database", - "this server has a READ-ONLY ds database" + "this server has a WRITABLE ds database", + "this server has a READ-ONLY ds database" }; static const true_false_string dc_flags_good_timeserv_flag = { - "this server is a GOOD TIMESERV server", - "this is NOT a good timeserv server" + "this server is a GOOD TIMESERV server", + "this is NOT a good timeserv server" }; static const true_false_string dc_flags_ndnc_flag = { - "NDNC is set", - "ndnc is NOT set" + "NDNC is set", + "ndnc is NOT set" }; static const true_false_string dc_flags_dns_controller_flag = { - "DomainControllerName is a DNS name", - "DomainControllerName is NOT a dns name" + "DomainControllerName is a DNS name", + "DomainControllerName is NOT a dns name" }; static const true_false_string dc_flags_dns_domain_flag = { - "DomainName is a DNS name", - "DomainName is NOT a dns name" + "DomainName is a DNS name", + "DomainName is NOT a dns name" }; static const true_false_string dc_flags_dns_forest_flag = { - "DnsForestName is a DNS name", - "DnsForestName is NOT a dns name" + "DnsForestName is a DNS name", + "DnsForestName is NOT a dns name" }; static int netlogon_dissect_DC_FLAGS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) { - guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; - dcerpc_info *di; + guint32 mask; + proto_item *item = NULL; + proto_tree *tree = NULL; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - /*just a run to handle conformant arrays, nothing to dissect */ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } - offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, - hf_netlogon_dc_flags, &mask); + offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, drep, + hf_netlogon_dc_flags, &mask); - if(parent_tree){ - item = proto_tree_add_uint_format_value(parent_tree, hf_netlogon_dc_flags, - tvb, offset-4, 4, mask, "0x%08x%s", mask, (mask==0x0000ffff)?" PING (mask==0x0000ffff)":""); - tree = proto_item_add_subtree(item, ett_dc_flags); - } + if(parent_tree){ + item = proto_tree_add_uint_format_value(parent_tree, hf_netlogon_dc_flags, + tvb, offset-4, 4, mask, "0x%08x%s", mask, (mask==0x0000ffff)?" PING (mask==0x0000ffff)":""); + tree = proto_item_add_subtree(item, ett_dc_flags); + } - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_dns_forest_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_dns_domain_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_dns_controller_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_ndnc_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_good_timeserv_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_writable_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_closest_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_timeserv_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_kdc_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_ds_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_ldap_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_gc_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_pdc_flag, - tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_dns_forest_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_dns_domain_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_dns_controller_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_ndnc_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_good_timeserv_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_writable_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_closest_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_timeserv_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_kdc_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_ds_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_ldap_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_gc_flag, + tvb, offset-4, 4, mask); + proto_tree_add_boolean(tree, hf_netlogon_dc_flags_pdc_flag, + tvb, offset-4, 4, mask); - return offset; + return offset; } static int netlogon_dissect_pointer_long(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, - di->hf_index, NULL); - return offset; + di=pinfo->private_data; + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, + di->hf_index, NULL); + return offset; } -/* + +#if 0 static int netlogon_dissect_pointer_char(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - di->hf_index, NULL); - return offset; + di=pinfo->private_data; + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + di->hf_index, NULL); + return offset; } -*/ +#endif + static int netlogon_dissect_UNICODE_MULTI_byte(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_char, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_char, NULL); - return offset; + return offset; } static int netlogon_dissect_UNICODE_MULTI_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_UNICODE_MULTI_byte); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_UNICODE_MULTI_byte); - return offset; + return offset; } static int netlogon_dissect_UNICODE_MULTI(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "UNICODE_MULTI:"); - tree = proto_item_add_subtree(item, ett_UNICODE_MULTI); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "UNICODE_MULTI:"); + tree = proto_item_add_subtree(item, ett_UNICODE_MULTI); + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_len, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_len, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_UNICODE_MULTI_array, NDR_POINTER_UNIQUE, - "unknown", hf_netlogon_unknown_string); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_UNICODE_MULTI_array, NDR_POINTER_UNIQUE, + "unknown", hf_netlogon_unknown_string); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } static int netlogon_dissect_DOMAIN_CONTROLLER_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "DOMAIN_CONTROLLER_INFO:"); - tree = proto_item_add_subtree(item, ett_DOMAIN_CONTROLLER_INFO); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "DOMAIN_CONTROLLER_INFO:"); + tree = proto_item_add_subtree(item, ett_DOMAIN_CONTROLLER_INFO); + } - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "DC Name", hf_netlogon_dc_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "DC Name", hf_netlogon_dc_name, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "DC Address", hf_netlogon_dc_address, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "DC Address", hf_netlogon_dc_address, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dc_address_type, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dc_address_type, NULL); - offset = dissect_nt_GUID(tvb, offset, - pinfo, tree, drep); + offset = dissect_nt_GUID(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Logon Domain", hf_netlogon_logon_dom, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Logon Domain", hf_netlogon_logon_dom, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "DNS Forest", hf_netlogon_dns_forest_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "DNS Forest", hf_netlogon_dns_forest_name, 0); - offset = netlogon_dissect_DC_FLAGS(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_DC_FLAGS(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "DC Site", hf_netlogon_dc_site_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "DC Site", hf_netlogon_dc_site_name, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Client Site", - hf_netlogon_client_site_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Client Site", + hf_netlogon_client_site_name, 0); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } static int dissect_ndr_trust_extension(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - guint32 len,max; - dcerpc_info *di; + guint32 len,max; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - return offset; - } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_trust_max, &max); + di=pinfo->private_data; + if(di->conformant_run){ + return offset; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_trust_max, &max); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_trust_offset, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_trust_offset, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_trust_len, &len); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_trust_len, &len); - if( max * 2 == 16 ) { - offset = netlogon_dissect_DOMAIN_TRUST_FLAGS(tvb, offset, pinfo, tree, drep); + if( max * 2 == 16 ) { + offset = netlogon_dissect_DOMAIN_TRUST_FLAGS(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_trust_parent_index, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_trust_parent_index, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_trust_type, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_trust_type, NULL); - offset = netlogon_dissect_DOMAIN_TRUST_ATTRIBS(tvb, offset, pinfo, tree, drep); - } - /* else do something scream shout .... */ + offset = netlogon_dissect_DOMAIN_TRUST_ATTRIBS(tvb, offset, pinfo, tree, drep); + } + /* else do something scream shout .... */ - return offset; + return offset; } static int netlogon_dissect_BLOB_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - guint32 len; - dcerpc_info *di; + guint32 len; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + return offset; + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_blob_size, &len); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_blob_size, &len); - proto_tree_add_item(tree, hf_netlogon_blob, tvb, offset, len, - FALSE); - offset += len; + proto_tree_add_item(tree, hf_netlogon_blob, tvb, offset, len, + FALSE); + offset += len; - return offset; + return offset; } static int dissect_ndr_ulongs_as_counted_string(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep, int hf_index) + packet_info *pinfo, proto_tree *tree, + guint8 *drep, int hf_index) { - dcerpc_info *di = pinfo->private_data; - guint16 len, size; - gboolean add_subtree = TRUE; /* Manage room for evolution*/ - proto_item *item; - proto_tree *subtree = tree; + dcerpc_info *di = pinfo->private_data; + guint16 len, size; + gboolean add_subtree = TRUE; /* Manage room for evolution*/ + proto_item *item; + proto_tree *subtree = tree; - if (add_subtree) { + if (add_subtree) { - item = proto_tree_add_text( - tree, tvb, offset, 0, "%s", - proto_registrar_get_name(hf_index)); + item = proto_tree_add_text( + tree, tvb, offset, 0, "%s", + proto_registrar_get_name(hf_index)); - subtree = proto_item_add_subtree(item, ett_nt_counted_longs_as_string); - } - /* Structure starts with short, but is aligned for longs */ - ALIGN_TO_4_BYTES; + subtree = proto_item_add_subtree(item, ett_nt_counted_longs_as_string); + } + /* Structure starts with short, but is aligned for longs */ + ALIGN_TO_4_BYTES; - if (di->conformant_run) + if (di->conformant_run) + return offset; + + /* + struct { + short len; + short size; + [size_is(size/2), length_is(len/2), ptr] unsigned short *string; + } UNICODE_STRING; + + */ + + offset = dissect_ndr_uint16(tvb, offset, pinfo, subtree, drep, + hf_nt_cs_len, &len); + offset = dissect_ndr_uint16(tvb, offset, pinfo, subtree, drep, + hf_nt_cs_size, &size); + offset = dissect_ndr_pointer_cb(tvb, offset, pinfo, subtree, drep, + dissect_ndr_trust_extension, NDR_POINTER_UNIQUE, + "Buffer", hf_index,NULL,NULL); return offset; - - /* - struct { - short len; - short size; - [size_is(size/2), length_is(len/2), ptr] unsigned short *string; - } UNICODE_STRING; - - */ - - offset = dissect_ndr_uint16(tvb, offset, pinfo, subtree, drep, - hf_nt_cs_len, &len); - offset = dissect_ndr_uint16(tvb, offset, pinfo, subtree, drep, - hf_nt_cs_size, &size); - offset = dissect_ndr_pointer_cb(tvb, offset, pinfo, subtree, drep, - dissect_ndr_trust_extension, NDR_POINTER_UNIQUE, - "Buffer", hf_index,NULL,NULL); - return offset; } extern int @@ -5814,131 +5824,131 @@ lsarpc_dissect_struct_dom_sid2(tvbuff_t *tvb _U_, int offset _U_, packet_info *p static int DomainInfo_sid_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep _U_) { - offset = lsarpc_dissect_struct_dom_sid2(tvb,offset,pinfo,tree,drep,DomainInfo_sid,0); + offset = lsarpc_dissect_struct_dom_sid2(tvb,offset,pinfo,tree,drep,DomainInfo_sid,0); - return offset; + return offset; } static int dissect_element_lsa_DnsDomainInfo_sid(tvbuff_t *tvb , int offset , packet_info *pinfo , proto_tree *tree , guint8 *drep ) { - offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, DomainInfo_sid_, NDR_POINTER_UNIQUE, "Pointer to Sid (dom_sid2)",DnsDomainInfo_sid); + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, drep, DomainInfo_sid_, NDR_POINTER_UNIQUE, "Pointer to Sid (dom_sid2)",DnsDomainInfo_sid); - return offset; + return offset; } static int dissect_element_lsa_DnsDomainInfo_domain_guid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, guint8 *drep ) { - offset = dissect_ndr_uuid_t(tvb, offset, pinfo, tree, drep, DnsDomainInfo_domain_guid, NULL); + offset = dissect_ndr_uuid_t(tvb, offset, pinfo, tree, drep, DnsDomainInfo_domain_guid, NULL); - return offset; + return offset; } static int dissect_part_DnsDomainInfo(tvbuff_t *tvb , int offset, packet_info *pinfo, proto_tree *tree , guint8 *drep, int hf_index _U_, guint32 param _U_) { - offset = lsarpc_dissect_struct_lsa_StringLarge(tvb,offset,pinfo,tree,drep,DnsDomainInfo_name,0); + offset = lsarpc_dissect_struct_lsa_StringLarge(tvb,offset,pinfo,tree,drep,DnsDomainInfo_name,0); - offset = lsarpc_dissect_struct_lsa_StringLarge(tvb,offset,pinfo,tree,drep,DnsDomainInfo_dns_domain,0); + offset = lsarpc_dissect_struct_lsa_StringLarge(tvb,offset,pinfo,tree,drep,DnsDomainInfo_dns_domain,0); - offset = lsarpc_dissect_struct_lsa_StringLarge(tvb,offset,pinfo,tree,drep,DnsDomainInfo_dns_forest,0); + offset = lsarpc_dissect_struct_lsa_StringLarge(tvb,offset,pinfo,tree,drep,DnsDomainInfo_dns_forest,0); - offset = dissect_element_lsa_DnsDomainInfo_domain_guid(tvb, offset, pinfo, tree, drep); + offset = dissect_element_lsa_DnsDomainInfo_domain_guid(tvb, offset, pinfo, tree, drep); - offset = dissect_element_lsa_DnsDomainInfo_sid(tvb, offset, pinfo, tree, drep); + offset = dissect_element_lsa_DnsDomainInfo_sid(tvb, offset, pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_ONE_DOMAIN_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "ONE_DOMAIN_INFO"); - tree = proto_item_add_subtree(item, ett_DOMAIN_TRUST_INFO); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "ONE_DOMAIN_INFO"); + tree = proto_item_add_subtree(item, ett_DOMAIN_TRUST_INFO); + } /*hf_netlogon_dnsdomaininfo*/ - offset = dissect_part_DnsDomainInfo(tvb, offset, pinfo, tree, drep, 0, 0); + offset = dissect_part_DnsDomainInfo(tvb, offset, pinfo, tree, drep, 0, 0); - /* It is structed as a string but it's not ... it's 4 ulong */ - offset = dissect_ndr_ulongs_as_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_trust_extention); + /* It is structed as a string but it's not ... it's 4 ulong */ + offset = dissect_ndr_ulongs_as_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_trust_extention); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string2, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string2, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string3, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string3, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string4, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string4, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy1_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy1_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy2_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy2_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy3_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy3_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy4_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy4_long, NULL); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } static int netlogon_dissect_DOMAIN_TRUST_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_ONE_DOMAIN_INFO); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_ONE_DOMAIN_INFO); - return offset; + return offset; } static int netlogon_dissect_LSA_POLICY_INFO(tvbuff_t *tvb _U_, int offset, - packet_info *pinfo _U_, proto_tree *tree _U_, - guint8 *drep _U_ ) + packet_info *pinfo _U_, proto_tree *tree _U_, + guint8 *drep _U_ ) { - proto_item *item=NULL; - proto_tree *subtree=NULL; - guint32 len; - dcerpc_info *di; + proto_item *item=NULL; + proto_tree *subtree=NULL; + guint32 len; + dcerpc_info *di; - di=pinfo->private_data; - if(di->conformant_run){ - return offset; - } + di=pinfo->private_data; + if(di->conformant_run){ + return offset; + } - if(tree){ - item = proto_tree_add_text(tree, tvb, offset, 0, - "LSA Policy"); - subtree = proto_item_add_subtree(item, ett_LSA_POLICY_INFO); - } - offset = dissect_ndr_uint32(tvb, offset, pinfo, subtree, drep, - hf_netlogon_lsapolicy_len, &len); + if(tree){ + item = proto_tree_add_text(tree, tvb, offset, 0, + "LSA Policy"); + subtree = proto_item_add_subtree(item, ett_LSA_POLICY_INFO); + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, subtree, drep, + hf_netlogon_lsapolicy_len, &len); - offset = dissect_ndr_pointer(tvb, offset, pinfo, subtree, drep, - netlogon_dissect_BLOB_array, NDR_POINTER_UNIQUE, - "Pointer:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, subtree, drep, + netlogon_dissect_BLOB_array, NDR_POINTER_UNIQUE, + "Pointer:", -1); - return offset; + return offset; } @@ -5946,832 +5956,832 @@ netlogon_dissect_LSA_POLICY_INFO(tvbuff_t *tvb _U_, int offset, static int netlogon_dissect_WORKSTATION_INFO(tvbuff_t *tvb , int offset , - packet_info *pinfo , proto_tree *tree , - guint8 *drep ) + packet_info *pinfo , proto_tree *tree , + guint8 *drep ) { - /* This is not the good way to do it ... it stinks ... - * but after half of a day fighting against wireshark and ndr ... - * I decided to keep this hack ... - * At least data are correctly displayed without invented ints ... - */ - offset = netlogon_dissect_LSA_POLICY_INFO(tvb, offset, - pinfo, tree, drep); + /* This is not the good way to do it ... it stinks ... + * but after half of a day fighting against wireshark and ndr ... + * I decided to keep this hack ... + * At least data are correctly displayed without invented ints ... + */ + offset = netlogon_dissect_LSA_POLICY_INFO(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Workstation FQDN", - hf_netlogon_workstation_fqdn, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Workstation FQDN", + hf_netlogon_workstation_fqdn, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Workstation Site", - hf_netlogon_workstation_site_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Workstation Site", + hf_netlogon_workstation_site_name, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Dummy 1", hf_netlogon_dummy_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Dummy 1", hf_netlogon_dummy_string, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Dummy 2", hf_netlogon_dummy_string2, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Dummy 2", hf_netlogon_dummy_string2, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Dummy 3", hf_netlogon_dummy_string3, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Dummy 3", hf_netlogon_dummy_string3, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Dummy 4", hf_netlogon_dummy_string4, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Dummy 4", hf_netlogon_dummy_string4, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_os_version, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_os_version, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_workstation_os, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_workstation_os, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string3, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string3, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string4, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string4, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_workstation_flags, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_workstation_flags, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy2_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy2_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy3_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy3_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy4_long, NULL); - return offset; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy4_long, NULL); + return offset; } static int netlogon_dissect_WORKSTATION_INFORMATION(tvbuff_t *tvb , int offset , - packet_info *pinfo , proto_tree *tree , - guint8 *drep ) { + packet_info *pinfo , proto_tree *tree , + guint8 *drep ) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_WORKSTATION_INFO, NDR_POINTER_UNIQUE, - "WORKSTATION INFO", -1); - return offset; + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_WORKSTATION_INFO, NDR_POINTER_UNIQUE, + "WORKSTATION INFO", -1); + return offset; } static int netlogon_dissect_DOMAIN_INFO(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = netlogon_dissect_ONE_DOMAIN_INFO(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_ONE_DOMAIN_INFO(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_trusts, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_trusts, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DOMAIN_TRUST_INFO, NDR_POINTER_UNIQUE, - "DOMAIN_TRUST_ARRAY: Trusted domains", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DOMAIN_TRUST_INFO, NDR_POINTER_UNIQUE, + "DOMAIN_TRUST_ARRAY: Trusted domains", -1); - offset = netlogon_dissect_LSA_POLICY_INFO(tvb,offset,pinfo, tree,drep); + offset = netlogon_dissect_LSA_POLICY_INFO(tvb,offset,pinfo, tree,drep); -/* offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_num_trusts, NULL); +/* offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_num_trusts, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DOMAIN_TRUST_INFO, NDR_POINTER_UNIQUE, - "LSA Policy", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DOMAIN_TRUST_INFO, NDR_POINTER_UNIQUE, + "LSA Policy", -1); */ - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_ad_client_dns_name, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_ad_client_dns_name, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string2, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string2, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string3, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string3, 0); - offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy_string4, 0); + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy_string4, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_workstation_flags, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_workstation_flags, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_supportedenctypes, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_supportedenctypes, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy3_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy3_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_dummy4_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_dummy4_long, NULL); - return offset; + return offset; } static int netlogon_dissect_DOMAIN_INFORMATION(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - guint32 level; + guint32 level; - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, &level); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, &level); - ALIGN_TO_4_BYTES; - switch(level){ - case 1: - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DOMAIN_INFO, NDR_POINTER_UNIQUE, - "DOMAIN_INFO", -1); - break; - } + ALIGN_TO_4_BYTES; + switch(level){ + case 1: + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DOMAIN_INFO, NDR_POINTER_UNIQUE, + "DOMAIN_INFO", -1); + break; + } - return offset; + return offset; } static int netlogon_dissect_UNICODE_STRING_512(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; - int i; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; + int i; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "UNICODE_STRING_512:"); - tree = proto_item_add_subtree(item, ett_UNICODE_STRING_512); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "UNICODE_STRING_512:"); + tree = proto_item_add_subtree(item, ett_UNICODE_STRING_512); + } - for(i=0;i<512;i++){ - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_short, NULL); - } + for(i=0;i<512;i++){ + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_short, NULL); + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } static int netlogon_dissect_element_844_byte(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_char, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_char, NULL); - return offset; + return offset; } static int netlogon_dissect_element_844_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_element_844_byte); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_element_844_byte); - return offset; + return offset; } static int netlogon_dissect_TYPE_50(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "TYPE_50:"); - tree = proto_item_add_subtree(item, ett_TYPE_50); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "TYPE_50:"); + tree = proto_item_add_subtree(item, ett_TYPE_50); + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_element_844_array, NDR_POINTER_UNIQUE, - "unknown", hf_netlogon_unknown_string); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_element_844_array, NDR_POINTER_UNIQUE, + "unknown", hf_netlogon_unknown_string); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } static int netlogon_dissect_TYPE_50_ptr(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_TYPE_50, NDR_POINTER_UNIQUE, - "TYPE_50 pointer: unknown_TYPE_50", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_TYPE_50, NDR_POINTER_UNIQUE, + "TYPE_50 pointer: unknown_TYPE_50", -1); - return offset; + return offset; } static int netlogon_dissect_DS_DOMAIN_TRUSTS(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, guint8 *drep) { - guint32 tmp; - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; + guint32 tmp; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "DS_DOMAIN_TRUSTS"); - tree = proto_item_add_subtree(item, ett_DS_DOMAIN_TRUSTS); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "DS_DOMAIN_TRUSTS"); + tree = proto_item_add_subtree(item, ett_DS_DOMAIN_TRUSTS); + } - /* name */ - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "NetBIOS Name", - hf_netlogon_downlevel_domain_name, 0); + /* name */ + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "NetBIOS Name", + hf_netlogon_downlevel_domain_name, 0); - /* domain */ - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "DNS Domain Name", - hf_netlogon_dns_domain_name, 0); + /* domain */ + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "DNS Domain Name", + hf_netlogon_dns_domain_name, 0); - offset = netlogon_dissect_DOMAIN_TRUST_FLAGS(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_DOMAIN_TRUST_FLAGS(tvb, offset, pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_trust_parent_index, &tmp); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_trust_parent_index, &tmp); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_trust_type, &tmp); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_trust_type, &tmp); - offset = netlogon_dissect_DOMAIN_TRUST_ATTRIBS(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_DOMAIN_TRUST_ATTRIBS(tvb, offset, pinfo, tree, drep); - /* SID pointer */ - offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); + /* SID pointer */ + offset = dissect_ndr_nt_PSID(tvb, offset, pinfo, tree, drep); - /* GUID */ - offset = dissect_nt_GUID(tvb, offset, pinfo, tree, drep); + /* GUID */ + offset = dissect_nt_GUID(tvb, offset, pinfo, tree, drep); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } static int netlogon_dissect_DS_DOMAIN_TRUSTS_ARRAY(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DS_DOMAIN_TRUSTS); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DS_DOMAIN_TRUSTS); - return offset; + return offset; } static int netlogon_dissect_element_865_byte(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_char, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_char, NULL); - return offset; + return offset; } static int netlogon_dissect_element_865_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_element_865_byte); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_element_865_byte); - return offset; + return offset; } static int netlogon_dissect_element_866_byte(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_char, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_char, NULL); - return offset; + return offset; } static int netlogon_dissect_element_866_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_element_866_byte); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_element_866_byte); - return offset; + return offset; } static int netlogon_dissect_TYPE_52(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "TYPE_52:"); - tree = proto_item_add_subtree(item, ett_TYPE_52); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "TYPE_52:"); + tree = proto_item_add_subtree(item, ett_TYPE_52); + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_element_865_array, NDR_POINTER_UNIQUE, - "unknown", hf_netlogon_unknown_string); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_element_865_array, NDR_POINTER_UNIQUE, + "unknown", hf_netlogon_unknown_string); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_element_866_array, NDR_POINTER_UNIQUE, - "unknown", hf_netlogon_unknown_string); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_element_866_array, NDR_POINTER_UNIQUE, + "unknown", hf_netlogon_unknown_string); - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } static int netlogon_dissect_TYPE_52_ptr(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_TYPE_52, NDR_POINTER_UNIQUE, - "TYPE_52 pointer: unknown_TYPE_52", -1); - return offset; + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_TYPE_52, NDR_POINTER_UNIQUE, + "TYPE_52 pointer: unknown_TYPE_52", -1); + return offset; } static int netlogon_dissect_TYPE_44(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *parent_tree, - guint8 *drep) + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) { - proto_item *item=NULL; - proto_tree *tree=NULL; - int old_offset=offset; - guint32 level; + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; + guint32 level; - if(parent_tree){ - item = proto_tree_add_text(parent_tree, tvb, offset, 0, - "TYPE_44:"); - tree = proto_item_add_subtree(item, ett_TYPE_44); - } + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, 0, + "TYPE_44:"); + tree = proto_item_add_subtree(item, ett_TYPE_44); + } - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, &level); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, &level); - ALIGN_TO_4_BYTES; - switch(level){ - case 1: - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); - break; - } + ALIGN_TO_4_BYTES; + switch(level){ + case 1: + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); + break; + } - proto_item_set_len(item, offset-old_offset); - return offset; + proto_item_set_len(item, offset-old_offset); + return offset; } - static int +static int netlogon_dissect_WORKSTATION_BUFFER(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, - guint8 *drep) + packet_info *pinfo, proto_tree *tree, + guint8 *drep) { - guint32 level; + guint32 level; - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_level, &level); - if (level == 2) { - /* Specs are not very clear (as usual ...) it seems that the - * structure in both case is a NETLOGON_WORKSTATION_INFO - * but in this case only the LSA POLICY INFO will contain - * something - */ - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_WORKSTATION_INFORMATION, NDR_POINTER_UNIQUE, - "LSA POLICY INFO", -1); - } - else { - if (level == 1) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_WORKSTATION_INFORMATION, NDR_POINTER_UNIQUE, - "WORKSTATION INFORMATION", -1);} - } - return offset; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_level, &level); + if (level == 2) { + /* Specs are not very clear (as usual ...) it seems that the + * structure in both case is a NETLOGON_WORKSTATION_INFO + * but in this case only the LSA POLICY INFO will contain + * something + */ + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_WORKSTATION_INFORMATION, NDR_POINTER_UNIQUE, + "LSA POLICY INFO", -1); + } + else { + if (level == 1) { + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_WORKSTATION_INFORMATION, NDR_POINTER_UNIQUE, + "WORKSTATION INFORMATION", -1);} + } + return offset; } static int netlogon_dissect_netrenumeratetrusteddomains_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_netrenumeratetrusteddomains_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_UNICODE_MULTI, NDR_POINTER_REF, - "UNICODE_MULTI pointer: trust_dom_name_list", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_UNICODE_MULTI, NDR_POINTER_REF, + "UNICODE_MULTI pointer: trust_dom_name_list", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_dsrgetdcname_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Domain", hf_netlogon_logon_dom, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Domain", hf_netlogon_logon_dom, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - dissect_nt_GUID, NDR_POINTER_UNIQUE, - "GUID pointer: domain_guid", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + dissect_nt_GUID, NDR_POINTER_UNIQUE, + "GUID pointer: domain_guid", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - dissect_nt_GUID, NDR_POINTER_UNIQUE, - "GUID pointer: site_guid", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + dissect_nt_GUID, NDR_POINTER_UNIQUE, + "GUID pointer: site_guid", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_flags, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_flags, NULL); - return offset; + return offset; } static int netlogon_dissect_dsrgetdcname_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DOMAIN_CONTROLLER_INFO, NDR_POINTER_UNIQUE, - "DOMAIN_CONTROLLER_INFO:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DOMAIN_CONTROLLER_INFO, NDR_POINTER_UNIQUE, + "DOMAIN_CONTROLLER_INFO:", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogondummyroutine1_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "unknown string", - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "unknown string", + hf_netlogon_unknown_string, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogondummyroutine1_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_TYPE_44, NDR_POINTER_UNIQUE, - "TYPE_44 pointer: unknown_TYPE_44", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_TYPE_44, NDR_POINTER_UNIQUE, + "TYPE_44 pointer: unknown_TYPE_44", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogonsetservicebits_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogonsetservicebits_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogongettrustrid_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "unknown string", - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "unknown string", + hf_netlogon_unknown_string, 0); - return offset; + return offset; } static int netlogon_dissect_netrlogongettrustrid_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE, - "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE, + "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogoncomputeserverdigest_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, - "BYTE pointer: unknown_BYTE", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, + "BYTE pointer: unknown_BYTE", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - return offset; + return offset; } static int netlogon_dissect_BYTE_16_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - int i; + int i; - for(i=0;i<16;i++){ - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_char, NULL); - } + for(i=0;i<16;i++){ + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_char, NULL); + } - return offset; + return offset; } static int netlogon_dissect_netrlogoncomputeserverdigest_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_16_array, NDR_POINTER_UNIQUE, - "BYTE pointer: unknown_BYTE", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_16_array, NDR_POINTER_UNIQUE, + "BYTE pointer: unknown_BYTE", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogoncomputeclientdigest_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "unknown string", - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "unknown string", + hf_netlogon_unknown_string, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, - "BYTE pointer: unknown_BYTE", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, + "BYTE pointer: unknown_BYTE", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogoncomputeclientdigest_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_16_array, NDR_POINTER_UNIQUE, - "BYTE pointer: unknown_BYTE", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_16_array, NDR_POINTER_UNIQUE, + "BYTE pointer: unknown_BYTE", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_neg_options(tvbuff_t *tvb,proto_tree *tree,guint32 flags,int offset) { - if (tree) { - proto_tree *negotiate_flags_tree = NULL; - proto_item *tf = NULL; - tf = proto_tree_add_uint (tree, - hf_netlogon_neg_flags, - tvb, offset, 4,flags); - negotiate_flags_tree = proto_item_add_subtree (tf,ett_authenticate_flags); + if (tree) { + proto_tree *negotiate_flags_tree = NULL; + proto_item *tf = NULL; + tf = proto_tree_add_uint (tree, + hf_netlogon_neg_flags, + tvb, offset, 4,flags); + negotiate_flags_tree = proto_item_add_subtree (tf,ett_authenticate_flags); - /*proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_80000000, - tvb, offset, 4, flags);*/ - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_40000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_20000000, - tvb, offset, 4, flags); - /* - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_10000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_8000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_4000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_2000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_1000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_800000, - tvb, offset, 4, flags);*/ - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_400000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_200000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_100000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_80000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_40000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_20000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_10000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_8000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_4000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_2000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_1000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_800, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_400, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_200, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_100, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_80, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_40, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_20, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_10, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_8, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_4, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_2, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_1, - tvb, offset, 4, flags); - } - return 0; + /*proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_80000000, + tvb, offset, 4, flags);*/ + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_40000000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_20000000, + tvb, offset, 4, flags); + /* + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_10000000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_8000000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_4000000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_2000000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_1000000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_800000, + tvb, offset, 4, flags);*/ + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_400000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_200000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_100000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_80000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_40000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_20000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_10000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_8000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_4000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_2000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_1000, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_800, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_400, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_200, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_100, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_80, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_40, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_20, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_10, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_8, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_4, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_2, + tvb, offset, 4, flags); + proto_tree_add_boolean (negotiate_flags_tree, + hf_netlogon_neg_flags_1, + tvb, offset, 4, flags); + } + return 0; } static int netlogon_dissect_netrserverauthenticate3_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - guint32 flags; - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Acct Name", hf_netlogon_acct_name, 0); + guint32 flags; + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Acct Name", hf_netlogon_acct_name, 0); - offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Computer Name", hf_netlogon_computer_name, 0); - offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, tree, drep, - hf_client_credential, NULL); + offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, tree, drep, + hf_client_credential, NULL); #if 0 - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_CREDENTIAL, NDR_POINTER_REF, - "Client Challenge", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CREDENTIAL, NDR_POINTER_REF, + "Client Challenge", -1); #endif #if 0 - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_neg_flags, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_neg_flags, NULL); #endif - ALIGN_TO_4_BYTES; + ALIGN_TO_4_BYTES; - flags = tvb_get_letohl (tvb, offset); - netlogon_dissect_neg_options(tvb,tree,flags,offset); - seen.isseen = FALSE; - seen.num = 0; - offset +=4; - return offset; + flags = tvb_get_letohl (tvb, offset); + netlogon_dissect_neg_options(tvb,tree,flags,offset); + seen.isseen = FALSE; + seen.num = 0; + offset +=4; + return offset; } /* @@ -6787,809 +6797,809 @@ netlogon_dissect_netrserverauthenticate3_rqst(tvbuff_t *tvb, int offset, */ static int netlogon_dissect_netrserverauthenticate2_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - return netlogon_dissect_netrserverauthenticate3_rqst(tvb,offset,pinfo,tree,drep); + return netlogon_dissect_netrserverauthenticate3_rqst(tvb,offset,pinfo,tree,drep); } #ifdef HAVE_KERBEROS static void str_to_unicode(const char *nt_password, char *nt_password_unicode) { - size_t password_len = 0; - size_t i; + size_t password_len = 0; + size_t i; - password_len = strlen(nt_password); - if(nt_password_unicode != NULL) - { - for(i=0;i<(password_len);i++) - { - nt_password_unicode[i*2]=nt_password[i]; - nt_password_unicode[i*2+1]=0; - } - nt_password_unicode[2*password_len]='\0'; - } + password_len = strlen(nt_password); + if(nt_password_unicode != NULL) + { + for(i=0;i<(password_len);i++) + { + nt_password_unicode[i*2]=nt_password[i]; + nt_password_unicode[i*2+1]=0; + } + nt_password_unicode[2*password_len]='\0'; + } } #endif static guint32 get_keytab_as_list(md4_pass **p_pass_list,const char* ntlm_pass _U_) { #ifdef HAVE_KERBEROS - enc_key_t *ek; - md4_pass* pass_list; - md4_pass ntlm_pass_hash; - int i = 0; - guint32 nb_pass = 0; - char ntlm_pass_unicode[258]; - int add_ntlm = 0; - int password_len; + enc_key_t *ek; + md4_pass* pass_list; + md4_pass ntlm_pass_hash; + int i = 0; + guint32 nb_pass = 0; + char ntlm_pass_unicode[258]; + int add_ntlm = 0; + int password_len; - if(!krb_decrypt){ - *p_pass_list=NULL; - return 0; - } - read_keytab_file_from_preferences(); - memset(ntlm_pass_hash.md4,0,sizeof(md4_pass)); + if(!krb_decrypt){ + *p_pass_list=NULL; + return 0; + } + read_keytab_file_from_preferences(); + memset(ntlm_pass_hash.md4,0,sizeof(md4_pass)); - for(ek=enc_key_list;ek;ek=ek->next){ - if( ek->keylength == 16 ) { - nb_pass++; - } - } + for(ek=enc_key_list;ek;ek=ek->next){ + if( ek->keylength == 16 ) { + nb_pass++; + } + } - if (ntlm_pass[0] != '\0' && ( strlen(ntlm_pass) < 129 )) { - nb_pass++; - debugprintf("Password: %s\n",ntlm_pass); - password_len = strlen(ntlm_pass); - str_to_unicode(ntlm_pass,ntlm_pass_unicode); - crypt_md4(ntlm_pass_hash.md4,ntlm_pass_unicode,password_len*2); - printnbyte(ntlm_pass_hash.md4,16,"Hash of the NT pass: ","\n"); - add_ntlm = 0; - } + if (ntlm_pass[0] != '\0' && ( strlen(ntlm_pass) < 129 )) { + nb_pass++; + debugprintf("Password: %s\n",ntlm_pass); + password_len = strlen(ntlm_pass); + str_to_unicode(ntlm_pass,ntlm_pass_unicode); + crypt_md4(ntlm_pass_hash.md4,ntlm_pass_unicode,password_len*2); + printnbyte(ntlm_pass_hash.md4,16,"Hash of the NT pass: ","\n"); + add_ntlm = 0; + } - *p_pass_list = (md4_pass *)ep_alloc(nb_pass*sizeof(md4_pass)); - pass_list=*p_pass_list; - if(add_ntlm) { - memcpy(pass_list[0].md4,&(ntlm_pass_hash.md4),sizeof(md4_pass)); - i++; - } + *p_pass_list = (md4_pass *)ep_alloc(nb_pass*sizeof(md4_pass)); + pass_list=*p_pass_list; + if(add_ntlm) { + memcpy(pass_list[0].md4,&(ntlm_pass_hash.md4),sizeof(md4_pass)); + i++; + } - for(ek=enc_key_list;ek;ek=ek->next){ - if( ek->keylength == 16 ) { - memcpy(pass_list[i].md4,ek->keyvalue,16); - i++; - } - } - return nb_pass; + for(ek=enc_key_list;ek;ek=ek->next){ + if( ek->keylength == 16 ) { + memcpy(pass_list[i].md4,ek->keyvalue,16); + i++; + } + } + return nb_pass; #else - *p_pass_list = NULL; - return 0; + *p_pass_list = NULL; + return 0; #endif } static int netlogon_dissect_netrserverauthenticate23_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep, int version3) + packet_info *pinfo, proto_tree *tree, guint8 *drep, int version3) { - guint32 flags; - netlogon_auth_vars *vars; - netlogon_auth_key key; - guint64 server_cred; + guint32 flags; + netlogon_auth_vars *vars; + netlogon_auth_key key; + guint64 server_cred; - offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, tree, drep, - hf_server_credential, &server_cred); + offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, tree, drep, + hf_server_credential, &server_cred); - flags = tvb_get_letohl (tvb, offset); - netlogon_dissect_neg_options(tvb,tree,flags,offset); - offset +=4; + flags = tvb_get_letohl (tvb, offset); + netlogon_dissect_neg_options(tvb,tree,flags,offset); + offset +=4; - ALIGN_TO_4_BYTES; - if(version3) { - offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, - hf_server_rid, NULL); - } - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); - - generate_hash_key(pinfo,1,&key,NULL); - - vars = (netlogon_auth_vars *)g_hash_table_lookup(netlogon_auths, &key); - if(vars != NULL) { - while(vars != NULL && vars->next_start != -1 && vars->next_start < (int) pinfo->fd->num ) { - debugprintf("looping auth reply...\n"); - vars = vars->next; + ALIGN_TO_4_BYTES; + if(version3) { + offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep, + hf_server_rid, NULL); } - if(vars == NULL ) { - debugprintf("Something strange happened while searching for authenticate_reply\n"); - } - else { - md4_pass *pass_list=NULL; - guint32 list_size = 0; - guint8 session_key[16]; - md4_pass password; - int found = 0; - unsigned int i = 0; + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - vars->flags = flags; - vars->can_decrypt = FALSE; - list_size = get_keytab_as_list(&pass_list,gbl_nt_password); - debugprintf("Found %d passwords \n",list_size); - if( flags & NETLOGON_FLAG_STRONGKEY ) { - guint8 zeros[4]; - guint8 md5[16]; - md5_state_t md5state; - guint8 buf[8]; - guint64 calculated_cred; + generate_hash_key(pinfo,1,&key,NULL); - - memset(zeros,0,4); - md5_init(&md5state); - md5_append(&md5state,zeros,4); - md5_append(&md5state,(unsigned char*)&vars->client_challenge,8); - md5_append(&md5state,(unsigned char*)&vars->server_challenge,8); - md5_finish(&md5state,md5); - /*printnbyte(md5,8,"MD5:","\n");*/ - printnbyte((guint8*)&server_cred,8,"Server creds:","\n"); - for(i=0;iserver_challenge,session_key,1); - crypt_des_ecb((unsigned char*)&calculated_cred,buf,session_key+7,1); - /*printnbyte((guint8*)&calculated_cred,8,"Calculated creds:","\n");*/ - if(calculated_cred==server_cred) { - found = 1; - break; - } + vars = (netlogon_auth_vars *)g_hash_table_lookup(netlogon_auths, &key); + if(vars != NULL) { + while(vars != NULL && vars->next_start != -1 && vars->next_start < (int) pinfo->fd->num ) { + debugprintf("looping auth reply...\n"); + vars = vars->next; + } + if(vars == NULL ) { + debugprintf("Something strange happened while searching for authenticate_reply\n"); + } + else { + md4_pass *pass_list=NULL; + guint32 list_size = 0; + guint8 session_key[16]; + md4_pass password; + int found = 0; + unsigned int i = 0; + + vars->flags = flags; + vars->can_decrypt = FALSE; + list_size = get_keytab_as_list(&pass_list,gbl_nt_password); + debugprintf("Found %d passwords \n",list_size); + if( flags & NETLOGON_FLAG_STRONGKEY ) { + guint8 zeros[4]; + guint8 md5[16]; + md5_state_t md5state; + guint8 buf[8]; + guint64 calculated_cred; + + + memset(zeros,0,4); + md5_init(&md5state); + md5_append(&md5state,zeros,4); + md5_append(&md5state,(unsigned char*)&vars->client_challenge,8); + md5_append(&md5state,(unsigned char*)&vars->server_challenge,8); + md5_finish(&md5state,md5); + /*printnbyte(md5,8,"MD5:","\n");*/ + printnbyte((guint8*)&server_cred,8,"Server creds:","\n"); + for(i=0;iserver_challenge,session_key,1); + crypt_des_ecb((unsigned char*)&calculated_cred,buf,session_key+7,1); + /*printnbyte((guint8*)&calculated_cred,8,"Calculated creds:","\n");*/ + if(calculated_cred==server_cred) { + found = 1; + break; + } + } + } + else if( flags&NETLOGON_FLAG_USEAES) + { + /*Not implemented*/ + memset(session_key,0,16); + } + else + { + /*Not implemented*/ + memset(session_key,0,16); + } + if(found) { + memcpy(&vars->session_key,session_key,16); + debugprintf("Found the good session key !\n"); + } + else { + memset(&vars->session_key,0,16); + } } - } - else if( flags&NETLOGON_FLAG_USEAES) - { - /*Not implemented*/ - memset(session_key,0,16); - } - else - { - /*Not implemented*/ - memset(session_key,0,16); - } - if(found) { - memcpy(&vars->session_key,session_key,16); - debugprintf("Found the good session key !\n"); - } - else { - memset(&vars->session_key,0,16); - } } - } - return offset; + return offset; } static int netlogon_dissect_netrserverauthenticate3_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - return netlogon_dissect_netrserverauthenticate23_reply(tvb,offset,pinfo,tree,drep,1); + return netlogon_dissect_netrserverauthenticate23_reply(tvb,offset,pinfo,tree,drep,1); } static int netlogon_dissect_netrserverauthenticate2_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - return netlogon_dissect_netrserverauthenticate23_reply(tvb,offset,pinfo,tree,drep,0); + return netlogon_dissect_netrserverauthenticate23_reply(tvb,offset,pinfo,tree,drep,0); } static int netlogon_dissect_dsrgetdcnameex_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Domain", hf_netlogon_logon_dom, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Domain", hf_netlogon_logon_dom, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - dissect_nt_GUID, NDR_POINTER_UNIQUE, - "GUID pointer: domain_guid", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + dissect_nt_GUID, NDR_POINTER_UNIQUE, + "GUID pointer: domain_guid", -1); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Site Name", hf_netlogon_site_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Site Name", hf_netlogon_site_name, 0); - offset = netlogon_dissect_GET_DCNAME_REQUEST_FLAGS(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_GET_DCNAME_REQUEST_FLAGS(tvb, offset, pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_dsrgetdcnameex_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DOMAIN_CONTROLLER_INFO, NDR_POINTER_UNIQUE, - "DOMAIN_CONTROLLER_INFO:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DOMAIN_CONTROLLER_INFO, NDR_POINTER_UNIQUE, + "DOMAIN_CONTROLLER_INFO:", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_dsrgetsitename_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_dsrgetsitename_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - /* XXX hmmm this does not really look like a UNIQUE pointer but - will do for now. I think it is really a 32bit integer followed by - a REF pointer to a unicode string */ - offset = dissect_ndr_pointer_cb(tvb, offset, pinfo, tree, drep, - dissect_ndr_wchar_cvstring, NDR_POINTER_UNIQUE, "Site Name", - hf_netlogon_site_name, cb_wstr_postprocess, - GINT_TO_POINTER(CB_STR_COL_INFO | 1)); + /* XXX hmmm this does not really look like a UNIQUE pointer but + will do for now. I think it is really a 32bit integer followed by + a REF pointer to a unicode string */ + offset = dissect_ndr_pointer_cb(tvb, offset, pinfo, tree, drep, + dissect_ndr_wchar_cvstring, NDR_POINTER_UNIQUE, "Site Name", + hf_netlogon_site_name, cb_wstr_postprocess, + GINT_TO_POINTER(CB_STR_COL_INFO | 1)); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogongetdomaininfo_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - /* Unlike the other NETLOGON RPCs, this is not a unique pointer. */ - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "Server Handle", hf_netlogon_computer_name, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Computer Name", - hf_netlogon_computer_name, 0); + /* Unlike the other NETLOGON RPCs, this is not a unique pointer. */ + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "Server Handle", hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Computer Name", + hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: client", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: client", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_WORKSTATION_BUFFER, NDR_POINTER_REF, - "WORKSTATION_BUFFER", -1); - return offset; + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_WORKSTATION_BUFFER, NDR_POINTER_REF, + "WORKSTATION_BUFFER", -1); + return offset; } static int netlogon_dissect_netrlogongetdomaininfo_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DOMAIN_INFORMATION, NDR_POINTER_REF, - "DOMAIN_INFORMATION", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DOMAIN_INFORMATION, NDR_POINTER_REF, + "DOMAIN_INFORMATION", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrserverpasswordset2_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "unknown string", - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "unknown string", + hf_netlogon_unknown_string, 0); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_short, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_short, NULL); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "unknown string", - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "unknown string", + hf_netlogon_unknown_string, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = netlogon_dissect_UNICODE_STRING_512(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_UNICODE_STRING_512(tvb, offset, + pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_netrserverpasswordset2_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrserverpasswordget_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Acct Name", hf_netlogon_acct_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Acct Name", hf_netlogon_acct_name, 0); - offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_NETLOGON_SECURE_CHANNEL_TYPE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Computer Name", - hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Computer Name", + hf_netlogon_computer_name, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - return offset; + return offset; } static int netlogon_dissect_netrserverpasswordget_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_LM_OWF_PASSWORD, NDR_POINTER_REF, - "LM_OWF_PASSWORD pointer: server_pwd", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_LM_OWF_PASSWORD, NDR_POINTER_REF, + "LM_OWF_PASSWORD pointer: server_pwd", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogonsendtosam_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "unknown string", - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "unknown string", + hf_netlogon_unknown_string, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, - "AUTHENTICATOR: credential", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_REF, + "AUTHENTICATOR: credential", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, - "BYTE pointer: unknown_BYTE", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, + "BYTE pointer: unknown_BYTE", -1); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogonsendtosam_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, - "AUTHENTICATOR: return_authenticator", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_AUTHENTICATOR, NDR_POINTER_UNIQUE, + "AUTHENTICATOR: return_authenticator", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_dsraddresstositenamesw_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, - "BYTE pointer: unknown_BYTE", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, + "BYTE pointer: unknown_BYTE", -1); - return offset; + return offset; } static int netlogon_dissect_dsraddresstositenamesw_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_TYPE_50_ptr, NDR_POINTER_UNIQUE, - "TYPE_50** pointer: unknown_TYPE_50", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_TYPE_50_ptr, NDR_POINTER_UNIQUE, + "TYPE_50** pointer: unknown_TYPE_50", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_dsrgetdcnameex2_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Client Account", - hf_netlogon_acct_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Client Account", + hf_netlogon_acct_name, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Client Account", - hf_netlogon_logon_dom, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Client Account", + hf_netlogon_logon_dom, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - dissect_nt_GUID, NDR_POINTER_UNIQUE, - "Domain GUID:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + dissect_nt_GUID, NDR_POINTER_UNIQUE, + "Domain GUID:", -1); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Client Site", - hf_netlogon_site_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Client Site", + hf_netlogon_site_name, 0); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - return offset; + return offset; } static int netlogon_dissect_dsrgetdcnameex2_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DOMAIN_CONTROLLER_INFO, NDR_POINTER_UNIQUE, - "DOMAIN_CONTROLLER_INFO:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DOMAIN_CONTROLLER_INFO, NDR_POINTER_UNIQUE, + "DOMAIN_CONTROLLER_INFO:", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogongettimeserviceparentdomain_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_netrlogongettimeserviceparentdomain_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "unknown string", - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "unknown string", + hf_netlogon_unknown_string, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE, - "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE, + "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrenumeratetrusteddomainsex_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_netrenumeratetrusteddomainsex_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_entries, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_entries, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DS_DOMAIN_TRUSTS_ARRAY, NDR_POINTER_UNIQUE, - "DS_DOMAIN_TRUSTS_ARRAY:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DS_DOMAIN_TRUSTS_ARRAY, NDR_POINTER_UNIQUE, + "DS_DOMAIN_TRUSTS_ARRAY:", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_dsraddresstositenamesexw_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, - "BYTE pointer: unknown_BYTE", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_BYTE_array, NDR_POINTER_UNIQUE, + "BYTE pointer: unknown_BYTE", -1); - return offset; + return offset; } static int netlogon_dissect_dsraddresstositenamesexw_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_TYPE_52_ptr, NDR_POINTER_UNIQUE, - "TYPE_52 pointer: unknown_TYPE_52", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_TYPE_52_ptr, NDR_POINTER_UNIQUE, + "TYPE_52 pointer: unknown_TYPE_52", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_site_name_item(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_counted_string_cb( - tvb, offset, pinfo, tree, drep, hf_netlogon_site_name, - cb_wstr_postprocess, - GINT_TO_POINTER(CB_STR_COL_INFO | 1)); + offset = dissect_ndr_counted_string_cb( + tvb, offset, pinfo, tree, drep, hf_netlogon_site_name, + cb_wstr_postprocess, + GINT_TO_POINTER(CB_STR_COL_INFO | 1)); - return offset; + return offset; } static int netlogon_dissect_site_name_array(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, - netlogon_dissect_site_name_item); + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_site_name_item); - return offset; + return offset; } static int netlogon_dissect_site_names(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_count, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_count, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_site_name_array, NDR_POINTER_UNIQUE, - "Site name array", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_site_name_array, NDR_POINTER_UNIQUE, + "Site name array", -1); - return offset; + return offset; } static int netlogon_dissect_dsrgetdcsitecoveragew_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_dsrgetdcsitecoveragew_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_site_names, NDR_POINTER_UNIQUE, - "Site names", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_site_names, NDR_POINTER_UNIQUE, + "Site names", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_netrlogonsamlogonex_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "LogonServer", - hf_netlogon_computer_name, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Computer Name", - hf_netlogon_computer_name, 0); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_level16, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_LEVEL, NDR_POINTER_REF, - "LEVEL: LogonLevel", -1); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "LogonServer", + hf_netlogon_computer_name, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Computer Name", + hf_netlogon_computer_name, 0); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_level16, NULL); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_LEVEL, NDR_POINTER_REF, + "LEVEL: LogonLevel", -1); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_validation_level, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_validation_level, NULL); - offset = netlogon_dissect_EXTRA_FLAGS(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_EXTRA_FLAGS(tvb, offset, pinfo, tree, drep); #if 0 - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "unknown string", - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "unknown string", + hf_netlogon_unknown_string, 0); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "unknown string", - hf_netlogon_unknown_string, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "unknown string", + hf_netlogon_unknown_string, 0); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_short, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_short, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_LEVEL, NDR_POINTER_UNIQUE, - "LEVEL pointer: unknown_NETLOGON_LEVEL", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_LEVEL, NDR_POINTER_UNIQUE, + "LEVEL pointer: unknown_NETLOGON_LEVEL", -1); - offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, - hf_netlogon_unknown_short, NULL); + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_short, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE, - "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE, + "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long); #endif - return offset; + return offset; } static int netlogon_dissect_netrlogonsamlogonex_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION, NDR_POINTER_REF, - "VALIDATION:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION, NDR_POINTER_REF, + "VALIDATION:", -1); - offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, - hf_netlogon_authoritative, NULL); + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, drep, + hf_netlogon_authoritative, NULL); - offset = netlogon_dissect_EXTRA_FLAGS(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_EXTRA_FLAGS(tvb, offset, pinfo, tree, drep); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); #if 0 - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_VALIDATION, NDR_POINTER_UNIQUE, - "VALIDATION: unknown_NETLOGON_VALIDATION", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_VALIDATION, NDR_POINTER_UNIQUE, + "VALIDATION: unknown_NETLOGON_VALIDATION", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_pointer_char, NDR_POINTER_UNIQUE, - "BOOLEAN pointer: unknown_BOOLEAN", hf_netlogon_unknown_char); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_pointer_char, NDR_POINTER_UNIQUE, + "BOOLEAN pointer: unknown_BOOLEAN", hf_netlogon_unknown_char); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE, - "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_pointer_long, NDR_POINTER_UNIQUE, + "ULONG pointer: unknown_ULONG", hf_netlogon_unknown_long); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); #endif - return offset; + return offset; } static int netlogon_dissect_dsrenumeratedomaintrusts_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = netlogon_dissect_DOMAIN_TRUST_FLAGS(tvb, offset, pinfo, tree, drep); + offset = netlogon_dissect_DOMAIN_TRUST_FLAGS(tvb, offset, pinfo, tree, drep); - return offset; + return offset; } static int netlogon_dissect_dsrenumeratedomaintrusts_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, - hf_netlogon_entries, NULL); + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_entries, NULL); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - netlogon_dissect_DS_DOMAIN_TRUSTS_ARRAY, NDR_POINTER_UNIQUE, - "DS_DOMAIN_TRUSTS_ARRAY:", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_DS_DOMAIN_TRUSTS_ARRAY, NDR_POINTER_UNIQUE, + "DS_DOMAIN_TRUSTS_ARRAY:", -1); - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_dos_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_dos_rc, NULL); - return offset; + return offset; } static int netlogon_dissect_dsrderegisterdnshostrecords_rqst(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, - pinfo, tree, drep); + offset = netlogon_dissect_LOGONSRV_HANDLE(tvb, offset, + pinfo, tree, drep); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_UNIQUE, "Domain", hf_netlogon_logon_dom, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_UNIQUE, "Domain", hf_netlogon_logon_dom, 0); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - dissect_nt_GUID, NDR_POINTER_UNIQUE, - "GUID pointer: domain_guid", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + dissect_nt_GUID, NDR_POINTER_UNIQUE, + "GUID pointer: domain_guid", -1); - offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - dissect_nt_GUID, NDR_POINTER_UNIQUE, - "GUID pointer: dsa_guid", -1); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + dissect_nt_GUID, NDR_POINTER_UNIQUE, + "GUID pointer: dsa_guid", -1); - offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, - NDR_POINTER_REF, "dns_host", hf_netlogon_dns_host, 0); + offset = dissect_ndr_str_pointer_item(tvb, offset, pinfo, tree, drep, + NDR_POINTER_REF, "dns_host", hf_netlogon_dns_host, 0); - return offset; + return offset; } static int netlogon_dissect_dsrderegisterdnshostrecords_reply(tvbuff_t *tvb, int offset, - packet_info *pinfo, proto_tree *tree, guint8 *drep) + packet_info *pinfo, proto_tree *tree, guint8 *drep) { - offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, - hf_netlogon_rc, NULL); + offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, + hf_netlogon_rc, NULL); - return offset; + return offset; } /* Dissect secure channel stuff */ @@ -7612,243 +7622,243 @@ static gint ett_secchan_nl_auth_message = -1; static gint ett_secchan_nl_auth_message_flags = -1; static const value_string nl_auth_types[] = { - { 0x00000000, "Request"}, - { 0x00000001, "Response"}, - { 0, NULL } + { 0x00000000, "Request"}, + { 0x00000001, "Response"}, + { 0, NULL } }; /* MS-NRPC : 2.2.1.3.1 NL_AUTH_MESSAGE */ static int dissect_secchan_nl_auth_message(tvbuff_t *tvb, int offset, - packet_info *pinfo, - proto_tree *tree, guint8 *drep) + packet_info *pinfo, + proto_tree *tree, guint8 *drep) { - proto_item *item = NULL; - proto_tree *subtree = NULL; - guint32 messagetype, messageflags; - static const int *flag_fields[] = { - &hf_netlogon_secchan_nl_message_flags_nb_domain, - &hf_netlogon_secchan_nl_message_flags_nb_host, - &hf_netlogon_secchan_nl_message_flags_dns_domain, - &hf_netlogon_secchan_nl_message_flags_dns_host, - &hf_netlogon_secchan_nl_message_flags_nb_host_utf8, - NULL - }; - int len; + proto_item *item = NULL; + proto_tree *subtree = NULL; + guint32 messagetype, messageflags; + static const int *flag_fields[] = { + &hf_netlogon_secchan_nl_message_flags_nb_domain, + &hf_netlogon_secchan_nl_message_flags_nb_host, + &hf_netlogon_secchan_nl_message_flags_dns_domain, + &hf_netlogon_secchan_nl_message_flags_dns_host, + &hf_netlogon_secchan_nl_message_flags_nb_host_utf8, + NULL + }; + int len; - if (tree) { - item = proto_tree_add_text( - tree, tvb, offset, -1, - "Secure Channel NL_AUTH_MESSAGE"); - subtree = proto_item_add_subtree( - item, ett_secchan_nl_auth_message); - } + if (tree) { + item = proto_tree_add_text( + tree, tvb, offset, -1, + "Secure Channel NL_AUTH_MESSAGE"); + subtree = proto_item_add_subtree( + item, ett_secchan_nl_auth_message); + } - /* We can't use the NDR routines as the DCERPC call data hasn't - been initialised since we haven't made a DCERPC call yet, just - a bind request. */ + /* We can't use the NDR routines as the DCERPC call data hasn't + been initialised since we haven't made a DCERPC call yet, just + a bind request. */ - /* Type */ - offset = dissect_dcerpc_uint32( - tvb, offset, pinfo, subtree, drep, - hf_netlogon_secchan_nl_message_type, &messagetype); + /* Type */ + offset = dissect_dcerpc_uint32( + tvb, offset, pinfo, subtree, drep, + hf_netlogon_secchan_nl_message_type, &messagetype); - /* Flags */ - proto_tree_add_bitmask(subtree, tvb, offset, hf_netlogon_secchan_nl_message_flags, ett_secchan_nl_auth_message_flags, flag_fields, (drep[0] & 0x10)); - messageflags = ((drep[0] & 0x10) - ? tvb_get_letohl (tvb, offset) - : tvb_get_ntohl (tvb, offset)); - offset += 4; + /* Flags */ + proto_tree_add_bitmask(subtree, tvb, offset, hf_netlogon_secchan_nl_message_flags, ett_secchan_nl_auth_message_flags, flag_fields, (drep[0] & 0x10)); + messageflags = ((drep[0] & 0x10) + ? tvb_get_letohl (tvb, offset) + : tvb_get_ntohl (tvb, offset)); + offset += 4; - /* Buffer */ - /* netbios domain name */ - if (messageflags&0x00000001) { - len = tvb_strsize(tvb, offset); - proto_tree_add_item(subtree, hf_netlogon_secchan_nl_nb_domain, tvb, offset, len, FALSE); - offset += len; - } + /* Buffer */ + /* netbios domain name */ + if (messageflags&0x00000001) { + len = tvb_strsize(tvb, offset); + proto_tree_add_item(subtree, hf_netlogon_secchan_nl_nb_domain, tvb, offset, len, FALSE); + offset += len; + } - /* netbios host name */ - if (messageflags&0x00000002) { - len = tvb_strsize(tvb, offset); - proto_tree_add_item(subtree, hf_netlogon_secchan_nl_nb_host, tvb, offset, len, FALSE); - offset += len; - } + /* netbios host name */ + if (messageflags&0x00000002) { + len = tvb_strsize(tvb, offset); + proto_tree_add_item(subtree, hf_netlogon_secchan_nl_nb_host, tvb, offset, len, FALSE); + offset += len; + } - /* DNS domain name */ - if (messageflags&0x00000004) { - int old_offset=offset; - char str[256]; + /* DNS domain name */ + if (messageflags&0x00000004) { + int old_offset=offset; + char str[256]; - offset=dissect_mscldap_string(tvb, offset, str, 255, FALSE); - proto_tree_add_string(subtree, hf_netlogon_secchan_nl_dns_domain, tvb, old_offset, offset-old_offset, str); - } + offset=dissect_mscldap_string(tvb, offset, str, 255, FALSE); + proto_tree_add_string(subtree, hf_netlogon_secchan_nl_dns_domain, tvb, old_offset, offset-old_offset, str); + } - /* DNS host name */ - if (messageflags&0x00000008) { - int old_offset=offset; - char str[256]; + /* DNS host name */ + if (messageflags&0x00000008) { + int old_offset=offset; + char str[256]; - offset=dissect_mscldap_string(tvb, offset, str, 255, FALSE); - proto_tree_add_string(subtree, hf_netlogon_secchan_nl_dns_host, tvb, old_offset, offset-old_offset, str); - } + offset=dissect_mscldap_string(tvb, offset, str, 255, FALSE); + proto_tree_add_string(subtree, hf_netlogon_secchan_nl_dns_host, tvb, old_offset, offset-old_offset, str); + } - /* NetBios host name (UTF8) */ - if (messageflags&0x00000010) { - int old_offset=offset; - char str[256]; + /* NetBios host name (UTF8) */ + if (messageflags&0x00000010) { + int old_offset=offset; + char str[256]; - offset=dissect_mscldap_string(tvb, offset, str, 255, FALSE); - proto_tree_add_string(subtree, hf_netlogon_secchan_nl_nb_host_utf8, tvb, old_offset, offset-old_offset, str); - } + offset=dissect_mscldap_string(tvb, offset, str, 255, FALSE); + proto_tree_add_string(subtree, hf_netlogon_secchan_nl_nb_host_utf8, tvb, old_offset, offset-old_offset, str); + } - return offset; + return offset; } /* Subdissectors */ static dcerpc_sub_dissector dcerpc_netlogon_dissectors[] = { - { NETLOGON_NETRLOGONUASLOGON, "NetrLogonUasLogon", - netlogon_dissect_netrlogonuaslogon_rqst, - netlogon_dissect_netrlogonuaslogon_reply }, - { NETLOGON_NETRLOGONUASLOGOFF, "NetrLogonUasLogoff", - netlogon_dissect_netrlogonuaslogoff_rqst, - netlogon_dissect_netrlogonuaslogoff_reply }, - { NETLOGON_NETRLOGONSAMLOGON, "NetrLogonSamLogon", - netlogon_dissect_netrlogonsamlogon_rqst, - netlogon_dissect_netrlogonsamlogon_reply }, - { NETLOGON_NETRLOGONSAMLOGOFF, "NetrLogonSamLogoff", - netlogon_dissect_netrlogonsamlogoff_rqst, - netlogon_dissect_netrlogonsamlogoff_reply }, - { NETLOGON_NETRSERVERREQCHALLENGE, "NetrServerReqChallenge", - netlogon_dissect_netrserverreqchallenge_rqst, - netlogon_dissect_netrserverreqchallenge_reply }, - { NETLOGON_NETRSERVERAUTHENTICATE, "NetrServerAuthenticate", - netlogon_dissect_netrserverauthenticate_rqst, - netlogon_dissect_netrserverauthenticate_reply }, - { NETLOGON_NETRSERVERPASSWORDSET, "NetrServerPasswordSet", - netlogon_dissect_netrserverpasswordset_rqst, - netlogon_dissect_netrserverpasswordset_reply }, - { NETLOGON_NETRDATABASEDELTAS, "NetrDatabaseDeltas", - netlogon_dissect_netrdatabasedeltas_rqst, - netlogon_dissect_netrdatabasedeltas_reply }, - { NETLOGON_NETRDATABASESYNC, "NetrDatabaseSync", - netlogon_dissect_netrdatabasesync_rqst, - netlogon_dissect_netrdatabasesync_reply }, - { NETLOGON_NETRACCOUNTDELTAS, "NetrAccountDeltas", - netlogon_dissect_netraccountdeltas_rqst, - netlogon_dissect_netraccountdeltas_reply }, - { NETLOGON_NETRACCOUNTSYNC, "NetrAccountSync", - netlogon_dissect_netraccountsync_rqst, - netlogon_dissect_netraccountsync_reply }, - { NETLOGON_NETRGETDCNAME, "NetrGetDCName", - netlogon_dissect_netrgetdcname_rqst, - netlogon_dissect_netrgetdcname_reply }, - { NETLOGON_NETRLOGONCONTROL, "NetrLogonControl", - netlogon_dissect_netrlogoncontrol_rqst, - netlogon_dissect_netrlogoncontrol_reply }, - { NETLOGON_NETRGETANYDCNAME, "NetrGetAnyDCName", - netlogon_dissect_netrgetanydcname_rqst, - netlogon_dissect_netrgetanydcname_reply }, - { NETLOGON_NETRLOGONCONTROL2, "NetrLogonControl2", - netlogon_dissect_netrlogoncontrol2_rqst, - netlogon_dissect_netrlogoncontrol2_reply }, - { NETLOGON_NETRSERVERAUTHENTICATE2, "NetrServerAuthenticate2", - netlogon_dissect_netrserverauthenticate2_rqst, - netlogon_dissect_netrserverauthenticate2_reply }, - { NETLOGON_NETRDATABASESYNC2, "NetrDatabaseSync2", - netlogon_dissect_netrdatabasesync2_rqst, - netlogon_dissect_netrdatabasesync2_reply }, - { NETLOGON_NETRDATABASEREDO, "NetrDatabaseRedo", - netlogon_dissect_netrdatabaseredo_rqst, - netlogon_dissect_netrdatabaseredo_reply }, - { NETLOGON_NETRLOGONCONTROL2EX, "NetrLogonControl2Ex", - netlogon_dissect_netrlogoncontrol2ex_rqst, - netlogon_dissect_netrlogoncontrol2ex_reply }, - { NETLOGON_NETRENUMERATETRUSTEDDOMAINS, "NetrEnumerateTrustedDomains", - netlogon_dissect_netrenumeratetrusteddomains_rqst, - netlogon_dissect_netrenumeratetrusteddomains_reply }, - { NETLOGON_DSRGETDCNAME, "DsrGetDcName", - netlogon_dissect_dsrgetdcname_rqst, - netlogon_dissect_dsrgetdcname_reply }, - { NETLOGON_NETRLOGONDUMMYROUTINE1, "NetrLogonDummyRoutine1", - netlogon_dissect_netrlogondummyroutine1_rqst, - netlogon_dissect_netrlogondummyroutine1_reply }, - { NETLOGON_NETRLOGONSETSERVICEBITS, "NetrLogonSetServiceBits", - netlogon_dissect_netrlogonsetservicebits_rqst, - netlogon_dissect_netrlogonsetservicebits_reply }, - { NETLOGON_NETRLOGONGETTRUSTRID, "NetrLogonGetTrustRid", - netlogon_dissect_netrlogongettrustrid_rqst, - netlogon_dissect_netrlogongettrustrid_reply }, - { NETLOGON_NETRLOGONCOMPUTESERVERDIGEST, "NetrLogonComputeServerDigest", - netlogon_dissect_netrlogoncomputeserverdigest_rqst, - netlogon_dissect_netrlogoncomputeserverdigest_reply }, - { NETLOGON_NETRLOGONCOMPUTECLIENTDIGEST, "NetrLogonComputeClientDigest", - netlogon_dissect_netrlogoncomputeclientdigest_rqst, - netlogon_dissect_netrlogoncomputeclientdigest_reply }, - { NETLOGON_NETRSERVERAUTHENTICATE3, "NetrServerAuthenticate3", - netlogon_dissect_netrserverauthenticate3_rqst, - netlogon_dissect_netrserverauthenticate3_reply }, - { NETLOGON_DSRGETDCNAMEX, "DsrGetDcNameEx", - netlogon_dissect_dsrgetdcnameex_rqst, - netlogon_dissect_dsrgetdcnameex_reply }, - { NETLOGON_DSRGETSITENAME, "DsrGetSiteName", - netlogon_dissect_dsrgetsitename_rqst, - netlogon_dissect_dsrgetsitename_reply }, - { NETLOGON_NETRLOGONGETDOMAININFO, "NetrLogonGetDomainInfo", - netlogon_dissect_netrlogongetdomaininfo_rqst, - netlogon_dissect_netrlogongetdomaininfo_reply }, - { NETLOGON_NETRSERVERPASSWORDSET2, "NetrServerPasswordSet2", - netlogon_dissect_netrserverpasswordset2_rqst, - netlogon_dissect_netrserverpasswordset2_reply }, - { NETLOGON_NETRSERVERPASSWORDGET, "NetrServerPasswordGet", - netlogon_dissect_netrserverpasswordget_rqst, - netlogon_dissect_netrserverpasswordget_reply }, - { NETLOGON_NETRLOGONSENDTOSAM, "NetrLogonSendToSam", - netlogon_dissect_netrlogonsendtosam_rqst, - netlogon_dissect_netrlogonsendtosam_reply }, - { NETLOGON_DSRADDRESSTOSITENAMESW, "DsrAddressToSiteNamesW", - netlogon_dissect_dsraddresstositenamesw_rqst, - netlogon_dissect_dsraddresstositenamesw_reply }, - { NETLOGON_DSRGETDCNAMEEX2, "DsrGetDcNameEx2", - netlogon_dissect_dsrgetdcnameex2_rqst, - netlogon_dissect_dsrgetdcnameex2_reply }, - { NETLOGON_NETRLOGONGETTIMESERVICEPARENTDOMAIN, - "NetrLogonGetTimeServiceParentDomain", - netlogon_dissect_netrlogongettimeserviceparentdomain_rqst, - netlogon_dissect_netrlogongettimeserviceparentdomain_reply }, - { NETLOGON_NETRENUMERATETRUSTEDDOMAINSEX, "NetrEnumerateTrustedDomainsEx", - netlogon_dissect_netrenumeratetrusteddomainsex_rqst, - netlogon_dissect_netrenumeratetrusteddomainsex_reply }, - { NETLOGON_DSRADDRESSTOSITENAMESEXW, "DsrAddressToSiteNamesExW", - netlogon_dissect_dsraddresstositenamesexw_rqst, - netlogon_dissect_dsraddresstositenamesexw_reply }, - { NETLOGON_DSRGETDCSITECOVERAGEW, "DsrGetDcSiteCoverageW", - netlogon_dissect_dsrgetdcsitecoveragew_rqst, - netlogon_dissect_dsrgetdcsitecoveragew_reply }, - { NETLOGON_NETRLOGONSAMLOGONEX, "NetrLogonSamLogonEx", - netlogon_dissect_netrlogonsamlogonex_rqst, - netlogon_dissect_netrlogonsamlogonex_reply }, - { NETLOGON_DSRENUMERATEDOMAINTRUSTS, "DsrEnumerateDomainTrusts", - netlogon_dissect_dsrenumeratedomaintrusts_rqst, - netlogon_dissect_dsrenumeratedomaintrusts_reply }, - { NETLOGON_DSRDEREGISTERDNSHOSTRECORDS, "DsrDeregisterDnsHostRecords", - netlogon_dissect_dsrderegisterdnshostrecords_rqst, - netlogon_dissect_dsrderegisterdnshostrecords_reply }, - { NETLOGON_NETRSERVERTRUSTPASSWORDSGET, "NetrServerTrustPasswordsGet", - NULL, NULL }, - { NETLOGON_DSRGETFORESTTRUSTINFORMATION, "DsrGetForestTrustInformation", - NULL, NULL }, - { NETLOGON_NETRGETFORESTTRUSTINFORMATION, "NetrGetForestTrustInformation", - NULL, NULL }, - { NETLOGON_NETRLOGONSAMLOGONWITHFLAGS, "NetrLogonSamLogonWithFlags", - netlogon_dissect_netrlogonsamlogonflags_rqst, - netlogon_dissect_netrlogonsamlogonflags_reply }, - { NETLOGON_NETRSERVERGETTRUSTINFO, "NetrServerGetTrustInfo", - NULL, NULL }, - {0, NULL, NULL, NULL } + { NETLOGON_NETRLOGONUASLOGON, "NetrLogonUasLogon", + netlogon_dissect_netrlogonuaslogon_rqst, + netlogon_dissect_netrlogonuaslogon_reply }, + { NETLOGON_NETRLOGONUASLOGOFF, "NetrLogonUasLogoff", + netlogon_dissect_netrlogonuaslogoff_rqst, + netlogon_dissect_netrlogonuaslogoff_reply }, + { NETLOGON_NETRLOGONSAMLOGON, "NetrLogonSamLogon", + netlogon_dissect_netrlogonsamlogon_rqst, + netlogon_dissect_netrlogonsamlogon_reply }, + { NETLOGON_NETRLOGONSAMLOGOFF, "NetrLogonSamLogoff", + netlogon_dissect_netrlogonsamlogoff_rqst, + netlogon_dissect_netrlogonsamlogoff_reply }, + { NETLOGON_NETRSERVERREQCHALLENGE, "NetrServerReqChallenge", + netlogon_dissect_netrserverreqchallenge_rqst, + netlogon_dissect_netrserverreqchallenge_reply }, + { NETLOGON_NETRSERVERAUTHENTICATE, "NetrServerAuthenticate", + netlogon_dissect_netrserverauthenticate_rqst, + netlogon_dissect_netrserverauthenticate_reply }, + { NETLOGON_NETRSERVERPASSWORDSET, "NetrServerPasswordSet", + netlogon_dissect_netrserverpasswordset_rqst, + netlogon_dissect_netrserverpasswordset_reply }, + { NETLOGON_NETRDATABASEDELTAS, "NetrDatabaseDeltas", + netlogon_dissect_netrdatabasedeltas_rqst, + netlogon_dissect_netrdatabasedeltas_reply }, + { NETLOGON_NETRDATABASESYNC, "NetrDatabaseSync", + netlogon_dissect_netrdatabasesync_rqst, + netlogon_dissect_netrdatabasesync_reply }, + { NETLOGON_NETRACCOUNTDELTAS, "NetrAccountDeltas", + netlogon_dissect_netraccountdeltas_rqst, + netlogon_dissect_netraccountdeltas_reply }, + { NETLOGON_NETRACCOUNTSYNC, "NetrAccountSync", + netlogon_dissect_netraccountsync_rqst, + netlogon_dissect_netraccountsync_reply }, + { NETLOGON_NETRGETDCNAME, "NetrGetDCName", + netlogon_dissect_netrgetdcname_rqst, + netlogon_dissect_netrgetdcname_reply }, + { NETLOGON_NETRLOGONCONTROL, "NetrLogonControl", + netlogon_dissect_netrlogoncontrol_rqst, + netlogon_dissect_netrlogoncontrol_reply }, + { NETLOGON_NETRGETANYDCNAME, "NetrGetAnyDCName", + netlogon_dissect_netrgetanydcname_rqst, + netlogon_dissect_netrgetanydcname_reply }, + { NETLOGON_NETRLOGONCONTROL2, "NetrLogonControl2", + netlogon_dissect_netrlogoncontrol2_rqst, + netlogon_dissect_netrlogoncontrol2_reply }, + { NETLOGON_NETRSERVERAUTHENTICATE2, "NetrServerAuthenticate2", + netlogon_dissect_netrserverauthenticate2_rqst, + netlogon_dissect_netrserverauthenticate2_reply }, + { NETLOGON_NETRDATABASESYNC2, "NetrDatabaseSync2", + netlogon_dissect_netrdatabasesync2_rqst, + netlogon_dissect_netrdatabasesync2_reply }, + { NETLOGON_NETRDATABASEREDO, "NetrDatabaseRedo", + netlogon_dissect_netrdatabaseredo_rqst, + netlogon_dissect_netrdatabaseredo_reply }, + { NETLOGON_NETRLOGONCONTROL2EX, "NetrLogonControl2Ex", + netlogon_dissect_netrlogoncontrol2ex_rqst, + netlogon_dissect_netrlogoncontrol2ex_reply }, + { NETLOGON_NETRENUMERATETRUSTEDDOMAINS, "NetrEnumerateTrustedDomains", + netlogon_dissect_netrenumeratetrusteddomains_rqst, + netlogon_dissect_netrenumeratetrusteddomains_reply }, + { NETLOGON_DSRGETDCNAME, "DsrGetDcName", + netlogon_dissect_dsrgetdcname_rqst, + netlogon_dissect_dsrgetdcname_reply }, + { NETLOGON_NETRLOGONDUMMYROUTINE1, "NetrLogonDummyRoutine1", + netlogon_dissect_netrlogondummyroutine1_rqst, + netlogon_dissect_netrlogondummyroutine1_reply }, + { NETLOGON_NETRLOGONSETSERVICEBITS, "NetrLogonSetServiceBits", + netlogon_dissect_netrlogonsetservicebits_rqst, + netlogon_dissect_netrlogonsetservicebits_reply }, + { NETLOGON_NETRLOGONGETTRUSTRID, "NetrLogonGetTrustRid", + netlogon_dissect_netrlogongettrustrid_rqst, + netlogon_dissect_netrlogongettrustrid_reply }, + { NETLOGON_NETRLOGONCOMPUTESERVERDIGEST, "NetrLogonComputeServerDigest", + netlogon_dissect_netrlogoncomputeserverdigest_rqst, + netlogon_dissect_netrlogoncomputeserverdigest_reply }, + { NETLOGON_NETRLOGONCOMPUTECLIENTDIGEST, "NetrLogonComputeClientDigest", + netlogon_dissect_netrlogoncomputeclientdigest_rqst, + netlogon_dissect_netrlogoncomputeclientdigest_reply }, + { NETLOGON_NETRSERVERAUTHENTICATE3, "NetrServerAuthenticate3", + netlogon_dissect_netrserverauthenticate3_rqst, + netlogon_dissect_netrserverauthenticate3_reply }, + { NETLOGON_DSRGETDCNAMEX, "DsrGetDcNameEx", + netlogon_dissect_dsrgetdcnameex_rqst, + netlogon_dissect_dsrgetdcnameex_reply }, + { NETLOGON_DSRGETSITENAME, "DsrGetSiteName", + netlogon_dissect_dsrgetsitename_rqst, + netlogon_dissect_dsrgetsitename_reply }, + { NETLOGON_NETRLOGONGETDOMAININFO, "NetrLogonGetDomainInfo", + netlogon_dissect_netrlogongetdomaininfo_rqst, + netlogon_dissect_netrlogongetdomaininfo_reply }, + { NETLOGON_NETRSERVERPASSWORDSET2, "NetrServerPasswordSet2", + netlogon_dissect_netrserverpasswordset2_rqst, + netlogon_dissect_netrserverpasswordset2_reply }, + { NETLOGON_NETRSERVERPASSWORDGET, "NetrServerPasswordGet", + netlogon_dissect_netrserverpasswordget_rqst, + netlogon_dissect_netrserverpasswordget_reply }, + { NETLOGON_NETRLOGONSENDTOSAM, "NetrLogonSendToSam", + netlogon_dissect_netrlogonsendtosam_rqst, + netlogon_dissect_netrlogonsendtosam_reply }, + { NETLOGON_DSRADDRESSTOSITENAMESW, "DsrAddressToSiteNamesW", + netlogon_dissect_dsraddresstositenamesw_rqst, + netlogon_dissect_dsraddresstositenamesw_reply }, + { NETLOGON_DSRGETDCNAMEEX2, "DsrGetDcNameEx2", + netlogon_dissect_dsrgetdcnameex2_rqst, + netlogon_dissect_dsrgetdcnameex2_reply }, + { NETLOGON_NETRLOGONGETTIMESERVICEPARENTDOMAIN, + "NetrLogonGetTimeServiceParentDomain", + netlogon_dissect_netrlogongettimeserviceparentdomain_rqst, + netlogon_dissect_netrlogongettimeserviceparentdomain_reply }, + { NETLOGON_NETRENUMERATETRUSTEDDOMAINSEX, "NetrEnumerateTrustedDomainsEx", + netlogon_dissect_netrenumeratetrusteddomainsex_rqst, + netlogon_dissect_netrenumeratetrusteddomainsex_reply }, + { NETLOGON_DSRADDRESSTOSITENAMESEXW, "DsrAddressToSiteNamesExW", + netlogon_dissect_dsraddresstositenamesexw_rqst, + netlogon_dissect_dsraddresstositenamesexw_reply }, + { NETLOGON_DSRGETDCSITECOVERAGEW, "DsrGetDcSiteCoverageW", + netlogon_dissect_dsrgetdcsitecoveragew_rqst, + netlogon_dissect_dsrgetdcsitecoveragew_reply }, + { NETLOGON_NETRLOGONSAMLOGONEX, "NetrLogonSamLogonEx", + netlogon_dissect_netrlogonsamlogonex_rqst, + netlogon_dissect_netrlogonsamlogonex_reply }, + { NETLOGON_DSRENUMERATEDOMAINTRUSTS, "DsrEnumerateDomainTrusts", + netlogon_dissect_dsrenumeratedomaintrusts_rqst, + netlogon_dissect_dsrenumeratedomaintrusts_reply }, + { NETLOGON_DSRDEREGISTERDNSHOSTRECORDS, "DsrDeregisterDnsHostRecords", + netlogon_dissect_dsrderegisterdnshostrecords_rqst, + netlogon_dissect_dsrderegisterdnshostrecords_reply }, + { NETLOGON_NETRSERVERTRUSTPASSWORDSGET, "NetrServerTrustPasswordsGet", + NULL, NULL }, + { NETLOGON_DSRGETFORESTTRUSTINFORMATION, "DsrGetForestTrustInformation", + NULL, NULL }, + { NETLOGON_NETRGETFORESTTRUSTINFORMATION, "NetrGetForestTrustInformation", + NULL, NULL }, + { NETLOGON_NETRLOGONSAMLOGONWITHFLAGS, "NetrLogonSamLogonWithFlags", + netlogon_dissect_netrlogonsamlogonflags_rqst, + netlogon_dissect_netrlogonsamlogonflags_reply }, + { NETLOGON_NETRSERVERGETTRUSTINFO, "NetrServerGetTrustInfo", + NULL, NULL }, + {0, NULL, NULL, NULL } }; static int hf_netlogon_secchan_verf = -1; @@ -7860,240 +7870,240 @@ static int hf_netlogon_secchan_verf_seq = -1; static int hf_netlogon_secchan_verf_nonce = -1; static const value_string sign_algs[] = { - { 0x0077, "HMAC-MD5"}, - { 0, NULL} + { 0x0077, "HMAC-MD5"}, + { 0, NULL} }; static const value_string seal_algs[] = { - { 0xFFFF, "Not Encrypted"}, - { 0x007A, "RC4"}, - { 0, NULL} + { 0xFFFF, "Not Encrypted"}, + { 0x007A, "RC4"}, + { 0, NULL} }; static int get_seal_key(const guint8 *session_key,int key_len,guint64 sequence,guint8* seal_key) { - guint8 zeros[4]; - guint8 *buf = (guint8 *)g_malloc(key_len); - guint8 buf2[16]; - guint8 zero_sk[16]; - int i = 0; - memset(zero_sk,0,16); - memset(seal_key,0,16); - if(memcmp(session_key,zero_sk,16)) { - memset(zeros,0,4); - for(i=0;ifd->num);*/ + tvbuff_t *buf = NULL; + guint8* decrypted; + netlogon_auth_vars *vars; + netlogon_auth_key key; + /*debugprintf("Dissection of request data offset %d len=%d on packet %d\n",offset,tvb_length_remaining(tvb,offset),pinfo->fd->num);*/ - generate_hash_key(pinfo,is_server,&key,NULL); - vars = (netlogon_auth_vars *)g_hash_table_lookup(netlogon_auths, &key); + generate_hash_key(pinfo,is_server,&key,NULL); + vars = (netlogon_auth_vars *)g_hash_table_lookup(netlogon_auths, &key); - if(vars != NULL ) { - while(vars != NULL && vars->next_start != -1 && vars->next_start < (int) pinfo->fd->num ) { - vars = vars->next; - } - if(vars == NULL ) { - debugprintf("Vars not found %d (packet_data)\n",g_hash_table_size(netlogon_auths)); - return(buf); + if(vars != NULL ) { + while(vars != NULL && vars->next_start != -1 && vars->next_start < (int) pinfo->fd->num ) { + vars = vars->next; + } + if(vars == NULL ) { + debugprintf("Vars not found %d (packet_data)\n",g_hash_table_size(netlogon_auths)); + return(buf); + } + else { + if(vars->can_decrypt == TRUE) { + rc4_state_struct rc4state; + int data_len = tvb_length_remaining(tvb,offset); + guint64 copyconfounder = vars->confounder; + + crypt_rc4_init(&rc4state,vars->encryption_key,16); + crypt_rc4(&rc4state,(guint8*)©confounder,8); + decrypted = (guint8*)tvb_memdup(tvb, offset,data_len); + crypt_rc4_init(&rc4state,vars->encryption_key,16); + crypt_rc4(&rc4state,decrypted,data_len); + buf = tvb_new_real_data(decrypted, data_len, data_len); + } + else { + debugprintf("Session key not found can't decrypt ...\n"); + } + } } else { - if(vars->can_decrypt == TRUE) { - rc4_state_struct rc4state; - int data_len = tvb_length_remaining(tvb,offset); - guint64 copyconfounder = vars->confounder; + debugprintf("Vars not found %d (packet_data)\n",g_hash_table_size(netlogon_auths)); + return(buf); + } - crypt_rc4_init(&rc4state,vars->encryption_key,16); - crypt_rc4(&rc4state,(guint8*)©confounder,8); - decrypted = (guint8*)tvb_memdup(tvb, offset,data_len); - crypt_rc4_init(&rc4state,vars->encryption_key,16); - crypt_rc4(&rc4state,decrypted,data_len); - buf = tvb_new_real_data(decrypted, data_len, data_len); - } - else { - debugprintf("Session key not found can't decrypt ...\n"); - } - } - } - else { - debugprintf("Vars not found %d (packet_data)\n",g_hash_table_size(netlogon_auths)); return(buf); - } - - return(buf); } static tvbuff_t* dissect_request_data( tvbuff_t *tvb ,tvbuff_t *auth_tvb , - int offset , packet_info *pinfo ,dcerpc_auth_info *auth_info ) + int offset , packet_info *pinfo ,dcerpc_auth_info *auth_info ) { - return dissect_packet_data(tvb,auth_tvb,offset,pinfo,auth_info,0); + return dissect_packet_data(tvb,auth_tvb,offset,pinfo,auth_info,0); } static tvbuff_t* dissect_response_data( tvbuff_t *tvb ,tvbuff_t *auth_tvb , - int offset , packet_info *pinfo ,dcerpc_auth_info *auth_info ) + int offset , packet_info *pinfo ,dcerpc_auth_info *auth_info ) { - return dissect_packet_data(tvb,auth_tvb,offset,pinfo,auth_info,1); + return dissect_packet_data(tvb,auth_tvb,offset,pinfo,auth_info,1); } /* MS-NRPC 2.2.1.3.2 */ static int dissect_secchan_verf(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, - proto_tree *tree, guint8 *drep _U_, unsigned char is_server) + proto_tree *tree, guint8 *drep _U_, unsigned char is_server) { - netlogon_auth_vars *vars; - netlogon_auth_key key; - proto_item *vf = NULL; - proto_tree *subtree = NULL; - guint64 encrypted_seq; - guint64 digest; - guint64 confounder; - int update_vars = 0; + netlogon_auth_vars *vars; + netlogon_auth_key key; + proto_item *vf = NULL; + proto_tree *subtree = NULL; + guint64 encrypted_seq; + guint64 digest; + guint64 confounder; + int update_vars = 0; - generate_hash_key(pinfo,is_server,&key,NULL); - vars = (netlogon_auth_vars *)g_hash_table_lookup(netlogon_auths,(gconstpointer*) &key); - if( ! (seen.isseen && seen.num == pinfo->fd->num) ) { - /* - * Create a new tree, and split into x components ... - */ - vf = proto_tree_add_item(tree, hf_netlogon_secchan_verf, tvb, - offset, -1, FALSE); - subtree = proto_item_add_subtree(vf, ett_secchan_verf); + generate_hash_key(pinfo,is_server,&key,NULL); + vars = (netlogon_auth_vars *)g_hash_table_lookup(netlogon_auths,(gconstpointer*) &key); + if( ! (seen.isseen && seen.num == pinfo->fd->num) ) { + /* + * Create a new tree, and split into x components ... + */ + vf = proto_tree_add_item(tree, hf_netlogon_secchan_verf, tvb, + offset, -1, FALSE); + subtree = proto_item_add_subtree(vf, ett_secchan_verf); - proto_tree_add_item(subtree, hf_netlogon_secchan_verf_signalg, tvb, - offset, 2, TRUE); - proto_tree_add_item(subtree, hf_netlogon_secchan_verf_sealalg, tvb, - offset+2, 2, TRUE); - /* 2 pad bytes */ - proto_tree_add_item(subtree, hf_netlogon_secchan_verf_flag, tvb, - offset+6, 2, FALSE); - offset += 8; + proto_tree_add_item(subtree, hf_netlogon_secchan_verf_signalg, tvb, + offset, 2, TRUE); + proto_tree_add_item(subtree, hf_netlogon_secchan_verf_sealalg, tvb, + offset+2, 2, TRUE); + /* 2 pad bytes */ + proto_tree_add_item(subtree, hf_netlogon_secchan_verf_flag, tvb, + offset+6, 2, FALSE); + offset += 8; - offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, subtree, drep, - hf_netlogon_secchan_verf_seq, &encrypted_seq); - - offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, subtree, drep, - hf_netlogon_secchan_verf_digest, &digest); - - /* In some cases the nonce if the data/signture are encrypted ("integrity/seal in MS language")*/ - - if (tvb_bytes_exist(tvb, offset, 8)) { offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, subtree, drep, - hf_netlogon_secchan_verf_nonce, &confounder); - } - update_vars = 1; - } - if( vars != NULL ) { - while(vars != NULL && vars->next_start != -1 && vars->next_start < (int)pinfo->fd->num ) { - vars = vars->next; - } - if(vars == NULL ) { - debugprintf("Vars not found %d (packet_data)\n",g_hash_table_size(netlogon_auths)); - return(offset); - } - else { - if(update_vars) { - vars->confounder = confounder; - vars->seq = uncrypt_sequence(vars->session_key,digest,encrypted_seq,is_server); - } + hf_netlogon_secchan_verf_seq, &encrypted_seq); - if(get_seal_key(vars->session_key,16,vars->seq,vars->encryption_key)) - { - vars->can_decrypt = TRUE; - } - else - { - debugprintf("get seal key returned 0\n"); - } - } - } - else - { - debugprintf("Vars not found (is null %d) %d (dissect_verf)\n",vars==NULL,g_hash_table_size(netlogon_auths)); - } - /*debugprintf("Setting isseen to true, old packet %d new %d\n",seen.num,pinfo->fd->num);*/ - seen.isseen = TRUE; - seen.num = pinfo->fd->num; + offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, subtree, drep, + hf_netlogon_secchan_verf_digest, &digest); - return offset; + /* In some cases the nonce if the data/signture are encrypted ("integrity/seal in MS language")*/ + + if (tvb_bytes_exist(tvb, offset, 8)) { + offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, subtree, drep, + hf_netlogon_secchan_verf_nonce, &confounder); + } + update_vars = 1; + } + if( vars != NULL ) { + while(vars != NULL && vars->next_start != -1 && vars->next_start < (int)pinfo->fd->num ) { + vars = vars->next; + } + if(vars == NULL ) { + debugprintf("Vars not found %d (packet_data)\n",g_hash_table_size(netlogon_auths)); + return(offset); + } + else { + if(update_vars) { + vars->confounder = confounder; + vars->seq = uncrypt_sequence(vars->session_key,digest,encrypted_seq,is_server); + } + + if(get_seal_key(vars->session_key,16,vars->seq,vars->encryption_key)) + { + vars->can_decrypt = TRUE; + } + else + { + debugprintf("get seal key returned 0\n"); + } + } + } + else + { + debugprintf("Vars not found (is null %d) %d (dissect_verf)\n",vars==NULL,g_hash_table_size(netlogon_auths)); + } + /*debugprintf("Setting isseen to true, old packet %d new %d\n",seen.num,pinfo->fd->num);*/ + seen.isseen = TRUE; + seen.num = pinfo->fd->num; + + return offset; } static int dissect_request_secchan_verf(tvbuff_t *tvb, int offset, packet_info *pinfo , - proto_tree *tree, guint8 *drep ) + proto_tree *tree, guint8 *drep ) { - return dissect_secchan_verf(tvb,offset,pinfo,tree,drep,0); + return dissect_secchan_verf(tvb,offset,pinfo,tree,drep,0); } static int dissect_response_secchan_verf(tvbuff_t *tvb, int offset, packet_info *pinfo , - proto_tree *tree, guint8 *drep ) + proto_tree *tree, guint8 *drep ) { - return dissect_secchan_verf(tvb,offset,pinfo,tree,drep,1); + return dissect_secchan_verf(tvb,offset,pinfo,tree,drep,1); } /* Secure channel types */ static const value_string sec_chan_type_vals[] = { - { SEC_CHAN_WKSTA, "Workstation" }, - { SEC_CHAN_DOMAIN, "Domain trust" }, - { SEC_CHAN_BDC, "Backup domain controller" }, - { 0, NULL } + { SEC_CHAN_WKSTA, "Workstation" }, + { SEC_CHAN_DOMAIN, "Domain trust" }, + { SEC_CHAN_BDC, "Backup domain controller" }, + { 0, NULL } }; static void netlogon_reassemble_init(void) { - if (netlogon_auths){ - g_hash_table_destroy (netlogon_auths); - } - netlogon_auths = g_hash_table_new (netlogon_auth_hash, netlogon_auth_equal); - if (schannel_auths){ - g_hash_table_destroy (schannel_auths); - } - schannel_auths = g_hash_table_new (netlogon_auth_hash, netlogon_auth_equal); + if (netlogon_auths){ + g_hash_table_destroy (netlogon_auths); + } + netlogon_auths = g_hash_table_new (netlogon_auth_hash, netlogon_auth_equal); + if (schannel_auths){ + g_hash_table_destroy (schannel_auths); + } + schannel_auths = g_hash_table_new (netlogon_auth_hash, netlogon_auth_equal); } @@ -8101,1386 +8111,1386 @@ void proto_register_dcerpc_netlogon(void) { -static hf_register_info hf[] = { - { &hf_netlogon_opnum, - { "Operation", "netlogon.opnum", FT_UINT16, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + static hf_register_info hf[] = { + { &hf_netlogon_opnum, + { "Operation", "netlogon.opnum", FT_UINT16, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_rc, { - "Return code", "netlogon.rc", FT_UINT32, BASE_HEX, - VALS(NT_errors), 0x0, "Netlogon return code", HFILL }}, + { &hf_netlogon_rc, { + "Return code", "netlogon.rc", FT_UINT32, BASE_HEX, + VALS(NT_errors), 0x0, "Netlogon return code", HFILL }}, - { &hf_netlogon_dos_rc, - { "DOS error code", "netlogon.dos.rc", FT_UINT32, - BASE_HEX, VALS(DOS_errors), 0x0, "DOS Error Code", HFILL}}, + { &hf_netlogon_dos_rc, + { "DOS error code", "netlogon.dos.rc", FT_UINT32, + BASE_HEX, VALS(DOS_errors), 0x0, "DOS Error Code", HFILL}}, - { &hf_netlogon_werr_rc, - { "WERR error code", "netlogon.werr.rc", FT_UINT32, - BASE_HEX, VALS(WERR_errors), 0x0, "WERR Error Code", HFILL}}, + { &hf_netlogon_werr_rc, + { "WERR error code", "netlogon.werr.rc", FT_UINT32, + BASE_HEX, VALS(WERR_errors), 0x0, "WERR Error Code", HFILL}}, - { &hf_netlogon_param_ctrl, { - "Param Ctrl", "netlogon.param_ctrl", FT_UINT32, BASE_HEX, - NULL, 0x0, "Param ctrl", HFILL }}, + { &hf_netlogon_param_ctrl, { + "Param Ctrl", "netlogon.param_ctrl", FT_UINT32, BASE_HEX, + NULL, 0x0, "Param ctrl", HFILL }}, - { &hf_netlogon_logon_id, { - "Logon ID", "netlogon.logon_id", FT_UINT64, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_logon_id, { + "Logon ID", "netlogon.logon_id", FT_UINT64, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_modify_count, { - "Modify Count", "netlogon.modify_count", FT_UINT64, BASE_DEC, - NULL, 0x0, "How many times the object has been modified", HFILL }}, + { &hf_netlogon_modify_count, { + "Modify Count", "netlogon.modify_count", FT_UINT64, BASE_DEC, + NULL, 0x0, "How many times the object has been modified", HFILL }}, - { &hf_netlogon_security_information, { - "Security Information", "netlogon.security_information", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_security_information, { + "Security Information", "netlogon.security_information", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_count, { - "Count", "netlogon.count", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_count, { + "Count", "netlogon.count", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_entries, { - "Entries", "netlogon.entries", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_entries, { + "Entries", "netlogon.entries", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_credential, { - "Credential", "netlogon.credential", FT_BYTES, BASE_NONE, - NULL, 0x0, "Netlogon Credential", HFILL }}, + { &hf_netlogon_credential, { + "Credential", "netlogon.credential", FT_BYTES, BASE_NONE, + NULL, 0x0, "Netlogon Credential", HFILL }}, - { &hf_netlogon_challenge, { - "Challenge", "netlogon.challenge", FT_BYTES, BASE_NONE, - NULL, 0x0, "Netlogon challenge", HFILL }}, + { &hf_netlogon_challenge, { + "Challenge", "netlogon.challenge", FT_BYTES, BASE_NONE, + NULL, 0x0, "Netlogon challenge", HFILL }}, - { &hf_netlogon_lm_owf_password, { - "LM Pwd", "netlogon.lm_owf_pwd", FT_BYTES, BASE_NONE, - NULL, 0x0, "LanManager OWF Password", HFILL }}, + { &hf_netlogon_lm_owf_password, { + "LM Pwd", "netlogon.lm_owf_pwd", FT_BYTES, BASE_NONE, + NULL, 0x0, "LanManager OWF Password", HFILL }}, - { &hf_netlogon_user_session_key, { - "User Session Key", "netlogon.user_session_key", FT_BYTES, BASE_NONE, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_user_session_key, { + "User Session Key", "netlogon.user_session_key", FT_BYTES, BASE_NONE, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_encrypted_lm_owf_password, { - "Encrypted LM Pwd", "netlogon.lm_owf_pwd.encrypted", FT_BYTES, BASE_NONE, - NULL, 0x0, "Encrypted LanManager OWF Password", HFILL }}, + { &hf_netlogon_encrypted_lm_owf_password, { + "Encrypted LM Pwd", "netlogon.lm_owf_pwd.encrypted", FT_BYTES, BASE_NONE, + NULL, 0x0, "Encrypted LanManager OWF Password", HFILL }}, - { &hf_netlogon_nt_owf_password, { - "NT Pwd", "netlogon.nt_owf_pwd", FT_BYTES, BASE_NONE, - NULL, 0x0, "NT OWF Password", HFILL }}, + { &hf_netlogon_nt_owf_password, { + "NT Pwd", "netlogon.nt_owf_pwd", FT_BYTES, BASE_NONE, + NULL, 0x0, "NT OWF Password", HFILL }}, - { &hf_netlogon_blob, { - "BLOB", "netlogon.blob", FT_BYTES, BASE_NONE, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_blob, { + "BLOB", "netlogon.blob", FT_BYTES, BASE_NONE, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_len, { - "Len", "netlogon.len", FT_UINT32, BASE_DEC, - NULL, 0, "Length", HFILL }}, + { &hf_netlogon_len, { + "Len", "netlogon.len", FT_UINT32, BASE_DEC, + NULL, 0, "Length", HFILL }}, - { &hf_netlogon_priv, { - "Priv", "netlogon.priv", FT_UINT32, BASE_DEC, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_priv, { + "Priv", "netlogon.priv", FT_UINT32, BASE_DEC, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_privilege_entries, { - "Privilege Entries", "netlogon.privilege_entries", FT_UINT32, BASE_DEC, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_privilege_entries, { + "Privilege Entries", "netlogon.privilege_entries", FT_UINT32, BASE_DEC, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_privilege_control, { - "Privilege Control", "netlogon.privilege_control", FT_UINT32, BASE_HEX, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_privilege_control, { + "Privilege Control", "netlogon.privilege_control", FT_UINT32, BASE_HEX, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_privilege_name, { - "Privilege Name", "netlogon.privilege_name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_privilege_name, { + "Privilege Name", "netlogon.privilege_name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_pdc_connection_status, { - "PDC Connection Status", "netlogon.pdc_connection_status", FT_UINT32, BASE_DEC, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_pdc_connection_status, { + "PDC Connection Status", "netlogon.pdc_connection_status", FT_UINT32, BASE_DEC, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_tc_connection_status, { - "TC Connection Status", "netlogon.tc_connection_status", FT_UINT32, BASE_DEC, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_tc_connection_status, { + "TC Connection Status", "netlogon.tc_connection_status", FT_UINT32, BASE_DEC, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_attrs, { - "Attributes", "netlogon.attrs", FT_UINT32, BASE_HEX, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_attrs, { + "Attributes", "netlogon.attrs", FT_UINT32, BASE_HEX, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_lsapolicy_referentid, - { "Referent ID", "netlogon.lsapolicy.referentID", FT_UINT32, BASE_HEX, - NULL, 0x0, "Referent ID", HFILL }}, + { &hf_netlogon_lsapolicy_referentid, + { "Referent ID", "netlogon.lsapolicy.referentID", FT_UINT32, BASE_HEX, + NULL, 0x0, "Referent ID", HFILL }}, - { &hf_netlogon_lsapolicy_len, - { "Length", "netlogon.lsapolicy.length", FT_UINT32, BASE_DEC, - NULL, 0x0, "Length of the policy buffer", HFILL }}, + { &hf_netlogon_lsapolicy_len, + { "Length", "netlogon.lsapolicy.length", FT_UINT32, BASE_DEC, + NULL, 0x0, "Length of the policy buffer", HFILL }}, - { &hf_netlogon_lsapolicy_pointer, - { "Pointer", "netlogon.lsapolicy.pointer", FT_BYTES, BASE_NONE, - NULL, 0x0, "Pointer to LSA POLICY", HFILL }}, + { &hf_netlogon_lsapolicy_pointer, + { "Pointer", "netlogon.lsapolicy.pointer", FT_BYTES, BASE_NONE, + NULL, 0x0, "Pointer to LSA POLICY", HFILL }}, - { &hf_netlogon_unknown_string, - { "Unknown string", "netlogon.unknown_string", FT_STRING, BASE_NONE, - NULL, 0, "Unknown string. If you know what this is, contact wireshark developers.", HFILL }}, + { &hf_netlogon_unknown_string, + { "Unknown string", "netlogon.unknown_string", FT_STRING, BASE_NONE, + NULL, 0, "Unknown string. If you know what this is, contact wireshark developers.", HFILL }}, - { &hf_netlogon_dummy_string, - { "Dummy String", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string, + { "Dummy String", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_trust_extention, - { "Trust extension", "netlogon.trust.extention", FT_STRING, BASE_NONE, - NULL, 0, "Trusts extension.", HFILL }}, + { &hf_netlogon_trust_extention, + { "Trust extension", "netlogon.trust.extention", FT_STRING, BASE_NONE, + NULL, 0, "Trusts extension.", HFILL }}, - { &hf_netlogon_trust_offset, - { "Offset", "netlogon.trust.extention_offset", FT_UINT32, BASE_DEC, - NULL, 0, "Trusts extension.", HFILL }}, + { &hf_netlogon_trust_offset, + { "Offset", "netlogon.trust.extention_offset", FT_UINT32, BASE_DEC, + NULL, 0, "Trusts extension.", HFILL }}, - { &hf_netlogon_trust_len, - { "Length", "netlogon.trust.extention_length", FT_UINT32, BASE_DEC, - NULL, 0, "Length", HFILL }}, + { &hf_netlogon_trust_len, + { "Length", "netlogon.trust.extention_length", FT_UINT32, BASE_DEC, + NULL, 0, "Length", HFILL }}, - { &hf_netlogon_trust_max, - { "Max Count", "netlogon.trust.extention.maxcount", FT_UINT32, BASE_DEC, - NULL, 0, "Max Count", HFILL }}, + { &hf_netlogon_trust_max, + { "Max Count", "netlogon.trust.extention.maxcount", FT_UINT32, BASE_DEC, + NULL, 0, "Max Count", HFILL }}, - { &hf_netlogon_dummy_string2, - { "Dummy String2", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String 2. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string2, + { "Dummy String2", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String 2. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy_string3, - { "Dummy String3", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String 3. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string3, + { "Dummy String3", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String 3. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy_string4, - { "Dummy String4", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String 4. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string4, + { "Dummy String4", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String 4. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy_string5, - { "Dummy String5", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String 5. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string5, + { "Dummy String5", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String 5. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy_string6, - { "Dummy String6", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String 6. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string6, + { "Dummy String6", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String 6. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy_string7, - { "Dummy String7", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String 7. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string7, + { "Dummy String7", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String 7. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy_string8, - { "Dummy String8", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String 8. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string8, + { "Dummy String8", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String 8. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy_string9, - { "Dummy String9", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String 9. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string9, + { "Dummy String9", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String 9. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy_string10, - { "Dummy String10", "netlogon.dummy_string", FT_STRING, BASE_NONE, - NULL, 0, "Dummy String 10. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy_string10, + { "Dummy String10", "netlogon.dummy_string", FT_STRING, BASE_NONE, + NULL, 0, "Dummy String 10. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_unknown_long, - { "Unknown long", "netlogon.unknown.long", FT_UINT32, BASE_HEX, - NULL, 0x0, "Unknown long. If you know what this is, contact wireshark developers.", HFILL }}, + { &hf_netlogon_unknown_long, + { "Unknown long", "netlogon.unknown.long", FT_UINT32, BASE_HEX, + NULL, 0x0, "Unknown long. If you know what this is, contact wireshark developers.", HFILL }}, - { &hf_netlogon_dummy1_long, - { "Dummy1 Long", "netlogon.dummy.long1", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 1. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy1_long, + { "Dummy1 Long", "netlogon.dummy.long1", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 1. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy2_long, - { "Dummy2 Long", "netlogon.dummy.long2", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 2. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy2_long, + { "Dummy2 Long", "netlogon.dummy.long2", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 2. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy3_long, - { "Dummy3 Long", "netlogon.dummy.long3", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 3. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy3_long, + { "Dummy3 Long", "netlogon.dummy.long3", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 3. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy4_long, - { "Dummy4 Long", "netlogon.dummy.long4", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 4. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy4_long, + { "Dummy4 Long", "netlogon.dummy.long4", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 4. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy5_long, - { "Dummy5 Long", "netlogon.dummy.long5", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 5. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy5_long, + { "Dummy5 Long", "netlogon.dummy.long5", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 5. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy6_long, - { "Dummy6 Long", "netlogon.dummy.long6", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 6. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy6_long, + { "Dummy6 Long", "netlogon.dummy.long6", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 6. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy7_long, - { "Dummy7 Long", "netlogon.dummy.long7", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 7. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy7_long, + { "Dummy7 Long", "netlogon.dummy.long7", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 7. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy8_long, - { "Dummy8 Long", "netlogon.dummy.long8", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 8. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy8_long, + { "Dummy8 Long", "netlogon.dummy.long8", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 8. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy9_long, - { "Dummy9 Long", "netlogon.dummy.long9", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 9. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy9_long, + { "Dummy9 Long", "netlogon.dummy.long9", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 9. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_dummy10_long, - { "Dummy10 Long", "netlogon.dummy.long10", FT_UINT32, BASE_HEX, - NULL, 0x0, "Dummy long 10. Used is reserved for next evolutions.", HFILL }}, + { &hf_netlogon_dummy10_long, + { "Dummy10 Long", "netlogon.dummy.long10", FT_UINT32, BASE_HEX, + NULL, 0x0, "Dummy long 10. Used is reserved for next evolutions.", HFILL }}, - { &hf_netlogon_supportedenctypes, - { "Supported Encryption Types", "netlogon.encryption.types", FT_UINT32, BASE_HEX, - NULL, 0x0, "Encryption types", HFILL }}, + { &hf_netlogon_supportedenctypes, + { "Supported Encryption Types", "netlogon.encryption.types", FT_UINT32, BASE_HEX, + NULL, 0x0, "Encryption types", HFILL }}, - { &hf_netlogon_workstation_flags, - { "Workstation Flags", "netlogon.workstation.flags", FT_UINT32, BASE_HEX, - NULL, 0x0, "Flags", HFILL }}, + { &hf_netlogon_workstation_flags, + { "Workstation Flags", "netlogon.workstation.flags", FT_UINT32, BASE_HEX, + NULL, 0x0, "Flags", HFILL }}, - { &hf_netlogon_reserved, - { "Reserved", "netlogon.reserved", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_unknown_short, - { "Unknown short", "netlogon.unknown.short", FT_UINT16, BASE_HEX, - NULL, 0x0, "Unknown short. If you know what this is, contact wireshark developers.", HFILL }}, + { &hf_netlogon_reserved, + { "Reserved", "netlogon.reserved", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_unknown_short, + { "Unknown short", "netlogon.unknown.short", FT_UINT16, BASE_HEX, + NULL, 0x0, "Unknown short. If you know what this is, contact wireshark developers.", HFILL }}, - { &hf_netlogon_unknown_char, - { "Unknown char", "netlogon.unknown.char", FT_UINT8, BASE_HEX, - NULL, 0x0, "Unknown char. If you know what this is, contact wireshark developers.", HFILL }}, + { &hf_netlogon_unknown_char, + { "Unknown char", "netlogon.unknown.char", FT_UINT8, BASE_HEX, + NULL, 0x0, "Unknown char. If you know what this is, contact wireshark developers.", HFILL }}, - { &hf_netlogon_acct_expiry_time, - { "Acct Expiry Time", "netlogon.acct.expiry_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0x0, "When this account will expire", HFILL }}, + { &hf_netlogon_acct_expiry_time, + { "Acct Expiry Time", "netlogon.acct.expiry_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0x0, "When this account will expire", HFILL }}, - { &hf_netlogon_nt_pwd_present, - { "NT PWD Present", "netlogon.nt_pwd_present", FT_UINT8, BASE_HEX, - NULL, 0x0, "Is NT password present for this account?", HFILL }}, + { &hf_netlogon_nt_pwd_present, + { "NT PWD Present", "netlogon.nt_pwd_present", FT_UINT8, BASE_HEX, + NULL, 0x0, "Is NT password present for this account?", HFILL }}, - { &hf_netlogon_lm_pwd_present, - { "LM PWD Present", "netlogon.lm_pwd_present", FT_UINT8, BASE_HEX, - NULL, 0x0, "Is LanManager password present for this account?", HFILL }}, + { &hf_netlogon_lm_pwd_present, + { "LM PWD Present", "netlogon.lm_pwd_present", FT_UINT8, BASE_HEX, + NULL, 0x0, "Is LanManager password present for this account?", HFILL }}, - { &hf_netlogon_pwd_expired, - { "PWD Expired", "netlogon.pwd_expired", FT_UINT8, BASE_HEX, - NULL, 0x0, "Whether this password has expired or not", HFILL }}, + { &hf_netlogon_pwd_expired, + { "PWD Expired", "netlogon.pwd_expired", FT_UINT8, BASE_HEX, + NULL, 0x0, "Whether this password has expired or not", HFILL }}, - { &hf_netlogon_authoritative, - { "Authoritative", "netlogon.authoritative", FT_UINT8, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_authoritative, + { "Authoritative", "netlogon.authoritative", FT_UINT8, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_sensitive_data_flag, - { "Sensitive Data", "netlogon.sensitive_data_flag", FT_UINT8, BASE_DEC, - NULL, 0x0, "Sensitive data flag", HFILL }}, + { &hf_netlogon_sensitive_data_flag, + { "Sensitive Data", "netlogon.sensitive_data_flag", FT_UINT8, BASE_DEC, + NULL, 0x0, "Sensitive data flag", HFILL }}, - { &hf_netlogon_auditing_mode, - { "Auditing Mode", "netlogon.auditing_mode", FT_UINT8, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_auditing_mode, + { "Auditing Mode", "netlogon.auditing_mode", FT_UINT8, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_max_audit_event_count, - { "Max Audit Event Count", "netlogon.max_audit_event_count", FT_UINT32, BASE_DEC, - NULL, 0x0, "Max audit event count", HFILL }}, + { &hf_netlogon_max_audit_event_count, + { "Max Audit Event Count", "netlogon.max_audit_event_count", FT_UINT32, BASE_DEC, + NULL, 0x0, "Max audit event count", HFILL }}, - { &hf_netlogon_event_audit_option, - { "Event Audit Option", "netlogon.event_audit_option", FT_UINT32, BASE_HEX, - NULL, 0x0, "Event audit option", HFILL }}, + { &hf_netlogon_event_audit_option, + { "Event Audit Option", "netlogon.event_audit_option", FT_UINT32, BASE_HEX, + NULL, 0x0, "Event audit option", HFILL }}, - { &hf_netlogon_sensitive_data_len, - { "Length", "netlogon.sensitive_data_len", FT_UINT32, BASE_DEC, - NULL, 0x0, "Length of sensitive data", HFILL }}, + { &hf_netlogon_sensitive_data_len, + { "Length", "netlogon.sensitive_data_len", FT_UINT32, BASE_DEC, + NULL, 0x0, "Length of sensitive data", HFILL }}, - { &hf_netlogon_nt_chal_resp, - { "NT Chal resp", "netlogon.nt_chal_resp", FT_BYTES, BASE_NONE, - NULL, 0, "Challenge response for NT authentication", HFILL }}, + { &hf_netlogon_nt_chal_resp, + { "NT Chal resp", "netlogon.nt_chal_resp", FT_BYTES, BASE_NONE, + NULL, 0, "Challenge response for NT authentication", HFILL }}, - { &hf_netlogon_lm_chal_resp, - { "LM Chal resp", "netlogon.lm_chal_resp", FT_BYTES, BASE_NONE, - NULL, 0, "Challenge response for LM authentication", HFILL }}, + { &hf_netlogon_lm_chal_resp, + { "LM Chal resp", "netlogon.lm_chal_resp", FT_BYTES, BASE_NONE, + NULL, 0, "Challenge response for LM authentication", HFILL }}, - { &hf_netlogon_cipher_len, - { "Cipher Len", "netlogon.cipher_len", FT_UINT32, BASE_DEC, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_cipher_len, + { "Cipher Len", "netlogon.cipher_len", FT_UINT32, BASE_DEC, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_cipher_maxlen, - { "Cipher Max Len", "netlogon.cipher_maxlen", FT_UINT32, BASE_DEC, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_cipher_maxlen, + { "Cipher Max Len", "netlogon.cipher_maxlen", FT_UINT32, BASE_DEC, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_pac_data, - { "Pac Data", "netlogon.pac.data", FT_BYTES, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_pac_data, + { "Pac Data", "netlogon.pac.data", FT_BYTES, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_sensitive_data, - { "Data", "netlogon.sensitive_data", FT_BYTES, BASE_NONE, - NULL, 0, "Sensitive Data", HFILL }}, + { &hf_netlogon_sensitive_data, + { "Data", "netlogon.sensitive_data", FT_BYTES, BASE_NONE, + NULL, 0, "Sensitive Data", HFILL }}, - { &hf_netlogon_auth_data, - { "Auth Data", "netlogon.auth.data", FT_BYTES, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_auth_data, + { "Auth Data", "netlogon.auth.data", FT_BYTES, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_cipher_current_data, - { "Cipher Current Data", "netlogon.cipher_current_data", FT_BYTES, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_cipher_current_data, + { "Cipher Current Data", "netlogon.cipher_current_data", FT_BYTES, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_cipher_old_data, - { "Cipher Old Data", "netlogon.cipher_old_data", FT_BYTES, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_cipher_old_data, + { "Cipher Old Data", "netlogon.cipher_old_data", FT_BYTES, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_acct_name, - { "Acct Name", "netlogon.acct_name", FT_STRING, BASE_NONE, - NULL, 0, "Account Name", HFILL }}, + { &hf_netlogon_acct_name, + { "Acct Name", "netlogon.acct_name", FT_STRING, BASE_NONE, + NULL, 0, "Account Name", HFILL }}, - { &hf_netlogon_acct_desc, - { "Acct Desc", "netlogon.acct_desc", FT_STRING, BASE_NONE, - NULL, 0, "Account Description", HFILL }}, + { &hf_netlogon_acct_desc, + { "Acct Desc", "netlogon.acct_desc", FT_STRING, BASE_NONE, + NULL, 0, "Account Description", HFILL }}, - { &hf_netlogon_group_desc, - { "Group Desc", "netlogon.group_desc", FT_STRING, BASE_NONE, - NULL, 0, "Group Description", HFILL }}, + { &hf_netlogon_group_desc, + { "Group Desc", "netlogon.group_desc", FT_STRING, BASE_NONE, + NULL, 0, "Group Description", HFILL }}, - { &hf_netlogon_full_name, - { "Full Name", "netlogon.full_name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_full_name, + { "Full Name", "netlogon.full_name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_comment, - { "Comment", "netlogon.comment", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_comment, + { "Comment", "netlogon.comment", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_parameters, - { "Parameters", "netlogon.parameters", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_parameters, + { "Parameters", "netlogon.parameters", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_logon_script, - { "Logon Script", "netlogon.logon_script", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_logon_script, + { "Logon Script", "netlogon.logon_script", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_profile_path, - { "Profile Path", "netlogon.profile_path", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_profile_path, + { "Profile Path", "netlogon.profile_path", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_home_dir, - { "Home Dir", "netlogon.home_dir", FT_STRING, BASE_NONE, - NULL, 0, "Home Directory", HFILL }}, + { &hf_netlogon_home_dir, + { "Home Dir", "netlogon.home_dir", FT_STRING, BASE_NONE, + NULL, 0, "Home Directory", HFILL }}, - { &hf_netlogon_dir_drive, - { "Dir Drive", "netlogon.dir_drive", FT_STRING, BASE_NONE, - NULL, 0, "Drive letter for home directory", HFILL }}, + { &hf_netlogon_dir_drive, + { "Dir Drive", "netlogon.dir_drive", FT_STRING, BASE_NONE, + NULL, 0, "Drive letter for home directory", HFILL }}, - { &hf_netlogon_logon_srv, - { "Server", "netlogon.server", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_logon_srv, + { "Server", "netlogon.server", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_principal, - { "Principal", "netlogon.principal", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_principal, + { "Principal", "netlogon.principal", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_logon_dom, - { "Domain", "netlogon.domain", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_logon_dom, + { "Domain", "netlogon.domain", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_resourcegroupcount, - { "ResourceGroup count", "netlogon.resourcegroupcount", FT_UINT32, BASE_DEC, - NULL, 0, "Number of Resource Groups", HFILL }}, + { &hf_netlogon_resourcegroupcount, + { "ResourceGroup count", "netlogon.resourcegroupcount", FT_UINT32, BASE_DEC, + NULL, 0, "Number of Resource Groups", HFILL }}, - { &hf_netlogon_computer_name, - { "Computer Name", "netlogon.computer_name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_computer_name, + { "Computer Name", "netlogon.computer_name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_site_name, - { "Site Name", "netlogon.site_name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_site_name, + { "Site Name", "netlogon.site_name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_dc_name, - { "DC Name", "netlogon.dc.name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_dc_name, + { "DC Name", "netlogon.dc.name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_dc_site_name, - { "DC Site Name", "netlogon.dc.site_name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_dc_site_name, + { "DC Site Name", "netlogon.dc.site_name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_dns_forest_name, - { "DNS Forest Name", "netlogon.dns.forest_name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_dns_forest_name, + { "DNS Forest Name", "netlogon.dns.forest_name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_dc_address, - { "DC Address", "netlogon.dc.address", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_dc_address, + { "DC Address", "netlogon.dc.address", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_dc_address_type, - { "DC Address Type", "netlogon.dc.address_type", FT_UINT32, BASE_DEC, - VALS(dc_address_types), 0, NULL, HFILL }}, + { &hf_netlogon_dc_address_type, + { "DC Address Type", "netlogon.dc.address_type", FT_UINT32, BASE_DEC, + VALS(dc_address_types), 0, NULL, HFILL }}, - { &hf_netlogon_client_site_name, - { "Client Site Name", "netlogon.client.site_name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_client_site_name, + { "Client Site Name", "netlogon.client.site_name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_workstation_site_name, - { "Wkst Site Name", "netlogon.wkst.site_name", FT_STRING, BASE_NONE, - NULL, 0, "Workstation Site Name", HFILL }}, + { &hf_netlogon_workstation_site_name, + { "Wkst Site Name", "netlogon.wkst.site_name", FT_STRING, BASE_NONE, + NULL, 0, "Workstation Site Name", HFILL }}, - { &hf_netlogon_workstation, - { "Wkst Name", "netlogon.wkst.name", FT_STRING, BASE_NONE, - NULL, 0, "Workstation Name", HFILL }}, + { &hf_netlogon_workstation, + { "Wkst Name", "netlogon.wkst.name", FT_STRING, BASE_NONE, + NULL, 0, "Workstation Name", HFILL }}, - { &hf_netlogon_os_version, - { "OS version", "netlogon.os.version", FT_STRING, BASE_NONE, - NULL, 0, "OS Version", HFILL }}, + { &hf_netlogon_os_version, + { "OS version", "netlogon.os.version", FT_STRING, BASE_NONE, + NULL, 0, "OS Version", HFILL }}, - { &hf_netlogon_workstation_os, - { "Wkst OS", "netlogon.wkst.os", FT_STRING, BASE_NONE, - NULL, 0, "Workstation OS", HFILL }}, + { &hf_netlogon_workstation_os, + { "Wkst OS", "netlogon.wkst.os", FT_STRING, BASE_NONE, + NULL, 0, "Workstation OS", HFILL }}, - { &hf_netlogon_workstations, - { "Workstations", "netlogon.wksts", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_workstations, + { "Workstations", "netlogon.wksts", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_workstation_fqdn, - { "Wkst FQDN", "netlogon.wkst.fqdn", FT_STRING, BASE_NONE, - NULL, 0, "Workstation FQDN", HFILL }}, + { &hf_netlogon_workstation_fqdn, + { "Wkst FQDN", "netlogon.wkst.fqdn", FT_STRING, BASE_NONE, + NULL, 0, "Workstation FQDN", HFILL }}, - { &hf_netlogon_group_name, - { "Group Name", "netlogon.group_name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_group_name, + { "Group Name", "netlogon.group_name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_alias_name, - { "Alias Name", "netlogon.alias_name", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_alias_name, + { "Alias Name", "netlogon.alias_name", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_dns_host, - { "DNS Host", "netlogon.dns_host", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_dns_host, + { "DNS Host", "netlogon.dns_host", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_downlevel_domain_name, - { "Downlevel Domain", "netlogon.downlevel_domain", FT_STRING, BASE_NONE, - NULL, 0, "Downlevel Domain Name", HFILL }}, + { &hf_netlogon_downlevel_domain_name, + { "Downlevel Domain", "netlogon.downlevel_domain", FT_STRING, BASE_NONE, + NULL, 0, "Downlevel Domain Name", HFILL }}, - { &hf_netlogon_dns_domain_name, - { "DNS Domain", "netlogon.dns_domain", FT_STRING, BASE_NONE, - NULL, 0, "DNS Domain Name", HFILL }}, + { &hf_netlogon_dns_domain_name, + { "DNS Domain", "netlogon.dns_domain", FT_STRING, BASE_NONE, + NULL, 0, "DNS Domain Name", HFILL }}, - { &hf_netlogon_ad_client_dns_name, - { "Client DNS Name", "netlogon.client_dns_name", FT_STRING, BASE_NONE, - NULL, 0, "Client DNS Name", HFILL }}, + { &hf_netlogon_ad_client_dns_name, + { "Client DNS Name", "netlogon.client_dns_name", FT_STRING, BASE_NONE, + NULL, 0, "Client DNS Name", HFILL }}, - { &hf_netlogon_domain_name, - { "Domain", "netlogon.domain", FT_STRING, BASE_NONE, - NULL, 0, "Domain Name", HFILL }}, + { &hf_netlogon_domain_name, + { "Domain", "netlogon.domain", FT_STRING, BASE_NONE, + NULL, 0, "Domain Name", HFILL }}, - { &hf_netlogon_oem_info, - { "OEM Info", "netlogon.oem_info", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_oem_info, + { "OEM Info", "netlogon.oem_info", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_trusted_dc_name, - { "Trusted DC", "netlogon.trusted_dc", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_trusted_dc_name, + { "Trusted DC", "netlogon.trusted_dc", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_logon_dnslogondomainname, - { "DNS Logon Domain name", "netlogon.logon.dnslogondomainname", FT_STRING, BASE_NONE, - NULL, 0, "DNS Name of the logon domain", HFILL }}, + { &hf_netlogon_logon_dnslogondomainname, + { "DNS Logon Domain name", "netlogon.logon.dnslogondomainname", FT_STRING, BASE_NONE, + NULL, 0, "DNS Name of the logon domain", HFILL }}, - { &hf_netlogon_logon_upn, - { "UPN", "netlogon.logon.upn", FT_STRING, BASE_NONE, - NULL, 0, "User Principal Name", HFILL }}, + { &hf_netlogon_logon_upn, + { "UPN", "netlogon.logon.upn", FT_STRING, BASE_NONE, + NULL, 0, "User Principal Name", HFILL }}, - { &hf_netlogon_logonsrv_handle, - { "Handle", "netlogon.handle", FT_STRING, BASE_NONE, - NULL, 0, "Logon Srv Handle", HFILL }}, + { &hf_netlogon_logonsrv_handle, + { "Handle", "netlogon.handle", FT_STRING, BASE_NONE, + NULL, 0, "Logon Srv Handle", HFILL }}, - { &hf_netlogon_dummy, - { "Dummy", "netlogon.dummy", FT_STRING, BASE_NONE, - NULL, 0, "Dummy string", HFILL }}, + { &hf_netlogon_dummy, + { "Dummy", "netlogon.dummy", FT_STRING, BASE_NONE, + NULL, 0, "Dummy string", HFILL }}, - { &hf_netlogon_logon_count16, - { "Logon Count", "netlogon.logon_count16", FT_UINT16, BASE_DEC, - NULL, 0x0, "Number of successful logins", HFILL }}, + { &hf_netlogon_logon_count16, + { "Logon Count", "netlogon.logon_count16", FT_UINT16, BASE_DEC, + NULL, 0x0, "Number of successful logins", HFILL }}, - { &hf_netlogon_logon_count, - { "Logon Count", "netlogon.logon_count", FT_UINT32, BASE_DEC, - NULL, 0x0, "Number of successful logins", HFILL }}, + { &hf_netlogon_logon_count, + { "Logon Count", "netlogon.logon_count", FT_UINT32, BASE_DEC, + NULL, 0x0, "Number of successful logins", HFILL }}, - { &hf_netlogon_bad_pw_count16, - { "Bad PW Count", "netlogon.bad_pw_count16", FT_UINT16, BASE_DEC, - NULL, 0x0, "Number of failed logins", HFILL }}, + { &hf_netlogon_bad_pw_count16, + { "Bad PW Count", "netlogon.bad_pw_count16", FT_UINT16, BASE_DEC, + NULL, 0x0, "Number of failed logins", HFILL }}, - { &hf_netlogon_bad_pw_count, - { "Bad PW Count", "netlogon.bad_pw_count", FT_UINT32, BASE_DEC, - NULL, 0x0, "Number of failed logins", HFILL }}, + { &hf_netlogon_bad_pw_count, + { "Bad PW Count", "netlogon.bad_pw_count", FT_UINT32, BASE_DEC, + NULL, 0x0, "Number of failed logins", HFILL }}, - { &hf_netlogon_country, - { "Country", "netlogon.country", FT_UINT16, BASE_DEC, - VALS(ms_country_codes), 0x0, "Country setting for this account", HFILL }}, + { &hf_netlogon_country, + { "Country", "netlogon.country", FT_UINT16, BASE_DEC, + VALS(ms_country_codes), 0x0, "Country setting for this account", HFILL }}, - { &hf_netlogon_codepage, - { "Codepage", "netlogon.codepage", FT_UINT16, BASE_DEC, - NULL, 0x0, "Codepage setting for this account", HFILL }}, + { &hf_netlogon_codepage, + { "Codepage", "netlogon.codepage", FT_UINT16, BASE_DEC, + NULL, 0x0, "Codepage setting for this account", HFILL }}, - { &hf_netlogon_level16, - { "Level", "netlogon.level16", FT_UINT16, BASE_DEC, - NULL, 0x0, "Which option of the union is represented here", HFILL }}, + { &hf_netlogon_level16, + { "Level", "netlogon.level16", FT_UINT16, BASE_DEC, + NULL, 0x0, "Which option of the union is represented here", HFILL }}, - { &hf_netlogon_validation_level, - { "Validation Level", "netlogon.validation_level", FT_UINT16, BASE_DEC, - NULL, 0x0, "Requested level of validation", HFILL }}, + { &hf_netlogon_validation_level, + { "Validation Level", "netlogon.validation_level", FT_UINT16, BASE_DEC, + NULL, 0x0, "Requested level of validation", HFILL }}, - { &hf_netlogon_minpasswdlen, - { "Min Password Len", "netlogon.min_passwd_len", FT_UINT16, BASE_DEC, - NULL, 0x0, "Minimum length of password", HFILL }}, + { &hf_netlogon_minpasswdlen, + { "Min Password Len", "netlogon.min_passwd_len", FT_UINT16, BASE_DEC, + NULL, 0x0, "Minimum length of password", HFILL }}, - { &hf_netlogon_passwdhistorylen, - { "Passwd History Len", "netlogon.passwd_history_len", FT_UINT16, BASE_DEC, - NULL, 0x0, "Length of password history", HFILL }}, + { &hf_netlogon_passwdhistorylen, + { "Passwd History Len", "netlogon.passwd_history_len", FT_UINT16, BASE_DEC, + NULL, 0x0, "Length of password history", HFILL }}, - { &hf_netlogon_secure_channel_type, - { "Sec Chan Type", "netlogon.sec_chan_type", FT_UINT16, BASE_DEC, - VALS(sec_chan_type_vals), 0x0, "Secure Channel Type", HFILL }}, + { &hf_netlogon_secure_channel_type, + { "Sec Chan Type", "netlogon.sec_chan_type", FT_UINT16, BASE_DEC, + VALS(sec_chan_type_vals), 0x0, "Secure Channel Type", HFILL }}, - { &hf_netlogon_restart_state, - { "Restart State", "netlogon.restart_state", FT_UINT16, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_restart_state, + { "Restart State", "netlogon.restart_state", FT_UINT16, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_delta_type, - { "Delta Type", "netlogon.delta_type", FT_UINT16, BASE_DEC, - VALS(delta_type_vals), 0x0, NULL, HFILL }}, + { &hf_netlogon_delta_type, + { "Delta Type", "netlogon.delta_type", FT_UINT16, BASE_DEC, + VALS(delta_type_vals), 0x0, NULL, HFILL }}, - { &hf_netlogon_blob_size, - { "Size", "netlogon.blob.size", FT_UINT32, BASE_DEC, - NULL, 0x0, "Size in bytes of BLOB", HFILL }}, + { &hf_netlogon_blob_size, + { "Size", "netlogon.blob.size", FT_UINT32, BASE_DEC, + NULL, 0x0, "Size in bytes of BLOB", HFILL }}, - { &hf_netlogon_code, - { "Code", "netlogon.code", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_code, + { "Code", "netlogon.code", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_level, - { "Level", "netlogon.level", FT_UINT32, BASE_DEC, - NULL, 0x0, "Which option of the union is represented here", HFILL }}, + { &hf_netlogon_level, + { "Level", "netlogon.level", FT_UINT32, BASE_DEC, + NULL, 0x0, "Which option of the union is represented here", HFILL }}, - { &hf_netlogon_reference, - { "Reference", "netlogon.reference", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_reference, + { "Reference", "netlogon.reference", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_next_reference, - { "Next Reference", "netlogon.next_reference", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_next_reference, + { "Next Reference", "netlogon.next_reference", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_timestamp, - { "Timestamp", "netlogon.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_timestamp, + { "Timestamp", "netlogon.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_user_rid, - { "User RID", "netlogon.rid", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_user_rid, + { "User RID", "netlogon.rid", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_alias_rid, - { "Alias RID", "netlogon.alias_rid", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_alias_rid, + { "Alias RID", "netlogon.alias_rid", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_group_rid, - { "Group RID", "netlogon.group_rid", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_group_rid, + { "Group RID", "netlogon.group_rid", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_num_rids, - { "Num RIDs", "netlogon.num_rids", FT_UINT32, BASE_DEC, - NULL, 0x0, "Number of RIDs", HFILL }}, + { &hf_netlogon_num_rids, + { "Num RIDs", "netlogon.num_rids", FT_UINT32, BASE_DEC, + NULL, 0x0, "Number of RIDs", HFILL }}, - { &hf_netlogon_num_controllers, - { "Num DCs", "netlogon.num_dc", FT_UINT32, BASE_DEC, - NULL, 0x0, "Number of domain controllers", HFILL }}, + { &hf_netlogon_num_controllers, + { "Num DCs", "netlogon.num_dc", FT_UINT32, BASE_DEC, + NULL, 0x0, "Number of domain controllers", HFILL }}, - { &hf_netlogon_num_sid, - { "Num Extra SID", "netlogon.num_sid", FT_UINT32, BASE_DEC, - NULL, 0x0, "", HFILL }}, + { &hf_netlogon_num_sid, + { "Num Extra SID", "netlogon.num_sid", FT_UINT32, BASE_DEC, + NULL, 0x0, "", HFILL }}, - { &hf_netlogon_flags, - { "Flags", "netlogon.flags", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_flags, + { "Flags", "netlogon.flags", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_user_account_control, - { "User Account Control", "netlogon.user_account_control", FT_UINT32, BASE_HEX, - NULL, 0x0, "User Account control", HFILL }}, + { &hf_netlogon_user_account_control, + { "User Account Control", "netlogon.user_account_control", FT_UINT32, BASE_HEX, + NULL, 0x0, "User Account control", HFILL }}, - { &hf_netlogon_user_flags, - { "User Flags", "netlogon.user_flags", FT_UINT32, BASE_HEX, - NULL, 0x0, "User flags", HFILL }}, + { &hf_netlogon_user_flags, + { "User Flags", "netlogon.user_flags", FT_UINT32, BASE_HEX, + NULL, 0x0, "User flags", HFILL }}, - { &hf_netlogon_auth_flags, - { "Auth Flags", "netlogon.auth_flags", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_auth_flags, + { "Auth Flags", "netlogon.auth_flags", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_systemflags, - { "System Flags", "netlogon.system_flags", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_systemflags, + { "System Flags", "netlogon.system_flags", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_database_id, - { "Database Id", "netlogon.database_id", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_database_id, + { "Database Id", "netlogon.database_id", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_sync_context, - { "Sync Context", "netlogon.sync_context", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_sync_context, + { "Sync Context", "netlogon.sync_context", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_max_size, - { "Max Size", "netlogon.max_size", FT_UINT32, BASE_DEC, - NULL, 0x0, "Max Size of database", HFILL }}, + { &hf_netlogon_max_size, + { "Max Size", "netlogon.max_size", FT_UINT32, BASE_DEC, + NULL, 0x0, "Max Size of database", HFILL }}, - { &hf_netlogon_max_log_size, - { "Max Log Size", "netlogon.max_log_size", FT_UINT32, BASE_DEC, - NULL, 0x0, "Max Size of log", HFILL }}, + { &hf_netlogon_max_log_size, + { "Max Log Size", "netlogon.max_log_size", FT_UINT32, BASE_DEC, + NULL, 0x0, "Max Size of log", HFILL }}, - { &hf_netlogon_pac_size, - { "Pac Size", "netlogon.pac.size", FT_UINT32, BASE_DEC, - NULL, 0x0, "Size of PacData in bytes", HFILL }}, + { &hf_netlogon_pac_size, + { "Pac Size", "netlogon.pac.size", FT_UINT32, BASE_DEC, + NULL, 0x0, "Size of PacData in bytes", HFILL }}, - { &hf_netlogon_auth_size, - { "Auth Size", "netlogon.auth.size", FT_UINT32, BASE_DEC, - NULL, 0x0, "Size of AuthData in bytes", HFILL }}, + { &hf_netlogon_auth_size, + { "Auth Size", "netlogon.auth.size", FT_UINT32, BASE_DEC, + NULL, 0x0, "Size of AuthData in bytes", HFILL }}, - { &hf_netlogon_num_deltas, - { "Num Deltas", "netlogon.num_deltas", FT_UINT32, BASE_DEC, - NULL, 0x0, "Number of SAM Deltas in array", HFILL }}, + { &hf_netlogon_num_deltas, + { "Num Deltas", "netlogon.num_deltas", FT_UINT32, BASE_DEC, + NULL, 0x0, "Number of SAM Deltas in array", HFILL }}, - { &hf_netlogon_num_trusts, - { "Num Trusts", "netlogon.num_trusts", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_num_trusts, + { "Num Trusts", "netlogon.num_trusts", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_logon_attempts, - { "Logon Attempts", "netlogon.logon_attempts", FT_UINT32, BASE_DEC, - NULL, 0x0, "Number of logon attempts", HFILL }}, + { &hf_netlogon_logon_attempts, + { "Logon Attempts", "netlogon.logon_attempts", FT_UINT32, BASE_DEC, + NULL, 0x0, "Number of logon attempts", HFILL }}, - { &hf_netlogon_pagefilelimit, - { "Page File Limit", "netlogon.page_file_limit", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_pagefilelimit, + { "Page File Limit", "netlogon.page_file_limit", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_pagedpoollimit, - { "Paged Pool Limit", "netlogon.paged_pool_limit", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_pagedpoollimit, + { "Paged Pool Limit", "netlogon.paged_pool_limit", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_nonpagedpoollimit, - { "Non-Paged Pool Limit", "netlogon.nonpaged_pool_limit", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_nonpagedpoollimit, + { "Non-Paged Pool Limit", "netlogon.nonpaged_pool_limit", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_minworkingsetsize, - { "Min Working Set Size", "netlogon.min_working_set_size", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_minworkingsetsize, + { "Min Working Set Size", "netlogon.min_working_set_size", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_maxworkingsetsize, - { "Max Working Set Size", "netlogon.max_working_set_size", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_maxworkingsetsize, + { "Max Working Set Size", "netlogon.max_working_set_size", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_serial_number, - { "Serial Number", "netlogon.serial_number", FT_UINT32, BASE_DEC, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_serial_number, + { "Serial Number", "netlogon.serial_number", FT_UINT32, BASE_DEC, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_neg_flags, - { "Negotiation options", "netlogon.neg_flags", FT_UINT32, BASE_HEX, - NULL, 0x0, "Negotiation Flags", HFILL }}, + { &hf_netlogon_neg_flags, + { "Negotiation options", "netlogon.neg_flags", FT_UINT32, BASE_HEX, + NULL, 0x0, "Negotiation Flags", HFILL }}, - { &hf_netlogon_neg_flags_80000000, - { "Not used 80000000", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_80000000, "Not used", HFILL }}, + { &hf_netlogon_neg_flags_80000000, + { "Not used 80000000", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_80000000, "Not used", HFILL }}, - { &hf_netlogon_neg_flags_40000000, - { "Authenticated RPC supported", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_40000000, "Authenticated RPC supported", HFILL }}, + { &hf_netlogon_neg_flags_40000000, + { "Authenticated RPC supported", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_40000000, "Authenticated RPC supported", HFILL }}, - { &hf_netlogon_neg_flags_20000000, - { "Authenticated RPC via lsass supported", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_20000000, "rpc via lsass", HFILL }}, + { &hf_netlogon_neg_flags_20000000, + { "Authenticated RPC via lsass supported", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_20000000, "rpc via lsass", HFILL }}, - { &hf_netlogon_neg_flags_10000000, - { "Not used 10000000", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_10000000, "Not used", HFILL }}, + { &hf_netlogon_neg_flags_10000000, + { "Not used 10000000", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_10000000, "Not used", HFILL }}, - { &hf_netlogon_neg_flags_8000000, - { "Not used 8000000", "ntlmssp.neg_flags.na800000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_8000000, "Not used", HFILL }}, + { &hf_netlogon_neg_flags_8000000, + { "Not used 8000000", "ntlmssp.neg_flags.na800000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_8000000, "Not used", HFILL }}, - { &hf_netlogon_neg_flags_4000000, - { "Not used 4000000", "ntlmssp.neg_flags.na400000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_4000000, "Not used", HFILL }}, + { &hf_netlogon_neg_flags_4000000, + { "Not used 4000000", "ntlmssp.neg_flags.na400000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_4000000, "Not used", HFILL }}, - { &hf_netlogon_neg_flags_2000000, - { "Not used 2000000", "ntlmssp.neg_flags.na200000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_2000000, "Not used", HFILL }}, + { &hf_netlogon_neg_flags_2000000, + { "Not used 2000000", "ntlmssp.neg_flags.na200000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_2000000, "Not used", HFILL }}, - { &hf_netlogon_neg_flags_1000000, - { "Not used 1000000", "ntlmssp.neg_flags.na100000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_1000000, "Not used", HFILL }}, + { &hf_netlogon_neg_flags_1000000, + { "Not used 1000000", "ntlmssp.neg_flags.na100000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_1000000, "Not used", HFILL }}, - { &hf_netlogon_neg_flags_800000, - { "Not used 800000", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_800000, "Not used", HFILL }}, + { &hf_netlogon_neg_flags_800000, + { "Not used 800000", "ntlmssp.neg_flags.na8000000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_800000, "Not used", HFILL }}, - { &hf_netlogon_neg_flags_400000, - { "AES & SHA2 supported", "ntlmssp.neg_flags.na400000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_USEAES, "AES&SHA2", HFILL }}, + { &hf_netlogon_neg_flags_400000, + { "AES & SHA2 supported", "ntlmssp.neg_flags.na400000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_USEAES, "AES&SHA2", HFILL }}, - { &hf_netlogon_neg_flags_200000, - { "RODC pass-through", "ntlmssp.neg_flags.na200000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_200000, "rodc pt", HFILL }}, + { &hf_netlogon_neg_flags_200000, + { "RODC pass-through", "ntlmssp.neg_flags.na200000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_200000, "rodc pt", HFILL }}, - { &hf_netlogon_neg_flags_100000, - { "NO NT4 emulation", "ntlmssp.neg_flags.na100000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_100000, "No NT4 emu", HFILL }}, + { &hf_netlogon_neg_flags_100000, + { "NO NT4 emulation", "ntlmssp.neg_flags.na100000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_100000, "No NT4 emu", HFILL }}, - { &hf_netlogon_neg_flags_80000, - { "Cross forest trust", "ntlmssp.neg_flags.na80000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_80000, "Cross forest trust", HFILL }}, + { &hf_netlogon_neg_flags_80000, + { "Cross forest trust", "ntlmssp.neg_flags.na80000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_80000, "Cross forest trust", HFILL }}, - { &hf_netlogon_neg_flags_40000, - { "GetDomainInfo supported", "ntlmssp.neg_flags.na40000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_40000, "GetDomainInfo", HFILL }}, + { &hf_netlogon_neg_flags_40000, + { "GetDomainInfo supported", "ntlmssp.neg_flags.na40000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_40000, "GetDomainInfo", HFILL }}, - { &hf_netlogon_neg_flags_20000, - { "ServerPasswordSet2 supported", "ntlmssp.neg_flags.na20000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_20000, "PasswordSet2", HFILL }}, + { &hf_netlogon_neg_flags_20000, + { "ServerPasswordSet2 supported", "ntlmssp.neg_flags.na20000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_20000, "PasswordSet2", HFILL }}, - { &hf_netlogon_neg_flags_10000, - { "DNS trusts supported", "ntlmssp.neg_flags.na10000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_10000, "DNS Trusts", HFILL }}, + { &hf_netlogon_neg_flags_10000, + { "DNS trusts supported", "ntlmssp.neg_flags.na10000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_10000, "DNS Trusts", HFILL }}, - { &hf_netlogon_neg_flags_8000, - { "Transitive trusts", "ntlmssp.neg_flags.na8000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_8000, "Transitive trust", HFILL }}, + { &hf_netlogon_neg_flags_8000, + { "Transitive trusts", "ntlmssp.neg_flags.na8000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_8000, "Transitive trust", HFILL }}, - { &hf_netlogon_neg_flags_4000, - { "Strong key", "ntlmssp.neg_flags.na4000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_STRONGKEY, "Strong key", HFILL }}, + { &hf_netlogon_neg_flags_4000, + { "Strong key", "ntlmssp.neg_flags.na4000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_STRONGKEY, "Strong key", HFILL }}, - { &hf_netlogon_neg_flags_2000, - { "Avoid replication Auth database", "ntlmssp.neg_flags.na2000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_2000, "Avoid replication auth database", HFILL }}, + { &hf_netlogon_neg_flags_2000, + { "Avoid replication Auth database", "ntlmssp.neg_flags.na2000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_2000, "Avoid replication auth database", HFILL }}, - { &hf_netlogon_neg_flags_1000, - { "Avoid replication account database", "ntlmssp.neg_flags.na1000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_1000, "Avoid replication account database", HFILL }}, + { &hf_netlogon_neg_flags_1000, + { "Avoid replication account database", "ntlmssp.neg_flags.na1000", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_1000, "Avoid replication account database", HFILL }}, - { &hf_netlogon_neg_flags_800, - { "Concurent RPC", "ntlmssp.neg_flags.na800", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_800, "Concurent RPC", HFILL }}, + { &hf_netlogon_neg_flags_800, + { "Concurent RPC", "ntlmssp.neg_flags.na800", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_800, "Concurent RPC", HFILL }}, - { &hf_netlogon_neg_flags_400, - { "Generic pass-through", "ntlmssp.neg_flags.na400", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_400, "Generic pass-through", HFILL }}, + { &hf_netlogon_neg_flags_400, + { "Generic pass-through", "ntlmssp.neg_flags.na400", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_400, "Generic pass-through", HFILL }}, - { &hf_netlogon_neg_flags_200, - { "SendToSam", "ntlmssp.neg_flags.na200", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_200, "SendToSam", HFILL }}, + { &hf_netlogon_neg_flags_200, + { "SendToSam", "ntlmssp.neg_flags.na200", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_200, "SendToSam", HFILL }}, - { &hf_netlogon_neg_flags_100, - { "Refusal of password change", "ntlmssp.neg_flags.na100", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_100, "PWD change refusal", HFILL }}, + { &hf_netlogon_neg_flags_100, + { "Refusal of password change", "ntlmssp.neg_flags.na100", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_100, "PWD change refusal", HFILL }}, - { &hf_netlogon_neg_flags_80, - { "DatabaseRedo call", "ntlmssp.neg_flags.na80", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_80, "DatabaseRedo call", HFILL }}, + { &hf_netlogon_neg_flags_80, + { "DatabaseRedo call", "ntlmssp.neg_flags.na80", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_80, "DatabaseRedo call", HFILL }}, - { &hf_netlogon_neg_flags_40, - { "Handle multiple SIDs", "ntlmssp.neg_flags.na40", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_40, "Handle multiple SIDs", HFILL }}, + { &hf_netlogon_neg_flags_40, + { "Handle multiple SIDs", "ntlmssp.neg_flags.na40", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_40, "Handle multiple SIDs", HFILL }}, - { &hf_netlogon_neg_flags_20, - { "Restarting full DC sync", "ntlmssp.neg_flags.na20", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_20, "Restarting full DC sync", HFILL }}, + { &hf_netlogon_neg_flags_20, + { "Restarting full DC sync", "ntlmssp.neg_flags.na20", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_20, "Restarting full DC sync", HFILL }}, - { &hf_netlogon_neg_flags_10, - { "BDC handling Changelogs", "ntlmssp.neg_flags.na10", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_10, "BDC Changelog", HFILL }}, + { &hf_netlogon_neg_flags_10, + { "BDC handling Changelogs", "ntlmssp.neg_flags.na10", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_10, "BDC Changelog", HFILL }}, - { &hf_netlogon_neg_flags_8, - { "Promotion count(deprecated)", "ntlmssp.neg_flags.na8", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_8, "Promotion count", HFILL }}, + { &hf_netlogon_neg_flags_8, + { "Promotion count(deprecated)", "ntlmssp.neg_flags.na8", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_8, "Promotion count", HFILL }}, - { &hf_netlogon_neg_flags_4, - { "RC4 encryption", "ntlmssp.neg_flags.na4", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_4, "RC4", HFILL }}, + { &hf_netlogon_neg_flags_4, + { "RC4 encryption", "ntlmssp.neg_flags.na4", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_4, "RC4", HFILL }}, - { &hf_netlogon_neg_flags_2, - { "NT3.5 BDC continious update", "ntlmssp.neg_flags.na2", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_2, "NT3.5", HFILL }}, + { &hf_netlogon_neg_flags_2, + { "NT3.5 BDC continious update", "ntlmssp.neg_flags.na2", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_2, "NT3.5", HFILL }}, - { &hf_netlogon_neg_flags_1, - { "Account lockout", "ntlmssp.neg_flags.na1", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_1, "Account lockout", HFILL }}, + { &hf_netlogon_neg_flags_1, + { "Account lockout", "ntlmssp.neg_flags.na1", FT_BOOLEAN, 32, TFS(&tfs_set_notset), NETLOGON_FLAG_1, "Account lockout", HFILL }}, - { &hf_netlogon_dc_flags, - { "Domain Controller Flags", "netlogon.dc.flags", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_dc_flags, + { "Domain Controller Flags", "netlogon.dc.flags", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_dc_flags_pdc_flag, - { "PDC", "netlogon.dc.flags.pdc", - FT_BOOLEAN, 32, TFS(&dc_flags_pdc_flag), DS_PDC_FLAG, - "If this server is a PDC", HFILL }}, + { &hf_netlogon_dc_flags_pdc_flag, + { "PDC", "netlogon.dc.flags.pdc", + FT_BOOLEAN, 32, TFS(&dc_flags_pdc_flag), DS_PDC_FLAG, + "If this server is a PDC", HFILL }}, - { &hf_netlogon_dc_flags_gc_flag, - { "GC", "netlogon.dc.flags.gc", - FT_BOOLEAN, 32, TFS(&dc_flags_gc_flag), DS_GC_FLAG, - "If this server is a GC", HFILL }}, + { &hf_netlogon_dc_flags_gc_flag, + { "GC", "netlogon.dc.flags.gc", + FT_BOOLEAN, 32, TFS(&dc_flags_gc_flag), DS_GC_FLAG, + "If this server is a GC", HFILL }}, - { &hf_netlogon_dc_flags_ldap_flag, - { "LDAP", "netlogon.dc.flags.ldap", - FT_BOOLEAN, 32, TFS(&dc_flags_ldap_flag), DS_LDAP_FLAG, - "If this is an LDAP server", HFILL }}, + { &hf_netlogon_dc_flags_ldap_flag, + { "LDAP", "netlogon.dc.flags.ldap", + FT_BOOLEAN, 32, TFS(&dc_flags_ldap_flag), DS_LDAP_FLAG, + "If this is an LDAP server", HFILL }}, - { &hf_netlogon_dc_flags_ds_flag, - { "DS", "netlogon.dc.flags.ds", - FT_BOOLEAN, 32, TFS(&dc_flags_ds_flag), DS_DS_FLAG, - "If this server is a DS", HFILL }}, + { &hf_netlogon_dc_flags_ds_flag, + { "DS", "netlogon.dc.flags.ds", + FT_BOOLEAN, 32, TFS(&dc_flags_ds_flag), DS_DS_FLAG, + "If this server is a DS", HFILL }}, - { &hf_netlogon_dc_flags_kdc_flag, - { "KDC", "netlogon.dc.flags.kdc", - FT_BOOLEAN, 32, TFS(&dc_flags_kdc_flag), DS_KDC_FLAG, - "If this is a KDC", HFILL }}, + { &hf_netlogon_dc_flags_kdc_flag, + { "KDC", "netlogon.dc.flags.kdc", + FT_BOOLEAN, 32, TFS(&dc_flags_kdc_flag), DS_KDC_FLAG, + "If this is a KDC", HFILL }}, - { &hf_netlogon_dc_flags_timeserv_flag, - { "Timeserv", "netlogon.dc.flags.timeserv", - FT_BOOLEAN, 32, TFS(&dc_flags_timeserv_flag), DS_TIMESERV_FLAG, - "If this server is a TimeServer", HFILL }}, - - { &hf_netlogon_dc_flags_closest_flag, - { "Closest", "netlogon.dc.flags.closest", - FT_BOOLEAN, 32, TFS(&dc_flags_closest_flag), DS_CLOSEST_FLAG, - "If this is the closest server", HFILL }}, - - { &hf_netlogon_dc_flags_writable_flag, - { "Writable", "netlogon.dc.flags.writable", - FT_BOOLEAN, 32, TFS(&dc_flags_writable_flag), DS_WRITABLE_FLAG, - "If this server can do updates to the database", HFILL }}, - - { &hf_netlogon_dc_flags_good_timeserv_flag, - { "Good Timeserv", "netlogon.dc.flags.good_timeserv", - FT_BOOLEAN, 32, TFS(&dc_flags_good_timeserv_flag), DS_GOOD_TIMESERV_FLAG, - "If this is a Good TimeServer", HFILL }}, - - { &hf_netlogon_dc_flags_ndnc_flag, - { "NDNC", "netlogon.dc.flags.ndnc", - FT_BOOLEAN, 32, TFS(&dc_flags_ndnc_flag), DS_NDNC_FLAG, - "If this is an NDNC server", HFILL }}, - - { &hf_netlogon_dc_flags_dns_controller_flag, - { "DNS Controller", "netlogon.dc.flags.dns_controller", - FT_BOOLEAN, 32, TFS(&dc_flags_dns_controller_flag), DS_DNS_CONTROLLER_FLAG, - "If this server is a DNS Controller", HFILL }}, - - { &hf_netlogon_dc_flags_dns_domain_flag, - { "DNS Domain", "netlogon.dc.flags.dns_domain", - FT_BOOLEAN, 32, TFS(&dc_flags_dns_domain_flag), DS_DNS_DOMAIN_FLAG, - NULL, HFILL }}, - - { &hf_netlogon_dc_flags_dns_forest_flag, - { "DNS Forest", "netlogon.dc.flags.dns_forest", - FT_BOOLEAN, 32, TFS(&dc_flags_dns_forest_flag), DS_DNS_FOREST_FLAG, - NULL, HFILL }}, - - { &hf_netlogon_get_dcname_request_flags, - { "Flags", "netlogon.get_dcname.request.flags", FT_UINT32, BASE_HEX, - NULL, 0x0, "Flags for DSGetDCName request", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_force_rediscovery, - { "Force Rediscovery", "netlogon.get_dcname.request.flags.force_rediscovery", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_force_rediscovery), DS_FORCE_REDISCOVERY, - "Whether to allow the server to returned cached information or not", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_directory_service_required, - { "DS Required", "netlogon.get_dcname.request.flags.ds_required", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_directory_service_required), DS_DIRECTORY_SERVICE_REQUIRED, - "Whether we require that the returned DC supports w2k or not", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_directory_service_preferred, - { "DS Preferred", "netlogon.get_dcname.request.flags.ds_preferred", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_directory_service_preferred), DS_DIRECTORY_SERVICE_PREFERRED, - "Whether we prefer the call to return a w2k server (if available)", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_gc_server_required, - { "GC Required", "netlogon.get_dcname.request.flags.gc_server_required", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_gc_server_required), DS_GC_SERVER_REQUIRED, - "Whether we require that the returned DC is a Global Catalog server", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_pdc_required, - { "PDC Required", "netlogon.get_dcname.request.flags.pdc_required", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_pdc_required), DS_PDC_REQUIRED, - "Whether we require the returned DC to be the PDC", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_background_only, - { "Background Only", "netlogon.get_dcname.request.flags.background_only", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_background_only), DS_BACKGROUND_ONLY, - "If we want cached data, even if it may have expired", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_ip_required, - { "IP Required", "netlogon.get_dcname.request.flags.ip_required", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_ip_required), DS_IP_REQUIRED, - "If we requre the IP of the DC in the reply", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_kdc_required, - { "KDC Required", "netlogon.get_dcname.request.flags.kdc_required", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_kdc_required), DS_KDC_REQUIRED, - "If we require that the returned server is a KDC", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_timeserv_required, - { "Timeserv Required", "netlogon.get_dcname.request.flags.timeserv_required", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_timeserv_required), DS_TIMESERV_REQUIRED, - "If we require the returned server to be a WindowsTimeServ server", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_writable_required, - { "Writable Required", "netlogon.get_dcname.request.flags.writable_required", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_writable_required), DS_WRITABLE_REQUIRED, - "If we require that the returned server is writable", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_good_timeserv_preferred, - { "Timeserv Preferred", "netlogon.get_dcname.request.flags.good_timeserv_preferred", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_good_timeserv_preferred), DS_GOOD_TIMESERV_PREFERRED, - "If we prefer Windows Time Servers", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_avoid_self, - { "Avoid Self", "netlogon.get_dcname.request.flags.avoid_self", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_avoid_self), DS_AVOID_SELF, - "Return another DC than the one we ask", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_only_ldap_needed, - { "Only LDAP Needed", "netlogon.get_dcname.request.flags.only_ldap_needed", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_only_ldap_needed), DS_ONLY_LDAP_NEEDED, - "We just want an LDAP server, it does not have to be a DC", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_is_flat_name, - { "Is Flat Name", "netlogon.get_dcname.request.flags.is_flat_name", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_is_flat_name), DS_IS_FLAT_NAME, - "If the specified domain name is a NetBIOS name", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_is_dns_name, - { "Is DNS Name", "netlogon.get_dcname.request.flags.is_dns_name", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_is_dns_name), DS_IS_DNS_NAME, - "If the specified domain name is a DNS name", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_return_dns_name, - { "Return DNS Name", "netlogon.get_dcname.request.flags.return_dns_name", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_return_dns_name), DS_RETURN_DNS_NAME, - "Only return a DNS name (or an error)", HFILL }}, - - { &hf_netlogon_get_dcname_request_flags_return_flat_name, - { "Return Flat Name", "netlogon.get_dcname.request.flags.return_flat_name", - FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_return_flat_name), DS_RETURN_FLAT_NAME, - "Only return a NetBIOS name (or an error)", HFILL }}, - - { &hf_netlogon_trust_attribs, - { "Trust Attributes", "netlogon.trust_attribs", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, - - { &hf_netlogon_trust_attribs_non_transitive, - { "Non Transitive", "netlogon.trust.attribs.non_transitive", FT_BOOLEAN, 32, - TFS(&trust_attribs_non_transitive), 0x00000001, NULL, HFILL }}, - - { &hf_netlogon_trust_attribs_uplevel_only, - { "Uplevel Only", "netlogon.trust.attribs.uplevel_only", FT_BOOLEAN, 32, - TFS(&trust_attribs_uplevel_only), 0x00000002, NULL, HFILL }}, - - { &hf_netlogon_trust_attribs_quarantined_domain, - { "Quarantined Domain", "netlogon.trust.attribs.quarantined_domain", FT_BOOLEAN, 32, - TFS(&trust_attribs_quarantined_domain), 0x00000004, NULL, HFILL }}, - - { &hf_netlogon_trust_attribs_forest_transitive, - { "Forest Transitive", "netlogon.trust.attribs.forest_transitive", FT_BOOLEAN, 32, - TFS(&trust_attribs_forest_transitive), 0x00000008, NULL, HFILL }}, - - { &hf_netlogon_trust_attribs_cross_organization, - { "Cross Organization", "netlogon.trust.attribs.cross_organization", FT_BOOLEAN, 32, - TFS(&trust_attribs_cross_organization), 0x00000010, NULL, HFILL }}, - - { &hf_netlogon_trust_attribs_within_forest, - { "Within Forest", "netlogon.trust.attribs.within_forest", FT_BOOLEAN, 32, - TFS(&trust_attribs_within_forest), 0x00000020, NULL, HFILL }}, - - { &hf_netlogon_trust_attribs_treat_as_external, - { "Treat As External", "netlogon.trust.attribs.treat_as_external", FT_BOOLEAN, 32, - TFS(&trust_attribs_treat_as_external), 0x00000040, NULL, HFILL }}, - - { &hf_netlogon_trust_type, - { "Trust Type", "netlogon.trust_type", FT_UINT32, BASE_DEC, - VALS(trust_type_vals), 0x0, NULL, HFILL }}, - - { &hf_netlogon_extraflags, - { "Extra Flags", "netlogon.extra_flags", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, - - { &hf_netlogon_extra_flags_root_forest, - { "Request passed to DC of root forest", "netlogon.extra.flags.rootdc", - FT_BOOLEAN, 32, TFS(&tfs_set_notset), RQ_ROOT_FOREST, - NULL, HFILL }}, - - { &hf_netlogon_trust_flags_dc_firsthop, - { " DC at the end of the first hop of cross forest", "netlogon.extra.flags.dc_firsthop", - FT_BOOLEAN, 32, TFS(&tfs_set_notset), RQ_DC_XFOREST, - NULL, HFILL }}, - - { &hf_netlogon_trust_flags_rodc_to_dc, - { "Request from a RODC to a DC from another domain", "netlogon.extra.flags.rodc_to_dc", - FT_BOOLEAN, 32, TFS(&tfs_set_notset), RQ_RODC_DIF_DOMAIN, - NULL, HFILL }}, - - { &hf_netlogon_trust_flags_rodc_ntlm, - { "Request is a NTLM auth passed by a RODC", "netlogon.extra.flags.rodc_ntlm", - FT_BOOLEAN, 32, TFS(&tfs_set_notset), RQ_NTLM_FROM_RODC, - NULL, HFILL }}, - - { &hf_netlogon_trust_flags, - { "Trust Flags", "netlogon.trust_flags", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, - - { &hf_netlogon_trust_flags_inbound, - { "Inbound Trust", "netlogon.trust.flags.inbound", - FT_BOOLEAN, 32, TFS(&trust_inbound), DS_DOMAIN_DIRECT_INBOUND, - "Inbound trust. Whether the domain directly trusts the queried servers domain", HFILL }}, - - { &hf_netlogon_trust_flags_outbound, - { "Outbound Trust", "netlogon.trust.flags.outbound", - FT_BOOLEAN, 32, TFS(&trust_outbound), DS_DOMAIN_DIRECT_OUTBOUND, - "Outbound Trust. Whether the domain is directly trusted by the servers domain", HFILL }}, - - { &hf_netlogon_trust_flags_in_forest, - { "In Forest", "netlogon.trust.flags.in_forest", - FT_BOOLEAN, 32, TFS(&trust_in_forest), DS_DOMAIN_IN_FOREST, - "Whether this domain is a member of the same forest as the servers domain", HFILL }}, - - { &hf_netlogon_trust_flags_native_mode, - { "Native Mode", "netlogon.trust.flags.native_mode", - FT_BOOLEAN, 32, TFS(&trust_native_mode), DS_DOMAIN_NATIVE_MODE, - "Whether the domain is a w2k native mode domain or not", HFILL }}, - - { &hf_netlogon_trust_flags_primary, - { "Primary", "netlogon.trust.flags.primary", - FT_BOOLEAN, 32, TFS(&trust_primary), DS_DOMAIN_PRIMARY, - "Whether the domain is the primary domain for the queried server or not", HFILL }}, - - { &hf_netlogon_trust_flags_tree_root, - { "Tree Root", "netlogon.trust.flags.tree_root", - FT_BOOLEAN, 32, TFS(&trust_tree_root), DS_DOMAIN_TREE_ROOT, - "Whether the domain is the root of the tree for the queried server", HFILL }}, - - { &hf_netlogon_trust_parent_index, - { "Parent Index", "netlogon.parent_index", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, - - { &hf_netlogon_logon_time, - { "Logon Time", "netlogon.logon_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time for last time this user logged on", HFILL }}, - - { &hf_netlogon_kickoff_time, - { "Kickoff Time", "netlogon.kickoff_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time when this user will be kicked off", HFILL }}, - - { &hf_netlogon_logoff_time, - { "Logoff Time", "netlogon.logoff_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time for last time this user logged off", HFILL }}, - - { &hf_netlogon_last_logoff_time, - { "Last Logoff Time", "netlogon.last_logoff_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time for last time this user logged off", HFILL }}, - - { &hf_netlogon_pwd_last_set_time, - { "PWD Last Set", "netlogon.pwd_last_set_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Last time this users password was changed", HFILL }}, - - { &hf_netlogon_pwd_age, - { "PWD Age", "netlogon.pwd_age", FT_RELATIVE_TIME, BASE_NONE, - NULL, 0, "Time since this users password was changed", HFILL }}, - - { &hf_netlogon_pwd_can_change_time, - { "PWD Can Change", "netlogon.pwd_can_change_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "When this users password may be changed", HFILL }}, - - { &hf_netlogon_pwd_must_change_time, - { "PWD Must Change", "netlogon.pwd_must_change_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "When this users password must be changed", HFILL }}, - - { &hf_netlogon_domain_create_time, - { "Domain Create Time", "netlogon.domain_create_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time when this domain was created", HFILL }}, - - { &hf_netlogon_domain_modify_time, - { "Domain Modify Time", "netlogon.domain_modify_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time when this domain was last modified", HFILL }}, - - { &hf_netlogon_db_modify_time, - { "DB Modify Time", "netlogon.db_modify_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time when last modified", HFILL }}, - - { &hf_netlogon_db_create_time, - { "DB Create Time", "netlogon.db_create_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time when created", HFILL }}, - - { &hf_netlogon_cipher_current_set_time, - { "Cipher Current Set Time", "netlogon.cipher_current_set_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time when current cipher was initiated", HFILL }}, - - { &hf_netlogon_cipher_old_set_time, - { "Cipher Old Set Time", "netlogon.cipher_old_set_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, - NULL, 0, "Time when previous cipher was initiated", HFILL }}, - - { &hf_netlogon_audit_retention_period, - { "Audit Retention Period", "netlogon.audit_retention_period", FT_RELATIVE_TIME, BASE_NONE, - NULL, 0, "Audit retention period", HFILL }}, - - { &hf_netlogon_timelimit, - { "Time Limit", "netlogon.time_limit", FT_RELATIVE_TIME, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_dc_flags_timeserv_flag, + { "Timeserv", "netlogon.dc.flags.timeserv", + FT_BOOLEAN, 32, TFS(&dc_flags_timeserv_flag), DS_TIMESERV_FLAG, + "If this server is a TimeServer", HFILL }}, + + { &hf_netlogon_dc_flags_closest_flag, + { "Closest", "netlogon.dc.flags.closest", + FT_BOOLEAN, 32, TFS(&dc_flags_closest_flag), DS_CLOSEST_FLAG, + "If this is the closest server", HFILL }}, + + { &hf_netlogon_dc_flags_writable_flag, + { "Writable", "netlogon.dc.flags.writable", + FT_BOOLEAN, 32, TFS(&dc_flags_writable_flag), DS_WRITABLE_FLAG, + "If this server can do updates to the database", HFILL }}, + + { &hf_netlogon_dc_flags_good_timeserv_flag, + { "Good Timeserv", "netlogon.dc.flags.good_timeserv", + FT_BOOLEAN, 32, TFS(&dc_flags_good_timeserv_flag), DS_GOOD_TIMESERV_FLAG, + "If this is a Good TimeServer", HFILL }}, + + { &hf_netlogon_dc_flags_ndnc_flag, + { "NDNC", "netlogon.dc.flags.ndnc", + FT_BOOLEAN, 32, TFS(&dc_flags_ndnc_flag), DS_NDNC_FLAG, + "If this is an NDNC server", HFILL }}, + + { &hf_netlogon_dc_flags_dns_controller_flag, + { "DNS Controller", "netlogon.dc.flags.dns_controller", + FT_BOOLEAN, 32, TFS(&dc_flags_dns_controller_flag), DS_DNS_CONTROLLER_FLAG, + "If this server is a DNS Controller", HFILL }}, + + { &hf_netlogon_dc_flags_dns_domain_flag, + { "DNS Domain", "netlogon.dc.flags.dns_domain", + FT_BOOLEAN, 32, TFS(&dc_flags_dns_domain_flag), DS_DNS_DOMAIN_FLAG, + NULL, HFILL }}, + + { &hf_netlogon_dc_flags_dns_forest_flag, + { "DNS Forest", "netlogon.dc.flags.dns_forest", + FT_BOOLEAN, 32, TFS(&dc_flags_dns_forest_flag), DS_DNS_FOREST_FLAG, + NULL, HFILL }}, + + { &hf_netlogon_get_dcname_request_flags, + { "Flags", "netlogon.get_dcname.request.flags", FT_UINT32, BASE_HEX, + NULL, 0x0, "Flags for DSGetDCName request", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_force_rediscovery, + { "Force Rediscovery", "netlogon.get_dcname.request.flags.force_rediscovery", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_force_rediscovery), DS_FORCE_REDISCOVERY, + "Whether to allow the server to returned cached information or not", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_directory_service_required, + { "DS Required", "netlogon.get_dcname.request.flags.ds_required", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_directory_service_required), DS_DIRECTORY_SERVICE_REQUIRED, + "Whether we require that the returned DC supports w2k or not", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_directory_service_preferred, + { "DS Preferred", "netlogon.get_dcname.request.flags.ds_preferred", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_directory_service_preferred), DS_DIRECTORY_SERVICE_PREFERRED, + "Whether we prefer the call to return a w2k server (if available)", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_gc_server_required, + { "GC Required", "netlogon.get_dcname.request.flags.gc_server_required", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_gc_server_required), DS_GC_SERVER_REQUIRED, + "Whether we require that the returned DC is a Global Catalog server", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_pdc_required, + { "PDC Required", "netlogon.get_dcname.request.flags.pdc_required", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_pdc_required), DS_PDC_REQUIRED, + "Whether we require the returned DC to be the PDC", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_background_only, + { "Background Only", "netlogon.get_dcname.request.flags.background_only", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_background_only), DS_BACKGROUND_ONLY, + "If we want cached data, even if it may have expired", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_ip_required, + { "IP Required", "netlogon.get_dcname.request.flags.ip_required", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_ip_required), DS_IP_REQUIRED, + "If we requre the IP of the DC in the reply", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_kdc_required, + { "KDC Required", "netlogon.get_dcname.request.flags.kdc_required", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_kdc_required), DS_KDC_REQUIRED, + "If we require that the returned server is a KDC", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_timeserv_required, + { "Timeserv Required", "netlogon.get_dcname.request.flags.timeserv_required", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_timeserv_required), DS_TIMESERV_REQUIRED, + "If we require the returned server to be a WindowsTimeServ server", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_writable_required, + { "Writable Required", "netlogon.get_dcname.request.flags.writable_required", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_writable_required), DS_WRITABLE_REQUIRED, + "If we require that the returned server is writable", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_good_timeserv_preferred, + { "Timeserv Preferred", "netlogon.get_dcname.request.flags.good_timeserv_preferred", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_good_timeserv_preferred), DS_GOOD_TIMESERV_PREFERRED, + "If we prefer Windows Time Servers", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_avoid_self, + { "Avoid Self", "netlogon.get_dcname.request.flags.avoid_self", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_avoid_self), DS_AVOID_SELF, + "Return another DC than the one we ask", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_only_ldap_needed, + { "Only LDAP Needed", "netlogon.get_dcname.request.flags.only_ldap_needed", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_only_ldap_needed), DS_ONLY_LDAP_NEEDED, + "We just want an LDAP server, it does not have to be a DC", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_is_flat_name, + { "Is Flat Name", "netlogon.get_dcname.request.flags.is_flat_name", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_is_flat_name), DS_IS_FLAT_NAME, + "If the specified domain name is a NetBIOS name", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_is_dns_name, + { "Is DNS Name", "netlogon.get_dcname.request.flags.is_dns_name", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_is_dns_name), DS_IS_DNS_NAME, + "If the specified domain name is a DNS name", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_return_dns_name, + { "Return DNS Name", "netlogon.get_dcname.request.flags.return_dns_name", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_return_dns_name), DS_RETURN_DNS_NAME, + "Only return a DNS name (or an error)", HFILL }}, + + { &hf_netlogon_get_dcname_request_flags_return_flat_name, + { "Return Flat Name", "netlogon.get_dcname.request.flags.return_flat_name", + FT_BOOLEAN, 32, TFS(&get_dcname_request_flags_return_flat_name), DS_RETURN_FLAT_NAME, + "Only return a NetBIOS name (or an error)", HFILL }}, + + { &hf_netlogon_trust_attribs, + { "Trust Attributes", "netlogon.trust_attribs", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, + + { &hf_netlogon_trust_attribs_non_transitive, + { "Non Transitive", "netlogon.trust.attribs.non_transitive", FT_BOOLEAN, 32, + TFS(&trust_attribs_non_transitive), 0x00000001, NULL, HFILL }}, + + { &hf_netlogon_trust_attribs_uplevel_only, + { "Uplevel Only", "netlogon.trust.attribs.uplevel_only", FT_BOOLEAN, 32, + TFS(&trust_attribs_uplevel_only), 0x00000002, NULL, HFILL }}, + + { &hf_netlogon_trust_attribs_quarantined_domain, + { "Quarantined Domain", "netlogon.trust.attribs.quarantined_domain", FT_BOOLEAN, 32, + TFS(&trust_attribs_quarantined_domain), 0x00000004, NULL, HFILL }}, + + { &hf_netlogon_trust_attribs_forest_transitive, + { "Forest Transitive", "netlogon.trust.attribs.forest_transitive", FT_BOOLEAN, 32, + TFS(&trust_attribs_forest_transitive), 0x00000008, NULL, HFILL }}, + + { &hf_netlogon_trust_attribs_cross_organization, + { "Cross Organization", "netlogon.trust.attribs.cross_organization", FT_BOOLEAN, 32, + TFS(&trust_attribs_cross_organization), 0x00000010, NULL, HFILL }}, + + { &hf_netlogon_trust_attribs_within_forest, + { "Within Forest", "netlogon.trust.attribs.within_forest", FT_BOOLEAN, 32, + TFS(&trust_attribs_within_forest), 0x00000020, NULL, HFILL }}, + + { &hf_netlogon_trust_attribs_treat_as_external, + { "Treat As External", "netlogon.trust.attribs.treat_as_external", FT_BOOLEAN, 32, + TFS(&trust_attribs_treat_as_external), 0x00000040, NULL, HFILL }}, + + { &hf_netlogon_trust_type, + { "Trust Type", "netlogon.trust_type", FT_UINT32, BASE_DEC, + VALS(trust_type_vals), 0x0, NULL, HFILL }}, + + { &hf_netlogon_extraflags, + { "Extra Flags", "netlogon.extra_flags", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, + + { &hf_netlogon_extra_flags_root_forest, + { "Request passed to DC of root forest", "netlogon.extra.flags.rootdc", + FT_BOOLEAN, 32, TFS(&tfs_set_notset), RQ_ROOT_FOREST, + NULL, HFILL }}, + + { &hf_netlogon_trust_flags_dc_firsthop, + { " DC at the end of the first hop of cross forest", "netlogon.extra.flags.dc_firsthop", + FT_BOOLEAN, 32, TFS(&tfs_set_notset), RQ_DC_XFOREST, + NULL, HFILL }}, + + { &hf_netlogon_trust_flags_rodc_to_dc, + { "Request from a RODC to a DC from another domain", "netlogon.extra.flags.rodc_to_dc", + FT_BOOLEAN, 32, TFS(&tfs_set_notset), RQ_RODC_DIF_DOMAIN, + NULL, HFILL }}, + + { &hf_netlogon_trust_flags_rodc_ntlm, + { "Request is a NTLM auth passed by a RODC", "netlogon.extra.flags.rodc_ntlm", + FT_BOOLEAN, 32, TFS(&tfs_set_notset), RQ_NTLM_FROM_RODC, + NULL, HFILL }}, + + { &hf_netlogon_trust_flags, + { "Trust Flags", "netlogon.trust_flags", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, + + { &hf_netlogon_trust_flags_inbound, + { "Inbound Trust", "netlogon.trust.flags.inbound", + FT_BOOLEAN, 32, TFS(&trust_inbound), DS_DOMAIN_DIRECT_INBOUND, + "Inbound trust. Whether the domain directly trusts the queried servers domain", HFILL }}, + + { &hf_netlogon_trust_flags_outbound, + { "Outbound Trust", "netlogon.trust.flags.outbound", + FT_BOOLEAN, 32, TFS(&trust_outbound), DS_DOMAIN_DIRECT_OUTBOUND, + "Outbound Trust. Whether the domain is directly trusted by the servers domain", HFILL }}, + + { &hf_netlogon_trust_flags_in_forest, + { "In Forest", "netlogon.trust.flags.in_forest", + FT_BOOLEAN, 32, TFS(&trust_in_forest), DS_DOMAIN_IN_FOREST, + "Whether this domain is a member of the same forest as the servers domain", HFILL }}, + + { &hf_netlogon_trust_flags_native_mode, + { "Native Mode", "netlogon.trust.flags.native_mode", + FT_BOOLEAN, 32, TFS(&trust_native_mode), DS_DOMAIN_NATIVE_MODE, + "Whether the domain is a w2k native mode domain or not", HFILL }}, + + { &hf_netlogon_trust_flags_primary, + { "Primary", "netlogon.trust.flags.primary", + FT_BOOLEAN, 32, TFS(&trust_primary), DS_DOMAIN_PRIMARY, + "Whether the domain is the primary domain for the queried server or not", HFILL }}, + + { &hf_netlogon_trust_flags_tree_root, + { "Tree Root", "netlogon.trust.flags.tree_root", + FT_BOOLEAN, 32, TFS(&trust_tree_root), DS_DOMAIN_TREE_ROOT, + "Whether the domain is the root of the tree for the queried server", HFILL }}, + + { &hf_netlogon_trust_parent_index, + { "Parent Index", "netlogon.parent_index", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, + + { &hf_netlogon_logon_time, + { "Logon Time", "netlogon.logon_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time for last time this user logged on", HFILL }}, + + { &hf_netlogon_kickoff_time, + { "Kickoff Time", "netlogon.kickoff_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time when this user will be kicked off", HFILL }}, + + { &hf_netlogon_logoff_time, + { "Logoff Time", "netlogon.logoff_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time for last time this user logged off", HFILL }}, + + { &hf_netlogon_last_logoff_time, + { "Last Logoff Time", "netlogon.last_logoff_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time for last time this user logged off", HFILL }}, + + { &hf_netlogon_pwd_last_set_time, + { "PWD Last Set", "netlogon.pwd_last_set_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Last time this users password was changed", HFILL }}, + + { &hf_netlogon_pwd_age, + { "PWD Age", "netlogon.pwd_age", FT_RELATIVE_TIME, BASE_NONE, + NULL, 0, "Time since this users password was changed", HFILL }}, + + { &hf_netlogon_pwd_can_change_time, + { "PWD Can Change", "netlogon.pwd_can_change_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "When this users password may be changed", HFILL }}, + + { &hf_netlogon_pwd_must_change_time, + { "PWD Must Change", "netlogon.pwd_must_change_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "When this users password must be changed", HFILL }}, + + { &hf_netlogon_domain_create_time, + { "Domain Create Time", "netlogon.domain_create_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time when this domain was created", HFILL }}, + + { &hf_netlogon_domain_modify_time, + { "Domain Modify Time", "netlogon.domain_modify_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time when this domain was last modified", HFILL }}, + + { &hf_netlogon_db_modify_time, + { "DB Modify Time", "netlogon.db_modify_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time when last modified", HFILL }}, + + { &hf_netlogon_db_create_time, + { "DB Create Time", "netlogon.db_create_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time when created", HFILL }}, + + { &hf_netlogon_cipher_current_set_time, + { "Cipher Current Set Time", "netlogon.cipher_current_set_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time when current cipher was initiated", HFILL }}, + + { &hf_netlogon_cipher_old_set_time, + { "Cipher Old Set Time", "netlogon.cipher_old_set_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, + NULL, 0, "Time when previous cipher was initiated", HFILL }}, + + { &hf_netlogon_audit_retention_period, + { "Audit Retention Period", "netlogon.audit_retention_period", FT_RELATIVE_TIME, BASE_NONE, + NULL, 0, "Audit retention period", HFILL }}, + + { &hf_netlogon_timelimit, + { "Time Limit", "netlogon.time_limit", FT_RELATIVE_TIME, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_client_credential, - { "Client Credential", "netlogon.clientcred", FT_BYTES, BASE_NONE, - NULL, 0x0, "", HFILL }}, + { &hf_client_credential, + { "Client Credential", "netlogon.clientcred", FT_BYTES, BASE_NONE, + NULL, 0x0, "", HFILL }}, - { &hf_server_credential, - { "Server Credential", "netlogon.servercred", FT_BYTES, BASE_NONE, - NULL, 0x0, "", HFILL }}, + { &hf_server_credential, + { "Server Credential", "netlogon.servercred", FT_BYTES, BASE_NONE, + NULL, 0x0, "", HFILL }}, - { &hf_server_rid, - { "Account RID", "netlogon.serverrid", FT_UINT32, BASE_DEC, - NULL, 0x0, "", HFILL }}, + { &hf_server_rid, + { "Account RID", "netlogon.serverrid", FT_UINT32, BASE_DEC, + NULL, 0x0, "", HFILL }}, - { &hf_client_challenge, - { "Client Challenge", "netlogon.clientchallenge", FT_BYTES, BASE_NONE, - NULL, 0x0, "", HFILL }}, + { &hf_client_challenge, + { "Client Challenge", "netlogon.clientchallenge", FT_BYTES, BASE_NONE, + NULL, 0x0, "", HFILL }}, - { &hf_server_challenge, - { "Server Challenge", "netlogon.serverchallenge", FT_BYTES, BASE_NONE, - NULL, 0x0, "", HFILL }}, + { &hf_server_challenge, + { "Server Challenge", "netlogon.serverchallenge", FT_BYTES, BASE_NONE, + NULL, 0x0, "", HFILL }}, - { &hf_netlogon_secchan_nl_message_type, - { "Message Type", "netlogon.secchan.nl_auth_message.message_type", FT_UINT32, BASE_HEX, - VALS(nl_auth_types), 0x0, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_message_type, + { "Message Type", "netlogon.secchan.nl_auth_message.message_type", FT_UINT32, BASE_HEX, + VALS(nl_auth_types), 0x0, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_message_flags, - { "Message Flags", "netlogon.secchan.nl_auth_message.message_flags", FT_UINT32, BASE_HEX, - NULL, 0x0, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_message_flags, + { "Message Flags", "netlogon.secchan.nl_auth_message.message_flags", FT_UINT32, BASE_HEX, + NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_message_flags_nb_domain, - { "NetBios Domain", "netlogon.secchan.nl_auth_message.message_flags.nb_domain", FT_BOOLEAN, 32, - NULL, 0x00000001, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_message_flags_nb_domain, + { "NetBios Domain", "netlogon.secchan.nl_auth_message.message_flags.nb_domain", FT_BOOLEAN, 32, + NULL, 0x00000001, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_message_flags_nb_host, - { "NetBios Host", "netlogon.secchan.nl_auth_message.message_flags.nb_host", FT_BOOLEAN, 32, - NULL, 0x00000002, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_message_flags_nb_host, + { "NetBios Host", "netlogon.secchan.nl_auth_message.message_flags.nb_host", FT_BOOLEAN, 32, + NULL, 0x00000002, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_message_flags_dns_domain, - { "DNS Domain", "netlogon.secchan.nl_auth_message.message_flags.dns_domain", FT_BOOLEAN, 32, - NULL, 0x00000004, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_message_flags_dns_domain, + { "DNS Domain", "netlogon.secchan.nl_auth_message.message_flags.dns_domain", FT_BOOLEAN, 32, + NULL, 0x00000004, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_message_flags_dns_host, - { "DNS Host", "netlogon.secchan.nl_auth_message.message_flags.dns_host", FT_BOOLEAN, 32, - NULL, 0x00000008, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_message_flags_dns_host, + { "DNS Host", "netlogon.secchan.nl_auth_message.message_flags.dns_host", FT_BOOLEAN, 32, + NULL, 0x00000008, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_message_flags_nb_host_utf8, - { "NetBios Host(UTF8)", "netlogon.secchan.nl_auth_message.message_flags.nb_host_utf8", FT_BOOLEAN, 32, - NULL, 0x00000010, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_message_flags_nb_host_utf8, + { "NetBios Host(UTF8)", "netlogon.secchan.nl_auth_message.message_flags.nb_host_utf8", FT_BOOLEAN, 32, + NULL, 0x00000010, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_nb_domain, - { "NetBios Domain", "netlogon.secchan.nl_auth_message.nb_domain", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_nb_domain, + { "NetBios Domain", "netlogon.secchan.nl_auth_message.nb_domain", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_nb_host, - { "NetBios Host", "netlogon.secchan.nl_auth_message.nb_host", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_nb_host, + { "NetBios Host", "netlogon.secchan.nl_auth_message.nb_host", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_nb_host_utf8, - { "NetBios Host(UTF8)", "netlogon.secchan.nl_auth_message.nb_host_utf8", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_nb_host_utf8, + { "NetBios Host(UTF8)", "netlogon.secchan.nl_auth_message.nb_host_utf8", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_dns_domain, - { "DNS Domain", "netlogon.secchan.nl_auth_message.dns_domain", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_dns_domain, + { "DNS Domain", "netlogon.secchan.nl_auth_message.dns_domain", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_secchan_nl_dns_host, - { "DNS Host", "netlogon.secchan.nl_auth_message.dns_host", FT_STRING, BASE_NONE, - NULL, 0, NULL, HFILL }}, + { &hf_netlogon_secchan_nl_dns_host, + { "DNS Host", "netlogon.secchan.nl_auth_message.dns_host", FT_STRING, BASE_NONE, + NULL, 0, NULL, HFILL }}, - { &hf_netlogon_data_length, - { "Length of Data", "netlogon.data.length", FT_UINT32, BASE_DEC, - NULL, 0, "", HFILL }}, + { &hf_netlogon_data_length, + { "Length of Data", "netlogon.data.length", FT_UINT32, BASE_DEC, + NULL, 0, "", HFILL }}, - { &hf_netlogon_package_name, - { "SSP Package Name", "netlogon.data.package_name", FT_STRING, BASE_NONE, - NULL, 0, "", HFILL }}, + { &hf_netlogon_package_name, + { "SSP Package Name", "netlogon.data.package_name", FT_STRING, BASE_NONE, + NULL, 0, "", HFILL }}, - { &hf_netlogon_secchan_verf, - { "Secure Channel Verifier", "netlogon.secchan.verifier", FT_NONE, BASE_NONE, - NULL, 0x0, "Verifier", HFILL }}, + { &hf_netlogon_secchan_verf, + { "Secure Channel Verifier", "netlogon.secchan.verifier", FT_NONE, BASE_NONE, + NULL, 0x0, "Verifier", HFILL }}, - { &hf_netlogon_secchan_verf_signalg, - { "Sign algorithm", "netlogon.secchan.signalg", FT_UINT16, BASE_HEX, - VALS(sign_algs), 0, NULL, HFILL }}, + { &hf_netlogon_secchan_verf_signalg, + { "Sign algorithm", "netlogon.secchan.signalg", FT_UINT16, BASE_HEX, + VALS(sign_algs), 0, NULL, HFILL }}, - { &hf_netlogon_secchan_verf_sealalg, - { "Seal algorithm", "netlogon.secchan.sealalg", FT_UINT16, BASE_HEX, - VALS(seal_algs), 0, NULL, HFILL }}, + { &hf_netlogon_secchan_verf_sealalg, + { "Seal algorithm", "netlogon.secchan.sealalg", FT_UINT16, BASE_HEX, + VALS(seal_algs), 0, NULL, HFILL }}, - { &hf_netlogon_secchan_verf_flag, - { "Flags", "netlogon.secchan.flags", FT_BYTES, BASE_NONE, NULL, - 0x0, NULL, HFILL }}, - - { &hf_netlogon_secchan_verf_digest, - { "Packet Digest", "netlogon.secchan.digest", FT_BYTES, BASE_NONE, NULL, + { &hf_netlogon_secchan_verf_flag, + { "Flags", "netlogon.secchan.flags", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_secchan_verf_seq, - { "Sequence No", "netlogon.secchan.seq", FT_BYTES, BASE_NONE, NULL, + { &hf_netlogon_secchan_verf_digest, + { "Packet Digest", "netlogon.secchan.digest", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, - { &hf_netlogon_secchan_verf_nonce, - { "Nonce", "netlogon.secchan.nonce", FT_BYTES, BASE_NONE, NULL, - 0x0, NULL, HFILL }}, + { &hf_netlogon_secchan_verf_seq, + { "Sequence No", "netlogon.secchan.seq", FT_BYTES, BASE_NONE, NULL, + 0x0, NULL, HFILL }}, - { &hf_netlogon_group_attrs_mandatory, - { "Mandatory", "netlogon.groups.attrs.mandatory", - FT_BOOLEAN, 32, TFS(&group_attrs_mandatory), 0x00000001, - "The group attributes MANDATORY flag", HFILL }}, + { &hf_netlogon_secchan_verf_nonce, + { "Nonce", "netlogon.secchan.nonce", FT_BYTES, BASE_NONE, NULL, + 0x0, NULL, HFILL }}, - { &hf_netlogon_group_attrs_enabled_by_default, - { "Enabled By Default", "netlogon.groups.attrs.enabled_by_default", - FT_BOOLEAN, 32, TFS(&group_attrs_enabled_by_default), 0x00000002, - "The group attributes ENABLED_BY_DEFAULT flag", HFILL }}, + { &hf_netlogon_group_attrs_mandatory, + { "Mandatory", "netlogon.groups.attrs.mandatory", + FT_BOOLEAN, 32, TFS(&group_attrs_mandatory), 0x00000001, + "The group attributes MANDATORY flag", HFILL }}, - { &hf_netlogon_group_attrs_enabled, - { "Enabled", "netlogon.groups.attrs.enabled", - FT_BOOLEAN, 32, TFS(&group_attrs_enabled), 0x00000004, - "The group attributes ENABLED flag", HFILL }}, + { &hf_netlogon_group_attrs_enabled_by_default, + { "Enabled By Default", "netlogon.groups.attrs.enabled_by_default", + FT_BOOLEAN, 32, TFS(&group_attrs_enabled_by_default), 0x00000002, + "The group attributes ENABLED_BY_DEFAULT flag", HFILL }}, - { &hf_netlogon_user_flags_extra_sids, - { "Extra SIDs", "netlogon.user.flags.extra_sids", - FT_BOOLEAN, 32, TFS(&user_flags_extra_sids), 0x00000020, - "The user flags EXTRA_SIDS", HFILL }}, + { &hf_netlogon_group_attrs_enabled, + { "Enabled", "netlogon.groups.attrs.enabled", + FT_BOOLEAN, 32, TFS(&group_attrs_enabled), 0x00000004, + "The group attributes ENABLED flag", HFILL }}, - { &hf_netlogon_user_flags_resource_groups, - { "Resource Groups", "netlogon.user.flags.resource_groups", - FT_BOOLEAN, 32, TFS(&user_flags_resource_groups), 0x00000200, - "The user flags RESOURCE_GROUPS", HFILL }}, + { &hf_netlogon_user_flags_extra_sids, + { "Extra SIDs", "netlogon.user.flags.extra_sids", + FT_BOOLEAN, 32, TFS(&user_flags_extra_sids), 0x00000020, + "The user flags EXTRA_SIDS", HFILL }}, - { &hf_netlogon_user_account_control_dont_require_preauth, - { "Don't Require PreAuth", "netlogon.user.account_control.dont_require_preauth", - FT_BOOLEAN, 32, TFS(&user_account_control_dont_require_preauth), 0x00010000, - "The user account control DONT_REQUIRE_PREAUTH flag", HFILL }}, + { &hf_netlogon_user_flags_resource_groups, + { "Resource Groups", "netlogon.user.flags.resource_groups", + FT_BOOLEAN, 32, TFS(&user_flags_resource_groups), 0x00000200, + "The user flags RESOURCE_GROUPS", HFILL }}, - { &hf_netlogon_user_account_control_use_des_key_only, - { "Use DES Key Only", "netlogon.user.account_control.use_des_key_only", - FT_BOOLEAN, 32, TFS(&user_account_control_use_des_key_only), 0x00008000, - "The user account control use_des_key_only flag", HFILL }}, + { &hf_netlogon_user_account_control_dont_require_preauth, + { "Don't Require PreAuth", "netlogon.user.account_control.dont_require_preauth", + FT_BOOLEAN, 32, TFS(&user_account_control_dont_require_preauth), 0x00010000, + "The user account control DONT_REQUIRE_PREAUTH flag", HFILL }}, - { &hf_netlogon_user_account_control_not_delegated, - { "Not Delegated", "netlogon.user.account_control.not_delegated", - FT_BOOLEAN, 32, TFS(&user_account_control_not_delegated), 0x00004000, - "The user account control not_delegated flag", HFILL }}, + { &hf_netlogon_user_account_control_use_des_key_only, + { "Use DES Key Only", "netlogon.user.account_control.use_des_key_only", + FT_BOOLEAN, 32, TFS(&user_account_control_use_des_key_only), 0x00008000, + "The user account control use_des_key_only flag", HFILL }}, - { &hf_netlogon_user_account_control_trusted_for_delegation, - { "Trusted For Delegation", "netlogon.user.account_control.trusted_for_delegation", - FT_BOOLEAN, 32, TFS(&user_account_control_trusted_for_delegation), 0x00002000, - "The user account control trusted_for_delegation flag", HFILL }}, + { &hf_netlogon_user_account_control_not_delegated, + { "Not Delegated", "netlogon.user.account_control.not_delegated", + FT_BOOLEAN, 32, TFS(&user_account_control_not_delegated), 0x00004000, + "The user account control not_delegated flag", HFILL }}, - { &hf_netlogon_user_account_control_smartcard_required, - { "SmartCard Required", "netlogon.user.account_control.smartcard_required", - FT_BOOLEAN, 32, TFS(&user_account_control_smartcard_required), 0x00001000, - "The user account control smartcard_required flag", HFILL }}, + { &hf_netlogon_user_account_control_trusted_for_delegation, + { "Trusted For Delegation", "netlogon.user.account_control.trusted_for_delegation", + FT_BOOLEAN, 32, TFS(&user_account_control_trusted_for_delegation), 0x00002000, + "The user account control trusted_for_delegation flag", HFILL }}, - { &hf_netlogon_user_account_control_encrypted_text_password_allowed, - { "Encrypted Text Password Allowed", "netlogon.user.account_control.encrypted_text_password_allowed", - FT_BOOLEAN, 32, TFS(&user_account_control_encrypted_text_password_allowed), 0x00000800, - "The user account control encrypted_text_password_allowed flag", HFILL }}, + { &hf_netlogon_user_account_control_smartcard_required, + { "SmartCard Required", "netlogon.user.account_control.smartcard_required", + FT_BOOLEAN, 32, TFS(&user_account_control_smartcard_required), 0x00001000, + "The user account control smartcard_required flag", HFILL }}, - { &hf_netlogon_user_account_control_account_auto_locked, - { "Account Auto Locked", "netlogon.user.account_control.account_auto_locked", - FT_BOOLEAN, 32, TFS(&user_account_control_account_auto_locked), 0x00000400, - "The user account control account_auto_locked flag", HFILL }}, + { &hf_netlogon_user_account_control_encrypted_text_password_allowed, + { "Encrypted Text Password Allowed", "netlogon.user.account_control.encrypted_text_password_allowed", + FT_BOOLEAN, 32, TFS(&user_account_control_encrypted_text_password_allowed), 0x00000800, + "The user account control encrypted_text_password_allowed flag", HFILL }}, - { &hf_netlogon_user_account_control_dont_expire_password, - { "Don't Expire Password", "netlogon.user.account_control.dont_expire_password", - FT_BOOLEAN, 32, TFS(&user_account_control_dont_expire_password), 0x00000200, - "The user account control dont_expire_password flag", HFILL }}, + { &hf_netlogon_user_account_control_account_auto_locked, + { "Account Auto Locked", "netlogon.user.account_control.account_auto_locked", + FT_BOOLEAN, 32, TFS(&user_account_control_account_auto_locked), 0x00000400, + "The user account control account_auto_locked flag", HFILL }}, - { &hf_netlogon_user_account_control_server_trust_account, - { "Server Trust Account", "netlogon.user.account_control.server_trust_account", - FT_BOOLEAN, 32, TFS(&user_account_control_server_trust_account), 0x00000100, - "The user account control server_trust_account flag", HFILL }}, + { &hf_netlogon_user_account_control_dont_expire_password, + { "Don't Expire Password", "netlogon.user.account_control.dont_expire_password", + FT_BOOLEAN, 32, TFS(&user_account_control_dont_expire_password), 0x00000200, + "The user account control dont_expire_password flag", HFILL }}, - { &hf_netlogon_user_account_control_workstation_trust_account, - { "Workstation Trust Account", "netlogon.user.account_control.workstation_trust_account", - FT_BOOLEAN, 32, TFS(&user_account_control_workstation_trust_account), 0x00000080, - "The user account control workstation_trust_account flag", HFILL }}, + { &hf_netlogon_user_account_control_server_trust_account, + { "Server Trust Account", "netlogon.user.account_control.server_trust_account", + FT_BOOLEAN, 32, TFS(&user_account_control_server_trust_account), 0x00000100, + "The user account control server_trust_account flag", HFILL }}, - { &hf_netlogon_user_account_control_interdomain_trust_account, - { "Interdomain trust Account", "netlogon.user.account_control.interdomain_trust_account", - FT_BOOLEAN, 32, TFS(&user_account_control_interdomain_trust_account), 0x00000040, - "The user account control interdomain_trust_account flag", HFILL }}, + { &hf_netlogon_user_account_control_workstation_trust_account, + { "Workstation Trust Account", "netlogon.user.account_control.workstation_trust_account", + FT_BOOLEAN, 32, TFS(&user_account_control_workstation_trust_account), 0x00000080, + "The user account control workstation_trust_account flag", HFILL }}, - { &hf_netlogon_user_account_control_mns_logon_account, - { "MNS Logon Account", "netlogon.user.account_control.mns_logon_account", - FT_BOOLEAN, 32, TFS(&user_account_control_mns_logon_account), 0x00000020, - "The user account control mns_logon_account flag", HFILL }}, + { &hf_netlogon_user_account_control_interdomain_trust_account, + { "Interdomain trust Account", "netlogon.user.account_control.interdomain_trust_account", + FT_BOOLEAN, 32, TFS(&user_account_control_interdomain_trust_account), 0x00000040, + "The user account control interdomain_trust_account flag", HFILL }}, - { &hf_netlogon_user_account_control_normal_account, - { "Normal Account", "netlogon.user.account_control.normal_account", - FT_BOOLEAN, 32, TFS(&user_account_control_normal_account), 0x00000010, - "The user account control normal_account flag", HFILL }}, + { &hf_netlogon_user_account_control_mns_logon_account, + { "MNS Logon Account", "netlogon.user.account_control.mns_logon_account", + FT_BOOLEAN, 32, TFS(&user_account_control_mns_logon_account), 0x00000020, + "The user account control mns_logon_account flag", HFILL }}, - { &hf_netlogon_user_account_control_temp_duplicate_account, - { "Temp Duplicate Account", "netlogon.user.account_control.temp_duplicate_account", - FT_BOOLEAN, 32, TFS(&user_account_control_temp_duplicate_account), 0x00000008, - "The user account control temp_duplicate_account flag", HFILL }}, + { &hf_netlogon_user_account_control_normal_account, + { "Normal Account", "netlogon.user.account_control.normal_account", + FT_BOOLEAN, 32, TFS(&user_account_control_normal_account), 0x00000010, + "The user account control normal_account flag", HFILL }}, - { &hf_netlogon_user_account_control_password_not_required, - { "Password Not Required", "netlogon.user.account_control.password_not_required", - FT_BOOLEAN, 32, TFS(&user_account_control_password_not_required), 0x00000004, - "The user account control password_not_required flag", HFILL }}, + { &hf_netlogon_user_account_control_temp_duplicate_account, + { "Temp Duplicate Account", "netlogon.user.account_control.temp_duplicate_account", + FT_BOOLEAN, 32, TFS(&user_account_control_temp_duplicate_account), 0x00000008, + "The user account control temp_duplicate_account flag", HFILL }}, - { &hf_netlogon_user_account_control_home_directory_required, - { "Home Directory Required", "netlogon.user.account_control.home_directory_required", - FT_BOOLEAN, 32, TFS(&user_account_control_home_directory_required), 0x00000002, - "The user account control home_directory_required flag", HFILL }}, + { &hf_netlogon_user_account_control_password_not_required, + { "Password Not Required", "netlogon.user.account_control.password_not_required", + FT_BOOLEAN, 32, TFS(&user_account_control_password_not_required), 0x00000004, + "The user account control password_not_required flag", HFILL }}, - { &hf_netlogon_user_account_control_account_disabled, - { "Account Disabled", "netlogon.user.account_control.account_disabled", - FT_BOOLEAN, 32, TFS(&user_account_control_account_disabled), 0x00000001, - "The user account control account_disabled flag", HFILL }}, + { &hf_netlogon_user_account_control_home_directory_required, + { "Home Directory Required", "netlogon.user.account_control.home_directory_required", + FT_BOOLEAN, 32, TFS(&user_account_control_home_directory_required), 0x00000002, + "The user account control home_directory_required flag", HFILL }}, + + { &hf_netlogon_user_account_control_account_disabled, + { "Account Disabled", "netlogon.user.account_control.account_disabled", + FT_BOOLEAN, 32, TFS(&user_account_control_account_disabled), 0x00000001, + "The user account control account_disabled flag", HFILL }}, { &hf_netlogon_dnsdomaininfo, { "DnsDomainInfo", "netlogon.dnsdomaininfo", FT_NONE, BASE_NONE, - NULL, 0x0, NULL, HFILL }}, + NULL, 0x0, NULL, HFILL }}, - { &DnsDomainInfo_sid, - { "Sid", "lsarpc.lsa_DnsDomainInfo.sid", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &DomainInfo_sid, - { "Sid", "lsarpc.lsa_DomainInfo.sid", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &DnsDomainInfo_domain_guid, - { "Domain Guid", "lsarpc.lsa_DnsDomainInfo.domain_guid", FT_GUID, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &DnsDomainInfo_dns_forest, - { "Dns Forest", "lsarpc.lsa_DnsDomainInfo.dns_forest", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &DnsDomainInfo_dns_domain, - { "Dns Domain", "lsarpc.lsa_DnsDomainInfo.dns_domain", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, - { &DnsDomainInfo_name, - { "Name", "lsarpc.lsa_DnsDomainInfo.name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, - }; + { &DnsDomainInfo_sid, + { "Sid", "lsarpc.lsa_DnsDomainInfo.sid", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &DomainInfo_sid, + { "Sid", "lsarpc.lsa_DomainInfo.sid", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &DnsDomainInfo_domain_guid, + { "Domain Guid", "lsarpc.lsa_DnsDomainInfo.domain_guid", FT_GUID, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &DnsDomainInfo_dns_forest, + { "Dns Forest", "lsarpc.lsa_DnsDomainInfo.dns_forest", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &DnsDomainInfo_dns_domain, + { "Dns Domain", "lsarpc.lsa_DnsDomainInfo.dns_domain", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &DnsDomainInfo_name, + { "Name", "lsarpc.lsa_DnsDomainInfo.name", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }}, + }; - static gint *ett[] = { - &ett_dcerpc_netlogon, - &ett_authenticate_flags, - &ett_CYPHER_VALUE, - &ett_QUOTA_LIMITS, - &ett_IDENTITY_INFO, - &ett_DELTA_ENUM, - &ett_UNICODE_MULTI, - &ett_DOMAIN_CONTROLLER_INFO, - &ett_UNICODE_STRING_512, - &ett_TYPE_50, - &ett_TYPE_52, - &ett_DELTA_ID_UNION, - &ett_TYPE_44, - &ett_DELTA_UNION, - &ett_LM_OWF_PASSWORD, - &ett_NT_OWF_PASSWORD, - &ett_GROUP_MEMBERSHIP, - &ett_DS_DOMAIN_TRUSTS, - &ett_BLOB, - &ett_DOMAIN_TRUST_INFO, - &ett_LSA_POLICY_INFO, - &ett_trust_flags, - &ett_trust_attribs, - &ett_get_dcname_request_flags, - &ett_dc_flags, - &ett_secchan_nl_auth_message, - &ett_secchan_nl_auth_message_flags, - &ett_secchan_verf, - &ett_group_attrs, - &ett_user_flags, - &ett_nt_counted_longs_as_string, - &ett_user_account_control - }; + static gint *ett[] = { + &ett_dcerpc_netlogon, + &ett_authenticate_flags, + &ett_CYPHER_VALUE, + &ett_QUOTA_LIMITS, + &ett_IDENTITY_INFO, + &ett_DELTA_ENUM, + &ett_UNICODE_MULTI, + &ett_DOMAIN_CONTROLLER_INFO, + &ett_UNICODE_STRING_512, + &ett_TYPE_50, + &ett_TYPE_52, + &ett_DELTA_ID_UNION, + &ett_TYPE_44, + &ett_DELTA_UNION, + &ett_LM_OWF_PASSWORD, + &ett_NT_OWF_PASSWORD, + &ett_GROUP_MEMBERSHIP, + &ett_DS_DOMAIN_TRUSTS, + &ett_BLOB, + &ett_DOMAIN_TRUST_INFO, + &ett_LSA_POLICY_INFO, + &ett_trust_flags, + &ett_trust_attribs, + &ett_get_dcname_request_flags, + &ett_dc_flags, + &ett_secchan_nl_auth_message, + &ett_secchan_nl_auth_message_flags, + &ett_secchan_verf, + &ett_group_attrs, + &ett_user_flags, + &ett_nt_counted_longs_as_string, + &ett_user_account_control + }; - proto_dcerpc_netlogon = proto_register_protocol( - "Microsoft Network Logon", "RPC_NETLOGON", "rpc_netlogon"); + proto_dcerpc_netlogon = proto_register_protocol( + "Microsoft Network Logon", "RPC_NETLOGON", "rpc_netlogon"); - proto_register_field_array(proto_dcerpc_netlogon, hf, - array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); - register_init_routine(netlogon_reassemble_init); + proto_register_field_array(proto_dcerpc_netlogon, hf, + array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + register_init_routine(netlogon_reassemble_init); } static dcerpc_auth_subdissector_fns secchan_auth_fns = { - dissect_secchan_nl_auth_message, /* Bind */ - dissect_secchan_nl_auth_message, /* Bind ACK */ - NULL, /* AUTH3 */ - dissect_request_secchan_verf, /* Request verifier */ - dissect_response_secchan_verf, /* Response verifier */ - dissect_request_data, /* Request data */ - dissect_response_data /* Response data */ + dissect_secchan_nl_auth_message, /* Bind */ + dissect_secchan_nl_auth_message, /* Bind ACK */ + NULL, /* AUTH3 */ + dissect_request_secchan_verf, /* Request verifier */ + dissect_response_secchan_verf, /* Response verifier */ + dissect_request_data, /* Request data */ + dissect_response_data /* Response data */ }; void proto_reg_handoff_dcerpc_netlogon(void) { - /* Register protocol as dcerpc */ - seen.isseen = FALSE; - seen.num = 0; - dcerpc_init_uuid(proto_dcerpc_netlogon, ett_dcerpc_netlogon, - &uuid_dcerpc_netlogon, ver_dcerpc_netlogon, - dcerpc_netlogon_dissectors, hf_netlogon_opnum); + /* Register protocol as dcerpc */ + seen.isseen = FALSE; + seen.num = 0; + dcerpc_init_uuid(proto_dcerpc_netlogon, ett_dcerpc_netlogon, + &uuid_dcerpc_netlogon, ver_dcerpc_netlogon, + dcerpc_netlogon_dissectors, hf_netlogon_opnum); - register_dcerpc_auth_subdissector(DCE_C_AUTHN_LEVEL_PKT_INTEGRITY, - DCE_C_RPC_AUTHN_PROTOCOL_SEC_CHAN, - &secchan_auth_fns); - register_dcerpc_auth_subdissector(DCE_C_AUTHN_LEVEL_PKT_PRIVACY, - DCE_C_RPC_AUTHN_PROTOCOL_SEC_CHAN, - &secchan_auth_fns); + register_dcerpc_auth_subdissector(DCE_C_AUTHN_LEVEL_PKT_INTEGRITY, + DCE_C_RPC_AUTHN_PROTOCOL_SEC_CHAN, + &secchan_auth_fns); + register_dcerpc_auth_subdissector(DCE_C_AUTHN_LEVEL_PKT_PRIVACY, + DCE_C_RPC_AUTHN_PROTOCOL_SEC_CHAN, + &secchan_auth_fns); } diff --git a/epan/dissectors/packet-dcerpc.c b/epan/dissectors/packet-dcerpc.c index a328727e23..6230629911 100644 --- a/epan/dissectors/packet-dcerpc.c +++ b/epan/dissectors/packet-dcerpc.c @@ -110,228 +110,228 @@ static const value_string drep_fp_vals[] = { * Authentication services. */ static const value_string authn_protocol_vals[] = { - { DCE_C_RPC_AUTHN_PROTOCOL_NONE, "None" }, - { DCE_C_RPC_AUTHN_PROTOCOL_KRB5, "Kerberos 5" }, - { DCE_C_RPC_AUTHN_PROTOCOL_SPNEGO, "SPNEGO" }, - { DCE_C_RPC_AUTHN_PROTOCOL_NTLMSSP, "NTLMSSP" }, - { DCE_C_RPC_AUTHN_PROTOCOL_GSS_SCHANNEL, "SCHANNEL SSP" }, - { DCE_C_RPC_AUTHN_PROTOCOL_GSS_KERBEROS, "Kerberos SSP" }, - { DCE_C_RPC_AUTHN_PROTOCOL_DPA, - "Distributed Password Authentication SSP"}, - { DCE_C_RPC_AUTHN_PROTOCOL_MSN, "MSN SSP"}, - { DCE_C_RPC_AUTHN_PROTOCOL_DIGEST, "Digest SSP"}, - { DCE_C_RPC_AUTHN_PROTOCOL_SEC_CHAN,"NETLOGON Secure Channel" }, - { DCE_C_RPC_AUTHN_PROTOCOL_MQ, "MSMQ SSP"}, - { 0, NULL } + { DCE_C_RPC_AUTHN_PROTOCOL_NONE, "None" }, + { DCE_C_RPC_AUTHN_PROTOCOL_KRB5, "Kerberos 5" }, + { DCE_C_RPC_AUTHN_PROTOCOL_SPNEGO, "SPNEGO" }, + { DCE_C_RPC_AUTHN_PROTOCOL_NTLMSSP, "NTLMSSP" }, + { DCE_C_RPC_AUTHN_PROTOCOL_GSS_SCHANNEL, "SCHANNEL SSP" }, + { DCE_C_RPC_AUTHN_PROTOCOL_GSS_KERBEROS, "Kerberos SSP" }, + { DCE_C_RPC_AUTHN_PROTOCOL_DPA, + "Distributed Password Authentication SSP"}, + { DCE_C_RPC_AUTHN_PROTOCOL_MSN, "MSN SSP"}, + { DCE_C_RPC_AUTHN_PROTOCOL_DIGEST, "Digest SSP"}, + { DCE_C_RPC_AUTHN_PROTOCOL_SEC_CHAN, "NETLOGON Secure Channel" }, + { DCE_C_RPC_AUTHN_PROTOCOL_MQ, "MSMQ SSP"}, + { 0, NULL } }; /* * Protection levels. */ static const value_string authn_level_vals[] = { - { DCE_C_AUTHN_LEVEL_NONE, "None" }, - { DCE_C_AUTHN_LEVEL_CONNECT, "Connect" }, - { DCE_C_AUTHN_LEVEL_CALL, "Call" }, - { DCE_C_AUTHN_LEVEL_PKT, "Packet" }, - { DCE_C_AUTHN_LEVEL_PKT_INTEGRITY, "Packet integrity" }, - { DCE_C_AUTHN_LEVEL_PKT_PRIVACY, "Packet privacy" }, - { 0, NULL } + { DCE_C_AUTHN_LEVEL_NONE, "None" }, + { DCE_C_AUTHN_LEVEL_CONNECT, "Connect" }, + { DCE_C_AUTHN_LEVEL_CALL, "Call" }, + { DCE_C_AUTHN_LEVEL_PKT, "Packet" }, + { DCE_C_AUTHN_LEVEL_PKT_INTEGRITY, "Packet integrity" }, + { DCE_C_AUTHN_LEVEL_PKT_PRIVACY, "Packet privacy" }, + { 0, NULL } }; /* * Flag bits in first flag field in connectionless PDU header. */ -#define PFCL1_RESERVED_01 0x01 /* Reserved for use by implementations */ -#define PFCL1_LASTFRAG 0x02 /* If set, the PDU is the last - * fragment of a multi-PDU - * transmission */ -#define PFCL1_FRAG 0x04 /* If set, the PDU is a fragment of - a multi-PDU transmission */ -#define PFCL1_NOFACK 0x08 /* If set, the receiver is not - * requested to send a `fack' PDU - * for the fragment */ -#define PFCL1_MAYBE 0x10 /* If set, the PDU is for a `maybe' - * request */ -#define PFCL1_IDEMPOTENT 0x20 /* If set, the PDU is for an idempotent - * request */ -#define PFCL1_BROADCAST 0x40 /* If set, the PDU is for a broadcast - * request */ -#define PFCL1_RESERVED_80 0x80 /* Reserved for use by implementations */ +#define PFCL1_RESERVED_01 0x01 /* Reserved for use by implementations */ +#define PFCL1_LASTFRAG 0x02 /* If set, the PDU is the last + * fragment of a multi-PDU + * transmission */ +#define PFCL1_FRAG 0x04 /* If set, the PDU is a fragment of + a multi-PDU transmission */ +#define PFCL1_NOFACK 0x08 /* If set, the receiver is not + * requested to send a `fack' PDU + * for the fragment */ +#define PFCL1_MAYBE 0x10 /* If set, the PDU is for a `maybe' + * request */ +#define PFCL1_IDEMPOTENT 0x20 /* If set, the PDU is for an idempotent + * request */ +#define PFCL1_BROADCAST 0x40 /* If set, the PDU is for a broadcast + * request */ +#define PFCL1_RESERVED_80 0x80 /* Reserved for use by implementations */ /* * Flag bits in second flag field in connectionless PDU header. */ -#define PFCL2_RESERVED_01 0x01 /* Reserved for use by implementations */ -#define PFCL2_CANCEL_PENDING 0x02 /* Cancel pending at the call end */ -#define PFCL2_RESERVED_04 0x04 /* Reserved for future use */ -#define PFCL2_RESERVED_08 0x08 /* Reserved for future use */ -#define PFCL2_RESERVED_10 0x10 /* Reserved for future use */ -#define PFCL2_RESERVED_20 0x20 /* Reserved for future use */ -#define PFCL2_RESERVED_40 0x40 /* Reserved for future use */ -#define PFCL2_RESERVED_80 0x80 /* Reserved for future use */ +#define PFCL2_RESERVED_01 0x01 /* Reserved for use by implementations */ +#define PFCL2_CANCEL_PENDING 0x02 /* Cancel pending at the call end */ +#define PFCL2_RESERVED_04 0x04 /* Reserved for future use */ +#define PFCL2_RESERVED_08 0x08 /* Reserved for future use */ +#define PFCL2_RESERVED_10 0x10 /* Reserved for future use */ +#define PFCL2_RESERVED_20 0x20 /* Reserved for future use */ +#define PFCL2_RESERVED_40 0x40 /* Reserved for future use */ +#define PFCL2_RESERVED_80 0x80 /* Reserved for future use */ /* * Flag bits in connection-oriented PDU header. */ -#define PFC_FIRST_FRAG 0x01 /* First fragment */ -#define PFC_LAST_FRAG 0x02 /* Last fragment */ -#define PFC_PENDING_CANCEL 0x04 /* Cancel was pending at sender */ -#define PFC_RESERVED_1 0x08 -#define PFC_CONC_MPX 0x10 /* suports concurrent multiplexing - * of a single connection. */ -#define PFC_DID_NOT_EXECUTE 0x20 /* only meaningful on `fault' packet; - * if true, guaranteed call did not - * execute. */ -#define PFC_MAYBE 0x40 /* `maybe' call semantics requested */ -#define PFC_OBJECT_UUID 0x80 /* if true, a non-nil object UUID - * was specified in the handle, and - * is present in the optional object - * field. If false, the object field - * is omitted. */ +#define PFC_FIRST_FRAG 0x01 /* First fragment */ +#define PFC_LAST_FRAG 0x02 /* Last fragment */ +#define PFC_PENDING_CANCEL 0x04 /* Cancel was pending at sender */ +#define PFC_RESERVED_1 0x08 +#define PFC_CONC_MPX 0x10 /* suports concurrent multiplexing + * of a single connection. */ +#define PFC_DID_NOT_EXECUTE 0x20 /* only meaningful on `fault' packet; + * if true, guaranteed call did not + * execute. */ +#define PFC_MAYBE 0x40 /* `maybe' call semantics requested */ +#define PFC_OBJECT_UUID 0x80 /* if true, a non-nil object UUID + * was specified in the handle, and + * is present in the optional object + * field. If false, the object field + * is omitted. */ /* * Tests whether a connection-oriented PDU is fragmented; returns TRUE if * it's not fragmented (i.e., this is both the first *and* last fragment), * and FALSE otherwise. */ -#define PFC_NOT_FRAGMENTED(hdr) \ - ((hdr->flags&(PFC_FIRST_FRAG|PFC_LAST_FRAG))==(PFC_FIRST_FRAG|PFC_LAST_FRAG)) +#define PFC_NOT_FRAGMENTED(hdr) \ + ((hdr->flags&(PFC_FIRST_FRAG|PFC_LAST_FRAG))==(PFC_FIRST_FRAG|PFC_LAST_FRAG)) /* * Presentation context negotiation result. */ static const value_string p_cont_result_vals[] = { - { 0, "Acceptance" }, - { 1, "User rejection" }, - { 2, "Provider rejection" }, - { 0, NULL } + { 0, "Acceptance" }, + { 1, "User rejection" }, + { 2, "Provider rejection" }, + { 0, NULL } }; /* * Presentation context negotiation rejection reasons. */ static const value_string p_provider_reason_vals[] = { - { 0, "Reason not specified" }, - { 1, "Abstract syntax not supported" }, - { 2, "Proposed transfer syntaxes not supported" }, - { 3, "Local limit exceeded" }, - { 0, NULL } + { 0, "Reason not specified" }, + { 1, "Abstract syntax not supported" }, + { 2, "Proposed transfer syntaxes not supported" }, + { 3, "Local limit exceeded" }, + { 0, NULL } }; /* * Reject reasons. */ -#define REASON_NOT_SPECIFIED 0 -#define TEMPORARY_CONGESTION 1 -#define LOCAL_LIMIT_EXCEEDED 2 -#define CALLED_PADDR_UNKNOWN 3 /* not used */ -#define PROTOCOL_VERSION_NOT_SUPPORTED 4 -#define DEFAULT_CONTEXT_NOT_SUPPORTED 5 /* not used */ -#define USER_DATA_NOT_READABLE 6 /* not used */ -#define NO_PSAP_AVAILABLE 7 /* not used */ -#define AUTH_TYPE_NOT_RECOGNIZED 8 -#define INVALID_CHECKSUM 9 +#define REASON_NOT_SPECIFIED 0 +#define TEMPORARY_CONGESTION 1 +#define LOCAL_LIMIT_EXCEEDED 2 +#define CALLED_PADDR_UNKNOWN 3 /* not used */ +#define PROTOCOL_VERSION_NOT_SUPPORTED 4 +#define DEFAULT_CONTEXT_NOT_SUPPORTED 5 /* not used */ +#define USER_DATA_NOT_READABLE 6 /* not used */ +#define NO_PSAP_AVAILABLE 7 /* not used */ +#define AUTH_TYPE_NOT_RECOGNIZED 8 +#define INVALID_CHECKSUM 9 static const value_string reject_reason_vals[] = { - { REASON_NOT_SPECIFIED, "Reason not specified" }, - { TEMPORARY_CONGESTION, "Temporary congestion" }, - { LOCAL_LIMIT_EXCEEDED, "Local limit exceeded" }, - { CALLED_PADDR_UNKNOWN, "Called paddr unknown" }, - { PROTOCOL_VERSION_NOT_SUPPORTED, "Protocol version not supported" }, - { DEFAULT_CONTEXT_NOT_SUPPORTED, "Default context not supported" }, - { USER_DATA_NOT_READABLE, "User data not readable" }, - { NO_PSAP_AVAILABLE, "No PSAP available" }, - { AUTH_TYPE_NOT_RECOGNIZED, "Authentication type not recognized" }, - { INVALID_CHECKSUM, "Invalid checksum" }, - { 0, NULL } + { REASON_NOT_SPECIFIED, "Reason not specified" }, + { TEMPORARY_CONGESTION, "Temporary congestion" }, + { LOCAL_LIMIT_EXCEEDED, "Local limit exceeded" }, + { CALLED_PADDR_UNKNOWN, "Called paddr unknown" }, + { PROTOCOL_VERSION_NOT_SUPPORTED, "Protocol version not supported" }, + { DEFAULT_CONTEXT_NOT_SUPPORTED, "Default context not supported" }, + { USER_DATA_NOT_READABLE, "User data not readable" }, + { NO_PSAP_AVAILABLE, "No PSAP available" }, + { AUTH_TYPE_NOT_RECOGNIZED, "Authentication type not recognized" }, + { INVALID_CHECKSUM, "Invalid checksum" }, + { 0, NULL } }; /* * Reject status codes. */ static const value_string reject_status_vals[] = { - { 0, "Stub-defined exception" }, - { 0x00000001, "nca_s_fault_other" }, - { 0x00000005, "nca_s_fault_access_denied" }, - { 0x000006f7, "nca_s_fault_ndr" }, - { 0x000006d8, "nca_s_fault_cant_perform" }, - { 0x1c000001, "nca_s_fault_int_div_by_zero" }, - { 0x1c000002, "nca_s_fault_addr_error" }, - { 0x1c000003, "nca_s_fault_fp_div_zero" }, - { 0x1c000004, "nca_s_fault_fp_underflow" }, - { 0x1c000005, "nca_s_fault_fp_overflow" }, - { 0x1c000006, "nca_s_fault_invalid_tag" }, - { 0x1c000007, "nca_s_fault_invalid_bound" }, - { 0x1c000008, "nca_rpc_version_mismatch" }, - { 0x1c000009, "nca_unspec_reject" }, - { 0x1c00000a, "nca_s_bad_actid" }, - { 0x1c00000b, "nca_who_are_you_failed" }, - { 0x1c00000c, "nca_manager_not_entered" }, - { 0x1c00000d, "nca_s_fault_cancel" }, - { 0x1c00000e, "nca_s_fault_ill_inst" }, - { 0x1c00000f, "nca_s_fault_fp_error" }, - { 0x1c000010, "nca_s_fault_int_overflow" }, - { 0x1c000014, "nca_s_fault_pipe_empty" }, - { 0x1c000015, "nca_s_fault_pipe_closed" }, - { 0x1c000016, "nca_s_fault_pipe_order" }, - { 0x1c000017, "nca_s_fault_pipe_discipline" }, - { 0x1c000018, "nca_s_fault_pipe_comm_error" }, - { 0x1c000019, "nca_s_fault_pipe_memory" }, - { 0x1c00001a, "nca_s_fault_context_mismatch" }, - { 0x1c00001b, "nca_s_fault_remote_no_memory" }, - { 0x1c00001c, "nca_invalid_pres_context_id" }, - { 0x1c00001d, "nca_unsupported_authn_level" }, - { 0x1c00001f, "nca_invalid_checksum" }, - { 0x1c000020, "nca_invalid_crc" }, - { 0x1c000021, "ncs_s_fault_user_defined" }, - { 0x1c000022, "nca_s_fault_tx_open_failed" }, - { 0x1c000023, "nca_s_fault_codeset_conv_error" }, - { 0x1c000024, "nca_s_fault_object_not_found" }, - { 0x1c000025, "nca_s_fault_no_client_stub" }, - { 0x1c010002, "nca_op_rng_error" }, - { 0x1c010003, "nca_unk_if"}, - { 0x1c010006, "nca_wrong_boot_time" }, - { 0x1c010009, "nca_s_you_crashed" }, - { 0x1c01000b, "nca_proto_error" }, - { 0x1c010013, "nca_out_args_too_big" }, - { 0x1c010014, "nca_server_too_busy" }, - { 0x1c010017, "nca_unsupported_type" }, - /* MS Windows specific values - * see: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/system_error_codes__1700-3999_.asp - * and: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/common_hresult_values.asp - * and: http://www.megos.ch/support/doserrors.txt - * - * XXX - we might need a way to dynamically add entries here, as higher layer protocols use these values too, - * at least MS protocols (like DCOM) do it that way ... */ - { 0x80004001, "E_NOTIMPL" }, - { 0x80004003, "E_POINTER" }, - { 0x80004004, "E_ABORT" }, - { 0x8000FFFF, "E_UNEXPECTED" }, - { 0x80010105, "RPC_E_SERVERFAULT" }, - { 0x80010108, "RPC_E_DISCONNECTED" }, - { 0x80010113, "RPC_E_INVALID_IPID" }, - { 0x8001011F, "RPC_E_TIMEOUT" }, - { 0x80020003, "DISP_E_MEMBERNOTFOUND" }, - { 0x80020006, "DISP_E_UNKNOWNNAME" }, - { 0x8002000E, "DISP_E_BADPARAMCOUNT" }, - { 0x8004CB00, "CBA_E_MALFORMED" }, - { 0x8004CB01, "CBA_E_UNKNOWNOBJECT" }, - { 0x8004CB05, "CBA_E_INVALIDID" }, - { 0x8004CB09, "CBA_E_INVALIDCOOKIE" }, - { 0x8004CB0B, "CBA_E_QOSTYPEUNSUPPORTED" }, - { 0x8004CB0C, "CBA_E_QOSVALUEUNSUPPORTED" }, - { 0x8004CB0F, "CBA_E_NOTAPPLICABLE" }, - { 0x8004CB12, "CBA_E_LIMITVIOLATION" }, - { 0x8004CB13, "CBA_E_QOSTYPENOTAPPLICABLE" }, - { 0x8004CB18, "CBA_E_OUTOFPARTNERACCOS" }, - { 0x8004CB1C, "CBA_E_FLAGUNSUPPORTED" }, - { 0x8004CB23, "CBA_E_FRAMECOUNTUNSUPPORTED" }, - { 0x8004CB25, "CBA_E_MODECHANGE" }, - { 0x8007000E, "E_OUTOFMEMORY" }, - { 0x80070057, "E_INVALIDARG" }, - { 0x800706d1, "RPC_S_PROCNUM_OUT_OF_RANGE" }, - { 0x80070776, "OR_INVALID_OXID" }, - { 0, NULL } + { 0, "Stub-defined exception" }, + { 0x00000001, "nca_s_fault_other" }, + { 0x00000005, "nca_s_fault_access_denied" }, + { 0x000006f7, "nca_s_fault_ndr" }, + { 0x000006d8, "nca_s_fault_cant_perform" }, + { 0x1c000001, "nca_s_fault_int_div_by_zero" }, + { 0x1c000002, "nca_s_fault_addr_error" }, + { 0x1c000003, "nca_s_fault_fp_div_zero" }, + { 0x1c000004, "nca_s_fault_fp_underflow" }, + { 0x1c000005, "nca_s_fault_fp_overflow" }, + { 0x1c000006, "nca_s_fault_invalid_tag" }, + { 0x1c000007, "nca_s_fault_invalid_bound" }, + { 0x1c000008, "nca_rpc_version_mismatch" }, + { 0x1c000009, "nca_unspec_reject" }, + { 0x1c00000a, "nca_s_bad_actid" }, + { 0x1c00000b, "nca_who_are_you_failed" }, + { 0x1c00000c, "nca_manager_not_entered" }, + { 0x1c00000d, "nca_s_fault_cancel" }, + { 0x1c00000e, "nca_s_fault_ill_inst" }, + { 0x1c00000f, "nca_s_fault_fp_error" }, + { 0x1c000010, "nca_s_fault_int_overflow" }, + { 0x1c000014, "nca_s_fault_pipe_empty" }, + { 0x1c000015, "nca_s_fault_pipe_closed" }, + { 0x1c000016, "nca_s_fault_pipe_order" }, + { 0x1c000017, "nca_s_fault_pipe_discipline" }, + { 0x1c000018, "nca_s_fault_pipe_comm_error" }, + { 0x1c000019, "nca_s_fault_pipe_memory" }, + { 0x1c00001a, "nca_s_fault_context_mismatch" }, + { 0x1c00001b, "nca_s_fault_remote_no_memory" }, + { 0x1c00001c, "nca_invalid_pres_context_id" }, + { 0x1c00001d, "nca_unsupported_authn_level" }, + { 0x1c00001f, "nca_invalid_checksum" }, + { 0x1c000020, "nca_invalid_crc" }, + { 0x1c000021, "ncs_s_fault_user_defined" }, + { 0x1c000022, "nca_s_fault_tx_open_failed" }, + { 0x1c000023, "nca_s_fault_codeset_conv_error" }, + { 0x1c000024, "nca_s_fault_object_not_found" }, + { 0x1c000025, "nca_s_fault_no_client_stub" }, + { 0x1c010002, "nca_op_rng_error" }, + { 0x1c010003, "nca_unk_if"}, + { 0x1c010006, "nca_wrong_boot_time" }, + { 0x1c010009, "nca_s_you_crashed" }, + { 0x1c01000b, "nca_proto_error" }, + { 0x1c010013, "nca_out_args_too_big" }, + { 0x1c010014, "nca_server_too_busy" }, + { 0x1c010017, "nca_unsupported_type" }, + /* MS Windows specific values + * see: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/system_error_codes__1700-3999_.asp + * and: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/common_hresult_values.asp + * and: http://www.megos.ch/support/doserrors.txt + * + * XXX - we might need a way to dynamically add entries here, as higher layer protocols use these values too, + * at least MS protocols (like DCOM) do it that way ... */ + { 0x80004001, "E_NOTIMPL" }, + { 0x80004003, "E_POINTER" }, + { 0x80004004, "E_ABORT" }, + { 0x8000FFFF, "E_UNEXPECTED" }, + { 0x80010105, "RPC_E_SERVERFAULT" }, + { 0x80010108, "RPC_E_DISCONNECTED" }, + { 0x80010113, "RPC_E_INVALID_IPID" }, + { 0x8001011F, "RPC_E_TIMEOUT" }, + { 0x80020003, "DISP_E_MEMBERNOTFOUND" }, + { 0x80020006, "DISP_E_UNKNOWNNAME" }, + { 0x8002000E, "DISP_E_BADPARAMCOUNT" }, + { 0x8004CB00, "CBA_E_MALFORMED" }, + { 0x8004CB01, "CBA_E_UNKNOWNOBJECT" }, + { 0x8004CB05, "CBA_E_INVALIDID" }, + { 0x8004CB09, "CBA_E_INVALIDCOOKIE" }, + { 0x8004CB0B, "CBA_E_QOSTYPEUNSUPPORTED" }, + { 0x8004CB0C, "CBA_E_QOSVALUEUNSUPPORTED" }, + { 0x8004CB0F, "CBA_E_NOTAPPLICABLE" }, + { 0x8004CB12, "CBA_E_LIMITVIOLATION" }, + { 0x8004CB13, "CBA_E_QOSTYPENOTAPPLICABLE" }, + { 0x8004CB18, "CBA_E_OUTOFPARTNERACCOS" }, + { 0x8004CB1C, "CBA_E_FLAGUNSUPPORTED" }, + { 0x8004CB23, "CBA_E_FRAMECOUNTUNSUPPORTED" }, + { 0x8004CB25, "CBA_E_MODECHANGE" }, + { 0x8007000E, "E_OUTOFMEMORY" }, + { 0x80070057, "E_INVALIDARG" }, + { 0x800706d1, "RPC_S_PROCNUM_OUT_OF_RANGE" }, + { 0x80070776, "OR_INVALID_OXID" }, + { 0, NULL } }; @@ -339,8 +339,8 @@ static const value_string reject_status_vals[] = { * in through so we know what kind of pinfo->dce_smb_fid was passed to us. */ /* Value of -1 is reserved for "not DCE packet" in packet_info.dcetransporttype. */ -#define DCE_TRANSPORT_UNKNOWN 0 -#define DCE_CN_TRANSPORT_SMBPIPE 1 +#define DCE_TRANSPORT_UNKNOWN 0 +#define DCE_CN_TRANSPORT_SMBPIPE 1 static int proto_dcerpc = -1; @@ -480,19 +480,19 @@ static gint ett_dcerpc_fragment = -1; static gint ett_dcerpc_krb5_auth_verf = -1; static const fragment_items dcerpc_frag_items = { - &ett_dcerpc_fragments, - &ett_dcerpc_fragment, + &ett_dcerpc_fragments, + &ett_dcerpc_fragment, - &hf_dcerpc_fragments, - &hf_dcerpc_fragment, - &hf_dcerpc_fragment_overlap, - &hf_dcerpc_fragment_overlap_conflict, - &hf_dcerpc_fragment_multiple_tails, - &hf_dcerpc_fragment_too_long_fragment, - &hf_dcerpc_fragment_error, - NULL, - &hf_dcerpc_reassembled_length, - "fragments" + &hf_dcerpc_fragments, + &hf_dcerpc_fragment, + &hf_dcerpc_fragment_overlap, + &hf_dcerpc_fragment_overlap_conflict, + &hf_dcerpc_fragment_multiple_tails, + &hf_dcerpc_fragment_too_long_fragment, + &hf_dcerpc_fragment_error, + NULL, + &hf_dcerpc_reassembled_length, + "fragments" }; /* list of hooks to be called when init_protocols is done */ @@ -501,17 +501,17 @@ GHookList dcerpc_hooks_init_protos; static dcerpc_info * get_next_di(void) { - static dcerpc_info di[20]; - static int di_counter=0; + static dcerpc_info di[20]; + static int di_counter=0; - di_counter++; - if(di_counter>=20){ - di_counter=0; - } + di_counter++; + if(di_counter>=20){ + di_counter=0; + } - memset(&di[di_counter], 0, sizeof(dcerpc_info)); + memset(&di[di_counter], 0, sizeof(dcerpc_info)); - return &di[di_counter]; + return &di[di_counter]; } /* try to desegment big DCE/RPC packets over TCP? */ @@ -521,7 +521,7 @@ static gboolean dcerpc_cn_desegment = TRUE; /* reassembly of cl dcerpc fragments will not work for the case where ONE frame might contain multiple dcerpc fragments for different PDUs. this case would be so unusual/weird so if you got captures like that: - too bad + too bad reassembly of co dcerpc fragments will not work for the case where TCP/SMB frames are coming in out of sequence, but that will hurt in a lot of other places as well. @@ -534,9 +534,9 @@ static GHashTable *dcerpc_cl_reassemble_table = NULL; static void dcerpc_reassemble_init(void) { - fragment_table_init(&dcerpc_co_fragment_table); - reassembled_table_init(&dcerpc_co_reassemble_table); - dcerpc_fragment_table_init(&dcerpc_cl_reassemble_table); + fragment_table_init(&dcerpc_co_fragment_table); + reassembled_table_init(&dcerpc_co_reassemble_table); + dcerpc_fragment_table_init(&dcerpc_cl_reassemble_table); } /* @@ -545,117 +545,117 @@ dcerpc_reassemble_init(void) */ typedef struct _dcerpc_auth_subdissector { - guint8 auth_level; - guint8 auth_type; - dcerpc_auth_subdissector_fns auth_fns; + guint8 auth_level; + guint8 auth_type; + dcerpc_auth_subdissector_fns auth_fns; } dcerpc_auth_subdissector; static GSList *dcerpc_auth_subdissector_list; static dcerpc_auth_subdissector_fns *get_auth_subdissector_fns( - guint8 auth_level, guint8 auth_type) + guint8 auth_level, guint8 auth_type) { - gpointer data; - int i; + gpointer data; + int i; - for (i = 0; (data = g_slist_nth_data(dcerpc_auth_subdissector_list, i)); i++) { - dcerpc_auth_subdissector *asd = (dcerpc_auth_subdissector *)data; + for (i = 0; (data = g_slist_nth_data(dcerpc_auth_subdissector_list, i)); i++) { + dcerpc_auth_subdissector *asd = (dcerpc_auth_subdissector *)data; - if (asd->auth_level == auth_level && - asd->auth_type == auth_type) - return &asd->auth_fns; - } + if (asd->auth_level == auth_level && + asd->auth_type == auth_type) + return &asd->auth_fns; + } - return NULL; + return NULL; } void register_dcerpc_auth_subdissector(guint8 auth_level, guint8 auth_type, - dcerpc_auth_subdissector_fns *fns) + dcerpc_auth_subdissector_fns *fns) { - dcerpc_auth_subdissector *d; + dcerpc_auth_subdissector *d; - if (get_auth_subdissector_fns(auth_level, auth_type)) - return; + if (get_auth_subdissector_fns(auth_level, auth_type)) + return; - d = (dcerpc_auth_subdissector *)g_malloc(sizeof(dcerpc_auth_subdissector)); + d = (dcerpc_auth_subdissector *)g_malloc(sizeof(dcerpc_auth_subdissector)); - d->auth_level = auth_level; - d->auth_type = auth_type; - memcpy(&d->auth_fns, fns, sizeof(dcerpc_auth_subdissector_fns)); + d->auth_level = auth_level; + d->auth_type = auth_type; + memcpy(&d->auth_fns, fns, sizeof(dcerpc_auth_subdissector_fns)); - dcerpc_auth_subdissector_list = g_slist_append(dcerpc_auth_subdissector_list, d); + dcerpc_auth_subdissector_list = g_slist_append(dcerpc_auth_subdissector_list, d); } /* Hand off verifier data to a registered dissector */ static void dissect_auth_verf(tvbuff_t *auth_tvb, packet_info *pinfo, - proto_tree *tree, - dcerpc_auth_subdissector_fns *auth_fns, - e_dce_cn_common_hdr_t *hdr, - dcerpc_auth_info *auth_info) + proto_tree *tree, + dcerpc_auth_subdissector_fns *auth_fns, + e_dce_cn_common_hdr_t *hdr, + dcerpc_auth_info *auth_info) { - dcerpc_dissect_fnct_t *volatile fn = NULL; + dcerpc_dissect_fnct_t *volatile fn = NULL; - switch (hdr->ptype) { - case PDU_BIND: - case PDU_ALTER: - fn = auth_fns->bind_fn; - break; - case PDU_BIND_ACK: - case PDU_ALTER_ACK: - fn = auth_fns->bind_ack_fn; - break; - case PDU_AUTH3: - fn = auth_fns->auth3_fn; - break; - case PDU_REQ: - fn = auth_fns->req_verf_fn; - break; - case PDU_RESP: - fn = auth_fns->resp_verf_fn; - break; + switch (hdr->ptype) { + case PDU_BIND: + case PDU_ALTER: + fn = auth_fns->bind_fn; + break; + case PDU_BIND_ACK: + case PDU_ALTER_ACK: + fn = auth_fns->bind_ack_fn; + break; + case PDU_AUTH3: + fn = auth_fns->auth3_fn; + break; + case PDU_REQ: + fn = auth_fns->req_verf_fn; + break; + case PDU_RESP: + fn = auth_fns->resp_verf_fn; + break; - /* Don't know how to handle authentication data in this - pdu type. */ + /* Don't know how to handle authentication data in this + pdu type. */ - default: - g_warning("attempt to dissect %s pdu authentication data", - val_to_str(hdr->ptype, pckt_vals, "Unknown (%u)")); - break; - } + default: + g_warning("attempt to dissect %s pdu authentication data", + val_to_str(hdr->ptype, pckt_vals, "Unknown (%u)")); + break; + } - if (fn) - fn(auth_tvb, 0, pinfo, tree, hdr->drep); - else { - tvb_ensure_bytes_exist(auth_tvb, 0, hdr->auth_len); - proto_tree_add_text(tree, auth_tvb, 0, hdr->auth_len, - "%s Verifier", - val_to_str(auth_info->auth_type, - authn_protocol_vals, - "Unknown (%u)")); - } + if (fn) + fn(auth_tvb, 0, pinfo, tree, hdr->drep); + else { + tvb_ensure_bytes_exist(auth_tvb, 0, hdr->auth_len); + proto_tree_add_text(tree, auth_tvb, 0, hdr->auth_len, + "%s Verifier", + val_to_str(auth_info->auth_type, + authn_protocol_vals, + "Unknown (%u)")); + } } /* Hand off payload data to a registered dissector */ static tvbuff_t *decode_encrypted_data(tvbuff_t *data_tvb, - tvbuff_t *auth_tvb, - packet_info *pinfo, - dcerpc_auth_subdissector_fns *auth_fns, - gboolean is_request, - dcerpc_auth_info *auth_info) + tvbuff_t *auth_tvb, + packet_info *pinfo, + dcerpc_auth_subdissector_fns *auth_fns, + gboolean is_request, + dcerpc_auth_info *auth_info) { - dcerpc_decode_data_fnct_t *fn; + dcerpc_decode_data_fnct_t *fn; - if (is_request) - fn = auth_fns->req_data_fn; - else - fn = auth_fns->resp_data_fn; + if (is_request) + fn = auth_fns->req_data_fn; + else + fn = auth_fns->resp_data_fn; - if (fn) - return fn(data_tvb, auth_tvb, 0, pinfo, auth_info); + if (fn) + return fn(data_tvb, auth_tvb, 0, pinfo, auth_info); - return NULL; + return NULL; } /* @@ -758,27 +758,27 @@ dcerpc_get_proto_hf_opnum(e_uuid_t *uuid, guint16 ver) value_string *value_string_from_subdissectors(dcerpc_sub_dissector *sd) { - value_string *vs = NULL; - int i, num_sd = 0; + value_string *vs = NULL; + int i, num_sd = 0; - again: - for (i = 0; sd[i].name; i++) { - if (vs) { - vs[i].value = sd[i].num; - vs[i].strptr = sd[i].name; - } else - num_sd++; - } +again: + for (i = 0; sd[i].name; i++) { + if (vs) { + vs[i].value = sd[i].num; + vs[i].strptr = sd[i].name; + } else + num_sd++; + } - if (!vs) { - vs = g_malloc((num_sd + 1) * sizeof(value_string)); - goto again; - } + if (!vs) { + vs = g_malloc((num_sd + 1) * sizeof(value_string)); + goto again; + } - vs[num_sd].value = 0; - vs[num_sd].strptr = NULL; + vs[num_sd].value = 0; + vs[num_sd].strptr = NULL; - return vs; + return vs; } /* Function to find the subdissector table of a registered protocol @@ -815,9 +815,9 @@ typedef struct _dcerpc_bind_key { } dcerpc_bind_key; typedef struct _dcerpc_bind_value { - e_uuid_t uuid; - guint16 ver; - e_uuid_t transport; + e_uuid_t uuid; + guint16 ver; + e_uuid_t transport; } dcerpc_bind_value; static gint @@ -1034,20 +1034,20 @@ dissect_dcerpc_uint64 (tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, header_field_info *hfinfo; /* This might be a field that is either 32bit, in NDR or - 64 bits in NDR64. So we must be careful and call the right - helper here - */ + 64 bits in NDR64. So we must be careful and call the right + helper here + */ hfinfo = proto_registrar_get_nth(hfindex); - switch(hfinfo->type) { - case FT_UINT64: + switch(hfinfo->type) { + case FT_UINT64: proto_tree_add_uint64(tree, hfindex, tvb, offset, 8, data); - break; - case FT_INT64: + break; + case FT_INT64: proto_tree_add_int64(tree, hfindex, tvb, offset, 8, data); - break; - default: - DISSECTOR_ASSERT(data<=G_MAXUINT32); + break; + default: + DISSECTOR_ASSERT(data<=G_MAXUINT32); proto_tree_add_uint(tree, hfindex, tvb, offset, 8, (guint32)data); } } @@ -1059,32 +1059,32 @@ dissect_dcerpc_uint64 (tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, int dissect_dcerpc_float(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, - proto_tree *tree, guint8 *drep, - int hfindex, gfloat *pdata) + proto_tree *tree, guint8 *drep, + int hfindex, gfloat *pdata) { - gfloat data; + gfloat data; - switch(drep[1]) { - case(DCE_RPC_DREP_FP_IEEE): - data = ((drep[0] & 0x10) - ? tvb_get_letohieee_float(tvb, offset) - : tvb_get_ntohieee_float(tvb, offset)); - if (tree) { - proto_tree_add_float(tree, hfindex, tvb, offset, 4, data); - } - break; - case(DCE_RPC_DREP_FP_VAX): /* (fall trough) */ - case(DCE_RPC_DREP_FP_CRAY): /* (fall trough) */ - case(DCE_RPC_DREP_FP_IBM): /* (fall trough) */ - default: - /* ToBeDone: non IEEE floating formats */ - /* Set data to a negative infinity value */ - data = -G_MAXFLOAT; - if (tree) { - proto_tree_add_debug_text(tree, "DCE RPC: dissection of non IEEE floating formats currently not implemented (drep=%u)!", drep[1]); - } - } + switch(drep[1]) { + case(DCE_RPC_DREP_FP_IEEE): + data = ((drep[0] & 0x10) + ? tvb_get_letohieee_float(tvb, offset) + : tvb_get_ntohieee_float(tvb, offset)); + if (tree) { + proto_tree_add_float(tree, hfindex, tvb, offset, 4, data); + } + break; + case(DCE_RPC_DREP_FP_VAX): /* (fall trough) */ + case(DCE_RPC_DREP_FP_CRAY): /* (fall trough) */ + case(DCE_RPC_DREP_FP_IBM): /* (fall trough) */ + default: + /* ToBeDone: non IEEE floating formats */ + /* Set data to a negative infinity value */ + data = -G_MAXFLOAT; + if (tree) { + proto_tree_add_debug_text(tree, "DCE RPC: dissection of non IEEE floating formats currently not implemented (drep=%u)!", drep[1]); + } + } if (pdata) *pdata = data; return offset + 4; @@ -1093,32 +1093,32 @@ dissect_dcerpc_float(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, int dissect_dcerpc_double(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, - proto_tree *tree, guint8 *drep, - int hfindex, gdouble *pdata) + proto_tree *tree, guint8 *drep, + int hfindex, gdouble *pdata) { gdouble data; - switch(drep[1]) { - case(DCE_RPC_DREP_FP_IEEE): - data = ((drep[0] & 0x10) - ? tvb_get_letohieee_double(tvb, offset) - : tvb_get_ntohieee_double(tvb, offset)); - if (tree) { - proto_tree_add_double(tree, hfindex, tvb, offset, 8, data); - } - break; - case(DCE_RPC_DREP_FP_VAX): /* (fall trough) */ - case(DCE_RPC_DREP_FP_CRAY): /* (fall trough) */ - case(DCE_RPC_DREP_FP_IBM): /* (fall trough) */ - default: - /* ToBeDone: non IEEE double formats */ - /* Set data to a negative infinity value */ - data = -G_MAXDOUBLE; - if (tree) { - proto_tree_add_debug_text(tree, "DCE RPC: dissection of non IEEE double formats currently not implemented (drep=%u)!", drep[1]); - } - } + switch(drep[1]) { + case(DCE_RPC_DREP_FP_IEEE): + data = ((drep[0] & 0x10) + ? tvb_get_letohieee_double(tvb, offset) + : tvb_get_ntohieee_double(tvb, offset)); + if (tree) { + proto_tree_add_double(tree, hfindex, tvb, offset, 8, data); + } + break; + case(DCE_RPC_DREP_FP_VAX): /* (fall trough) */ + case(DCE_RPC_DREP_FP_CRAY): /* (fall trough) */ + case(DCE_RPC_DREP_FP_IBM): /* (fall trough) */ + default: + /* ToBeDone: non IEEE double formats */ + /* Set data to a negative infinity value */ + data = -G_MAXDOUBLE; + if (tree) { + proto_tree_add_debug_text(tree, "DCE RPC: dissection of non IEEE double formats currently not implemented (drep=%u)!", drep[1]); + } + } if (pdata) *pdata = data; return offset + 8; @@ -1127,8 +1127,8 @@ dissect_dcerpc_double(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, int dissect_dcerpc_uuid_t (tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, - proto_tree *tree, guint8 *drep, - int hfindex, e_uuid_t *pdata) + proto_tree *tree, guint8 *drep, + int hfindex, e_uuid_t *pdata) { e_uuid_t uuid; @@ -1139,7 +1139,7 @@ dissect_dcerpc_uuid_t (tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, tvb_get_ntohguid (tvb, offset, (e_guid_t *) &uuid); } if (tree) { - proto_tree_add_guid(tree, hfindex, tvb, offset, 16, (e_guid_t *) &uuid); + proto_tree_add_guid(tree, hfindex, tvb, offset, 16, (e_guid_t *) &uuid); } if (pdata) { *pdata = uuid; @@ -1186,148 +1186,148 @@ dcerpc_tvb_get_uuid (tvbuff_t *tvb, gint offset, guint8 *drep, e_uuid_t *uuid) /* function to dissect a unidimensional conformant array */ int dissect_ndr_ucarray(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, - dcerpc_dissect_fnct_t *fnct) + proto_tree *tree, guint8 *drep, + dcerpc_dissect_fnct_t *fnct) { - guint32 i; - dcerpc_info *di; - int old_offset; - int conformance_size = 4; + guint32 i; + dcerpc_info *di; + int old_offset; + int conformance_size = 4; - di=pinfo->private_data; + di=pinfo->private_data; - if (di->call_data->flags & DCERPC_IS_NDR64) { - conformance_size = 8; - } + if (di->call_data->flags & DCERPC_IS_NDR64) { + conformance_size = 8; + } - if(di->conformant_run){ - guint64 val; + if(di->conformant_run){ + guint64 val; - /* conformant run, just dissect the max_count header */ - old_offset=offset; - di->conformant_run=0; - offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, - hf_dcerpc_array_max_count, &val); - di->array_max_count = (gint32)val; - di->array_max_count_offset=offset-conformance_size; - di->conformant_run=1; - di->conformant_eaten=offset-old_offset; - } else { - /* we don't remember where in the bytestream this field was */ - proto_tree_add_uint(tree, hf_dcerpc_array_max_count, tvb, di->array_max_count_offset, conformance_size, di->array_max_count); + /* conformant run, just dissect the max_count header */ + old_offset=offset; + di->conformant_run=0; + offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, + hf_dcerpc_array_max_count, &val); + di->array_max_count = (gint32)val; + di->array_max_count_offset=offset-conformance_size; + di->conformant_run=1; + di->conformant_eaten=offset-old_offset; + } else { + /* we don't remember where in the bytestream this field was */ + proto_tree_add_uint(tree, hf_dcerpc_array_max_count, tvb, di->array_max_count_offset, conformance_size, di->array_max_count); - /* real run, dissect the elements */ - for(i=0;iarray_max_count;i++){ - offset = (*fnct)(tvb, offset, pinfo, tree, drep); - } - } + /* real run, dissect the elements */ + for(i=0;iarray_max_count;i++){ + offset = (*fnct)(tvb, offset, pinfo, tree, drep); + } + } - return offset; + return offset; } /* function to dissect a unidimensional conformant and varying array */ int dissect_ndr_ucvarray(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, - dcerpc_dissect_fnct_t *fnct) + proto_tree *tree, guint8 *drep, + dcerpc_dissect_fnct_t *fnct) { - guint32 i; - dcerpc_info *di; - int old_offset; - int conformance_size = 4; + guint32 i; + dcerpc_info *di; + int old_offset; + int conformance_size = 4; - di=pinfo->private_data; + di=pinfo->private_data; - if (di->call_data->flags & DCERPC_IS_NDR64) { - conformance_size = 8; - } + if (di->call_data->flags & DCERPC_IS_NDR64) { + conformance_size = 8; + } - if(di->conformant_run){ - guint64 val; + if(di->conformant_run){ + guint64 val; - /* conformant run, just dissect the max_count header */ - old_offset=offset; - di->conformant_run=0; - offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, - hf_dcerpc_array_max_count, &val); - DISSECTOR_ASSERT(val<=G_MAXUINT32); - di->array_max_count = (guint32)val; - di->array_max_count_offset=offset-conformance_size; - offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, - hf_dcerpc_array_offset, &val); - DISSECTOR_ASSERT(val<=G_MAXUINT32); - di->array_offset = (guint32)val; - di->array_offset_offset=offset-conformance_size; - offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, - hf_dcerpc_array_actual_count, &val); - DISSECTOR_ASSERT(val<=G_MAXUINT32); - di->array_actual_count=(guint32)val; - di->array_actual_count_offset=offset-conformance_size; - di->conformant_run=1; - di->conformant_eaten=offset-old_offset; - } else { - /* we dont dont remember where in the bytestream these fields were */ - proto_tree_add_uint(tree, hf_dcerpc_array_max_count, tvb, di->array_max_count_offset, conformance_size, di->array_max_count); - proto_tree_add_uint(tree, hf_dcerpc_array_offset, tvb, di->array_offset_offset, conformance_size, di->array_offset); - proto_tree_add_uint(tree, hf_dcerpc_array_actual_count, tvb, di->array_actual_count_offset, conformance_size, di->array_actual_count); + /* conformant run, just dissect the max_count header */ + old_offset=offset; + di->conformant_run=0; + offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, + hf_dcerpc_array_max_count, &val); + DISSECTOR_ASSERT(val<=G_MAXUINT32); + di->array_max_count = (guint32)val; + di->array_max_count_offset=offset-conformance_size; + offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, + hf_dcerpc_array_offset, &val); + DISSECTOR_ASSERT(val<=G_MAXUINT32); + di->array_offset = (guint32)val; + di->array_offset_offset=offset-conformance_size; + offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, + hf_dcerpc_array_actual_count, &val); + DISSECTOR_ASSERT(val<=G_MAXUINT32); + di->array_actual_count=(guint32)val; + di->array_actual_count_offset=offset-conformance_size; + di->conformant_run=1; + di->conformant_eaten=offset-old_offset; + } else { + /* we dont dont remember where in the bytestream these fields were */ + proto_tree_add_uint(tree, hf_dcerpc_array_max_count, tvb, di->array_max_count_offset, conformance_size, di->array_max_count); + proto_tree_add_uint(tree, hf_dcerpc_array_offset, tvb, di->array_offset_offset, conformance_size, di->array_offset); + proto_tree_add_uint(tree, hf_dcerpc_array_actual_count, tvb, di->array_actual_count_offset, conformance_size, di->array_actual_count); - /* real run, dissect the elements */ - for(i=0;iarray_actual_count;i++){ - old_offset = offset; - offset = (*fnct)(tvb, offset, pinfo, tree, drep); - if (offset <= old_offset) - THROW(ReportedBoundsError); - } - } + /* real run, dissect the elements */ + for(i=0;iarray_actual_count;i++){ + old_offset = offset; + offset = (*fnct)(tvb, offset, pinfo, tree, drep); + if (offset <= old_offset) + THROW(ReportedBoundsError); + } + } - return offset; + return offset; } /* function to dissect a unidimensional varying array */ int dissect_ndr_uvarray(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, - dcerpc_dissect_fnct_t *fnct) + proto_tree *tree, guint8 *drep, + dcerpc_dissect_fnct_t *fnct) { - guint32 i; - dcerpc_info *di; - int old_offset; - int conformance_size = 4; + guint32 i; + dcerpc_info *di; + int old_offset; + int conformance_size = 4; - di=pinfo->private_data; + di=pinfo->private_data; - if (di->call_data->flags & DCERPC_IS_NDR64) { - conformance_size = 8; - } + if (di->call_data->flags & DCERPC_IS_NDR64) { + conformance_size = 8; + } - if(di->conformant_run){ - guint64 val; + if(di->conformant_run){ + guint64 val; - /* conformant run, just dissect the max_count header */ - old_offset=offset; - di->conformant_run=0; - offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, - hf_dcerpc_array_offset, &val); - DISSECTOR_ASSERT(val<=G_MAXUINT32); - di->array_offset=(guint32)val; - di->array_offset_offset=offset-conformance_size; - offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, - hf_dcerpc_array_actual_count, &val); - DISSECTOR_ASSERT(val<=G_MAXUINT32); - di->array_actual_count=(guint32)val; - di->array_actual_count_offset=offset-conformance_size; - di->conformant_run=1; - di->conformant_eaten=offset-old_offset; - } else { - /* we dont dont remember where in the bytestream these fields were */ - proto_tree_add_uint(tree, hf_dcerpc_array_offset, tvb, di->array_offset_offset, conformance_size, di->array_offset); - proto_tree_add_uint(tree, hf_dcerpc_array_actual_count, tvb, di->array_actual_count_offset, conformance_size, di->array_actual_count); + /* conformant run, just dissect the max_count header */ + old_offset=offset; + di->conformant_run=0; + offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, + hf_dcerpc_array_offset, &val); + DISSECTOR_ASSERT(val<=G_MAXUINT32); + di->array_offset=(guint32)val; + di->array_offset_offset=offset-conformance_size; + offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, drep, + hf_dcerpc_array_actual_count, &val); + DISSECTOR_ASSERT(val<=G_MAXUINT32); + di->array_actual_count=(guint32)val; + di->array_actual_count_offset=offset-conformance_size; + di->conformant_run=1; + di->conformant_eaten=offset-old_offset; + } else { + /* we dont dont remember where in the bytestream these fields were */ + proto_tree_add_uint(tree, hf_dcerpc_array_offset, tvb, di->array_offset_offset, conformance_size, di->array_offset); + proto_tree_add_uint(tree, hf_dcerpc_array_actual_count, tvb, di->array_actual_count_offset, conformance_size, di->array_actual_count); - /* real run, dissect the elements */ - for(i=0;iarray_actual_count;i++){ - offset = (*fnct)(tvb, offset, pinfo, tree, drep); - } - } + /* real run, dissect the elements */ + for(i=0;iarray_actual_count;i++){ + offset = (*fnct)(tvb, offset, pinfo, tree, drep); + } + } - return offset; + return offset; } /* Dissect an string of bytes. This corresponds to @@ -1347,29 +1347,29 @@ dissect_ndr_uvarray(tvbuff_t *tvb, gint offset, packet_info *pinfo, varying arrays of bytes. */ int dissect_ndr_byte_array(tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep) + proto_tree *tree, guint8 *drep) { dcerpc_info *di; guint64 len; di=pinfo->private_data; if(di->conformant_run){ - /* just a run to handle conformant arrays, no scalars to dissect */ - return offset; + /* just a run to handle conformant arrays, no scalars to dissect */ + return offset; } /* NDR array header */ offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, - hf_dcerpc_array_max_count, NULL); + hf_dcerpc_array_max_count, NULL); offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, - hf_dcerpc_array_offset, NULL); + hf_dcerpc_array_offset, NULL); offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, drep, - hf_dcerpc_array_actual_count, &len); + hf_dcerpc_array_actual_count, &len); - DISSECTOR_ASSERT(len<=G_MAXUINT32); + DISSECTOR_ASSERT(len<=G_MAXUINT32); if (tree && len) { tvb_ensure_bytes_exist(tvb, offset, (guint32)len); proto_tree_add_item(tree, hf_dcerpc_array_buffer, @@ -1391,8 +1391,8 @@ dissect_ndr_byte_array(tvbuff_t *tvb, int offset, packet_info *pinfo, "dissect_ndr_ucvarray()" does? */ int dissect_ndr_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, int size_is, - int hfindex, gboolean add_subtree, char **data) + proto_tree *tree, guint8 *drep, int size_is, + int hfindex, gboolean add_subtree, char **data) { dcerpc_info *di; proto_item *string_item; @@ -1404,8 +1404,8 @@ dissect_ndr_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, di=pinfo->private_data; if(di->conformant_run){ - /* just a run to handle conformant arrays, no scalars to dissect */ - return offset; + /* just a run to handle conformant arrays, no scalars to dissect */ + return offset; } if (add_subtree) { @@ -1420,15 +1420,15 @@ dissect_ndr_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, /* NDR array header */ offset = dissect_ndr_uint3264(tvb, offset, pinfo, string_tree, drep, - hf_dcerpc_array_max_count, NULL); + hf_dcerpc_array_max_count, NULL); offset = dissect_ndr_uint3264(tvb, offset, pinfo, string_tree, drep, - hf_dcerpc_array_offset, NULL); + hf_dcerpc_array_offset, NULL); offset = dissect_ndr_uint3264(tvb, offset, pinfo, string_tree, drep, - hf_dcerpc_array_actual_count, &len); + hf_dcerpc_array_actual_count, &len); - DISSECTOR_ASSERT(len<=G_MAXUINT32); + DISSECTOR_ASSERT(len<=G_MAXUINT32); buffer_len = size_is * (guint32)len; /* Adjust offset */ @@ -1474,7 +1474,7 @@ dissect_ndr_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_item_append_text(string_item, ": %s", s); if (data) - *data = s; + *data = s; offset += buffer_len; @@ -1494,14 +1494,14 @@ dissect_ndr_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, (Not that it matters if it is.) */ int dissect_ndr_char_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep) + proto_tree *tree, guint8 *drep) { dcerpc_info *di; di=pinfo->private_data; return dissect_ndr_cvstring(tvb, offset, pinfo, tree, drep, - sizeof(guint8), di->hf_index, - FALSE, NULL); + sizeof(guint8), di->hf_index, + FALSE, NULL); } /* Dissect a conformant varying string of wchars (wide characters). @@ -1515,14 +1515,14 @@ dissect_ndr_char_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, (Not that it matters if it is.) */ int dissect_ndr_wchar_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep) + proto_tree *tree, guint8 *drep) { dcerpc_info *di; di=pinfo->private_data; return dissect_ndr_cvstring(tvb, offset, pinfo, tree, drep, - sizeof(guint16), di->hf_index, - FALSE, NULL); + sizeof(guint16), di->hf_index, + FALSE, NULL); } /* This function is aimed for PIDL useage and dissects a UNIQUE pointer to @@ -1531,49 +1531,49 @@ dissect_ndr_wchar_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, int PIDL_dissect_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int chsize, int hfindex, guint32 param) { - dcerpc_info *di; - char *s = NULL; - gint levels = CB_STR_ITEM_LEVELS(param); + dcerpc_info *di; + char *s = NULL; + gint levels = CB_STR_ITEM_LEVELS(param); - di=pinfo->private_data; + di=pinfo->private_data; - offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, drep, - chsize, hfindex, - FALSE, &s); + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, drep, + chsize, hfindex, + FALSE, &s); - if(!di->conformant_run){ - /* Append string to COL_INFO */ - if (param & PIDL_SET_COL_INFO) { - if (check_col(pinfo->cinfo, COL_INFO)) - col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", s); - } - /* Save string to dcv->private_data */ - if((param & PIDL_STR_SAVE) - && (!pinfo->fd->flags.visited)){ - dcerpc_call_value *dcv = (dcerpc_call_value *)di->call_data; - dcv->private_data = se_strdup(s); - } - /* Append string to upper-level proto_items */ - if (levels > 0 && tree && s && s[0]) { - proto_item_append_text(tree, ": %s", s); - tree = tree->parent; - levels--; - if (levels > 0) { - proto_item_append_text(tree, ": %s", s); - tree = tree->parent; - levels--; - while (levels > 0) { - proto_item_append_text(tree, " %s", s); - tree = tree->parent; - levels--; - } - } - } + if(!di->conformant_run){ + /* Append string to COL_INFO */ + if (param & PIDL_SET_COL_INFO) { + if (check_col(pinfo->cinfo, COL_INFO)) + col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", s); + } + /* Save string to dcv->private_data */ + if((param & PIDL_STR_SAVE) + && (!pinfo->fd->flags.visited)){ + dcerpc_call_value *dcv = (dcerpc_call_value *)di->call_data; + dcv->private_data = se_strdup(s); + } + /* Append string to upper-level proto_items */ + if (levels > 0 && tree && s && s[0]) { + proto_item_append_text(tree, ": %s", s); + tree = tree->parent; + levels--; + if (levels > 0) { + proto_item_append_text(tree, ": %s", s); + tree = tree->parent; + levels--; + while (levels > 0) { + proto_item_append_text(tree, " %s", s); + tree = tree->parent; + levels--; + } + } + } - } + } - g_free(s); - return offset; + g_free(s); + return offset; } /* Dissect an NDR varying string of elements. @@ -1582,8 +1582,8 @@ PIDL_dissect_cvstring(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree */ int dissect_ndr_vstring(tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, int size_is, - int hfindex, gboolean add_subtree, char **data) + proto_tree *tree, guint8 *drep, int size_is, + int hfindex, gboolean add_subtree, char **data) { dcerpc_info *di; proto_item *string_item; @@ -1595,8 +1595,8 @@ dissect_ndr_vstring(tvbuff_t *tvb, int offset, packet_info *pinfo, di=pinfo->private_data; if(di->conformant_run){ - /* just a run to handle conformant arrays, no scalars to dissect */ - return offset; + /* just a run to handle conformant arrays, no scalars to dissect */ + return offset; } if (add_subtree) { @@ -1610,12 +1610,12 @@ dissect_ndr_vstring(tvbuff_t *tvb, int offset, packet_info *pinfo, /* NDR array header */ offset = dissect_ndr_uint3264(tvb, offset, pinfo, string_tree, drep, - hf_dcerpc_array_offset, NULL); + hf_dcerpc_array_offset, NULL); offset = dissect_ndr_uint3264(tvb, offset, pinfo, string_tree, drep, - hf_dcerpc_array_actual_count, &len); + hf_dcerpc_array_actual_count, &len); - DISSECTOR_ASSERT(len<=G_MAXUINT32); + DISSECTOR_ASSERT(len<=G_MAXUINT32); buffer_len = size_is * (guint32)len; /* Adjust offset */ @@ -1661,7 +1661,7 @@ dissect_ndr_vstring(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_item_append_text(string_item, ": %s", s); if (data) - *data = s; + *data = s; offset += buffer_len; @@ -1681,14 +1681,14 @@ dissect_ndr_vstring(tvbuff_t *tvb, int offset, packet_info *pinfo, (Not that it matters if it is.) */ int dissect_ndr_char_vstring(tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep) + proto_tree *tree, guint8 *drep) { dcerpc_info *di; di=pinfo->private_data; return dissect_ndr_vstring(tvb, offset, pinfo, tree, drep, - sizeof(guint8), di->hf_index, - FALSE, NULL); + sizeof(guint8), di->hf_index, + FALSE, NULL); } /* Dissect a varying string of wchars (wide characters). @@ -1702,14 +1702,14 @@ dissect_ndr_char_vstring(tvbuff_t *tvb, int offset, packet_info *pinfo, (Not that it matters if it is.) */ int dissect_ndr_wchar_vstring(tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep) + proto_tree *tree, guint8 *drep) { dcerpc_info *di; di=pinfo->private_data; return dissect_ndr_vstring(tvb, offset, pinfo, tree, drep, - sizeof(guint16), di->hf_index, - FALSE, NULL); + sizeof(guint16), di->hf_index, + FALSE, NULL); } @@ -1726,200 +1726,200 @@ static gboolean pointers_are_top_level = TRUE; /* as a kludge, we represent all embedded reference pointers as id==-1 hoping that his will not collide with any non-ref pointers */ typedef struct ndr_pointer_data { - guint32 id; - proto_item *item; /* proto_item for pointer */ - proto_tree *tree; /* subtree of above item */ - dcerpc_dissect_fnct_t *fnct; /*if non-NULL, we have not called it yet*/ - int hf_index; - dcerpc_callback_fnct_t *callback; - void *callback_args; + guint32 id; + proto_item *item; /* proto_item for pointer */ + proto_tree *tree; /* subtree of above item */ + dcerpc_dissect_fnct_t *fnct; /*if non-NULL, we have not called it yet*/ + int hf_index; + dcerpc_callback_fnct_t *callback; + void *callback_args; } ndr_pointer_data_t; void init_ndr_pointer_list(packet_info *pinfo) { - dcerpc_info *di; + dcerpc_info *di; - di=pinfo->private_data; - di->conformant_run=0; + di=pinfo->private_data; + di->conformant_run=0; - while(ndr_pointer_list){ - ndr_pointer_data_t *npd; + while(ndr_pointer_list){ + ndr_pointer_data_t *npd; - npd=g_slist_nth_data(ndr_pointer_list, 0); - ndr_pointer_list=g_slist_remove(ndr_pointer_list, npd); - g_free(npd); - } + npd=g_slist_nth_data(ndr_pointer_list, 0); + ndr_pointer_list=g_slist_remove(ndr_pointer_list, npd); + g_free(npd); + } - ndr_pointer_list=NULL; - ndr_pointer_list_pos=0; - pointers_are_top_level=TRUE; + ndr_pointer_list=NULL; + ndr_pointer_list_pos=0; + pointers_are_top_level=TRUE; } int dissect_deferred_pointers(packet_info *pinfo, tvbuff_t *tvb, int offset, guint8 *drep) { - int found_new_pointer; - dcerpc_info *di; - int old_offset; - int next_pointer; + int found_new_pointer; + dcerpc_info *di; + int old_offset; + int next_pointer; - next_pointer=0; - di=pinfo->private_data; - do{ - int i, len; + next_pointer=0; + di=pinfo->private_data; + do{ + int i, len; - found_new_pointer=0; - len=g_slist_length(ndr_pointer_list); - for(i=next_pointer;ifnct){ - dcerpc_dissect_fnct_t *fnct; + found_new_pointer=0; + len=g_slist_length(ndr_pointer_list); + for(i=next_pointer;ifnct){ + dcerpc_dissect_fnct_t *fnct; - next_pointer=i+1; - found_new_pointer=1; - fnct=tnpd->fnct; - tnpd->fnct=NULL; - ndr_pointer_list_pos=i+1; - di->hf_index=tnpd->hf_index; - /* first a run to handle any conformant - array headers */ - di->conformant_run=1; - di->conformant_eaten=0; - old_offset = offset; - offset = (*(fnct))(tvb, offset, pinfo, NULL, drep); + next_pointer=i+1; + found_new_pointer=1; + fnct=tnpd->fnct; + tnpd->fnct=NULL; + ndr_pointer_list_pos=i+1; + di->hf_index=tnpd->hf_index; + /* first a run to handle any conformant + array headers */ + di->conformant_run=1; + di->conformant_eaten=0; + old_offset = offset; + offset = (*(fnct))(tvb, offset, pinfo, NULL, drep); - DISSECTOR_ASSERT((offset-old_offset)==di->conformant_eaten); - /* This is to check for any bugs in the dissectors. - * - * Basically, the NDR representation will store all - * arrays in two blocks, one block with the dimension - * discreption, like size, number of elements and such, - * and another block that contains the actual data stored - * in the array. - * If the array is embedded directly inside another, - * encapsulating aggregate type, like a union or struct, - * then these two blocks will be stored at different places - * in the bytestream, with other data between the blocks. - * - * For this reason, all pointers to types (both aggregate - * and scalar, for simplicity no distinction is made) - * will have its dissector called twice. - * The dissector will first be called with conformant_run==1 - * in which mode the dissector MUST NOT consume any data from - * the tvbuff (i.e. may not dissect anything) except the - * initial control block for arrays. - * The second time the dissector is called, with - * conformant_run==0, all other data for the type will be - * dissected. - * - * All dissect_ndr_ dissectors are already prepared - * for this and knows when it should eat data from the tvb - * and when not to, so implementors of dissectors will - * normally not need to worry about this or even know about - * it. However, if a dissector for an aggregate type calls - * a subdissector from outside packet-dcerpc.c, such as - * the dissector in packet-smb.c for NT Security Descriptors - * as an example, then it is VERY important to encapsulate - * this call to an external subdissector with the appropriate - * test for conformant_run, i.e. it will need something like - * - * dcerpc_info *di; - * - * di=pinfo->private_data; - * if(di->conformant_run){ - * return offset; - * } - * - * to make sure it makes the right thing. - * This assert will signal when someone has forgotten to - * make the dissector aware of this requirement. - */ + DISSECTOR_ASSERT((offset-old_offset)==di->conformant_eaten); + /* This is to check for any bugs in the dissectors. + * + * Basically, the NDR representation will store all + * arrays in two blocks, one block with the dimension + * discreption, like size, number of elements and such, + * and another block that contains the actual data stored + * in the array. + * If the array is embedded directly inside another, + * encapsulating aggregate type, like a union or struct, + * then these two blocks will be stored at different places + * in the bytestream, with other data between the blocks. + * + * For this reason, all pointers to types (both aggregate + * and scalar, for simplicity no distinction is made) + * will have its dissector called twice. + * The dissector will first be called with conformant_run==1 + * in which mode the dissector MUST NOT consume any data from + * the tvbuff (i.e. may not dissect anything) except the + * initial control block for arrays. + * The second time the dissector is called, with + * conformant_run==0, all other data for the type will be + * dissected. + * + * All dissect_ndr_ dissectors are already prepared + * for this and knows when it should eat data from the tvb + * and when not to, so implementors of dissectors will + * normally not need to worry about this or even know about + * it. However, if a dissector for an aggregate type calls + * a subdissector from outside packet-dcerpc.c, such as + * the dissector in packet-smb.c for NT Security Descriptors + * as an example, then it is VERY important to encapsulate + * this call to an external subdissector with the appropriate + * test for conformant_run, i.e. it will need something like + * + * dcerpc_info *di; + * + * di=pinfo->private_data; + * if(di->conformant_run){ + * return offset; + * } + * + * to make sure it makes the right thing. + * This assert will signal when someone has forgotten to + * make the dissector aware of this requirement. + */ - /* now we dissect the actual pointer */ - di->conformant_run=0; - old_offset = offset; - offset = (*(fnct))(tvb, offset, pinfo, tnpd->tree, drep); - if (tnpd->callback) - tnpd->callback(pinfo, tnpd->tree, tnpd->item, tvb, old_offset, offset, tnpd->callback_args); - break; - } - } - } while(found_new_pointer); + /* now we dissect the actual pointer */ + di->conformant_run=0; + old_offset = offset; + offset = (*(fnct))(tvb, offset, pinfo, tnpd->tree, drep); + if (tnpd->callback) + tnpd->callback(pinfo, tnpd->tree, tnpd->item, tvb, old_offset, offset, tnpd->callback_args); + break; + } + } + } while(found_new_pointer); - return offset; + return offset; } static void add_pointer_to_list(packet_info *pinfo, proto_tree *tree, proto_item *item, - dcerpc_dissect_fnct_t *fnct, guint32 id, int hf_index, - dcerpc_callback_fnct_t *callback, void *callback_args) + dcerpc_dissect_fnct_t *fnct, guint32 id, int hf_index, + dcerpc_callback_fnct_t *callback, void *callback_args) { - ndr_pointer_data_t *npd; + ndr_pointer_data_t *npd; - /* check if this pointer is valid */ - if(id!=0xffffffff){ - dcerpc_info *di; - dcerpc_call_value *value; + /* check if this pointer is valid */ + if(id!=0xffffffff){ + dcerpc_info *di; + dcerpc_call_value *value; - di=pinfo->private_data; - value=di->call_data; + di=pinfo->private_data; + value=di->call_data; - if(di->ptype == PDU_REQ){ - if(!(pinfo->fd->flags.visited)){ - if(id>value->max_ptr){ - value->max_ptr=id; - } - } - } else { - /* if we havent seen the request bail out since we cant - know whether this is the first non-NULL instance - or not */ - if(value->req_frame==0){ - /* XXX THROW EXCEPTION */ - } + if(di->ptype == PDU_REQ){ + if(!(pinfo->fd->flags.visited)){ + if(id>value->max_ptr){ + value->max_ptr=id; + } + } + } else { + /* if we havent seen the request bail out since we cant + know whether this is the first non-NULL instance + or not */ + if(value->req_frame==0){ + /* XXX THROW EXCEPTION */ + } - /* We saw this one in the request frame, nothing to - dissect later */ - if(id<=value->max_ptr){ - return; - } - } - } + /* We saw this one in the request frame, nothing to + dissect later */ + if(id<=value->max_ptr){ + return; + } + } + } - npd=g_malloc(sizeof(ndr_pointer_data_t)); - npd->id=id; - npd->tree=tree; - npd->item=item; - npd->fnct=fnct; - npd->hf_index=hf_index; - npd->callback=callback; - npd->callback_args=callback_args; - ndr_pointer_list = g_slist_insert(ndr_pointer_list, npd, - ndr_pointer_list_pos); - ndr_pointer_list_pos++; + npd=g_malloc(sizeof(ndr_pointer_data_t)); + npd->id=id; + npd->tree=tree; + npd->item=item; + npd->fnct=fnct; + npd->hf_index=hf_index; + npd->callback=callback; + npd->callback_args=callback_args; + ndr_pointer_list = g_slist_insert(ndr_pointer_list, npd, + ndr_pointer_list_pos); + ndr_pointer_list_pos++; } static int find_pointer_index(guint32 id) { - ndr_pointer_data_t *npd; - int i,len; + ndr_pointer_data_t *npd; + int i,len; - len=g_slist_length(ndr_pointer_list); - for(i=0;iid==id){ - return i; - } - } - } + len=g_slist_length(ndr_pointer_list); + for(i=0;iid==id){ + return i; + } + } + } - return -1; + return -1; } /* This function dissects an NDR pointer and stores the callback for later @@ -1943,265 +1943,265 @@ find_pointer_index(guint32 id) */ int dissect_ndr_pointer_cb(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, dcerpc_dissect_fnct_t *fnct, - int type, const char *text, int hf_index, - dcerpc_callback_fnct_t *callback, void *callback_args) + proto_tree *tree, guint8 *drep, dcerpc_dissect_fnct_t *fnct, + int type, const char *text, int hf_index, + dcerpc_callback_fnct_t *callback, void *callback_args) { - dcerpc_info *di; - proto_tree *tr = NULL; - gint start_offset = offset; - int pointer_size = 4; + dcerpc_info *di; + proto_tree *tr = NULL; + gint start_offset = offset; + int pointer_size = 4; - di=pinfo->private_data; - if(di->conformant_run){ - /* this call was only for dissecting the header for any - embedded conformant array. we will not parse any - pointers in this mode. - */ - return offset; - } - if (di->call_data->flags & DCERPC_IS_NDR64) { - pointer_size = 8; - } + di=pinfo->private_data; + if(di->conformant_run){ + /* this call was only for dissecting the header for any + embedded conformant array. we will not parse any + pointers in this mode. + */ + return offset; + } + if (di->call_data->flags & DCERPC_IS_NDR64) { + pointer_size = 8; + } - /*TOP LEVEL REFERENCE POINTER*/ - if( pointers_are_top_level - &&(type==NDR_POINTER_REF) ){ - proto_item *item; + /*TOP LEVEL REFERENCE POINTER*/ + if( pointers_are_top_level + &&(type==NDR_POINTER_REF) ){ + proto_item *item; - /* we must find out a nice way to do the length here */ - item=proto_tree_add_text(tree, tvb, offset, 0, - "%s", text); - tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); + /* we must find out a nice way to do the length here */ + item=proto_tree_add_text(tree, tvb, offset, 0, + "%s", text); + tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); - add_pointer_to_list(pinfo, tr, item, fnct, 0xffffffff, - hf_index, callback, callback_args); - goto after_ref_id; - } + add_pointer_to_list(pinfo, tr, item, fnct, 0xffffffff, + hf_index, callback, callback_args); + goto after_ref_id; + } - /*TOP LEVEL FULL POINTER*/ - if( pointers_are_top_level - && (type==NDR_POINTER_PTR) ){ - int idx; - guint64 id; - proto_item *item; + /*TOP LEVEL FULL POINTER*/ + if( pointers_are_top_level + && (type==NDR_POINTER_PTR) ){ + int idx; + guint64 id; + proto_item *item; - /* get the referent id */ - offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); + /* get the referent id */ + offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); - tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); - /* we got a NULL pointer */ - if(id==0){ - proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "(NULL pointer) %s",text); - goto after_ref_id; - } + tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); + /* we got a NULL pointer */ + if(id==0){ + proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "(NULL pointer) %s",text); + goto after_ref_id; + } - /* see if we have seen this pointer before */ - DISSECTOR_ASSERT(id<=G_MAXUINT32); - idx=find_pointer_index((guint32)id); + /* see if we have seen this pointer before */ + DISSECTOR_ASSERT(id<=G_MAXUINT32); + idx=find_pointer_index((guint32)id); - /* we have seen this pointer before */ - if(idx>=0){ - proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "(duplicate PTR) %s",text); - goto after_ref_id; - } + /* we have seen this pointer before */ + if(idx>=0){ + proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "(duplicate PTR) %s",text); + goto after_ref_id; + } - /* new pointer */ - item=proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "%s", text); - tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); - proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, - offset-pointer_size, pointer_size, (guint32)id); - add_pointer_to_list(pinfo, tr, item, fnct, (guint32)id, hf_index, - callback, callback_args); - goto after_ref_id; - } - /*TOP LEVEL UNIQUE POINTER*/ - if( pointers_are_top_level - && (type==NDR_POINTER_UNIQUE) ){ - guint64 id; - proto_item *item; + /* new pointer */ + item=proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "%s", text); + tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); + proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, + offset-pointer_size, pointer_size, (guint32)id); + add_pointer_to_list(pinfo, tr, item, fnct, (guint32)id, hf_index, + callback, callback_args); + goto after_ref_id; + } + /*TOP LEVEL UNIQUE POINTER*/ + if( pointers_are_top_level + && (type==NDR_POINTER_UNIQUE) ){ + guint64 id; + proto_item *item; - /* get the referent id */ - offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); + /* get the referent id */ + offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); - tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); - /* we got a NULL pointer */ - if(id==0){ - proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "(NULL pointer) %s",text); - goto after_ref_id; - } + tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); + /* we got a NULL pointer */ + if(id==0){ + proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "(NULL pointer) %s",text); + goto after_ref_id; + } - /* new pointer */ - DISSECTOR_ASSERT(id<=G_MAXUINT32); - item=proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "%s", text); - tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); - proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, - offset-pointer_size, pointer_size, (guint32)id); - add_pointer_to_list(pinfo, tr, item, fnct, 0xffffffff, - hf_index, callback, callback_args); - goto after_ref_id; - } + /* new pointer */ + DISSECTOR_ASSERT(id<=G_MAXUINT32); + item=proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "%s", text); + tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); + proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, + offset-pointer_size, pointer_size, (guint32)id); + add_pointer_to_list(pinfo, tr, item, fnct, 0xffffffff, + hf_index, callback, callback_args); + goto after_ref_id; + } - /*EMBEDDED REFERENCE POINTER*/ - if( (!pointers_are_top_level) - && (type==NDR_POINTER_REF) ){ - guint64 id; - proto_item *item; + /*EMBEDDED REFERENCE POINTER*/ + if( (!pointers_are_top_level) + && (type==NDR_POINTER_REF) ){ + guint64 id; + proto_item *item; - /* get the referent id */ - offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); + /* get the referent id */ + offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); - tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); - /* new pointer */ - item=proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "%s",text); - tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); - DISSECTOR_ASSERT(id<=G_MAXUINT32); - proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, - offset-pointer_size, pointer_size, (guint32)id); - add_pointer_to_list(pinfo, tr, item, fnct, 0xffffffff, - hf_index, callback, callback_args); - goto after_ref_id; - } + tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); + /* new pointer */ + item=proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "%s",text); + tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); + DISSECTOR_ASSERT(id<=G_MAXUINT32); + proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, + offset-pointer_size, pointer_size, (guint32)id); + add_pointer_to_list(pinfo, tr, item, fnct, 0xffffffff, + hf_index, callback, callback_args); + goto after_ref_id; + } - /*EMBEDDED UNIQUE POINTER*/ - if( (!pointers_are_top_level) - && (type==NDR_POINTER_UNIQUE) ){ - guint64 id; - proto_item *item; + /*EMBEDDED UNIQUE POINTER*/ + if( (!pointers_are_top_level) + && (type==NDR_POINTER_UNIQUE) ){ + guint64 id; + proto_item *item; - /* get the referent id */ - offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); + /* get the referent id */ + offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); - tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); - /* we got a NULL pointer */ - if(id==0){ - proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "(NULL pointer) %s", text); - goto after_ref_id; - } + tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); + /* we got a NULL pointer */ + if(id==0){ + proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "(NULL pointer) %s", text); + goto after_ref_id; + } - /* new pointer */ - item=proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "%s",text); - tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); - DISSECTOR_ASSERT(id<=G_MAXUINT32); - proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, - offset-pointer_size, pointer_size, (guint32)id); - add_pointer_to_list(pinfo, tr, item, fnct, 0xffffffff, - hf_index, callback, callback_args); - goto after_ref_id; - } + /* new pointer */ + item=proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "%s",text); + tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); + DISSECTOR_ASSERT(id<=G_MAXUINT32); + proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, + offset-pointer_size, pointer_size, (guint32)id); + add_pointer_to_list(pinfo, tr, item, fnct, 0xffffffff, + hf_index, callback, callback_args); + goto after_ref_id; + } - /*EMBEDDED FULL POINTER*/ - if( (!pointers_are_top_level) - && (type==NDR_POINTER_PTR) ){ - int idx; - guint64 id; - proto_item *item; + /*EMBEDDED FULL POINTER*/ + if( (!pointers_are_top_level) + && (type==NDR_POINTER_PTR) ){ + int idx; + guint64 id; + proto_item *item; - /* get the referent id */ - offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); + /* get the referent id */ + offset = dissect_ndr_uint3264(tvb, offset, pinfo, NULL, drep, -1, &id); - tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); - /* we got a NULL pointer */ - if(id==0){ - proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "(NULL pointer) %s",text); - goto after_ref_id; - } + tvb_ensure_bytes_exist(tvb, offset-pointer_size, pointer_size); + /* we got a NULL pointer */ + if(id==0){ + proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "(NULL pointer) %s",text); + goto after_ref_id; + } - /* see if we have seen this pointer before */ - DISSECTOR_ASSERT(id<=G_MAXUINT32); - idx=find_pointer_index((guint32)id); + /* see if we have seen this pointer before */ + DISSECTOR_ASSERT(id<=G_MAXUINT32); + idx=find_pointer_index((guint32)id); - /* we have seen this pointer before */ - if(idx>=0){ - proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "(duplicate PTR) %s",text); - goto after_ref_id; - } + /* we have seen this pointer before */ + if(idx>=0){ + proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "(duplicate PTR) %s",text); + goto after_ref_id; + } - /* new pointer */ - item=proto_tree_add_text(tree, tvb, offset-pointer_size, - pointer_size, - "%s", text); - tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); - proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, - offset-pointer_size, pointer_size, (guint32)id); - add_pointer_to_list(pinfo, tr, item, fnct, (guint32)id, hf_index, - callback, callback_args); - goto after_ref_id; - } + /* new pointer */ + item=proto_tree_add_text(tree, tvb, offset-pointer_size, + pointer_size, + "%s", text); + tr=proto_item_add_subtree(item,ett_dcerpc_pointer_data); + proto_tree_add_uint(tr, hf_dcerpc_referent_id, tvb, + offset-pointer_size, pointer_size, (guint32)id); + add_pointer_to_list(pinfo, tr, item, fnct, (guint32)id, hf_index, + callback, callback_args); + goto after_ref_id; + } after_ref_id: - /* After each top level pointer we have dissected we have to - dissect all deferrals before we move on to the next top level - argument */ - if(pointers_are_top_level==TRUE){ - pointers_are_top_level=FALSE; - offset = dissect_deferred_pointers(pinfo, tvb, offset, drep); - pointers_are_top_level=TRUE; - } + /* After each top level pointer we have dissected we have to + dissect all deferrals before we move on to the next top level + argument */ + if(pointers_are_top_level==TRUE){ + pointers_are_top_level=FALSE; + offset = dissect_deferred_pointers(pinfo, tvb, offset, drep); + pointers_are_top_level=TRUE; + } - /* Set the length for the new subtree */ - if (tr){ - proto_item_set_len(tr, offset-start_offset); - } - return offset; + /* Set the length for the new subtree */ + if (tr){ + proto_item_set_len(tr, offset-start_offset); + } + return offset; } int dissect_ndr_pointer(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, dcerpc_dissect_fnct_t *fnct, - int type, const char *text, int hf_index) + proto_tree *tree, guint8 *drep, dcerpc_dissect_fnct_t *fnct, + int type, const char *text, int hf_index) { - return dissect_ndr_pointer_cb( - tvb, offset, pinfo, tree, drep, fnct, type, text, hf_index, - NULL, NULL); + return dissect_ndr_pointer_cb( + tvb, offset, pinfo, tree, drep, fnct, type, text, hf_index, + NULL, NULL); } int dissect_ndr_toplevel_pointer(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, dcerpc_dissect_fnct_t *fnct, - int type, const char *text, int hf_index) + proto_tree *tree, guint8 *drep, dcerpc_dissect_fnct_t *fnct, + int type, const char *text, int hf_index) { - int ret; + int ret; - pointers_are_top_level=TRUE; - ret=dissect_ndr_pointer_cb( - tvb, offset, pinfo, tree, drep, fnct, type, text, hf_index, - NULL, NULL); - return ret; + pointers_are_top_level=TRUE; + ret=dissect_ndr_pointer_cb( + tvb, offset, pinfo, tree, drep, fnct, type, text, hf_index, + NULL, NULL); + return ret; } int dissect_ndr_embedded_pointer(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, dcerpc_dissect_fnct_t *fnct, - int type, const char *text, int hf_index) + proto_tree *tree, guint8 *drep, dcerpc_dissect_fnct_t *fnct, + int type, const char *text, int hf_index) { - int ret; + int ret; - pointers_are_top_level=FALSE; - ret=dissect_ndr_pointer_cb( - tvb, offset, pinfo, tree, drep, fnct, type, text, hf_index, - NULL, NULL); - return ret; + pointers_are_top_level=FALSE; + ret=dissect_ndr_pointer_cb( + tvb, offset, pinfo, tree, drep, fnct, type, text, hf_index, + NULL, NULL); + return ret; } static void @@ -2218,47 +2218,47 @@ show_stub_data (tvbuff_t *tvb, gint offset, proto_tree *dcerpc_tree, * that happen to be in the tvbuff. */ if (tvb_length_remaining (tvb, offset) > 0) { - auth_pad_len = auth_info?auth_info->auth_pad_len:0; + auth_pad_len = auth_info?auth_info->auth_pad_len:0; length = tvb_reported_length_remaining (tvb, offset); - /* if auth_pad_len is larger than length then we ignore auth_pad_len totally */ - plain_length = length - auth_pad_len; - if (plain_length < 1) { - plain_length = length; - auth_pad_len = 0; - } - auth_pad_offset = offset + plain_length; + /* if auth_pad_len is larger than length then we ignore auth_pad_len totally */ + plain_length = length - auth_pad_len; + if (plain_length < 1) { + plain_length = length; + auth_pad_len = 0; + } + auth_pad_offset = offset + plain_length; if (auth_info != NULL && auth_info->auth_level == DCE_C_AUTHN_LEVEL_PKT_PRIVACY) { if (is_encrypted) { - tvb_ensure_bytes_exist(tvb, offset, length); + tvb_ensure_bytes_exist(tvb, offset, length); proto_tree_add_text(dcerpc_tree, tvb, offset, length, "Encrypted stub data (%d byte%s)", length, plurality(length, "", "s")); - /* is the padding is still inside the encrypted blob, don't display it explicit */ - auth_pad_len = 0; + /* is the padding is still inside the encrypted blob, don't display it explicit */ + auth_pad_len = 0; } else { - tvb_ensure_bytes_exist(tvb, offset, plain_length); + tvb_ensure_bytes_exist(tvb, offset, plain_length); proto_tree_add_text(dcerpc_tree, tvb, offset, plain_length, "Decrypted stub data (%d byte%s)", plain_length, plurality(plain_length, "", "s")); } } else { - tvb_ensure_bytes_exist(tvb, offset, plain_length); + tvb_ensure_bytes_exist(tvb, offset, plain_length); proto_tree_add_text (dcerpc_tree, tvb, offset, plain_length, "Stub data (%d byte%s)", plain_length, plurality(plain_length, "", "s")); } /* If there is auth padding at the end of the stub, display it */ if (auth_pad_len != 0) { - tvb_ensure_bytes_exist(tvb, auth_pad_offset, auth_pad_len); - proto_tree_add_text (dcerpc_tree, tvb, auth_pad_offset, - auth_pad_len, - "Auth Padding (%u byte%s)", - auth_pad_len, - plurality(auth_pad_len, "", "s")); - } + tvb_ensure_bytes_exist(tvb, auth_pad_offset, auth_pad_len); + proto_tree_add_text (dcerpc_tree, tvb, auth_pad_offset, + auth_pad_len, + "Auth Padding (%u byte%s)", + auth_pad_len, + plurality(auth_pad_len, "", "s")); + } } } @@ -2289,19 +2289,19 @@ dcerpc_try_handoff (packet_info *pinfo, proto_tree *tree, key.ver = info->call_data->ver; if ((sub_proto = g_hash_table_lookup (dcerpc_uuids, &key)) == NULL - || !proto_is_protocol_enabled(sub_proto->proto)) { + || !proto_is_protocol_enabled(sub_proto->proto)) { /* * We don't have a dissector for this UUID, or the protocol * for that UUID is disabled. */ - hidden_item = proto_tree_add_boolean(dcerpc_tree, hf_dcerpc_unknown_if_id, - tvb, offset, 0, TRUE); - PROTO_ITEM_SET_HIDDEN(hidden_item); - if (check_col (pinfo->cinfo, COL_INFO)) { - col_append_fstr (pinfo->cinfo, COL_INFO, " %s V%u", - guids_resolve_uuid_to_str(&info->call_data->uuid), info->call_data->ver); - } + hidden_item = proto_tree_add_boolean(dcerpc_tree, hf_dcerpc_unknown_if_id, + tvb, offset, 0, TRUE); + PROTO_ITEM_SET_HIDDEN(hidden_item); + if (check_col (pinfo->cinfo, COL_INFO)) { + col_append_fstr (pinfo->cinfo, COL_INFO, " %s V%u", + guids_resolve_uuid_to_str(&info->call_data->uuid), info->call_data->ver); + } if (decrypted_tvb != NULL) { show_stub_data (decrypted_tvb, 0, dcerpc_tree, auth_info, @@ -2329,12 +2329,12 @@ dcerpc_try_handoff (packet_info *pinfo, proto_tree *tree, } sub_dissect = (info->ptype == PDU_REQ) ? - proc->dissect_rqst : proc->dissect_resp; + proc->dissect_rqst : proc->dissect_resp; if (tree) { sub_item = proto_tree_add_item (tree, sub_proto->proto_id, - (decrypted_tvb != NULL)?decrypted_tvb:tvb, - 0, -1, FALSE); + (decrypted_tvb != NULL)?decrypted_tvb:tvb, + 0, -1, FALSE); if (sub_item) { sub_tree = proto_item_add_subtree (sub_item, sub_proto->ett); @@ -2345,27 +2345,27 @@ dcerpc_try_handoff (packet_info *pinfo, proto_tree *tree, * Put the operation number into the tree along with * the operation's name. */ - if (sub_proto->opnum_hf != -1) - proto_tree_add_uint_format(sub_tree, sub_proto->opnum_hf, - tvb, 0, 0, info->call_data->opnum, - "Operation: %s (%u)", - name, info->call_data->opnum); - else - proto_tree_add_uint_format(sub_tree, hf_dcerpc_op, tvb, - 0, 0, info->call_data->opnum, - "Operation: %s (%u)", - name, info->call_data->opnum); + if (sub_proto->opnum_hf != -1) + proto_tree_add_uint_format(sub_tree, sub_proto->opnum_hf, + tvb, 0, 0, info->call_data->opnum, + "Operation: %s (%u)", + name, info->call_data->opnum); + else + proto_tree_add_uint_format(sub_tree, hf_dcerpc_op, tvb, + 0, 0, info->call_data->opnum, + "Operation: %s (%u)", + name, info->call_data->opnum); if(info->ptype == PDU_REQ && info->call_data->rep_frame!=0) { pi = proto_tree_add_uint(sub_tree, hf_dcerpc_response_in, tvb, 0, 0, info->call_data->rep_frame); PROTO_ITEM_SET_GENERATED(pi); - } + } if(info->ptype == PDU_RESP && info->call_data->req_frame!=0) { pi = proto_tree_add_uint(sub_tree, hf_dcerpc_request_in, tvb, 0, 0, info->call_data->req_frame); PROTO_ITEM_SET_GENERATED(pi); - } + } } /* tree */ if (decrypted_tvb != NULL) { @@ -2430,7 +2430,7 @@ dcerpc_try_handoff (packet_info *pinfo, proto_tree *tree, } if (sub_item) { - proto_item_set_len(sub_item, length); + proto_item_set_len(sub_item, length); } if (stub_tvb != NULL) { @@ -2474,7 +2474,7 @@ dcerpc_try_handoff (packet_info *pinfo, proto_tree *tree, /* If there is auth padding at the end of the stub, display it */ if (auth_pad_len != 0) { - tvb_ensure_bytes_exist(tvb, auth_pad_offset, auth_pad_len); + tvb_ensure_bytes_exist(tvb, auth_pad_offset, auth_pad_len); proto_tree_add_text (sub_tree, decrypted_tvb, auth_pad_offset, auth_pad_len, "Auth Padding (%u byte%s)", @@ -2487,9 +2487,9 @@ dcerpc_try_handoff (packet_info *pinfo, proto_tree *tree, } else { /* No subdissector - show it as stub data. */ if(decrypted_tvb){ - show_stub_data (decrypted_tvb, 0, sub_tree, auth_info, FALSE); + show_stub_data (decrypted_tvb, 0, sub_tree, auth_info, FALSE); } else { - show_stub_data (tvb, 0, sub_tree, auth_info, TRUE); + show_stub_data (tvb, 0, sub_tree, auth_info, TRUE); } } } else @@ -2501,41 +2501,41 @@ dcerpc_try_handoff (packet_info *pinfo, proto_tree *tree, static int dissect_dcerpc_verifier (tvbuff_t *tvb, packet_info *pinfo, - proto_tree *dcerpc_tree, e_dce_cn_common_hdr_t *hdr, - dcerpc_auth_info *auth_info) + proto_tree *dcerpc_tree, e_dce_cn_common_hdr_t *hdr, + dcerpc_auth_info *auth_info) { int auth_offset; auth_info->auth_data = NULL; if (auth_info->auth_size != 0) { - dcerpc_auth_subdissector_fns *auth_fns; - tvbuff_t *auth_tvb; + dcerpc_auth_subdissector_fns *auth_fns; + tvbuff_t *auth_tvb; - auth_offset = hdr->frag_len - hdr->auth_len; + auth_offset = hdr->frag_len - hdr->auth_len; - auth_tvb = tvb_new_subset(tvb, auth_offset, hdr->auth_len, - hdr->auth_len); + auth_tvb = tvb_new_subset(tvb, auth_offset, hdr->auth_len, + hdr->auth_len); - auth_info->auth_data = auth_tvb; + auth_info->auth_data = auth_tvb; - if ((auth_fns = get_auth_subdissector_fns(auth_info->auth_level, - auth_info->auth_type))) { - /* - * Catch all exceptions, so that even if the verifier is bad - * or we don't have all of it, we still show the stub data. - */ - TRY { - dissect_auth_verf(auth_tvb, pinfo, dcerpc_tree, auth_fns, - hdr, auth_info); - } CATCH_ALL { - show_exception(auth_tvb, pinfo, dcerpc_tree, EXCEPT_CODE, GET_MESSAGE); - } ENDTRY; - } else { + if ((auth_fns = get_auth_subdissector_fns(auth_info->auth_level, + auth_info->auth_type))) { + /* + * Catch all exceptions, so that even if the verifier is bad + * or we don't have all of it, we still show the stub data. + */ + TRY { + dissect_auth_verf(auth_tvb, pinfo, dcerpc_tree, auth_fns, + hdr, auth_info); + } CATCH_ALL { + show_exception(auth_tvb, pinfo, dcerpc_tree, EXCEPT_CODE, GET_MESSAGE); + } ENDTRY; + } else { tvb_ensure_bytes_exist(tvb, 0, hdr->auth_len); - proto_tree_add_text (dcerpc_tree, auth_tvb, 0, hdr->auth_len, - "Auth Verifier"); - } + proto_tree_add_text (dcerpc_tree, auth_tvb, 0, hdr->auth_len, + "Auth Verifier"); + } } return hdr->auth_len; @@ -2615,8 +2615,8 @@ dissect_dcerpc_cn_auth (tvbuff_t *tvb, int stub_offset, packet_info *pinfo, dcerpc_auth_subdissector_fns *auth_fns; auth_tvb = tvb_new_subset(tvb, offset, - MIN(hdr->auth_len,tvb_length_remaining(tvb, offset)), - hdr->auth_len); + MIN(hdr->auth_len,tvb_length_remaining(tvb, offset)), + hdr->auth_len); if ((auth_fns = get_auth_subdissector_fns(auth_info->auth_level, auth_info->auth_type))) @@ -2630,7 +2630,7 @@ dissect_dcerpc_cn_auth (tvbuff_t *tvb, int stub_offset, packet_info *pinfo, /* Compute the size of the auth block. Note that this should not include auth padding, since when NTLMSSP encryption is used, the padding is actually inside the encrypted stub */ - auth_info->auth_size = hdr->auth_len + 8; + auth_info->auth_size = hdr->auth_len + 8; } CATCH_ALL { show_exception(tvb, pinfo, dcerpc_tree, EXCEPT_CODE, GET_MESSAGE); } ENDTRY; @@ -2651,9 +2651,9 @@ dissect_dcerpc_cn_auth (tvbuff_t *tvb, int stub_offset, packet_info *pinfo, guint16 dcerpc_get_transport_salt (packet_info *pinfo) { switch(pinfo->dcetransporttype){ - case DCE_CN_TRANSPORT_SMBPIPE: - /* DCERPC over smb */ - return pinfo->dcetransportsalt; + case DCE_CN_TRANSPORT_SMBPIPE: + /* DCERPC over smb */ + return pinfo->dcetransportsalt; } /* Some other transport... */ @@ -2666,7 +2666,7 @@ guint16 dcerpc_get_transport_salt (packet_info *pinfo) static void dissect_dcerpc_cn_bind (tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *dcerpc_tree, e_dce_cn_common_hdr_t *hdr) + proto_tree *dcerpc_tree, e_dce_cn_common_hdr_t *hdr) { conversation_t *conv = NULL; guint8 num_ctx_items = 0; @@ -2694,164 +2694,164 @@ dissect_dcerpc_cn_bind (tvbuff_t *tvb, gint offset, packet_info *pinfo, hf_dcerpc_cn_assoc_group, NULL); offset = dissect_dcerpc_uint8 (tvb, offset, pinfo, dcerpc_tree, hdr->drep, - hf_dcerpc_cn_num_ctx_items, &num_ctx_items); + hf_dcerpc_cn_num_ctx_items, &num_ctx_items); /* padding */ offset += 3; for (i = 0; i < num_ctx_items; i++) { - proto_item *ctx_item = NULL; - proto_tree *ctx_tree = NULL, *iface_tree = NULL; + proto_item *ctx_item = NULL; + proto_tree *ctx_tree = NULL, *iface_tree = NULL; gint ctx_offset = offset; - dissect_dcerpc_uint16 (tvb, offset, pinfo, NULL, hdr->drep, - hf_dcerpc_cn_ctx_id, &ctx_id); + dissect_dcerpc_uint16 (tvb, offset, pinfo, NULL, hdr->drep, + hf_dcerpc_cn_ctx_id, &ctx_id); - /* save context ID for use with dcerpc_add_conv_to_bind_table() */ - /* (if we have multiple contexts, this might cause "decode as" - * to behave unpredictably) */ - pinfo->dcectxid = ctx_id; + /* save context ID for use with dcerpc_add_conv_to_bind_table() */ + /* (if we have multiple contexts, this might cause "decode as" + * to behave unpredictably) */ + pinfo->dcectxid = ctx_id; - if (dcerpc_tree) { - ctx_item = proto_tree_add_item(dcerpc_tree, hf_dcerpc_cn_ctx_item, - tvb, offset, 0, - hdr->drep[0] & 0x10); - ctx_tree = proto_item_add_subtree(ctx_item, ett_dcerpc_cn_ctx); - } + if (dcerpc_tree) { + ctx_item = proto_tree_add_item(dcerpc_tree, hf_dcerpc_cn_ctx_item, + tvb, offset, 0, + hdr->drep[0] & 0x10); + ctx_tree = proto_item_add_subtree(ctx_item, ett_dcerpc_cn_ctx); + } - offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, ctx_tree, hdr->drep, - hf_dcerpc_cn_ctx_id, &ctx_id); - offset = dissect_dcerpc_uint8 (tvb, offset, pinfo, ctx_tree, hdr->drep, - hf_dcerpc_cn_num_trans_items, &num_trans_items); + offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, ctx_tree, hdr->drep, + hf_dcerpc_cn_ctx_id, &ctx_id); + offset = dissect_dcerpc_uint8 (tvb, offset, pinfo, ctx_tree, hdr->drep, + hf_dcerpc_cn_num_trans_items, &num_trans_items); - if(dcerpc_tree) { - proto_item_append_text(ctx_item, "[%u]: ID:%u", i+1, ctx_id); - } + if(dcerpc_tree) { + proto_item_append_text(ctx_item, "[%u]: ID:%u", i+1, ctx_id); + } - /* padding */ - offset += 1; + /* padding */ + offset += 1; - dcerpc_tvb_get_uuid (tvb, offset, hdr->drep, &if_id); - if (ctx_tree) { - - iface_item = proto_tree_add_item(ctx_tree, hf_dcerpc_cn_bind_abstract_syntax, tvb, offset, 0, FALSE); - iface_tree = proto_item_add_subtree(iface_item, ett_dcerpc_cn_iface); - - uuid_str = guid_to_str((e_guid_t*)&if_id); - uuid_name = guids_get_uuid_name(&if_id); - if(uuid_name) { - proto_tree_add_guid_format (iface_tree, hf_dcerpc_cn_bind_if_id, tvb, - offset, 16, (e_guid_t *) &if_id, "Interface: %s UUID: %s", uuid_name, uuid_str); - proto_item_append_text(iface_item, ": %s", uuid_name); - } else { - proto_tree_add_guid_format (iface_tree, hf_dcerpc_cn_bind_if_id, tvb, - offset, 16, (e_guid_t *) &if_id, "Interface UUID: %s", uuid_str); - proto_item_append_text(iface_item, ": %s", uuid_str); - } - } - offset += 16; - - if (hdr->drep[0] & 0x10) { - offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, iface_tree, hdr->drep, - hf_dcerpc_cn_bind_if_ver, &if_ver); - offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, iface_tree, hdr->drep, - hf_dcerpc_cn_bind_if_ver_minor, &if_ver_minor); - } else { - offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, iface_tree, hdr->drep, - hf_dcerpc_cn_bind_if_ver_minor, &if_ver_minor); - offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, iface_tree, hdr->drep, - hf_dcerpc_cn_bind_if_ver, &if_ver); - } - - if (ctx_tree) { - proto_item_append_text(iface_item, " V%u.%u", if_ver, if_ver_minor); - proto_item_set_len(iface_item, 20); - } - - - for (j = 0; j < num_trans_items; j++) { - proto_tree *trans_tree = NULL; - proto_item *trans_item = NULL; - - dcerpc_tvb_get_uuid (tvb, offset, hdr->drep, &trans_id); + dcerpc_tvb_get_uuid (tvb, offset, hdr->drep, &if_id); if (ctx_tree) { - trans_item = proto_tree_add_item(ctx_tree, hf_dcerpc_cn_bind_trans_syntax, tvb, offset, 0, FALSE); - trans_tree = proto_item_add_subtree(trans_item, ett_dcerpc_cn_trans_syntax); + iface_item = proto_tree_add_item(ctx_tree, hf_dcerpc_cn_bind_abstract_syntax, tvb, offset, 0, FALSE); + iface_tree = proto_item_add_subtree(iface_item, ett_dcerpc_cn_iface); - uuid_str = guid_to_str((e_guid_t *) &trans_id); - uuid_name = guids_get_uuid_name(&trans_id); - - if(uuid_name) { - proto_tree_add_guid_format (trans_tree, hf_dcerpc_cn_bind_trans_id, tvb, - offset, 16, (e_guid_t *) &trans_id, "Transport Syntax: %s UUID:%s", uuid_name, uuid_str); - proto_item_append_text(trans_item, "[%u]: %s", j+1, uuid_name); - } else { - proto_tree_add_guid_format (trans_tree, hf_dcerpc_cn_bind_trans_id, tvb, - offset, 16, (e_guid_t *) &trans_id, "Transport Syntax: %s", uuid_str); - proto_item_append_text(trans_item, "[%u]: %s", j+1, uuid_str); - } + uuid_str = guid_to_str((e_guid_t*)&if_id); + uuid_name = guids_get_uuid_name(&if_id); + if(uuid_name) { + proto_tree_add_guid_format (iface_tree, hf_dcerpc_cn_bind_if_id, tvb, + offset, 16, (e_guid_t *) &if_id, "Interface: %s UUID: %s", uuid_name, uuid_str); + proto_item_append_text(iface_item, ": %s", uuid_name); + } else { + proto_tree_add_guid_format (iface_tree, hf_dcerpc_cn_bind_if_id, tvb, + offset, 16, (e_guid_t *) &if_id, "Interface UUID: %s", uuid_str); + proto_item_append_text(iface_item, ": %s", uuid_str); + } } offset += 16; - offset = dissect_dcerpc_uint32 (tvb, offset, pinfo, trans_tree, hdr->drep, - hf_dcerpc_cn_bind_trans_ver, &trans_ver); + if (hdr->drep[0] & 0x10) { + offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, iface_tree, hdr->drep, + hf_dcerpc_cn_bind_if_ver, &if_ver); + offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, iface_tree, hdr->drep, + hf_dcerpc_cn_bind_if_ver_minor, &if_ver_minor); + } else { + offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, iface_tree, hdr->drep, + hf_dcerpc_cn_bind_if_ver_minor, &if_ver_minor); + offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, iface_tree, hdr->drep, + hf_dcerpc_cn_bind_if_ver, &if_ver); + } + if (ctx_tree) { - proto_item_set_len(trans_item, 20); - proto_item_append_text(trans_item, " V%u", trans_ver); + proto_item_append_text(iface_item, " V%u.%u", if_ver, if_ver_minor); + proto_item_set_len(iface_item, 20); } - } - if (!saw_ctx_item) { - conv = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, - pinfo->srcport, pinfo->destport, 0); - if (conv == NULL) { - conv = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, - pinfo->srcport, pinfo->destport, 0); + + for (j = 0; j < num_trans_items; j++) { + proto_tree *trans_tree = NULL; + proto_item *trans_item = NULL; + + dcerpc_tvb_get_uuid (tvb, offset, hdr->drep, &trans_id); + if (ctx_tree) { + + trans_item = proto_tree_add_item(ctx_tree, hf_dcerpc_cn_bind_trans_syntax, tvb, offset, 0, FALSE); + trans_tree = proto_item_add_subtree(trans_item, ett_dcerpc_cn_trans_syntax); + + uuid_str = guid_to_str((e_guid_t *) &trans_id); + uuid_name = guids_get_uuid_name(&trans_id); + + if(uuid_name) { + proto_tree_add_guid_format (trans_tree, hf_dcerpc_cn_bind_trans_id, tvb, + offset, 16, (e_guid_t *) &trans_id, "Transport Syntax: %s UUID:%s", uuid_name, uuid_str); + proto_item_append_text(trans_item, "[%u]: %s", j+1, uuid_name); + } else { + proto_tree_add_guid_format (trans_tree, hf_dcerpc_cn_bind_trans_id, tvb, + offset, 16, (e_guid_t *) &trans_id, "Transport Syntax: %s", uuid_str); + proto_item_append_text(trans_item, "[%u]: %s", j+1, uuid_str); + } + } + offset += 16; + + offset = dissect_dcerpc_uint32 (tvb, offset, pinfo, trans_tree, hdr->drep, + hf_dcerpc_cn_bind_trans_ver, &trans_ver); + if (ctx_tree) { + proto_item_set_len(trans_item, 20); + proto_item_append_text(trans_item, " V%u", trans_ver); + } } - } - /* if this is the first time we see this packet, we need to - update the dcerpc_binds table so that any later calls can - match to the interface. - XXX We assume that BINDs will NEVER be fragmented. - */ - if(!(pinfo->fd->flags.visited)){ - dcerpc_bind_key *key; - dcerpc_bind_value *value; - - key = se_alloc (sizeof (dcerpc_bind_key)); - key->conv = conv; - key->ctx_id = ctx_id; - key->smb_fid = dcerpc_get_transport_salt(pinfo); - - value = se_alloc (sizeof (dcerpc_bind_value)); - value->uuid = if_id; - value->ver = if_ver; - value->transport=trans_id; - - /* add this entry to the bind table, first removing any - previous ones that are identical - */ - if(g_hash_table_lookup(dcerpc_binds, key)){ - g_hash_table_remove(dcerpc_binds, key); - } - g_hash_table_insert (dcerpc_binds, key, value); - } - if (!saw_ctx_item) { - if (check_col (pinfo->cinfo, COL_INFO)) { - if (num_ctx_items > 1) - col_append_fstr(pinfo->cinfo, COL_INFO, ", %u context items, 1st", num_ctx_items); - - col_append_fstr(pinfo->cinfo, COL_INFO, " %s V%u.%u", - guids_resolve_uuid_to_str(&if_id), if_ver, if_ver_minor); + if (!saw_ctx_item) { + conv = find_conversation (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, + pinfo->srcport, pinfo->destport, 0); + if (conv == NULL) { + conv = conversation_new (pinfo->fd->num, &pinfo->src, &pinfo->dst, pinfo->ptype, + pinfo->srcport, pinfo->destport, 0); + } } - saw_ctx_item = TRUE; - } - if(ctx_tree) { - proto_item_set_len(ctx_item, offset - ctx_offset); - } + /* if this is the first time we see this packet, we need to + update the dcerpc_binds table so that any later calls can + match to the interface. + XXX We assume that BINDs will NEVER be fragmented. + */ + if(!(pinfo->fd->flags.visited)){ + dcerpc_bind_key *key; + dcerpc_bind_value *value; + + key = se_alloc (sizeof (dcerpc_bind_key)); + key->conv = conv; + key->ctx_id = ctx_id; + key->smb_fid = dcerpc_get_transport_salt(pinfo); + + value = se_alloc (sizeof (dcerpc_bind_value)); + value->uuid = if_id; + value->ver = if_ver; + value->transport=trans_id; + + /* add this entry to the bind table, first removing any + previous ones that are identical + */ + if(g_hash_table_lookup(dcerpc_binds, key)){ + g_hash_table_remove(dcerpc_binds, key); + } + g_hash_table_insert (dcerpc_binds, key, value); + } + if (!saw_ctx_item) { + if (check_col (pinfo->cinfo, COL_INFO)) { + if (num_ctx_items > 1) + col_append_fstr(pinfo->cinfo, COL_INFO, ", %u context items, 1st", num_ctx_items); + + col_append_fstr(pinfo->cinfo, COL_INFO, " %s V%u.%u", + guids_resolve_uuid_to_str(&if_id), if_ver, if_ver_minor); + } + saw_ctx_item = TRUE; + } + + if(ctx_tree) { + proto_item_set_len(ctx_item, offset - ctx_offset); + } } /* @@ -2864,7 +2864,7 @@ dissect_dcerpc_cn_bind (tvbuff_t *tvb, gint offset, packet_info *pinfo, static void dissect_dcerpc_cn_bind_ack (tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *dcerpc_tree, e_dce_cn_common_hdr_t *hdr) + proto_tree *dcerpc_tree, e_dce_cn_common_hdr_t *hdr) { guint16 max_xmit, max_recv; guint16 sec_addr_len; @@ -2889,7 +2889,7 @@ dissect_dcerpc_cn_bind_ack (tvbuff_t *tvb, gint offset, packet_info *pinfo, offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, dcerpc_tree, hdr->drep, hf_dcerpc_cn_sec_addr_len, &sec_addr_len); if (sec_addr_len != 0) { - tvb_ensure_bytes_exist(tvb, offset, sec_addr_len); + tvb_ensure_bytes_exist(tvb, offset, sec_addr_len); proto_tree_add_item (dcerpc_tree, hf_dcerpc_cn_sec_addr, tvb, offset, sec_addr_len, FALSE); offset += sec_addr_len; @@ -2906,13 +2906,13 @@ dissect_dcerpc_cn_bind_ack (tvbuff_t *tvb, gint offset, packet_info *pinfo, offset += 3; for (i = 0; i < num_results; i++) { - proto_tree *ctx_tree = NULL; + proto_tree *ctx_tree = NULL; - if(dcerpc_tree){ - proto_item *ctx_item; - ctx_item = proto_tree_add_text(dcerpc_tree, tvb, offset, 24, "Context ID[%u]", i+1); - ctx_tree = proto_item_add_subtree(ctx_item, ett_dcerpc_cn_ctx); - } + if(dcerpc_tree){ + proto_item *ctx_item; + ctx_item = proto_tree_add_text(dcerpc_tree, tvb, offset, 24, "Context ID[%u]", i+1); + ctx_tree = proto_item_add_subtree(ctx_item, ett_dcerpc_cn_ctx); + } offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, ctx_tree, hdr->drep, hf_dcerpc_cn_ack_result, @@ -2934,8 +2934,8 @@ dissect_dcerpc_cn_bind_ack (tvbuff_t *tvb, gint offset, packet_info *pinfo, if (ctx_tree) { proto_tree_add_guid_format (ctx_tree, hf_dcerpc_cn_ack_trans_id, tvb, - offset, 16, (e_guid_t *) &trans_id, "Transfer Syntax: %s", - uuid_name?uuid_name:guid_to_str((e_guid_t *) &trans_id)); + offset, 16, (e_guid_t *) &trans_id, "Transfer Syntax: %s", + uuid_name?uuid_name:guid_to_str((e_guid_t *) &trans_id)); } offset += 16; @@ -2970,7 +2970,7 @@ dissect_dcerpc_cn_bind_ack (tvbuff_t *tvb, gint offset, packet_info *pinfo, static void dissect_dcerpc_cn_bind_nak (tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *dcerpc_tree, e_dce_cn_common_hdr_t *hdr) + proto_tree *dcerpc_tree, e_dce_cn_common_hdr_t *hdr) { guint16 reason; guint8 num_protocols; @@ -2982,7 +2982,7 @@ dissect_dcerpc_cn_bind_nak (tvbuff_t *tvb, gint offset, packet_info *pinfo, if (check_col (pinfo->cinfo, COL_INFO)) { col_append_fstr (pinfo->cinfo, COL_INFO, " reason: %s", - val_to_str(reason, reject_reason_vals, "Unknown (%u)")); + val_to_str(reason, reject_reason_vals, "Unknown (%u)")); } if (reason == PROTOCOL_VERSION_NOT_SUPPORTED) { @@ -2992,11 +2992,11 @@ dissect_dcerpc_cn_bind_nak (tvbuff_t *tvb, gint offset, packet_info *pinfo, for (i = 0; i < num_protocols; i++) { offset = dissect_dcerpc_uint8 (tvb, offset, pinfo, dcerpc_tree, - hdr->drep, hf_dcerpc_cn_protocol_ver_major, - NULL); + hdr->drep, hf_dcerpc_cn_protocol_ver_major, + NULL); offset = dissect_dcerpc_uint8 (tvb, offset, pinfo, dcerpc_tree, - hdr->drep, hf_dcerpc_cn_protocol_ver_minor, - NULL); + hdr->drep, hf_dcerpc_cn_protocol_ver_minor, + NULL); } } } @@ -3009,21 +3009,21 @@ dissect_dcerpc_cn_bind_nak (tvbuff_t *tvb, gint offset, packet_info *pinfo, static const char * fragment_type(guint8 flags) { - flags = flags & PFC_FRAG_MASK; + flags = flags & PFC_FRAG_MASK; - if (flags == PFC_FIRST_FRAG) - return "first"; + if (flags == PFC_FIRST_FRAG) + return "first"; - if (flags == 0) - return "middle"; + if (flags == 0) + return "middle"; - if (flags == PFC_LAST_FRAG) - return "last"; + if (flags == PFC_LAST_FRAG) + return "last"; - if (flags == (PFC_FIRST_FRAG | PFC_LAST_FRAG)) - return "whole"; + if (flags == (PFC_FIRST_FRAG | PFC_LAST_FRAG)) + return "whole"; - return "unknown"; + return "unknown"; } /* Dissect stub data (payload) of a DCERPC packet. */ @@ -3049,93 +3049,93 @@ dissect_dcerpc_cn_stub (tvbuff_t *tvb, int offset, packet_info *pinfo, length = tvb_length_remaining(tvb, offset); reported_length = tvb_reported_length_remaining(tvb, offset); if (reported_length < 0 || - (guint32)reported_length < auth_info->auth_size) { - /* We don't even have enough bytes for the authentication - stuff. */ - return; + (guint32)reported_length < auth_info->auth_size) { + /* We don't even have enough bytes for the authentication + stuff. */ + return; } reported_length -= auth_info->auth_size; if (length > reported_length) - length = reported_length; + length = reported_length; payload_tvb = tvb_new_subset(tvb, offset, length, reported_length); auth_tvb=NULL; /*dont bother if we dont have the entire tvb */ /*XXX we should really make sure we calculate auth_info->auth_data - and use that one instead of this auth_tvb hack + and use that one instead of this auth_tvb hack */ if(tvb_length(tvb)==tvb_reported_length(tvb)){ - if(tvb_length_remaining(tvb, offset+length)>8){ - auth_tvb = tvb_new_subset_remaining(tvb, offset+length+8); - } + if(tvb_length_remaining(tvb, offset+length)>8){ + auth_tvb = tvb_new_subset_remaining(tvb, offset+length+8); + } } /* Decrypt the PDU if it is encrypted */ if (auth_info->auth_type && auth_info->auth_level == DCE_C_AUTHN_LEVEL_PKT_PRIVACY) { - /* - * We know the authentication type, and the authentication - * level is "Packet privacy", meaning the payload is - * encrypted; attempt to decrypt it. - */ - dcerpc_auth_subdissector_fns *auth_fns; + /* + * We know the authentication type, and the authentication + * level is "Packet privacy", meaning the payload is + * encrypted; attempt to decrypt it. + */ + dcerpc_auth_subdissector_fns *auth_fns; - /* Start out assuming we won't succeed in decrypting. */ - decrypted_tvb = NULL; - /* Schannel needs informations into the footer (verifier) in order to setup decryptions keys - * so we call it in order to have a chance to decypher the data - */ - if (DCE_C_RPC_AUTHN_PROTOCOL_SEC_CHAN == auth_info->auth_type) { - dissect_dcerpc_cn_auth (tvb, offset, pinfo, dcerpc_tree, hdr, TRUE, auth_info); - } + /* Start out assuming we won't succeed in decrypting. */ + decrypted_tvb = NULL; + /* Schannel needs informations into the footer (verifier) in order to setup decryptions keys + * so we call it in order to have a chance to decypher the data + */ + if (DCE_C_RPC_AUTHN_PROTOCOL_SEC_CHAN == auth_info->auth_type) { + dissect_dcerpc_cn_auth (tvb, offset, pinfo, dcerpc_tree, hdr, TRUE, auth_info); + } - if ((auth_fns = get_auth_subdissector_fns( - auth_info->auth_level, auth_info->auth_type))) { - tvbuff_t *result; + if ((auth_fns = get_auth_subdissector_fns( + auth_info->auth_level, auth_info->auth_type))) { + tvbuff_t *result; - result = decode_encrypted_data( - payload_tvb, auth_tvb, pinfo, auth_fns, - hdr->ptype == PDU_REQ, auth_info); + result = decode_encrypted_data( + payload_tvb, auth_tvb, pinfo, auth_fns, + hdr->ptype == PDU_REQ, auth_info); - if (result) { - if (dcerpc_tree) - proto_tree_add_text( - dcerpc_tree, payload_tvb, 0, -1, - "Encrypted stub data (%d byte%s)", - tvb_reported_length(payload_tvb), + if (result) { + if (dcerpc_tree) + proto_tree_add_text( + dcerpc_tree, payload_tvb, 0, -1, + "Encrypted stub data (%d byte%s)", + tvb_reported_length(payload_tvb), - plurality(tvb_length(payload_tvb), "", "s")); + plurality(tvb_length(payload_tvb), "", "s")); - add_new_data_source( - pinfo, result, "Decrypted stub data"); + add_new_data_source( + pinfo, result, "Decrypted stub data"); - /* We succeeded. */ - decrypted_tvb = result; - } - } + /* We succeeded. */ + decrypted_tvb = result; + } + } } else - decrypted_tvb = payload_tvb; + decrypted_tvb = payload_tvb; /* if this packet is not fragmented, just dissect it and exit */ if(PFC_NOT_FRAGMENTED(hdr)){ - pinfo->fragmented = FALSE; + pinfo->fragmented = FALSE; - dcerpc_try_handoff( - pinfo, tree, dcerpc_tree, payload_tvb, decrypted_tvb, - hdr->drep, di, auth_info); + dcerpc_try_handoff( + pinfo, tree, dcerpc_tree, payload_tvb, decrypted_tvb, + hdr->drep, di, auth_info); - pinfo->fragmented = save_fragmented; - return; + pinfo->fragmented = save_fragmented; + return; } /* The packet is fragmented. */ pinfo->fragmented = TRUE; - /* debug output of essential fragment data. */ - /* leave it here for future debugging sessions */ - /*printf("DCE num:%u offset:%u frag_len:%u tvb_len:%u\n", - pinfo->fd->num, offset, hdr->frag_len, tvb_length(decrypted_tvb));*/ + /* debug output of essential fragment data. */ + /* leave it here for future debugging sessions */ + /*printf("DCE num:%u offset:%u frag_len:%u tvb_len:%u\n", + pinfo->fd->num, offset, hdr->frag_len, tvb_length(decrypted_tvb));*/ /* if we are not doing reassembly and this is the first fragment then just dissect it and exit @@ -3144,16 +3144,16 @@ dissect_dcerpc_cn_stub (tvbuff_t *tvb, int offset, packet_info *pinfo, */ if( (!dcerpc_reassemble) && hdr->flags&PFC_FIRST_FRAG ){ - dcerpc_try_handoff( - pinfo, tree, dcerpc_tree, payload_tvb, decrypted_tvb, - hdr->drep, di, auth_info); + dcerpc_try_handoff( + pinfo, tree, dcerpc_tree, payload_tvb, decrypted_tvb, + hdr->drep, di, auth_info); if (check_col(pinfo->cinfo, COL_INFO)) { col_append_fstr(pinfo->cinfo, COL_INFO, " [DCE/RPC %s fragment]", fragment_type(hdr->flags)); } - expert_add_info_format(pinfo, NULL, PI_REASSEMBLE, PI_CHAT, - "%s fragment", fragment_type(hdr->flags)); + expert_add_info_format(pinfo, NULL, PI_REASSEMBLE, PI_CHAT, + "%s fragment", fragment_type(hdr->flags)); pinfo->fragmented = save_fragmented; return; } @@ -3163,8 +3163,8 @@ dissect_dcerpc_cn_stub (tvbuff_t *tvb, int offset, packet_info *pinfo, then exit */ if(pinfo->fd->flags.visited){ - fd_head=fragment_get_reassembled(frame, dcerpc_co_reassemble_table); - goto end_cn_stub; + fd_head=fragment_get_reassembled(frame, dcerpc_co_reassemble_table); + goto end_cn_stub; } /* if we are not doing reassembly and it was neither a complete PDU @@ -3181,7 +3181,7 @@ dissect_dcerpc_cn_stub (tvbuff_t *tvb, int offset, packet_info *pinfo, goto end_cn_stub; /* from now on we must attempt to reassemble the PDU - */ + */ /* if we get here we know it is the first time we see the packet and we also know it is only a fragment and not a full PDU, @@ -3190,8 +3190,8 @@ dissect_dcerpc_cn_stub (tvbuff_t *tvb, int offset, packet_info *pinfo, /* Do we have any non-encrypted data to reassemble? */ if (decrypted_tvb == NULL) { - /* No. We can't even try to reassemble. */ - goto end_cn_stub; + /* No. We can't even try to reassemble. */ + goto end_cn_stub; } /* defragmentation is a bit tricky, as there's no offset of the fragment @@ -3201,79 +3201,79 @@ dissect_dcerpc_cn_stub (tvbuff_t *tvb, int offset, packet_info *pinfo, * in with the correct sequence. */ fd_head = fragment_add_seq_next(decrypted_tvb, 0, pinfo, frame, - dcerpc_co_fragment_table, dcerpc_co_reassemble_table, - tvb_length(decrypted_tvb), - hdr->flags&PFC_LAST_FRAG ? FALSE : TRUE /* more_frags */); + dcerpc_co_fragment_table, dcerpc_co_reassemble_table, + tvb_length(decrypted_tvb), + hdr->flags&PFC_LAST_FRAG ? FALSE : TRUE /* more_frags */); end_cn_stub: /* if reassembly is complete and this is the last fragment - * (multiple fragments in one PDU are possible!) - * dissect the full PDU + * (multiple fragments in one PDU are possible!) + * dissect the full PDU */ if(fd_head && (fd_head->flags&FD_DEFRAGMENTED) ){ - if(pinfo->fd->num==fd_head->reassembled_in && (hdr->flags&PFC_LAST_FRAG) ){ - tvbuff_t *next_tvb; - proto_item *frag_tree_item; + if(pinfo->fd->num==fd_head->reassembled_in && (hdr->flags&PFC_LAST_FRAG) ){ + tvbuff_t *next_tvb; + proto_item *frag_tree_item; - next_tvb = tvb_new_child_real_data((decrypted_tvb)?decrypted_tvb:payload_tvb, - fd_head->data, fd_head->len, fd_head->len); + next_tvb = tvb_new_child_real_data((decrypted_tvb)?decrypted_tvb:payload_tvb, + fd_head->data, fd_head->len, fd_head->len); - add_new_data_source(pinfo, next_tvb, "Reassembled DCE/RPC"); - show_fragment_tree(fd_head, &dcerpc_frag_items, - tree, pinfo, next_tvb, &frag_tree_item); - /* the toplevel fragment subtree is now behind all desegmented data, - * move it right behind the DCE/RPC tree */ - dcerpc_tree_item = proto_tree_get_parent(dcerpc_tree); - if(frag_tree_item && dcerpc_tree_item) { - proto_tree_move_item(tree, dcerpc_tree_item, frag_tree_item); - } + add_new_data_source(pinfo, next_tvb, "Reassembled DCE/RPC"); + show_fragment_tree(fd_head, &dcerpc_frag_items, + tree, pinfo, next_tvb, &frag_tree_item); + /* the toplevel fragment subtree is now behind all desegmented data, + * move it right behind the DCE/RPC tree */ + dcerpc_tree_item = proto_tree_get_parent(dcerpc_tree); + if(frag_tree_item && dcerpc_tree_item) { + proto_tree_move_item(tree, dcerpc_tree_item, frag_tree_item); + } - pinfo->fragmented = FALSE; + pinfo->fragmented = FALSE; - expert_add_info_format(pinfo, frag_tree_item, PI_REASSEMBLE, PI_CHAT, - "%s fragment, reassembled", - fragment_type(hdr->flags)); + expert_add_info_format(pinfo, frag_tree_item, PI_REASSEMBLE, PI_CHAT, + "%s fragment, reassembled", + fragment_type(hdr->flags)); - dcerpc_try_handoff (pinfo, tree, dcerpc_tree, next_tvb, - next_tvb, hdr->drep, di, auth_info); + dcerpc_try_handoff (pinfo, tree, dcerpc_tree, next_tvb, + next_tvb, hdr->drep, di, auth_info); - } else { - if(decrypted_tvb){ - pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_reassembled_in, - decrypted_tvb, 0, 0, fd_head->reassembled_in); - } else { - pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_reassembled_in, - payload_tvb, 0, 0, fd_head->reassembled_in); - } - PROTO_ITEM_SET_GENERATED(pi); - parent_pi = proto_tree_get_parent(dcerpc_tree); - if(parent_pi != NULL) { - proto_item_append_text(parent_pi, ", [Reas: #%u]", fd_head->reassembled_in); + } else { + if(decrypted_tvb){ + pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_reassembled_in, + decrypted_tvb, 0, 0, fd_head->reassembled_in); + } else { + pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_reassembled_in, + payload_tvb, 0, 0, fd_head->reassembled_in); + } + PROTO_ITEM_SET_GENERATED(pi); + parent_pi = proto_tree_get_parent(dcerpc_tree); + if(parent_pi != NULL) { + proto_item_append_text(parent_pi, ", [Reas: #%u]", fd_head->reassembled_in); + } + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, + " [DCE/RPC %s fragment, reas: #%u]", fragment_type(hdr->flags), fd_head->reassembled_in); + } + expert_add_info_format(pinfo, NULL, PI_REASSEMBLE, PI_CHAT, + "%s fragment, reassembled in #%u", fragment_type(hdr->flags), fd_head->reassembled_in); } - if (check_col(pinfo->cinfo, COL_INFO)) { - col_append_fstr(pinfo->cinfo, COL_INFO, - " [DCE/RPC %s fragment, reas: #%u]", fragment_type(hdr->flags), fd_head->reassembled_in); - } - expert_add_info_format(pinfo, NULL, PI_REASSEMBLE, PI_CHAT, - "%s fragment, reassembled in #%u", fragment_type(hdr->flags), fd_head->reassembled_in); - } } else { - /* Reassembly not complete - some fragments - are missing. Just show the stub data. */ - if (check_col(pinfo->cinfo, COL_INFO)) { - col_append_fstr(pinfo->cinfo, COL_INFO, - " [DCE/RPC %s fragment]", fragment_type(hdr->flags)); - } - expert_add_info_format(pinfo, NULL, PI_REASSEMBLE, PI_CHAT, - "%s fragment", fragment_type(hdr->flags)); + /* Reassembly not complete - some fragments + are missing. Just show the stub data. */ + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, + " [DCE/RPC %s fragment]", fragment_type(hdr->flags)); + } + expert_add_info_format(pinfo, NULL, PI_REASSEMBLE, PI_CHAT, + "%s fragment", fragment_type(hdr->flags)); - if(decrypted_tvb){ - show_stub_data (decrypted_tvb, 0, tree, auth_info, FALSE); - } else { - show_stub_data (payload_tvb, 0, tree, auth_info, TRUE); - } + if(decrypted_tvb){ + show_stub_data (decrypted_tvb, 0, tree, auth_info, FALSE); + } else { + show_stub_data (payload_tvb, 0, tree, auth_info, TRUE); + } } pinfo->fragmented = save_fragmented; @@ -3332,9 +3332,9 @@ dcerpc_add_conv_to_bind_table(decode_dcerpc_bind_values_t *binding) /* add this entry to the bind table, first removing any previous ones that are identical - */ + */ if(g_hash_table_lookup(dcerpc_binds, key)){ - g_hash_table_remove(dcerpc_binds, key); + g_hash_table_remove(dcerpc_binds, key); } g_hash_table_insert(dcerpc_binds, key, bind_value); @@ -3344,8 +3344,8 @@ dcerpc_add_conv_to_bind_table(decode_dcerpc_bind_values_t *binding) static void dissect_dcerpc_cn_rqst (tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *dcerpc_tree, proto_tree *tree, - e_dce_cn_common_hdr_t *hdr) + proto_tree *dcerpc_tree, proto_tree *tree, + e_dce_cn_common_hdr_t *hdr) { conversation_t *conv; guint16 ctx_id; @@ -3381,8 +3381,8 @@ dissect_dcerpc_cn_rqst (tvbuff_t *tvb, gint offset, packet_info *pinfo, dcerpc_tvb_get_uuid (tvb, offset, hdr->drep, &obj_id); if (dcerpc_tree) { proto_tree_add_guid_format (dcerpc_tree, hf_dcerpc_obj_id, tvb, - offset, 16, (e_guid_t *) &obj_id, "Object UUID: %s", - guid_to_str((e_guid_t *) &obj_id)); + offset, 16, (e_guid_t *) &obj_id, "Object UUID: %s", + guid_to_str((e_guid_t *) &obj_id)); } offset += 16; } @@ -3401,114 +3401,114 @@ dissect_dcerpc_cn_rqst (tvbuff_t *tvb, gint offset, packet_info *pinfo, dcerpc_matched_key matched_key, *new_matched_key; dcerpc_call_value *value; - /* !!! we can NOT check flags.visited here since this will interact - badly with when SMB handles (i.e. calls the subdissector) - and desegmented pdu's . - Instead we check if this pdu is already in the matched table or not - */ - matched_key.frame = pinfo->fd->num; - matched_key.call_id = hdr->call_id; - value = g_hash_table_lookup(dcerpc_matched, &matched_key); - if(!value){ - dcerpc_bind_key bind_key; - dcerpc_bind_value *bind_value; + /* !!! we can NOT check flags.visited here since this will interact + badly with when SMB handles (i.e. calls the subdissector) + and desegmented pdu's . + Instead we check if this pdu is already in the matched table or not + */ + matched_key.frame = pinfo->fd->num; + matched_key.call_id = hdr->call_id; + value = g_hash_table_lookup(dcerpc_matched, &matched_key); + if(!value){ + dcerpc_bind_key bind_key; + dcerpc_bind_value *bind_value; - bind_key.conv=conv; - bind_key.ctx_id=ctx_id; - bind_key.smb_fid=dcerpc_get_transport_salt(pinfo); + bind_key.conv=conv; + bind_key.ctx_id=ctx_id; + bind_key.smb_fid=dcerpc_get_transport_salt(pinfo); - if((bind_value=g_hash_table_lookup(dcerpc_binds, &bind_key)) ){ - if(!(hdr->flags&PFC_FIRST_FRAG)){ - dcerpc_cn_call_key call_key; - dcerpc_call_value *call_value; + if((bind_value=g_hash_table_lookup(dcerpc_binds, &bind_key)) ){ + if(!(hdr->flags&PFC_FIRST_FRAG)){ + dcerpc_cn_call_key call_key; + dcerpc_call_value *call_value; - call_key.conv=conv; - call_key.call_id=hdr->call_id; - call_key.smb_fid=dcerpc_get_transport_salt(pinfo); - if((call_value=g_hash_table_lookup(dcerpc_cn_calls, &call_key))){ - new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); - *new_matched_key = matched_key; - g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); - value = call_value; - } - } else { - dcerpc_cn_call_key *call_key; - dcerpc_call_value *call_value; + call_key.conv=conv; + call_key.call_id=hdr->call_id; + call_key.smb_fid=dcerpc_get_transport_salt(pinfo); + if((call_value=g_hash_table_lookup(dcerpc_cn_calls, &call_key))){ + new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); + *new_matched_key = matched_key; + g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); + value = call_value; + } + } else { + dcerpc_cn_call_key *call_key; + dcerpc_call_value *call_value; - /* We found the binding and it is the first fragment - (or a complete PDU) of a dcerpc pdu so just add - the call to both the call table and the - matched table - */ - call_key=se_alloc (sizeof (dcerpc_cn_call_key)); - call_key->conv=conv; - call_key->call_id=hdr->call_id; - call_key->smb_fid=dcerpc_get_transport_salt(pinfo); + /* We found the binding and it is the first fragment + (or a complete PDU) of a dcerpc pdu so just add + the call to both the call table and the + matched table + */ + call_key=se_alloc (sizeof (dcerpc_cn_call_key)); + call_key->conv=conv; + call_key->call_id=hdr->call_id; + call_key->smb_fid=dcerpc_get_transport_salt(pinfo); - /* if there is already a matching call in the table - remove it so it is replaced with the new one */ - if(g_hash_table_lookup(dcerpc_cn_calls, call_key)){ - g_hash_table_remove(dcerpc_cn_calls, call_key); - } + /* if there is already a matching call in the table + remove it so it is replaced with the new one */ + if(g_hash_table_lookup(dcerpc_cn_calls, call_key)){ + g_hash_table_remove(dcerpc_cn_calls, call_key); + } - call_value=se_alloc (sizeof (dcerpc_call_value)); - call_value->uuid = bind_value->uuid; - call_value->ver = bind_value->ver; - call_value->object_uuid = obj_id; - call_value->opnum = opnum; - call_value->req_frame=pinfo->fd->num; - call_value->req_time=pinfo->fd->abs_ts; - call_value->rep_frame=0; - call_value->max_ptr=0; - call_value->se_data = NULL; - call_value->private_data = NULL; - call_value->pol = NULL; - call_value->flags = 0; - if (!memcmp(&bind_value->transport, &ndr64_uuid, sizeof(ndr64_uuid))) { - call_value->flags |= DCERPC_IS_NDR64; - } + call_value=se_alloc (sizeof (dcerpc_call_value)); + call_value->uuid = bind_value->uuid; + call_value->ver = bind_value->ver; + call_value->object_uuid = obj_id; + call_value->opnum = opnum; + call_value->req_frame=pinfo->fd->num; + call_value->req_time=pinfo->fd->abs_ts; + call_value->rep_frame=0; + call_value->max_ptr=0; + call_value->se_data = NULL; + call_value->private_data = NULL; + call_value->pol = NULL; + call_value->flags = 0; + if (!memcmp(&bind_value->transport, &ndr64_uuid, sizeof(ndr64_uuid))) { + call_value->flags |= DCERPC_IS_NDR64; + } - g_hash_table_insert (dcerpc_cn_calls, call_key, call_value); + g_hash_table_insert (dcerpc_cn_calls, call_key, call_value); - new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); - *new_matched_key = matched_key; - g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); - value = call_value; - } - } - } + new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); + *new_matched_key = matched_key; + g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); + value = call_value; + } + } + } if (value) { dcerpc_info *di; di=get_next_di(); /* handoff this call */ - di->conv = conv; - di->call_id = hdr->call_id; - di->smb_fid = dcerpc_get_transport_salt(pinfo); - di->ptype = PDU_REQ; - di->call_data = value; - di->hf_index = -1; + di->conv = conv; + di->call_id = hdr->call_id; + di->smb_fid = dcerpc_get_transport_salt(pinfo); + di->ptype = PDU_REQ; + di->call_data = value; + di->hf_index = -1; - if(value->rep_frame!=0){ - pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_response_in, - tvb, 0, 0, value->rep_frame); - PROTO_ITEM_SET_GENERATED(pi); - if(parent_pi != NULL) { - proto_item_append_text(parent_pi, ", [Resp: #%u]", value->rep_frame); - } - } + if(value->rep_frame!=0){ + pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_response_in, + tvb, 0, 0, value->rep_frame); + PROTO_ITEM_SET_GENERATED(pi); + if(parent_pi != NULL) { + proto_item_append_text(parent_pi, ", [Resp: #%u]", value->rep_frame); + } + } - dissect_dcerpc_cn_stub (tvb, offset, pinfo, dcerpc_tree, tree, - hdr, di, &auth_info, alloc_hint, - value->req_frame); + dissect_dcerpc_cn_stub (tvb, offset, pinfo, dcerpc_tree, tree, + hdr, di, &auth_info, alloc_hint, + value->req_frame); } else { - /* no bind information, simply show stub data */ - pi = proto_tree_add_text(dcerpc_tree, tvb, offset, 0, "No bind info for this interface Context ID - capture start too late?"); - PROTO_ITEM_SET_GENERATED(pi); - expert_add_info_format(pinfo, pi, PI_UNDECODED, PI_NOTE, "No bind info for interface Context ID:%u", - ctx_id); - show_stub_data (tvb, offset, dcerpc_tree, &auth_info, TRUE); + /* no bind information, simply show stub data */ + pi = proto_tree_add_text(dcerpc_tree, tvb, offset, 0, "No bind info for this interface Context ID - capture start too late?"); + PROTO_ITEM_SET_GENERATED(pi); + expert_add_info_format(pinfo, pi, PI_UNDECODED, PI_NOTE, "No bind info for interface Context ID:%u", + ctx_id); + show_stub_data (tvb, offset, dcerpc_tree, &auth_info, TRUE); } } @@ -3519,8 +3519,8 @@ dissect_dcerpc_cn_rqst (tvbuff_t *tvb, gint offset, packet_info *pinfo, static void dissect_dcerpc_cn_resp (tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *dcerpc_tree, proto_tree *tree, - e_dce_cn_common_hdr_t *hdr) + proto_tree *dcerpc_tree, proto_tree *tree, + e_dce_cn_common_hdr_t *hdr) { dcerpc_call_value *value = NULL; conversation_t *conv; @@ -3566,88 +3566,88 @@ dissect_dcerpc_cn_resp (tvbuff_t *tvb, gint offset, packet_info *pinfo, /* no point in creating one here, really */ show_stub_data (tvb, offset, dcerpc_tree, &auth_info, TRUE); } else { - dcerpc_matched_key matched_key, *new_matched_key; + dcerpc_matched_key matched_key, *new_matched_key; - /* !!! we can NOT check flags.visited here since this will interact - badly with when SMB handles (i.e. calls the subdissector) - and desegmented pdu's . - Instead we check if this pdu is already in the matched table or not - */ - matched_key.frame = pinfo->fd->num; - matched_key.call_id = hdr->call_id; - value=g_hash_table_lookup(dcerpc_matched, &matched_key); - if(!value){ - dcerpc_cn_call_key call_key; - dcerpc_call_value *call_value; + /* !!! we can NOT check flags.visited here since this will interact + badly with when SMB handles (i.e. calls the subdissector) + and desegmented pdu's . + Instead we check if this pdu is already in the matched table or not + */ + matched_key.frame = pinfo->fd->num; + matched_key.call_id = hdr->call_id; + value=g_hash_table_lookup(dcerpc_matched, &matched_key); + if(!value){ + dcerpc_cn_call_key call_key; + dcerpc_call_value *call_value; - call_key.conv=conv; - call_key.call_id=hdr->call_id; - call_key.smb_fid=dcerpc_get_transport_salt(pinfo); + call_key.conv=conv; + call_key.call_id=hdr->call_id; + call_key.smb_fid=dcerpc_get_transport_salt(pinfo); - if((call_value=g_hash_table_lookup(dcerpc_cn_calls, &call_key))){ - /* extra sanity check, only match them if the reply - came after the request */ - if(call_value->req_framefd->num){ - new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); - *new_matched_key = matched_key; - g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); - value = call_value; - if(call_value->rep_frame==0){ - call_value->rep_frame=pinfo->fd->num; - } - } - } - } + if((call_value=g_hash_table_lookup(dcerpc_cn_calls, &call_key))){ + /* extra sanity check, only match them if the reply + came after the request */ + if(call_value->req_framefd->num){ + new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); + *new_matched_key = matched_key; + g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); + value = call_value; + if(call_value->rep_frame==0){ + call_value->rep_frame=pinfo->fd->num; + } + } + } + } if (value) { dcerpc_info *di; di=get_next_di(); /* handoff this call */ - di->conv = conv; - di->call_id = hdr->call_id; - di->smb_fid = dcerpc_get_transport_salt(pinfo); - di->ptype = PDU_RESP; - di->call_data = value; + di->conv = conv; + di->call_id = hdr->call_id; + di->smb_fid = dcerpc_get_transport_salt(pinfo); + di->ptype = PDU_RESP; + di->call_data = value; - proto_tree_add_uint (dcerpc_tree, hf_dcerpc_opnum, tvb, 0, 0, value->opnum); + proto_tree_add_uint (dcerpc_tree, hf_dcerpc_opnum, tvb, 0, 0, value->opnum); - /* (optional) "Object UUID" from request */ - if (value && dcerpc_tree && memcmp(&value->object_uuid, &obj_id_null, sizeof(obj_id_null)) != 0) { + /* (optional) "Object UUID" from request */ + if (value && dcerpc_tree && memcmp(&value->object_uuid, &obj_id_null, sizeof(obj_id_null)) != 0) { pi = proto_tree_add_guid_format (dcerpc_tree, hf_dcerpc_obj_id, tvb, - offset, 0, (e_guid_t *) &value->object_uuid, "Object UUID: %s", - guid_to_str((e_guid_t *) &value->object_uuid)); + offset, 0, (e_guid_t *) &value->object_uuid, "Object UUID: %s", + guid_to_str((e_guid_t *) &value->object_uuid)); PROTO_ITEM_SET_GENERATED(pi); - } + } - /* request in */ - if(value->req_frame!=0){ - nstime_t delta_ts; - pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_request_in, - tvb, 0, 0, value->req_frame); - PROTO_ITEM_SET_GENERATED(pi); - if(parent_pi != NULL) { - proto_item_append_text(parent_pi, ", [Req: #%u]", value->req_frame); - } - nstime_delta(&delta_ts, &pinfo->fd->abs_ts, &value->req_time); - pi = proto_tree_add_time(dcerpc_tree, hf_dcerpc_time, tvb, offset, 0, &delta_ts); - PROTO_ITEM_SET_GENERATED(pi); - } else { - pi = proto_tree_add_text(dcerpc_tree, - tvb, 0, 0, "No request to this DCE/RPC call found"); - expert_add_info_format(pinfo, pi, PI_SEQUENCE, PI_NOTE, - "No request to this DCE/RPC call found"); - } + /* request in */ + if(value->req_frame!=0){ + nstime_t delta_ts; + pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_request_in, + tvb, 0, 0, value->req_frame); + PROTO_ITEM_SET_GENERATED(pi); + if(parent_pi != NULL) { + proto_item_append_text(parent_pi, ", [Req: #%u]", value->req_frame); + } + nstime_delta(&delta_ts, &pinfo->fd->abs_ts, &value->req_time); + pi = proto_tree_add_time(dcerpc_tree, hf_dcerpc_time, tvb, offset, 0, &delta_ts); + PROTO_ITEM_SET_GENERATED(pi); + } else { + pi = proto_tree_add_text(dcerpc_tree, + tvb, 0, 0, "No request to this DCE/RPC call found"); + expert_add_info_format(pinfo, pi, PI_SEQUENCE, PI_NOTE, + "No request to this DCE/RPC call found"); + } - dissect_dcerpc_cn_stub (tvb, offset, pinfo, dcerpc_tree, tree, - hdr, di, &auth_info, alloc_hint, - value->rep_frame); + dissect_dcerpc_cn_stub (tvb, offset, pinfo, dcerpc_tree, tree, + hdr, di, &auth_info, alloc_hint, + value->rep_frame); } else { /* no bind information, simply show stub data */ pi = proto_tree_add_text(dcerpc_tree, tvb, offset, 0, "No bind info for this interface Context ID - capture start too late?"); PROTO_ITEM_SET_GENERATED(pi); - expert_add_info_format(pinfo, pi, PI_UNDECODED, PI_NOTE, "No bind info for interface Context ID:%u", - ctx_id); + expert_add_info_format(pinfo, pi, PI_UNDECODED, PI_NOTE, "No bind info for interface Context ID:%u", + ctx_id); show_stub_data (tvb, offset, dcerpc_tree, &auth_info, TRUE); } } @@ -3680,27 +3680,27 @@ dissect_dcerpc_cn_fault (tvbuff_t *tvb, gint offset, packet_info *pinfo, offset++; /*offset = dissect_dcerpc_uint32 (tvb, offset, pinfo, dcerpc_tree, hdr->drep, - hf_dcerpc_cn_status, &status);*/ + hf_dcerpc_cn_status, &status);*/ status = ((hdr->drep[0] & 0x10) - ? tvb_get_letohl (tvb, offset) - : tvb_get_ntohl (tvb, offset)); + ? tvb_get_letohl (tvb, offset) + : tvb_get_ntohl (tvb, offset)); if (dcerpc_tree) { pi = proto_tree_add_item (dcerpc_tree, hf_dcerpc_cn_status, tvb, offset, 4, (hdr->drep[0] & 0x10)); } - offset+=4; + offset+=4; - expert_add_info_format(pinfo, pi, PI_RESPONSE_CODE, PI_NOTE, "Fault: %s", - val_to_str(status, reject_status_vals, "Unknown (0x%08x)")); + expert_add_info_format(pinfo, pi, PI_RESPONSE_CODE, PI_NOTE, "Fault: %s", + val_to_str(status, reject_status_vals, "Unknown (0x%08x)")); /* save context ID for use with dcerpc_add_conv_to_bind_table() */ pinfo->dcectxid = ctx_id; if (check_col (pinfo->cinfo, COL_INFO)) { col_append_fstr (pinfo->cinfo, COL_INFO, - " ctx_id: %u status: %s", ctx_id, - val_to_str(status, reject_status_vals, - "Unknown (0x%08x)")); + " ctx_id: %u status: %s", ctx_id, + val_to_str(status, reject_status_vals, + "Unknown (0x%08x)")); } /* padding */ @@ -3717,36 +3717,36 @@ dissect_dcerpc_cn_fault (tvbuff_t *tvb, gint offset, packet_info *pinfo, if (!conv) { /* no point in creating one here, really */ } else { - dcerpc_matched_key matched_key, *new_matched_key; + dcerpc_matched_key matched_key, *new_matched_key; - /* !!! we can NOT check flags.visited here since this will interact - badly with when SMB handles (i.e. calls the subdissector) - and desegmented pdu's . - Instead we check if this pdu is already in the matched table or not - */ - matched_key.frame = pinfo->fd->num; - matched_key.call_id = hdr->call_id; - value=g_hash_table_lookup(dcerpc_matched, &matched_key); - if(!value){ - dcerpc_cn_call_key call_key; - dcerpc_call_value *call_value; + /* !!! we can NOT check flags.visited here since this will interact + badly with when SMB handles (i.e. calls the subdissector) + and desegmented pdu's . + Instead we check if this pdu is already in the matched table or not + */ + matched_key.frame = pinfo->fd->num; + matched_key.call_id = hdr->call_id; + value=g_hash_table_lookup(dcerpc_matched, &matched_key); + if(!value){ + dcerpc_cn_call_key call_key; + dcerpc_call_value *call_value; - call_key.conv=conv; - call_key.call_id=hdr->call_id; - call_key.smb_fid=dcerpc_get_transport_salt(pinfo); + call_key.conv=conv; + call_key.call_id=hdr->call_id; + call_key.smb_fid=dcerpc_get_transport_salt(pinfo); - if((call_value=g_hash_table_lookup(dcerpc_cn_calls, &call_key))){ - new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); - *new_matched_key = matched_key; - g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); + if((call_value=g_hash_table_lookup(dcerpc_cn_calls, &call_key))){ + new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); + *new_matched_key = matched_key; + g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); - value = call_value; - if(call_value->rep_frame==0){ - call_value->rep_frame=pinfo->fd->num; - } + value = call_value; + if(call_value->rep_frame==0){ + call_value->rep_frame=pinfo->fd->num; + } - } - } + } + } if (value) { int length, reported_length, stub_length; @@ -3755,167 +3755,167 @@ dissect_dcerpc_cn_fault (tvbuff_t *tvb, gint offset, packet_info *pinfo, di=get_next_di(); /* handoff this call */ - di->conv = conv; - di->call_id = hdr->call_id; - di->smb_fid = dcerpc_get_transport_salt(pinfo); - di->ptype = PDU_FAULT; - di->call_data = value; + di->conv = conv; + di->call_id = hdr->call_id; + di->smb_fid = dcerpc_get_transport_salt(pinfo); + di->ptype = PDU_FAULT; + di->call_data = value; - proto_tree_add_uint (dcerpc_tree, hf_dcerpc_opnum, tvb, 0, 0, value->opnum); - if(value->req_frame!=0){ - nstime_t delta_ts; - pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_request_in, - tvb, 0, 0, value->req_frame); - PROTO_ITEM_SET_GENERATED(pi); - parent_pi = proto_tree_get_parent(dcerpc_tree); - if(parent_pi != NULL) { - proto_item_append_text(parent_pi, ", [Req: #%u]", value->req_frame); - } - nstime_delta(&delta_ts, &pinfo->fd->abs_ts, &value->req_time); - pi = proto_tree_add_time(dcerpc_tree, hf_dcerpc_time, tvb, offset, 0, &delta_ts); - PROTO_ITEM_SET_GENERATED(pi); - } else { - pi = proto_tree_add_text(dcerpc_tree, - tvb, 0, 0, "No request to this DCE/RPC call found"); - expert_add_info_format(pinfo, pi, PI_SEQUENCE, PI_NOTE, - "No request to this DCE/RPC call found"); - } - - length = tvb_length_remaining(tvb, offset); - reported_length = tvb_reported_length_remaining(tvb, offset); - /* as we now create a tvb in dissect_dcerpc_cn() containing only the - * stub_data, the following calculation is no longer valid: - * stub_length = hdr->frag_len - offset - auth_info.auth_size; - * simply use the remaining length of the tvb instead. - * XXX - or better use the reported_length?!? - */ - stub_length = length; - if (length > stub_length) - length = stub_length; - if (reported_length > stub_length) - reported_length = stub_length; - - /* If we don't have reassembly enabled, or this packet contains - the entire PDU, or if we don't have all the data in this - fragment, just call the handoff directly if this is the - first fragment or the PDU isn't fragmented. */ - if( (!dcerpc_reassemble) || PFC_NOT_FRAGMENTED(hdr) || - !tvb_bytes_exist(tvb, offset, stub_length) ){ - if(hdr->flags&PFC_FIRST_FRAG){ - /* First fragment, possibly the only fragment */ - /* - * XXX - should there be a third routine for each - * function in an RPC subdissector, to handle - * fault responses? The DCE RPC 1.1 spec says - * three's "stub data" here, which I infer means - * that it's protocol-specific and call-specific. - * - * It should probably get passed the status code - * as well, as that might be protocol-specific. - */ - if (dcerpc_tree) { - if (stub_length > 0) { - tvb_ensure_bytes_exist(tvb, offset, stub_length); - proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, - "Fault stub data (%d byte%s)", - stub_length, - plurality(stub_length, "", "s")); - } - } - } else { - /* PDU is fragmented and this isn't the first fragment */ - col_append_str(pinfo->cinfo, COL_INFO, - " [DCE/RPC fragment]"); - if (dcerpc_tree) { - if (stub_length > 0) { - tvb_ensure_bytes_exist(tvb, offset, stub_length); - proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, - "Fragment data (%d byte%s)", - stub_length, - plurality(stub_length, "", "s")); - } - } - } + proto_tree_add_uint (dcerpc_tree, hf_dcerpc_opnum, tvb, 0, 0, value->opnum); + if(value->req_frame!=0){ + nstime_t delta_ts; + pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_request_in, + tvb, 0, 0, value->req_frame); + PROTO_ITEM_SET_GENERATED(pi); + parent_pi = proto_tree_get_parent(dcerpc_tree); + if(parent_pi != NULL) { + proto_item_append_text(parent_pi, ", [Req: #%u]", value->req_frame); + } + nstime_delta(&delta_ts, &pinfo->fd->abs_ts, &value->req_time); + pi = proto_tree_add_time(dcerpc_tree, hf_dcerpc_time, tvb, offset, 0, &delta_ts); + PROTO_ITEM_SET_GENERATED(pi); } else { - /* Reassembly is enabled, the PDU is fragmented, and - we have all the data in the fragment; the first two - of those mean we should attempt reassembly, and the - third means we can attempt reassembly. */ - if (dcerpc_tree) { - if (length > 0) { - tvb_ensure_bytes_exist(tvb, offset, stub_length); - proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, - "Fragment data (%d byte%s)", - stub_length, - plurality(stub_length, "", "s")); - } - } - if(hdr->flags&PFC_FIRST_FRAG){ /* FIRST fragment */ - if( (!pinfo->fd->flags.visited) && value->rep_frame ){ - fragment_add_seq_next(tvb, offset, pinfo, value->rep_frame, - dcerpc_co_fragment_table, dcerpc_co_reassemble_table, - stub_length, - TRUE); - } - col_append_str(pinfo->cinfo, COL_INFO, - " [DCE/RPC fragment]"); - } else if(hdr->flags&PFC_LAST_FRAG){ /* LAST fragment */ - if( value->rep_frame ){ - fragment_data *fd_head; + pi = proto_tree_add_text(dcerpc_tree, + tvb, 0, 0, "No request to this DCE/RPC call found"); + expert_add_info_format(pinfo, pi, PI_SEQUENCE, PI_NOTE, + "No request to this DCE/RPC call found"); + } - fd_head = fragment_add_seq_next(tvb, offset, pinfo, - value->rep_frame, - dcerpc_co_fragment_table, dcerpc_co_reassemble_table, - stub_length, - TRUE); + length = tvb_length_remaining(tvb, offset); + reported_length = tvb_reported_length_remaining(tvb, offset); + /* as we now create a tvb in dissect_dcerpc_cn() containing only the + * stub_data, the following calculation is no longer valid: + * stub_length = hdr->frag_len - offset - auth_info.auth_size; + * simply use the remaining length of the tvb instead. + * XXX - or better use the reported_length?!? + */ + stub_length = length; + if (length > stub_length) + length = stub_length; + if (reported_length > stub_length) + reported_length = stub_length; - if(fd_head){ - /* We completed reassembly */ - tvbuff_t *next_tvb; - proto_item *frag_tree_item; + /* If we don't have reassembly enabled, or this packet contains + the entire PDU, or if we don't have all the data in this + fragment, just call the handoff directly if this is the + first fragment or the PDU isn't fragmented. */ + if( (!dcerpc_reassemble) || PFC_NOT_FRAGMENTED(hdr) || + !tvb_bytes_exist(tvb, offset, stub_length) ){ + if(hdr->flags&PFC_FIRST_FRAG){ + /* First fragment, possibly the only fragment */ + /* + * XXX - should there be a third routine for each + * function in an RPC subdissector, to handle + * fault responses? The DCE RPC 1.1 spec says + * three's "stub data" here, which I infer means + * that it's protocol-specific and call-specific. + * + * It should probably get passed the status code + * as well, as that might be protocol-specific. + */ + if (dcerpc_tree) { + if (stub_length > 0) { + tvb_ensure_bytes_exist(tvb, offset, stub_length); + proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, + "Fault stub data (%d byte%s)", + stub_length, + plurality(stub_length, "", "s")); + } + } + } else { + /* PDU is fragmented and this isn't the first fragment */ + col_append_str(pinfo->cinfo, COL_INFO, + " [DCE/RPC fragment]"); + if (dcerpc_tree) { + if (stub_length > 0) { + tvb_ensure_bytes_exist(tvb, offset, stub_length); + proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, + "Fragment data (%d byte%s)", + stub_length, + plurality(stub_length, "", "s")); + } + } + } + } else { + /* Reassembly is enabled, the PDU is fragmented, and + we have all the data in the fragment; the first two + of those mean we should attempt reassembly, and the + third means we can attempt reassembly. */ + if (dcerpc_tree) { + if (length > 0) { + tvb_ensure_bytes_exist(tvb, offset, stub_length); + proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, + "Fragment data (%d byte%s)", + stub_length, + plurality(stub_length, "", "s")); + } + } + if(hdr->flags&PFC_FIRST_FRAG){ /* FIRST fragment */ + if( (!pinfo->fd->flags.visited) && value->rep_frame ){ + fragment_add_seq_next(tvb, offset, pinfo, value->rep_frame, + dcerpc_co_fragment_table, dcerpc_co_reassemble_table, + stub_length, + TRUE); + } + col_append_str(pinfo->cinfo, COL_INFO, + " [DCE/RPC fragment]"); + } else if(hdr->flags&PFC_LAST_FRAG){ /* LAST fragment */ + if( value->rep_frame ){ + fragment_data *fd_head; - next_tvb = tvb_new_child_real_data(tvb, fd_head->data, fd_head->len, fd_head->len); - add_new_data_source(pinfo, next_tvb, "Reassembled DCE/RPC"); - show_fragment_tree(fd_head, &dcerpc_frag_items, - dcerpc_tree, pinfo, next_tvb, &frag_tree_item); + fd_head = fragment_add_seq_next(tvb, offset, pinfo, + value->rep_frame, + dcerpc_co_fragment_table, dcerpc_co_reassemble_table, + stub_length, + TRUE); - /* - * XXX - should there be a third routine for each - * function in an RPC subdissector, to handle - * fault responses? The DCE RPC 1.1 spec says - * three's "stub data" here, which I infer means - * that it's protocol-specific and call-specific. - * - * It should probably get passed the status code - * as well, as that might be protocol-specific. - */ - if (dcerpc_tree) { - if (length > 0) { - tvb_ensure_bytes_exist(tvb, offset, stub_length); - proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, - "Fault stub data (%d byte%s)", - stub_length, - plurality(stub_length, "", "s")); - } - } - } else { - /* Reassembly not complete - some fragments - are missing */ - col_append_str(pinfo->cinfo, COL_INFO, - " [DCE/RPC fragment]"); - } - } - } else { /* MIDDLE fragment(s) */ - if( (!pinfo->fd->flags.visited) && value->rep_frame ){ - fragment_add_seq_next(tvb, offset, pinfo, value->rep_frame, - dcerpc_co_fragment_table, dcerpc_co_reassemble_table, - stub_length, - TRUE); - } - col_append_str(pinfo->cinfo, COL_INFO, - " [DCE/RPC fragment]"); - } - } + if(fd_head){ + /* We completed reassembly */ + tvbuff_t *next_tvb; + proto_item *frag_tree_item; + + next_tvb = tvb_new_child_real_data(tvb, fd_head->data, fd_head->len, fd_head->len); + add_new_data_source(pinfo, next_tvb, "Reassembled DCE/RPC"); + show_fragment_tree(fd_head, &dcerpc_frag_items, + dcerpc_tree, pinfo, next_tvb, &frag_tree_item); + + /* + * XXX - should there be a third routine for each + * function in an RPC subdissector, to handle + * fault responses? The DCE RPC 1.1 spec says + * three's "stub data" here, which I infer means + * that it's protocol-specific and call-specific. + * + * It should probably get passed the status code + * as well, as that might be protocol-specific. + */ + if (dcerpc_tree) { + if (length > 0) { + tvb_ensure_bytes_exist(tvb, offset, stub_length); + proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, + "Fault stub data (%d byte%s)", + stub_length, + plurality(stub_length, "", "s")); + } + } + } else { + /* Reassembly not complete - some fragments + are missing */ + col_append_str(pinfo->cinfo, COL_INFO, + " [DCE/RPC fragment]"); + } + } + } else { /* MIDDLE fragment(s) */ + if( (!pinfo->fd->flags.visited) && value->rep_frame ){ + fragment_add_seq_next(tvb, offset, pinfo, value->rep_frame, + dcerpc_co_fragment_table, dcerpc_co_reassemble_table, + stub_length, + TRUE); + } + col_append_str(pinfo->cinfo, COL_INFO, + " [DCE/RPC fragment]"); + } + } } } } @@ -3939,7 +3939,7 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *drep_tree = NULL; e_dce_cn_common_hdr_t hdr; dcerpc_auth_info auth_info; - tvbuff_t *fragment_tvb; + tvbuff_t *fragment_tvb; /* * when done over nbt, dcerpc requests are padded with 4 bytes of null @@ -3962,7 +3962,7 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, * Check if this looks like a C/O DCERPC call */ if (!tvb_bytes_exist (tvb, offset, sizeof (hdr))) { - return FALSE; /* not enough information to check */ + return FALSE; /* not enough information to check */ } start_offset = offset; hdr.rpc_ver = tvb_get_guint8 (tvb, offset++); @@ -3987,20 +3987,20 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, offset += 4; if (check_col (pinfo->cinfo, COL_DCE_CALL)) { - if(pinfo->dcectxid == 0) { - col_append_fstr (pinfo->cinfo, COL_DCE_CALL, "%u", hdr.call_id); - } else { - /* this is not the first DCE-RPC request/response in this (TCP?-)PDU, - * prepend a delimiter */ - col_append_fstr (pinfo->cinfo, COL_DCE_CALL, "#%u", hdr.call_id); - } + if(pinfo->dcectxid == 0) { + col_append_fstr (pinfo->cinfo, COL_DCE_CALL, "%u", hdr.call_id); + } else { + /* this is not the first DCE-RPC request/response in this (TCP?-)PDU, + * prepend a delimiter */ + col_append_fstr (pinfo->cinfo, COL_DCE_CALL, "#%u", hdr.call_id); + } } if (can_desegment && pinfo->can_desegment && !tvb_bytes_exist(tvb, start_offset, hdr.frag_len)) { pinfo->desegment_offset = start_offset; pinfo->desegment_len = hdr.frag_len - tvb_length_remaining (tvb, start_offset); - *pkt_len = 0; /* desegmentation required */ + *pkt_len = 0; /* desegmentation required */ return TRUE; } @@ -4014,13 +4014,13 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, col_set_fence(pinfo->cinfo,COL_INFO); } col_add_fstr (pinfo->cinfo, COL_INFO, "%s: call_id: %u", - pckt_vals[hdr.ptype].strptr, hdr.call_id); + pckt_vals[hdr.ptype].strptr, hdr.call_id); } if(pinfo->dcectxid != 0) { /* this is not the first DCE-RPC request/response in this (TCP?-)PDU */ - expert_add_info_format(pinfo, NULL, PI_SEQUENCE, PI_CHAT, "Multiple DCE/RPC fragments/PDU's in one packet"); - } + expert_add_info_format(pinfo, NULL, PI_SEQUENCE, PI_CHAT, "Multiple DCE/RPC fragments/PDU's in one packet"); + } offset = start_offset; tvb_ensure_bytes_exist(tvb, offset, 16); @@ -4039,15 +4039,15 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, offset++; /* XXX - too much "output noise", removed for now - if(hdr.ptype == PDU_BIND || hdr.ptype == PDU_ALTER || - hdr.ptype == PDU_BIND_ACK || hdr.ptype == PDU_ALTER_ACK) - expert_add_info_format(pinfo, tf, PI_SEQUENCE, PI_CHAT, "Context change: %s", - val_to_str(hdr.ptype, pckt_vals, "(0x%x)"));*/ + if(hdr.ptype == PDU_BIND || hdr.ptype == PDU_ALTER || + hdr.ptype == PDU_BIND_ACK || hdr.ptype == PDU_ALTER_ACK) + expert_add_info_format(pinfo, tf, PI_SEQUENCE, PI_CHAT, "Context change: %s", + val_to_str(hdr.ptype, pckt_vals, "(0x%x)"));*/ if(hdr.ptype == PDU_BIND_NAK) expert_add_info_format(pinfo, tf, PI_SEQUENCE, PI_WARN, "Bind not acknowledged"); if (tree) { - proto_item_append_text(ti, " %s, Fragment:", val_to_str(hdr.ptype, pckt_vals, "Unknown (0x%02x)")); + proto_item_append_text(ti, " %s, Fragment:", val_to_str(hdr.ptype, pckt_vals, "Unknown (0x%02x)")); tf = proto_tree_add_uint (dcerpc_tree, hf_dcerpc_cn_flags, tvb, offset, 1, hdr.flags); cn_flags_tree = proto_item_add_subtree (tf, ett_dcerpc_cn_flags); @@ -4064,7 +4064,7 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, proto_item_append_text(ti, " Single"); } else { if(hdr.flags & PFC_FIRST_FRAG) { - proto_item_append_text(ti, " 1st"); + proto_item_append_text(ti, " 1st"); } if(hdr.flags & PFC_LAST_FRAG) { proto_item_append_text(ti, " Last"); @@ -4122,8 +4122,8 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, * offset otherwise. */ fragment_tvb = tvb_new_subset(tvb, 0, - MIN((hdr.frag_len + (guint) start_offset), tvb_length(tvb)) /* length */, - hdr.frag_len + start_offset /* reported_length */); + MIN((hdr.frag_len + (guint) start_offset), tvb_length(tvb)) /* length */, + hdr.frag_len + start_offset /* reported_length */); /* * Packet type specific stuff is next. @@ -4144,7 +4144,7 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, * Nothing after the common header other than credentials. */ dissect_dcerpc_cn_auth (fragment_tvb, offset, pinfo, dcerpc_tree, &hdr, TRUE, - &auth_info); + &auth_info); break; case PDU_REQ: @@ -4170,7 +4170,7 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, * verifier. */ dissect_dcerpc_cn_auth (fragment_tvb, offset, pinfo, dcerpc_tree, &hdr, FALSE, - &auth_info); + &auth_info); break; case PDU_SHUTDOWN: @@ -4183,7 +4183,7 @@ dissect_dcerpc_cn (tvbuff_t *tvb, int offset, packet_info *pinfo, default: /* might as well dissect the auth info */ dissect_dcerpc_cn_auth (fragment_tvb, offset, pinfo, dcerpc_tree, &hdr, FALSE, - &auth_info); + &auth_info); break; } return TRUE; @@ -4245,7 +4245,7 @@ dissect_dcerpc_cn_bs_body (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) TRY { pdu_len = 0; if(dissect_dcerpc_cn (tvb, offset, pinfo, tree, - dcerpc_cn_desegment, &pdu_len)) { + dcerpc_cn_desegment, &pdu_len)) { dcerpc_pdus++; } } CATCH(BoundsError) { @@ -4281,13 +4281,13 @@ dissect_dcerpc_cn_bs_body (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) * Desegmentation required - bail now, but give the user a hint that desegmentation might be done later. */ proto_tree_add_uint_format(tree, hf_dcerpc_cn_deseg_req, tvb, offset, - 0, - tvb_reported_length_remaining(tvb, offset), - "[DCE RPC: %u byte%s left, desegmentation might follow]", - tvb_reported_length_remaining(tvb, offset), - plurality(tvb_reported_length_remaining(tvb, offset), "", "s")); + 0, + tvb_reported_length_remaining(tvb, offset), + "[DCE RPC: %u byte%s left, desegmentation might follow]", + tvb_reported_length_remaining(tvb, offset), + plurality(tvb_reported_length_remaining(tvb, offset), "", "s")); break; - } + } /* * Step to the next PDU. @@ -4300,22 +4300,22 @@ dissect_dcerpc_cn_bs_body (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) static gboolean dissect_dcerpc_cn_bs (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - pinfo->dcetransporttype=DCE_TRANSPORT_UNKNOWN; - return dissect_dcerpc_cn_bs_body(tvb, pinfo, tree); + pinfo->dcetransporttype=DCE_TRANSPORT_UNKNOWN; + return dissect_dcerpc_cn_bs_body(tvb, pinfo, tree); } static gboolean dissect_dcerpc_cn_smbpipe (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - pinfo->dcetransporttype=DCE_CN_TRANSPORT_SMBPIPE; - return dissect_dcerpc_cn_bs_body(tvb, pinfo, tree); + pinfo->dcetransporttype=DCE_CN_TRANSPORT_SMBPIPE; + return dissect_dcerpc_cn_bs_body(tvb, pinfo, tree); } static gboolean dissect_dcerpc_cn_smb2 (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - pinfo->dcetransporttype=DCE_TRANSPORT_UNKNOWN; - return dissect_dcerpc_cn_bs_body(tvb, pinfo, tree); + pinfo->dcetransporttype=DCE_TRANSPORT_UNKNOWN; + return dissect_dcerpc_cn_bs_body(tvb, pinfo, tree); } @@ -4345,7 +4345,7 @@ dissect_dcerpc_dg_auth (tvbuff_t *tvb, int offset, proto_tree *dcerpc_tree, */ offset += hdr->frag_len; if (tvb_length_remaining(tvb, offset) > 0) { - switch (hdr->auth_proto) { + switch (hdr->auth_proto) { case DCE_C_RPC_AUTHN_PROTOCOL_KRB5: ti = proto_tree_add_text (dcerpc_tree, tvb, offset, -1, "Kerberos authentication verifier"); @@ -4365,7 +4365,7 @@ dissect_dcerpc_dg_auth (tvbuff_t *tvb, int offset, proto_tree *dcerpc_tree, offset += 16; break; - default: + default: proto_tree_add_text (dcerpc_tree, tvb, offset, -1, "Authentication verifier"); break; } @@ -4420,8 +4420,8 @@ dissect_dcerpc_dg_cancel (tvbuff_t *tvb, int offset, packet_info *pinfo, /* XXX - the RPC reference in chapter: "the cancel PDU" doesn't mention the accepting_cancels field (it's only in the cancel_ack PDU)! */ /*offset = dissect_dcerpc_uint32 (tvb, offset, pinfo, dcerpc_tree, - hdr->drep, hf_dcerpc_dg_server_accepting_cancels, - NULL);*/ + hdr->drep, hf_dcerpc_dg_server_accepting_cancels, + NULL);*/ break; } } @@ -4437,15 +4437,15 @@ dissect_dcerpc_dg_fack (tvbuff_t *tvb, int offset, packet_info *pinfo, guint i; offset = dissect_dcerpc_uint8 (tvb, offset, pinfo, dcerpc_tree, - hdr->drep, hf_dcerpc_dg_fack_vers, - &version); + hdr->drep, hf_dcerpc_dg_fack_vers, + &version); /* padding */ offset++; switch (version) { - case 0: /* The only version documented in the DCE RPC 1.1 spec */ - case 1: /* This appears to be the same */ + case 0: /* The only version documented in the DCE RPC 1.1 spec */ + case 1: /* This appears to be the same */ offset = dissect_dcerpc_uint16 (tvb, offset, pinfo, dcerpc_tree, hdr->drep, hf_dcerpc_dg_fack_window_size, NULL); @@ -4477,8 +4477,8 @@ dissect_dcerpc_dg_fack (tvbuff_t *tvb, int offset, packet_info *pinfo, static void dissect_dcerpc_dg_reject_fault (tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *dcerpc_tree, - e_dce_dg_common_hdr_t *hdr) + proto_tree *dcerpc_tree, + e_dce_dg_common_hdr_t *hdr) { guint32 status; @@ -4488,8 +4488,8 @@ dissect_dcerpc_dg_reject_fault (tvbuff_t *tvb, int offset, packet_info *pinfo, if (check_col (pinfo->cinfo, COL_INFO)) { col_append_fstr (pinfo->cinfo, COL_INFO, - ": status: %s", - val_to_str(status, reject_status_vals, "Unknown (0x%08x)")); + ": status: %s", + val_to_str(status, reject_status_vals, "Unknown (0x%08x)")); } } @@ -4507,7 +4507,7 @@ dissect_dcerpc_dg_stub (tvbuff_t *tvb, int offset, packet_info *pinfo, if (check_col (pinfo->cinfo, COL_INFO)) col_append_fstr (pinfo->cinfo, COL_INFO, " opnum: %u len: %u", - di->call_data->opnum, hdr->frag_len ); + di->call_data->opnum, hdr->frag_len ); length = tvb_length_remaining (tvb, offset); reported_length = tvb_reported_length_remaining (tvb, offset); @@ -4525,84 +4525,84 @@ dissect_dcerpc_dg_stub (tvbuff_t *tvb, int offset, packet_info *pinfo, the data in the fragment, just call the handoff directly if this is the first fragment or the PDU isn't fragmented. */ if( (!dcerpc_reassemble) || !(hdr->flags1 & PFCL1_FRAG) || - !tvb_bytes_exist(tvb, offset, stub_length) ){ - if(hdr->frag_num == 0) { + !tvb_bytes_exist(tvb, offset, stub_length) ){ + if(hdr->frag_num == 0) { - /* First fragment, possibly the only fragment */ + /* First fragment, possibly the only fragment */ - /* - * XXX - authentication info? - */ - pinfo->fragmented = (hdr->flags1 & PFCL1_FRAG); - next_tvb = tvb_new_subset (tvb, offset, length, - reported_length); - dcerpc_try_handoff (pinfo, tree, dcerpc_tree, next_tvb, - next_tvb, hdr->drep, di, NULL); - } else { - /* PDU is fragmented and this isn't the first fragment */ - col_append_str(pinfo->cinfo, COL_INFO, " [DCE/RPC fragment]"); - if (dcerpc_tree) { - if (length > 0) { - tvb_ensure_bytes_exist(tvb, offset, stub_length); - proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, - "Fragment data (%d byte%s)", - stub_length, - plurality(stub_length, "", "s")); - } - } + /* + * XXX - authentication info? + */ + pinfo->fragmented = (hdr->flags1 & PFCL1_FRAG); + next_tvb = tvb_new_subset (tvb, offset, length, + reported_length); + dcerpc_try_handoff (pinfo, tree, dcerpc_tree, next_tvb, + next_tvb, hdr->drep, di, NULL); + } else { + /* PDU is fragmented and this isn't the first fragment */ + col_append_str(pinfo->cinfo, COL_INFO, " [DCE/RPC fragment]"); + if (dcerpc_tree) { + if (length > 0) { + tvb_ensure_bytes_exist(tvb, offset, stub_length); + proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, + "Fragment data (%d byte%s)", + stub_length, + plurality(stub_length, "", "s")); + } + } } } else { - /* Reassembly is enabled, the PDU is fragmented, and - we have all the data in the fragment; the first two - of those mean we should attempt reassembly, and the - third means we can attempt reassembly. */ - if (dcerpc_tree) { - if (length > 0) { - tvb_ensure_bytes_exist(tvb, offset, stub_length); - proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, - "Fragment data (%d byte%s)", stub_length, - plurality(stub_length, "", "s")); - } - } - - fd_head = fragment_add_dcerpc_dg(tvb, offset, pinfo, - hdr->seqnum, &hdr->act_id, dcerpc_cl_reassemble_table, - hdr->frag_num, stub_length, - !(hdr->flags1 & PFCL1_LASTFRAG)); - if (fd_head != NULL) { - /* We completed reassembly... */ - if(pinfo->fd->num==fd_head->reassembled_in) { - /* ...and this is the reassembled RPC PDU */ - next_tvb = tvb_new_child_real_data(tvb, fd_head->data, fd_head->len, fd_head->len); - add_new_data_source(pinfo, next_tvb, "Reassembled DCE/RPC"); - show_fragment_seq_tree(fd_head, &dcerpc_frag_items, - tree, pinfo, next_tvb, &pi); - - /* - * XXX - authentication info? - */ - pinfo->fragmented = FALSE; - dcerpc_try_handoff (pinfo, tree, dcerpc_tree, next_tvb, - next_tvb, hdr->drep, di, NULL); - } else { - /* ...and this isn't the reassembled RPC PDU */ - pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_reassembled_in, - tvb, 0, 0, fd_head->reassembled_in); - PROTO_ITEM_SET_GENERATED(pi); - parent_pi = proto_tree_get_parent(dcerpc_tree); - if(parent_pi != NULL) { - proto_item_append_text(parent_pi, ", [Reas: #%u]", fd_head->reassembled_in); + /* Reassembly is enabled, the PDU is fragmented, and + we have all the data in the fragment; the first two + of those mean we should attempt reassembly, and the + third means we can attempt reassembly. */ + if (dcerpc_tree) { + if (length > 0) { + tvb_ensure_bytes_exist(tvb, offset, stub_length); + proto_tree_add_text (dcerpc_tree, tvb, offset, stub_length, + "Fragment data (%d byte%s)", stub_length, + plurality(stub_length, "", "s")); } - if (check_col(pinfo->cinfo, COL_INFO)) { - col_append_fstr(pinfo->cinfo, COL_INFO, - " [DCE/RPC fragment, reas: #%u]", fd_head->reassembled_in); - } } - } else { - /* Reassembly isn't completed yet */ - col_append_str(pinfo->cinfo, COL_INFO, " [DCE/RPC fragment]"); - } + + fd_head = fragment_add_dcerpc_dg(tvb, offset, pinfo, + hdr->seqnum, &hdr->act_id, dcerpc_cl_reassemble_table, + hdr->frag_num, stub_length, + !(hdr->flags1 & PFCL1_LASTFRAG)); + if (fd_head != NULL) { + /* We completed reassembly... */ + if(pinfo->fd->num==fd_head->reassembled_in) { + /* ...and this is the reassembled RPC PDU */ + next_tvb = tvb_new_child_real_data(tvb, fd_head->data, fd_head->len, fd_head->len); + add_new_data_source(pinfo, next_tvb, "Reassembled DCE/RPC"); + show_fragment_seq_tree(fd_head, &dcerpc_frag_items, + tree, pinfo, next_tvb, &pi); + + /* + * XXX - authentication info? + */ + pinfo->fragmented = FALSE; + dcerpc_try_handoff (pinfo, tree, dcerpc_tree, next_tvb, + next_tvb, hdr->drep, di, NULL); + } else { + /* ...and this isn't the reassembled RPC PDU */ + pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_reassembled_in, + tvb, 0, 0, fd_head->reassembled_in); + PROTO_ITEM_SET_GENERATED(pi); + parent_pi = proto_tree_get_parent(dcerpc_tree); + if(parent_pi != NULL) { + proto_item_append_text(parent_pi, ", [Reas: #%u]", fd_head->reassembled_in); + } + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_fstr(pinfo->cinfo, COL_INFO, + " [DCE/RPC fragment, reas: #%u]", fd_head->reassembled_in); + } + } + } else { + /* Reassembly isn't completed yet */ + col_append_str(pinfo->cinfo, COL_INFO, " [DCE/RPC fragment]"); + } } pinfo->fragmented = save_fragmented; } @@ -4620,35 +4620,35 @@ dissect_dcerpc_dg_rqst (tvbuff_t *tvb, int offset, packet_info *pinfo, di=get_next_di(); if(!(pinfo->fd->flags.visited)){ - dcerpc_call_value *call_value; - dcerpc_dg_call_key *call_key; + dcerpc_call_value *call_value; + dcerpc_dg_call_key *call_key; - call_key=se_alloc (sizeof (dcerpc_dg_call_key)); - call_key->conv=conv; - call_key->seqnum=hdr->seqnum; - call_key->act_id=hdr->act_id; + call_key=se_alloc (sizeof (dcerpc_dg_call_key)); + call_key->conv=conv; + call_key->seqnum=hdr->seqnum; + call_key->act_id=hdr->act_id; - call_value=se_alloc (sizeof (dcerpc_call_value)); - call_value->uuid = hdr->if_id; - call_value->ver = hdr->if_ver; - call_value->object_uuid = hdr->obj_id; - call_value->opnum = hdr->opnum; - call_value->req_frame=pinfo->fd->num; - call_value->req_time=pinfo->fd->abs_ts; - call_value->rep_frame=0; - call_value->max_ptr=0; - call_value->se_data = NULL; - call_value->private_data = NULL; - call_value->pol = NULL; - /* NDR64 is not available on dg transports ?*/ - call_value->flags = 0; + call_value=se_alloc (sizeof (dcerpc_call_value)); + call_value->uuid = hdr->if_id; + call_value->ver = hdr->if_ver; + call_value->object_uuid = hdr->obj_id; + call_value->opnum = hdr->opnum; + call_value->req_frame=pinfo->fd->num; + call_value->req_time=pinfo->fd->abs_ts; + call_value->rep_frame=0; + call_value->max_ptr=0; + call_value->se_data = NULL; + call_value->private_data = NULL; + call_value->pol = NULL; + /* NDR64 is not available on dg transports ?*/ + call_value->flags = 0; - g_hash_table_insert (dcerpc_dg_calls, call_key, call_value); + g_hash_table_insert (dcerpc_dg_calls, call_key, call_value); - new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); - new_matched_key->frame = pinfo->fd->num; - new_matched_key->call_id = hdr->seqnum; - g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); + new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); + new_matched_key->frame = pinfo->fd->num; + new_matched_key->call_id = hdr->seqnum; + g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); } matched_key.frame = pinfo->fd->num; @@ -4674,13 +4674,13 @@ dissect_dcerpc_dg_rqst (tvbuff_t *tvb, int offset, packet_info *pinfo, di->call_data = value; if(value->rep_frame!=0){ - pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_response_in, - tvb, 0, 0, value->rep_frame); - PROTO_ITEM_SET_GENERATED(pi); - parent_pi = proto_tree_get_parent(dcerpc_tree); - if(parent_pi != NULL) { - proto_item_append_text(parent_pi, ", [Resp: #%u]", value->rep_frame); - } + pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_response_in, + tvb, 0, 0, value->rep_frame); + PROTO_ITEM_SET_GENERATED(pi); + parent_pi = proto_tree_get_parent(dcerpc_tree); + if(parent_pi != NULL) { + proto_item_append_text(parent_pi, ", [Resp: #%u]", value->rep_frame); + } } dissect_dcerpc_dg_stub (tvb, offset, pinfo, dcerpc_tree, tree, hdr, di); } @@ -4698,22 +4698,22 @@ dissect_dcerpc_dg_resp (tvbuff_t *tvb, int offset, packet_info *pinfo, di=get_next_di(); if(!(pinfo->fd->flags.visited)){ - dcerpc_call_value *call_value; - dcerpc_dg_call_key call_key; + dcerpc_call_value *call_value; + dcerpc_dg_call_key call_key; - call_key.conv=conv; - call_key.seqnum=hdr->seqnum; - call_key.act_id=hdr->act_id; + call_key.conv=conv; + call_key.seqnum=hdr->seqnum; + call_key.act_id=hdr->act_id; - if((call_value=g_hash_table_lookup(dcerpc_dg_calls, &call_key))){ - new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); - new_matched_key->frame = pinfo->fd->num; - new_matched_key->call_id = hdr->seqnum; - g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); - if(call_value->rep_frame==0){ - call_value->rep_frame=pinfo->fd->num; - } - } + if((call_value=g_hash_table_lookup(dcerpc_dg_calls, &call_key))){ + new_matched_key = se_alloc(sizeof (dcerpc_matched_key)); + new_matched_key->frame = pinfo->fd->num; + new_matched_key->call_id = hdr->seqnum; + g_hash_table_insert (dcerpc_matched, new_matched_key, call_value); + if(call_value->rep_frame==0){ + call_value->rep_frame=pinfo->fd->num; + } + } } matched_key.frame = pinfo->fd->num; @@ -4738,46 +4738,46 @@ dissect_dcerpc_dg_resp (tvbuff_t *tvb, int offset, packet_info *pinfo, di->call_data = value; if(value->req_frame!=0){ - nstime_t delta_ts; - pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_request_in, - tvb, 0, 0, value->req_frame); - PROTO_ITEM_SET_GENERATED(pi); - parent_pi = proto_tree_get_parent(dcerpc_tree); - if(parent_pi != NULL) { - proto_item_append_text(parent_pi, ", [Req: #%u]", value->req_frame); - } - nstime_delta(&delta_ts, &pinfo->fd->abs_ts, &value->req_time); - pi = proto_tree_add_time(dcerpc_tree, hf_dcerpc_time, tvb, offset, 0, &delta_ts); - PROTO_ITEM_SET_GENERATED(pi); + nstime_t delta_ts; + pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_request_in, + tvb, 0, 0, value->req_frame); + PROTO_ITEM_SET_GENERATED(pi); + parent_pi = proto_tree_get_parent(dcerpc_tree); + if(parent_pi != NULL) { + proto_item_append_text(parent_pi, ", [Req: #%u]", value->req_frame); + } + nstime_delta(&delta_ts, &pinfo->fd->abs_ts, &value->req_time); + pi = proto_tree_add_time(dcerpc_tree, hf_dcerpc_time, tvb, offset, 0, &delta_ts); + PROTO_ITEM_SET_GENERATED(pi); } else { - pi = proto_tree_add_text(dcerpc_tree, - tvb, 0, 0, "No request to this DCE/RPC call found"); - expert_add_info_format(pinfo, pi, PI_SEQUENCE, PI_NOTE, - "No request to this DCE/RPC call found"); + pi = proto_tree_add_text(dcerpc_tree, + tvb, 0, 0, "No request to this DCE/RPC call found"); + expert_add_info_format(pinfo, pi, PI_SEQUENCE, PI_NOTE, + "No request to this DCE/RPC call found"); } dissect_dcerpc_dg_stub (tvb, offset, pinfo, dcerpc_tree, tree, hdr, di); } static void dissect_dcerpc_dg_ping_ack (tvbuff_t *tvb, int offset, packet_info *pinfo, - proto_tree *dcerpc_tree, - e_dce_dg_common_hdr_t *hdr, conversation_t *conv) + proto_tree *dcerpc_tree, + e_dce_dg_common_hdr_t *hdr, conversation_t *conv) { proto_item *parent_pi; /* if(!(pinfo->fd->flags.visited)){*/ - dcerpc_call_value *call_value; - dcerpc_dg_call_key call_key; + dcerpc_call_value *call_value; + dcerpc_dg_call_key call_key; - call_key.conv=conv; - call_key.seqnum=hdr->seqnum; - call_key.act_id=hdr->act_id; + call_key.conv=conv; + call_key.seqnum=hdr->seqnum; + call_key.act_id=hdr->act_id; - if((call_value=g_hash_table_lookup(dcerpc_dg_calls, &call_key))){ + if((call_value=g_hash_table_lookup(dcerpc_dg_calls, &call_key))){ proto_item *pi; - nstime_t delta_ts; + nstime_t delta_ts; - pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_request_in, - tvb, 0, 0, call_value->req_frame); + pi = proto_tree_add_uint(dcerpc_tree, hf_dcerpc_request_in, + tvb, 0, 0, call_value->req_frame); PROTO_ITEM_SET_GENERATED(pi); parent_pi = proto_tree_get_parent(dcerpc_tree); if(parent_pi != NULL) { @@ -4787,8 +4787,8 @@ dissect_dcerpc_dg_ping_ack (tvbuff_t *tvb, int offset, packet_info *pinfo, if (check_col (pinfo->cinfo, COL_INFO)) col_append_fstr(pinfo->cinfo, COL_INFO, " [req: #%u]", call_value->req_frame); - nstime_delta(&delta_ts, &pinfo->fd->abs_ts, &call_value->req_time); - pi = proto_tree_add_time(dcerpc_tree, hf_dcerpc_time, tvb, offset, 0, &delta_ts); + nstime_delta(&delta_ts, &pinfo->fd->abs_ts, &call_value->req_time); + pi = proto_tree_add_time(dcerpc_tree, hf_dcerpc_time, tvb, offset, 0, &delta_ts); PROTO_ITEM_SET_GENERATED(pi); /* }*/ } @@ -4834,14 +4834,14 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /* flags1 has bit 1 and 8 as reserved so if any of them are set, it is probably not a DCE/RPC packet - */ + */ hdr.flags1 = tvb_get_guint8 (tvb, offset++); if(hdr.flags1&0x81) return FALSE; /* flags2 has all bits except bit 2 as reserved so if any of them are set it is probably not DCE/RPC. - */ + */ hdr.flags2 = tvb_get_guint8 (tvb, offset++); if(hdr.flags2&0xfd) return FALSE; @@ -4882,10 +4882,10 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) ti = proto_tree_add_item (tree, proto_dcerpc, tvb, 0, -1, FALSE); if (ti) { dcerpc_tree = proto_item_add_subtree(ti, ett_dcerpc); - proto_item_append_text(ti, " %s, Seq: %u, Serial: %u, Frag: %u, FragLen: %u", - val_to_str(hdr.ptype, pckt_vals, "Unknown (0x%02x)"), - hdr.seqnum, hdr.serial_hi*256+hdr.serial_lo, - hdr.frag_num, hdr.frag_len); + proto_item_append_text(ti, " %s, Seq: %u, Serial: %u, Frag: %u, FragLen: %u", + val_to_str(hdr.ptype, pckt_vals, "Unknown (0x%02x)"), + hdr.seqnum, hdr.serial_hi*256+hdr.serial_lo, + hdr.frag_num, hdr.frag_len); } } offset = 0; @@ -4911,13 +4911,13 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_boolean (dg_flags1_tree, hf_dcerpc_dg_flags1_last_frag, tvb, offset, 1, hdr.flags1); proto_tree_add_boolean (dg_flags1_tree, hf_dcerpc_dg_flags1_rsrvd_01, tvb, offset, 1, hdr.flags1); if(hdr.flags1) { - proto_item_append_text(tf, " %s%s%s%s%s%s", - (hdr.flags1 & PFCL1_BROADCAST) ? "\"Broadcast\" " : "", - (hdr.flags1 & PFCL1_IDEMPOTENT) ? "\"Idempotent\" " : "", - (hdr.flags1 & PFCL1_MAYBE) ? "\"Maybe\" " : "", - (hdr.flags1 & PFCL1_NOFACK) ? "\"No Fack\" " : "", - (hdr.flags1 & PFCL1_FRAG) ? "\"Fragment\" " : "", - (hdr.flags1 & PFCL1_LASTFRAG) ? "\"Last Fragment\" " : ""); + proto_item_append_text(tf, " %s%s%s%s%s%s", + (hdr.flags1 & PFCL1_BROADCAST) ? "\"Broadcast\" " : "", + (hdr.flags1 & PFCL1_IDEMPOTENT) ? "\"Idempotent\" " : "", + (hdr.flags1 & PFCL1_MAYBE) ? "\"Maybe\" " : "", + (hdr.flags1 & PFCL1_NOFACK) ? "\"No Fack\" " : "", + (hdr.flags1 & PFCL1_FRAG) ? "\"Fragment\" " : "", + (hdr.flags1 & PFCL1_LASTFRAG) ? "\"Last Fragment\" " : ""); } } } @@ -4936,8 +4936,8 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_boolean (dg_flags2_tree, hf_dcerpc_dg_flags2_cancel_pending, tvb, offset, 1, hdr.flags2); proto_tree_add_boolean (dg_flags2_tree, hf_dcerpc_dg_flags2_rsrvd_01, tvb, offset, 1, hdr.flags2); if(hdr.flags2) { - proto_item_append_text(tf, " %s", - (hdr.flags2 & PFCL2_CANCEL_PENDING) ? "\"Cancel Pending\" " : ""); + proto_item_append_text(tf, " %s", + (hdr.flags2 & PFCL2_CANCEL_PENDING) ? "\"Cancel Pending\" " : ""); } } } @@ -4950,10 +4950,10 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_uint(drep_tree, hf_dcerpc_drep_byteorder, tvb, offset, 1, hdr.drep[0] >> 4); proto_tree_add_uint(drep_tree, hf_dcerpc_drep_character, tvb, offset, 1, hdr.drep[0] & 0x0f); proto_tree_add_uint(drep_tree, hf_dcerpc_drep_fp, tvb, offset+1, 1, hdr.drep[1]); - proto_item_append_text(tf, " (Order: %s, Char: %s, Float: %s)", - val_to_str(hdr.drep[0] >> 4, drep_byteorder_vals, "Unknown"), - val_to_str(hdr.drep[0] & 0x0f, drep_character_vals, "Unknown"), - val_to_str(hdr.drep[1], drep_fp_vals, "Unknown")); + proto_item_append_text(tf, " (Order: %s, Char: %s, Float: %s)", + val_to_str(hdr.drep[0] >> 4, drep_byteorder_vals, "Unknown"), + val_to_str(hdr.drep[0] & 0x0f, drep_character_vals, "Unknown"), + val_to_str(hdr.drep[1], drep_fp_vals, "Unknown")); } } offset += sizeof (hdr.drep); @@ -4964,8 +4964,8 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (tree) { proto_tree_add_guid_format (dcerpc_tree, hf_dcerpc_obj_id, tvb, - offset, 16, (e_guid_t *) &hdr.obj_id, "Object UUID: %s", - guid_to_str((e_guid_t *) &hdr.obj_id)); + offset, 16, (e_guid_t *) &hdr.obj_id, "Object UUID: %s", + guid_to_str((e_guid_t *) &hdr.obj_id)); } offset += 16; @@ -4973,10 +4973,10 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) uuid_str = guid_to_str((e_guid_t*)&hdr.if_id); uuid_name = guids_get_uuid_name(&hdr.if_id); if(uuid_name) { - proto_tree_add_guid_format (dcerpc_tree, hf_dcerpc_dg_if_id, tvb, + proto_tree_add_guid_format (dcerpc_tree, hf_dcerpc_dg_if_id, tvb, offset, 16, (e_guid_t *) &hdr.if_id, "Interface: %s UUID: %s", uuid_name, uuid_str); } else { - proto_tree_add_guid_format (dcerpc_tree, hf_dcerpc_dg_if_id, tvb, + proto_tree_add_guid_format (dcerpc_tree, hf_dcerpc_dg_if_id, tvb, offset, 16, (e_guid_t *) &hdr.if_id, "Interface UUID: %s", uuid_str); } } @@ -4984,8 +4984,8 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (tree) { proto_tree_add_guid_format (dcerpc_tree, hf_dcerpc_dg_act_id, tvb, - offset, 16, (e_guid_t *) &hdr.act_id, "Activity: %s", - guid_to_str((e_guid_t *) &hdr.act_id)); + offset, 16, (e_guid_t *) &hdr.act_id, "Activity: %s", + guid_to_str((e_guid_t *) &hdr.act_id)); } offset += 16; @@ -5140,7 +5140,7 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) dissect_dcerpc_dg_resp (tvb, offset, pinfo, dcerpc_tree, tree, &hdr, conv); break; - /* these requests have no body */ + /* these requests have no body */ case PDU_ACK: case PDU_PING: dissect_dcerpc_dg_ping_ack (tvb, offset, pinfo, dcerpc_tree, &hdr, conv); @@ -5156,30 +5156,30 @@ dissect_dcerpc_dg (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) static void dcerpc_init_protocol (void) { - /* structures and data for BIND */ - if (dcerpc_binds){ - g_hash_table_destroy (dcerpc_binds); - dcerpc_binds=NULL; - } - if(!dcerpc_binds){ - dcerpc_binds = g_hash_table_new (dcerpc_bind_hash, dcerpc_bind_equal); - } + /* structures and data for BIND */ + if (dcerpc_binds){ + g_hash_table_destroy (dcerpc_binds); + dcerpc_binds=NULL; + } + if(!dcerpc_binds){ + dcerpc_binds = g_hash_table_new (dcerpc_bind_hash, dcerpc_bind_equal); + } - /* structures and data for CALL */ - if (dcerpc_cn_calls){ - g_hash_table_destroy (dcerpc_cn_calls); - } - dcerpc_cn_calls = g_hash_table_new (dcerpc_cn_call_hash, dcerpc_cn_call_equal); - if (dcerpc_dg_calls){ - g_hash_table_destroy (dcerpc_dg_calls); - } - dcerpc_dg_calls = g_hash_table_new (dcerpc_dg_call_hash, dcerpc_dg_call_equal); + /* structures and data for CALL */ + if (dcerpc_cn_calls){ + g_hash_table_destroy (dcerpc_cn_calls); + } + dcerpc_cn_calls = g_hash_table_new (dcerpc_cn_call_hash, dcerpc_cn_call_equal); + if (dcerpc_dg_calls){ + g_hash_table_destroy (dcerpc_dg_calls); + } + dcerpc_dg_calls = g_hash_table_new (dcerpc_dg_call_hash, dcerpc_dg_call_equal); - /* structure and data for MATCHED */ - if (dcerpc_matched){ - g_hash_table_destroy (dcerpc_matched); - } - dcerpc_matched = g_hash_table_new (dcerpc_matched_hash, dcerpc_matched_equal); + /* structure and data for MATCHED */ + if (dcerpc_matched){ + g_hash_table_destroy (dcerpc_matched); + } + dcerpc_matched = g_hash_table_new (dcerpc_matched_hash, dcerpc_matched_equal); /* call the registered hooks */ g_hook_list_invoke(&dcerpc_hooks_init_protos, FALSE /* not may_recurse */); @@ -5189,15 +5189,15 @@ void proto_register_dcerpc (void) { static hf_register_info hf[] = { - { &hf_dcerpc_request_in, - { "Request in frame", "dcerpc.request_in", FT_FRAMENUM, BASE_NONE, - NULL, 0, "This packet is a response to the packet with this number", HFILL }}, - { &hf_dcerpc_response_in, - { "Response in frame", "dcerpc.response_in", FT_FRAMENUM, BASE_NONE, - NULL, 0, "This packet will be responded in the packet with this number", HFILL }}, - { &hf_dcerpc_referent_id, - { "Referent ID", "dcerpc.referent_id", FT_UINT32, BASE_HEX, - NULL, 0, "Referent ID for this NDR encoded pointer", HFILL }}, + { &hf_dcerpc_request_in, + { "Request in frame", "dcerpc.request_in", FT_FRAMENUM, BASE_NONE, + NULL, 0, "This packet is a response to the packet with this number", HFILL }}, + { &hf_dcerpc_response_in, + { "Response in frame", "dcerpc.response_in", FT_FRAMENUM, BASE_NONE, + NULL, 0, "This packet will be responded in the packet with this number", HFILL }}, + { &hf_dcerpc_referent_id, + { "Referent ID", "dcerpc.referent_id", FT_UINT32, BASE_HEX, + NULL, 0, "Referent ID for this NDR encoded pointer", HFILL }}, { &hf_dcerpc_ver, { "Version", "dcerpc.ver", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_dcerpc_ver_minor, @@ -5417,55 +5417,55 @@ proto_register_dcerpc (void) { &hf_dcerpc_array_actual_count, { "Actual Count", "dcerpc.array.actual_count", FT_UINT32, BASE_DEC, NULL, 0x0, "Actual Count: Actual number of elements in the array", HFILL }}, - { &hf_dcerpc_array_buffer, - { "Buffer", "dcerpc.array.buffer", FT_BYTES, BASE_NONE, NULL, 0x0, "Buffer: Buffer containing elements of the array", HFILL }}, + { &hf_dcerpc_array_buffer, + { "Buffer", "dcerpc.array.buffer", FT_BYTES, BASE_NONE, NULL, 0x0, "Buffer: Buffer containing elements of the array", HFILL }}, { &hf_dcerpc_op, { "Operation", "dcerpc.op", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_dcerpc_fragments, - { "Reassembled DCE/RPC Fragments", "dcerpc.fragments", FT_NONE, BASE_NONE, - NULL, 0x0, "DCE/RPC Fragments", HFILL }}, + { &hf_dcerpc_fragments, + { "Reassembled DCE/RPC Fragments", "dcerpc.fragments", FT_NONE, BASE_NONE, + NULL, 0x0, "DCE/RPC Fragments", HFILL }}, - { &hf_dcerpc_fragment, - { "DCE/RPC Fragment", "dcerpc.fragment", FT_FRAMENUM, BASE_NONE, - NULL, 0x0, NULL, HFILL }}, + { &hf_dcerpc_fragment, + { "DCE/RPC Fragment", "dcerpc.fragment", FT_FRAMENUM, BASE_NONE, + NULL, 0x0, NULL, HFILL }}, - { &hf_dcerpc_fragment_overlap, - { "Fragment overlap", "dcerpc.fragment.overlap", FT_BOOLEAN, BASE_NONE, - NULL, 0x0, "Fragment overlaps with other fragments", HFILL }}, + { &hf_dcerpc_fragment_overlap, + { "Fragment overlap", "dcerpc.fragment.overlap", FT_BOOLEAN, BASE_NONE, + NULL, 0x0, "Fragment overlaps with other fragments", HFILL }}, - { &hf_dcerpc_fragment_overlap_conflict, - { "Conflicting data in fragment overlap", "dcerpc.fragment.overlap.conflict", FT_BOOLEAN, BASE_NONE, - NULL, 0x0, "Overlapping fragments contained conflicting data", HFILL }}, + { &hf_dcerpc_fragment_overlap_conflict, + { "Conflicting data in fragment overlap", "dcerpc.fragment.overlap.conflict", FT_BOOLEAN, BASE_NONE, + NULL, 0x0, "Overlapping fragments contained conflicting data", HFILL }}, - { &hf_dcerpc_fragment_multiple_tails, - { "Multiple tail fragments found", "dcerpc.fragment.multipletails", FT_BOOLEAN, BASE_NONE, - NULL, 0x0, "Several tails were found when defragmenting the packet", HFILL }}, + { &hf_dcerpc_fragment_multiple_tails, + { "Multiple tail fragments found", "dcerpc.fragment.multipletails", FT_BOOLEAN, BASE_NONE, + NULL, 0x0, "Several tails were found when defragmenting the packet", HFILL }}, - { &hf_dcerpc_fragment_too_long_fragment, - { "Fragment too long", "dcerpc.fragment.toolongfragment", FT_BOOLEAN, BASE_NONE, - NULL, 0x0, "Fragment contained data past end of packet", HFILL }}, + { &hf_dcerpc_fragment_too_long_fragment, + { "Fragment too long", "dcerpc.fragment.toolongfragment", FT_BOOLEAN, BASE_NONE, + NULL, 0x0, "Fragment contained data past end of packet", HFILL }}, - { &hf_dcerpc_fragment_error, - { "Defragmentation error", "dcerpc.fragment.error", FT_FRAMENUM, BASE_NONE, - NULL, 0x0, "Defragmentation error due to illegal fragments", HFILL }}, + { &hf_dcerpc_fragment_error, + { "Defragmentation error", "dcerpc.fragment.error", FT_FRAMENUM, BASE_NONE, + NULL, 0x0, "Defragmentation error due to illegal fragments", HFILL }}, - { &hf_dcerpc_time, - { "Time from request", "dcerpc.time", FT_RELATIVE_TIME, BASE_NONE, - NULL, 0, "Time between Request and Response for DCE-RPC calls", HFILL }}, + { &hf_dcerpc_time, + { "Time from request", "dcerpc.time", FT_RELATIVE_TIME, BASE_NONE, + NULL, 0, "Time between Request and Response for DCE-RPC calls", HFILL }}, - { &hf_dcerpc_reassembled_in, - { "Reassembled PDU in frame", "dcerpc.reassembled_in", FT_FRAMENUM, BASE_NONE, - NULL, 0x0, "The DCE/RPC PDU is completely reassembled in the packet with this number", HFILL }}, + { &hf_dcerpc_reassembled_in, + { "Reassembled PDU in frame", "dcerpc.reassembled_in", FT_FRAMENUM, BASE_NONE, + NULL, 0x0, "The DCE/RPC PDU is completely reassembled in the packet with this number", HFILL }}, - { &hf_dcerpc_reassembled_length, - { "Reassembled DCE/RPC length", "dcerpc.reassembled.length", FT_UINT32, BASE_DEC, - NULL, 0x0, "The total length of the reassembled payload", HFILL }}, + { &hf_dcerpc_reassembled_length, + { "Reassembled DCE/RPC length", "dcerpc.reassembled.length", FT_UINT32, BASE_DEC, + NULL, 0x0, "The total length of the reassembled payload", HFILL }}, - { &hf_dcerpc_unknown_if_id, - { "Unknown DCERPC interface id", "dcerpc.unknown_if_id", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }}, - }; + { &hf_dcerpc_unknown_if_id, + { "Unknown DCERPC interface id", "dcerpc.unknown_if_id", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + }; static gint *ett[] = { &ett_dcerpc, &ett_dcerpc_cn_flags, diff --git a/epan/dissectors/packet-gsm_a_bssmap.c b/epan/dissectors/packet-gsm_a_bssmap.c index f5dff1a18a..9c199dcced 100644 --- a/epan/dissectors/packet-gsm_a_bssmap.c +++ b/epan/dissectors/packet-gsm_a_bssmap.c @@ -6,13 +6,13 @@ * * Updated to 3GPP TS 48.008 version 8.4.0 Release 8 * Copyrigt 2008, Anders Broman > 5); + other_decode_bitfield_value(a_bigbuf, value, 0xffe0, 16); + proto_tree_add_text(tree, + tvb, curr_offset, 2, + "%s = PCM Multiplexer: %u", + a_bigbuf, + (value & 0xffe0) >> 5); - other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16); - proto_tree_add_text(tree, - tvb, curr_offset, 2, - "%s = Timeslot: %u", - a_bigbuf, - value & 0x001f); + other_decode_bitfield_value(a_bigbuf, value, 0x001f, 16); + proto_tree_add_text(tree, + tvb, curr_offset, 2, + "%s = Timeslot: %u", + a_bigbuf, + value & 0x001f); - curr_offset += 2; + curr_offset += 2; - if (add_string) - g_snprintf(add_string, string_len, " - (%u) (0x%04x)", value, value); + if (add_string) + g_snprintf(add_string, string_len, " - (%u) (0x%04x)", value, value); - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.3 Connection Release Requested + * 3.2.2.3 Connection Release Requested * No Data */ /* - * 3.2.2.4 Resource Available + * 3.2.2.4 Resource Available */ static guint16 be_res_avail(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint16 value; - int i; + guint32 curr_offset; + guint16 value; + int i; - curr_offset = offset; + curr_offset = offset; - for (i=0; i < 5; i++){ - value = tvb_get_ntohl(tvb, curr_offset); - proto_tree_add_text(tree, tvb, curr_offset, len, "Number of full rate channels available in band %u %u",i+1,value); - curr_offset+=2; - proto_tree_add_text(tree, tvb, curr_offset, len, "Number of half rate channels available in band %u %u",i+1, value); - curr_offset+=2; - } + for (i=0; i < 5; i++){ + value = tvb_get_ntohl(tvb, curr_offset); + proto_tree_add_text(tree, tvb, curr_offset, len, "Number of full rate channels available in band %u %u",i+1,value); + curr_offset+=2; + proto_tree_add_text(tree, tvb, curr_offset, len, "Number of half rate channels available in band %u %u",i+1, value); + curr_offset+=2; + } - return(len); + return(len); } /* * [2] 3.2.2.5 Cause @@ -729,184 +729,184 @@ be_res_avail(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gch static guint16 be_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) { - guint8 oct; - guint32 value; - guint32 curr_offset; - const gchar *str = NULL; + guint8 oct; + guint32 value; + guint32 curr_offset; + const gchar *str = NULL; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_bssmap_cause_extension, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_cause_extension, tvb, curr_offset, 1, FALSE); - if (oct & 0x80) - { - /* 2 octet cause */ + if (oct & 0x80) + { + /* 2 octet cause */ - if ((oct & 0x0f) == 0x00) - { - /* national cause */ - switch ((oct & 0x70) >> 4) - { - case 0: str = "Normal Event"; break; - case 1: str = "Normal Event"; break; - case 2: str = "Resource Unavailable"; break; - case 3: str = "Service or option not available"; break; - case 4: str = "Service or option not implemented"; break; - case 5: str = "Invalid message (e.g., parameter out of range)"; break; - case 6: str = "Protocol error"; break; - default: - str = "Interworking"; - break; - } + if ((oct & 0x0f) == 0x00) + { + /* national cause */ + switch ((oct & 0x70) >> 4) + { + case 0: str = "Normal Event"; break; + case 1: str = "Normal Event"; break; + case 2: str = "Resource Unavailable"; break; + case 3: str = "Service or option not available"; break; + case 4: str = "Service or option not implemented"; break; + case 5: str = "Invalid message (e.g., parameter out of range)"; break; + case 6: str = "Protocol error"; break; + default: + str = "Interworking"; + break; + } - other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Cause Class: %s", - a_bigbuf, - str); + other_decode_bitfield_value(a_bigbuf, oct, 0x70, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Cause Class: %s", + a_bigbuf, + str); - other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = National Cause", - a_bigbuf); + other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = National Cause", + a_bigbuf); - curr_offset++; + curr_offset++; - proto_tree_add_text(tree, tvb, curr_offset, 1, - "Cause Value"); + proto_tree_add_text(tree, tvb, curr_offset, 1, + "Cause Value"); - curr_offset++; + curr_offset++; - if (add_string) - g_snprintf(add_string, string_len, " - (National Cause)"); - } - else - { - value = tvb_get_guint8(tvb, curr_offset + 1); + if (add_string) + g_snprintf(add_string, string_len, " - (National Cause)"); + } + else + { + value = tvb_get_guint8(tvb, curr_offset + 1); - other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Cause (MSB): %u", - a_bigbuf, - ((oct & 0x7f) << 8) | value); + other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Cause (MSB): %u", + a_bigbuf, + ((oct & 0x7f) << 8) | value); - curr_offset++; + curr_offset++; - other_decode_bitfield_value(a_bigbuf, value, 0xff, 8); - proto_tree_add_text(tree, tvb, curr_offset, 1, - "%s = Cause (LSB)", - a_bigbuf); + other_decode_bitfield_value(a_bigbuf, value, 0xff, 8); + proto_tree_add_text(tree, tvb, curr_offset, 1, + "%s = Cause (LSB)", + a_bigbuf); - curr_offset++; - } - } - else - { - switch (oct) - { - case 0x00: str = "Radio interface message failure"; break; - case 0x01: str = "Radio interface failure"; break; - case 0x02: str = "Uplink quality"; break; - case 0x03: str = "Uplink strength"; break; - case 0x04: str = "Downlink quality"; break; - case 0x05: str = "Downlink strength"; break; - case 0x06: str = "Distance"; break; - case 0x07: str = "O and M intervention"; break; - case 0x08: str = "Response to MSC invocation"; break; - case 0x09: str = "Call control"; break; - case 0x0a: str = "Radio interface failure, reversion to old channel"; break; - case 0x0b: str = "Handover successful"; break; - case 0x0c: str = "Better Cell"; break; - case 0x0d: str = "Directed Retry"; break; - case 0x0e: str = "Joined group call channel"; break; - case 0x0f: str = "Traffic"; break; + curr_offset++; + } + } + else + { + switch (oct) + { + case 0x00: str = "Radio interface message failure"; break; + case 0x01: str = "Radio interface failure"; break; + case 0x02: str = "Uplink quality"; break; + case 0x03: str = "Uplink strength"; break; + case 0x04: str = "Downlink quality"; break; + case 0x05: str = "Downlink strength"; break; + case 0x06: str = "Distance"; break; + case 0x07: str = "O and M intervention"; break; + case 0x08: str = "Response to MSC invocation"; break; + case 0x09: str = "Call control"; break; + case 0x0a: str = "Radio interface failure, reversion to old channel"; break; + case 0x0b: str = "Handover successful"; break; + case 0x0c: str = "Better Cell"; break; + case 0x0d: str = "Directed Retry"; break; + case 0x0e: str = "Joined group call channel"; break; + case 0x0f: str = "Traffic"; break; - case 0x10: str = "Reduce load in serving cell"; break; - case 0x11: str = "Traffic load in target cell higher than in source cell"; break; - case 0x12: str = "Relocation triggered"; break; - case 0x14: str = "Requested option not authorised"; break; - case 0x15: str = "Alternative channel configuration requested "; break; - case 0x16: str = "Call Identifier already allocated"; break; - case 0x17: str = "INTERNAL HANDOVER ENQUIRY reject"; break; + case 0x10: str = "Reduce load in serving cell"; break; + case 0x11: str = "Traffic load in target cell higher than in source cell"; break; + case 0x12: str = "Relocation triggered"; break; + case 0x14: str = "Requested option not authorised"; break; + case 0x15: str = "Alternative channel configuration requested "; break; + case 0x16: str = "Call Identifier already allocated"; break; + case 0x17: str = "INTERNAL HANDOVER ENQUIRY reject"; break; - case 0x20: str = "Equipment failure"; break; - case 0x21: str = "No radio resource available"; break; - case 0x22: str = "Requested terrestrial resource unavailable"; break; - case 0x23: str = "CCCH overload"; break; - case 0x24: str = "Processor overload"; break; - case 0x25: str = "BSS not equipped"; break; - case 0x26: str = "MS not equipped"; break; - case 0x27: str = "Invalid cell"; break; - case 0x28: str = "Traffic Load"; break; - case 0x29: str = "Preemption"; break; - case 0x2a: str = "DTM Handover - SGSN Failure"; break; - case 0x2b: str = "DTM Handover - PS Allocation failure"; break; + case 0x20: str = "Equipment failure"; break; + case 0x21: str = "No radio resource available"; break; + case 0x22: str = "Requested terrestrial resource unavailable"; break; + case 0x23: str = "CCCH overload"; break; + case 0x24: str = "Processor overload"; break; + case 0x25: str = "BSS not equipped"; break; + case 0x26: str = "MS not equipped"; break; + case 0x27: str = "Invalid cell"; break; + case 0x28: str = "Traffic Load"; break; + case 0x29: str = "Preemption"; break; + case 0x2a: str = "DTM Handover - SGSN Failure"; break; + case 0x2b: str = "DTM Handover - PS Allocation failure"; break; - case 0x30: str = "Requested transcoding/rate adaption unavailable"; break; - case 0x31: str = "Circuit pool mismatch"; break; - case 0x32: str = "Switch circuit pool"; break; - case 0x33: str = "Requested speech version unavailable"; break; - case 0x34: str = "LSA not allowed"; break; + case 0x30: str = "Requested transcoding/rate adaption unavailable"; break; + case 0x31: str = "Circuit pool mismatch"; break; + case 0x32: str = "Switch circuit pool"; break; + case 0x33: str = "Requested speech version unavailable"; break; + case 0x34: str = "LSA not allowed"; break; - case 0x40: str = "Ciphering algorithm not supported"; break; - case 0x41: str = "GERAN Iu-mode failure"; break; - case 0x42: str = "Incoming Relocation Not Supported Due To PUESBINE Feature"; break; - case 0x43: str = "Access Restricted Due to Shared Networks"; break; + case 0x40: str = "Ciphering algorithm not supported"; break; + case 0x41: str = "GERAN Iu-mode failure"; break; + case 0x42: str = "Incoming Relocation Not Supported Due To PUESBINE Feature"; break; + case 0x43: str = "Access Restricted Due to Shared Networks"; break; - case 0x50: str = "Terrestrial circuit already allocated"; break; - case 0x51: str = "Invalid message contents"; break; - case 0x52: str = "Information element or field missing"; break; - case 0x53: str = "Incorrect value"; break; - case 0x54: str = "Unknown Message type"; break; - case 0x55: str = "Unknown Information Element"; break; - case 0x56: str = "DTM Handover - Invalid PS Indication"; break; + case 0x50: str = "Terrestrial circuit already allocated"; break; + case 0x51: str = "Invalid message contents"; break; + case 0x52: str = "Information element or field missing"; break; + case 0x53: str = "Incorrect value"; break; + case 0x54: str = "Unknown Message type"; break; + case 0x55: str = "Unknown Information Element"; break; + case 0x56: str = "DTM Handover - Invalid PS Indication"; break; - case 0x60: str = "Protocol Error between BSS and MSC"; break; - case 0x61: str = "VGCS/VBS call non existent"; break; - case 0x62: str = "DTM Handover - Timer Expiry"; break; + case 0x60: str = "Protocol Error between BSS and MSC"; break; + case 0x61: str = "VGCS/VBS call non existent"; break; + case 0x62: str = "DTM Handover - Timer Expiry"; break; - default: - if (oct <= 0x17) { str = "Reserved for international use"; } - else if ((oct >= 0x18) && (oct <= 0x1f)) { str = "Reserved for national use"; } - else if ((oct >= 0x2c) && (oct <= 0x2f)) { str = "Reserved for national use"; } - else if ((oct >= 0x35) && (oct <= 0x3f)) { str = "Reserved for international use"; } - else if ((oct >= 0x44) && (oct <= 0x47)) { str = "Reserved for international use"; } - else if ((oct >= 0x48) && (oct <= 0x4f)) { str = "Reserved for national use"; } - else if ((oct >= 0x58) && (oct <= 0x5f)) { str = "Reserved for national use"; } - else if ((oct >= 0x63) && (oct <= 0x67)) { str = "Reserved for international use"; } - else if ((oct >= 0x68) && (oct <= 0x6f)) { str = "Reserved for national use"; } - else if ((oct >= 0x70) && (oct <= 0x77)) { str = "Reserved for international use"; } - else if ((oct >= 0x78) && (oct <= 0x7f)) { str = "Reserved for national use"; } - break; - } + default: + if (oct <= 0x17) { str = "Reserved for international use"; } + else if ((oct >= 0x18) && (oct <= 0x1f)) { str = "Reserved for national use"; } + else if ((oct >= 0x2c) && (oct <= 0x2f)) { str = "Reserved for national use"; } + else if ((oct >= 0x35) && (oct <= 0x3f)) { str = "Reserved for international use"; } + else if ((oct >= 0x44) && (oct <= 0x47)) { str = "Reserved for international use"; } + else if ((oct >= 0x48) && (oct <= 0x4f)) { str = "Reserved for national use"; } + else if ((oct >= 0x58) && (oct <= 0x5f)) { str = "Reserved for national use"; } + else if ((oct >= 0x63) && (oct <= 0x67)) { str = "Reserved for international use"; } + else if ((oct >= 0x68) && (oct <= 0x6f)) { str = "Reserved for national use"; } + else if ((oct >= 0x70) && (oct <= 0x77)) { str = "Reserved for international use"; } + else if ((oct >= 0x78) && (oct <= 0x7f)) { str = "Reserved for national use"; } + break; + } - other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); - proto_tree_add_uint_format(tree, hf_gsm_a_bssmap_cause, - tvb, curr_offset, 1, oct & 0x7f, - "%s = Cause: (%u) %s", - a_bigbuf, - oct & 0x7f, - str); + other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); + proto_tree_add_uint_format(tree, hf_gsm_a_bssmap_cause, + tvb, curr_offset, 1, oct & 0x7f, + "%s = Cause: (%u) %s", + a_bigbuf, + oct & 0x7f, + str); - curr_offset++; + curr_offset++; - if (add_string) - g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str); - } + if (add_string) + g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str); + } - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.6 IMSI + * 3.2.2.6 IMSI * IMSI coded as the value part of the Mobile Identity IE defined in 3GPP TS 24.008 (NOTE 1) - * NOTE 1: The Type of identity field in the Mobile Identity IE shall be ignored by the receiver. + * NOTE 1: The Type of identity field in the Mobile Identity IE shall be ignored by the receiver. * Dissected in packet-gsm_a_common.c (de_mid) */ @@ -916,25 +916,25 @@ be_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_ static guint16 be_tmsi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) { - guint32 curr_offset; - guint32 value; + guint32 curr_offset; + guint32 value; - curr_offset = offset; + curr_offset = offset; - value = tvb_get_ntohl(tvb, curr_offset); + value = tvb_get_ntohl(tvb, curr_offset); - proto_tree_add_uint(tree, hf_gsm_a_tmsi, - tvb, curr_offset, 4, - value); + proto_tree_add_uint(tree, hf_gsm_a_tmsi, + tvb, curr_offset, 4, + value); - if (add_string) - g_snprintf(add_string, string_len, " - (0x%04x)", value); + if (add_string) + g_snprintf(add_string, string_len, " - (0x%04x)", value); - curr_offset += 4; + curr_offset += 4; - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -943,16 +943,16 @@ be_tmsi(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_s static guint16 be_num_ms(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_gsm_a_bssmap_num_ms, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_item(tree, hf_gsm_a_bssmap_num_ms, tvb, curr_offset, 1, FALSE); + curr_offset++; - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* * [2] 3.2.2.9 Layer 3 Header Information @@ -961,44 +961,44 @@ be_num_ms(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar static guint16 be_l3_header_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint32 curr_offset; + guint8 oct; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_L3_protocol_discriminator, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = TI flag: %s", - a_bigbuf, - ((oct & 0x08) ? "allocated by receiver" : "allocated by sender")); + other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = TI flag: %s", + a_bigbuf, + ((oct & 0x08) ? "allocated by receiver" : "allocated by sender")); - other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = TIO: %u", - a_bigbuf, - oct & 0x07); + other_decode_bitfield_value(a_bigbuf, oct, 0x07, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = TIO: %u", + a_bigbuf, + oct & 0x07); - curr_offset++; + curr_offset++; - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -1007,54 +1007,54 @@ be_l3_header_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gc static guint16 be_enc_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint8 mask; - guint8 alg_id; - guint32 curr_offset; + guint8 oct; + guint8 mask; + guint8 alg_id; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - mask = 0x80; - alg_id = 7; + mask = 0x80; + alg_id = 7; - do - { - other_decode_bitfield_value(a_bigbuf, oct, mask, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = GSM A5/%u: %spermitted", - a_bigbuf, - alg_id, - (mask & oct) ? "" : "not "); + do + { + other_decode_bitfield_value(a_bigbuf, oct, mask, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = GSM A5/%u: %spermitted", + a_bigbuf, + alg_id, + (mask & oct) ? "" : "not "); - mask >>= 1; - alg_id--; - } - while (mask != 0x01); + mask >>= 1; + alg_id--; + } + while (mask != 0x01); - other_decode_bitfield_value(a_bigbuf, oct, mask, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = No encryption: %spermitted", - a_bigbuf, - (mask & oct) ? "" : "not "); + other_decode_bitfield_value(a_bigbuf, oct, mask, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = No encryption: %spermitted", + a_bigbuf, + (mask & oct) ? "" : "not "); - curr_offset++; + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Key: %s", - tvb_bytes_to_str(tvb, curr_offset, len-(curr_offset-offset) )); + proto_tree_add_text(tree, + tvb, curr_offset, len - (curr_offset - offset), + "Key: %s", + tvb_bytes_to_str(tvb, curr_offset, len-(curr_offset-offset) )); - curr_offset += len - (curr_offset - offset); + curr_offset += len - (curr_offset - offset); - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -1063,391 +1063,391 @@ be_enc_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *a guint16 be_chan_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) { - guint8 oct; - guint8 sdi; - guint8 num_chan; - guint32 curr_offset; - const gchar *str; + guint8 oct; + guint8 sdi; + guint8 num_chan; + guint32 curr_offset; + const gchar *str; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - sdi = oct & 0x0f; - switch (sdi) - { - case 1: str = "Speech"; break; - case 2: str = "Data"; break; - case 3: str = "Signalling"; break; - case 4: str = "Speech + CTM Text Telephony"; break; - default: - str = "Reserved"; - break; - } + sdi = oct & 0x0f; + switch (sdi) + { + case 1: str = "Speech"; break; + case 2: str = "Data"; break; + case 3: str = "Signalling"; break; + case 4: str = "Speech + CTM Text Telephony"; break; + default: + str = "Reserved"; + break; + } - other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Speech/Data Indicator: %s", - a_bigbuf, - str); + other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Speech/Data Indicator: %s", + a_bigbuf, + str); - if (add_string) - g_snprintf(add_string, string_len, " - (%s)", str); + if (add_string) + g_snprintf(add_string, string_len, " - (%s)", str); - curr_offset++; + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - if ((sdi == 0x01)||(sdi == 0x04)) - { - /* speech */ + if ((sdi == 0x01)||(sdi == 0x04)) + { + /* speech */ - switch (oct) - { - case 0x08: str = "Full rate TCH channel Bm. Prefer full rate TCH"; break; - case 0x09: str = "Half rate TCH channel Lm. Prefer half rate TCH"; break; - case 0x0a: str = "Full or Half rate channel, Full rate preferred changes allowed after first allocation"; break; - case 0x0b: str = "Full or Half rate channel, Half rate preferred changes allowed after first allocation"; break; - case 0x1a: str = "Full or Half rate channel, Full rate preferred changes between full and half rate not allowed after first allocation"; break; - case 0x1b: str = "Full or Half rate channel, Half rate preferred changes between full and half rate not allowed after first allocation"; break; - case 0x0f: str = "Full or Half rate channel, changes allowed after first allocation"; break; - case 0x1f: str = "Full or Half rate channel, changes between full and half rate not allowed after first allocation"; break; - default: - str = "Reserved"; - break; - } + switch (oct) + { + case 0x08: str = "Full rate TCH channel Bm. Prefer full rate TCH"; break; + case 0x09: str = "Half rate TCH channel Lm. Prefer half rate TCH"; break; + case 0x0a: str = "Full or Half rate channel, Full rate preferred changes allowed after first allocation"; break; + case 0x0b: str = "Full or Half rate channel, Half rate preferred changes allowed after first allocation"; break; + case 0x1a: str = "Full or Half rate channel, Full rate preferred changes between full and half rate not allowed after first allocation"; break; + case 0x1b: str = "Full or Half rate channel, Half rate preferred changes between full and half rate not allowed after first allocation"; break; + case 0x0f: str = "Full or Half rate channel, changes allowed after first allocation"; break; + case 0x1f: str = "Full or Half rate channel, changes between full and half rate not allowed after first allocation"; break; + default: + str = "Reserved"; + break; + } - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Channel Rate and Type: %s", - str); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Channel Rate and Type: %s", + str); - curr_offset++; + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - do - { - oct = tvb_get_guint8(tvb, curr_offset); + do + { + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_bssmap_chan_type_extension, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_chan_type_extension, tvb, curr_offset, 1, FALSE); - switch (oct & 0x7f) - { - case 0x01: str = "GSM speech full rate version 1"; break; - case 0x11: str = "GSM speech full rate version 2"; break; - case 0x21: str = "GSM speech full rate version 3 (FR AMR)"; break; - case 0x31: str = "GSM speech full rate version 4 (OFR AMR-WB)"; break; - case 0x32: str = "GSM speech full rate version 5 (FR AMR-WB)"; break; + switch (oct & 0x7f) + { + case 0x01: str = "GSM speech full rate version 1"; break; + case 0x11: str = "GSM speech full rate version 2"; break; + case 0x21: str = "GSM speech full rate version 3 (FR AMR)"; break; + case 0x31: str = "GSM speech full rate version 4 (OFR AMR-WB)"; break; + case 0x32: str = "GSM speech full rate version 5 (FR AMR-WB)"; break; - case 0x05: str = "GSM speech half rate version 1"; break; - case 0x15: str = "GSM speech half rate version 2"; break; - case 0x25: str = "GSM speech half rate version 3 (HR AMR)"; break; - case 0x36: str = "GSM speech half rate version 4 (OHR AMR-WB)"; break; - case 0x35: str = "GSM speech half rate version 6 (OHR AMR)"; break; + case 0x05: str = "GSM speech half rate version 1"; break; + case 0x15: str = "GSM speech half rate version 2"; break; + case 0x25: str = "GSM speech half rate version 3 (HR AMR)"; break; + case 0x36: str = "GSM speech half rate version 4 (OHR AMR-WB)"; break; + case 0x35: str = "GSM speech half rate version 6 (OHR AMR)"; break; - default: - str = "Reserved"; - break; - } + default: + str = "Reserved"; + break; + } - other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Speech version identifier: %s", - a_bigbuf, - str); + other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Speech version identifier: %s", + a_bigbuf, + str); - curr_offset++; - } - while ((len - (curr_offset - offset)) > 0); - } - else if (sdi == 0x02) - { - /* data */ + curr_offset++; + } + while ((len - (curr_offset - offset)) > 0); + } + else if (sdi == 0x02) + { + /* data */ - num_chan = 0; + num_chan = 0; - switch (oct) - { - case 0x00: str = "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break; - case 0x01: str = "SDCCH "; break; - case 0x02: str = "SDCCH or Full rate TCH channel Bm"; break; - case 0x03: str = "Half rate TCH channel Lm"; break; - case 0x08: str = "Full rate TCH channel Bm"; break; - case 0x09: str = "Half rate TCH channel Lm"; break; - case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break; - case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break; - case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break; - case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break; - default: - if ((oct >= 0x20) && (oct <= 0x27)) - { - str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the the number of TCHs and if applicable the used radio interface rate per channel allowed after first channel allocation as a result of the request"; - num_chan = (oct - 0x20) + 1; - } - else if ((oct >= 0x30) && (oct <= 0x37)) - { - str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the number of TCHs or the used radio interface rate per channel not allowed after first channel allocation as a result of the request"; - num_chan = (oct - 0x30) + 1; - } - else - { - str = "Reserved"; - } - break; - } + switch (oct) + { + case 0x00: str = "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break; + case 0x01: str = "SDCCH "; break; + case 0x02: str = "SDCCH or Full rate TCH channel Bm"; break; + case 0x03: str = "Half rate TCH channel Lm"; break; + case 0x08: str = "Full rate TCH channel Bm"; break; + case 0x09: str = "Half rate TCH channel Lm"; break; + case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break; + case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break; + case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break; + case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break; + default: + if ((oct >= 0x20) && (oct <= 0x27)) + { + str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the the number of TCHs and if applicable the used radio interface rate per channel allowed after first channel allocation as a result of the request"; + num_chan = (oct - 0x20) + 1; + } + else if ((oct >= 0x30) && (oct <= 0x37)) + { + str = "Full rate TCH channels in a multislot configuration, changes by the BSS of the number of TCHs or the used radio interface rate per channel not allowed after first channel allocation as a result of the request"; + num_chan = (oct - 0x30) + 1; + } + else + { + str = "Reserved"; + } + break; + } - if (num_chan > 0) - { - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Channel Rate and Type: Max channels %u, %s", - num_chan, - str); - } - else - { - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Channel Rate and Type: %s", - str); - } + if (num_chan > 0) + { + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Channel Rate and Type: Max channels %u, %s", + num_chan, + str); + } + else + { + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Channel Rate and Type: %s", + str); + } - curr_offset++; + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_bssmap_chan_type_extension, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_chan_type_extension, tvb, curr_offset, 1, FALSE); - other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = %sTransparent service", - a_bigbuf, - (oct & 0x40) ? "Non-" : ""); + other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = %sTransparent service", + a_bigbuf, + (oct & 0x40) ? "Non-" : ""); - if (num_chan == 0) - { - if (oct & 0x40) - { - /* non-transparent */ + if (num_chan == 0) + { + if (oct & 0x40) + { + /* non-transparent */ - switch (oct & 0x3f) - { - case 0x00: str = "12 kbit/s if the channel is a full rate TCH, or 6 kbit/s if the channel is a half rate TCH"; break; - case 0x18: str = "14.5 kbit/s"; break; - case 0x10: str = "12 kbits/s"; break; - case 0x11: str = "6 kbits/s"; break; - case 0x31: str = "29 kbit/s"; break; - case 0x34: str = "43,5 kbit/s"; break; - default: - str = "Reserved"; - break; - } - } - else - { - switch (oct & 0x3f) - { - case 0x18: str = "14.4 kbit/s"; break; - case 0x10: str = "9.6kbit/s"; break; - case 0x11: str = "4.8kbit/s"; break; - case 0x12: str = "2.4kbit/s"; break; - case 0x13: str = "1.2Kbit/s"; break; - case 0x14: str = "600 bit/s"; break; - case 0x15: str = "1200/75 bit/s (1200 network-to-MS / 75 MS-to-network)"; break; - case 0x39: str = "28,8 kbit/s"; break; - case 0x3a: str = "32,0 kbit/s"; break; - default: - str = "Reserved"; - break; - } - } - } - else - { - if (oct & 0x40) - { - /* non-transparent */ + switch (oct & 0x3f) + { + case 0x00: str = "12 kbit/s if the channel is a full rate TCH, or 6 kbit/s if the channel is a half rate TCH"; break; + case 0x18: str = "14.5 kbit/s"; break; + case 0x10: str = "12 kbits/s"; break; + case 0x11: str = "6 kbits/s"; break; + case 0x31: str = "29 kbit/s"; break; + case 0x34: str = "43,5 kbit/s"; break; + default: + str = "Reserved"; + break; + } + } + else + { + switch (oct & 0x3f) + { + case 0x18: str = "14.4 kbit/s"; break; + case 0x10: str = "9.6kbit/s"; break; + case 0x11: str = "4.8kbit/s"; break; + case 0x12: str = "2.4kbit/s"; break; + case 0x13: str = "1.2Kbit/s"; break; + case 0x14: str = "600 bit/s"; break; + case 0x15: str = "1200/75 bit/s (1200 network-to-MS / 75 MS-to-network)"; break; + case 0x39: str = "28,8 kbit/s"; break; + case 0x3a: str = "32,0 kbit/s"; break; + default: + str = "Reserved"; + break; + } + } + } + else + { + if (oct & 0x40) + { + /* non-transparent */ - switch (oct & 0x3f) - { - case 0x16: str = "58 kbit/s (4x14.5 kbit/s)"; break; - case 0x14: str = "48.0 / 43.5 kbit/s (4x12 kbit/s or 3x14.5 kbit/s)"; break; - case 0x13: str = "36.0 / 29.0 kbit/s (3x12 kbit/s or 2x14.5 kbit/s)"; break; - case 0x12: str = "24.0 / 24.0 (4x6 kbit/s or 2x12 kbit/s)"; break; - case 0x11: str = "18.0 / 14.5 kbit/s (3x6 kbit/s or 1x14.5 kbit/s)"; break; - case 0x10: str = "12.0 / 12.0 kbit/s (2x6 kbit/s or 1x12 kbit/s)"; break; - default: - str = "Reserved"; - break; - } - } - else - { - switch (oct & 0x3f) - { - case 0x1f: str = "64 kbit/s, bit transparent"; break; - case 0x1e: str = "56 kbit/s, bit transparent"; break; - case 0x1d: str = "56 kbit/s"; break; - case 0x1c: str = "48 kbit/s"; break; - case 0x1b: str = "38.4 kbit/s"; break; - case 0x1a: str = "28.8 kbit/s"; break; - case 0x19: str = "19.2 kbit/s"; break; - case 0x18: str = "14.4 kbit/s"; break; - case 0x10: str = "9.6 kbit/s"; break; - default: - str = "Reserved"; - break; - } - } - } + switch (oct & 0x3f) + { + case 0x16: str = "58 kbit/s (4x14.5 kbit/s)"; break; + case 0x14: str = "48.0 / 43.5 kbit/s (4x12 kbit/s or 3x14.5 kbit/s)"; break; + case 0x13: str = "36.0 / 29.0 kbit/s (3x12 kbit/s or 2x14.5 kbit/s)"; break; + case 0x12: str = "24.0 / 24.0 (4x6 kbit/s or 2x12 kbit/s)"; break; + case 0x11: str = "18.0 / 14.5 kbit/s (3x6 kbit/s or 1x14.5 kbit/s)"; break; + case 0x10: str = "12.0 / 12.0 kbit/s (2x6 kbit/s or 1x12 kbit/s)"; break; + default: + str = "Reserved"; + break; + } + } + else + { + switch (oct & 0x3f) + { + case 0x1f: str = "64 kbit/s, bit transparent"; break; + case 0x1e: str = "56 kbit/s, bit transparent"; break; + case 0x1d: str = "56 kbit/s"; break; + case 0x1c: str = "48 kbit/s"; break; + case 0x1b: str = "38.4 kbit/s"; break; + case 0x1a: str = "28.8 kbit/s"; break; + case 0x19: str = "19.2 kbit/s"; break; + case 0x18: str = "14.4 kbit/s"; break; + case 0x10: str = "9.6 kbit/s"; break; + default: + str = "Reserved"; + break; + } + } + } - other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Rate: %s", - a_bigbuf, - str); + other_decode_bitfield_value(a_bigbuf, oct, 0x3f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Rate: %s", + a_bigbuf, + str); - curr_offset++; + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_bssmap_chan_type_extension, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_chan_type_extension, tvb, curr_offset, 1, FALSE); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+1, 3, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+1, 3, FALSE); - if (num_chan == 0) - { - other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = 14.5 kbit/s (TCH/F14.4) %sallowed", - a_bigbuf, - (oct & 0x08) ? "" : "not "); + if (num_chan == 0) + { + other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = 14.5 kbit/s (TCH/F14.4) %sallowed", + a_bigbuf, + (oct & 0x08) ? "" : "not "); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+6, 1, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+6, 1, FALSE); - other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = 12.0 kbit/s (TCH F/9.6) %sallowed", - a_bigbuf, - (oct & 0x02) ? "" : "not "); + other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = 12.0 kbit/s (TCH F/9.6) %sallowed", + a_bigbuf, + (oct & 0x02) ? "" : "not "); - other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = 6.0 kbit/s (TCH F/4.8) %sallowed", - a_bigbuf, - (oct & 0x01) ? "" : "not "); - } - else - { - other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = 14.5/14.4 kbit/s (TCH/F14.4) %sallowed", - a_bigbuf, - (oct & 0x08) ? "" : "not "); + other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = 6.0 kbit/s (TCH F/4.8) %sallowed", + a_bigbuf, + (oct & 0x01) ? "" : "not "); + } + else + { + other_decode_bitfield_value(a_bigbuf, oct, 0x08, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = 14.5/14.4 kbit/s (TCH/F14.4) %sallowed", + a_bigbuf, + (oct & 0x08) ? "" : "not "); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+6, 1, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+6, 1, FALSE); - other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = 12.0/9.6 kbit/s (TCH F/9.6) %sallowed", - a_bigbuf, - (oct & 0x02) ? "" : "not "); + other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = 12.0/9.6 kbit/s (TCH F/9.6) %sallowed", + a_bigbuf, + (oct & 0x02) ? "" : "not "); - other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = 6.0/4.8 kbit/s (TCH F/4.8) %sallowed", - a_bigbuf, - (oct & 0x01) ? "" : "not "); - } + other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = 6.0/4.8 kbit/s (TCH F/4.8) %sallowed", + a_bigbuf, + (oct & 0x01) ? "" : "not "); + } - curr_offset++; - } - else if (sdi == 0x03) - { - /* signalling */ + curr_offset++; + } + else if (sdi == 0x03) + { + /* signalling */ - switch (oct) - { - case 0x00: str = "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break; - case 0x01: str = "SDCCH"; break; - case 0x02: str = "SDCCH or Full rate TCH channel Bm"; break; - case 0x03: str = "SDCCH or Half rate TCH channel Lm"; break; - case 0x08: str = "Full rate TCH channel Bm"; break; - case 0x09: str = "Half rate TCH channel Lm"; break; - case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break; - case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break; - case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break; - case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break; - default: - str = "Reserved"; - break; - } + switch (oct) + { + case 0x00: str = "SDCCH or Full rate TCH channel Bm or Half rate TCH channel Lm"; break; + case 0x01: str = "SDCCH"; break; + case 0x02: str = "SDCCH or Full rate TCH channel Bm"; break; + case 0x03: str = "SDCCH or Half rate TCH channel Lm"; break; + case 0x08: str = "Full rate TCH channel Bm"; break; + case 0x09: str = "Half rate TCH channel Lm"; break; + case 0x0a: str = "Full or Half rate TCH channel, Full rate preferred, changes allowed also after first channel allocation as a result of the request"; break; + case 0x0b: str = "Full or Half rate TCH channel, Half rate preferred, changes allowed also after first channel allocation as a result of the request"; break; + case 0x1a: str = "Full or Half rate TCH channel, Full rate preferred, changes not allowed after first channel allocation as a result of the request"; break; + case 0x1b: str = "Full or Half rate TCH channel. Half rate preferred, changes not allowed after first channel allocation as a result of the request"; break; + default: + str = "Reserved"; + break; + } - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Channel Rate and Type: %s", - str); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Channel Rate and Type: %s", + str); - curr_offset++; + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Spare"); + proto_tree_add_text(tree, + tvb, curr_offset, len - (curr_offset - offset), + "Spare"); - curr_offset += len - (curr_offset - offset); - } - else - { - /* unknown format */ + curr_offset += len - (curr_offset - offset); + } + else + { + /* unknown format */ - proto_tree_add_text(tree, - tvb, curr_offset, len - (curr_offset - offset), - "Unknown format"); + proto_tree_add_text(tree, + tvb, curr_offset, len - (curr_offset - offset), + "Unknown format"); - curr_offset += len - (curr_offset - offset); - } + curr_offset += len - (curr_offset - offset); + } - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.12 Periodicity + * 3.2.2.12 Periodicity */ static guint16 be_periodicity(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; - proto_tree_add_item(tree, hf_gsm_a_bssmap_periodicity, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset = offset; + proto_tree_add_item(tree, hf_gsm_a_bssmap_periodicity, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.13 Extended Resource Indicator + * 3.2.2.13 Extended Resource Indicator */ static const true_false_string bssmap_tarr_vals = { "The total number of accessible channels is requested", @@ -1456,87 +1456,87 @@ static const true_false_string bssmap_tarr_vals = { static guint16 be_ext_res_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 6, FALSE); - /* the Subsequent Mode field */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_sm, tvb, curr_offset, 1, FALSE); - /* Total Accessible Resource Requested field */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_tarr, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 6, FALSE); + /* the Subsequent Mode field */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_sm, tvb, curr_offset, 1, FALSE); + /* Total Accessible Resource Requested field */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_tarr, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.14 Total Resource Accessible + * 3.2.2.14 Total Resource Accessible */ static guint16 be_tot_res_acc(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Total number of accessible full rate channels */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_tot_no_of_fullr_ch, tvb, curr_offset, 2, FALSE); - curr_offset+=2; - /* Total number of accessible half rate channels */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_tot_no_of_hr_ch, tvb, curr_offset, 2, FALSE); - curr_offset+=2; + /* Total number of accessible full rate channels */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_tot_no_of_fullr_ch, tvb, curr_offset, 2, FALSE); + curr_offset+=2; + /* Total number of accessible half rate channels */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_tot_no_of_hr_ch, tvb, curr_offset, 2, FALSE); + curr_offset+=2; - return(len); + return(len); } /* - * 3.2.2.15 LSA Identifier + * 3.2.2.15 LSA Identifier * The octets 3-5 are coded as specified in 3GPP TS 23.003, 'Identification of Localised Service Area'. Bit 8 of octet 3 is the MSB. */ static guint16 be_lsa_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* TS 23.003: - * The LSA ID consists of 24 bits, numbered from 0 to 23, with bit 0 being the LSB. - * Bit 0 indicates whether the LSA is a PLMN significant number or a universal LSA. - * If the bit is set to 0 the LSA is a PLMN significant number; if it is set to - * 1 it is a universal LSA. - */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_id, tvb, curr_offset, 3, FALSE); - curr_offset+=3; + /* TS 23.003: + * The LSA ID consists of 24 bits, numbered from 0 to 23, with bit 0 being the LSB. + * Bit 0 indicates whether the LSA is a PLMN significant number or a universal LSA. + * If the bit is set to 0 the LSA is a PLMN significant number; if it is set to + * 1 it is a universal LSA. + */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_id, tvb, curr_offset, 3, FALSE); + curr_offset+=3; - return(len); + return(len); } /* - * 3.2.2.16 LSA Identifier List + * 3.2.2.16 LSA Identifier List */ static guint16 be_lsa_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_ep, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_ep, tvb, curr_offset, 1, FALSE); + curr_offset++; - /* LSA identification 1 - n */ + /* LSA identification 1 - n */ - while (curr_offset-offset < len){ - proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_id, tvb, curr_offset, 3, FALSE); - curr_offset+=3; - } + while (curr_offset-offset < len){ + proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_id, tvb, curr_offset, 3, FALSE); + curr_offset+=3; + } - return(len); + return(len); } /* * [2] 3.2.2.17 Cell Identifier @@ -1545,150 +1545,150 @@ be_lsa_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, g guint16 be_cell_id_aux(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len, guint8 disc) { - guint32 value; - guint32 curr_offset; + guint32 value; + guint32 curr_offset; - if (add_string) - add_string[0] = '\0'; - curr_offset = offset; + if (add_string) + add_string[0] = '\0'; + curr_offset = offset; - switch (disc) - { - case 0x00: - /* FALLTHRU */ + switch (disc) + { + case 0x00: + /* FALLTHRU */ - case 0x04: - /* FALLTHRU */ + case 0x04: + /* FALLTHRU */ - case 0x08: /* For intersystem handover from GSM to UMTS or cdma2000: */ - /* FALLTHRU */ - case 0xb: - /* Serving Area Identity, SAI, is used to identify the Serving Area of UE - * within UTRAN or cdma2000. - * Coding of Cell Identification for Cell identification discriminator = 1011 - * The coding of SAI is defined in 3GPP TS 25.413, without the protocol extension - * container. - * TS 25.413: - * SAI ::= SEQUENCE { - * pLMNidentity PLMNidentity, - * lAC LAC, - * sAC SAC, - * iE-Extensions ProtocolExtensionContainer { {SAI-ExtIEs} } OPTIONAL - * } - */ - /* FALLTHRU */ - case 0x0c: /* For identification of a UTRAN cell for cell load information: */ - if (disc != 0x0b) - curr_offset = dissect_e212_mcc_mnc(tvb, g_pinfo, tree, curr_offset, TRUE); - else - curr_offset = dissect_e212_mcc_mnc(tvb, g_pinfo, tree, curr_offset, FALSE); - /* FALLTHRU */ + case 0x08: /* For intersystem handover from GSM to UMTS or cdma2000: */ + /* FALLTHRU */ + case 0xb: + /* Serving Area Identity, SAI, is used to identify the Serving Area of UE + * within UTRAN or cdma2000. + * Coding of Cell Identification for Cell identification discriminator = 1011 + * The coding of SAI is defined in 3GPP TS 25.413, without the protocol extension + * container. + * TS 25.413: + * SAI ::= SEQUENCE { + * pLMNidentity PLMNidentity, + * lAC LAC, + * sAC SAC, + * iE-Extensions ProtocolExtensionContainer { {SAI-ExtIEs} } OPTIONAL + * } + */ + /* FALLTHRU */ + case 0x0c: /* For identification of a UTRAN cell for cell load information: */ + if (disc != 0x0b) + curr_offset = dissect_e212_mcc_mnc(tvb, g_pinfo, tree, curr_offset, TRUE); + else + curr_offset = dissect_e212_mcc_mnc(tvb, g_pinfo, tree, curr_offset, FALSE); + /* FALLTHRU */ - case 0x01: - case 0x05: - case 0x0a: /*For intersystem handover from GSM to UMTS or cdma2000: */ - /* LAC */ - value = tvb_get_ntohs(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_bssmap_cell_lac, tvb, curr_offset, 2, FALSE); - curr_offset += 2; + case 0x01: + case 0x05: + case 0x0a: /*For intersystem handover from GSM to UMTS or cdma2000: */ + /* LAC */ + value = tvb_get_ntohs(tvb, curr_offset); + proto_tree_add_item(tree, hf_gsm_a_bssmap_cell_lac, tvb, curr_offset, 2, FALSE); + curr_offset += 2; - if (add_string) - g_snprintf(add_string, string_len, " - LAC (0x%04x)", value); - /* FALLTHRU */ - if (disc == 0x0b){ - /* If SAI, SAC follows */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_sac, tvb, curr_offset, 2, FALSE); - curr_offset += 2; - break; - } + if (add_string) + g_snprintf(add_string, string_len, " - LAC (0x%04x)", value); + /* FALLTHRU */ + if (disc == 0x0b){ + /* If SAI, SAC follows */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_sac, tvb, curr_offset, 2, FALSE); + curr_offset += 2; + break; + } - case 0x09: /* For intersystem handover from GSM to UMTS or cdma2000: */ + case 0x09: /* For intersystem handover from GSM to UMTS or cdma2000: */ - if ((disc == 0x08) ||(disc == 0x09) || (disc == 0x0a)|| (disc == 0x0c)){ - /* RNC-ID - * The octets 9-10 are coded as the RNC-ID (0..4095) or the - * Extended RNC-ID (4096..65535) specified in 3GPP TS 25.413 [31]: - * XXX is this a PER encoded number? - */ - value = tvb_get_ntohs(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_bssmap_be_rnc_id, tvb, curr_offset, 2, FALSE); - curr_offset += 2; + if ((disc == 0x08) ||(disc == 0x09) || (disc == 0x0a)|| (disc == 0x0c)){ + /* RNC-ID + * The octets 9-10 are coded as the RNC-ID (0..4095) or the + * Extended RNC-ID (4096..65535) specified in 3GPP TS 25.413 [31]: + * XXX is this a PER encoded number? + */ + value = tvb_get_ntohs(tvb, curr_offset); + proto_tree_add_item(tree, hf_gsm_a_bssmap_be_rnc_id, tvb, curr_offset, 2, FALSE); + curr_offset += 2; - if (add_string) - { - if (add_string[0] == '\0') - { - g_snprintf(add_string, string_len, " - RNC-ID (%u)", value); - } - else - { - g_snprintf(add_string, string_len, "%s/RNC-ID (%u)", add_string, value); - } - } - break; - } + if (add_string) + { + if (add_string[0] == '\0') + { + g_snprintf(add_string, string_len, " - RNC-ID (%u)", value); + } + else + { + g_snprintf(add_string, string_len, "%s/RNC-ID (%u)", add_string, value); + } + } + break; + } - if ((disc == 0x04) || (disc == 0x05) || (disc == 0x08)) break; + if ((disc == 0x04) || (disc == 0x05) || (disc == 0x08)) break; - /* FALLTHRU */ + /* FALLTHRU */ - case 0x02: - /* CI */ + case 0x02: + /* CI */ - value = tvb_get_ntohs(tvb, curr_offset); - proto_tree_add_uint(tree, hf_gsm_a_bssmap_cell_ci, tvb, - curr_offset, 2, value); + value = tvb_get_ntohs(tvb, curr_offset); + proto_tree_add_uint(tree, hf_gsm_a_bssmap_cell_ci, tvb, + curr_offset, 2, value); - curr_offset += 2; + curr_offset += 2; - if (add_string) - { - if (add_string[0] == '\0') - { - g_snprintf(add_string, string_len, " - CI (%u)", value); - } - else - { - g_snprintf(add_string, string_len, "%s/CI (%u)", add_string, value); - } - } - break; - default: - proto_tree_add_text(tree, tvb, curr_offset, len, - "Cell ID - Unknown format"); + if (add_string) + { + if (add_string[0] == '\0') + { + g_snprintf(add_string, string_len, " - CI (%u)", value); + } + else + { + g_snprintf(add_string, string_len, "%s/CI (%u)", add_string, value); + } + } + break; + default: + proto_tree_add_text(tree, tvb, curr_offset, len, + "Cell ID - Unknown format"); - curr_offset += (len); - break; - } + curr_offset += (len); + break; + } - return(curr_offset - offset); + return(curr_offset - offset); } static guint16 be_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { - guint8 oct; - guint8 disc; - guint32 curr_offset; + guint8 oct; + guint8 disc; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_be_cell_id_disc, tvb, curr_offset, 1, FALSE); - disc = oct&0x0f; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_be_cell_id_disc, tvb, curr_offset, 1, FALSE); + disc = oct&0x0f; cell_discriminator = disc; /* may be required later */ - curr_offset++; + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - curr_offset += - be_cell_id_aux(tvb, tree, curr_offset, len - (curr_offset - offset), add_string, string_len, disc); + curr_offset += + be_cell_id_aux(tvb, tree, curr_offset, len - (curr_offset - offset), add_string, string_len, disc); - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -1697,99 +1697,99 @@ be_cell_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar static guint16 be_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { - guint8 oct; - guint32 curr_offset; - const gchar *str; + guint8 oct; + guint32 curr_offset; + const gchar *str; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE); - other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Preemption Capability Indicator (PCI): this allocation request %s preempt an existing connection", - a_bigbuf, - (oct & 0x40) ? "may" : "shall not"); + other_decode_bitfield_value(a_bigbuf, oct, 0x40, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Preemption Capability Indicator (PCI): this allocation request %s preempt an existing connection", + a_bigbuf, + (oct & 0x40) ? "may" : "shall not"); - switch ((oct & 0x3c) >> 2) - { - case 0x00: str = "Spare"; break; - case 0x0f: str = "priority not used"; break; - default: - str = "1 is highest"; - break; - } + switch ((oct & 0x3c) >> 2) + { + case 0x00: str = "Spare"; break; + case 0x0f: str = "priority not used"; break; + default: + str = "1 is highest"; + break; + } - other_decode_bitfield_value(a_bigbuf, oct, 0x3c, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Priority Level: (%u) %s", - a_bigbuf, - (oct & 0x3c) >> 2, - str); + other_decode_bitfield_value(a_bigbuf, oct, 0x3c, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Priority Level: (%u) %s", + a_bigbuf, + (oct & 0x3c) >> 2, + str); - if (add_string) - g_snprintf(add_string, string_len, " - (%u)", (oct & 0x3c) >> 2); + if (add_string) + g_snprintf(add_string, string_len, " - (%u)", (oct & 0x3c) >> 2); - other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Queuing Allowed Indicator (QA): queuing %sallowed", - a_bigbuf, - (oct & 0x02) ? "" : "not "); + other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Queuing Allowed Indicator (QA): queuing %sallowed", + a_bigbuf, + (oct & 0x02) ? "" : "not "); - other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Preemption Vulnerability Indicator (PVI): this connection %s be preempted by another allocation request", - a_bigbuf, - (oct & 0x01) ? "might" : "shall not"); + other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Preemption Vulnerability Indicator (PVI): this connection %s be preempted by another allocation request", + a_bigbuf, + (oct & 0x01) ? "might" : "shall not"); - curr_offset++; + curr_offset++; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.19 Classmark Information Type 2 - * The classmark octets 3, 4 and 5 are coded in the same way as the - * equivalent octets in the Mobile station classmark 2 element of + * 3.2.2.19 Classmark Information Type 2 + * The classmark octets 3, 4 and 5 are coded in the same way as the + * equivalent octets in the Mobile station classmark 2 element of * 3GPP TS 24.008 * dissected in packet-gsm_a_common.c */ /* - * 3.2.2.20 Classmark Information Type 3 - * The classmark octets 3 to 34 are coded in the same way as the - * equivalent octets in the Mobile station classmark 3 element of + * 3.2.2.20 Classmark Information Type 3 + * The classmark octets 3 to 34 are coded in the same way as the + * equivalent octets in the Mobile station classmark 3 element of * 3GPP TS 24.008. * dissected in packet-gsm_a_common.c */ /* - * 3.2.2.21 Interference Band To Be Used + * 3.2.2.21 Interference Band To Be Used */ static guint16 be_int_band(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.22 RR Cause + * 3.2.2.22 RR Cause * Octet 2 is coded as the equivalent field from 3GPP TS 24.008 * Dissected in packet-gsm_a_rr.c */ /* - * 3.2.2.23 LSA Information + * 3.2.2.23 LSA Information */ static const true_false_string bssmap_lsa_only_value = { @@ -1800,29 +1800,29 @@ static const true_false_string bssmap_lsa_only_value = { static guint16 be_lsa_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_only, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_only, tvb, curr_offset, 1, FALSE); + curr_offset++; - while (curr_offset-offset < len){ - /* LSA identification and attributes */ - /* 8 7 6 5 4 3 2 1 - * spare act pref priority - */ - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 2, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_act, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_pref, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_inf_prio, tvb, curr_offset, 1, FALSE); - curr_offset++; - proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_id, tvb, curr_offset, 3, FALSE); - curr_offset+=3; - } + while (curr_offset-offset < len){ + /* LSA identification and attributes */ + /* 8 7 6 5 4 3 2 1 + * spare act pref priority + */ + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 2, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_act, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_pref, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_inf_prio, tvb, curr_offset, 1, FALSE); + curr_offset++; + proto_tree_add_item(tree, hf_gsm_a_bssmap_lsa_id, tvb, curr_offset, 3, FALSE); + curr_offset+=3; + } - return(len); + return(len); } /* * [2] 3.2.2.24 Layer 3 Information @@ -1830,27 +1830,27 @@ be_lsa_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha static guint16 be_l3_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - tvbuff_t *l3_tvb; + guint32 curr_offset; + tvbuff_t *l3_tvb; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, - "Layer 3 Information value"); + proto_tree_add_text(tree, tvb, curr_offset, len, + "Layer 3 Information value"); - /* - * dissect the embedded DTAP message - */ - l3_tvb = tvb_new_subset(tvb, curr_offset, len, len); + /* + * dissect the embedded DTAP message + */ + l3_tvb = tvb_new_subset(tvb, curr_offset, len, len); - /* This information element carries a radio interface message. - In the case of an Intersystem handover to UMTS, - this information element contains a HANDOVER TO UTRAN COMMAND message - as defined in 3GPP TS 25.331. - In the case of an Inter BSC handover, - it contains an RR HANDOVER COMMAND message as defined in 3GPP TS 44.018. - In the case of an Intersystem handover to cdma2000, - this information element contains the HANDOVER TO CDMA2000 COMMAND message, + /* This information element carries a radio interface message. + In the case of an Intersystem handover to UMTS, + this information element contains a HANDOVER TO UTRAN COMMAND message + as defined in 3GPP TS 25.331. + In the case of an Inter BSC handover, + it contains an RR HANDOVER COMMAND message as defined in 3GPP TS 44.018. + In the case of an Intersystem handover to cdma2000, + this information element contains the HANDOVER TO CDMA2000 COMMAND message, as defined in 3GPP TS 44.018. */ /* note that we can't (from this PDU alone) determine whether a handover is to UMTS or cdma2000 @@ -1864,13 +1864,13 @@ be_l3_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad dissect_rrc_HandoverToUTRANCommand_PDU(l3_tvb, g_pinfo, g_tree); } - curr_offset += len; + curr_offset += len; - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); cell_discriminator = 0x0f; - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -1879,30 +1879,30 @@ be_l3_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *ad static guint16 be_dlci(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint32 curr_offset; - proto_item *item = NULL; - proto_tree *subtree = NULL; + guint8 oct; + guint32 curr_offset; + proto_item *item = NULL; + proto_tree *subtree = NULL; - curr_offset = offset; + curr_offset = offset; - item = - proto_tree_add_text(tree, tvb, curr_offset, 1, - "Data Link Connection Identifier"); + item = + proto_tree_add_text(tree, tvb, curr_offset, 1, + "Data Link Connection Identifier"); - subtree = proto_item_add_subtree(item, ett_dlci); + subtree = proto_item_add_subtree(item, ett_dlci); - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_uint(subtree, hf_gsm_a_bssmap_dlci_cc, tvb, curr_offset, 1, oct); - proto_tree_add_uint(subtree, hf_gsm_a_bssmap_dlci_spare, tvb, curr_offset, 1, oct); - proto_tree_add_uint(subtree, hf_gsm_a_bssmap_dlci_sapi, tvb, curr_offset, 1, oct); + proto_tree_add_uint(subtree, hf_gsm_a_bssmap_dlci_cc, tvb, curr_offset, 1, oct); + proto_tree_add_uint(subtree, hf_gsm_a_bssmap_dlci_spare, tvb, curr_offset, 1, oct); + proto_tree_add_uint(subtree, hf_gsm_a_bssmap_dlci_sapi, tvb, curr_offset, 1, oct); - curr_offset++; + curr_offset++; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -1911,26 +1911,26 @@ be_dlci(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *a static guint16 be_down_dtx_flag(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint oct; - guint32 curr_offset; + guint oct; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE); - other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = BSS is %s to activate DTX in the downlink direction", - a_bigbuf, - (oct & 0x01) ? "forbidden" : "allowed"); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE); + other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = BSS is %s to activate DTX in the downlink direction", + a_bigbuf, + (oct & 0x01) ? "forbidden" : "allowed"); - curr_offset++; + curr_offset++; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -1939,214 +1939,214 @@ be_down_dtx_flag(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, guint16 be_cell_id_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) { - guint8 oct; - guint16 consumed; - guint8 disc; - guint8 num_cells; - guint32 curr_offset; - proto_item *item = NULL; - proto_tree *subtree = NULL; + guint8 oct; + guint16 consumed; + guint8 disc; + guint8 num_cells; + guint32 curr_offset; + proto_item *item = NULL; + proto_tree *subtree = NULL; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - disc = oct & 0x0f; - proto_tree_add_item(tree, hf_gsm_a_bssmap_be_cell_id_disc, tvb, curr_offset, 1, FALSE); - curr_offset++; + disc = oct & 0x0f; + proto_tree_add_item(tree, hf_gsm_a_bssmap_be_cell_id_disc, tvb, curr_offset, 1, FALSE); + curr_offset++; - NO_MORE_DATA_CHECK(len); + NO_MORE_DATA_CHECK(len); - num_cells = 0; - do - { - item = - proto_tree_add_text(tree, - tvb, curr_offset, -1, - "Cell %u", - num_cells + 1); + num_cells = 0; + do + { + item = + proto_tree_add_text(tree, + tvb, curr_offset, -1, + "Cell %u", + num_cells + 1); - subtree = proto_item_add_subtree(item, ett_cell_list); + subtree = proto_item_add_subtree(item, ett_cell_list); - if (add_string) - add_string[0] = '\0'; + if (add_string) + add_string[0] = '\0'; - consumed = - be_cell_id_aux(tvb, subtree, curr_offset, len - (curr_offset - offset), add_string, string_len, disc); + consumed = + be_cell_id_aux(tvb, subtree, curr_offset, len - (curr_offset - offset), add_string, string_len, disc); - if (add_string && add_string[0] != '\0') - { - proto_item_append_text(item, "%s", add_string ? add_string : ""); - } + if (add_string && add_string[0] != '\0') + { + proto_item_append_text(item, "%s", add_string ? add_string : ""); + } - proto_item_set_len(item, consumed); + proto_item_set_len(item, consumed); - curr_offset += consumed; + curr_offset += consumed; - num_cells++; - } - while ((len - (curr_offset - offset)) > 0 && consumed > 0); + num_cells++; + } + while ((len - (curr_offset - offset)) > 0 && consumed > 0); - if (add_string) { - g_snprintf(add_string, string_len, " - %u cell%s", - num_cells, plurality(num_cells, "", "s")); - } + if (add_string) { + g_snprintf(add_string, string_len, " - %u cell%s", + num_cells, plurality(num_cells, "", "s")); + } - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.27a Cell Identifier List Segment + * 3.2.2.27a Cell Identifier List Segment */ static const value_string gsm_a_bssap_cell_id_list_seg_cell_id_disc_vals[] = { - { 0x0, "The whole Cell Global Identification, CGI, is used to identify the cells"}, - { 0x1, "Location Area Code, LAC, and Cell Identify, CI, is used to identify the cells within a given MCC and MNC"}, - { 0x2, "Cell Identity, CI, is used to identify the cells within a given MCC and MNC and LAC"}, - { 0x3, "No cell is associated with the transaction"}, - { 0x4, "Location Area Identification, LAI, is used to identify all cells within a Location Area"}, - { 0x5, "Location Area Code, LAC, is used to identify all cells within a location area"}, - { 0x6, "All cells on the BSS are identified"}, - { 0x7, "MCC and MNC, is used to identify all cells within the given MCC and MNC"}, - { 0, NULL } + { 0x0, "The whole Cell Global Identification, CGI, is used to identify the cells"}, + { 0x1, "Location Area Code, LAC, and Cell Identify, CI, is used to identify the cells within a given MCC and MNC"}, + { 0x2, "Cell Identity, CI, is used to identify the cells within a given MCC and MNC and LAC"}, + { 0x3, "No cell is associated with the transaction"}, + { 0x4, "Location Area Identification, LAI, is used to identify all cells within a Location Area"}, + { 0x5, "Location Area Code, LAC, is used to identify all cells within a location area"}, + { 0x6, "All cells on the BSS are identified"}, + { 0x7, "MCC and MNC, is used to identify all cells within the given MCC and MNC"}, + { 0, NULL } }; static guint16 be_cell_id_list_seg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Sequence Length */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_seq_len, tvb, curr_offset, 1, FALSE); - /* Sequence Number */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_seq_no, tvb, curr_offset, 1, FALSE); - curr_offset++; + /* Sequence Length */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_seq_len, tvb, curr_offset, 1, FALSE); + /* Sequence Number */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_seq_no, tvb, curr_offset, 1, FALSE); + curr_offset++; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - /* Cell identification discriminator */ - proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); - curr_offset++; - proto_tree_add_text(tree, tvb, curr_offset, len-2, "Not decoded yet"); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + /* Cell identification discriminator */ + proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); + curr_offset++; + proto_tree_add_text(tree, tvb, curr_offset, len-2, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.27b Cell Identifier List Segment for established cells + * 3.2.2.27b Cell Identifier List Segment for established cells */ static guint16 be_cell_id_lst_seg_f_est_cells(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - /* Cell identification discriminator */ - proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + /* Cell identification discriminator */ + proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); + curr_offset++; - proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.27c Cell Identifier List Segment for cells to be established + * 3.2.2.27c Cell Identifier List Segment for cells to be established */ static guint16 be_cell_id_lst_seg_f_cell_tb_est(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - /* Cell identification discriminator */ - proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + /* Cell identification discriminator */ + proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); + curr_offset++; - proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.27d (void) + * 3.2.2.27d (void) */ /* - * 3.2.2.27e Cell Identifier List Segment for released cells - no user present + * 3.2.2.27e Cell Identifier List Segment for released cells - no user present */ -static guint16 +static guint16 be_cell_id_lst_seg_f_rel_cell(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - /* Cell identification discriminator */ - proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + /* Cell identification discriminator */ + proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); + curr_offset++; - proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.27f Cell Identifier List Segment for not established cells - no establishment possible + * 3.2.2.27f Cell Identifier List Segment for not established cells - no establishment possible */ static guint16 be_cell_id_lst_seg_f_not_est_cell(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - /* Cell identification discriminator */ - proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + /* Cell identification discriminator */ + proto_tree_add_item(tree, hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, tvb, curr_offset, 1, FALSE); + curr_offset++; - proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len-1, "Not decoded yet"); - return(len); + return(len); } /* * 3.2.2.28 Response Request * No data */ /* - * 3.2.2.29 Resource Indication Method + * 3.2.2.29 Resource Indication Method */ static const value_string gsm_a_bssap_resource_indication_vals[] = { - { 0x0, "Spontaneous resource information expected"}, - { 0x1, "One single resource information expected"}, - { 0x2, "Periodic resource information expected"}, - { 0x3, "No cell is associated with the transaction"}, - { 0x4, "No resource information expected"}, - { 0, NULL } + { 0x0, "Spontaneous resource information expected"}, + { 0x1, "One single resource information expected"}, + { 0x2, "Periodic resource information expected"}, + { 0x3, "No cell is associated with the transaction"}, + { 0x4, "No resource information expected"}, + { 0, NULL } }; static guint16 be_res_ind_method(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssap_res_ind_method, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssap_res_ind_method, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(len); + return(len); } /* @@ -2160,14 +2160,14 @@ be_res_ind_method(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_ static guint16 be_cic_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* * 3.2.2.32 Diagnostics @@ -2175,97 +2175,97 @@ be_cic_list(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha static guint16 be_diag(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* * [2] 3.2.2.33 Chosen Channel */ static const value_string gsm_a_bssmap_ch_mode_vals[] = { - { 0, "no channel mode indication" }, - { 9, "speech (full rate or half rate)" }, - { 14, "data, 14.5 kbit/s radio interface rate" }, - { 11, "data, 12.0 kbit/s radio interface rate" }, - { 12, "data, 6.0 kbit/s radio interface rate" }, - { 13, "data, 3.6 kbit/s radio interface rate" }, - { 8, "signalling only" }, - { 1, "data, 29.0 kbit/s radio interface rate" }, - { 2, "data, 32.0 kbit/s radio interface rate" }, - { 3, "data, 43.5 kbit/s radio interface rate" }, - { 4, "data, 43.5 kbit/s downlink and 14.5 kbit/s uplink" }, - { 5, "data, 29.0 kbit/s downlink and 14.5 kbit/s uplink" }, - { 6, "data, 43.5 kbit/s downlink and 29.0 kbit/s uplink" }, - { 7, "data, 14.5 kbit/s downlink and 43.5 kbit/s uplink" }, - { 10, "data, 14.5 kbit/s downlink and 29.0 kbit/s uplink" }, - { 15, "data, 29.0 kbit/s downlink and 43.5 kbit/s uplink" }, - { 0, NULL }, + { 0, "no channel mode indication" }, + { 9, "speech (full rate or half rate)" }, + { 14, "data, 14.5 kbit/s radio interface rate" }, + { 11, "data, 12.0 kbit/s radio interface rate" }, + { 12, "data, 6.0 kbit/s radio interface rate" }, + { 13, "data, 3.6 kbit/s radio interface rate" }, + { 8, "signalling only" }, + { 1, "data, 29.0 kbit/s radio interface rate" }, + { 2, "data, 32.0 kbit/s radio interface rate" }, + { 3, "data, 43.5 kbit/s radio interface rate" }, + { 4, "data, 43.5 kbit/s downlink and 14.5 kbit/s uplink" }, + { 5, "data, 29.0 kbit/s downlink and 14.5 kbit/s uplink" }, + { 6, "data, 43.5 kbit/s downlink and 29.0 kbit/s uplink" }, + { 7, "data, 14.5 kbit/s downlink and 43.5 kbit/s uplink" }, + { 10, "data, 14.5 kbit/s downlink and 29.0 kbit/s uplink" }, + { 15, "data, 29.0 kbit/s downlink and 43.5 kbit/s uplink" }, + { 0, NULL }, }; static const value_string gsm_a_bssmap_channel_vals[] = { - { 0, "None(Current Channel Type 1 - Reserved)" }, - { 1, "SDCCH" }, - { 2, "Reserved" }, - { 3, "Reserved" }, - { 5, "Reserved" }, - { 6, "Reserved" }, - { 7, "Reserved" }, - { 8, "1 Full rate TCH" }, - { 9, "1 Half rate TCH" }, - { 10, "2 Full Rate TCHs" }, - { 11, "3 Full Rate TCHs" }, - { 12, "4 Full Rate TCHs" }, - { 13, "5 Full Rate TCHs" }, - { 14, "6 Full Rate TCHs" }, - { 15, "7 Full Rate TCHs" }, - { 4, "8 Full Rate TCHs" }, - { 0, NULL }, + { 0, "None(Current Channel Type 1 - Reserved)" }, + { 1, "SDCCH" }, + { 2, "Reserved" }, + { 3, "Reserved" }, + { 5, "Reserved" }, + { 6, "Reserved" }, + { 7, "Reserved" }, + { 8, "1 Full rate TCH" }, + { 9, "1 Half rate TCH" }, + { 10, "2 Full Rate TCHs" }, + { 11, "3 Full Rate TCHs" }, + { 12, "4 Full Rate TCHs" }, + { 13, "5 Full Rate TCHs" }, + { 14, "6 Full Rate TCHs" }, + { 15, "7 Full Rate TCHs" }, + { 4, "8 Full Rate TCHs" }, + { 0, NULL }, }; static const value_string gsm_a_bssmap_trace_bss_record_type_vals[] = { - { 0, "Basic" }, - { 1, "Handover" }, - { 2, "Radio" }, - { 3, "No BSS Trace" }, - { 0, NULL }, + { 0, "Basic" }, + { 1, "Handover" }, + { 2, "Radio" }, + { 3, "No BSS Trace" }, + { 0, NULL }, }; static const value_string gsm_a_bssmap_trace_msc_record_type_vals[] = { - { 0, "Basic" }, - { 1, "Detailed (optional)" }, - { 2, "Spare" }, - { 3, "No MSC Trace" }, - { 0, NULL }, + { 0, "Basic" }, + { 1, "Detailed (optional)" }, + { 2, "Spare" }, + { 3, "No MSC Trace" }, + { 0, NULL }, }; static const value_string gsm_a_bssmap_trace_invoking_event_vals[] = { - { 0, "MOC, MTC, SMS MO, SMS MT, PDS MO, PDS MT, SS, Location Updates, IMSI attach, IMSI detach" }, - { 1, "MOC, MTC, SMS_MO, SMS_MT, PDS MO, PDS MT, SS only" }, - { 2, "Location updates, IMSI attach IMSI detach only" }, - { 3, "Operator definable" }, - { 0, NULL }, + { 0, "MOC, MTC, SMS MO, SMS MT, PDS MO, PDS MT, SS, Location Updates, IMSI attach, IMSI detach" }, + { 1, "MOC, MTC, SMS_MO, SMS_MT, PDS MO, PDS MT, SS only" }, + { 2, "Location updates, IMSI attach IMSI detach only" }, + { 3, "Operator definable" }, + { 0, NULL }, }; static guint16 be_chosen_chan(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint32 curr_offset; + guint8 oct; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - /* Channel mode */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_ch_mode, tvb, curr_offset, 1, FALSE); + /* Channel mode */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_ch_mode, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_channel, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_channel, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset++; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -2274,27 +2274,27 @@ be_chosen_chan(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, g static guint16 be_ciph_resp_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint32 curr_offset; + guint8 oct; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 7, FALSE); - other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = IMEISV must %sbe included by the mobile station", - a_bigbuf, - (oct & 0x01) ? "" : "not "); + other_decode_bitfield_value(a_bigbuf, oct, 0x01, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = IMEISV must %sbe included by the mobile station", + a_bigbuf, + (oct & 0x01) ? "" : "not "); - curr_offset++; + curr_offset++; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } @@ -2304,25 +2304,25 @@ be_ciph_resp_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_ static guint16 be_l3_msg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - tvbuff_t *l3_tvb; + guint32 curr_offset; + tvbuff_t *l3_tvb; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, - "Layer 3 Message Contents"); + proto_tree_add_text(tree, tvb, curr_offset, len, + "Layer 3 Message Contents"); - /* - * dissect the embedded DTAP message - */ - l3_tvb = tvb_new_subset(tvb, curr_offset, len, len); + /* + * dissect the embedded DTAP message + */ + l3_tvb = tvb_new_subset(tvb, curr_offset, len, len); - /* Octet j (j = 3, 4, ..., n) is the unchanged octet j of a radio interface layer 3 message - * as defined in 3GPP TS 24.008, n is equal to the length of that radio interface layer 3 message. */ - call_dissector(dtap_handle, l3_tvb, g_pinfo, g_tree); - curr_offset += len; + /* Octet j (j = 3, 4, ..., n) is the unchanged octet j of a radio interface layer 3 message + * as defined in 3GPP TS 24.008, n is equal to the length of that radio interface layer 3 message. */ + call_dissector(dtap_handle, l3_tvb, g_pinfo, g_tree); + curr_offset += len; - return(len); + return(len); } /* @@ -2331,16 +2331,16 @@ be_l3_msg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add static guint16 be_cha_needed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* no length check possible */ - proto_tree_add_bits_item(tree, hf_gsm_a_rr_chnl_needed_ch1, tvb, (curr_offset<<3)+6, 2, FALSE); + /* no length check possible */ + proto_tree_add_bits_item(tree, hf_gsm_a_rr_chnl_needed_ch1, tvb, (curr_offset<<3)+6, 2, FALSE); - curr_offset++; + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* * 3.2.2.37 Trace Type @@ -2349,11 +2349,11 @@ be_cha_needed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc static guint16 be_trace_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; gint bit_offset; bit_offset = (offset<<3); - curr_offset = offset; + curr_offset = offset; proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_trace_priority_indication, tvb, bit_offset, 1, FALSE); bit_offset ++; @@ -2367,9 +2367,9 @@ be_trace_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc bit_offset += 2; curr_offset++; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -2378,57 +2378,57 @@ be_trace_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc static guint16 be_trace_trigger_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_trigger_id, tvb, curr_offset, len, FALSE); - curr_offset += len; + proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_trigger_id, tvb, curr_offset, len, FALSE); + curr_offset += len; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* 3.2.2.39 Trace Reference */ static guint16 be_trace_reference(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_reference, tvb, curr_offset, 2, FALSE); - curr_offset +=2; + proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_reference, tvb, curr_offset, 2, FALSE); + curr_offset +=2; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* 3.2.2.40 TransactionID */ static guint16 be_trace_transaction_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - if (len == 1) + if (len == 1) { proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_reference, tvb, curr_offset, 1, FALSE); curr_offset ++; } - else + else { proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_reference, tvb, curr_offset, 2, FALSE); curr_offset +=2; } - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* * 3.2.2.41 Mobile Identity (IMSI, IMEISV or IMEI as coded in 3GPP TS 24.008) @@ -2441,16 +2441,16 @@ be_trace_transaction_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l static guint16 be_trace_omc_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_omc_id, tvb, curr_offset, len, FALSE); - curr_offset += len; + proto_tree_add_item(tree, hf_gsm_a_bssmap_trace_omc_id, tvb, curr_offset, len, FALSE); + curr_offset += len; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* * [2] 3.2.2.43 Forward Indicator @@ -2458,37 +2458,37 @@ be_trace_omc_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, static guint16 be_for_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint32 curr_offset; - const gchar *str = NULL; + guint8 oct; + guint32 curr_offset; + const gchar *str = NULL; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - switch (oct & 0x0f) - { - case 1: str = "forward to subsequent BSS, no trace at MSC"; break; - case 2: str = "forward to subsequent BSS, and trace at MSC"; break; - default: - str = "Reserved"; - break; - } + switch (oct & 0x0f) + { + case 1: str = "forward to subsequent BSS, no trace at MSC"; break; + case 2: str = "forward to subsequent BSS, and trace at MSC"; break; + default: + str = "Reserved"; + break; + } - other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = %s", - a_bigbuf, - str); + other_decode_bitfield_value(a_bigbuf, oct, 0x0f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = %s", + a_bigbuf, + str); - curr_offset++; + curr_offset++; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -2497,42 +2497,42 @@ be_for_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar static guint16 be_chosen_enc_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { - guint8 oct; - guint32 curr_offset; - const gchar *str = NULL; + guint8 oct; + guint32 curr_offset; + const gchar *str = NULL; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - switch (oct) - { - case 0x01: str = "No encryption used"; break; - case 0x02: str = "GSM A5/1"; break; - case 0x03: str = "GSM A5/2"; break; - case 0x04: str = "GSM A5/3"; break; - case 0x05: str = "GSM A5/4"; break; - case 0x06: str = "GSM A5/5"; break; - case 0x07: str = "GSM A5/6"; break; - case 0x08: str = "GSM A5/7"; break; - default: - str = "Reserved"; - break; - } + switch (oct) + { + case 0x01: str = "No encryption used"; break; + case 0x02: str = "GSM A5/1"; break; + case 0x03: str = "GSM A5/2"; break; + case 0x04: str = "GSM A5/3"; break; + case 0x05: str = "GSM A5/4"; break; + case 0x06: str = "GSM A5/5"; break; + case 0x07: str = "GSM A5/6"; break; + case 0x08: str = "GSM A5/7"; break; + default: + str = "Reserved"; + break; + } - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Algorithm Identifier: %s", - str); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Algorithm Identifier: %s", + str); - curr_offset++; + curr_offset++; - if (add_string) - g_snprintf(add_string, string_len, " - %s", str); + if (add_string) + g_snprintf(add_string, string_len, " - %s", str); - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -2541,41 +2541,41 @@ be_chosen_enc_alg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_ static guint16 be_cct_pool(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { - guint8 oct; - guint32 curr_offset; - const gchar *str = NULL; + guint8 oct; + guint32 curr_offset; + const gchar *str = NULL; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - if (oct <= 50) - { - str = ""; - } - else if ((oct >= 0x80) && (oct <= 0x8f)) - { - str = ", for national/local use"; - } - else - { - str = ", reserved for future international use"; - } + if (oct <= 50) + { + str = ""; + } + else if ((oct >= 0x80) && (oct <= 0x8f)) + { + str = ", for national/local use"; + } + else + { + str = ", reserved for future international use"; + } - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "Circuit pool number: %u%s", - oct, - str); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "Circuit pool number: %u%s", + oct, + str); - curr_offset++; + curr_offset++; - if (add_string) - g_snprintf(add_string, string_len, " - (%u)", oct); + if (add_string) + g_snprintf(add_string, string_len, " - (%u)", oct); - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* * 3.2.2.46 Circuit Pool List @@ -2588,23 +2588,23 @@ be_cct_pool(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha static guint16 be_curr_chan_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint32 curr_offset; - - curr_offset = offset; + guint8 oct; + guint32 curr_offset; - oct = tvb_get_guint8(tvb, curr_offset); + curr_offset = offset; - /* Channel mode */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_cur_ch_mode, tvb, curr_offset, 1, FALSE); - /* Channel */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_channel, tvb, curr_offset, 1, FALSE); + oct = tvb_get_guint8(tvb, curr_offset); - curr_offset++; + /* Channel mode */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_cur_ch_mode, tvb, curr_offset, 1, FALSE); + /* Channel */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_channel, tvb, curr_offset, 1, FALSE); - /* no length check possible */ + curr_offset++; - return(curr_offset - offset); + /* no length check possible */ + + return(curr_offset - offset); } /* @@ -2613,29 +2613,29 @@ be_curr_chan_1(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, g static guint16 be_que_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint8 oct; - guint32 curr_offset; + guint8 oct; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 6, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 6, FALSE); - other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = qri: it is recommended %sto allow queuing", - a_bigbuf, - (oct & 0x02) ? "" : "not "); + other_decode_bitfield_value(a_bigbuf, oct, 0x02, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = qri: it is recommended %sto allow queuing", + a_bigbuf, + (oct & 0x02) ? "" : "not "); - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+7, 1, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, (curr_offset<<3)+7, 1, FALSE); - curr_offset++; + curr_offset++; - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -2644,58 +2644,58 @@ be_que_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar static guint16 be_speech_ver(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string, int string_len) { - guint8 oct; - guint32 curr_offset; - const gchar *str = NULL; - const gchar *short_str = NULL; + guint8 oct; + guint32 curr_offset; + const gchar *str = NULL; + const gchar *short_str = NULL; - curr_offset = offset; + curr_offset = offset; - oct = tvb_get_guint8(tvb, curr_offset); + oct = tvb_get_guint8(tvb, curr_offset); - proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE); - /* The bits 7-1 of octet 2 are coded in the same way as the permitted speech version identifier - * in the Channel type information element. - */ + /* The bits 7-1 of octet 2 are coded in the same way as the permitted speech version identifier + * in the Channel type information element. + */ - switch (oct & 0x7f) - { - case 0x01: str = "GSM speech full rate version 1"; short_str = "FR1"; break; - case 0x11: str = "GSM speech full rate version 2"; short_str = "FR2"; break; - case 0x21: str = "GSM speech full rate version 3 (AMR)"; short_str = "FR3 (AMR)"; break; + switch (oct & 0x7f) + { + case 0x01: str = "GSM speech full rate version 1"; short_str = "FR1"; break; + case 0x11: str = "GSM speech full rate version 2"; short_str = "FR2"; break; + case 0x21: str = "GSM speech full rate version 3 (AMR)"; short_str = "FR3 (AMR)"; break; - case 0x05: str = "GSM speech half rate version 1"; short_str = "HR1"; break; - case 0x15: str = "GSM speech half rate version 2"; short_str = "HR2"; break; - case 0x25: str = "GSM speech half rate version 3 (AMR)"; short_str = "HR3 (AMR)"; break; + case 0x05: str = "GSM speech half rate version 1"; short_str = "HR1"; break; + case 0x15: str = "GSM speech half rate version 2"; short_str = "HR2"; break; + case 0x25: str = "GSM speech half rate version 3 (AMR)"; short_str = "HR3 (AMR)"; break; - case 0x41: str = "GSM speech full rate version 4";short_str = "OFR AMR-WB"; break; - case 0x42: str = "GSM speech full rate version 5";short_str = "FR AMR-WB"; break; - case 0x46: str = "GSM speech half rate version 4";short_str = "OHR AMR-WB"; break; - case 0x45: str = "GSM speech half rate version 6";short_str = "OHR AMR"; break; + case 0x41: str = "GSM speech full rate version 4";short_str = "OFR AMR-WB"; break; + case 0x42: str = "GSM speech full rate version 5";short_str = "FR AMR-WB"; break; + case 0x46: str = "GSM speech half rate version 4";short_str = "OHR AMR-WB"; break; + case 0x45: str = "GSM speech half rate version 6";short_str = "OHR AMR"; break; - default: - str = "Reserved"; - short_str = str; - break; - } + default: + str = "Reserved"; + short_str = str; + break; + } - other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); - proto_tree_add_text(tree, - tvb, curr_offset, 1, - "%s = Speech version identifier: %s", - a_bigbuf, - str); + other_decode_bitfield_value(a_bigbuf, oct, 0x7f, 8); + proto_tree_add_text(tree, + tvb, curr_offset, 1, + "%s = Speech version identifier: %s", + a_bigbuf, + str); - curr_offset++; + curr_offset++; - if (add_string) - g_snprintf(add_string, string_len, " - (%s)", short_str); + if (add_string) + g_snprintf(add_string, string_len, " - (%s)", short_str); - /* no length check possible */ + /* no length check possible */ - return(curr_offset - offset); + return(curr_offset - offset); } /* * 3.2.2.52 Assignment Requirement @@ -2703,24 +2703,24 @@ be_speech_ver(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc static guint16 be_ass_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* * 3.2.2.53 (void) */ /* - * 3.2.2.54 Talker Flag + * 3.2.2.54 Talker Flag * No data */ /* * 3.2.2.55 Group Call Reference - * The octets 3-7 are coded in the same way as the octets 2-6 in the + * The octets 3-7 are coded in the same way as the octets 2-6 in the * Descriptive group or broadcast call reference information element as defined in 3GPP TS 24.008. * dissected in packet-gsm_a_common.c (de_d_gb_call_ref) */ @@ -2734,30 +2734,30 @@ be_ass_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar * 3.2.2.57 Configuration Evolution Indication */ static const value_string gsm_a_bssmap_smi_vals[] = { - { 0, "No Modification is allowed" }, - { 1, "Modification is allowed and maximum number of TCH/F is 1" }, - { 2, "Modification is allowed and maximum number of TCH/F is 2" }, - { 3, "Modification is allowed and maximum number of TCH/F is 3" }, - { 4, "Modification is allowed and maximum number of TCH/F is 4" }, - { 5, "Reserved" }, - { 6, "Reserved" }, - { 7, "Reserved" }, - { 0, NULL }, + { 0, "No Modification is allowed" }, + { 1, "Modification is allowed and maximum number of TCH/F is 1" }, + { 2, "Modification is allowed and maximum number of TCH/F is 2" }, + { 3, "Modification is allowed and maximum number of TCH/F is 3" }, + { 4, "Modification is allowed and maximum number of TCH/F is 4" }, + { 5, "Reserved" }, + { 6, "Reserved" }, + { 7, "Reserved" }, + { 0, NULL }, }; static guint16 be_conf_evo_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); - /* Subsequent Modification Indication */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_smi, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 4, FALSE); + /* Subsequent Modification Indication */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_smi, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* * 3.2.2.58 Old BSS to New BSS information @@ -2772,18 +2772,18 @@ bssmap_old_bss_to_new_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pin return; } - g_pinfo = pinfo; - g_tree = tree; + g_pinfo = pinfo; + g_tree = tree; - len = tvb_length(tvb); + len = tvb_length(tvb); be_field_element_dissect(tvb, tree, 0, len, NULL, 0); - g_pinfo = NULL; - g_tree = NULL; + g_pinfo = NULL; + g_tree = NULL; } /* * 3.2.2.59 (void) - * 3.2.2.60 LCS QoS + * 3.2.2.60 LCS QoS * (The QoS octets 3 to n are coded in the same way as the equivalent octets * in the LCS QoS element of 3GPP TS 49.031.) */ @@ -2792,7 +2792,7 @@ bssmap_old_bss_to_new_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pin * 3.2.2.61 LSA Access Control Suppression */ /* - * 3.2.2.62 LCS Priority + * 3.2.2.62 LCS Priority * The Priority octets 3 to n are coded in the same way as the equivalent octets * in the LCS Priority element of 3GPP TS 49.031. */ @@ -2806,15 +2806,15 @@ static const value_string lcs_priority_vals[] = { static guint16 be_lcs_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* This octet is coded as the LCS-Priority octet in 3GPP TS 29.002 */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_lcs_pri, tvb, curr_offset, 1, FALSE); - curr_offset++; + /* This octet is coded as the LCS-Priority octet in 3GPP TS 29.002 */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_lcs_pri, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -2823,10 +2823,10 @@ be_lcs_prio(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha static guint16 be_loc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 location_information; + guint32 curr_offset; + guint8 location_information; - curr_offset = offset; + curr_offset = offset; /* Extract the location information and add to protocol tree */ location_information = tvb_get_guint8(tvb, offset); @@ -2836,11 +2836,11 @@ be_loc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha if(location_information == 1 || location_information == 2) { /* protocol method */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_location_type_positioning_method, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_location_type_positioning_method, tvb, curr_offset, 1, FALSE); curr_offset++; } - return(curr_offset - offset); + return(curr_offset - offset); } /* @@ -2851,15 +2851,15 @@ be_loc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha static guint16 be_loc_est(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *data_tvb; - guint32 curr_offset; + tvbuff_t *data_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - data_tvb = tvb_new_subset(tvb, curr_offset, len, len); - dissect_geographical_description(data_tvb, g_pinfo, tree); + data_tvb = tvb_new_subset(tvb, curr_offset, len, len); + dissect_geographical_description(data_tvb, g_pinfo, tree); - return(len); + return(len); } /* * 3.2.2.65 Positioning Data @@ -2868,12 +2868,12 @@ be_loc_est(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar static guint16 be_pos_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 i; + guint32 curr_offset; + guint8 i; guint64 pos_data_disc; gint bit_offset; - curr_offset = offset; + curr_offset = offset; /* Spare bits */ bit_offset = (offset<<3); @@ -2900,7 +2900,7 @@ be_pos_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha } } - return(curr_offset - offset); + return(curr_offset - offset); } /* * 3.2.2.66 LCS Cause @@ -2920,70 +2920,70 @@ be_pos_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha /* BSSLAP the embedded message is as defined in 3GPP TS 48.071 * LLP the embedded message contains a Facility Information Element as defined in 3GPP TS 44.071 - * excluding the Facility IEI and length of Facility IEI octets defined in 3GPP TS 44.071. + * excluding the Facility IEI and length of Facility IEI octets defined in 3GPP TS 44.071. * SMLCPP the embedded message is as defined in 3GPP TS 48.031 */ static const value_string gsm_a_apdu_protocol_id_strings[] = { - { 0, "reserved" }, - { 1, "BSSLAP" }, - { 2, "LLP" }, - { 3, "SMLCPP" }, - { 0, NULL }, + { 0, "reserved" }, + { 1, "BSSLAP" }, + { 2, "LLP" }, + { 3, "SMLCPP" }, + { 0, NULL }, }; static guint16 be_apdu(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - guint8 apdu_protocol_id; - tvbuff_t *APDU_tvb; + guint32 curr_offset; + guint8 apdu_protocol_id; + tvbuff_t *APDU_tvb; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "APDU"); + proto_tree_add_text(tree, tvb, curr_offset, len, "APDU"); - /* - * dissect the embedded APDU message - * if someone writes a TS 09.31 dissector - * - * The APDU octets 4 to n are coded in the same way as the - * equivalent octet in the APDU element of 3GPP TS 49.031 BSSAP-LE. - */ + /* + * dissect the embedded APDU message + * if someone writes a TS 09.31 dissector + * + * The APDU octets 4 to n are coded in the same way as the + * equivalent octet in the APDU element of 3GPP TS 49.031 BSSAP-LE. + */ - apdu_protocol_id = tvb_get_guint8(tvb,curr_offset); - proto_tree_add_item(tree, hf_gsm_a_bssmap_apdu_protocol_id, tvb, curr_offset, 1, FALSE); - curr_offset++; - len--; + apdu_protocol_id = tvb_get_guint8(tvb,curr_offset); + proto_tree_add_item(tree, hf_gsm_a_bssmap_apdu_protocol_id, tvb, curr_offset, 1, FALSE); + curr_offset++; + len--; - switch(apdu_protocol_id){ - case 1: - /* BSSLAP - * the embedded message is as defined in 3GPP TS 08.71(3GPP TS 48.071 version 7.2.0 Release 7) - */ - APDU_tvb = tvb_new_subset(tvb, curr_offset, len, len); - if(gsm_bsslap_handle) - call_dissector(gsm_bsslap_handle, APDU_tvb, g_pinfo, g_tree); - break; - case 2: - /* LLP - * The embedded message contains a Facility Information Element as defined in 3GPP TS 04.71 - * excluding the Facility IEI and length of Facility IEI octets defined in 3GPP TS 04.71.(3GPP TS 44.071). - */ - break; - case 3: - /* SMLCPP - * The embedded message is as defined in 3GPP TS 08.31(TS 48.031). - */ - break; - default: - break; - } + switch(apdu_protocol_id){ + case 1: + /* BSSLAP + * the embedded message is as defined in 3GPP TS 08.71(3GPP TS 48.071 version 7.2.0 Release 7) + */ + APDU_tvb = tvb_new_subset(tvb, curr_offset, len, len); + if(gsm_bsslap_handle) + call_dissector(gsm_bsslap_handle, APDU_tvb, g_pinfo, g_tree); + break; + case 2: + /* LLP + * The embedded message contains a Facility Information Element as defined in 3GPP TS 04.71 + * excluding the Facility IEI and length of Facility IEI octets defined in 3GPP TS 04.71.(3GPP TS 44.071). + */ + break; + case 3: + /* SMLCPP + * The embedded message is as defined in 3GPP TS 08.31(TS 48.031). + */ + break; + default: + break; + } - curr_offset += len; + curr_offset += len; - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* * 3.2.2.69 Network Element Identity @@ -2993,17 +2993,17 @@ be_apdu(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_s * 3.2.2.70 GPS Assistance Data * Requested GPS Data element of 3GPP TS 49.031 BSSAP-LE. */ -static guint16 +static guint16 be_gps_assist_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); - return(len); + return(len); } /* * 3.2.2.71 Deciphering Keys @@ -3017,13 +3017,13 @@ be_gps_assist_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U static guint16 be_ret_err_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); - return(len); + return(len); } /* * 3.2.2.73 Return Error Cause @@ -3032,13 +3032,13 @@ be_ret_err_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, g static guint16 be_ret_err_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); - return(len); + return(len); } /* * 3.2.2.74 Segmentation @@ -3047,40 +3047,40 @@ be_ret_err_cause(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, static guint16 be_seg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); - return(len); + return(len); } /* * 3.2.2.75 Service Handover */ static const value_string gsm_a_bssmap_serv_ho_inf_vals[] = { - { 0, "Handover to UTRAN or cdma2000 should be performed - Handover to UTRAN or cdma2000 is preferred" }, - { 1, "Handover to UTRAN or cdma2000 should not be performed - Handover to GSM is preferred" }, - { 2, "Handover to UTRAN or cdma2000 shall not be performed - " }, - { 3, "no information available for service based handover" }, - { 4, "no information available for service based handover" }, - { 5, "no information available for service based handover" }, - { 6, "no information available for service based handover" }, - { 7, "no information available for service based handover" }, - { 0, NULL }, + { 0, "Handover to UTRAN or cdma2000 should be performed - Handover to UTRAN or cdma2000 is preferred" }, + { 1, "Handover to UTRAN or cdma2000 should not be performed - Handover to GSM is preferred" }, + { 2, "Handover to UTRAN or cdma2000 shall not be performed - " }, + { 3, "no information available for service based handover" }, + { 4, "no information available for service based handover" }, + { 5, "no information available for service based handover" }, + { 6, "no information available for service based handover" }, + { 7, "no information available for service based handover" }, + { 0, NULL }, }; static guint16 be_serv_ho(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Service Handover information */ - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_serv_ho_inf, tvb, curr_offset+1, 1, FALSE); - curr_offset++; - return(len); + /* Service Handover information */ + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_serv_ho_inf, tvb, curr_offset+1, 1, FALSE); + curr_offset++; + return(len); } /* @@ -3090,19 +3090,19 @@ be_serv_ho(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar static guint16 be_src_rnc_to_tar_rnc_umts(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *container_tvb; - guint32 curr_offset; + tvbuff_t *container_tvb; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* The Source RNC to Target RNC transparent Information value is encoded as - * the Source RNC to Target RNC Transparent Container IE as defined in relevant - * RANAP specification 3GPP TS 25.413, excluding RANAP tag - */ - container_tvb = tvb_new_subset(tvb, curr_offset, len, len); - dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU(container_tvb, g_pinfo , tree); + /* The Source RNC to Target RNC transparent Information value is encoded as + * the Source RNC to Target RNC Transparent Container IE as defined in relevant + * RANAP specification 3GPP TS 25.413, excluding RANAP tag + */ + container_tvb = tvb_new_subset(tvb, curr_offset, len, len); + dissect_ranap_SourceRNC_ToTargetRNC_TransparentContainer_PDU(container_tvb, g_pinfo , tree); - return(len); + return(len); } /* * 3.2.2.77 Source RNC to target RNC transparent information (cdma2000) @@ -3110,16 +3110,16 @@ be_src_rnc_to_tar_rnc_umts(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin static guint16 be_src_rnc_to_tar_rnc_cdma(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); - /* The Source RNC to Target RNC transparent Information value (structure and encoding) - * for cdma2000 is defined in relevant specifications. - */ + proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); + /* The Source RNC to Target RNC transparent Information value (structure and encoding) + * for cdma2000 is defined in relevant specifications. + */ - return(len); + return(len); } /* * 3.2.2.78 GERAN Classmark @@ -3128,13 +3128,13 @@ be_src_rnc_to_tar_rnc_cdma(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin static guint16 be_geran_cls_m(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); - return(len); + return(len); } /* * 3.2.2.79 GERAN BSC Container @@ -3153,44 +3153,44 @@ bssmap_new_bss_to_old_bss_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pin return; } - g_pinfo = pinfo; - g_tree = tree; + g_pinfo = pinfo; + g_tree = tree; - len = tvb_length(tvb); + len = tvb_length(tvb); be_field_element_dissect(tvb, tree, 0, len, NULL, 0); - g_pinfo = NULL; - g_tree = NULL; + g_pinfo = NULL; + g_tree = NULL; } /* - * 3.2.2.81 Inter-System Information + * 3.2.2.81 Inter-System Information */ static guint16 be_inter_sys_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.82 SNA Access Information + * 3.2.2.82 SNA Access Information */ static guint16 be_sna_acc_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len , "Not decoded yet"); - return(len); + return(len); } /* @@ -3212,290 +3212,290 @@ static const true_false_string bssmap_paging_inf_flg_value = { }; static const value_string gsm_a_bssmap_paging_cause_vals[] = { - { 0, "Paging is for mobile terminating call" }, - { 1, "Paging is for a short message" }, - { 2, "Paging is for a USSD" }, - { 3, "Spare" }, - { 0, NULL }, + { 0, "Paging is for mobile terminating call" }, + { 1, "Paging is for a short message" }, + { 2, "Paging is for a USSD" }, + { 3, "Spare" }, + { 0, NULL }, }; static guint16 be_paging_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_paging_cause, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_paging_inf_flg, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_paging_cause, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_paging_inf_flg, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 3.2.2.86 IMEI + * 3.2.2.86 IMEI * Use same dissector as IMSI 3.2.2.6 */ /* - * 3.2.2.87 Velocity Estimate + * 3.2.2.87 Velocity Estimate */ static guint16 be_vel_est(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.88 VGCS Feature Flags + * 3.2.2.88 VGCS Feature Flags */ /* Bit 1 is the talker priority indicator (TP Ind). */ static const true_false_string gsm_bssmap_tpind_vals = { - "Talker Priority not supported" , - "Talker Priority supported" + "Talker Priority not supported" , + "Talker Priority supported" }; /* Bits 2 and 3 are the A-interface resource sharing indicator (AS Ind). */ static const true_false_string gsm_bssmap_asind_b2_vals = { - "A-interface circuit sharing" , - "No A-interface circuit sharing" + "A-interface circuit sharing" , + "No A-interface circuit sharing" }; static const true_false_string gsm_bssmap_asind_b3_vals = { - "A-interface link sharing" , - "No A-interface link sharing" + "A-interface link sharing" , + "No A-interface link sharing" }; /* Bit 4 is the group or broadcast call re-establishment by the BSS indicator (Bss Res). */ static const true_false_string gsm_bssmap_bss_res_vals = { - "Re-establishment of the group or broadcast call by the BSS" , - "No re-establishment of the group or broadcast call by the BSS" + "Re-establishment of the group or broadcast call by the BSS" , + "No re-establishment of the group or broadcast call by the BSS" }; /* Bit 5 is the Talker Channel Parameter (TCP). */ static const true_false_string gsm_bssmap_bss_tcp_vals = { - "Talker channel parameter is applicable to this call, talker shall be established and maintained on a dedicated channel" , - "Talker channel parameter is not applicable to this call" + "Talker channel parameter is applicable to this call, talker shall be established and maintained on a dedicated channel" , + "Talker channel parameter is not applicable to this call" }; static guint16 be_vgcs_feat_flg(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 3, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_tcp, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_bss_res, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_asind_b3, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_asind_b2, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_tpind, tvb, curr_offset, 1, FALSE); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 3, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_tcp, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_bss_res, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_asind_b3, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_asind_b2, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_tpind, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset++; - return(curr_offset-offset); + return(curr_offset-offset); } /* - * 3.2.2.89 Talker Priority + * 3.2.2.89 Talker Priority */ static const value_string gsm_a_bssmap_talker_pri_vals[] = { - { 0, "Normal Priority" }, - { 1, "Privileged Priority" }, - { 2, "Emergency Priority" }, - { 3, "Reserved for future use" }, - { 0, NULL }, + { 0, "Normal Priority" }, + { 1, "Privileged Priority" }, + { 2, "Emergency Priority" }, + { 3, "Reserved for future use" }, + { 0, NULL }, }; static guint16 be_talker_pri(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_item(tree, hf_gsm_a_bssmap_talker_pri, tvb, curr_offset, 1, FALSE); - curr_offset++; + proto_tree_add_item(tree, hf_gsm_a_bssmap_talker_pri, tvb, curr_offset, 1, FALSE); + curr_offset++; - EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); + EXTRANEOUS_DATA_CHECK(len, curr_offset - offset); - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.90 Emergency Set Indication + * 3.2.2.90 Emergency Set Indication * No data */ /* - * 3.2.2.91 Talker Identity + * 3.2.2.91 Talker Identity */ static guint16 be_talker_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, FALSE); - proto_tree_add_item(tree, hf_gsm_a_bssmap_filler_bits, tvb, curr_offset, 1, FALSE); - curr_offset++; - proto_tree_add_text(tree, tvb, curr_offset, len-1, "Talker Identity field"); + proto_tree_add_bits_item(tree, hf_gsm_a_bssmap_spare_bits, tvb, curr_offset<<3, 5, FALSE); + proto_tree_add_item(tree, hf_gsm_a_bssmap_filler_bits, tvb, curr_offset, 1, FALSE); + curr_offset++; + proto_tree_add_text(tree, tvb, curr_offset, len-1, "Talker Identity field"); - return(len); + return(len); } /* - * 3.2.2.92 SMS to VGCS + * 3.2.2.92 SMS to VGCS */ static guint16 be_sms_to_vgcs(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - /* The SMS content field is coded as follows - this field contains - * the RP-DATA message as defined in 3GPP TS 24.011. - */ + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + /* The SMS content field is coded as follows - this field contains + * the RP-DATA message as defined in 3GPP TS 24.011. + */ - return(len); + return(len); } /* - * 3.2.2.93 VGCS talker mode + * 3.2.2.93 VGCS talker mode */ static guint16 be_vgcs_talker_mode(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.94 VGCS/VBS Cell Status + * 3.2.2.94 VGCS/VBS Cell Status */ /* - * 3.2.2.95 GANSS Assistance Data + * 3.2.2.95 GANSS Assistance Data * The GANSS Assistance Data octets 3 to n are coded as the Requested GANSS Data element of 3GPP TS 49.031 (BSSAP-LE) */ guint16 be_ganss_ass_dta(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.96 GANSS Positioning Data + * 3.2.2.96 GANSS Positioning Data */ guint16 be_ganss_pos_dta(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.97 GANSS Location Type + * 3.2.2.97 GANSS Location Type */ guint16 be_ganss_loc_type(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.98 Application Data + * 3.2.2.98 Application Data */ /* - * 3.2.2.99 Data Identity + * 3.2.2.99 Data Identity */ /* - * 3.2.2.100 Application Data Information + * 3.2.2.100 Application Data Information */ static guint16 be_app_data_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); + proto_tree_add_text(tree, tvb, curr_offset, len, "Not decoded yet"); - return(len); + return(len); } /* - * 3.2.2.101 MSISDN + * 3.2.2.101 MSISDN * Octets 3-12 contain the digits of an MSISDN, coded as in 3GPP TS 24.008, Calling party BCD number, octets 4 - 13. */ /* - * 3.2.2.102 AoIP Transport Layer Address + * 3.2.2.102 AoIP Transport Layer Address */ static guint16 be_aoip_trans_lay_add(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* This Information Element provides either an IPv4 or and IPv6 Address and UDP port value - * for the Transport Layer information of the connection end point. - * The Length differentiates between IPv4 and IPv6. - */ - switch(len){ - case 6: - /* IPv4 */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_aoip_trans_ipv4, tvb, curr_offset, 4, FALSE); - curr_offset+=4; - break; - case 18: - /* IPv6 */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_aoip_trans_ipv6, tvb, curr_offset, 16, FALSE); - curr_offset+=16; - break; - default: - /* Bogus */ - proto_tree_add_text(tree, tvb, curr_offset, len, "Bogus length %u",len); - return(len); - } - proto_tree_add_item(tree, hf_gsm_a_bssmap_aoip_trans_port, tvb, curr_offset, 2, FALSE); - curr_offset+=2; + /* This Information Element provides either an IPv4 or and IPv6 Address and UDP port value + * for the Transport Layer information of the connection end point. + * The Length differentiates between IPv4 and IPv6. + */ + switch(len){ + case 6: + /* IPv4 */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_aoip_trans_ipv4, tvb, curr_offset, 4, FALSE); + curr_offset+=4; + break; + case 18: + /* IPv6 */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_aoip_trans_ipv6, tvb, curr_offset, 16, FALSE); + curr_offset+=16; + break; + default: + /* Bogus */ + proto_tree_add_text(tree, tvb, curr_offset, len, "Bogus length %u",len); + return(len); + } + proto_tree_add_item(tree, hf_gsm_a_bssmap_aoip_trans_port, tvb, curr_offset, 2, FALSE); + curr_offset+=2; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.103 Speech Codec List + * 3.2.2.103 Speech Codec List */ /* -FR_AMR is coded '011' -S11, S13 and S15 are reserved and coded with zeroes. -HR_AMR is coded '100' -S6 - S7 and S11 - S15 are reserved and coded with zeroes. +FR_AMR is coded '011' +S11, S13 and S15 are reserved and coded with zeroes. +HR_AMR is coded '100' +S6 - S7 and S11 - S15 are reserved and coded with zeroes. OHR_AMR is coded '011' -S11, S13 and S15 are reserved and coded with zeroes. +S11, S13 and S15 are reserved and coded with zeroes. FR_AMR-WB is coded '001' S0 is set to '1' S1 - S7 are reserved and coded with zeroes. @@ -3505,9 +3505,9 @@ OHR_AMR-WB is coded '101' S0 is set to '1' S1 - S7 are reserved and coded with zeroes. -8 7 6 5 4 3 2 1 -FI PI PT TF Codec Type (FR_AMR-WB or OFR_AMR-WB or OHR_AMR-WB) -S7 S6 S5 S4 S3 S2 S1 S0 +8 7 6 5 4 3 2 1 +FI PI PT TF Codec Type (FR_AMR-WB or OFR_AMR-WB or OHR_AMR-WB) +S7 S6 S5 S4 S3 S2 S1 S0 */ @@ -3516,341 +3516,341 @@ static const true_false_string bssmap_fi_vals = { "AoIP with Compressed speech via RTP/UDP/IP is not supported by the BSS/Not Preferred by the MSC" }; static const true_false_string bssmap_tf_vals = { - "TFO supported by the BSS or TFO support is preferred by the MSC for this Codec Type", - "TFO is not supported by the BSS or TFO support is not preferred by the MSC for this Codec Type" + "TFO supported by the BSS or TFO support is preferred by the MSC for this Codec Type", + "TFO is not supported by the BSS or TFO support is not preferred by the MSC for this Codec Type" }; static const true_false_string bssmap_pi_vals = { - "Transport of PCM over A-Interface via RTP/UDP/IP is supported by the BSS or preferred by the MSC for this Codec Type", - "PCM over A interface with IP as transport is not supported by the BSS or not preferred by the MSC for this Codec Type" + "Transport of PCM over A-Interface via RTP/UDP/IP is supported by the BSS or preferred by the MSC for this Codec Type", + "PCM over A interface with IP as transport is not supported by the BSS or not preferred by the MSC for this Codec Type" }; static const true_false_string bssmap_pt_vals = { - "Transport of PCM over A-Interface via TDM is supported by the BSS or preferred by the MSC", - "PCM over A-Interface with TDM as transport is not supported by the BSS or not preferred by the MSC for this Codec Type" + "Transport of PCM over A-Interface via TDM is supported by the BSS or preferred by the MSC", + "PCM over A-Interface with TDM as transport is not supported by the BSS or not preferred by the MSC for this Codec Type" }; /* 26.103 Table 6.3-1: Coding of the selected Codec_Type (long form) */ static const value_string bssap_speech_codec_values[] = { - { 0x00, "GSM FR " }, - { 0x01, "GSM HR " }, - { 0x02, "GSM EFR" }, - { 0x03, "FR_AMR" }, - { 0x04, "HR_AMR" }, - { 0x05, "UMTS AMR" }, - { 0x06, "UMTS AMR 2" }, - { 0x07, "TDMA EFR" }, - { 0x08, "PDC EFR" }, - { 0x09, "FR_AMR-WB" }, - { 0x0a, "UMTS AMR-WB" }, - { 0x0b, "OHR_AMR" }, - { 0x0c, "OFR_AMR-WB" }, - { 0x0d, "OHR_AMR-WB" }, - { 0, NULL } + { 0x00, "GSM FR " }, + { 0x01, "GSM HR " }, + { 0x02, "GSM EFR" }, + { 0x03, "FR_AMR" }, + { 0x04, "HR_AMR" }, + { 0x05, "UMTS AMR" }, + { 0x06, "UMTS AMR 2" }, + { 0x07, "TDMA EFR" }, + { 0x08, "PDC EFR" }, + { 0x09, "FR_AMR-WB" }, + { 0x0a, "UMTS AMR-WB" }, + { 0x0b, "OHR_AMR" }, + { 0x0c, "OFR_AMR-WB" }, + { 0x0d, "OHR_AMR-WB" }, + { 0, NULL } }; static guint16 be_speech_codec_lst(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset, consumed = 0; - guint8 codec; - guint8 number = 0; - proto_item *item = NULL; - proto_tree *subtree = NULL; + guint32 curr_offset, consumed = 0; + guint8 codec; + guint8 number = 0; + proto_item *item = NULL; + proto_tree *subtree = NULL; - curr_offset = offset; - - while (curr_offset-offset < len){ - number++; - consumed=0; - item = proto_tree_add_text(tree, tvb, curr_offset, 1, "Speech Codec Element %u",number); - subtree = proto_item_add_subtree(item, ett_codec_lst); - codec = tvb_get_guint8(tvb,curr_offset)&0x0f; - /* FI indicates Full IP */ - proto_tree_add_item(subtree, hf_gsm_a_bssmap_fi, tvb, curr_offset, 1, FALSE); - /* PI indicates PCMoIP */ - proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi, tvb, curr_offset, 1, FALSE); - /* PT indicates PCMoTDM */ - proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt, tvb, curr_offset, 1, FALSE); - /* TF indicates TFO support */ - proto_tree_add_item(subtree, hf_gsm_a_bssmap_tf, tvb, curr_offset, 1, FALSE); - /* Codec Type */ - proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, FALSE); - curr_offset++; - consumed++; - switch(codec){ - case 3: - /* fall through */ - case 4: - /* fall through */ - case 0xb: - /* FR_AMR is coded '011' - * HR_AMR is coded '100' - * OHR_AMR is coded '1011' - */ - proto_tree_add_text(subtree, tvb, curr_offset, 2, "S0 - S15"); - curr_offset+=2; - consumed+=2; - break; - case 0x9: - /* fall through */ - case 0xc: - /* fall through */ - case 0xd: - /* FR_AMR-WB is coded '1001' - * OFR_AMR-WB is coded '1100' - * OHR_AMR-WB is coded '1101' - */ - proto_tree_add_text(subtree, tvb, curr_offset, 1, "S0 - S7"); - curr_offset++; - consumed++; - break; - default: - break; - } - } - proto_item_set_len(item, consumed); - return(len); + curr_offset = offset; + + while (curr_offset-offset < len){ + number++; + consumed=0; + item = proto_tree_add_text(tree, tvb, curr_offset, 1, "Speech Codec Element %u",number); + subtree = proto_item_add_subtree(item, ett_codec_lst); + codec = tvb_get_guint8(tvb,curr_offset)&0x0f; + /* FI indicates Full IP */ + proto_tree_add_item(subtree, hf_gsm_a_bssmap_fi, tvb, curr_offset, 1, FALSE); + /* PI indicates PCMoIP */ + proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi, tvb, curr_offset, 1, FALSE); + /* PT indicates PCMoTDM */ + proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt, tvb, curr_offset, 1, FALSE); + /* TF indicates TFO support */ + proto_tree_add_item(subtree, hf_gsm_a_bssmap_tf, tvb, curr_offset, 1, FALSE); + /* Codec Type */ + proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, FALSE); + curr_offset++; + consumed++; + switch(codec){ + case 3: + /* fall through */ + case 4: + /* fall through */ + case 0xb: + /* FR_AMR is coded '011' + * HR_AMR is coded '100' + * OHR_AMR is coded '1011' + */ + proto_tree_add_text(subtree, tvb, curr_offset, 2, "S0 - S15"); + curr_offset+=2; + consumed+=2; + break; + case 0x9: + /* fall through */ + case 0xc: + /* fall through */ + case 0xd: + /* FR_AMR-WB is coded '1001' + * OFR_AMR-WB is coded '1100' + * OHR_AMR-WB is coded '1101' + */ + proto_tree_add_text(subtree, tvb, curr_offset, 1, "S0 - S7"); + curr_offset++; + consumed++; + break; + default: + break; + } + } + proto_item_set_len(item, consumed); + return(len); } /* - * 3.2.2.104 Speech Codec + * 3.2.2.104 Speech Codec */ static const true_false_string bssmap_fi2_vals = { "AoIP with compressed speech via RTP/UDP/IP is selected for this Codec Type", "Compressed speech via RTP/UDP/IP is not selected for this Codec Type" }; static const true_false_string bssmap_tf2_vals = { - "TFO Support is selected for this Codec Type", - "TFO Support is not selected for this Codec Type" + "TFO Support is selected for this Codec Type", + "TFO Support is not selected for this Codec Type" }; static const true_false_string bssmap_pi2_vals = { - "PCM over A-Interface via RTP/UPD/IP is selected for this Codec Type", - "PCM over A interface with RTP/UDP/IP is not selected for this Codec Type" + "PCM over A-Interface via RTP/UPD/IP is selected for this Codec Type", + "PCM over A interface with RTP/UDP/IP is not selected for this Codec Type" }; static const true_false_string bssmap_pt2_vals = { - "PCM over A-Interface with TDM as transport is selected for this Codec Type", - "PCM over A-Interface with TDM as transport is not selected for this Codec Type" + "PCM over A-Interface with TDM as transport is selected for this Codec Type", + "PCM over A-Interface with TDM as transport is not selected for this Codec Type" }; static guint16 be_speech_codec(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset, consumed = 0; - guint8 codec; - guint8 number = 0; - proto_item *item = NULL; - proto_tree *subtree = NULL; + guint32 curr_offset, consumed = 0; + guint8 codec; + guint8 number = 0; + proto_item *item = NULL; + proto_tree *subtree = NULL; - curr_offset = offset; - - while (curr_offset-offset < len){ - number++; - consumed=0; - item = proto_tree_add_text(tree, tvb, curr_offset, 1, "Speech Codec Element %u",number); - subtree = proto_item_add_subtree(item, ett_codec_lst); - codec = tvb_get_guint8(tvb,curr_offset)&0x0f; - /* FI indicates Full IP */ - proto_tree_add_item(subtree, hf_gsm_a_bssmap_fi2, tvb, curr_offset, 1, FALSE); - /* PI indicates PCMoIP */ - proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi2, tvb, curr_offset, 1, FALSE); - /* PT indicates PCMoTDM */ - proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt2, tvb, curr_offset, 1, FALSE); - /* TF indicates TFO support */ - proto_tree_add_item(subtree, hf_gsm_a_bssmap_tf2, tvb, curr_offset, 1, FALSE); - /* Codec Type */ - proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, FALSE); - curr_offset++; - consumed++; - switch(codec){ - case 3: - /* fall through */ - case 4: - /* fall through */ - case 0xb: - /* FR_AMR is coded '011' - * HR_AMR is coded '100' - * OHR_AMR is coded '1011' - */ - proto_tree_add_text(subtree, tvb, curr_offset, 2, "S0 - S15"); - curr_offset+=2; - consumed+=2; - break; - case 0x9: - /* fall through */ - case 0xc: - /* fall through */ - case 0xd: - /* FR_AMR-WB is coded '1001' - * OFR_AMR-WB is coded '1100' - * OHR_AMR-WB is coded '1101' - */ - proto_tree_add_text(subtree, tvb, curr_offset, 1, "S0 - S7"); - curr_offset++; - consumed++; - break; - default: - break; - } - } - proto_item_set_len(item, consumed); - return(len); + curr_offset = offset; - return(len); + while (curr_offset-offset < len){ + number++; + consumed=0; + item = proto_tree_add_text(tree, tvb, curr_offset, 1, "Speech Codec Element %u",number); + subtree = proto_item_add_subtree(item, ett_codec_lst); + codec = tvb_get_guint8(tvb,curr_offset)&0x0f; + /* FI indicates Full IP */ + proto_tree_add_item(subtree, hf_gsm_a_bssmap_fi2, tvb, curr_offset, 1, FALSE); + /* PI indicates PCMoIP */ + proto_tree_add_item(subtree, hf_gsm_a_bssmap_pi2, tvb, curr_offset, 1, FALSE); + /* PT indicates PCMoTDM */ + proto_tree_add_item(subtree, hf_gsm_a_bssmap_pt2, tvb, curr_offset, 1, FALSE); + /* TF indicates TFO support */ + proto_tree_add_item(subtree, hf_gsm_a_bssmap_tf2, tvb, curr_offset, 1, FALSE); + /* Codec Type */ + proto_tree_add_item(subtree, hf_gsm_a_bssap_speech_codec, tvb, curr_offset, 1, FALSE); + curr_offset++; + consumed++; + switch(codec){ + case 3: + /* fall through */ + case 4: + /* fall through */ + case 0xb: + /* FR_AMR is coded '011' + * HR_AMR is coded '100' + * OHR_AMR is coded '1011' + */ + proto_tree_add_text(subtree, tvb, curr_offset, 2, "S0 - S15"); + curr_offset+=2; + consumed+=2; + break; + case 0x9: + /* fall through */ + case 0xc: + /* fall through */ + case 0xd: + /* FR_AMR-WB is coded '1001' + * OFR_AMR-WB is coded '1100' + * OHR_AMR-WB is coded '1101' + */ + proto_tree_add_text(subtree, tvb, curr_offset, 1, "S0 - S7"); + curr_offset++; + consumed++; + break; + default: + break; + } + } + proto_item_set_len(item, consumed); + return(len); + + return(len); } /* - * 3.2.2.105 Call Identifier + * 3.2.2.105 Call Identifier */ static guint16 be_call_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; - /* Call Identifier (least significant bits) octet 2 - * Call Identifier octet 3 - * Call Identifier octet 4 - * Call Identifier (most significant bits) octet 5 - */ - proto_tree_add_item(tree, hf_gsm_a_bssmap_call_id, tvb, curr_offset, 4, TRUE); - curr_offset+=4; + /* Call Identifier (least significant bits) octet 2 + * Call Identifier octet 3 + * Call Identifier octet 4 + * Call Identifier (most significant bits) octet 5 + */ + proto_tree_add_item(tree, hf_gsm_a_bssmap_call_id, tvb, curr_offset, 4, TRUE); + curr_offset+=4; - return(curr_offset - offset); + return(curr_offset - offset); } /* - * 3.2.2.106 Call Identifier List + * 3.2.2.106 Call Identifier List */ static guint16 be_call_id_lst(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; - curr_offset = offset; + guint32 curr_offset; + curr_offset = offset; - if (len==0){ - proto_tree_add_text(tree, tvb, curr_offset, len, "all resources and references associated to all Call Identifiers in use between the BSC and the MSC need to be released"); - } - while (curr_offset-offset < len){ - proto_tree_add_item(tree, hf_gsm_a_bssmap_call_id, tvb, curr_offset, 4, TRUE); - curr_offset+=4; - } + if (len==0){ + proto_tree_add_text(tree, tvb, curr_offset, len, "all resources and references associated to all Call Identifiers in use between the BSC and the MSC need to be released"); + } + while (curr_offset-offset < len){ + proto_tree_add_item(tree, hf_gsm_a_bssmap_call_id, tvb, curr_offset, 4, TRUE); + curr_offset+=4; + } - return(len); + return(len); } guint16 (*bssmap_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string, int string_len) = { - be_cic, /* Circuit Identity Code */ - NULL, /* Reserved */ - be_res_avail, /* Resource Available */ - be_cause, /* Cause */ - be_cell_id, /* Cell Identifier */ - be_prio, /* Priority */ - be_l3_header_info, /* Layer 3 Header Information */ - de_mid, /* IMSI */ - be_tmsi, /* TMSI */ - be_enc_info, /* Encryption Information */ - be_chan_type, /* Channel Type */ - be_periodicity, /* Periodicity */ - be_ext_res_ind, /* Extended Resource Indicator */ - be_num_ms, /* Number Of MSs */ - NULL, /* Reserved */ - NULL, /* Reserved */ - NULL, /* Reserved */ - de_ms_cm_2, /* Classmark Information Type 2 */ - de_ms_cm_3, /* Classmark Information Type 3 */ - be_int_band, /* Interference Band To Be Used */ - de_rr_cause, /* RR Cause */ - NULL, /* Reserved */ - be_l3_info, /* Layer 3 Information */ - be_dlci, /* DLCI */ - be_down_dtx_flag, /* Downlink DTX Flag */ - be_cell_id_list, /* Cell Identifier List */ - NULL /* no associated data */, /* Response Request */ - be_res_ind_method, /* Resource Indication Method */ - de_ms_cm_1, /* Classmark Information Type 1 */ - be_cic_list, /* Circuit Identity Code List */ - be_diag, /* Diagnostics */ - be_l3_msg, /* Layer 3 Message Contents */ - be_chosen_chan, /* Chosen Channel */ - be_tot_res_acc, /* Total Resource Accessible */ - be_ciph_resp_mode, /* Cipher Response Mode */ - be_cha_needed, /* Channel Needed */ - be_trace_type, /* Trace Type */ - be_trace_trigger_id,/* TriggerID */ - be_trace_reference, /* Trace Reference */ - be_trace_transaction_id, /* TransactionID */ - de_mid, /* Mobile Identity */ - be_trace_omc_id, /* OMCID */ - be_for_ind, /* Forward Indicator */ - be_chosen_enc_alg, /* Chosen Encryption Algorithm */ - be_cct_pool, /* Circuit Pool */ - NULL, /* Circuit Pool List */ - NULL, /* Time Indication */ - NULL, /* Resource Situation */ - be_curr_chan_1, /* Current Channel Type 1 */ - be_que_ind, /* Queueing Indicator */ - be_speech_ver, /* Speech Version */ - be_ass_req, /* Assignment Requirement */ - NULL /* no associated data */, /* Talker Flag */ - NULL /* no associated data */, /* Connection Release Requested */ - de_d_gb_call_ref, /* Group Call Reference */ - NULL, /* eMLPP Priority */ - be_conf_evo_ind, /* Configuration Evolution Indication */ - be_field_element_dissect, /* Old BSS to New BSS Information */ - be_lsa_id, /* LSA Identifier */ - be_lsa_id_list, /* LSA Identifier List */ - be_lsa_info, /* LSA Information */ - NULL, /* LCS QoS Dissected in packet-gsm_bssmap_le.c*/ - NULL, /* LSA access control suppression */ - be_lcs_prio, /* LCS Priority */ - be_loc_type, /* Location Type */ - be_loc_est, /* Location Estimate */ - be_pos_data, /* Positioning Data */ - NULL, /* 3.2.2.66 LCS Cause Dissected in packet-gsm_bssmap_le.c */ - NULL, /* LCS Client Type Dissected in packet-gsm_bssmap_le.c */ - be_apdu, /* APDU */ - NULL, /* Network Element Identity */ - be_gps_assist_data, /* GPS Assistance Data */ - NULL, /* Deciphering Keys (dissected in packet-gsm_bssmap_le)*/ - be_ret_err_req, /* Return Error Request */ - be_ret_err_cause, /* Return Error Cause */ - be_seg, /* Segmentation */ - be_serv_ho, /* Service Handover */ - be_src_rnc_to_tar_rnc_umts, /* Source RNC to target RNC transparent information (UMTS) */ - be_src_rnc_to_tar_rnc_cdma, /* Source RNC to target RNC transparent information (cdma2000) */ - be_geran_cls_m, /* GERAN Classmark */ - NULL, /* GERAN BSC Container */ - be_field_element_dissect, /* New BSS to Old BSS Information */ - be_inter_sys_inf, /* Inter-System Information */ - be_sna_acc_inf, /* SNA Access Information */ - NULL, /* VSTK_RAND Information */ - NULL, /* VSTK Information */ - be_paging_inf, /* Paging Information */ - de_mid, /* 3.2.2.86 IMEI (use same dissector as IMSI)*/ - be_vel_est, /* Velocity Estimate */ - be_vgcs_feat_flg, /* VGCS Feature Flags */ - be_talker_pri, /* Talker Priority */ - NULL, /* no data Emergency Set Indication */ - be_talker_id, /* Talker Identity */ - be_cell_id_list_seg, /* Cell Identifier List Segment */ - be_sms_to_vgcs, /* SMS to VGCS */ - be_vgcs_talker_mode, /* VGCS Talker Mode */ - NULL, /* VGCS/VBS Cell Status */ - be_cell_id_lst_seg_f_est_cells, /* Cell Identifier List Segment for established cells */ - be_cell_id_lst_seg_f_cell_tb_est, /* Cell Identifier List Segment for cells to be established */ - be_cell_id_lst_seg_f_rel_cell, /* Cell Identifier List Segment for released cells - no user present */ - be_cell_id_lst_seg_f_not_est_cell, /* Cell Identifier List Segment for not established cells - no establishment possible */ - be_ganss_ass_dta, /* GANSS Assistance Data */ - be_ganss_pos_dta, /* GANSS Positioning Data */ - be_ganss_loc_type, /* GANSS Location Type */ - NULL, /* Application Data */ - NULL, /* Data Identity */ - be_app_data_inf, /* Application Data Information */ - NULL, /* MSISDN */ - be_aoip_trans_lay_add, /* AoIP Transport Layer Address */ - be_speech_codec_lst, /* Speech Codec List */ - be_speech_codec, /* Speech Codec */ - be_call_id, /* Call Identifier */ - be_call_id_lst, /* Call Identifier List */ + be_cic, /* Circuit Identity Code */ + NULL, /* Reserved */ + be_res_avail, /* Resource Available */ + be_cause, /* Cause */ + be_cell_id, /* Cell Identifier */ + be_prio, /* Priority */ + be_l3_header_info, /* Layer 3 Header Information */ + de_mid, /* IMSI */ + be_tmsi, /* TMSI */ + be_enc_info, /* Encryption Information */ + be_chan_type, /* Channel Type */ + be_periodicity, /* Periodicity */ + be_ext_res_ind, /* Extended Resource Indicator */ + be_num_ms, /* Number Of MSs */ + NULL, /* Reserved */ + NULL, /* Reserved */ + NULL, /* Reserved */ + de_ms_cm_2, /* Classmark Information Type 2 */ + de_ms_cm_3, /* Classmark Information Type 3 */ + be_int_band, /* Interference Band To Be Used */ + de_rr_cause, /* RR Cause */ + NULL, /* Reserved */ + be_l3_info, /* Layer 3 Information */ + be_dlci, /* DLCI */ + be_down_dtx_flag, /* Downlink DTX Flag */ + be_cell_id_list, /* Cell Identifier List */ + NULL /* no associated data */, /* Response Request */ + be_res_ind_method, /* Resource Indication Method */ + de_ms_cm_1, /* Classmark Information Type 1 */ + be_cic_list, /* Circuit Identity Code List */ + be_diag, /* Diagnostics */ + be_l3_msg, /* Layer 3 Message Contents */ + be_chosen_chan, /* Chosen Channel */ + be_tot_res_acc, /* Total Resource Accessible */ + be_ciph_resp_mode, /* Cipher Response Mode */ + be_cha_needed, /* Channel Needed */ + be_trace_type, /* Trace Type */ + be_trace_trigger_id,/* TriggerID */ + be_trace_reference, /* Trace Reference */ + be_trace_transaction_id, /* TransactionID */ + de_mid, /* Mobile Identity */ + be_trace_omc_id, /* OMCID */ + be_for_ind, /* Forward Indicator */ + be_chosen_enc_alg, /* Chosen Encryption Algorithm */ + be_cct_pool, /* Circuit Pool */ + NULL, /* Circuit Pool List */ + NULL, /* Time Indication */ + NULL, /* Resource Situation */ + be_curr_chan_1, /* Current Channel Type 1 */ + be_que_ind, /* Queueing Indicator */ + be_speech_ver, /* Speech Version */ + be_ass_req, /* Assignment Requirement */ + NULL /* no associated data */, /* Talker Flag */ + NULL /* no associated data */, /* Connection Release Requested */ + de_d_gb_call_ref, /* Group Call Reference */ + NULL, /* eMLPP Priority */ + be_conf_evo_ind, /* Configuration Evolution Indication */ + be_field_element_dissect, /* Old BSS to New BSS Information */ + be_lsa_id, /* LSA Identifier */ + be_lsa_id_list, /* LSA Identifier List */ + be_lsa_info, /* LSA Information */ + NULL, /* LCS QoS Dissected in packet-gsm_bssmap_le.c*/ + NULL, /* LSA access control suppression */ + be_lcs_prio, /* LCS Priority */ + be_loc_type, /* Location Type */ + be_loc_est, /* Location Estimate */ + be_pos_data, /* Positioning Data */ + NULL, /* 3.2.2.66 LCS Cause Dissected in packet-gsm_bssmap_le.c */ + NULL, /* LCS Client Type Dissected in packet-gsm_bssmap_le.c */ + be_apdu, /* APDU */ + NULL, /* Network Element Identity */ + be_gps_assist_data, /* GPS Assistance Data */ + NULL, /* Deciphering Keys (dissected in packet-gsm_bssmap_le)*/ + be_ret_err_req, /* Return Error Request */ + be_ret_err_cause, /* Return Error Cause */ + be_seg, /* Segmentation */ + be_serv_ho, /* Service Handover */ + be_src_rnc_to_tar_rnc_umts, /* Source RNC to target RNC transparent information (UMTS) */ + be_src_rnc_to_tar_rnc_cdma, /* Source RNC to target RNC transparent information (cdma2000) */ + be_geran_cls_m, /* GERAN Classmark */ + NULL, /* GERAN BSC Container */ + be_field_element_dissect, /* New BSS to Old BSS Information */ + be_inter_sys_inf, /* Inter-System Information */ + be_sna_acc_inf, /* SNA Access Information */ + NULL, /* VSTK_RAND Information */ + NULL, /* VSTK Information */ + be_paging_inf, /* Paging Information */ + de_mid, /* 3.2.2.86 IMEI (use same dissector as IMSI)*/ + be_vel_est, /* Velocity Estimate */ + be_vgcs_feat_flg, /* VGCS Feature Flags */ + be_talker_pri, /* Talker Priority */ + NULL, /* no data Emergency Set Indication */ + be_talker_id, /* Talker Identity */ + be_cell_id_list_seg, /* Cell Identifier List Segment */ + be_sms_to_vgcs, /* SMS to VGCS */ + be_vgcs_talker_mode,/* VGCS Talker Mode */ + NULL, /* VGCS/VBS Cell Status */ + be_cell_id_lst_seg_f_est_cells, /* Cell Identifier List Segment for established cells */ + be_cell_id_lst_seg_f_cell_tb_est, /* Cell Identifier List Segment for cells to be established */ + be_cell_id_lst_seg_f_rel_cell, /* Cell Identifier List Segment for released cells - no user present */ + be_cell_id_lst_seg_f_not_est_cell, /* Cell Identifier List Segment for not established cells - no establishment possible */ + be_ganss_ass_dta, /* GANSS Assistance Data */ + be_ganss_pos_dta, /* GANSS Positioning Data */ + be_ganss_loc_type, /* GANSS Location Type */ + NULL, /* Application Data */ + NULL, /* Data Identity */ + be_app_data_inf, /* Application Data Information */ + NULL, /* MSISDN */ + be_aoip_trans_lay_add, /* AoIP Transport Layer Address */ + be_speech_codec_lst,/* Speech Codec List */ + be_speech_codec, /* Speech Codec */ + be_call_id, /* Call Identifier */ + be_call_id_lst, /* Call Identifier List */ - NULL, /* NONE */ + NULL, /* NONE */ }; -/* 3.2.3 Signalling Field Element Coding */ -/* 3.2.3.1 Extra information */ +/* 3.2.3 Signalling Field Element Coding */ +/* 3.2.3.1 Extra information */ static const value_string fe_extra_info_prec_vals[] = { { 0, "The old BSS recommends that this allocation request should not cause a pre-emption an existing connection" }, { 1, "The old BSS recommends that this allocation request is allowed to preempt an existing connection based on the information supplied in the Priority information element, if available" }, @@ -3872,57 +3872,57 @@ static const value_string fe_extra_info_ue_prob_vals[] = { static guint16 be_fe_extra_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; - proto_tree_add_item(tree, hf_fe_extra_info_prec, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_fe_extra_info_lcs, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_fe_extra_info_ue_prob, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_fe_extra_info_spare, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset = offset; + proto_tree_add_item(tree, hf_fe_extra_info_prec, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_fe_extra_info_lcs, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_fe_extra_info_ue_prob, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_fe_extra_info_spare, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } -/* 3.2.3.2 Current Channel type 2 */ +/* 3.2.3.2 Current Channel type 2 */ static guint16 be_fe_cur_chan_type2(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; - proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_mode, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_mode_spare, tvb, curr_offset, 1, FALSE); - curr_offset++; - proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_field, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_field_spare, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset = offset; + proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_mode, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_mode_spare, tvb, curr_offset, 1, FALSE); + curr_offset++; + proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_field, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_fe_cur_chan_type2_chan_field_spare, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } -/* 3.2.3.3 Target cell radio information */ +/* 3.2.3.3 Target cell radio information */ static guint16 be_fe_target_radio_cell_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; - proto_tree_add_item(tree, hf_fe_target_radio_cell_info_rxlev_ncell, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_fe_target_radio_cell_info_rxlev_ncell_spare, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset = offset; + proto_tree_add_item(tree, hf_fe_target_radio_cell_info_rxlev_ncell, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_fe_target_radio_cell_info_rxlev_ncell_spare, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } -/* 3.2.3.4 GPRS Suspend Information */ +/* 3.2.3.4 GPRS Suspend Information */ static guint16 be_fe_gprs_suspend_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset = offset; + guint32 curr_offset = offset; build_info_t bi; - /* This Field Element contains the contents of the Gb interface SUSPEND ACK PDU, + /* This Field Element contains the contents of the Gb interface SUSPEND ACK PDU, Call the BSSGP dissector here, assuming that the encoding is per 48.018 */ bi.tvb = tvb; @@ -3935,52 +3935,52 @@ be_fe_gprs_suspend_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l bi.pdutype = 0x0c; /* BSSGP_PDU_SUSPEND_ACK */ decode_pdu_suspend_ack(&bi); - curr_offset += len; + curr_offset += len; - return(curr_offset - offset); + return(curr_offset - offset); } -/* 3.2.3.5 MultiRate configuration Information */ +/* 3.2.3.5 MultiRate configuration Information */ -/* 3.2.3.6 Dual Transfer Mode information */ +/* 3.2.3.6 Dual Transfer Mode information */ static const value_string gsm_a_bssmap_dtm_info_dtm_ind_vals[] = { - { 0, "The MS has resources allocated exclusively for the CS domain in the old cell" }, - { 1, "The MS has resources allocated for both the CS and PS domains in the old cell" }, - { 0, NULL }, + { 0, "The MS has resources allocated exclusively for the CS domain in the old cell" }, + { 1, "The MS has resources allocated for both the CS and PS domains in the old cell" }, + { 0, NULL }, }; static const value_string gsm_a_bssmap_dtm_info_sto_ind_vals[] = { - { 0, "The MS is in multislot operation in the old cell" }, - { 1, "The MS is in single timeslot operation in the old cell" }, - { 0, NULL }, + { 0, "The MS is in multislot operation in the old cell" }, + { 1, "The MS is in single timeslot operation in the old cell" }, + { 0, NULL }, }; static const value_string gsm_a_bssmap_dtm_info_egprs_ind_vals[] = { - { 0, "The MS has no TBF using E-GPRS in the old cell" }, - { 1, "The MS has a TBF using E-GPRS in the old cell" }, - { 0, NULL }, + { 0, "The MS has no TBF using E-GPRS in the old cell" }, + { 1, "The MS has a TBF using E-GPRS in the old cell" }, + { 0, NULL }, }; static guint16 be_fe_dual_transfer_mode_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; - proto_tree_add_item(tree, hf_fe_dtm_info_dtm_ind, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_fe_dtm_info_sto_ind, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_fe_dtm_info_egprs_ind, tvb, curr_offset, 1, FALSE); - proto_tree_add_item(tree, hf_fe_dtm_info_spare_bits, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset = offset; + proto_tree_add_item(tree, hf_fe_dtm_info_dtm_ind, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_fe_dtm_info_sto_ind, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_fe_dtm_info_egprs_ind, tvb, curr_offset, 1, FALSE); + proto_tree_add_item(tree, hf_fe_dtm_info_spare_bits, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } -/* 3.2.3.7 Inter RAT Handover Info */ +/* 3.2.3.7 Inter RAT Handover Info */ static guint16 be_fe_inter_rat_handover_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - tvbuff_t *container_tvb; + tvbuff_t *container_tvb; /* Octets 3-n are encoded as Inter RAT Handover Info as defined in 3GPP TS 25.331 */ container_tvb = tvb_new_subset(tvb, offset, len, len); @@ -3989,108 +3989,108 @@ be_fe_inter_rat_handover_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, g return len; } -/* 3.2.3.8 cdma2000 Capability Information */ +/* 3.2.3.8 cdma2000 Capability Information */ -/* 3.2.3.9 Downlink Cell Load Information */ +/* 3.2.3.9 Downlink Cell Load Information */ -/* 3.2.3.10 Uplink Cell Load Information */ +/* 3.2.3.10 Uplink Cell Load Information */ static const value_string gsm_a_bssmap_cell_load_nrt_vals[] = { - { 0, "NRT Load is low" }, - { 1, "NRT load is medium" }, - { 2, "NRT load is high. (Probability to admit a new user is low.)" }, - { 3, "NRT overload. (Probability to admit a new user is low, packets are discarded and the source is recommended to reduce the data flow.)" }, - { 0, NULL }, + { 0, "NRT Load is low" }, + { 1, "NRT load is medium" }, + { 2, "NRT load is high. (Probability to admit a new user is low.)" }, + { 3, "NRT overload. (Probability to admit a new user is low, packets are discarded and the source is recommended to reduce the data flow.)" }, + { 0, NULL }, }; -/* 3.2.3.11 Cell Load Information Group */ +/* 3.2.3.11 Cell Load Information Group */ static guint16 be_fe_cell_load_info_group(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; + curr_offset = offset; curr_offset += be_cell_id(tvb, tree, curr_offset, len, NULL, 0); curr_offset += be_field_element_dissect(tvb, tree, curr_offset, len + offset - curr_offset, NULL, 0); - return(curr_offset - offset); + return(curr_offset - offset); } -/* 3.2.3.12 Cell Load Information */ +/* 3.2.3.12 Cell Load Information */ static guint16 be_fe_cell_load_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; - proto_tree_add_item(tree, hf_fe_cell_load_info_cell_capacity_class, tvb, curr_offset, 1, FALSE); - curr_offset++; - proto_tree_add_item(tree, hf_fe_cell_load_info_load_value, tvb, curr_offset, 1, FALSE); - curr_offset++; - proto_tree_add_item(tree, hf_fe_cell_load_info_rt_load_value, tvb, curr_offset, 1, FALSE); - curr_offset++; - proto_tree_add_item(tree, hf_fe_cell_load_info_nrt_load_information_value, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset = offset; + proto_tree_add_item(tree, hf_fe_cell_load_info_cell_capacity_class, tvb, curr_offset, 1, FALSE); + curr_offset++; + proto_tree_add_item(tree, hf_fe_cell_load_info_load_value, tvb, curr_offset, 1, FALSE); + curr_offset++; + proto_tree_add_item(tree, hf_fe_cell_load_info_rt_load_value, tvb, curr_offset, 1, FALSE); + curr_offset++; + proto_tree_add_item(tree, hf_fe_cell_load_info_nrt_load_information_value, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } -/* 3.2.3.13 PS Indication */ +/* 3.2.3.13 PS Indication */ static guint16 be_fe_ps_indication(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; - proto_tree_add_item(tree, hf_fe_ps_indication, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset = offset; + proto_tree_add_item(tree, hf_fe_ps_indication, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } -/* 3.2.3.14 DTM Handover Command Indication */ +/* 3.2.3.14 DTM Handover Command Indication */ static guint16 be_fe_dtm_ho_command_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset; + guint32 curr_offset; - curr_offset = offset; - proto_tree_add_item(tree, hf_fe_dtm_ho_command_ind_spare, tvb, curr_offset, 1, FALSE); - curr_offset++; + curr_offset = offset; + proto_tree_add_item(tree, hf_fe_dtm_ho_command_ind_spare, tvb, curr_offset, 1, FALSE); + curr_offset++; - return(curr_offset - offset); + return(curr_offset - offset); } static guint16 (*bssmap_bss_to_bss_element_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_) = { - be_fe_extra_info, /* { 0x01, "Extra information" }, */ - be_fe_cur_chan_type2, /* { 0x02, "Current Channel Type 2" }, */ - be_fe_target_radio_cell_info, /* { 0x03, "Target cell radio information" }, */ - be_fe_gprs_suspend_info, /* { 0x04, "GPRS Suspend information" }, */ - de_rr_multirate_conf, /* { 0x05, "MultiRate configuration information" }, */ - be_fe_dual_transfer_mode_info, /* { 0x06, "Dual Transfer Mode Information" }, */ - be_fe_inter_rat_handover_info, /* { 0x07, "Inter RAT Handover Info" }, */ - NULL, /* { 0x08, "cdma2000 Capability Information" }, */ - be_fe_cell_load_info, /* { 0x09, "Downlink Cell Load Information" }, */ - be_fe_cell_load_info, /* { 0x0a, "Uplink Cell Load Information" }, */ - be_fe_cell_load_info_group, /* { 0x0b, "Cell Load Information Group" }, */ - be_fe_cell_load_info, /* { 0x0c, "Cell Load Information" }, */ - be_fe_ps_indication, /* { 0x0d, "PS Indication" }, */ - be_fe_dtm_ho_command_ind, /* { 0x0e, "DTM Handover Command Indication" }, */ - be_vgcs_talker_mode, /* { 0x6f, "VGCS talker mode" }, */ /* not really a field element + be_fe_extra_info, /* { 0x01, "Extra information" }, */ + be_fe_cur_chan_type2, /* { 0x02, "Current Channel Type 2" }, */ + be_fe_target_radio_cell_info, /* { 0x03, "Target cell radio information" }, */ + be_fe_gprs_suspend_info, /* { 0x04, "GPRS Suspend information" }, */ + de_rr_multirate_conf, /* { 0x05, "MultiRate configuration information" }, */ + be_fe_dual_transfer_mode_info, /* { 0x06, "Dual Transfer Mode Information" }, */ + be_fe_inter_rat_handover_info, /* { 0x07, "Inter RAT Handover Info" }, */ + NULL, /* { 0x08, "cdma2000 Capability Information" }, */ + be_fe_cell_load_info, /* { 0x09, "Downlink Cell Load Information" }, */ + be_fe_cell_load_info, /* { 0x0a, "Uplink Cell Load Information" }, */ + be_fe_cell_load_info_group, /* { 0x0b, "Cell Load Information Group" }, */ + be_fe_cell_load_info, /* { 0x0c, "Cell Load Information" }, */ + be_fe_ps_indication, /* { 0x0d, "PS Indication" }, */ + be_fe_dtm_ho_command_ind, /* { 0x0e, "DTM Handover Command Indication" }, */ + be_vgcs_talker_mode, /* { 0x6f, "VGCS talker mode" }, */ /* not really a field element but does appear in old bss to new bss info */ - NULL, /* NONE */ + NULL, /* NONE */ }; static guint16 be_field_element_dissect(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_) { - guint32 curr_offset, ie_len, idx, fe_start_offset; + guint32 curr_offset, ie_len, idx, fe_start_offset; const gchar *str; proto_item *item = NULL; proto_tree * bss_to_bss_tree = NULL; - curr_offset = offset; + curr_offset = offset; while (curr_offset - offset + 2 < len) { @@ -4099,10 +4099,10 @@ be_field_element_dissect(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint * add name */ oct = tvb_get_guint8(tvb, curr_offset++); - + str = match_strval_idx((guint32) oct, bssmap_field_element_ids, &idx); ie_len = tvb_get_guint8(tvb, curr_offset++); - + /* * add Field Element name */ @@ -4111,7 +4111,7 @@ be_field_element_dissect(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint bss_to_bss_tree = proto_item_add_subtree(item, ett_bss_to_bss_info); fe_start_offset = curr_offset; - + /* * decode field element */ @@ -4141,49 +4141,49 @@ be_field_element_dissect(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint static void bssmap_ass_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Channel Type 3.2.2.11 MSC-BSS M 5-13 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CHAN_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHAN_TYPE, NULL); - /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note 3) 4 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_HEADER_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_HEADER_INFO, NULL); - /* Priority 3.2.2.18 MSC-BSS O 3 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_PRIO, NULL); - /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 1, 12 3 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_DOWN_DTX_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_DOWN_DTX_FLAG, NULL); - /* Interference Band To Be Used 3.2.2.21 MSC-BSS O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_INT_BAND].value, BSSAP_PDU_TYPE_BSSMAP, BE_INT_BAND, NULL); - /* Classmark Information 2 3.2.2.19 MSC-BSS O (note 4) 4-5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_2].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_2, NULL); - /* Group Call Reference 3.2.2.55 MSC-BSS O (note 5) 7 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL); - /* Talker Flag 3.2.2.54 MSC-BSS O (note 6) 1 */ - ELEM_OPT_T(gsm_bssmap_elem_strings[BE_TALKER_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_FLAG, NULL); - /* Configuration Evolution Indication 3.2.2.57 MSC-BSS O (note 7) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CONF_EVO_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_CONF_EVO_IND, NULL); - /* LSA Access Control Suppression 3.2.2.61 MSC-BSS O (note 8) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_LSA_ACC_CTRL].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ACC_CTRL, NULL); - /* Service Handover 3.2.2.75 MSC-BSS O (note 9) 3 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SERV_HO].value, BSSAP_PDU_TYPE_BSSMAP, BE_SERV_HO, NULL); - /* Encryption Information 3.2.2.10 MSC-BSS O (note 10) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL); - /* Talker Priority 3.2.2.89 MSC-BSS O (note 11) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* AoIP Transport Layer Address (MGW) 3.2.2.102 MSC-BSS O (note 12) 10-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); - /* Codec List (MSC Preferred) 3.2.2.103 MSC-BSS O (note 13) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(MSC Preferred)"); - /* Call Identifier 3.2.2.104 MSC-BSS O (note 12) 5 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CALL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CALL_ID, NULL); + /* Channel Type 3.2.2.11 MSC-BSS M 5-13 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CHAN_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHAN_TYPE, NULL); + /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note 3) 4 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_HEADER_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_HEADER_INFO, NULL); + /* Priority 3.2.2.18 MSC-BSS O 3 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_PRIO, NULL); + /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 1, 12 3 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_DOWN_DTX_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_DOWN_DTX_FLAG, NULL); + /* Interference Band To Be Used 3.2.2.21 MSC-BSS O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_INT_BAND].value, BSSAP_PDU_TYPE_BSSMAP, BE_INT_BAND, NULL); + /* Classmark Information 2 3.2.2.19 MSC-BSS O (note 4) 4-5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_2].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_2, NULL); + /* Group Call Reference 3.2.2.55 MSC-BSS O (note 5) 7 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL); + /* Talker Flag 3.2.2.54 MSC-BSS O (note 6) 1 */ + ELEM_OPT_T(gsm_bssmap_elem_strings[BE_TALKER_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_FLAG, NULL); + /* Configuration Evolution Indication 3.2.2.57 MSC-BSS O (note 7) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CONF_EVO_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_CONF_EVO_IND, NULL); + /* LSA Access Control Suppression 3.2.2.61 MSC-BSS O (note 8) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_LSA_ACC_CTRL].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ACC_CTRL, NULL); + /* Service Handover 3.2.2.75 MSC-BSS O (note 9) 3 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SERV_HO].value, BSSAP_PDU_TYPE_BSSMAP, BE_SERV_HO, NULL); + /* Encryption Information 3.2.2.10 MSC-BSS O (note 10) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL); + /* Talker Priority 3.2.2.89 MSC-BSS O (note 11) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* AoIP Transport Layer Address (MGW) 3.2.2.102 MSC-BSS O (note 12) 10-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); + /* Codec List (MSC Preferred) 3.2.2.103 MSC-BSS O (note 13) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(MSC Preferred)"); + /* Call Identifier 3.2.2.104 MSC-BSS O (note 12) 5 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CALL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CALL_ID, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4192,37 +4192,37 @@ bssmap_ass_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ass_complete(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* RR Cause 3.2.2.22 BSS-MSC O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL); - /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 4) 3 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Cell Identifier 3.2.2.17 BSS-MSC O (note 1) 3-10 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Chosen Channel 3.2.2.33 BSS-MSC O (note 3) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); - /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 5) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL); - /* Circuit Pool 3.2.2.45 BSS-MSC O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL); - /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 6) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Chosen)"); - /* LSA Identifier 3.2.2.15 BSS-MSC O (note 7) 5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ID, NULL); - /* Talker Priority 3.2.2.89 BSS-MSC O (note 8) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* AoIP Transport Layer Address (BSS) 3.2.2.102 BSS-MSC O (note 9) 10-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); - /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 10) 3-5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); + /* RR Cause 3.2.2.22 BSS-MSC O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL); + /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 4) 3 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Cell Identifier 3.2.2.17 BSS-MSC O (note 1) 3-10 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Chosen Channel 3.2.2.33 BSS-MSC O (note 3) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); + /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 5) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL); + /* Circuit Pool 3.2.2.45 BSS-MSC O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL); + /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 6) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Chosen)"); + /* LSA Identifier 3.2.2.15 BSS-MSC O (note 7) 5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ID, NULL); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 8) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* AoIP Transport Layer Address (BSS) 3.2.2.102 BSS-MSC O (note 9) 10-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); + /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 10) 3-5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4231,27 +4231,27 @@ bssmap_ass_complete(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ass_failure(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* RR Cause 3.2.2.22 BSS-MSC O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL); - /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL); - /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CCT_POOL_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL_LIST, NULL); - /* Talker Priority 3.2.2.89 BSS-MSC O (note 3) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 4) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* RR Cause 3.2.2.22 BSS-MSC O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL); + /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL); + /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CCT_POOL_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL_LIST, NULL); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 3) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 4) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4260,21 +4260,21 @@ bssmap_ass_failure(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_block(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity Code 3.2.2.2 both M 3*/ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Cause 3.2.2.5 both M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Connection Release Requested 3.2.2.3 MSC-BSS O 1 */ - ELEM_OPT_T(gsm_bssmap_elem_strings[BE_CONN_REL_REQ].value, BSSAP_PDU_TYPE_BSSMAP, BE_CONN_REL_REQ, NULL); + /* Circuit Identity Code 3.2.2.2 both M 3*/ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Cause 3.2.2.5 both M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Connection Release Requested 3.2.2.3 MSC-BSS O 1 */ + ELEM_OPT_T(gsm_bssmap_elem_strings[BE_CONN_REL_REQ].value, BSSAP_PDU_TYPE_BSSMAP, BE_CONN_REL_REQ, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4284,17 +4284,17 @@ bssmap_block(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_block_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity Code 3.2.2.2 both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Identity Code 3.2.2.2 both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4303,17 +4303,17 @@ bssmap_block_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_unblock(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity Code 3.2.2.2 both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Identity Code 3.2.2.2 both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4322,17 +4322,17 @@ bssmap_unblock(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_unblock_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity Code 3.2.2.2 both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Identity Code 3.2.2.2 both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4341,79 +4341,79 @@ bssmap_unblock_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Channel Type 3.2.2.11 MSC-BSS M 5-13 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CHAN_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHAN_TYPE, NULL); - /* Encryption Information 3.2.2.10 MSC-BSS M (note 1) 3-n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL); + /* Channel Type 3.2.2.11 MSC-BSS M 5-13 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CHAN_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHAN_TYPE, NULL); + /* Encryption Information 3.2.2.10 MSC-BSS M (note 1) 3-n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL); - /* Classmark Information 1 3.2.2.30 MSC-BSS M# 2 - * or - * Classmark Information 2 3.2.2.19 MSC-BSS M (note 6) 4-5 - */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CM_INFO_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_1, NULL); + /* Classmark Information 1 3.2.2.30 MSC-BSS M# 2 + * or + * Classmark Information 2 3.2.2.19 MSC-BSS M (note 6) 4-5 + */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CM_INFO_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_1, NULL); - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_2].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_2, NULL); - /* Cell Identifier (Serving) 3.2.2.17 MSC-BSS M (note 20) 5-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, " (Serving)"); - /* Priority 3.2.2.18 MSC-BSS O 3 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_PRIO, NULL); - /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 7, 28 3 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 3) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_DOWN_DTX_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_DOWN_DTX_FLAG, NULL); - /* Cell Identifier (Target) 3.2.2.17 MSC-BSS M (note 17) 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, " (Target)"); - /* Interference Band To Be Used 3.2.2.21 MSC-BSS O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_INT_BAND].value, BSSAP_PDU_TYPE_BSSMAP, BE_INT_BAND, NULL); - /* Cause 3.2.2.5 MSC-BSS O (note 9) 3-4 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Classmark Information 3 3.2.2.20 MSC-BSS O (note 4) 3-34 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL); - /* Current Channel type 1 3.2.2.49 MSC-BSS O (note 8) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL); - /* Speech Version (Used) 3.2.2.51 MSC-BSS O (note 10) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Used)"); - /* Group Call Reference 3.2.2.55 MSC-BSS O (note 5) 7 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL); - /* Talker Flag 3.2.2.54 MSC-BSS O (note 11) 1 */ - ELEM_OPT_T(gsm_bssmap_elem_strings[BE_TALKER_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_FLAG, NULL); - /* Configuration Evolution Indication 3.2.2.57 MSC-BSS O (note 12) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CONF_EVO_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_CONF_EVO_IND, NULL); - /* Chosen Encryption Algorithm (Serving) 3.2.2.44 MSC-BSS O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, " (Serving)"); - /* Old BSS to New BSS Information 3.2.2.58 MSC-BSS O (note 13) 2-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OLD2NEW_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_OLD2NEW_INFO, NULL); - /* LSA Information 3.2.2.23 MSC-BSS O (note 14) 3+4n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_INFO, NULL); - /* LSA Access Control Suppression 3.2.2.61 MSC-BSS O (note 15) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_LSA_ACC_CTRL].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ACC_CTRL, NULL); - /* Service Handover 3.2.2.75 MSC-BSS O (note 21) 3 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SERV_HO].value, BSSAP_PDU_TYPE_BSSMAP, BE_SERV_HO, NULL); - /* IMSI 3.2.2.6 MSC-BSC O (note 16) 3-10 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* Source RNC to target RNC transparent information (UMTS) 3.2.2.76 MSC-BSS O (note 18) n-m */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_UMTS].value, BSSAP_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_UMTS, NULL); - /* Source RNC to target RNC transparent information (cdma2000) 3.2.2.77 MSC-BSS O (note 19) n-m */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_CDMA].value, BSSAP_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_CDMA, NULL); - /* SNA Access Information 3.2.2.82 MSC-BSC O (note 22) 2+n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SNA_ACC_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_SNA_ACC_INF, NULL); - /* Talker Priority 3.2.2.89 MSC-BSC O (note 23) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* AoIP Transport Layer Address (MGW) 3.2.2.102 MSC-BSS O (note 24) 10-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); - /* Codec List (MSC Preferred) 3.2.2.103 MSC-BSS O (note 25) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(MSC Preferred)"); - /* Call Identifier 3.2.2.105 MSC-BSS O (note 24) 5 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CALL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CALL_ID, NULL); + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_2].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_2, NULL); + /* Cell Identifier (Serving) 3.2.2.17 MSC-BSS M (note 20) 5-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, " (Serving)"); + /* Priority 3.2.2.18 MSC-BSS O 3 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_PRIO, NULL); + /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 7, 28 3 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 3) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_DOWN_DTX_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_DOWN_DTX_FLAG, NULL); + /* Cell Identifier (Target) 3.2.2.17 MSC-BSS M (note 17) 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, " (Target)"); + /* Interference Band To Be Used 3.2.2.21 MSC-BSS O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_INT_BAND].value, BSSAP_PDU_TYPE_BSSMAP, BE_INT_BAND, NULL); + /* Cause 3.2.2.5 MSC-BSS O (note 9) 3-4 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Classmark Information 3 3.2.2.20 MSC-BSS O (note 4) 3-34 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL); + /* Current Channel type 1 3.2.2.49 MSC-BSS O (note 8) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL); + /* Speech Version (Used) 3.2.2.51 MSC-BSS O (note 10) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Used)"); + /* Group Call Reference 3.2.2.55 MSC-BSS O (note 5) 7 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL); + /* Talker Flag 3.2.2.54 MSC-BSS O (note 11) 1 */ + ELEM_OPT_T(gsm_bssmap_elem_strings[BE_TALKER_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_FLAG, NULL); + /* Configuration Evolution Indication 3.2.2.57 MSC-BSS O (note 12) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CONF_EVO_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_CONF_EVO_IND, NULL); + /* Chosen Encryption Algorithm (Serving) 3.2.2.44 MSC-BSS O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, " (Serving)"); + /* Old BSS to New BSS Information 3.2.2.58 MSC-BSS O (note 13) 2-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OLD2NEW_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_OLD2NEW_INFO, NULL); + /* LSA Information 3.2.2.23 MSC-BSS O (note 14) 3+4n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_INFO, NULL); + /* LSA Access Control Suppression 3.2.2.61 MSC-BSS O (note 15) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_LSA_ACC_CTRL].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ACC_CTRL, NULL); + /* Service Handover 3.2.2.75 MSC-BSS O (note 21) 3 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SERV_HO].value, BSSAP_PDU_TYPE_BSSMAP, BE_SERV_HO, NULL); + /* IMSI 3.2.2.6 MSC-BSC O (note 16) 3-10 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* Source RNC to target RNC transparent information (UMTS) 3.2.2.76 MSC-BSS O (note 18) n-m */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_UMTS].value, BSSAP_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_UMTS, NULL); + /* Source RNC to target RNC transparent information (cdma2000) 3.2.2.77 MSC-BSS O (note 19) n-m */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_CDMA].value, BSSAP_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_CDMA, NULL); + /* SNA Access Information 3.2.2.82 MSC-BSC O (note 22) 2+n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SNA_ACC_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_SNA_ACC_INF, NULL); + /* Talker Priority 3.2.2.89 MSC-BSC O (note 23) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* AoIP Transport Layer Address (MGW) 3.2.2.102 MSC-BSS O (note 24) 10-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); + /* Codec List (MSC Preferred) 3.2.2.103 MSC-BSS O (note 25) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(MSC Preferred)"); + /* Call Identifier 3.2.2.105 MSC-BSS O (note 24) 5 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CALL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CALL_ID, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4422,41 +4422,41 @@ bssmap_ho_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_reqd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Response Request 3.2.2.28 BSS-MSC O (note 8) 1 */ - ELEM_OPT_T(gsm_bssmap_elem_strings[BE_RESP_REQ].value, BSSAP_PDU_TYPE_BSSMAP, BE_RESP_REQ, NULL); - /* Cell Identifier List (Preferred) 3.2.2.27 BSS-MSC M (note 4) 2n+3 to 7n+3 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, " (Preferred)"); - /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 1) V */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CCT_POOL_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL_LIST, NULL); - /* Current Channel Type 1 3.2.2.49 BSS-MSC O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL); - /* Speech Version (Used) 3.2.2.51 BSS-MSC O (note 3) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Used)"); - /* Queueing Indicator 3.2.2.50 BSS-MSC O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_QUE_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_QUE_IND, NULL); - /* Old BSS to New BSS Information 3.2.2.58 BSS-MSC O 2-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OLD2NEW_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_OLD2NEW_INFO, NULL); - /* Source RNC to target RNC transparent information (UMTS) 3.2.2.76 BSS-MSC O (note 5) 3-m */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_UMTS].value, BSSAP_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_UMTS, NULL); - /* Source RNC to target RNC transparent information (cdma2000) 3.2.2.77 BSS-MSC O (note 6) n-m */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_CDMA].value, BSSAP_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_CDMA, NULL); - /* GERAN Classmark 3.2.2.78 BSS-MSC O (note 7) V */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GERAN_CLS_M].value, BSSAP_PDU_TYPE_BSSMAP, BE_GERAN_CLS_M, NULL); - /* Talker Priority 3.2.2.89 BSS-MSC O (note 9) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* Speech Codec (Used) 3.2.2.104 BSS-MSC O (note 10) 3-5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Used)"); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Response Request 3.2.2.28 BSS-MSC O (note 8) 1 */ + ELEM_OPT_T(gsm_bssmap_elem_strings[BE_RESP_REQ].value, BSSAP_PDU_TYPE_BSSMAP, BE_RESP_REQ, NULL); + /* Cell Identifier List (Preferred) 3.2.2.27 BSS-MSC M (note 4) 2n+3 to 7n+3 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, " (Preferred)"); + /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 1) V */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CCT_POOL_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL_LIST, NULL); + /* Current Channel Type 1 3.2.2.49 BSS-MSC O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL); + /* Speech Version (Used) 3.2.2.51 BSS-MSC O (note 3) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Used)"); + /* Queueing Indicator 3.2.2.50 BSS-MSC O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_QUE_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_QUE_IND, NULL); + /* Old BSS to New BSS Information 3.2.2.58 BSS-MSC O 2-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OLD2NEW_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_OLD2NEW_INFO, NULL); + /* Source RNC to target RNC transparent information (UMTS) 3.2.2.76 BSS-MSC O (note 5) 3-m */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_UMTS].value, BSSAP_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_UMTS, NULL); + /* Source RNC to target RNC transparent information (cdma2000) 3.2.2.77 BSS-MSC O (note 6) n-m */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SRC_RNC_TO_TAR_RNC_CDMA].value, BSSAP_PDU_TYPE_BSSMAP, BE_SRC_RNC_TO_TAR_RNC_CDMA, NULL); + /* GERAN Classmark 3.2.2.78 BSS-MSC O (note 7) V */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GERAN_CLS_M].value, BSSAP_PDU_TYPE_BSSMAP, BE_GERAN_CLS_M, NULL); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 9) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Speech Codec (Used) 3.2.2.104 BSS-MSC O (note 10) 3-5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Used)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4465,41 +4465,41 @@ bssmap_ho_reqd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_req_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Layer 3 Information 3.2.2.24 BSS-MSC M (note 1) 11-n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); - /* Chosen Channel 3.2.2.33 BSS-MSC O (note 4) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); - /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 5) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL); - /* Circuit Pool 3.2.2.45 BSS-MSC O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL); - /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 6) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Chosen)"); - /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 3) 3 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* LSA Identifier 3.2.2.15 BSS-MSC O (note 7) 5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ID, NULL); - /* New BSS to Old BSS Information 3.2.2.80 BSS-MSC O (note 8) 2-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL); - /* Inter-System Information 3.2.2.81 BSS-MSC O (note 9) 2-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_INTER_SYS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_INTER_SYS_INF, NULL); - /* Talker Priority 3.2.2.89 BSS-MSC O (note 10) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* AoIP Transport Layer Address (BSS) 3.2.2.102 BSS-MSC O (note 11) 10-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); - /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 12) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); - /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 12) 3-5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + /* Layer 3 Information 3.2.2.24 BSS-MSC M (note 1) 11-n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); + /* Chosen Channel 3.2.2.33 BSS-MSC O (note 4) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); + /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 5) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL); + /* Circuit Pool 3.2.2.45 BSS-MSC O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL); + /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 6) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Chosen)"); + /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 3) 3 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* LSA Identifier 3.2.2.15 BSS-MSC O (note 7) 5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ID, NULL); + /* New BSS to Old BSS Information 3.2.2.80 BSS-MSC O (note 8) 2-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL); + /* Inter-System Information 3.2.2.81 BSS-MSC O (note 9) 2-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_INTER_SYS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_INTER_SYS_INF, NULL); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 10) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* AoIP Transport Layer Address (BSS) 3.2.2.102 BSS-MSC O (note 11) 10-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); + /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 12) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); + /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 12) 3-5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4508,23 +4508,23 @@ bssmap_ho_req_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Layer 3 Information 3.2.2.24 MSC-BSS M (note 1) 11-n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); - /* Cell Identifier 3.2.2.17 MSC-BSS O 3-10 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* New BSS to Old BSS Information 3.2.2.80 MSC-BSS O (note 2) 2-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL); - /* Talker Priority 3.2.2.89 MSC-BSS O (note 3) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Layer 3 Information 3.2.2.24 MSC-BSS M (note 1) 11-n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); + /* Cell Identifier 3.2.2.17 MSC-BSS O 3-10 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* New BSS to Old BSS Information 3.2.2.80 MSC-BSS O (note 2) 2-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL); + /* Talker Priority 3.2.2.89 MSC-BSS O (note 3) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4533,40 +4533,40 @@ bssmap_ho_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_complete(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* RR Cause 3.2.2.22 BSS-MSC O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL); - /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* Speech Codec (Chosen) 3.2.2.nn BSS-MSC O (note 2) 3-5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); + /* RR Cause 3.2.2.22 BSS-MSC O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Speech Codec (Chosen) 3.2.2.nn BSS-MSC O (note 2) 3-5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.13 HANDOVER SUCCEEDED + * 3.2.1.13 HANDOVER SUCCEEDED */ static void bssmap_ho_succ(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4575,23 +4575,23 @@ bssmap_ho_succ(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_cand_enq(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Number Of Mss 3.2.2.8 MSC-BSS M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_NUM_MS].value, BSSAP_PDU_TYPE_BSSMAP, BE_NUM_MS, NULL); + /* Number Of Mss 3.2.2.8 MSC-BSS M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_NUM_MS].value, BSSAP_PDU_TYPE_BSSMAP, BE_NUM_MS, NULL); - /* Cell Identifier List 3.2.2.27 MSC-BSS M 2n+3 to 7n+3 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, NULL); + /* Cell Identifier List 3.2.2.27 MSC-BSS M 2n+3 to 7n+3 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, NULL); - /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4600,20 +4600,20 @@ bssmap_ho_cand_enq(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_cand_resp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Number Of Mss 3.2.2.8 BSS-MSC M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_NUM_MS].value, BSSAP_PDU_TYPE_BSSMAP, BE_NUM_MS, NULL); + /* Number Of Mss 3.2.2.8 BSS-MSC M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_NUM_MS].value, BSSAP_PDU_TYPE_BSSMAP, BE_NUM_MS, NULL); - /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4622,83 +4622,83 @@ bssmap_ho_cand_resp(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_failure(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* RR Cause 3.2.2.22 BSS-MSC O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL); - /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL); - /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CCT_POOL_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL_LIST, NULL); - /* GERAN Classmark 3.2.2.78 BSS-MSC O (note 3) V */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GERAN_CLS_M].value, BSSAP_PDU_TYPE_BSSMAP, BE_GERAN_CLS_M, NULL); - /* New BSS to Old BSS Information 3.2.2.80 BSS-MSC O (note 4) 2-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL); - /* Inter-System Information 3.2.2.81 BSS-MSC O (note 5) 2-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_INTER_SYS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_INTER_SYS_INF, NULL); - /* Talker Priority 3.2.2.89 BSS-MSC O (note 6) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 7) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* RR Cause 3.2.2.22 BSS-MSC O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_RR_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_RR_CAUSE, NULL); + /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CCT_POOL].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL, NULL); + /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CCT_POOL_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CCT_POOL_LIST, NULL); + /* GERAN Classmark 3.2.2.78 BSS-MSC O (note 3) V */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GERAN_CLS_M].value, BSSAP_PDU_TYPE_BSSMAP, BE_GERAN_CLS_M, NULL); + /* New BSS to Old BSS Information 3.2.2.80 BSS-MSC O (note 4) 2-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL); + /* Inter-System Information 3.2.2.81 BSS-MSC O (note 5) 2-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_INTER_SYS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_INTER_SYS_INF, NULL); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 6) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 7) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.17 RESOURCE REQUEST + * 3.2.1.17 RESOURCE REQUEST */ static void bssmap_res_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Periodicity 3.2.2.12 MSC-BSS M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_PERIODICITY].value, BSSAP_PDU_TYPE_BSSMAP, BE_PERIODICITY, NULL); - /* Resource Indication Method 3.2.2.29 MSC-BSS M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_RES_IND_METHOD].value, BSSAP_PDU_TYPE_BSSMAP, BE_RES_IND_METHOD, NULL); - /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Extended Resource Indicator 3.2.2.13 MSC-BSS O 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_EXT_RES_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_EXT_RES_IND, NULL); + /* Periodicity 3.2.2.12 MSC-BSS M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_PERIODICITY].value, BSSAP_PDU_TYPE_BSSMAP, BE_PERIODICITY, NULL); + /* Resource Indication Method 3.2.2.29 MSC-BSS M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_RES_IND_METHOD].value, BSSAP_PDU_TYPE_BSSMAP, BE_RES_IND_METHOD, NULL); + /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Extended Resource Indicator 3.2.2.13 MSC-BSS O 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_EXT_RES_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_EXT_RES_IND, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.18 RESOURCE INDICATION + * 3.2.1.18 RESOURCE INDICATION */ static void bssmap_res_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Resource Indication Method 3.2.2.29 BSS-MSC M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_RES_IND_METHOD].value, BSSAP_PDU_TYPE_BSSMAP, BE_RES_IND_METHOD, NULL); - /* Resource Available 3.2.2.4 BSS-MSC O (note 1) 21 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_RES_AVAIL].value, BSSAP_PDU_TYPE_BSSMAP, BE_RES_AVAIL, NULL); - /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Total Resource Accessible 3.2.2.14 BSS-MSC O (note 2) 5 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TOT_RES_ACC].value, BSSAP_PDU_TYPE_BSSMAP, BE_TOT_RES_ACC, NULL); + /* Resource Indication Method 3.2.2.29 BSS-MSC M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_RES_IND_METHOD].value, BSSAP_PDU_TYPE_BSSMAP, BE_RES_IND_METHOD, NULL); + /* Resource Available 3.2.2.4 BSS-MSC O (note 1) 21 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_RES_AVAIL].value, BSSAP_PDU_TYPE_BSSMAP, BE_RES_AVAIL, NULL); + /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Total Resource Accessible 3.2.2.14 BSS-MSC O (note 2) 5 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TOT_RES_ACC].value, BSSAP_PDU_TYPE_BSSMAP, BE_TOT_RES_ACC, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * [2] 3.2.1.19 PAGING @@ -4706,27 +4706,27 @@ bssmap_res_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_paging(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI 3.2.2.6 MSC-BSS M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* TMSI 3.2.2.7 MSC-BSS O (note 1) 6 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TMSI, NULL); - /* Cell Identifier List 3.2.2.27 MSC-BSS M 3 to 3+7n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, NULL); - /* Channel Needed 3.2.2.36 MSC-BSS O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHAN_NEEDED].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHAN_NEEDED, NULL); - /* eMLPP Priority 3.2.2.56 MSC-BSS O (note 3) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_EMLPP_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_EMLPP_PRIO, NULL); - /* Paging Information 3.2.2.85 MSC-BSS O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_PAGING_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_PAGING_INF, NULL); + /* IMSI 3.2.2.6 MSC-BSS M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* TMSI 3.2.2.7 MSC-BSS O (note 1) 6 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TMSI, NULL); + /* Cell Identifier List 3.2.2.27 MSC-BSS M 3 to 3+7n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, NULL); + /* Channel Needed 3.2.2.36 MSC-BSS O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHAN_NEEDED].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHAN_NEEDED, NULL); + /* eMLPP Priority 3.2.2.56 MSC-BSS O (note 3) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_EMLPP_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_EMLPP_PRIO, NULL); + /* Paging Information 3.2.2.85 MSC-BSS O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_PAGING_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_PAGING_INF, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4735,17 +4735,17 @@ bssmap_paging(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_clear_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4754,22 +4754,22 @@ bssmap_clear_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_clear_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note) 4 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_HEADER_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_HEADER_INFO, NULL); - /* Cause 3.2.2.5 MSC-BSS M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note) 4 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_HEADER_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_HEADER_INFO, NULL); + /* Cause 3.2.2.5 MSC-BSS M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.22 CLEAR COMPLETE + * 3.2.1.22 CLEAR COMPLETE * No data */ @@ -4779,21 +4779,21 @@ bssmap_clear_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) void bssmap_reset(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 Both M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cause 3.2.2.5 Both M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.24 RESET ACKNOWLEDGE + * 3.2.1.24 RESET ACKNOWLEDGE * No data */ /* @@ -4802,33 +4802,33 @@ bssmap_reset(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_performed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Cell Identifier 3.2.2.17 BSS-MSC M (note 5) 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Chosen Channel 3.2.2.33 BSS-MSC O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); - /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL); - /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 3) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Chosen)"); - /* LSA Identifier 3.2.2.15 BSS-MSC O (note 4) 5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ID, NULL); - /* Talker Priority 3.2.2.89 BSS-MSC O (note 6) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* Codec List (BSS Supported) (serving cell) 3.2.2.103 BSS-MSC O (note 7) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); - /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 8) 3-5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cell Identifier 3.2.2.17 BSS-MSC M (note 5) 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Chosen Channel 3.2.2.33 BSS-MSC O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); + /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL); + /* Speech Version (Chosen) 3.2.2.51 BSS-MSC O (note 3) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_SPEECH_VER].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_VER, " (Chosen)"); + /* LSA Identifier 3.2.2.15 BSS-MSC O (note 4) 5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ID, NULL); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 6) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Codec List (BSS Supported) (serving cell) 3.2.2.103 BSS-MSC O (note 7) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); + /* Speech Codec (Chosen) 3.2.2.104 BSS-MSC O (note 8) 3-5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4837,76 +4837,76 @@ bssmap_ho_performed(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_overload(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 Both M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Cell Identifier 3.2.2.17 BSS-MSC O 3-10 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Cause 3.2.2.5 Both M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cell Identifier 3.2.2.17 BSS-MSC O 3-10 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.27 MSC INVOKE TRACE + * 3.2.1.27 MSC INVOKE TRACE */ static void bssmap_msc_invoke_trace(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; /* Trace Type 3.2.2.37 MSC-BSS M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRACE_TYPE, NULL); - /* Triggerid 3.2.2.38 MSC-BSS O 3-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRIGGERID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRIGGERID, NULL); - /* Trace Reference 3.2.2.39 MSC-BSS M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRACE_REF, NULL); - /* Transactionid 3.2.2.40 MSC-BSS O 4 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRANSID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRANSID, NULL); - /* Mobile Identity 3.2.2.41 MSC-BSS O 3-10 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_MID].value, BSSAP_PDU_TYPE_BSSMAP, BE_MID, NULL); - /* OMCId 3.2.2.42 MSC-BSS O 3-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OMCID].value, BSSAP_PDU_TYPE_BSSMAP, BE_OMCID, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRACE_TYPE, NULL); + /* Triggerid 3.2.2.38 MSC-BSS O 3-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRIGGERID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRIGGERID, NULL); + /* Trace Reference 3.2.2.39 MSC-BSS M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRACE_REF, NULL); + /* Transactionid 3.2.2.40 MSC-BSS O 4 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRANSID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRANSID, NULL); + /* Mobile Identity 3.2.2.41 MSC-BSS O 3-10 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_MID].value, BSSAP_PDU_TYPE_BSSMAP, BE_MID, NULL); + /* OMCId 3.2.2.42 MSC-BSS O 3-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OMCID].value, BSSAP_PDU_TYPE_BSSMAP, BE_OMCID, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.28 BSS INVOKE TRACE + * 3.2.1.28 BSS INVOKE TRACE */ static void bssmap_bss_invoke_trace(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Trace Type 3.2.2.37 Both M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRACE_TYPE, NULL); - /* Forward Indicator 3.2.2.43 Both O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_FOR_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_FOR_IND, NULL); - /* Triggerid 3.2.2.38 Both O 3-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRIGGERID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRIGGERID, NULL); - /* Trace Reference 3.2.2.39 Both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRACE_REF, NULL); - /* TransactionId 3.2.2.40 Both O 4 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRANSID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRANSID, NULL); - /* OMCId 3.2.2.42 Both O 3-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OMCID].value, BSSAP_PDU_TYPE_BSSMAP, BE_OMCID, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + /* Trace Type 3.2.2.37 Both M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRACE_TYPE, NULL); + /* Forward Indicator 3.2.2.43 Both O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_FOR_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_FOR_IND, NULL); + /* Triggerid 3.2.2.38 Both O 3-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRIGGERID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRIGGERID, NULL); + /* Trace Reference 3.2.2.39 Both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TRACE_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRACE_REF, NULL); + /* TransactionId 3.2.2.40 Both O 4 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TRANSID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TRANSID, NULL); + /* OMCId 3.2.2.42 Both O 3-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_OMCID].value, BSSAP_PDU_TYPE_BSSMAP, BE_OMCID, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4915,21 +4915,21 @@ bssmap_bss_invoke_trace(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint l static void bssmap_cm_upd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Classmark Information Type 2 3.2.2.19 Both M 4-5 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_2].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_2, NULL); - /* Classmark Information Type 3 3.2.2.20 Both O (note 1) 3-34 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL); - /* Talker Priority 3.2.2.89 Both O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Classmark Information Type 2 3.2.2.19 Both M 4-5 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_2].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_2, NULL); + /* Classmark Information Type 3 3.2.2.20 Both O (note 1) 3-34 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL); + /* Talker Priority 3.2.2.89 Both O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4938,21 +4938,21 @@ bssmap_cm_upd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ciph_mode_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note) 4 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_HEADER_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_HEADER_INFO, NULL); - /* Encryption Information 3.2.2.10 MSC-BSS M 3-n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL); - /* Cipher Response Mode 3.2.2.34 MSC-BSS O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIPH_RESP_MODE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIPH_RESP_MODE, NULL); + /* Layer 3 Header Information 3.2.2.9 MSC-BSS O (note) 4 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_HEADER_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_HEADER_INFO, NULL); + /* Encryption Information 3.2.2.10 MSC-BSS M 3-n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL); + /* Cipher Response Mode 3.2.2.34 MSC-BSS O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIPH_RESP_MODE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIPH_RESP_MODE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4961,19 +4961,19 @@ bssmap_ciph_mode_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ciph_mode_complete(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Layer 3 Message Contents 3.2.2.35 BSS-MSC O 2-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_MSG].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_MSG, NULL); - /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL); + /* Layer 3 Message Contents 3.2.2.35 BSS-MSC O 2-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_MSG].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_MSG, NULL); + /* Chosen Encryption Algorithm 3.2.2.44 BSS-MSC O (note) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_ENC_ALG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_ENC_ALG, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -4982,30 +4982,30 @@ bssmap_ciph_mode_complete(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint static void bssmap_cl3_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 consumed; - guint32 curr_offset; - guint curr_len; + guint32 consumed; + guint32 curr_offset; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); - /* Chosen Channel 3.2.2.33 BSS-MSC O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); - /* LSA Identifier List 3.2.2.16 BSS-MSC O (note 2) 3+3n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST, NULL); - /* APDU 3.2.2.68 BSS-MSC O (note 3) 3-n */ - ELEM_OPT_TLV_E(gsm_bssmap_elem_strings[BE_APDU].value, BSSAP_PDU_TYPE_BSSMAP, BE_APDU, NULL); - /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 4) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); + /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); + /* Chosen Channel 3.2.2.33 BSS-MSC O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); + /* LSA Identifier List 3.2.2.16 BSS-MSC O (note 2) 3+3n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LSA_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_ID_LIST, NULL); + /* APDU 3.2.2.68 BSS-MSC O (note 3) 3-n */ + ELEM_OPT_TLV_E(gsm_bssmap_elem_strings[BE_APDU].value, BSSAP_PDU_TYPE_BSSMAP, BE_APDU, NULL); + /* Codec List (BSS Supported) 3.2.2.103 BSS-MSC O (note 4) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.33 QUEUEING INDICATION + * 3.2.1.33 QUEUEING INDICATION * No data */ @@ -5015,22 +5015,22 @@ bssmap_cl3_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_sapi_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 consumed; - guint32 curr_offset; - guint curr_len; + guint32 consumed; + guint32 curr_offset; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* DLCI 3.2.2.25 BSS-MSC M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_DLCI].value, BSSAP_PDU_TYPE_BSSMAP, BE_DLCI, NULL); - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* DLCI 3.2.2.25 BSS-MSC M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_DLCI].value, BSSAP_PDU_TYPE_BSSMAP, BE_DLCI, NULL); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } -/* 3.2.1.35 (void) - * 3.2.1.36 (void) +/* 3.2.1.35 (void) + * 3.2.1.36 (void) */ /* * [2] 3.2.1.37 HANDOVER REQUIRED REJECT @@ -5038,21 +5038,21 @@ bssmap_sapi_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_ho_reqd_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 MSC-BSS M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* New BSS to Old BSS Information 3.2.2.78 MSC-BSS O (note 1) 2-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL); - /* Talker Priority 3.2.2.89 MSC-BSS O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Cause 3.2.2.5 MSC-BSS M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* New BSS to Old BSS Information 3.2.2.78 MSC-BSS O (note 1) 2-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_NEW_BSS_TO_OLD_BSS_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_NEW_BSS_TO_OLD_BSS_INF, NULL); + /* Talker Priority 3.2.2.89 MSC-BSS O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5061,19 +5061,19 @@ bssmap_ho_reqd_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_reset_cct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity Code 3.2.2.2 Both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Cause 3.2.2.5 Both M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Circuit Identity Code 3.2.2.2 Both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Cause 3.2.2.5 Both M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5082,36 +5082,36 @@ bssmap_reset_cct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_reset_cct_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity 3.2.2.2 Both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Identity 3.2.2.2 Both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.40 HANDOVER DETECT + * 3.2.1.40 HANDOVER DETECT */ static void bssmap_ho_det(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * [2] 3.2.1.41 CIRCUIT GROUP BLOCK @@ -5119,21 +5119,21 @@ bssmap_ho_det(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_cct_group_block(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 Both M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Circuit Identity Code 3.2.2.2 Both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); + /* Cause 3.2.2.5 Both M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Circuit Identity Code 3.2.2.2 Both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5142,19 +5142,19 @@ bssmap_cct_group_block(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint le static void bssmap_cct_group_block_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity Code 3.2.2.2 Both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); + /* Circuit Identity Code 3.2.2.2 Both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5163,19 +5163,19 @@ bssmap_cct_group_block_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guin static void bssmap_cct_group_unblock(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity Code 3.2.2.2 Both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); + /* Circuit Identity Code 3.2.2.2 Both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5184,19 +5184,19 @@ bssmap_cct_group_unblock(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint static void bssmap_cct_group_unblock_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity Code 3.2.2.2 Both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); + /* Circuit Identity Code 3.2.2.2 Both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Identity Code List 3.2.2.31 Both M 4-35 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5205,37 +5205,37 @@ bssmap_cct_group_unblock_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, gu static void bssmap_confusion(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 Both M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Diagnostics 3.2.2.32 Both M 4-n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_DIAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_DIAG, NULL); + /* Cause 3.2.2.5 Both M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Diagnostics 3.2.2.32 Both M 4-n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_DIAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_DIAG, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.46 CLASSMARK REQUEST + * 3.2.1.46 CLASSMARK REQUEST */ static void bssmap_cls_m_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * [2] 3.2.1.47 UNEQUIPPED CIRCUIT @@ -5243,19 +5243,19 @@ bssmap_cls_m_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_unequipped_cct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit Identity Code 3.2.2.2 Both M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Circuit Identity Code List 3.2.2.31 Both O 4-35 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); + /* Circuit Identity Code 3.2.2.2 Both M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Identity Code List 3.2.2.31 Both O 4-35 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CIC_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC_LIST, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5264,17 +5264,17 @@ bssmap_unequipped_cct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len static void bssmap_ciph_mode_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5283,384 +5283,384 @@ bssmap_ciph_mode_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_load_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Time Indication 3.2.2.47 Both M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TIME_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_TIME_IND, NULL); - /* Cell Identifier 3.2.2.17 Both M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Cell Identifier List (Target) 3.2.2.27 Both M 3 to 3+7n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, " (Target)"); - /* Resource Situation 3.2.2.48 Both O (note 1) 4-N */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_RES_SIT].value, BSSAP_PDU_TYPE_BSSMAP, BE_RES_SIT, NULL); - /* Cause 3.2.2.5 Both O (note 2) 4-5 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Time Indication 3.2.2.47 Both M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_TIME_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_TIME_IND, NULL); + /* Cell Identifier 3.2.2.17 Both M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Cell Identifier List (Target) 3.2.2.27 Both M 3 to 3+7n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST, " (Target)"); + /* Resource Situation 3.2.2.48 Both O (note 1) 4-N */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_RES_SIT].value, BSSAP_PDU_TYPE_BSSMAP, BE_RES_SIT, NULL); + /* Cause 3.2.2.5 Both O (note 2) 4-5 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.50 VGCS/VBS SETUP + * 3.2.1.50 VGCS/VBS SETUP */ static void bssmap_vgcs_vbs_setup(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Group Call Reference 3.2.2.55 MSC-BSS M 7 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL); - /* Priority 3.2.2.18 MSC-BSS O 3 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_PRIO, NULL); - /* VGCS Feature Flags 3.2.2.88 MSC-BSS O 3 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VGCS_FEAT_FLG].value, BSSAP_PDU_TYPE_BSSMAP, BE_VGCS_FEAT_FLG, NULL); + /* Group Call Reference 3.2.2.55 MSC-BSS M 7 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL); + /* Priority 3.2.2.18 MSC-BSS O 3 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_PRIO, NULL); + /* VGCS Feature Flags 3.2.2.88 MSC-BSS O 3 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VGCS_FEAT_FLG].value, BSSAP_PDU_TYPE_BSSMAP, BE_VGCS_FEAT_FLG, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.51 VGCS/VBS SETUP ACK + * 3.2.1.51 VGCS/VBS SETUP ACK */ static void bssmap_vgcs_vbs_setup_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* VGCS Feature Flags 3.2.2.88 BSS-MSC O(note 1) 3 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VGCS_FEAT_FLG].value, BSSAP_PDU_TYPE_BSSMAP, BE_VGCS_FEAT_FLG, NULL); + /* VGCS Feature Flags 3.2.2.88 BSS-MSC O(note 1) 3 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VGCS_FEAT_FLG].value, BSSAP_PDU_TYPE_BSSMAP, BE_VGCS_FEAT_FLG, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.52 VGCS/VBS SETUP REFUSE + * 3.2.1.52 VGCS/VBS SETUP REFUSE */ static void bssmap_vgcs_vbs_setup_refuse(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.53 VGCS/VBS ASSIGNMENT REQUEST + * 3.2.1.53 VGCS/VBS ASSIGNMENT REQUEST */ static void bssmap_vgcs_vbs_ass_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Channel Type 3.2.2.11 MSC-BSS M (note 2) 5-13 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL); - /* Assignment Requirement 3.2.2.52 MSC-BSS M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_ASS_REQ].value, BSSAP_PDU_TYPE_BSSMAP, BE_ASS_REQ, NULL); - /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Group Call Reference 3.2.2.55 MSC-BSS M 7 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL); - /* Priority 3.2.2.18 MSC-BSS O 3 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_PRIO, NULL); - /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 4, 5) 3 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 2, 4) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_DOWN_DTX_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_DOWN_DTX_FLAG, NULL); - /* Encryption Information 3.2.2.10 MSC-BSS O 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL); - /* VSTK_RAND 3.2.2.83 MSC-BSS O (note 1) 7 */ - /* VSTK 3.2.2.84 MSC-BSS O (note 1) 18 */ - /* Cell Identifier List Segment 3.2.2.27a MSC-BSS O (note 3) 4-? */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST_SEG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST_SEG, NULL); + /* Channel Type 3.2.2.11 MSC-BSS M (note 2) 5-13 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL); + /* Assignment Requirement 3.2.2.52 MSC-BSS M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_ASS_REQ].value, BSSAP_PDU_TYPE_BSSMAP, BE_ASS_REQ, NULL); + /* Cell Identifier 3.2.2.17 MSC-BSS M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Group Call Reference 3.2.2.55 MSC-BSS M 7 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_GROUP_CALL_REF].value, BSSAP_PDU_TYPE_BSSMAP, BE_GROUP_CALL_REF, NULL); + /* Priority 3.2.2.18 MSC-BSS O 3 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_PRIO, NULL); + /* Circuit Identity Code 3.2.2.2 MSC-BSS O (note 4, 5) 3 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Downlink DTX Flag 3.2.2.26 MSC-BSS O (note 2, 4) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_DOWN_DTX_FLAG].value, BSSAP_PDU_TYPE_BSSMAP, BE_DOWN_DTX_FLAG, NULL); + /* Encryption Information 3.2.2.10 MSC-BSS O 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_ENC_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_ENC_INFO, NULL); + /* VSTK_RAND 3.2.2.83 MSC-BSS O (note 1) 7 */ + /* VSTK 3.2.2.84 MSC-BSS O (note 1) 18 */ + /* Cell Identifier List Segment 3.2.2.27a MSC-BSS O (note 3) 4-? */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST_SEG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST_SEG, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.54 VGCS/VBS ASSIGNMENT RESULT + * 3.2.1.54 VGCS/VBS ASSIGNMENT RESULT */ static void bssmap_vgcs_vbs_ass_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Channel Type 3.2.2.11 BSS-MSC M (note 3, 4) 5 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL); - /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Chosen Channel 3.2.2.33 BSS-MSC O (note 2) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); - /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 5) 3 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */ - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + /* Channel Type 3.2.2.11 BSS-MSC M (note 3, 4) 5 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CURR_CHAN_1].value, BSSAP_PDU_TYPE_BSSMAP, BE_CURR_CHAN_1, NULL); + /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Chosen Channel 3.2.2.33 BSS-MSC O (note 2) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); + /* Circuit Identity Code 3.2.2.2 BSS-MSC O (note 5) 3 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */ + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.55 VGCS/VBS ASSIGNMENT FAILURE + * 3.2.1.55 VGCS/VBS ASSIGNMENT FAILURE */ static void bssmap_vgcs_vbs_ass_fail(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */ - /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */ - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Circuit Pool 3.2.2.45 BSS-MSC O (note 1) 2 */ + /* Circuit Pool List 3.2.2.46 BSS-MSC O (note 2) V */ + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.56 VGCS/VBS QUEUING INDICATION + * 3.2.1.56 VGCS/VBS QUEUING INDICATION * No data */ /* - * 3.2.1.57 UPLINK REQUEST + * 3.2.1.57 UPLINK REQUEST */ static void bssmap_uplink_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* Cell Identifier 3.2.2.17 BSS-MSC O (note 1) 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Layer 3 Information 3.2.2.24 BSS-MSC O (note 1,3) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); - /* Mobile Identity 3.2.2.41 BSS-MSC O (note 1,2) 3-n */ - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Cell Identifier 3.2.2.17 BSS-MSC O (note 1) 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Layer 3 Information 3.2.2.24 BSS-MSC O (note 1,3) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); + /* Mobile Identity 3.2.2.41 BSS-MSC O (note 1,2) 3-n */ + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.58 UPLINK REQUEST ACKNOWLEDGE + * 3.2.1.58 UPLINK REQUEST ACKNOWLEDGE */ static void bssmap_uplink_req_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* Emergency set indication 3.2.2.90 MSC-BSS O (note 1) 1 */ - ELEM_OPT_T(gsm_bssmap_elem_strings[BE_EMRG_SET_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_EMRG_SET_IND, NULL); - /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Emergency set indication 3.2.2.90 MSC-BSS O (note 1) 1 */ + ELEM_OPT_T(gsm_bssmap_elem_strings[BE_EMRG_SET_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_EMRG_SET_IND, NULL); + /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.59 UPLINK REQUEST CONFIRMATION + * 3.2.1.59 UPLINK REQUEST CONFIRMATION */ static void bssmap_uplink_req_conf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Talker Identity 3.2.2.91 BSS-MSC O 3-20 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); - /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Talker Identity 3.2.2.91 BSS-MSC O 3-20 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); + /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.59a UPLINK APPLICATION DATA + * 3.2.1.59a UPLINK APPLICATION DATA */ static void bssmap_uplink_app_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); - /* Application Data information 3.2.2.100 BSS-MSC M 3 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_APP_DATA_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_APP_DATA_INF, NULL); + /* Cell Identifier 3.2.2.17 BSS-MSC M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Layer 3 Information 3.2.2.24 BSS-MSC M 3-n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); + /* Application Data information 3.2.2.100 BSS-MSC M 3 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_APP_DATA_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_APP_DATA_INF, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.60 UPLINK RELEASE INDICATION + * 3.2.1.60 UPLINK RELEASE INDICATION */ static void bssmap_uplink_rel_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Talker Priority 3.2.2.89 BSS-MSC O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.61 UPLINK REJECT COMMAND + * 3.2.1.61 UPLINK REJECT COMMAND */ static void bssmap_uplink_rej_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 MSC-BSS M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Current Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, "Current"); - /* Rejected Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, "Rejected"); - /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); + /* Cause 3.2.2.5 MSC-BSS M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Current Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, "Current"); + /* Rejected Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, "Rejected"); + /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.62 UPLINK RELEASE COMMAND + * 3.2.1.62 UPLINK RELEASE COMMAND */ static void bssmap_uplink_rel_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 MSC-BSS M 3-4 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cause 3.2.2.5 MSC-BSS M 3-4 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.63 UPLINK SEIZED COMMAND + * 3.2.1.63 UPLINK SEIZED COMMAND */ static void bssmap_uplink_seized_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 MSC-BSS M 3-4 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); - /* Emergency set indication 3.2.2.90 MSC-BSS O (note 1) 1 */ - ELEM_OPT_T(gsm_bssmap_elem_strings[BE_EMRG_SET_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_EMRG_SET_IND, NULL); - /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); + /* Cause 3.2.2.5 MSC-BSS M 3-4 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Talker Priority 3.2.2.89 MSC-BSS O (note 1) 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_TALKER_PRI].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_PRI, NULL); + /* Emergency set indication 3.2.2.90 MSC-BSS O (note 1) 1 */ + ELEM_OPT_T(gsm_bssmap_elem_strings[BE_EMRG_SET_IND].value, BSSAP_PDU_TYPE_BSSMAP, BE_EMRG_SET_IND, NULL); + /* Talker Identity 3.2.2.91 MSC-BSS O 3-20 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.64 SUSPEND + * 3.2.1.64 SUSPEND */ static void bssmap_sus(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* DLCI 3.2.2.25 BSS-MSC M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_DLCI].value, BSSAP_PDU_TYPE_BSSMAP, BE_DLCI, NULL); + /* DLCI 3.2.2.25 BSS-MSC M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_DLCI].value, BSSAP_PDU_TYPE_BSSMAP, BE_DLCI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.65 RESUME + * 3.2.1.65 RESUME */ static void bssmap_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* DLCI 3.2.2.25 BSS-MSC M 2 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_DLCI].value, BSSAP_PDU_TYPE_BSSMAP, BE_DLCI, NULL); + /* DLCI 3.2.2.25 BSS-MSC M 2 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_DLCI].value, BSSAP_PDU_TYPE_BSSMAP, BE_DLCI, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * [2] 3.2.1.66 CHANGE CIRCUIT @@ -5668,17 +5668,17 @@ bssmap_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_change_cct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 MSC-BSS M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cause 3.2.2.5 MSC-BSS M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5687,17 +5687,17 @@ bssmap_change_cct(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_change_cct_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Circuit identity 3.2.2.2 BSS-MSC M 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* Circuit identity 3.2.2.2 BSS-MSC M 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5706,19 +5706,19 @@ bssmap_change_cct_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len static void bssmap_common_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* IMSI 3.2.2.6 MSC-BSS M 3-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* SNA Access Information 3.2.2.82 MSC-BSC O (note) 2+n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SNA_ACC_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_SNA_ACC_INF, NULL); + /* IMSI 3.2.2.6 MSC-BSS M 3-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* SNA Access Information 3.2.2.82 MSC-BSC O (note) 2+n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SNA_ACC_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_SNA_ACC_INF, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5727,17 +5727,17 @@ bssmap_common_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_lsa_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* LSA Information 3.2.2.23 MSC-BSS M 3+4n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_LSA_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_INFO, NULL); + /* LSA Information 3.2.2.23 MSC-BSS M 3+4n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_LSA_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_LSA_INFO, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5746,18 +5746,18 @@ bssmap_lsa_info(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) void bssmap_conn_oriented(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - ELEM_MAND_TLV_E(gsm_bssmap_elem_strings[BE_APDU].value, BSSAP_PDU_TYPE_BSSMAP, BE_APDU, NULL); + ELEM_MAND_TLV_E(gsm_bssmap_elem_strings[BE_APDU].value, BSSAP_PDU_TYPE_BSSMAP, BE_APDU, NULL); - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SEG].value, BSSAP_PDU_TYPE_BSSMAP, BE_SEG, NULL); + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SEG].value, BSSAP_PDU_TYPE_BSSMAP, BE_SEG, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* @@ -5766,41 +5766,41 @@ bssmap_conn_oriented(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_perf_loc_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Location Type 3.2.2.63 M 3-n */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_LOC_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_LOC_TYPE , NULL); - /* Cell Identifier 3.2.2.17 O 5-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* Classmark Information Type 3 3.2.2.20 O 3-14 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL); - /* LCS Client Type 3.2.2.67 C (note 3) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CLIENT].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE, NULL); - /* Chosen Channel 3.2.2.33 O 2 */ - ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); - /* LCS Priority 3.2.2.62 O 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_LCS_PRIO, NULL); - /* LCS QoS 3.2.2.60 C (note 1) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_QOS].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS, NULL); - /* GPS Assistance Data 3.2.2.70 C (note 2) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GPS_ASSIST_DATA].value, BSSAP_PDU_TYPE_BSSMAP, BE_GPS_ASSIST_DATA, NULL); - /* APDU 3.2.2.68 O 3-n */ - ELEM_OPT_TLV_E(gsm_bssmap_elem_strings[BE_APDU].value, BSSAP_PDU_TYPE_BSSMAP, BE_APDU, NULL); - /* IMSI 3.2.2.6 O (note 4) 5-10 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMSI, NULL); - /* IMEI 3.2.2.86 O (note 4) 10 (use same decode as IMSI) */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_IMEI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMEI, NULL); - /* GANSS Location Type 3.2.2.97 C 3 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GANSS_LOC_TYP].value, BSSAP_PDU_TYPE_BSSMAP, BE_GANSS_LOC_TYP, NULL); - /* GANSS Assistance Data 3.2.2.95 C (note 5) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GANSS_ASS_DTA].value, BSSAP_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA, NULL); + /* Location Type 3.2.2.63 M 3-n */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_LOC_TYPE].value, BSSAP_PDU_TYPE_BSSMAP, BE_LOC_TYPE , NULL); + /* Cell Identifier 3.2.2.17 O 5-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* Classmark Information Type 3 3.2.2.20 O 3-14 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CM_INFO_3].value, BSSAP_PDU_TYPE_BSSMAP, BE_CM_INFO_3, NULL); + /* LCS Client Type 3.2.2.67 C (note 3) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CLIENT].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CLIENT_TYPE, NULL); + /* Chosen Channel 3.2.2.33 O 2 */ + ELEM_OPT_TV(gsm_bssmap_elem_strings[BE_CHOSEN_CHAN].value, BSSAP_PDU_TYPE_BSSMAP, BE_CHOSEN_CHAN, NULL); + /* LCS Priority 3.2.2.62 O 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_PRIO].value, BSSAP_PDU_TYPE_BSSMAP, BE_LCS_PRIO, NULL); + /* LCS QoS 3.2.2.60 C (note 1) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_QOS].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCSQOS, NULL); + /* GPS Assistance Data 3.2.2.70 C (note 2) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GPS_ASSIST_DATA].value, BSSAP_PDU_TYPE_BSSMAP, BE_GPS_ASSIST_DATA, NULL); + /* APDU 3.2.2.68 O 3-n */ + ELEM_OPT_TLV_E(gsm_bssmap_elem_strings[BE_APDU].value, BSSAP_PDU_TYPE_BSSMAP, BE_APDU, NULL); + /* IMSI 3.2.2.6 O (note 4) 5-10 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_IMSI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMSI, NULL); + /* IMEI 3.2.2.86 O (note 4) 10 (use same decode as IMSI) */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_IMEI].value, BSSAP_PDU_TYPE_BSSMAP, BE_IMEI, NULL); + /* GANSS Location Type 3.2.2.97 C 3 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GANSS_LOC_TYP].value, BSSAP_PDU_TYPE_BSSMAP, BE_GANSS_LOC_TYP, NULL); + /* GANSS Assistance Data 3.2.2.95 C (note 5) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GANSS_ASS_DTA].value, BSSAP_PDU_TYPE_BSSMAP, BE_GANSS_ASS_DTA, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 3.2.1.72 PERFORM LOCATION RESPONSE @@ -5808,27 +5808,27 @@ bssmap_perf_loc_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) static void bssmap_perf_loc_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Location Estimate 3.2.2.64 C (note 1) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LOC_EST].value, BSSAP_PDU_TYPE_BSSMAP, BE_LOC_EST, NULL); - /* Positioning Data 3.2.2.65 O 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_POS_DATA].value, BSSAP_PDU_TYPE_BSSMAP, BE_POS_DATA, NULL); - /* Deciphering Keys 3.2.2.71 C (note 2) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_DECIPH_KEYS].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_DECIPH_KEYS, NULL); - /* LCS Cause 3.2.2.66 C (note 3) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); - /* Velocity Estimate 3.2.2.87 O 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VEL_EST].value, BSSAP_PDU_TYPE_BSSMAP, BE_VEL_EST, NULL); - /* GANSS Positioning Data 3.2.2.96 O 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GANSS_POS_DTA].value, BSSAP_PDU_TYPE_BSSMAP, BE_GANSS_POS_DTA, NULL); + /* Location Estimate 3.2.2.64 C (note 1) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LOC_EST].value, BSSAP_PDU_TYPE_BSSMAP, BE_LOC_EST, NULL); + /* Positioning Data 3.2.2.65 O 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_POS_DATA].value, BSSAP_PDU_TYPE_BSSMAP, BE_POS_DATA, NULL); + /* Deciphering Keys 3.2.2.71 C (note 2) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_DECIPH_KEYS].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_DECIPH_KEYS, NULL); + /* LCS Cause 3.2.2.66 C (note 3) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); + /* Velocity Estimate 3.2.2.87 O 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_VEL_EST].value, BSSAP_PDU_TYPE_BSSMAP, BE_VEL_EST, NULL); + /* GANSS Positioning Data 3.2.2.96 O 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_GANSS_POS_DTA].value, BSSAP_PDU_TYPE_BSSMAP, BE_GANSS_POS_DTA, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* * 3.2.1.73 PERFORM LOCATION ABORT @@ -5836,846 +5836,846 @@ bssmap_perf_loc_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) void bssmap_perf_loc_abort(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* LCS Cause 3.2.2.66 M 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); + /* LCS Cause 3.2.2.66 M 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_LCS_CAUSE].value, GSM_PDU_TYPE_BSSMAP_LE, DE_BMAPLE_LCS_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.74 CONNECTIONLESS INFORMATION + * 3.2.1.74 CONNECTIONLESS INFORMATION * -Network Element Identity (source) 3.2.2.69 Both M 3-n -Network Element Identity (target) 3.2.2.69 Both M 3-n -APDU 3.2.2.68 Both M 3-n -Segmentation 3.2,2,74 Both C (note 1) 5 -Return Error Request 3.2.2.72 Both C (note 2) 3-n -Return Error Cause 3.2.2.73 Both C (note 3) 3-n +Network Element Identity (source) 3.2.2.69 Both M 3-n +Network Element Identity (target) 3.2.2.69 Both M 3-n +APDU 3.2.2.68 Both M 3-n +Segmentation 3.2,2,74 Both C (note 1) 5 +Return Error Request 3.2.2.72 Both C (note 2) 3-n +Return Error Cause 3.2.2.73 Both C (note 3) 3-n */ /* - * 3.2.1.75 CHANNEL MODIFY REQUEST + * 3.2.1.75 CHANNEL MODIFY REQUEST */ static void bssmap_chan_mod_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.76 EMERGENCY RESET INDICATION + * 3.2.1.76 EMERGENCY RESET INDICATION */ /* -Cell Identifier 3.2.2.17 BSS-MSC O 3-10 +Cell Identifier 3.2.2.17 BSS-MSC O 3-10 ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); -Layer 3 Information 3.2.2.24 BSS-MSC O (note 2) 3-n - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); -Mobile Identity 3.2.2.41 BSS-MSC O (note 1) 3-n +Layer 3 Information 3.2.2.24 BSS-MSC O (note 2) 3-n + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_L3_INFO].value, BSSAP_PDU_TYPE_BSSMAP, BE_L3_INFO, NULL); +Mobile Identity 3.2.2.41 BSS-MSC O (note 1) 3-n */ /* - * 3.2.1.77 EMERGENCY RESET COMMAND + * 3.2.1.77 EMERGENCY RESET COMMAND * No data */ /* - * 3.2.1.78 VGCS ADDITIONAL INFORMATION + * 3.2.1.78 VGCS ADDITIONAL INFORMATION */ static void bssmap_vgcs_add_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Talker Identity 3.2.2.91 MSC-BSS M 3-20 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); + /* Talker Identity 3.2.2.91 MSC-BSS M 3-20 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_TALKER_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_TALKER_ID, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.79 VGCS/VBS AREA CELL INFO + * 3.2.1.79 VGCS/VBS AREA CELL INFO * -Cell Identifier List Segment 3.2.2.27a MSC-BSS M 4-? - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST_SEG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST_SEG, NULL); -Assignment Requirement 3.2.2.52 MSC-BSS O 2 +Cell Identifier List Segment 3.2.2.27a MSC-BSS M 4-? + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CELL_ID_LIST_SEG].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID_LIST_SEG, NULL); +Assignment Requirement 3.2.2.52 MSC-BSS O 2 * - * 3.2.1.80 VGCS/VBS ASSIGNMENT STATUS + * 3.2.1.80 VGCS/VBS ASSIGNMENT STATUS * -Cell Identifier List Segment for established cells 3.2.2.27b BSS-MSC O (note 1) 3-? -Cell Identifier List Segment for cells to be established 3.2.2.27c BSS-MSC O (note 1) 3-? -Cell Identifier List Segment for released cells - no user present 3.2.2.27e BSS-MSC O (note 1) 3-? -Cell Identifier List Segment for not established cells - no establishment possible 3.2.2.27f BSS-MSC O (note 1) 3-? -VGCS/VBS Cell Status 3.2.2.94 BSS-MSC O (note 2) 3 +Cell Identifier List Segment for established cells 3.2.2.27b BSS-MSC O (note 1) 3-? +Cell Identifier List Segment for cells to be established 3.2.2.27c BSS-MSC O (note 1) 3-? +Cell Identifier List Segment for released cells - no user present 3.2.2.27e BSS-MSC O (note 1) 3-? +Cell Identifier List Segment for not established cells - no establishment possible 3.2.2.27f BSS-MSC O (note 1) 3-? +VGCS/VBS Cell Status 3.2.2.94 BSS-MSC O (note 2) 3 */ /* - * 3.2.1.81 VGCS SMS + * 3.2.1.81 VGCS SMS */ static void bssmap_vgcs_sms(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* SMS to VGCS 3.2.2.92 MSC-BSS M 2-250 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_SMS_TO_VGCS].value, BSSAP_PDU_TYPE_BSSMAP, BE_SMS_TO_VGCS, NULL); + /* SMS to VGCS 3.2.2.92 MSC-BSS M 2-250 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_SMS_TO_VGCS].value, BSSAP_PDU_TYPE_BSSMAP, BE_SMS_TO_VGCS, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.82 NOTIFICATION DATA + * 3.2.1.82 NOTIFICATION DATA */ static void bssmap_notification_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Application Data 3.2.2.98 MSC-BSS M 11 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_APP_DATA_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_APP_DATA_INF, NULL); - /* Data Identity 3.2.2.99 MSC-BSS M 3 */ - /* MSISDN 3.2.2.101 MSC-BSS O 2-12 */ + /* Application Data 3.2.2.98 MSC-BSS M 11 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_APP_DATA_INF].value, BSSAP_PDU_TYPE_BSSMAP, BE_APP_DATA_INF, NULL); + /* Data Identity 3.2.2.99 MSC-BSS M 3 */ + /* MSISDN 3.2.2.101 MSC-BSS O 2-12 */ - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.83 INTERNAL HANDOVER REQUIRED + * 3.2.1.83 INTERNAL HANDOVER REQUIRED */ static void bssmap_int_ho_req(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 BSS-MSC M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Cell Identifier 3.2.2.17 BSS-MSC M 4-10 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); - /* AoIP Transport Layer Address (BSS) 3.2.2.nn BSS-MSC C (Note 1) 10-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); - /* Codec List (BSS Supported) 3.2.2.nn BSS-MSC M 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); + /* Cause 3.2.2.5 BSS-MSC M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Cell Identifier 3.2.2.17 BSS-MSC M 4-10 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CELL_ID].value, BSSAP_PDU_TYPE_BSSMAP, BE_CELL_ID, NULL); + /* AoIP Transport Layer Address (BSS) 3.2.2.nn BSS-MSC C (Note 1) 10-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); + /* Codec List (BSS Supported) 3.2.2.nn BSS-MSC M 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.84 INTERNAL HANDOVER REQUIRED REJECT + * 3.2.1.84 INTERNAL HANDOVER REQUIRED REJECT */ static void bssmap_int_ho_req_rej(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 MSC-BSS M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Codec List (MSC Preferred) 3.2.2.nn MSC-BSS O 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); + /* Cause 3.2.2.5 MSC-BSS M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Codec List (MSC Preferred) 3.2.2.nn MSC-BSS O 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC_LST, "(BSS Supported)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } -/* - * 3.2.1.85 INTERNAL HANDOVER COMMAND +/* + * 3.2.1.85 INTERNAL HANDOVER COMMAND */ static void bssmap_int_ho_cmd(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Speech Codec (MSC Chosen) 3.2.2.nn MSC-BSS M (note 1) 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); - /* Circuit Identity Code 3.2.2.2 MSC-BSS C (note 2) 3 */ - ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); - /* AoIP Transport Layer Address (MGW) 3.2.2.nn MSC-BSS C (note 2) 10-22 */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); + /* Speech Codec (MSC Chosen) 3.2.2.nn MSC-BSS M (note 1) 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); + /* Circuit Identity Code 3.2.2.2 MSC-BSS C (note 2) 3 */ + ELEM_MAND_TV(gsm_bssmap_elem_strings[BE_CIC].value, BSSAP_PDU_TYPE_BSSMAP, BE_CIC, NULL); + /* AoIP Transport Layer Address (MGW) 3.2.2.nn MSC-BSS C (note 2) 10-22 */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_AOIP_TRANS_LAY_ADD].value, BSSAP_PDU_TYPE_BSSMAP, BE_AOIP_TRANS_LAY_ADD, NULL); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.86 INTERNAL HANDOVER ENQUIRY + * 3.2.1.86 INTERNAL HANDOVER ENQUIRY */ static void bssmap_int_ho_enq(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Speech Codec (MSC Chosen) 3.2.2.104 MSC-BSS M 3-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); + /* Speech Codec (MSC Chosen) 3.2.2.104 MSC-BSS M 3-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_SPEECH_CODEC].value, BSSAP_PDU_TYPE_BSSMAP, BE_SPEECH_CODEC, "(Chosen)"); - EXTRANEOUS_DATA_CHECK(curr_len, 0); + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.87 RESET RESOURCE + * 3.2.1.87 RESET RESOURCE */ static void bssmap_reset_res(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Cause 3.2.2.5 Both M 3-4 */ - ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); - /* Call Identifier List 3.2.2.106 Both M 6-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CALL_ID_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CALL_ID_LST, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + /* Cause 3.2.2.5 Both M 3-4 */ + ELEM_MAND_TLV(gsm_bssmap_elem_strings[BE_CAUSE].value, BSSAP_PDU_TYPE_BSSMAP, BE_CAUSE, NULL); + /* Call Identifier List 3.2.2.106 Both M 6-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CALL_ID_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CALL_ID_LST, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } /* - * 3.2.1.88 RESET RESOURCE ACKNOWLEDGE + * 3.2.1.88 RESET RESOURCE ACKNOWLEDGE */ static void bssmap_reset_res_ack(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) { - guint32 curr_offset; - guint32 consumed; - guint curr_len; + guint32 curr_offset; + guint32 consumed; + guint curr_len; - curr_offset = offset; - curr_len = len; + curr_offset = offset; + curr_len = len; - /* Call Identifier List 3.2.2.106 Both M 6-n */ - ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CALL_ID_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CALL_ID_LST, NULL); - - EXTRANEOUS_DATA_CHECK(curr_len, 0); + /* Call Identifier List 3.2.2.106 Both M 6-n */ + ELEM_OPT_TLV(gsm_bssmap_elem_strings[BE_CALL_ID_LST].value, BSSAP_PDU_TYPE_BSSMAP, BE_CALL_ID_LST, NULL); + + EXTRANEOUS_DATA_CHECK(curr_len, 0); } -#define NUM_GSM_BSSMAP_MSG (sizeof(gsm_a_bssmap_msg_strings)/sizeof(value_string)) +#define NUM_GSM_BSSMAP_MSG (sizeof(gsm_a_bssmap_msg_strings)/sizeof(value_string)) static gint ett_gsm_bssmap_msg[NUM_GSM_BSSMAP_MSG]; static void (*bssmap_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len) = { - bssmap_ass_req, /* Assignment Request */ - bssmap_ass_complete, /* Assignment Complete */ - bssmap_ass_failure, /* Assignment Failure */ - bssmap_chan_mod_req, /* Channel Modify request */ - bssmap_ho_req, /* Handover Request */ - bssmap_ho_reqd, /* Handover Required */ - bssmap_ho_req_ack, /* Handover Request Acknowledge */ - bssmap_ho_cmd, /* Handover Command */ - bssmap_ho_complete, /* Handover Complete */ - bssmap_ho_succ , /* Handover Succeeded */ - bssmap_ho_failure, /* Handover Failure */ - bssmap_ho_performed, /* Handover Performed */ - bssmap_ho_cand_enq, /* Handover Candidate Enquire */ - bssmap_ho_cand_resp, /* Handover Candidate Response */ - bssmap_ho_reqd_rej, /* Handover Required Reject */ - bssmap_ho_det, /* Handover Detect */ - bssmap_int_ho_req, /* Internal Handover Required */ - bssmap_int_ho_req_rej, /* Internal Handover Required Reject */ - bssmap_int_ho_cmd, /* Internal Handover Command */ - bssmap_int_ho_enq, /* Internal Handover Enquiry */ - bssmap_clear_cmd, /* Clear Command */ - NULL /* no associated data */, /* Clear Complete */ - bssmap_clear_req, /* Clear Request */ - NULL, /* Reserved */ - NULL, /* Reserved */ - bssmap_sapi_rej, /* SAPI 'n' Reject */ - bssmap_confusion, /* Confusion */ - bssmap_sus, /* Suspend */ - bssmap_res, /* Resume */ - bssmap_conn_oriented, /* Connection Oriented Information */ - bssmap_perf_loc_req, /* Perform Location Request */ - bssmap_lsa_info, /* LSA Information */ - bssmap_perf_loc_res, /* Perform Location Response */ - bssmap_perf_loc_abort, /* Perform Location Abort */ - bssmap_common_id, /* Common Id */ - bssmap_reset, /* Reset */ - NULL /* no associated data */, /* Reset Acknowledge */ - bssmap_overload, /* Overload */ - NULL, /* Reserved */ - bssmap_reset_cct, /* Reset Circuit */ - bssmap_reset_cct_ack, /* Reset Circuit Acknowledge */ - bssmap_msc_invoke_trace, /* MSC Invoke Trace */ - bssmap_bss_invoke_trace, /* BSS Invoke Trace */ - NULL, /* Connectionless Information */ - bssmap_reset_res, /* Reset Resource */ - bssmap_reset_res_ack, /* Reset Resource Acknowledge */ - bssmap_block, /* Block */ - bssmap_block_ack, /* Blocking Acknowledge */ - bssmap_unblock, /* Unblock */ - bssmap_unblock_ack, /* Unblocking Acknowledge */ - bssmap_cct_group_block, /* Circuit Group Block */ - bssmap_cct_group_block_ack, /* Circuit Group Blocking Acknowledge */ - bssmap_cct_group_unblock, /* Circuit Group Unblock */ - bssmap_cct_group_unblock_ack, /* Circuit Group Unblocking Acknowledge */ - bssmap_unequipped_cct, /* Unequipped Circuit */ - bssmap_change_cct, /* Change Circuit */ - bssmap_change_cct_ack, /* Change Circuit Acknowledge */ - bssmap_res_req, /* Resource Request */ - bssmap_res_ind, /* Resource Indication */ - bssmap_paging, /* Paging */ - bssmap_ciph_mode_cmd, /* Cipher Mode Command */ - bssmap_cm_upd, /* Classmark Update */ - bssmap_ciph_mode_complete, /* Cipher Mode Complete */ - NULL /* no associated data */, /* Queuing Indication */ - bssmap_cl3_info, /* Complete Layer 3 Information */ - bssmap_cls_m_req /* no associated data */, /* Classmark Request */ - bssmap_ciph_mode_rej, /* Cipher Mode Reject */ - bssmap_load_ind, /* Load Indication */ - bssmap_vgcs_vbs_setup, /* VGCS/VBS Setup */ - bssmap_vgcs_vbs_setup_ack, /* VGCS/VBS Setup Ack */ - bssmap_vgcs_vbs_setup_refuse, /* VGCS/VBS Setup Refuse */ - bssmap_vgcs_vbs_ass_req, /* VGCS/VBS Assignment Request */ - bssmap_vgcs_vbs_ass_res, /* VGCS/VBS Assignment Result */ - bssmap_vgcs_vbs_ass_fail, /* VGCS/VBS Assignment Failure */ - NULL, /* No dsta VGCS/VBS Queuing Indication */ - bssmap_uplink_req, /* Uplink Request */ - bssmap_uplink_req_ack, /* Uplink Request Acknowledge */ - bssmap_uplink_req_conf, /* Uplink Request Confirmation */ - bssmap_uplink_rel_ind, /* Uplink Release Indication */ - bssmap_uplink_rej_cmd, /* Uplink Reject Command */ - bssmap_uplink_rel_cmd, /* Uplink Release Command */ - bssmap_uplink_seized_cmd, /* Uplink Seized Command */ - bssmap_vgcs_add_inf, /* VGCS Additional Information */ - bssmap_vgcs_sms, /* VGCS SMS */ - bssmap_notification_data, /* Notification Data*/ - bssmap_uplink_app_data, /* Uplink Application Data */ - NULL, /* NONE */ + bssmap_ass_req, /* Assignment Request */ + bssmap_ass_complete, /* Assignment Complete */ + bssmap_ass_failure, /* Assignment Failure */ + bssmap_chan_mod_req, /* Channel Modify request */ + bssmap_ho_req, /* Handover Request */ + bssmap_ho_reqd, /* Handover Required */ + bssmap_ho_req_ack, /* Handover Request Acknowledge */ + bssmap_ho_cmd, /* Handover Command */ + bssmap_ho_complete, /* Handover Complete */ + bssmap_ho_succ , /* Handover Succeeded */ + bssmap_ho_failure, /* Handover Failure */ + bssmap_ho_performed, /* Handover Performed */ + bssmap_ho_cand_enq, /* Handover Candidate Enquire */ + bssmap_ho_cand_resp, /* Handover Candidate Response */ + bssmap_ho_reqd_rej, /* Handover Required Reject */ + bssmap_ho_det, /* Handover Detect */ + bssmap_int_ho_req, /* Internal Handover Required */ + bssmap_int_ho_req_rej, /* Internal Handover Required Reject */ + bssmap_int_ho_cmd, /* Internal Handover Command */ + bssmap_int_ho_enq, /* Internal Handover Enquiry */ + bssmap_clear_cmd, /* Clear Command */ + NULL /* no associated data */, /* Clear Complete */ + bssmap_clear_req, /* Clear Request */ + NULL, /* Reserved */ + NULL, /* Reserved */ + bssmap_sapi_rej, /* SAPI 'n' Reject */ + bssmap_confusion, /* Confusion */ + bssmap_sus, /* Suspend */ + bssmap_res, /* Resume */ + bssmap_conn_oriented, /* Connection Oriented Information */ + bssmap_perf_loc_req, /* Perform Location Request */ + bssmap_lsa_info, /* LSA Information */ + bssmap_perf_loc_res, /* Perform Location Response */ + bssmap_perf_loc_abort, /* Perform Location Abort */ + bssmap_common_id, /* Common Id */ + bssmap_reset, /* Reset */ + NULL /* no associated data */, /* Reset Acknowledge */ + bssmap_overload, /* Overload */ + NULL, /* Reserved */ + bssmap_reset_cct, /* Reset Circuit */ + bssmap_reset_cct_ack, /* Reset Circuit Acknowledge */ + bssmap_msc_invoke_trace, /* MSC Invoke Trace */ + bssmap_bss_invoke_trace, /* BSS Invoke Trace */ + NULL, /* Connectionless Information */ + bssmap_reset_res, /* Reset Resource */ + bssmap_reset_res_ack, /* Reset Resource Acknowledge */ + bssmap_block, /* Block */ + bssmap_block_ack, /* Blocking Acknowledge */ + bssmap_unblock, /* Unblock */ + bssmap_unblock_ack, /* Unblocking Acknowledge */ + bssmap_cct_group_block, /* Circuit Group Block */ + bssmap_cct_group_block_ack, /* Circuit Group Blocking Acknowledge */ + bssmap_cct_group_unblock, /* Circuit Group Unblock */ + bssmap_cct_group_unblock_ack, /* Circuit Group Unblocking Acknowledge */ + bssmap_unequipped_cct, /* Unequipped Circuit */ + bssmap_change_cct, /* Change Circuit */ + bssmap_change_cct_ack, /* Change Circuit Acknowledge */ + bssmap_res_req, /* Resource Request */ + bssmap_res_ind, /* Resource Indication */ + bssmap_paging, /* Paging */ + bssmap_ciph_mode_cmd, /* Cipher Mode Command */ + bssmap_cm_upd, /* Classmark Update */ + bssmap_ciph_mode_complete, /* Cipher Mode Complete */ + NULL /* no associated data */, /* Queuing Indication */ + bssmap_cl3_info, /* Complete Layer 3 Information */ + bssmap_cls_m_req /* no associated data */, /* Classmark Request */ + bssmap_ciph_mode_rej, /* Cipher Mode Reject */ + bssmap_load_ind, /* Load Indication */ + bssmap_vgcs_vbs_setup, /* VGCS/VBS Setup */ + bssmap_vgcs_vbs_setup_ack, /* VGCS/VBS Setup Ack */ + bssmap_vgcs_vbs_setup_refuse, /* VGCS/VBS Setup Refuse */ + bssmap_vgcs_vbs_ass_req, /* VGCS/VBS Assignment Request */ + bssmap_vgcs_vbs_ass_res, /* VGCS/VBS Assignment Result */ + bssmap_vgcs_vbs_ass_fail, /* VGCS/VBS Assignment Failure */ + NULL, /* No dsta VGCS/VBS Queuing Indication */ + bssmap_uplink_req, /* Uplink Request */ + bssmap_uplink_req_ack, /* Uplink Request Acknowledge */ + bssmap_uplink_req_conf, /* Uplink Request Confirmation */ + bssmap_uplink_rel_ind, /* Uplink Release Indication */ + bssmap_uplink_rej_cmd, /* Uplink Reject Command */ + bssmap_uplink_rel_cmd, /* Uplink Release Command */ + bssmap_uplink_seized_cmd, /* Uplink Seized Command */ + bssmap_vgcs_add_inf, /* VGCS Additional Information */ + bssmap_vgcs_sms, /* VGCS SMS */ + bssmap_notification_data, /* Notification Data*/ + bssmap_uplink_app_data, /* Uplink Application Data */ + NULL, /* NONE */ }; void dissect_bssmap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - static gsm_a_tap_rec_t tap_rec[4]; - static gsm_a_tap_rec_t *tap_p; - static guint tap_current=0; - guint8 oct; - guint32 offset, saved_offset; - guint32 len; - gint idx; - proto_item *bssmap_item = NULL; - proto_tree *bssmap_tree = NULL; - const gchar *str; - sccp_msg_info_t* sccp_msg_p; + static gsm_a_tap_rec_t tap_rec[4]; + static gsm_a_tap_rec_t *tap_p; + static guint tap_current=0; + guint8 oct; + guint32 offset, saved_offset; + guint32 len; + gint idx; + proto_item *bssmap_item = NULL; + proto_tree *bssmap_tree = NULL; + const gchar *str; + sccp_msg_info_t* sccp_msg_p; - sccp_msg_p = pinfo->sccp_info; + sccp_msg_p = pinfo->sccp_info; - if (!(sccp_msg_p && sccp_msg_p->data.co.assoc)) { - sccp_msg_p = NULL; - } + if (!(sccp_msg_p && sccp_msg_p->data.co.assoc)) { + sccp_msg_p = NULL; + } - col_append_str(pinfo->cinfo, COL_INFO, "(BSSMAP) "); + col_append_str(pinfo->cinfo, COL_INFO, "(BSSMAP) "); - /* - * set tap record pointer - */ - tap_current++; - if (tap_current >= 4) - { - tap_current = 0; - } - tap_p = &tap_rec[tap_current]; + /* + * set tap record pointer + */ + tap_current++; + if (tap_current >= 4) + { + tap_current = 0; + } + tap_p = &tap_rec[tap_current]; - offset = 0; - saved_offset = offset; + offset = 0; + saved_offset = offset; - g_pinfo = pinfo; - g_tree = tree; + g_pinfo = pinfo; + g_tree = tree; - len = tvb_length(tvb); + len = tvb_length(tvb); - /* - * add BSSMAP message name - */ - oct = tvb_get_guint8(tvb, offset++); + /* + * add BSSMAP message name + */ + oct = tvb_get_guint8(tvb, offset++); - str = match_strval_idx((guint32) oct, gsm_a_bssmap_msg_strings, &idx); + str = match_strval_idx((guint32) oct, gsm_a_bssmap_msg_strings, &idx); - if (sccp_msg_p && !sccp_msg_p->data.co.label) { - sccp_msg_p->data.co.label = se_strdup(val_to_str((guint32) oct, gsm_a_bssmap_msg_strings, "BSSMAP (0x%02x)")); - } + if (sccp_msg_p && !sccp_msg_p->data.co.label) { + sccp_msg_p->data.co.label = se_strdup(val_to_str((guint32) oct, gsm_a_bssmap_msg_strings, "BSSMAP (0x%02x)")); + } - /* - * create the protocol tree - */ - if (str == NULL) - { - bssmap_item = - proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, len, - "GSM A-I/F BSSMAP - Unknown BSSMAP Message Type (0x%02x)", - oct); + /* + * create the protocol tree + */ + if (str == NULL) + { + bssmap_item = + proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, len, + "GSM A-I/F BSSMAP - Unknown BSSMAP Message Type (0x%02x)", + oct); - bssmap_tree = proto_item_add_subtree(bssmap_item, ett_bssmap_msg); - } - else - { - bssmap_item = - proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, -1, - "GSM A-I/F BSSMAP - %s", - str); + bssmap_tree = proto_item_add_subtree(bssmap_item, ett_bssmap_msg); + } + else + { + bssmap_item = + proto_tree_add_protocol_format(tree, proto_a_bssmap, tvb, 0, -1, + "GSM A-I/F BSSMAP - %s", + str); - bssmap_tree = proto_item_add_subtree(bssmap_item, ett_gsm_bssmap_msg[idx]); + bssmap_tree = proto_item_add_subtree(bssmap_item, ett_gsm_bssmap_msg[idx]); - if (check_col(pinfo->cinfo, COL_INFO)) - { - col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); - } + if (check_col(pinfo->cinfo, COL_INFO)) + { + col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", str); + } - /* - * add BSSMAP message name - */ - proto_tree_add_uint_format(bssmap_tree, hf_gsm_a_bssmap_msg_type, - tvb, saved_offset, 1, oct, "Message Type %s",str); - } + /* + * add BSSMAP message name + */ + proto_tree_add_uint_format(bssmap_tree, hf_gsm_a_bssmap_msg_type, + tvb, saved_offset, 1, oct, "Message Type %s",str); + } - tap_p->pdu_type = BSSAP_PDU_TYPE_BSSMAP; - tap_p->message_type = oct; + tap_p->pdu_type = BSSAP_PDU_TYPE_BSSMAP; + tap_p->message_type = oct; - tap_queue_packet(gsm_a_tap, pinfo, tap_p); + tap_queue_packet(gsm_a_tap, pinfo, tap_p); - if (str == NULL) return; + if (str == NULL) return; - if ((len - offset) <= 0) return; + if ((len - offset) <= 0) return; - /* - * decode elements - */ - if (bssmap_msg_fcn[idx] == NULL) - { - proto_tree_add_text(bssmap_tree, - tvb, offset, len - offset, - "Message Elements"); - } - else - { - (*bssmap_msg_fcn[idx])(tvb, bssmap_tree, offset, len - offset); - } - g_pinfo = NULL; - g_tree = NULL; + /* + * decode elements + */ + if (bssmap_msg_fcn[idx] == NULL) + { + proto_tree_add_text(bssmap_tree, + tvb, offset, len - offset, + "Message Elements"); + } + else + { + (*bssmap_msg_fcn[idx])(tvb, bssmap_tree, offset, len - offset); + } + g_pinfo = NULL; + g_tree = NULL; } /* Register the protocol with Wireshark */ void proto_register_gsm_a_bssmap(void) { - guint i; - guint last_offset; + guint i; + guint last_offset; - /* Setup list of header fields */ + /* Setup list of header fields */ - static hf_register_info hf[] = - { - { &hf_gsm_a_bssmap_msg_type, - { "BSSMAP Message Type", "gsm_a.bssmap_msgtype", - FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_msg_strings), 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_elem_id, - { "Element ID", "gsm_a_bssmap.elem_id", - FT_UINT8, BASE_DEC, NULL, 0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_field_elem_id, - { "Field Element ID", "gsm_a_bssmap.field_elem_id", - FT_UINT8, BASE_HEX, VALS(bssmap_field_element_ids), 0, - NULL, HFILL } - }, - { &hf_gsm_a_length, - { "Length", "gsm_a.len", - FT_UINT16, BASE_DEC, NULL, 0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_cell_ci, - { "Cell CI", "gsm_a.cell_ci", - FT_UINT16, BASE_HEX_DEC, 0, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_cell_lac, - { "Cell LAC", "gsm_a.cell_lac", - FT_UINT16, BASE_HEX_DEC, 0, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_sac, - { "SAC", "gsm_a.sac", - FT_UINT16, BASE_HEX, 0, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_dlci_cc, - { "Control Channel", "bssap.dlci.cc", - FT_UINT8, BASE_HEX, VALS(bssap_cc_values), 0xc0, - NULL, HFILL} - }, - { &hf_gsm_a_bssmap_dlci_spare, - { "Spare", "bssap.dlci.spare", - FT_UINT8, BASE_HEX, NULL, 0x38, - NULL, HFILL} - }, - { &hf_gsm_a_bssmap_dlci_sapi, - { "SAPI", "bssap.dlci.sapi", - FT_UINT8, BASE_HEX, VALS(bssap_sapi_values), 0x07, - NULL, HFILL} - }, - { &hf_gsm_a_bssmap_cause, - { "BSSMAP Cause", "gsm_a_bssmap.cause", - FT_UINT8, BASE_HEX, 0, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_be_cell_id_disc, - { "Cell identification discriminator","gsm_a.be.cell_id_disc", - FT_UINT8,BASE_DEC, VALS(gsm_a_be_cell_id_disc_vals), 0x0f, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_lsa_only, - { "LSA only","ggsm_a_bssmap.lsa_only", - FT_BOOLEAN,8, TFS(&bssmap_lsa_only_value), 0x01, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_act, - { "Active mode support","gsm_a_bssmap.act", - FT_BOOLEAN,8, NULL, 0x20, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_pref, - { "Preferential access","gsm_a_bssmap.pref", - FT_BOOLEAN,8, NULL, 0x10, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_lsa_inf_prio, - { "Priority","gsm_a_bssmap.lsa_inf_prio", - FT_UINT8,BASE_DEC, NULL, 0x0f, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_seq_len, - { "Sequence Length","gsm_a_bssmap.seq_len", - FT_UINT8,BASE_DEC, NULL, 0xf0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_seq_no, - { "Sequence Number","gsm_a_bssmap.seq_no", - FT_UINT8,BASE_DEC, NULL, 0xf, - NULL, HFILL } - }, - { &hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, - { "Cell identification discriminator","gsm_a_bssmap.cell_id_list_seg_cell_id_disc", - FT_UINT8,BASE_DEC, VALS(gsm_a_bssap_cell_id_list_seg_cell_id_disc_vals), 0xf, - NULL, HFILL } - }, - { &hf_gsm_a_bssap_res_ind_method, - { "Resource indication method","gsm_a_bssmap.res_ind_method", - FT_UINT8,BASE_DEC, VALS(gsm_a_bssap_resource_indication_vals), 0xf, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_ch_mode, - { "Channel mode","gsm_a_bssmap.cch_mode", - FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_ch_mode_vals), 0xf0, - NULL, HFILL } - }, + static hf_register_info hf[] = + { + { &hf_gsm_a_bssmap_msg_type, + { "BSSMAP Message Type", "gsm_a.bssmap_msgtype", + FT_UINT8, BASE_HEX, VALS(gsm_a_bssmap_msg_strings), 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_elem_id, + { "Element ID", "gsm_a_bssmap.elem_id", + FT_UINT8, BASE_DEC, NULL, 0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_field_elem_id, + { "Field Element ID", "gsm_a_bssmap.field_elem_id", + FT_UINT8, BASE_HEX, VALS(bssmap_field_element_ids), 0, + NULL, HFILL } + }, + { &hf_gsm_a_length, + { "Length", "gsm_a.len", + FT_UINT16, BASE_DEC, NULL, 0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_cell_ci, + { "Cell CI", "gsm_a.cell_ci", + FT_UINT16, BASE_HEX_DEC, 0, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_cell_lac, + { "Cell LAC", "gsm_a.cell_lac", + FT_UINT16, BASE_HEX_DEC, 0, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_sac, + { "SAC", "gsm_a.sac", + FT_UINT16, BASE_HEX, 0, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_dlci_cc, + { "Control Channel", "bssap.dlci.cc", + FT_UINT8, BASE_HEX, VALS(bssap_cc_values), 0xc0, + NULL, HFILL} + }, + { &hf_gsm_a_bssmap_dlci_spare, + { "Spare", "bssap.dlci.spare", + FT_UINT8, BASE_HEX, NULL, 0x38, + NULL, HFILL} + }, + { &hf_gsm_a_bssmap_dlci_sapi, + { "SAPI", "bssap.dlci.sapi", + FT_UINT8, BASE_HEX, VALS(bssap_sapi_values), 0x07, + NULL, HFILL} + }, + { &hf_gsm_a_bssmap_cause, + { "BSSMAP Cause", "gsm_a_bssmap.cause", + FT_UINT8, BASE_HEX, 0, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_be_cell_id_disc, + { "Cell identification discriminator","gsm_a.be.cell_id_disc", + FT_UINT8,BASE_DEC, VALS(gsm_a_be_cell_id_disc_vals), 0x0f, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_lsa_only, + { "LSA only","ggsm_a_bssmap.lsa_only", + FT_BOOLEAN,8, TFS(&bssmap_lsa_only_value), 0x01, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_act, + { "Active mode support","gsm_a_bssmap.act", + FT_BOOLEAN,8, NULL, 0x20, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_pref, + { "Preferential access","gsm_a_bssmap.pref", + FT_BOOLEAN,8, NULL, 0x10, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_lsa_inf_prio, + { "Priority","gsm_a_bssmap.lsa_inf_prio", + FT_UINT8,BASE_DEC, NULL, 0x0f, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_seq_len, + { "Sequence Length","gsm_a_bssmap.seq_len", + FT_UINT8,BASE_DEC, NULL, 0xf0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_seq_no, + { "Sequence Number","gsm_a_bssmap.seq_no", + FT_UINT8,BASE_DEC, NULL, 0xf, + NULL, HFILL } + }, + { &hf_gsm_a_bssap_cell_id_list_seg_cell_id_disc, + { "Cell identification discriminator","gsm_a_bssmap.cell_id_list_seg_cell_id_disc", + FT_UINT8,BASE_DEC, VALS(gsm_a_bssap_cell_id_list_seg_cell_id_disc_vals), 0xf, + NULL, HFILL } + }, + { &hf_gsm_a_bssap_res_ind_method, + { "Resource indication method","gsm_a_bssmap.res_ind_method", + FT_UINT8,BASE_DEC, VALS(gsm_a_bssap_resource_indication_vals), 0xf, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_ch_mode, + { "Channel mode","gsm_a_bssmap.cch_mode", + FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_ch_mode_vals), 0xf0, + NULL, HFILL } + }, { &hf_gsm_a_bssmap_cur_ch_mode, { "Channel Mode", "fe_cur_chan_type2.chan_mode", FT_UINT8, BASE_HEX, VALS(chan_mode_vals), 0xf0, NULL, HFILL } }, - { &hf_gsm_a_bssmap_channel, - { "Channel","gsm_a_bssmap.channel", - FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_channel_vals), 0x0f, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_trace_trigger_id, - { "Priority Indication","gsm_a_bssmap.trace_trigger_id", - FT_STRING, BASE_NONE, NULL, 0x0, + { &hf_gsm_a_bssmap_channel, + { "Channel","gsm_a_bssmap.channel", + FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_channel_vals), 0x0f, NULL, HFILL } - }, - { &hf_gsm_a_bssmap_trace_priority_indication, - { "Priority Indication","gsm_a_bssmap.trace_priority_indication", - FT_UINT8,BASE_DEC, NULL, 0x00, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_trace_bss_record_type, - { "BSS Record Type","gsm_a_bssmap.bss_record__type", - FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_trace_bss_record_type_vals), 0x00, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_trace_msc_record_type, - { "MSC Record Type","gsm_a_bssmap.msc_record_type", - FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_trace_msc_record_type_vals), 0x00, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_trace_invoking_event, - { "Invoking Event","gsm_a_bssmap.trace_invoking_event", - FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_trace_invoking_event_vals), 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_trace_reference, - { "Trace Reference","gsm_a_bssmap.trace_id", - FT_UINT16,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_trace_omc_id, - { "OMC ID","gsm_a_bssmap.trace_omc_id", - FT_STRING, BASE_NONE, NULL, 0x0, + }, + { &hf_gsm_a_bssmap_trace_trigger_id, + { "Priority Indication","gsm_a_bssmap.trace_trigger_id", + FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } - }, - { &hf_gsm_a_bssmap_be_rnc_id, - { "RNC-ID","gsm_a.be.rnc_id", - FT_UINT16,BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_apdu_protocol_id, - { "Protocol ID", "gsm_a.apdu_protocol_id", - FT_UINT8, BASE_DEC, VALS(gsm_a_apdu_protocol_id_strings), 0x0, - "APDU embedded protocol id", HFILL } - }, - { &hf_gsm_a_bssmap_periodicity, - { "Periodicity", "gsm_a_bssmap.periodicity", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_sm, - { "Subsequent Mode","gsm_a_bssmap.sm", - FT_BOOLEAN,8, NULL, 0x02, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_tarr, - { "Total Accessible Resource Requested","gsm_a_bssmap.tarr", - FT_BOOLEAN,8, NULL, 0x01, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_tot_no_of_fullr_ch, - { "Total number of accessible full rate channels", "gsm_a_bssmap.tot_no_of_fullr_ch", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_tot_no_of_hr_ch, - { "Total number of accessible half rate channels", "gsm_a_bssmap.tot_no_of_hr_ch", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_lsa_id, - { "Identification of Localised Service Area", "gsm_a_bssmap.lsa_id", - FT_UINT24, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_ep, - { "EP", "gsm_a_bssmap.ep", - FT_UINT8, BASE_DEC, NULL, 0x01, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_smi, - { "Subsequent Modification Indication(SMI)", "gsm_a_bssmap.smi", - FT_UINT8, BASE_DEC, VALS(gsm_a_bssmap_smi_vals), 0x0f, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_lcs_pri, - { "Periodicity", "gsm_a_bssmap.lcs_pri", - FT_UINT8, BASE_DEC, VALS(lcs_priority_vals), 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_num_ms, - { "Number of handover candidates", "gsm_a_bssmap.num_ms", - FT_UINT8, BASE_DEC,NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_talker_pri, - { "Priority", "gsm_a_bssmap.talker_pri", - FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_talker_pri_vals), 0x03, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_paging_cause, - { "Paging Cause", "gsm_a_bssmap.paging_cause", - FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_paging_cause_vals), 0x06, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_paging_inf_flg, - { "VGCS/VBS flag","ggsm_a_bssmap.paging_inf_flg", - FT_BOOLEAN,8, TFS(&bssmap_paging_inf_flg_value), 0x01, - "If 1, a member of a VGCS/VBS-group", HFILL } - }, - { &hf_gsm_a_bssmap_serv_ho_inf, - { "Service Handover information", "gsm_a_bssmap.serv_ho_inf", - FT_UINT8, BASE_HEX, NULL, 0x07, - NULL, HFILL } - }, + }, + { &hf_gsm_a_bssmap_trace_priority_indication, + { "Priority Indication","gsm_a_bssmap.trace_priority_indication", + FT_UINT8,BASE_DEC, NULL, 0x00, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_trace_bss_record_type, + { "BSS Record Type","gsm_a_bssmap.bss_record__type", + FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_trace_bss_record_type_vals), 0x00, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_trace_msc_record_type, + { "MSC Record Type","gsm_a_bssmap.msc_record_type", + FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_trace_msc_record_type_vals), 0x00, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_trace_invoking_event, + { "Invoking Event","gsm_a_bssmap.trace_invoking_event", + FT_UINT8,BASE_DEC, VALS(gsm_a_bssmap_trace_invoking_event_vals), 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_trace_reference, + { "Trace Reference","gsm_a_bssmap.trace_id", + FT_UINT16,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_trace_omc_id, + { "OMC ID","gsm_a_bssmap.trace_omc_id", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_be_rnc_id, + { "RNC-ID","gsm_a.be.rnc_id", + FT_UINT16,BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_apdu_protocol_id, + { "Protocol ID", "gsm_a.apdu_protocol_id", + FT_UINT8, BASE_DEC, VALS(gsm_a_apdu_protocol_id_strings), 0x0, + "APDU embedded protocol id", HFILL } + }, + { &hf_gsm_a_bssmap_periodicity, + { "Periodicity", "gsm_a_bssmap.periodicity", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_sm, + { "Subsequent Mode","gsm_a_bssmap.sm", + FT_BOOLEAN,8, NULL, 0x02, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_tarr, + { "Total Accessible Resource Requested","gsm_a_bssmap.tarr", + FT_BOOLEAN,8, NULL, 0x01, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_tot_no_of_fullr_ch, + { "Total number of accessible full rate channels", "gsm_a_bssmap.tot_no_of_fullr_ch", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_tot_no_of_hr_ch, + { "Total number of accessible half rate channels", "gsm_a_bssmap.tot_no_of_hr_ch", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_lsa_id, + { "Identification of Localised Service Area", "gsm_a_bssmap.lsa_id", + FT_UINT24, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_ep, + { "EP", "gsm_a_bssmap.ep", + FT_UINT8, BASE_DEC, NULL, 0x01, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_smi, + { "Subsequent Modification Indication(SMI)", "gsm_a_bssmap.smi", + FT_UINT8, BASE_DEC, VALS(gsm_a_bssmap_smi_vals), 0x0f, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_lcs_pri, + { "Periodicity", "gsm_a_bssmap.lcs_pri", + FT_UINT8, BASE_DEC, VALS(lcs_priority_vals), 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_num_ms, + { "Number of handover candidates", "gsm_a_bssmap.num_ms", + FT_UINT8, BASE_DEC,NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_talker_pri, + { "Priority", "gsm_a_bssmap.talker_pri", + FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_talker_pri_vals), 0x03, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_paging_cause, + { "Paging Cause", "gsm_a_bssmap.paging_cause", + FT_UINT8, BASE_DEC,VALS(gsm_a_bssmap_paging_cause_vals), 0x06, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_paging_inf_flg, + { "VGCS/VBS flag","ggsm_a_bssmap.paging_inf_flg", + FT_BOOLEAN,8, TFS(&bssmap_paging_inf_flg_value), 0x01, + "If 1, a member of a VGCS/VBS-group", HFILL } + }, + { &hf_gsm_a_bssmap_serv_ho_inf, + { "Service Handover information", "gsm_a_bssmap.serv_ho_inf", + FT_UINT8, BASE_HEX, NULL, 0x07, + NULL, HFILL } + }, - { &hf_gsm_a_bssmap_spare_bits, - { "Spare bit(s)", "gsm_a_bssmap.spare_bits", - FT_UINT8, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_tpind, - { "Talker priority indicator (TP Ind)","gsm_a_bssmap.tpind", - FT_BOOLEAN,8, TFS(&gsm_bssmap_tpind_vals), 0x01, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_asind_b2, - { "A-interface resource sharing indicator (AS Ind) bit 2","gsm_a_bssmap.asind_b2", - FT_BOOLEAN,8, TFS(&gsm_bssmap_asind_b2_vals), 0x02, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_asind_b3, - { "A-interface resource sharing indicator (AS Ind) bit 3","gsm_a_bssmap.asind_b3", - FT_BOOLEAN,8, TFS(&gsm_bssmap_asind_b3_vals), 0x04, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_bss_res, - { "Group or broadcast call re-establishment by the BSS indicator","gsm_a_bssmap.bss_res", - FT_BOOLEAN,8, TFS(&gsm_bssmap_bss_res_vals), 0x08, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_tcp, - { "Talker Channel Parameter (TCP)","gsm_a_bssmap.tcp", - FT_BOOLEAN,8, TFS(&gsm_bssmap_bss_tcp_vals), 0x10, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_filler_bits, - { "Filler Bits","gsm_a_bssmap.filler_bits", - FT_UINT8, BASE_DEC,NULL, 0x07, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_aoip_trans_ipv4, - { "Transport Layer Address (IPv4)","gsm_a_bssmap.aoip_trans_ipv4", - FT_IPv4,BASE_NONE, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_aoip_trans_ipv6, - { "Transport Layer Address (IPv6)","gsm_a_bssmap.aoip_trans_ipv6", - FT_IPv6,BASE_NONE, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_aoip_trans_port, - { "UDP Port","gsm_a_bssmap.aoip_trans_port", - FT_UINT16, BASE_DEC,NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_fi, - { "FI(Full IP)","gsm_a_bssmap.fi", - FT_BOOLEAN,8, TFS(&bssmap_fi_vals), 0x80, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_pi, - { "PI","gsm_a_bssmap.pi", - FT_BOOLEAN,8, TFS(&bssmap_pi_vals), 0x40, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_pt, - { "PT","gsm_a_bssmap.pt", - FT_BOOLEAN,8, TFS(&bssmap_pt_vals), 0x20, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_tf, - { "TF","gsm_a_bssmap.tf", - FT_BOOLEAN,8, TFS(&bssmap_tf_vals), 0x10, - NULL, HFILL } - }, - { &hf_gsm_a_bssap_speech_codec, - { "Codec Type","gsm_a_bssmap.speech_codec", - FT_UINT8, BASE_DEC,VALS(bssap_speech_codec_values), 0x0f, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_fi2, - { "FI(Full IP)","gsm_a_bssmap.fi2", - FT_BOOLEAN,8, TFS(&bssmap_fi2_vals), 0x80, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_pi2, - { "PI","gsm_a_bssmap.pi2", - FT_BOOLEAN,8, TFS(&bssmap_pi2_vals), 0x40, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_pt2, - { "PT","gsm_a_bssmap.pt2", - FT_BOOLEAN,8, TFS(&bssmap_pt2_vals), 0x20, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_tf2, - { "TF","gsm_a_bssmap.tf2", - FT_BOOLEAN,8, TFS(&bssmap_tf2_vals), 0x10, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_call_id, - { "Call Identifier","gsm_a_bssmap.callid", - FT_UINT32, BASE_DEC,NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_spare, - { "Spare", "gsm_a_bssmap.spare", - FT_UINT8, BASE_HEX, NULL, 0x0, - NULL, HFILL} - }, - { &hf_gsm_a_bssmap_positioning_data_discriminator, - { "Positioning Data Discriminator", "gsm_a_bssmap.posData.discriminator", - FT_UINT8, BASE_HEX, NULL, 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_positioning_method, - { "Positioning method", "gsm_a_bssmap.posData.method", - FT_UINT8, BASE_HEX, VALS(bssmap_positioning_methods), 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_positioning_method_usage, - { "Usage", "gsm_a_bssmap.posData.usage", - FT_UINT8, BASE_HEX, VALS(bssmap_positioning_methods_usage), 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_location_type_location_information, - { "Location Information", "gsm_a_bssmap.locationType.locationInformation", - FT_UINT8, BASE_HEX, VALS(bssmap_location_information_vals), 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_location_type_positioning_method, - { "Positioning Method", "gsm_a_bssmap.locationType.positioningMethod", - FT_UINT8, BASE_HEX, VALS(bssmap_positioning_method_vals), 0x0, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_chan_type_extension, - { "Extension", "gsm_a_bssmap.chanType.permittedIndicator.extension", - FT_BOOLEAN, 8, TFS(&bssmap_chan_type_extension_value), 0x80, - NULL, HFILL } - }, - { &hf_gsm_a_bssmap_cause_extension, - { "Extension", "gsm_a_bssmap.causeType.extension", - FT_BOOLEAN, 8, TFS(&bssmap_cause_extension_value), 0x80, - NULL, HFILL } - }, + { &hf_gsm_a_bssmap_spare_bits, + { "Spare bit(s)", "gsm_a_bssmap.spare_bits", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_tpind, + { "Talker priority indicator (TP Ind)","gsm_a_bssmap.tpind", + FT_BOOLEAN,8, TFS(&gsm_bssmap_tpind_vals), 0x01, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_asind_b2, + { "A-interface resource sharing indicator (AS Ind) bit 2","gsm_a_bssmap.asind_b2", + FT_BOOLEAN,8, TFS(&gsm_bssmap_asind_b2_vals), 0x02, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_asind_b3, + { "A-interface resource sharing indicator (AS Ind) bit 3","gsm_a_bssmap.asind_b3", + FT_BOOLEAN,8, TFS(&gsm_bssmap_asind_b3_vals), 0x04, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_bss_res, + { "Group or broadcast call re-establishment by the BSS indicator","gsm_a_bssmap.bss_res", + FT_BOOLEAN,8, TFS(&gsm_bssmap_bss_res_vals), 0x08, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_tcp, + { "Talker Channel Parameter (TCP)","gsm_a_bssmap.tcp", + FT_BOOLEAN,8, TFS(&gsm_bssmap_bss_tcp_vals), 0x10, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_filler_bits, + { "Filler Bits","gsm_a_bssmap.filler_bits", + FT_UINT8, BASE_DEC,NULL, 0x07, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_aoip_trans_ipv4, + { "Transport Layer Address (IPv4)","gsm_a_bssmap.aoip_trans_ipv4", + FT_IPv4,BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_aoip_trans_ipv6, + { "Transport Layer Address (IPv6)","gsm_a_bssmap.aoip_trans_ipv6", + FT_IPv6,BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_aoip_trans_port, + { "UDP Port","gsm_a_bssmap.aoip_trans_port", + FT_UINT16, BASE_DEC,NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_fi, + { "FI(Full IP)","gsm_a_bssmap.fi", + FT_BOOLEAN,8, TFS(&bssmap_fi_vals), 0x80, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_pi, + { "PI","gsm_a_bssmap.pi", + FT_BOOLEAN,8, TFS(&bssmap_pi_vals), 0x40, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_pt, + { "PT","gsm_a_bssmap.pt", + FT_BOOLEAN,8, TFS(&bssmap_pt_vals), 0x20, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_tf, + { "TF","gsm_a_bssmap.tf", + FT_BOOLEAN,8, TFS(&bssmap_tf_vals), 0x10, + NULL, HFILL } + }, + { &hf_gsm_a_bssap_speech_codec, + { "Codec Type","gsm_a_bssmap.speech_codec", + FT_UINT8, BASE_DEC,VALS(bssap_speech_codec_values), 0x0f, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_fi2, + { "FI(Full IP)","gsm_a_bssmap.fi2", + FT_BOOLEAN,8, TFS(&bssmap_fi2_vals), 0x80, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_pi2, + { "PI","gsm_a_bssmap.pi2", + FT_BOOLEAN,8, TFS(&bssmap_pi2_vals), 0x40, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_pt2, + { "PT","gsm_a_bssmap.pt2", + FT_BOOLEAN,8, TFS(&bssmap_pt2_vals), 0x20, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_tf2, + { "TF","gsm_a_bssmap.tf2", + FT_BOOLEAN,8, TFS(&bssmap_tf2_vals), 0x10, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_call_id, + { "Call Identifier","gsm_a_bssmap.callid", + FT_UINT32, BASE_DEC,NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_spare, + { "Spare", "gsm_a_bssmap.spare", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + { &hf_gsm_a_bssmap_positioning_data_discriminator, + { "Positioning Data Discriminator", "gsm_a_bssmap.posData.discriminator", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_positioning_method, + { "Positioning method", "gsm_a_bssmap.posData.method", + FT_UINT8, BASE_HEX, VALS(bssmap_positioning_methods), 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_positioning_method_usage, + { "Usage", "gsm_a_bssmap.posData.usage", + FT_UINT8, BASE_HEX, VALS(bssmap_positioning_methods_usage), 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_location_type_location_information, + { "Location Information", "gsm_a_bssmap.locationType.locationInformation", + FT_UINT8, BASE_HEX, VALS(bssmap_location_information_vals), 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_location_type_positioning_method, + { "Positioning Method", "gsm_a_bssmap.locationType.positioningMethod", + FT_UINT8, BASE_HEX, VALS(bssmap_positioning_method_vals), 0x0, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_chan_type_extension, + { "Extension", "gsm_a_bssmap.chanType.permittedIndicator.extension", + FT_BOOLEAN, 8, TFS(&bssmap_chan_type_extension_value), 0x80, + NULL, HFILL } + }, + { &hf_gsm_a_bssmap_cause_extension, + { "Extension", "gsm_a_bssmap.causeType.extension", + FT_BOOLEAN, 8, TFS(&bssmap_cause_extension_value), 0x80, + NULL, HFILL } + }, { &hf_fe_extra_info_prec, { "Pre-emption Recommendation", "fe_extra_info.prec", FT_UINT8, BASE_DEC, VALS(fe_extra_info_prec_vals), 0x01, @@ -6776,56 +6776,56 @@ proto_register_gsm_a_bssmap(void) FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } }, - }; + }; - /* Setup protocol subtree array */ -#define NUM_INDIVIDUAL_ELEMS 5 - gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_GSM_BSSMAP_MSG + - NUM_GSM_BSSMAP_ELEM]; + /* Setup protocol subtree array */ +#define NUM_INDIVIDUAL_ELEMS 5 + gint *ett[NUM_INDIVIDUAL_ELEMS + NUM_GSM_BSSMAP_MSG + + NUM_GSM_BSSMAP_ELEM]; - ett[0] = &ett_bssmap_msg; - ett[1] = &ett_cell_list; - ett[2] = &ett_dlci; - ett[3] = &ett_codec_lst, + ett[0] = &ett_bssmap_msg; + ett[1] = &ett_cell_list; + ett[2] = &ett_dlci; + ett[3] = &ett_codec_lst, ett[4] = &ett_bss_to_bss_info, - last_offset = NUM_INDIVIDUAL_ELEMS; + last_offset = NUM_INDIVIDUAL_ELEMS; - for (i=0; i < NUM_GSM_BSSMAP_MSG; i++, last_offset++) - { - ett_gsm_bssmap_msg[i] = -1; - ett[last_offset] = &ett_gsm_bssmap_msg[i]; - } + for (i=0; i < NUM_GSM_BSSMAP_MSG; i++, last_offset++) + { + ett_gsm_bssmap_msg[i] = -1; + ett[last_offset] = &ett_gsm_bssmap_msg[i]; + } - for (i=0; i < NUM_GSM_BSSMAP_ELEM; i++, last_offset++) - { - ett_gsm_bssmap_elem[i] = -1; - ett[last_offset] = &ett_gsm_bssmap_elem[i]; - } + for (i=0; i < NUM_GSM_BSSMAP_ELEM; i++, last_offset++) + { + ett_gsm_bssmap_elem[i] = -1; + ett[last_offset] = &ett_gsm_bssmap_elem[i]; + } - /* Register the protocol name and description */ + /* Register the protocol name and description */ - proto_a_bssmap = - proto_register_protocol("GSM A-I/F BSSMAP", "GSM BSSMAP", "gsm_a_bssmap"); + proto_a_bssmap = + proto_register_protocol("GSM A-I/F BSSMAP", "GSM BSSMAP", "gsm_a_bssmap"); - proto_register_field_array(proto_a_bssmap, hf, array_length(hf)); + proto_register_field_array(proto_a_bssmap, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); + proto_register_subtree_array(ett, array_length(ett)); - register_dissector("gsm_a_bssmap", dissect_bssmap, proto_a_bssmap); + register_dissector("gsm_a_bssmap", dissect_bssmap, proto_a_bssmap); } void proto_reg_handoff_gsm_a_bssmap(void) { - dissector_handle_t bssmap_handle; + dissector_handle_t bssmap_handle; - bssmap_handle = find_dissector("gsm_a_bssmap"); - dissector_add("bssap.pdu_type", BSSAP_PDU_TYPE_BSSMAP, bssmap_handle); + bssmap_handle = find_dissector("gsm_a_bssmap"); + dissector_add("bssap.pdu_type", BSSAP_PDU_TYPE_BSSMAP, bssmap_handle); - dtap_handle = find_dissector("gsm_a_dtap"); - gsm_bsslap_handle = find_dissector("gsm_bsslap"); + dtap_handle = find_dissector("gsm_a_dtap"); + gsm_bsslap_handle = find_dissector("gsm_bsslap"); bssgp_handle = find_dissector ("bssgp"); rrc_handle = find_dissector ("rrc"); }