aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-bgp.c3052
-rw-r--r--epan/dissectors/packet-bittorrent.c738
-rw-r--r--epan/dissectors/packet-dcerpc-netlogon.c11212
-rw-r--r--epan/dissectors/packet-dcerpc.c4064
-rw-r--r--epan/dissectors/packet-gsm_a_bssmap.c8388
5 files changed, 13739 insertions, 13715 deletions
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_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;
+ 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;
- switch (rd_type) {
+ 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 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);
+ 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 Labeled VPN IPv4 prefix length %u invalid",
- tag, plen + (labnum * 3*8) + 8*8);
- return -1;
+ 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;
- default:
- proto_tree_add_text(tree, tvb, start_offset,
- (offset - start_offset) + 2,
- "Unknown labeled VPN IPv4 address format %u", rd_type);
- return -1;
- }
- 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);
- default:
- proto_tree_add_text(tree, tvb, start_offset, 0,
- "Unknown SAFI (%u) for AFI %u", safi, afi);
- return -1;
- }
- break;
+ 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);
- case AFNUM_INET6:
- switch (safi) {
+ 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;
- 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;
+ switch (rd_type) {
- 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 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;
+ }
- 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);
+ 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;
- 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;
- }
+ case FORMAT_IP_LOC: /* Code borrowed from the decode_prefix4 function */
+ tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 2, 4);
- 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;
+ 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 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;
+ 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;
- 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);
+ 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;
- 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));
+ default:
+ proto_tree_add_text(tree, tvb, start_offset, 0,
+ "Unknown SAFI (%u) for AFI %u", safi, afi);
return -1;
- }
- plen -= 8*8;
+ } /* 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;
- switch (rd_type) {
+ 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 FORMAT_AS2_LOC:
- 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=%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;
+ (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 FORMAT_IP_LOC:
- tvb_memcpy(tvb, ip4addr.addr_bytes, offset + 2, 4);
-
- length = ipv6_addr_and_mask(tvb, offset + 8, &ip6addr, plen);
+ 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 Labeled VPN IPv6 prefix length %u invalid",
- tag, plen + (labnum * 3*8) + 8*8);
+ "%s Tunnel IPv6 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, 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,
+ "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);
-
- 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 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) {
+
+ 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);
+ 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);
+ 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<orfnum; i++) {
- /* ORF Type */
- orftype = tvb_get_guint8(tvb, *p);
- proto_tree_add_text(subtree, tvb, *p, 1, "ORF Type: %s (%u)",
- val_to_str(orftype, orf_type_vals,"Unknown"), orftype);
- (*p)++;
- /* Send/Receive */
- orfsendrecv = tvb_get_guint8(tvb, *p);
- proto_tree_add_text(subtree, tvb, *p,
- 1, "Send/Receive: %s (%u)",
- val_to_str(orfsendrecv, orf_send_recv_vals,
- "Uknown"), orfsendrecv);
- (*p)++;
- }
- break;
- /* unknown capability */
- default:
- 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 - 2,
- 1, "Capability code: %s (%d)",
- ctype >= 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<orfnum; i++) {
+ /* ORF Type */
+ orftype = tvb_get_guint8(tvb, *p);
+ proto_tree_add_text(subtree, tvb, *p, 1, "ORF Type: %s (%u)",
+ val_to_str(orftype, orf_type_vals,"Unknown"), orftype);
+ (*p)++;
+ /* Send/Receive */
+ orfsendrecv = tvb_get_guint8(tvb, *p);
+ proto_tree_add_text(subtree, tvb, *p,
+ 1, "Send/Receive: %s (%u)",
+ val_to_str(orfsendrecv, orf_send_recv_vals,
+ "Uknown"), orfsendrecv);
+ (*p)++;
+ }
+ break;
+ /* unknown capability */
+ default:
+ 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 - 2,
+ 1, "Capability code: %s (%d)",
+ ctype >= 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;
-
- /* 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;
- }
+ 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++);
+
+ 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);
-
- /* 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;
+ 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;
+ }
}
- /* 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, ')');
+ /* 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);
+ }
}
- 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 */
+ ep_strbuf_truncate(communities_emstr, communities_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));
+ 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;
}
- 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;
+ /* 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);
-
- /* (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, '[');
+ 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);
}
- 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;
+ 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;
+
+ /* 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;
+ }
+
+ /* 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"));
+
+ /* 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;
+ }
}
- /* 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, '}');
+ 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);
}
- else if (type == AS_CONFED_SET) {
- ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 2);
- ep_strbuf_append_c(as_path_emstr, ']');
+ 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);
}
- else if (type == AS_CONFED_SEQUENCE) {
- ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1);
- ep_strbuf_append_c(as_path_emstr, ')');
+ 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);
}
- else {
- ep_strbuf_truncate(as_path_emstr, as_path_emstr->len - 1);
+ 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"));
}
-
- /* 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) ?
- 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;
+ 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;
}
- }
-
- 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) ?
+ 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);
+
+ /* (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);
+ }
- 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);
+ 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;
- }
-
- aoff_save = aoff;
- tlen -= nexthop_len + 4;
- aoff += nexthop_len + 4 ;
+ 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);
+
+ /*
+ * 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;
-
- 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) {
+ }
+ 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) {
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"));
+
+ 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"));
+ break;
+ }
- 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);
-
- /* (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;
- }
+ 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);
+
+ /* (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) {
+ 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);
-
- 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);
-
- 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;
- }
+ 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"));
+
+ 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;
+ } /* 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 ;
-
- 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);
-
- 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);
-
- 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)
+ }
+ 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);
+
+ 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);
+
+ 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);
+
+ 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;
-
- default:
- proto_tree_add_text(subtree2, tvb, o + i + aoff, tlen,
- "Unknown (%u byte%s)", tlen, plurality(tlen, "", "s"));
- break;
- } /* end of second switch */
+ 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;
+ } /* 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;
-
- 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;
- }
+ guint8 ch;
+ int stringlen = 0, nextstringlen;
+ int used;
+ int izero = 0;
+
+ 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 -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;
}
- return used+stringlen;
- }
- if (!izero && ch>='0' && ch<='9') {
- if (ch=='0' && used==1) {
- izero = 1;
+ if (!izero && ch>='0' && ch<='9') {
+ if (ch=='0' && used==1) {
+ izero = 1;
+ }
+
+ nextstringlen = (stringlen * 10) + (ch - '0');
+ if (nextstringlen>=stringlen) {
+ stringlen = nextstringlen;
+ continue;
+ }
}
- 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");
}
- }
-
- 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;
+ 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;
-
- 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':
+ gint32 ival=0;
+ int neg = 0;
+ int izero = 0;
+ int used;
+ guint8 ch;
+
+ 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);
- }
+ proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid Integer");
}
- return used;
+ return -1;
+ }
- 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;
- }
- }
+ 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;
- if (tree) {
- proto_tree_add_text(tree, tvb, offset, length, "Decode Aborted: Invalid Integer");
+ 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;
}
- 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_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;
-
- 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;
- }
-
- 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;
- }
+ guint8 op;
+ int oplen = 0, op1len, op2len;
+ int used;
- 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;
- }
+ proto_item *ti = NULL, *td = NULL;
+ proto_tree *itree = NULL, *dtree = NULL;
- 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 (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 (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);
+ 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;
+ }
- 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);
+ 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 += op1len+op2len;
- length -= op1len+op2len;
- }
- if (dtree) {
- proto_tree_add_text(dtree, tvb, offset+used, -1, "Truncated Data");
- }
- return -1;
+ used = 1;
+ length--;
+
+ while (length>=1) {
+ op = tvb_get_guint8(tvb, offset+used);
+
+ if (op=='e') {
+ return used+1;
+ }
- 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);
- }
+ 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 (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) {
+ proto_tree_add_text(dtree, tvb, offset+used, -1, "Truncated Data");
+ }
+ return -1;
- if (op=='e') {
- return used+1;
+ 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);
}
- oplen = dissect_bencoding_rec(tvb, pinfo, offset+used, length, itree, level+1, ti, 0);
- if (oplen<1) return oplen;
+ used = 1;
+ length--;
- used += oplen;
- length -= oplen;
- }
- if (itree) {
- proto_tree_add_text(itree, tvb, offset+used, -1, "Truncated Data");
- }
- return -1;
+ while (length>=1) {
+ op = tvb_get_guint8(tvb, offset+used);
- case 'i':
- return dissect_bencoding_int(tvb, pinfo, offset, length, tree, treei, treeadd);
+ if (op=='e') {
+ return used+1;
+ }
- 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);
+ }
- return -1;
+ if (tree) {
+ proto_tree_add_text(tree, tvb, offset, -1, "Decode Aborted: Invalid Bencoding");
+ }
+ }
+
+ 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;
-
- 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) {
-
- 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;
- }
- }
- }
+ /*
+ * 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;
+
+ 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;
+ }
+ }
+ }
}
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
- };
-
- 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));
-
- 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);
+ };
+
+ 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;
+
+ 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);
+
+ 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;i<nb;i++)
- {
- debugprintf("%02hhX ",*(tab+i));
- }
- debugprintf("%s",txt2);
+ int i=0;
+ debugprintf("%s ",txt);
+ for(i=0;i<nb;i++)
+ {
+ debugprintf("%02hhX ",*(tab+i));
+ }
+ debugprintf("%s",txt2);
}
#else
#define debugprintf(...)
@@ -72,34 +72,35 @@ static void printnbyte(const guint8* tab _U_,int nb _U_,const char* txt _U_,cons
#define NETLOGON_FLAG_40000000 0x40000000
#define NETLOGON_FLAG_20000000 0x20000000
#define NETLOGON_FLAG_10000000 0x10000000
-#define NETLOGON_FLAG_8000000 0x8000000
-#define NETLOGON_FLAG_4000000 0x4000000
-#define NETLOGON_FLAG_2000000 0x2000000
-#define NETLOGON_FLAG_1000000 0x1000000
-#define NETLOGON_FLAG_800000 0x800000
-#define NETLOGON_FLAG_USEAES 0x400000
-#define NETLOGON_FLAG_200000 0x200000
-#define NETLOGON_FLAG_100000 0x100000
-#define NETLOGON_FLAG_80000 0x80000
-#define NETLOGON_FLAG_40000 0x40000
-#define NETLOGON_FLAG_20000 0x20000
-#define NETLOGON_FLAG_10000 0x10000
-#define NETLOGON_FLAG_8000 0x8000
-#define NETLOGON_FLAG_STRONGKEY 0x4000
-#define NETLOGON_FLAG_2000 0x2000
-#define NETLOGON_FLAG_1000 0x1000
-#define NETLOGON_FLAG_800 0x800
-#define NETLOGON_FLAG_400 0x400
-#define NETLOGON_FLAG_200 0x200
-#define NETLOGON_FLAG_100 0x100
-#define NETLOGON_FLAG_80 0x80
-#define NETLOGON_FLAG_40 0x40
-#define NETLOGON_FLAG_20 0x20
-#define NETLOGON_FLAG_10 0x10
-#define NETLOGON_FLAG_8 0x8
-#define NETLOGON_FLAG_4 0x4
-#define NETLOGON_FLAG_2 0x2
-#define NETLOGON_FLAG_1 0x1
+#define NETLOGON_FLAG_8000000 0x8000000
+#define NETLOGON_FLAG_4000000 0x4000000
+#define NETLOGON_FLAG_2000000 0x2000000
+#define NETLOGON_FLAG_1000000 0x1000000
+#define NETLOGON_FLAG_800000 0x800000
+#define NETLOGON_FLAG_USEAES 0x400000
+#define NETLOGON_FLAG_200000 0x200000
+#define NETLOGON_FLAG_100000 0x100000
+#define NETLOGON_FLAG_80000 0x80000
+#define NETLOGON_FLAG_40000 0x40000
+#define NETLOGON_FLAG_20000 0x20000
+#define NETLOGON_FLAG_10000 0x10000
+#define NETLOGON_FLAG_8000 0x8000
+#define NETLOGON_FLAG_STRONGKEY 0x4000
+#define NETLOGON_FLAG_2000 0x2000
+#define NETLOGON_FLAG_1000 0x1000
+#define NETLOGON_FLAG_800 0x800
+#define NETLOGON_FLAG_400 0x400
+#define NETLOGON_FLAG_200 0x200
+#define NETLOGON_FLAG_100 0x100
+#define NETLOGON_FLAG_80 0x80
+#define NETLOGON_FLAG_40 0x40
+#define NETLOGON_FLAG_20 0x20
+#define NETLOGON_FLAG_10 0x10
+#define NETLOGON_FLAG_8 0x8
+#define NETLOGON_FLAG_4 0x4
+#define NETLOGON_FLAG_2 0x2
+#define NETLOGON_FLAG_1 0x1
+
static GHashTable *netlogon_auths=NULL;
static GHashTable *schannel_auths;
@@ -440,21 +441,21 @@ static gint ett_get_dcname_request_flags = -1;
static gint ett_dc_flags = -1;
typedef struct _netlogon_auth_vars {
- guint64 client_challenge;
- guint64 server_challenge;
- guint8 session_key[16];
- guint8 encryption_key[16];
- guint8 sequence[16];
- guint32 flags;
- guint64 seq;
- guint64 confounder;
- guint8 private_type;
- gboolean can_decrypt;
- void* private;
- char* client_name;
- int start;
- int next_start;
- struct _netlogon_auth_vars *next;
+ guint64 client_challenge;
+ guint64 server_challenge;
+ guint8 session_key[16];
+ guint8 encryption_key[16];
+ guint8 sequence[16];
+ guint32 flags;
+ guint64 seq;
+ guint64 confounder;
+ guint8 private_type;
+ gboolean can_decrypt;
+ void* private;
+ char* client_name;
+ int start;
+ int next_start;
+ struct _netlogon_auth_vars *next;
} netlogon_auth_vars;
typedef struct _md4_pass {
@@ -462,23 +463,23 @@ typedef struct _md4_pass {
} md4_pass;
typedef struct _seen_packet {
- gboolean isseen;
- guint32 num;
+ gboolean isseen;
+ guint32 num;
} seen_packet;
static seen_packet seen;
guint
netlogon_auth_hash (gconstpointer k);
static e_uuid_t uuid_dcerpc_netlogon = {
- 0x12345678, 0x1234, 0xabcd,
- { 0xef, 0x00, 0x01, 0x23, 0x45, 0x67, 0xcf, 0xfb }
+ 0x12345678, 0x1234, 0xabcd,
+ { 0xef, 0x00, 0x01, 0x23, 0x45, 0x67, 0xcf, 0xfb }
};
static guint16 ver_dcerpc_netlogon = 1;
static gint dissect_dcerpc_8bytes (tvbuff_t *tvb, gint offset, packet_info *pinfo _U_,
- proto_tree *tree, guint8 *drep,
- int hfindex, guint64 *pdata)
+ proto_tree *tree, guint8 *drep,
+ int hfindex, guint64 *pdata)
{
guint64 data;
@@ -495,72 +496,72 @@ static gint dissect_dcerpc_8bytes (tvbuff_t *tvb, gint offset, packet_info *pinf
}
static const true_false_string user_account_control_dont_require_preauth= {
- "This account DOESN'T_REQUIRE_PREAUTHENTICATION",
- "This account REQUIRES preauthentication",
+ "This account DOESN'T_REQUIRE_PREAUTHENTICATION",
+ "This account REQUIRES preauthentication",
};
static const true_false_string user_account_control_use_des_key_only= {
- "This account must USE_DES_KEY_ONLY for passwords",
- "This account does NOT have to use_des_key_only",
+ "This account must USE_DES_KEY_ONLY for passwords",
+ "This account does NOT have to use_des_key_only",
};
static const true_false_string user_account_control_not_delegated= {
- "This account is NOT_DELEGATED",
- "This might have been delegated",
+ "This account is NOT_DELEGATED",
+ "This might have been delegated",
};
static const true_false_string user_account_control_trusted_for_delegation= {
- "This account is TRUSTED_FOR_DELEGATION",
- "This account is NOT trusted_for_delegation",
+ "This account is TRUSTED_FOR_DELEGATION",
+ "This account is NOT trusted_for_delegation",
};
static const true_false_string user_account_control_smartcard_required= {
- "This account REQUIRES_SMARTCARD to authenticate",
- "This account does NOT require_smartcard to authenticate",
+ "This account REQUIRES_SMARTCARD to authenticate",
+ "This account does NOT require_smartcard to authenticate",
};
static const true_false_string user_account_control_encrypted_text_password_allowed= {
- "This account allows ENCRYPTED_TEXT_PASSWORD",
- "This account does NOT allow encrypted_text_password",
+ "This account allows ENCRYPTED_TEXT_PASSWORD",
+ "This account does NOT allow encrypted_text_password",
};
static const true_false_string user_account_control_account_auto_locked= {
- "This account is AUTO_LOCKED",
- "This account is NOT auto_locked",
+ "This account is AUTO_LOCKED",
+ "This account is NOT auto_locked",
};
static const true_false_string user_account_control_dont_expire_password= {
- "This account DOESN'T_EXPIRE_PASSWORDs",
- "This account might expire_passwords",
+ "This account DOESN'T_EXPIRE_PASSWORDs",
+ "This account might expire_passwords",
};
static const true_false_string user_account_control_server_trust_account= {
- "This account is a SERVER_TRUST_ACCOUNT",
- "This account is NOT a server_trust_account",
+ "This account is a SERVER_TRUST_ACCOUNT",
+ "This account is NOT a server_trust_account",
};
static const true_false_string user_account_control_workstation_trust_account= {
- "This account is a WORKSTATION_TRUST_ACCOUNT",
- "This account is NOT a workstation_trust_account",
+ "This account is a WORKSTATION_TRUST_ACCOUNT",
+ "This account is NOT a workstation_trust_account",
};
static const true_false_string user_account_control_interdomain_trust_account= {
- "This account is an INTERDOMAIN_TRUST_ACCOUNT",
- "This account is NOT an interdomain_trust_account",
+ "This account is an INTERDOMAIN_TRUST_ACCOUNT",
+ "This account is NOT an interdomain_trust_account",
};
static const true_false_string user_account_control_mns_logon_account= {
- "This account is a MNS_LOGON_ACCOUNT",
- "This account is NOT a mns_logon_account",
+ "This account is a MNS_LOGON_ACCOUNT",
+ "This account is NOT a mns_logon_account",
};
static const true_false_string user_account_control_normal_account= {
- "This account is a NORMAL_ACCOUNT",
- "This account is NOT a normal_account",
+ "This account is a NORMAL_ACCOUNT",
+ "This account is NOT a normal_account",
};
static const true_false_string user_account_control_temp_duplicate_account= {
- "This account is a TEMP_DUPLICATE_ACCOUNT",
- "This account is NOT a temp_duplicate_account",
+ "This account is a TEMP_DUPLICATE_ACCOUNT",
+ "This account is NOT a temp_duplicate_account",
};
static const true_false_string user_account_control_password_not_required= {
- "This account REQUIRES_NO_PASSWORD",
- "This account REQUIRES a password",
+ "This account REQUIRES_NO_PASSWORD",
+ "This account REQUIRES a password",
};
static const true_false_string user_account_control_home_directory_required= {
- "This account REQUIRES_HOME_DIRECTORY",
- "This account does NOT require_home_directory",
+ "This account REQUIRES_HOME_DIRECTORY",
+ "This account does NOT require_home_directory",
};
static const true_false_string user_account_control_account_disabled= {
- "This account is DISABLED",
- "This account is NOT disabled",
+ "This account is DISABLED",
+ "This account is NOT disabled",
};
typedef struct _netlogon_auth_key {
@@ -576,11 +577,11 @@ netlogon_auth_equal (gconstpointer k1, gconstpointer k2)
const netlogon_auth_key *key1 = (const netlogon_auth_key *)k1;
const netlogon_auth_key *key2 = (const netlogon_auth_key *)k2;
if(key1->name == 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; i<strlen(key1->name);i++) {
- hash_val1 += key1->name[i];
- }
+ unsigned int i = 0;
+ hash_val1 = 0;
+ for(i=0; i<strlen(key1->name);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)
-{
- 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;
- }
-
- 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);
- }
-
- 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;
+ packet_info *pinfo, proto_tree *parent_tree, guint8 *drep)
+{
+ 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;
+ }
+
+ 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);
+ }
+
+ 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;
}
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 (di->conformant_run)
+ return offset;
- /*
- struct {
- short len;
- short size;
- [size_is(size/2), length_is(len/2), ptr] unsigned short *string;
- } HASH;
+#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_len, &len);
- offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep,
- hf_nt_cs_size, &size);
+ 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);
+ 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;
+ 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)
-{
- 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;
- }
-
- 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);
- }
-
- 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;
+ packet_info *pinfo, proto_tree *parent_tree, guint8 *drep)
+{
+ 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;
+ }
+
+ 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);
+ }
+
+ 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)
-{
- 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;
+ packet_info *pinfo, proto_tree *tree,
+ guint8 *drep)
+{
+ 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;
}
/*
@@ -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)
-{
- guint16 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;
+ packet_info *pinfo, proto_tree *tree,
+ guint8 *drep)
+{
+ guint16 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;
}
/*
* 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)
-{
- /*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));
-
- 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);
-
- 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);
+ 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;
+
+ /* 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);
+
+ 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;
+
+ 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);
- }
- if(vars == NULL)
- {
- debugprintf("Something strange happened while searching for challenge_reply\n");
- }
- else
- {
- vars->server_challenge = server_challenge;
+ 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;
+ }
}
- }
/*
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)
-{
- offset = dissect_ndr_duint32(tvb, offset, pinfo, tree, drep,
- hf_netlogon_modify_count, NULL);
-
- 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
+ packet_info *pinfo, proto_tree *tree,
+ guint8 *drep)
+{
+ offset = dissect_ndr_duint32(tvb, offset, pinfo, tree, drep,
+ hf_netlogon_modify_count, NULL);
+
+ 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
+
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)
-{
- 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);
- }
-
- 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;
- }
-
- proto_item_set_len(item, offset-old_offset);
- return offset;
+ packet_info *pinfo, proto_tree *parent_tree,
+ guint8 *drep)
+{
+ 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);
+ }
+
+ 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;
+ }
+
+ 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)
-{
- 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);
- }
-
- 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;
- }
-
- proto_item_set_len(item, offset-old_offset);
- return offset;
+ packet_info *pinfo, proto_tree *parent_tree,
+ guint8 *drep)
+{
+ 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);
+ }
+
+ 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;
+ }
+
+ 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)
-{
- 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);
- }
+ packet_info *pinfo, proto_tree *parent_tree,
+ guint8 *drep)
+{
+ 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);
+ }
- 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)
-{
- guint32 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;
- }
-
- return offset;
+ packet_info *pinfo, proto_tree *tree,
+ guint8 *drep)
+{
+ guint32 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;
+ }
+
+ 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)
-{
- 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;
- }
-
- 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);
- }
-
- 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;
-}
-
-
-#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
+ packet_info *pinfo, proto_tree *parent_tree, guint8 *drep)
+{
+ 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;
+ }
+
+ 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);
+ }
+
+ 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;
+}
+
+
+#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)
-{
- 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;
- }
-
- 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);
- }
-
- 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;
-}
-
-
-
-#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
+ packet_info *pinfo, proto_tree *parent_tree, guint8 *drep)
+{
+ 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;
+ }
+
+ 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);
+ }
+
+ 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;
+}
+
+
+
+#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)
-{
- 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;
- }
-
- 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);
- }
-
- 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;
+ packet_info *pinfo, proto_tree *parent_tree, guint8 *drep)
+{
+ 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;
+ }
+
+ 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);
+ }
+
+ 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;
}
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;
-
- 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;
+ 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)
+ return offset;
- 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)
-{
- 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);
- }
+ packet_info *pinfo, proto_tree *parent_tree,
+ guint8 *drep)
+{
+ 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);
+ }
/*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)
-{
- 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);
- }
+ packet_info *pinfo, proto_tree *parent_tree,
+ guint8 *drep)
+{
+ 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);
+ }
- 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)
-{
- 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);
- }
+ packet_info *pinfo, proto_tree *parent_tree,
+ guint8 *drep)
+{
+ 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);
+ }
- 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)
-{
- 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;
+ packet_info *pinfo, proto_tree *tree,
+ guint8 *drep)
+{
+ 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;
}
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);
-
- /*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;
+ 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;
}
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;
-
- 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++;
- }
- }
-
- 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++;
- }
-
- 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;
+ 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));
+
+ 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;
+ }
+
+ *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;
#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;
-
- 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;
+ guint32 flags;
+ netlogon_auth_vars *vars;
+ netlogon_auth_key key;
+ guint64 server_cred;
- 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);
+ offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, tree, drep,
+ hf_server_credential, &server_cred);
- generate_hash_key(pinfo,1,&key,NULL);
+ flags = tvb_get_letohl (tvb, offset);
+ netlogon_dissect_neg_options(tvb,tree,flags,offset);
+ offset +=4;
- 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");
+ ALIGN_TO_4_BYTES;
+ if(version3) {
+ offset = dissect_dcerpc_uint32(tvb, offset, pinfo, tree, drep,
+ hf_server_rid, NULL);
}
- 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;
+ offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep,
+ hf_netlogon_rc, NULL);
+ 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;i<list_size;i++)
- {
- password = pass_list[i];
- md5_hmac(md5,16,(guint8*) &password,16,session_key);
- crypt_des_ecb(buf,(unsigned char*)&vars->server_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;i<list_size;i++)
+ {
+ password = pass_list[i];
+ md5_hmac(md5,16,(guint8*) &password,16,session_key);
+ crypt_des_ecb(buf,(unsigned char*)&vars->server_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)
-{
- /* 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: return_authenticator", -1);
- offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
- netlogon_dissect_WORKSTATION_BUFFER, NDR_POINTER_REF,
- "WORKSTATION_BUFFER", -1);
- return offset;
+ 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);
+
+ 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;
}
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)
-{
- 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);
- }
-
- /* 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);
-
- /* 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;
- }
-
- /* 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];
-
- 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];
-
- 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];
-
- 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;
+ 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;
+
+ 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. */
+
+ /* 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;
+
+
+ /* 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;
+ }
+
+ /* 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);
+ }
+
+ /* 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);
+ }
+
+ /* 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);
+ }
+
+
+ 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;i<key_len;i++) {
- buf[i] = session_key[i] ^ 0xF0;
+ 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;i<key_len;i++) {
+ buf[i] = session_key[i] ^ 0xF0;
+ }
+ md5_hmac(zeros,4,buf,key_len,buf2);
+ md5_hmac((guint8*)&sequence,8,buf2,16,seal_key);
+ g_free(buf);
+ return 1;
+ }
+ else {
+ g_free(buf);
+ return 0;
}
- md5_hmac(zeros,4,buf,key_len,buf2);
- md5_hmac((guint8*)&sequence,8,buf2,16,seal_key);
- g_free(buf);
- return 1;
- }
- else {
- g_free(buf);
- return 0;
- }
}
static guint64 uncrypt_sequence(guint8* session_key,guint64 checksum,guint64 enc_seq,unsigned char is_server _U_)
{
- guint8 zeros[4];
- guint8 buf[16];
- guint8 key[16];
- rc4_state_struct rc4state;
- guint8 *p_seq = (guint8*) &enc_seq;
- /*guint32 temp;*/
-
- memset(zeros,0,4);
- md5_hmac(zeros,4,session_key,16,buf);
- md5_hmac((guint8*)&checksum,8,buf,16,key);
-
- crypt_rc4_init(&rc4state,key,16);
- crypt_rc4(&rc4state,p_seq,8);
- /*temp = *((guint32*)p_seq);
- *((guint32*)p_seq) = *((guint32*)p_seq+1);
- *((guint32*)p_seq+1) = temp;
-
- if(!is_server) {
- *p_seq = *p_seq & 0x7F;
- }
- */
- return enc_seq;
+ guint8 zeros[4];
+ guint8 buf[16];
+ guint8 key[16];
+ rc4_state_struct rc4state;
+ guint8 *p_seq = (guint8*) &enc_seq;
+ /*guint32 temp;*/
+
+ memset(zeros,0,4);
+ md5_hmac(zeros,4,session_key,16,buf);
+ md5_hmac((guint8*)&checksum,8,buf,16,key);
+
+ crypt_rc4_init(&rc4state,key,16);
+ crypt_rc4(&rc4state,p_seq,8);
+ /*temp = *((guint32*)p_seq);
+ *((guint32*)p_seq) = *((guint32*)p_seq+1);
+ *((guint32*)p_seq+1) = temp;
+
+ if(!is_server) {
+ *p_seq = *p_seq & 0x7F;
+ }
+ */
+ return enc_seq;
}
static tvbuff_t *
dissect_packet_data(tvbuff_t *tvb ,tvbuff_t *auth_tvb _U_,
- int offset , packet_info *pinfo ,dcerpc_auth_info *auth_info _U_,unsigned char is_server)
+ int offset , packet_info *pinfo ,dcerpc_auth_info *auth_info _U_,unsigned char is_server)
{
- 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);*/
+ 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*)&copyconfounder,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;
-
- crypt_rc4_init(&rc4state,vars->encryption_key,16);
- crypt_rc4(&rc4state,(guint8*)&copyconfounder,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);
- }
+ debugprintf("Vars not found %d (packet_data)\n",g_hash_table_size(netlogon_auths));
+ return(buf);
+ }
- 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)
-{
- 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);
-
- 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 *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;
+
+ 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;
- 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_seq, &encrypted_seq);
- offset = dissect_dcerpc_8bytes(tvb, offset, pinfo, subtree, drep,
- hf_netlogon_secchan_verf_digest, &digest);
+ 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")*/
+ /* 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 (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 ) {
- debugprintf("Vars not found %d (packet_data)\n",g_hash_table_size(netlogon_auths));
- return(offset);
+ 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 {
- 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));
}
- }
- 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;
+ /*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;
+ 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_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,
+ 0x0, NULL, HFILL }},
- { &hf_netlogon_secchan_verf_digest,
- { "Packet Digest", "netlogon.secchan.digest", FT_BYTES, BASE_NONE, NULL,
+ { &hf_netlogon_secchan_verf_seq,
+ { "Sequence No", "netlogon.secchan.seq", 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_nonce,
+ { "Nonce", "netlogon.secchan.nonce", 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_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_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_enabled,
- { "Enabled", "netlogon.groups.attrs.enabled",
- FT_BOOLEAN, 32, TFS(&group_attrs_enabled), 0x00000004,
- "The group attributes ENABLED 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_enabled,
+ { "Enabled", "netlogon.groups.attrs.enabled",
+ FT_BOOLEAN, 32, TFS(&group_attrs_enabled), 0x00000004,
+ "The group attributes ENABLED 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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 }},
-
- { &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
- };
-
- 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);
+ 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 }},
+ };
+
+ 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_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,
-
- &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"
+ &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"
};
/* 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;
-
- 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. */
-
- 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)"));
- }
+ 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;
+
+ /* 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;
+ }
+
+ 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;
-
- 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;
- }
-
- vs[num_sd].value = 0;
- vs[num_sd].strptr = NULL;
-
- return vs;
+ 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++;
+ }
+
+ if (!vs) {
+ vs = g_malloc((num_sd + 1) * sizeof(value_string));
+ goto again;
+ }
+
+ vs[num_sd].value = 0;
+ vs[num_sd].strptr = NULL;
+
+ 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;
-
-
- 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]);
- }
- }
+ 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]);
+ }
+ }
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;
-
- di=pinfo->private_data;
-
- if (di->call_data->flags & DCERPC_IS_NDR64) {
- conformance_size = 8;
- }
-
- 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);
-
- /* real run, dissect the elements */
- for(i=0;i<di->array_max_count;i++){
- offset = (*fnct)(tvb, offset, pinfo, tree, drep);
- }
- }
-
- return offset;
+ guint32 i;
+ dcerpc_info *di;
+ int old_offset;
+ int conformance_size = 4;
+
+ di=pinfo->private_data;
+
+ if (di->call_data->flags & DCERPC_IS_NDR64) {
+ conformance_size = 8;
+ }
+
+ 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);
+
+ /* real run, dissect the elements */
+ for(i=0;i<di->array_max_count;i++){
+ offset = (*fnct)(tvb, offset, pinfo, tree, drep);
+ }
+ }
+
+ 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;
-
- di=pinfo->private_data;
-
- if (di->call_data->flags & DCERPC_IS_NDR64) {
- conformance_size = 8;
- }
-
- 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);
-
- /* real run, dissect the elements */
- for(i=0;i<di->array_actual_count;i++){
- old_offset = offset;
- offset = (*fnct)(tvb, offset, pinfo, tree, drep);
- if (offset <= old_offset)
- THROW(ReportedBoundsError);
- }
- }
-
- return offset;
+ guint32 i;
+ dcerpc_info *di;
+ int old_offset;
+ int conformance_size = 4;
+
+ di=pinfo->private_data;
+
+ if (di->call_data->flags & DCERPC_IS_NDR64) {
+ conformance_size = 8;
+ }
+
+ 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);
+
+ /* real run, dissect the elements */
+ for(i=0;i<di->array_actual_count;i++){
+ old_offset = offset;
+ offset = (*fnct)(tvb, offset, pinfo, tree, drep);
+ if (offset <= old_offset)
+ THROW(ReportedBoundsError);
+ }
+ }
+
+ 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;
-
- di=pinfo->private_data;
-
- if (di->call_data->flags & DCERPC_IS_NDR64) {
- conformance_size = 8;
- }
-
- 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);
-
- /* real run, dissect the elements */
- for(i=0;i<di->array_actual_count;i++){
- offset = (*fnct)(tvb, offset, pinfo, tree, drep);
- }
- }
-
- return offset;
+ guint32 i;
+ dcerpc_info *di;
+ int old_offset;
+ int conformance_size = 4;
+
+ di=pinfo->private_data;
+
+ if (di->call_data->flags & DCERPC_IS_NDR64) {
+ conformance_size = 8;
+ }
+
+ 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);
+
+ /* real run, dissect the elements */
+ for(i=0;i<di->array_actual_count;i++){
+ offset = (*fnct)(tvb, offset, pinfo, tree, drep);
+ }
+ }
+
+ 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);
-
- di=pinfo->private_data;
-
- 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--;
- }
- }
- }
-
- }
-
- g_free(s);
- return offset;
+ dcerpc_info *di;
+ char *s = NULL;
+ gint levels = CB_STR_ITEM_LEVELS(param);
+
+ di=pinfo->private_data;
+
+ 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--;
+ }
+ }
+ }
+
+ }
+
+ 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;
-
- 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;i<len;i++){
- ndr_pointer_data_t *tnpd;
- tnpd=g_slist_nth_data(ndr_pointer_list, i);
- if(tnpd->fnct){
- 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);
-
- 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_<type> 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);
-
- return offset;
+ int found_new_pointer;
+ dcerpc_info *di;
+ int old_offset;
+ int next_pointer;
+
+ 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;i<len;i++){
+ ndr_pointer_data_t *tnpd;
+ tnpd=g_slist_nth_data(ndr_pointer_list, i);
+ if(tnpd->fnct){
+ 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);
+
+ 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_<type> 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);
+
+ 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;
-
- /* check if this pointer is valid */
- if(id!=0xffffffff){
- dcerpc_info *di;
- dcerpc_call_value *value;
-
- 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 */
- }
-
- /* 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++;
+ ndr_pointer_data_t *npd;
+
+ /* check if this pointer is valid */
+ if(id!=0xffffffff){
+ dcerpc_info *di;
+ dcerpc_call_value *value;
+
+ 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 */
+ }
+
+ /* 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++;
}
static int
find_pointer_index(guint32 id)
{
- ndr_pointer_data_t *npd;
- int i,len;
-
- len=g_slist_length(ndr_pointer_list);
- for(i=0;i<len;i++){
- npd=g_slist_nth_data(ndr_pointer_list, i);
- if(npd){
- if(npd->id==id){
- return i;
- }
- }
- }
-
- return -1;
+ ndr_pointer_data_t *npd;
+ int i,len;
+
+ len=g_slist_length(ndr_pointer_list);
+ for(i=0;i<len;i++){
+ npd=g_slist_nth_data(ndr_pointer_list, i);
+ if(npd){
+ if(npd->id==id){
+ return i;
+ }
+ }
+ }
+
+ 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;
-
- 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;
-
- /* 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;
- }
-
- /*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);
-
- 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);
-
- /* 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;
-
- /* 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;
- }
-
- /* 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;
-
- /* 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;
- }
-
- /*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);
-
- 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;
- }
-
- /*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);
-
- 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);
-
- /* 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;
- }
+ 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;
+ }
+
+
+ /*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);
+
+ 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;
+
+ /* 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;
+ }
+
+ /* 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;
+ }
+
+ /* 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);
+
+ 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;
+ }
+
+ /*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);
+
+ 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;
+
+ /* 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;
+ }
+
+ /* 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;
+
+ /* 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;
+ }
+
+ /* 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;
+ }
+
+ /* 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;
- }
-
- /* Set the length for the new subtree */
- if (tr){
- proto_item_set_len(tr, offset-start_offset);
- }
- return offset;
+ /* 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;
}
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;
-
- auth_offset = hdr->frag_len - hdr->auth_len;
-
- auth_tvb = tvb_new_subset(tvb, auth_offset, hdr->auth_len,
- hdr->auth_len);
-
- 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 {
+ dcerpc_auth_subdissector_fns *auth_fns;
+ tvbuff_t *auth_tvb;
+
+ auth_offset = hdr->frag_len - hdr->auth_len;
+
+ auth_tvb = tvb_new_subset(tvb, auth_offset, hdr->auth_len,
+ hdr->auth_len);
+
+ 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 {
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);
-
- /* 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);
- }
-
- 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);
- }
-
- /* 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;
+ dissect_dcerpc_uint16 (tvb, offset, pinfo, NULL, hdr->drep,
+ hf_dcerpc_cn_ctx_id, &ctx_id);
- dcerpc_tvb_get_uuid (tvb, offset, hdr->drep, &trans_id);
- if (ctx_tree) {
+ /* 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;
- 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);
+ 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);
+ }
- uuid_str = guid_to_str((e_guid_t *) &trans_id);
- uuid_name = guids_get_uuid_name(&trans_id);
+ 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(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);
+ if(dcerpc_tree) {
+ proto_item_append_text(ctx_item, "[%u]: ID:%u", i+1, ctx_id);
}
+
+ /* 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;
- 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);
+ }
+ }
+
+ /* 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;
}
- saw_ctx_item = TRUE;
- }
- if(ctx_tree) {
- proto_item_set_len(ctx_item, offset - ctx_offset);
- }
+ 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;
-
- /* 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;
-
- 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),
-
- plurality(tvb_length(payload_tvb), "", "s"));
-
- add_new_data_source(
- pinfo, result, "Decrypted stub data");
-
- /* We succeeded. */
- decrypted_tvb = result;
- }
- }
+ /*
+ * 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);
+ }
+
+ 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);
+
+ 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"));
+
+ add_new_data_source(
+ pinfo, result, "Decrypted stub data");
+
+ /* 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;
-
- 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);
- }
-
- pinfo->fragmented = FALSE;
-
- 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);
-
- } 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(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);
+
+ 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;
+
+ 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);
+
+ } 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));
-
- if(decrypted_tvb){
- show_stub_data (decrypted_tvb, 0, tree, auth_info, FALSE);
- } else {
- show_stub_data (payload_tvb, 0, tree, auth_info, TRUE);
- }
+ /* 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);
+ }
}
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;
-
- 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;
-
- 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);
-
- /* 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;
- }
-
- 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;
- }
- }
- }
+ /* !!! 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);
+
+ 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;
+
+ /* 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);
+ }
+
+ 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);
+
+ 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;
-
- 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);
- }
- }
+ 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);
+ }
+ }
- 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;
-
- /* !!! 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);
-
- 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_frame<pinfo->fd->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;
- }
- }
- }
- }
+ 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;
+
+ 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_frame<pinfo->fd->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");
- }
-
- dissect_dcerpc_cn_stub (tvb, offset, pinfo, dcerpc_tree, tree,
- hdr, di, &auth_info, alloc_hint,
- value->rep_frame);
+ /* 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);
} 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;
-
- /* !!! 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);
-
- 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;
- }
-
- }
- }
+ 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;
+
+ 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;
+ 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;
-
- 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"));
- }
- }
- }
+ 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 {
- /* 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;
-
- fd_head = fragment_add_seq_next(tvb, offset, pinfo,
- value->rep_frame,
- dcerpc_co_fragment_table, dcerpc_co_reassemble_table,
- stub_length,
- TRUE);
-
- 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]");
- }
- }
+ 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"));
+ }
+ }
+ }
+ } 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;
+
+ fd_head = fragment_add_seq_next(tvb, offset, pinfo,
+ value->rep_frame,
+ dcerpc_co_fragment_table, dcerpc_co_reassemble_table,
+ stub_length,
+ TRUE);
+
+ 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) {
-
-
- /* 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"));
- }
- }
+ !tvb_bytes_exist(tvb, offset, stub_length) ){
+ if(hdr->frag_num == 0) {
+
+
+ /* 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"));
+ }
+ }
}
} 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"));
+ }
+ }
+
+ 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);
+ }
}
- 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]");
}
- } 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;
-
- 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;
-
- 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);
+ 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_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);
+
+ 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;
-
- 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;
- }
- }
+ 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;
+
+ 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 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);
+ /* 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);
+
+ /* 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 <anders.broman [at] ericsson.com
- * Title 3GPP Other
+ * Title 3GPP Other
*
* Reference [2]
* Mobile-services Switching Centre - Base Station System
* (MSC - BSS) interface;
* Layer 3 specification
- * (GSM 08.08 version 7.7.0 Release 1998) TS 100 590 v7.7.0
+ * (GSM 08.08 version 7.7.0 Release 1998) TS 100 590 v7.7.0
* 3GPP TS 48.008 version 8.4.0 Release 8
*
* $Id$
@@ -58,273 +58,273 @@
/* PROTOTYPES/FORWARDS */
const value_string gsm_a_bssmap_msg_strings[] = {
- { 0x01, "Assignment Request" },
- { 0x02, "Assignment Complete" },
- { 0x03, "Assignment Failure" },
- { 0x08, "Channel Modify request" },
- { 0x10, "Handover Request" },
- { 0x11, "Handover Required" },
- { 0x12, "Handover Request Acknowledge" },
- { 0x13, "Handover Command" },
- { 0x14, "Handover Complete" },
- { 0x15, "Handover Succeeded" },
- { 0x16, "Handover Failure" },
- { 0x17, "Handover Performed" },
- { 0x18, "Handover Candidate Enquire" },
- { 0x19, "Handover Candidate Response" },
- { 0x1a, "Handover Required Reject" },
- { 0x1b, "Handover Detect" },
- { 0x1c, "Internal Handover Required" },
- { 0x1d, "Internal Handover Required Reject" },
- { 0x1e, "Internal Handover Command" },
- { 0x1f, "Internal Handover Enquiry" },
- { 0x20, "Clear Command" },
- { 0x21, "Clear Complete" },
- { 0x22, "Clear Request" },
- { 0x23, "Reserved" },
- { 0x24, "Reserved" },
- { 0x25, "SAPI 'n' Reject" },
- { 0x26, "Confusion" },
- { 0x28, "Suspend" },
- { 0x29, "Resume" },
- { 0x2a, "Connection Oriented Information" },
- { 0x2b, "Perform Location Request" },
- { 0x2c, "LSA Information" },
- { 0x2d, "Perform Location Response" },
- { 0x2e, "Perform Location Abort" },
- { 0x2f, "Common Id" },
- { 0x30, "Reset" },
- { 0x31, "Reset Acknowledge" },
- { 0x32, "Overload" },
- { 0x33, "Reserved" },
- { 0x34, "Reset Circuit" },
- { 0x35, "Reset Circuit Acknowledge" },
- { 0x36, "MSC Invoke Trace" },
- { 0x37, "BSS Invoke Trace" },
- { 0x3a, "Connectionless Information" },
- { 0x3c, "Reset Resource" },
- { 0x3d, "Reset Resource Acknowledge" },
- { 0x40, "Block" },
- { 0x41, "Blocking Acknowledge" },
- { 0x42, "Unblock" },
- { 0x43, "Unblocking Acknowledge" },
- { 0x44, "Circuit Group Block" },
- { 0x45, "Circuit Group Blocking Acknowledge" },
- { 0x46, "Circuit Group Unblock" },
- { 0x47, "Circuit Group Unblocking Acknowledge" },
- { 0x48, "Unequipped Circuit" },
- { 0x4e, "Change Circuit" },
- { 0x4f, "Change Circuit Acknowledge" },
- { 0x50, "Resource Request" },
- { 0x51, "Resource Indication" },
- { 0x52, "Paging" },
- { 0x53, "Cipher Mode Command" },
- { 0x54, "Classmark Update" },
- { 0x55, "Cipher Mode Complete" },
- { 0x56, "Queuing Indication" },
- { 0x57, "Complete Layer 3 Information" },
- { 0x58, "Classmark Request" },
- { 0x59, "Cipher Mode Reject" },
- { 0x5a, "Load Indication" },
- { 0x04, "VGCS/VBS Setup" },
- { 0x05, "VGCS/VBS Setup Ack" },
- { 0x06, "VGCS/VBS Setup Refuse" },
- { 0x07, "VGCS/VBS Assignment Request" },
- { 0x1c, "VGCS/VBS Assignment Result" },
- { 0x1d, "VGCS/VBS Assignment Failure" },
- { 0x1e, "VGCS/VBS Queuing Indication" },
- { 0x1f, "Uplink Request" },
- { 0x27, "Uplink Request Acknowledge" },
- { 0x49, "Uplink Request Confirmation" },
- { 0x4a, "Uplink Release Indication" },
- { 0x4b, "Uplink Reject Command" },
- { 0x4c, "Uplink Release Command" },
- { 0x4d, "Uplink Seized Command" },
- { 0x50, "VGCS Additional Information" },
- { 0x51, "VGCS SMS" },
- { 0x52, "Notification Data" },
- { 0x53, "Uplink Application Data" },
-
- { 0, NULL }
+ { 0x01, "Assignment Request" },
+ { 0x02, "Assignment Complete" },
+ { 0x03, "Assignment Failure" },
+ { 0x08, "Channel Modify request" },
+ { 0x10, "Handover Request" },
+ { 0x11, "Handover Required" },
+ { 0x12, "Handover Request Acknowledge" },
+ { 0x13, "Handover Command" },
+ { 0x14, "Handover Complete" },
+ { 0x15, "Handover Succeeded" },
+ { 0x16, "Handover Failure" },
+ { 0x17, "Handover Performed" },
+ { 0x18, "Handover Candidate Enquire" },
+ { 0x19, "Handover Candidate Response" },
+ { 0x1a, "Handover Required Reject" },
+ { 0x1b, "Handover Detect" },
+ { 0x1c, "Internal Handover Required" },
+ { 0x1d, "Internal Handover Required Reject" },
+ { 0x1e, "Internal Handover Command" },
+ { 0x1f, "Internal Handover Enquiry" },
+ { 0x20, "Clear Command" },
+ { 0x21, "Clear Complete" },
+ { 0x22, "Clear Request" },
+ { 0x23, "Reserved" },
+ { 0x24, "Reserved" },
+ { 0x25, "SAPI 'n' Reject" },
+ { 0x26, "Confusion" },
+ { 0x28, "Suspend" },
+ { 0x29, "Resume" },
+ { 0x2a, "Connection Oriented Information" },
+ { 0x2b, "Perform Location Request" },
+ { 0x2c, "LSA Information" },
+ { 0x2d, "Perform Location Response" },
+ { 0x2e, "Perform Location Abort" },
+ { 0x2f, "Common Id" },
+ { 0x30, "Reset" },
+ { 0x31, "Reset Acknowledge" },
+ { 0x32, "Overload" },
+ { 0x33, "Reserved" },
+ { 0x34, "Reset Circuit" },
+ { 0x35, "Reset Circuit Acknowledge" },
+ { 0x36, "MSC Invoke Trace" },
+ { 0x37, "BSS Invoke Trace" },
+ { 0x3a, "Connectionless Information" },
+ { 0x3c, "Reset Resource" },
+ { 0x3d, "Reset Resource Acknowledge" },
+ { 0x40, "Block" },
+ { 0x41, "Blocking Acknowledge" },
+ { 0x42, "Unblock" },
+ { 0x43, "Unblocking Acknowledge" },
+ { 0x44, "Circuit Group Block" },
+ { 0x45, "Circuit Group Blocking Acknowledge" },
+ { 0x46, "Circuit Group Unblock" },
+ { 0x47, "Circuit Group Unblocking Acknowledge" },
+ { 0x48, "Unequipped Circuit" },
+ { 0x4e, "Change Circuit" },
+ { 0x4f, "Change Circuit Acknowledge" },
+ { 0x50, "Resource Request" },
+ { 0x51, "Resource Indication" },
+ { 0x52, "Paging" },
+ { 0x53, "Cipher Mode Command" },
+ { 0x54, "Classmark Update" },
+ { 0x55, "Cipher Mode Complete" },
+ { 0x56, "Queuing Indication" },
+ { 0x57, "Complete Layer 3 Information" },
+ { 0x58, "Classmark Request" },
+ { 0x59, "Cipher Mode Reject" },
+ { 0x5a, "Load Indication" },
+ { 0x04, "VGCS/VBS Setup" },
+ { 0x05, "VGCS/VBS Setup Ack" },
+ { 0x06, "VGCS/VBS Setup Refuse" },
+ { 0x07, "VGCS/VBS Assignment Request" },
+ { 0x1c, "VGCS/VBS Assignment Result" },
+ { 0x1d, "VGCS/VBS Assignment Failure" },
+ { 0x1e, "VGCS/VBS Queuing Indication" },
+ { 0x1f, "Uplink Request" },
+ { 0x27, "Uplink Request Acknowledge" },
+ { 0x49, "Uplink Request Confirmation" },
+ { 0x4a, "Uplink Release Indication" },
+ { 0x4b, "Uplink Reject Command" },
+ { 0x4c, "Uplink Release Command" },
+ { 0x4d, "Uplink Seized Command" },
+ { 0x50, "VGCS Additional Information" },
+ { 0x51, "VGCS SMS" },
+ { 0x52, "Notification Data" },
+ { 0x53, "Uplink Application Data" },
+
+ { 0, NULL }
};
const value_string gsm_bssmap_elem_strings[] = {
- { 0x01, "Circuit Identity Code" },
- { 0x02, "Reserved" },
- { 0x03, "Resource Available" },
- { 0x04, "Cause" },
- { 0x05, "Cell Identifier" },
- { 0x06, "Priority" },
- { 0x07, "Layer 3 Header Information" },
- { 0x08, "IMSI" },
- { 0x09, "TMSI" },
- { 0x0a, "Encryption Information" },
- { 0x0b, "Channel Type" },
- { 0x0c, "Periodicity" },
- { 0x0d, "Extended Resource Indicator" },
- { 0x0e, "Number Of MSs" },
- { 0x0f, "Reserved" },
- { 0x10, "Reserved" },
- { 0x11, "Reserved" },
- { 0x12, "Classmark Information Type 2" },
- { 0x13, "Classmark Information Type 3" },
- { 0x14, "Interference Band To Be Used" },
- { 0x15, "RR Cause" },
- { 0x16, "Reserved" },
- { 0x17, "Layer 3 Information" },
- { 0x18, "DLCI" },
- { 0x19, "Downlink DTX Flag" },
- { 0x1a, "Cell Identifier List" },
- { 0x1b, "Response Request" },
- { 0x1c, "Resource Indication Method" },
- { 0x1d, "Classmark Information Type 1" },
- { 0x1e, "Circuit Identity Code List" },
- { 0x1f, "Diagnostic" },
- { 0x20, "Layer 3 Message Contents" },
- { 0x21, "Chosen Channel" },
- { 0x22, "Total Resource Accessible" },
- { 0x23, "Cipher Response Mode" },
- { 0x24, "Channel Needed" },
- { 0x25, "Trace Type" },
- { 0x26, "TriggerID" },
- { 0x27, "Trace Reference" },
- { 0x28, "TransactionID" },
- { 0x29, "Mobile Identity" },
- { 0x2a, "OMCID" },
- { 0x2b, "Forward Indicator" },
- { 0x2c, "Chosen Encryption Algorithm" },
- { 0x2d, "Circuit Pool" },
- { 0x2e, "Circuit Pool List" },
- { 0x2f, "Time Indication" },
- { 0x30, "Resource Situation" },
- { 0x31, "Current Channel Type 1" },
- { 0x32, "Queuing Indicator" },
- { 0x40, "Speech Version" },
- { 0x33, "Assignment Requirement" },
- { 0x35, "Talker Flag" },
- { 0x36, "Connection Release Requested" },
- { 0x37, "Group Call Reference" },
- { 0x38, "eMLPP Priority" },
- { 0x39, "Configuration Evolution Indication" },
- { 0x3a, "Old BSS to New BSS Information" },
- { 0x3b, "LSA Identifier" },
- { 0x3c, "LSA Identifier List" },
- { 0x3d, "LSA Information" },
- { 0x3e, "LCS QoS" },
- { 0x3f, "LSA access control suppression" },
- { 0x43, "LCS Priority" },
- { 0x44, "Location Type" },
- { 0x45, "Location Estimate" },
- { 0x46, "Positioning Data" },
- { 0x47, "LCS Cause" },
- { 0x48, "LCS Client Type" },
- { GSM_BSSMAP_APDU_IE, "APDU" },
- { 0x4a, "Network Element Identity" },
- { 0x4b, "GPS Assistance Data" },
- { 0x4c, "Deciphering Keys" },
- { 0x4d, "Return Error Request" },
- { 0x4e, "Return Error Cause" },
- { 0x4f, "Segmentation" },
- { 0x50, "Service Handover" },
- { 0x51, "Source RNC to target RNC transparent information (UMTS)" },
- { 0x52, "Source RNC to target RNC transparent information (cdma2000)" },
- { 0x53, "GERAN Classmark" },
- { 0x54, "GERAN BSC Container" },
- { 0x61, "New BSS to Old BSS Information" },
- { 0x63, "Inter-System Information" },
- { 0x64, "SNA Access Information" },
- { 0x65, "VSTK_RAND Information" },
- { 0x66, "VSTK Information" },
- { 0x67, "Paging Information" },
- { 0x68, "IMEI" },
- { 0x55, "Velocity Estimate" },
- { 0x69, "VGCS Feature Flags" },
- { 0x6a, "Talker Priority" },
- { 0x6b, "Emergency Set Indication" },
- { 0x6c, "Talker Identity" },
- { 0x6d, "Cell Identifier List Segment" },
- { 0x6e, "SMS to VGCS" },
- { 0x6f, "VGCS Talker Mode" },
- { 0x70, "VGCS/VBS Cell Status" },
- { 0x71, "Cell Identifier List Segment for established cells" },
- { 0x72, "Cell Identifier List Segment for cells to be established" },
- { 0x73, "Cell Identifier List Segment for released cells - no user present" },
- { 0x74, "Cell Identifier List Segment for not established cells - no establishment possible" },
- { 0x75, "GANSS Assistance Data" },
- { 0x76, "GANSS Positioning Data" },
- { 0x77, "GANSS Location Type" },
- { 0x78, "Application Data" },
- { 0x79, "Data Identity" },
- { 0x7a, "Application Data Information" },
- { 0x7b, "MSISDN" },
- { 0x7c, "AoIP Transport Layer Address" },
- { 0x7d, "Speech Codec List" },
- { 0x7e, "Speech Codec" },
- { 0x7f, "Call Identifier" },
- { 0x80, "Call Identifier List" },
- { 0, NULL }
+ { 0x01, "Circuit Identity Code" },
+ { 0x02, "Reserved" },
+ { 0x03, "Resource Available" },
+ { 0x04, "Cause" },
+ { 0x05, "Cell Identifier" },
+ { 0x06, "Priority" },
+ { 0x07, "Layer 3 Header Information" },
+ { 0x08, "IMSI" },
+ { 0x09, "TMSI" },
+ { 0x0a, "Encryption Information" },
+ { 0x0b, "Channel Type" },
+ { 0x0c, "Periodicity" },
+ { 0x0d, "Extended Resource Indicator" },
+ { 0x0e, "Number Of MSs" },
+ { 0x0f, "Reserved" },
+ { 0x10, "Reserved" },
+ { 0x11, "Reserved" },
+ { 0x12, "Classmark Information Type 2" },
+ { 0x13, "Classmark Information Type 3" },
+ { 0x14, "Interference Band To Be Used" },
+ { 0x15, "RR Cause" },
+ { 0x16, "Reserved" },
+ { 0x17, "Layer 3 Information" },
+ { 0x18, "DLCI" },
+ { 0x19, "Downlink DTX Flag" },
+ { 0x1a, "Cell Identifier List" },
+ { 0x1b, "Response Request" },
+ { 0x1c, "Resource Indication Method" },
+ { 0x1d, "Classmark Information Type 1" },
+ { 0x1e, "Circuit Identity Code List" },
+ { 0x1f, "Diagnostic" },
+ { 0x20, "Layer 3 Message Contents" },
+ { 0x21, "Chosen Channel" },
+ { 0x22, "Total Resource Accessible" },
+ { 0x23, "Cipher Response Mode" },
+ { 0x24, "Channel Needed" },
+ { 0x25, "Trace Type" },
+ { 0x26, "TriggerID" },
+ { 0x27, "Trace Reference" },
+ { 0x28, "TransactionID" },
+ { 0x29, "Mobile Identity" },
+ { 0x2a, "OMCID" },
+ { 0x2b, "Forward Indicator" },
+ { 0x2c, "Chosen Encryption Algorithm" },
+ { 0x2d, "Circuit Pool" },
+ { 0x2e, "Circuit Pool List" },
+ { 0x2f, "Time Indication" },
+ { 0x30, "Resource Situation" },
+ { 0x31, "Current Channel Type 1" },
+ { 0x32, "Queuing Indicator" },
+ { 0x40, "Speech Version" },
+ { 0x33, "Assignment Requirement" },
+ { 0x35, "Talker Flag" },
+ { 0x36, "Connection Release Requested" },
+ { 0x37, "Group Call Reference" },
+ { 0x38, "eMLPP Priority" },
+ { 0x39, "Configuration Evolution Indication" },
+ { 0x3a, "Old BSS to New BSS Information" },
+ { 0x3b, "LSA Identifier" },
+ { 0x3c, "LSA Identifier List" },
+ { 0x3d, "LSA Information" },
+ { 0x3e, "LCS QoS" },
+ { 0x3f, "LSA access control suppression" },
+ { 0x43, "LCS Priority" },
+ { 0x44, "Location Type" },
+ { 0x45, "Location Estimate" },
+ { 0x46, "Positioning Data" },
+ { 0x47, "LCS Cause" },
+ { 0x48, "LCS Client Type" },
+ { GSM_BSSMAP_APDU_IE, "APDU" },
+ { 0x4a, "Network Element Identity" },
+ { 0x4b, "GPS Assistance Data" },
+ { 0x4c, "Deciphering Keys" },
+ { 0x4d, "Return Error Request" },
+ { 0x4e, "Return Error Cause" },
+ { 0x4f, "Segmentation" },
+ { 0x50, "Service Handover" },
+ { 0x51, "Source RNC to target RNC transparent information (UMTS)" },
+ { 0x52, "Source RNC to target RNC transparent information (cdma2000)" },
+ { 0x53, "GERAN Classmark" },
+ { 0x54, "GERAN BSC Container" },
+ { 0x61, "New BSS to Old BSS Information" },
+ { 0x63, "Inter-System Information" },
+ { 0x64, "SNA Access Information" },
+ { 0x65, "VSTK_RAND Information" },
+ { 0x66, "VSTK Information" },
+ { 0x67, "Paging Information" },
+ { 0x68, "IMEI" },
+ { 0x55, "Velocity Estimate" },
+ { 0x69, "VGCS Feature Flags" },
+ { 0x6a, "Talker Priority" },
+ { 0x6b, "Emergency Set Indication" },
+ { 0x6c, "Talker Identity" },
+ { 0x6d, "Cell Identifier List Segment" },
+ { 0x6e, "SMS to VGCS" },
+ { 0x6f, "VGCS Talker Mode" },
+ { 0x70, "VGCS/VBS Cell Status" },
+ { 0x71, "Cell Identifier List Segment for established cells" },
+ { 0x72, "Cell Identifier List Segment for cells to be established" },
+ { 0x73, "Cell Identifier List Segment for released cells - no user present" },
+ { 0x74, "Cell Identifier List Segment for not established cells - no establishment possible" },
+ { 0x75, "GANSS Assistance Data" },
+ { 0x76, "GANSS Positioning Data" },
+ { 0x77, "GANSS Location Type" },
+ { 0x78, "Application Data" },
+ { 0x79, "Data Identity" },
+ { 0x7a, "Application Data Information" },
+ { 0x7b, "MSISDN" },
+ { 0x7c, "AoIP Transport Layer Address" },
+ { 0x7d, "Speech Codec List" },
+ { 0x7e, "Speech Codec" },
+ { 0x7f, "Call Identifier" },
+ { 0x80, "Call Identifier List" },
+ { 0, NULL }
};
/* 3.2.3 Signalling Field Element Coding */
static const value_string bssmap_field_element_ids[] = {
- { 0x1, "BSSMAP Field Element: Extra information" }, /* 3.2.3.1 */
- { 0x2, "BSSMAP Field Element: Current Channel Type 2" }, /* 3.2.2.2 */
- { 0x3, "BSSMAP Field Element: Target cell radio information" }, /* 3.2.3.3 */
- { 0x4, "BSSMAP Field Element: GPRS Suspend information" }, /* 3.2.3.4 */
- { 0x5, "BSSMAP Field Element: MultiRate configuration information" }, /* 3.2.3.5 */
- { 0x6, "BSSMAP Field Element: Dual Transfer Mode information" }, /* 3.2.3.6 */
- { 0x7, "BSSMAP Field Element: Inter RAT Handover Info" }, /* 3.2.3.7 */
- /*{ 0x7, "UE Capability information" },*/ /* 3.2.3.7 */
- { 0x8, "BSSMAP Field Element: cdma2000 Capability Information" }, /* 3.2.3.8 */
- { 0x9, "BSSMAP Field Element: Downlink Cell Load Information" }, /* 3.2.3.9 */
- { 0xa, "BSSMAP Field Element: Uplink Cell Load Information" }, /* 3.2.3.10 */
- { 0xb, "BSSMAP Field Element: Cell Load Information Group" }, /* 3.2.3.11 */
- { 0xc, "BSSMAP Field Element: Cell Load Information" }, /* 3.2.3.12 */
- { 0x0d, "BSSMAP Field Element: PS Indication" }, /* 3.2.3.13 */
- { 0x0e, "BSSMAP Field Element: DTM Handover Command Indication" }, /* 3.2.3.14 */
- { 0x6f, "VGCS talker mode" }, /* although technically not a Field Element,
+ { 0x1, "BSSMAP Field Element: Extra information" }, /* 3.2.3.1 */
+ { 0x2, "BSSMAP Field Element: Current Channel Type 2" }, /* 3.2.2.2 */
+ { 0x3, "BSSMAP Field Element: Target cell radio information" }, /* 3.2.3.3 */
+ { 0x4, "BSSMAP Field Element: GPRS Suspend information" }, /* 3.2.3.4 */
+ { 0x5, "BSSMAP Field Element: MultiRate configuration information" }, /* 3.2.3.5 */
+ { 0x6, "BSSMAP Field Element: Dual Transfer Mode information" }, /* 3.2.3.6 */
+ { 0x7, "BSSMAP Field Element: Inter RAT Handover Info" }, /* 3.2.3.7 */
+ /*{ 0x7, "UE Capability information" },*/ /* 3.2.3.7 */
+ { 0x8, "BSSMAP Field Element: cdma2000 Capability Information" }, /* 3.2.3.8 */
+ { 0x9, "BSSMAP Field Element: Downlink Cell Load Information" }, /* 3.2.3.9 */
+ { 0xa, "BSSMAP Field Element: Uplink Cell Load Information" }, /* 3.2.3.10 */
+ { 0xb, "BSSMAP Field Element: Cell Load Information Group" }, /* 3.2.3.11 */
+ { 0xc, "BSSMAP Field Element: Cell Load Information" }, /* 3.2.3.12 */
+ { 0x0d, "BSSMAP Field Element: PS Indication" }, /* 3.2.3.13 */
+ { 0x0e, "BSSMAP Field Element: DTM Handover Command Indication" }, /* 3.2.3.14 */
+ { 0x6f, "VGCS talker mode" }, /* although technically not a Field Element,
this IE can appear in Old BSS to New BSS information */
- { 0, NULL }
+ { 0, NULL }
};
static const value_string bssap_cc_values[] = {
- { 0x00, "not further specified" },
- { 0x80, "FACCH or SDCCH" },
- { 0xc0, "SACCH" },
- { 0, NULL } };
+ { 0x00, "not further specified" },
+ { 0x80, "FACCH or SDCCH" },
+ { 0xc0, "SACCH" },
+ { 0, NULL } };
static const value_string bssap_sapi_values[] = {
- { 0x00, "RR/MM/CC" },
- { 0x03, "SMS" },
- { 0, NULL } };
+ { 0x00, "RR/MM/CC" },
+ { 0x03, "SMS" },
+ { 0, NULL } };
static const value_string gsm_a_be_cell_id_disc_vals[] = {
- { 0, "The whole Cell Global Identification, CGI, is used to identify the cells."},
- { 1, "Location Area Code, LAC, and Cell Identify, CI, is used to identify the cells."},
- { 2, "Cell Identity, CI, is used to identify the cells."},
- { 3, "No cell is associated with the transaction."},
- { 4, "Location Area Identification, LAI, is used to identify all cells within a Location Area."},
- { 5, "Location Area Code, LAC, is used to identify all cells within a location area."},
- { 6, "All cells on the BSS are identified."},
- { 7, "Reserved"},
- { 8, "Intersystem Handover to UTRAN or cdma2000. PLMN-ID, LAC, and RNC-ID, are encoded to identify the target RNC."},
- { 9, "Intersystem Handover to UTRAN or cdma2000. The RNC-ID is coded to identify the target RNC."},
- { 10, "Intersystem Handover to UTRAN or cdma2000. LAC and RNC-ID are encoded to identify the target RNC."},
- { 11, "Serving Area Identity, SAI, is used to identify the Serving Area of UE within UTRAN or cdma2000"},
- { 12, "LAC, RNC-ID (or Extended RNC-ID) and Cell Identity, CI, is used to identify a UTRAN cell for cell load information"},
- { 13, "Reserved"},
- { 14, "Reserved"},
- { 15, "Reserved"},
- { 0, NULL }
+ { 0, "The whole Cell Global Identification, CGI, is used to identify the cells."},
+ { 1, "Location Area Code, LAC, and Cell Identify, CI, is used to identify the cells."},
+ { 2, "Cell Identity, CI, is used to identify the cells."},
+ { 3, "No cell is associated with the transaction."},
+ { 4, "Location Area Identification, LAI, is used to identify all cells within a Location Area."},
+ { 5, "Location Area Code, LAC, is used to identify all cells within a location area."},
+ { 6, "All cells on the BSS are identified."},
+ { 7, "Reserved"},
+ { 8, "Intersystem Handover to UTRAN or cdma2000. PLMN-ID, LAC, and RNC-ID, are encoded to identify the target RNC."},
+ { 9, "Intersystem Handover to UTRAN or cdma2000. The RNC-ID is coded to identify the target RNC."},
+ { 10, "Intersystem Handover to UTRAN or cdma2000. LAC and RNC-ID are encoded to identify the target RNC."},
+ { 11, "Serving Area Identity, SAI, is used to identify the Serving Area of UE within UTRAN or cdma2000"},
+ { 12, "LAC, RNC-ID (or Extended RNC-ID) and Cell Identity, CI, is used to identify a UTRAN cell for cell load information"},
+ { 13, "Reserved"},
+ { 14, "Reserved"},
+ { 15, "Reserved"},
+ { 0, NULL }
};
static const value_string gsm_a_rr_channel_needed_vals[] = {
-{ 0x00, "Any channel"},
-{ 0x01, "SDCCH"},
-{ 0x02, "TCH/F (Full rate)"},
-{ 0x03, "TCH/H or TCH/F (Dual rate)"},
- { 0, NULL }
+ { 0x00, "Any channel"},
+ { 0x01, "SDCCH"},
+ { 0x02, "TCH/F (Full rate)"},
+ { 0x03, "TCH/H or TCH/F (Dual rate)"},
+ { 0, NULL }
};
static const value_string bssmap_positioning_methods[] = {
@@ -373,13 +373,13 @@ static const value_string bssmap_location_information_vals[] = {
};
static const true_false_string bssmap_chan_type_extension_value = {
- "Additional Octet",
- "Last Octet"
+ "Additional Octet",
+ "Last Octet"
};
static const true_false_string bssmap_cause_extension_value = {
- "Two Octets",
- "One Octet"
+ "Two Octets",
+ "One Octet"
};
/* Current Channel Type */
@@ -528,7 +528,7 @@ static guint8 cell_discriminator = 0x0f; /* tracks whether handover is to UMTS
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_);
-/*
+#if 0
This enum has been moved to packet-gsm_a_common to
make it possible to use element dissecton from this dissector
in other dissectors.
@@ -538,125 +538,125 @@ Note this enum must be of the same size as the element decoding list
typedef enum
{
- BE_CIC, /. Circuit Identity Code ./
- BE_RSVD_1, /. 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 ./
- BE_IMSI, /. 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 ./
- BE_RSVD_2, /. Reserved ./
- BE_RSVD_3, /. Reserved ./
- BE_RSVD_4, /. Reserved ./
- BE_CM_INFO_2, /. Classmark Information Type 2 ./
- BE_CM_INFO_3, /. Classmark Information Type 3 ./
- BE_INT_BAND, /. Interference Band To Be Used ./
- BE_RR_CAUSE, /. RR Cause ./
- BE_RSVD_5, /. Reserved ./
- BE_L3_INFO, /. Layer 3 Information ./
- BE_DLCI, /. DLCI ./
- BE_DOWN_DTX_FLAG, /. Downlink DTX Flag ./
- BE_CELL_ID_LIST, /. Cell Identifier List ./
- BE_RESP_REQ, /. Response Request ./
- BE_RES_IND_METHOD, /. Resource Indication Method ./
- BE_CM_INFO_1, /. Classmark Information Type 1 ./
- BE_CIC_LIST, /. Circuit Identity Code List ./
- BE_DIAG, /. Diagnostic ./
- 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_CHAN_NEEDED, /. Channel Needed ./
- BE_TRACE_TYPE, /. Trace Type ./
- BE_TRIGGERID, /. TriggerID ./
- BE_TRACE_REF, /. Trace Reference ./
- BE_TRANSID, /. TransactionID ./
- BE_MID, /. Mobile Identity ./
- BE_OMCID, /. OMCID ./
- BE_FOR_IND, /. Forward Indicator ./
- BE_CHOSEN_ENC_ALG, /. Chosen Encryption Algorithm ./
- BE_CCT_POOL, /. Circuit Pool ./
- BE_CCT_POOL_LIST, /. Circuit Pool List ./
- BE_TIME_IND, /. Time Indication ./
- BE_RES_SIT, /. 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 ./
- BE_TALKER_FLAG, /. Talker Flag ./
- BE_CONN_REL_REQ, /. Connection Release Requested ./
- BE_GROUP_CALL_REF, /. Group Call Reference ./
- BE_EMLPP_PRIO, /. eMLPP Priority ./
- BE_CONF_EVO_IND, /. Configuration Evolution Indication ./
- BE_OLD2NEW_INFO, /. Old BSS to New BSS Information ./
- BE_LSA_ID, /. LSA Identifier ./
- BE_LSA_ID_LIST, /. LSA Identifier List ./
- BE_LSA_INFO, /. LSA Information ./
- BE_LCS_QOS, /. LCS QoS ./
- BE_LSA_ACC_CTRL, /. LSA access control suppression ./
- BE_LCS_PRIO, /. LCS Priority ./
- BE_LOC_TYPE, /. Location Type ./
- BE_LOC_EST, /. Location Estimate ./
- BE_POS_DATA, /. Positioning Data ./
- BE_LCS_CAUSE, /. 3.2.2.66 LCS Cause ./
- BE_LCS_CLIENT, /. LCS Client Type ./
- BE_APDU, /. APDU ./
- BE_NE_ID, /. Network Element Identity ./
- BE_GPS_ASSIST_DATA, /. GPS Assistance Data ./
- BE_DECIPH_KEYS, /. Deciphering Keys ./
- 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 ./
- BE_GRAN_BSC_CONT, /. GERAN BSC Container ./
- BE_NEW_BSS_TO_OLD_BSS_INF, /. New BSS to Old BSS Information ./
- BE_INTER_SYS_INF, /. Inter-System Information ./
- BE_SNA_ACC_INF, /. SNA Access Information ./
- BE_VSTK_RAND_INF, /. VSTK_RAND Information ./
- BE_VSTK_INF, /. VSTK Information ./
- BE_PAGING_INF, /. Paging Information ./
- BE_IMEI, /. IMEI ./
- BE_VEL_EST, /. Velocity Estimate ./
- BE_VGCS_FEAT_FLG, /. VGCS Feature Flags ./
- BE_TALKER_PRI, /. Talker Priority ./
- BE_EMRG_SET_IND, /. 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_MOD, /. VGCS Talker Mode ./
- BE_VGS_VBS_CELL_STAT, /. 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_TYP, /. GANSS Location Type ./
- BE_APP_DATA, /. Application Data ./
- BE_DATA_ID /. Data Identity ./
- BE_APP_DATA_INF, /. Application Data Information ./
- BE_MSISDN, /. 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_NONE /. NONE ./
+ BE_CIC, /. Circuit Identity Code ./
+ BE_RSVD_1, /. 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 ./
+ BE_IMSI, /. 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 ./
+ BE_RSVD_2, /. Reserved ./
+ BE_RSVD_3, /. Reserved ./
+ BE_RSVD_4, /. Reserved ./
+ BE_CM_INFO_2, /. Classmark Information Type 2 ./
+ BE_CM_INFO_3, /. Classmark Information Type 3 ./
+ BE_INT_BAND, /. Interference Band To Be Used ./
+ BE_RR_CAUSE, /. RR Cause ./
+ BE_RSVD_5, /. Reserved ./
+ BE_L3_INFO, /. Layer 3 Information ./
+ BE_DLCI, /. DLCI ./
+ BE_DOWN_DTX_FLAG, /. Downlink DTX Flag ./
+ BE_CELL_ID_LIST, /. Cell Identifier List ./
+ BE_RESP_REQ, /. Response Request ./
+ BE_RES_IND_METHOD, /. Resource Indication Method ./
+ BE_CM_INFO_1, /. Classmark Information Type 1 ./
+ BE_CIC_LIST, /. Circuit Identity Code List ./
+ BE_DIAG, /. Diagnostic ./
+ 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_CHAN_NEEDED, /. Channel Needed ./
+ BE_TRACE_TYPE, /. Trace Type ./
+ BE_TRIGGERID, /. TriggerID ./
+ BE_TRACE_REF, /. Trace Reference ./
+ BE_TRANSID, /. TransactionID ./
+ BE_MID, /. Mobile Identity ./
+ BE_OMCID, /. OMCID ./
+ BE_FOR_IND, /. Forward Indicator ./
+ BE_CHOSEN_ENC_ALG, /. Chosen Encryption Algorithm ./
+ BE_CCT_POOL, /. Circuit Pool ./
+ BE_CCT_POOL_LIST, /. Circuit Pool List ./
+ BE_TIME_IND, /. Time Indication ./
+ BE_RES_SIT, /. 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 ./
+ BE_TALKER_FLAG, /. Talker Flag ./
+ BE_CONN_REL_REQ, /. Connection Release Requested ./
+ BE_GROUP_CALL_REF, /. Group Call Reference ./
+ BE_EMLPP_PRIO, /. eMLPP Priority ./
+ BE_CONF_EVO_IND, /. Configuration Evolution Indication ./
+ BE_OLD2NEW_INFO, /. Old BSS to New BSS Information ./
+ BE_LSA_ID, /. LSA Identifier ./
+ BE_LSA_ID_LIST, /. LSA Identifier List ./
+ BE_LSA_INFO, /. LSA Information ./
+ BE_LCS_QOS, /. LCS QoS ./
+ BE_LSA_ACC_CTRL, /. LSA access control suppression ./
+ BE_LCS_PRIO, /. LCS Priority ./
+ BE_LOC_TYPE, /. Location Type ./
+ BE_LOC_EST, /. Location Estimate ./
+ BE_POS_DATA, /. Positioning Data ./
+ BE_LCS_CAUSE, /. 3.2.2.66 LCS Cause ./
+ BE_LCS_CLIENT, /. LCS Client Type ./
+ BE_APDU, /. APDU ./
+ BE_NE_ID, /. Network Element Identity ./
+ BE_GPS_ASSIST_DATA, /. GPS Assistance Data ./
+ BE_DECIPH_KEYS, /. Deciphering Keys ./
+ 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 ./
+ BE_GRAN_BSC_CONT, /. GERAN BSC Container ./
+ BE_NEW_BSS_TO_OLD_BSS_INF, /. New BSS to Old BSS Information ./
+ BE_INTER_SYS_INF, /. Inter-System Information ./
+ BE_SNA_ACC_INF, /. SNA Access Information ./
+ BE_VSTK_RAND_INF, /. VSTK_RAND Information ./
+ BE_VSTK_INF, /. VSTK Information ./
+ BE_PAGING_INF, /. Paging Information ./
+ BE_IMEI, /. IMEI ./
+ BE_VEL_EST, /. Velocity Estimate ./
+ BE_VGCS_FEAT_FLG, /. VGCS Feature Flags ./
+ BE_TALKER_PRI, /. Talker Priority ./
+ BE_EMRG_SET_IND, /. 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_MOD, /. VGCS Talker Mode ./
+ BE_VGS_VBS_CELL_STAT, /. 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_TYP, /. GANSS Location Type ./
+ BE_APP_DATA, /. Application Data ./
+ BE_DATA_ID /. Data Identity ./
+ BE_APP_DATA_INF, /. Application Data Information ./
+ BE_MSISDN, /. 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_NONE /. NONE ./
}
bssmap_elem_idx_t;
-*/
+#endif
-#define NUM_GSM_BSSMAP_ELEM (sizeof(gsm_bssmap_elem_strings)/sizeof(value_string))
+#define NUM_GSM_BSSMAP_ELEM (sizeof(gsm_bssmap_elem_strings)/sizeof(value_string))
gint ett_gsm_bssmap_elem[NUM_GSM_BSSMAP_ELEM];
/*
@@ -665,63 +665,63 @@ gint ett_gsm_bssmap_elem[NUM_GSM_BSSMAP_ELEM];
static guint16
be_cic(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, 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_ntohs(tvb, curr_offset);
+ value = tvb_get_ntohs(tvb, curr_offset);
- 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, 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;
-
- curr_offset = offset;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_item(tree, hf_gsm_a_bssmap_cause_extension, tvb, curr_offset, 1, FALSE);
-
- 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;
- }
-
- 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);
-
- curr_offset++;
-
- proto_tree_add_text(tree, tvb, curr_offset, 1,
- "Cause Value");
-
- curr_offset++;
-
- 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);
-
- 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);
-
- 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 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 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 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;
- }
-
- 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++;
-
- if (add_string)
- g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str);
- }
-
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
-
- return(curr_offset - offset);
-}
-/*
- * 3.2.2.6 IMSI
+ guint8 oct;
+ guint32 value;
+ guint32 curr_offset;
+ const gchar *str = NULL;
+
+ curr_offset = offset;
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ proto_tree_add_item(tree, hf_gsm_a_bssmap_cause_extension, tvb, curr_offset, 1, FALSE);
+
+ 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;
+ }
+
+ 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);
+
+ curr_offset++;
+
+ proto_tree_add_text(tree, tvb, curr_offset, 1,
+ "Cause Value");
+
+ curr_offset++;
+
+ 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);
+
+ 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);
+
+ 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 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 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 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;
+ }
+
+ 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++;
+
+ if (add_string)
+ g_snprintf(add_string, string_len, " - (%u) %s", oct & 0x7f, str);
+ }
+
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+
+ return(curr_offset - offset);
+}
+/*
+ * 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 ");
-
- mask >>= 1;
- alg_id--;
- }
- while (mask != 0x01);
+ 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);
- 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;
-
- curr_offset = 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);
-
- 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);
-
- if (add_string)
- g_snprintf(add_string, string_len, " - (%s)", str);
-
- curr_offset++;
-
- NO_MORE_DATA_CHECK(len);
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- 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;
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Channel Rate and Type: %s",
- str);
-
- curr_offset++;
-
- NO_MORE_DATA_CHECK(len);
-
- 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);
-
- 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;
-
- 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);
-
- curr_offset++;
- }
- while ((len - (curr_offset - offset)) > 0);
- }
- else if (sdi == 0x02)
- {
- /* data */
-
- 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;
- }
-
- 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++;
-
- NO_MORE_DATA_CHECK(len);
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- 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-" : "");
-
- 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 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);
-
- curr_offset++;
-
- NO_MORE_DATA_CHECK(len);
-
- 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_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 ");
-
- 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, 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);
-
- 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 ");
- }
-
- 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;
- }
-
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "Channel Rate and Type: %s",
- str);
-
- curr_offset++;
-
- NO_MORE_DATA_CHECK(len);
-
- proto_tree_add_text(tree,
- tvb, curr_offset, len - (curr_offset - offset),
- "Spare");
-
- curr_offset += len - (curr_offset - offset);
- }
- else
- {
- /* unknown format */
-
- proto_tree_add_text(tree,
- tvb, curr_offset, len - (curr_offset - offset),
- "Unknown format");
-
- curr_offset += len - (curr_offset - offset);
- }
-
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
-
- return(curr_offset - offset);
-}
-/*
- * 3.2.2.12 Periodicity
+ guint8 oct;
+ guint8 sdi;
+ guint8 num_chan;
+ guint32 curr_offset;
+ const gchar *str;
+
+ curr_offset = 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);
+
+ 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);
+
+ if (add_string)
+ g_snprintf(add_string, string_len, " - (%s)", str);
+
+ curr_offset++;
+
+ NO_MORE_DATA_CHECK(len);
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ 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;
+ }
+
+ proto_tree_add_text(tree,
+ tvb, curr_offset, 1,
+ "Channel Rate and Type: %s",
+ str);
+
+ curr_offset++;
+
+ NO_MORE_DATA_CHECK(len);
+
+ 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);
+
+ 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;
+
+ 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);
+
+ curr_offset++;
+ }
+ while ((len - (curr_offset - offset)) > 0);
+ }
+ else if (sdi == 0x02)
+ {
+ /* data */
+
+ 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;
+ }
+
+ 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++;
+
+ NO_MORE_DATA_CHECK(len);
+
+ oct = tvb_get_guint8(tvb, curr_offset);
+
+ 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-" : "");
+
+ 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 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);
+
+ curr_offset++;
+
+ NO_MORE_DATA_CHECK(len);
+
+ 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_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 ");
+
+ 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, 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);
+
+ 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 ");
+ }
+
+ 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;
+ }
+
+ proto_tree_add_text(tree,
+ tvb, curr_offset, 1,
+ "Channel Rate and Type: %s",
+ str);
+
+ curr_offset++;
+
+ NO_MORE_DATA_CHECK(len);
+
+ proto_tree_add_text(tree,
+ tvb, curr_offset, len - (curr_offset - offset),
+ "Spare");
+
+ curr_offset += len - (curr_offset - offset);
+ }
+ else
+ {
+ /* unknown format */
+
+ proto_tree_add_text(tree,
+ tvb, curr_offset, len - (curr_offset - offset),
+ "Unknown format");
+
+ curr_offset += len - (curr_offset - offset);
+ }
+
+ EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
+
+ return(curr_offset - offset);
+}
+/*
+ * 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;
-
- if (add_string)
- add_string[0] = '\0';
- curr_offset = offset;
-
- switch (disc)
- {
- case 0x00:
- /* 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 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;
- }
-
- 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 (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;
-
- /* FALLTHRU */
-
- 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);
-
- 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");
-
- curr_offset += (len);
- break;
- }
-
- return(curr_offset - offset);
+ guint32 value;
+ guint32 curr_offset;
+
+ if (add_string)
+ add_string[0] = '\0';
+ curr_offset = offset;
+
+ switch (disc)
+ {
+ case 0x00:
+ /* 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 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;
+ }
+
+ 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 (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;
+
+ /* FALLTHRU */
+
+ 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);
+
+ 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");
+
+ curr_offset += (len);
+ break;
+ }
+
+ 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;
-
- curr_offset = offset;
-
- oct = tvb_get_guint8(tvb, curr_offset);
-
- proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE);
+ guint8 oct;
+ guint32 curr_offset;
+ const gchar *str;
- 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");
+ curr_offset = offset;
- switch ((oct & 0x3c) >> 2)
- {
- case 0x00: str = "Spare"; break;
- case 0x0f: str = "priority not used"; break;
- default:
- str = "1 is highest";
- break;
- }
+ oct = tvb_get_guint8(tvb, curr_offset);
- 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);
+ proto_tree_add_item(tree, hf_gsm_a_b8spare, tvb, curr_offset, 1, FALSE);
- if (add_string)
- g_snprintf(add_string, string_len, " - (%u)", (oct & 0x3c) >> 2);
+ 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, 0x02, 8);
- proto_tree_add_text(tree,
- tvb, curr_offset, 1,
- "%s = Queuing Allowed Indicator (QA): queuing %sallowed",
- a_bigbuf,
- (oct & 0x02) ? "" : "not ");
+ 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, 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, 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);
+
+ 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");
- 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++;
+
+ /* no length check possible */
- return(curr_offset - offset);
+ 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;
-
- curr_offset = offset;
-
- 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.
- */
-
- 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;
- }
-
- curr_offset += len;
-
- EXTRANEOUS_DATA_CHECK(len, curr_offset - offset);
-
- return(curr_offset - offset);
+ guint32 curr_offset;
+ guint8 apdu_protocol_id;
+ tvbuff_t *APDU_tvb;
+
+ curr_offset = offset;
+
+ 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.
+ */
+
+ 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;
+ }
+
+ curr_offset += len;
+
+ EXTRANEOUS_DATA_CHECK(len, 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;
-
- 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;
-
- return(curr_offset - offset);
-}
-/*
- * 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.
+ guint32 curr_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;
+
+ return(curr_offset - offset);
+}
+/*
+ * 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.
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;
-
- 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
+ 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);
+}
+/*
+ * 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;
-
- 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);
-
- return(len);
-}
-/*
- * 3.2.2.105 Call Identifier
+ 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);
+
+ return(len);
+}
+/*
+ * 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 */
-
- NULL, /* NONE */
+ 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 */
};
-/* 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;
-
- 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);
-
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_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);
+
+ 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;
-
- 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)");
-
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_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)");
+
+ 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;
-
- 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);
-
- /* 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);
-
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_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);
+
+ /* 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);
+
+ 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;
-
- 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)");
-
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_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)");
+
+ 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;
-
- 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);
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_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);
}
/*
@@ -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;
-
- 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);
-
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
-}
-/*
- * 3.2.1.54 VGCS/VBS ASSIGNMENT RESULT
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_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);
+
+ EXTRANEOUS_DATA_CHECK(curr_len, 0);
+}
+/*
+ * 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 */
- /* 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);
+ 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 */
- /* 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);
+ 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);
- /* 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.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;
-
- 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);
-
- EXTRANEOUS_DATA_CHECK(curr_len, 0);
+ guint32 curr_offset;
+ guint32 consumed;
+ guint curr_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);
+
+ 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);
- /* 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);
+ 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);
- /* 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);
+ 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;
-
- sccp_msg_p = pinfo->sccp_info;
-
- if (!(sccp_msg_p && sccp_msg_p->data.co.assoc)) {
- sccp_msg_p = NULL;
- }
-
- 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];
-
-
- offset = 0;
- saved_offset = offset;
-
- g_pinfo = pinfo;
- g_tree = tree;
-
- len = tvb_length(tvb);
-
- /*
- * add BSSMAP message name
- */
- oct = tvb_get_guint8(tvb, offset++);
-
- 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)"));
- }
-
- /*
- * 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_gsm_bssmap_msg[idx]);
-
- 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);
- }
-
- tap_p->pdu_type = BSSAP_PDU_TYPE_BSSMAP;
- tap_p->message_type = oct;
-
- tap_queue_packet(gsm_a_tap, pinfo, tap_p);
-
- if (str == NULL) 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;
+ 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;
+
+ if (!(sccp_msg_p && sccp_msg_p->data.co.assoc)) {
+ sccp_msg_p = NULL;
+ }
+
+ 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];
+
+
+ offset = 0;
+ saved_offset = offset;
+
+ g_pinfo = pinfo;
+ g_tree = tree;
+
+ len = tvb_length(tvb);
+
+ /*
+ * add BSSMAP message name
+ */
+ oct = tvb_get_guint8(tvb, offset++);
+
+ 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)"));
+ }
+
+ /*
+ * 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_gsm_bssmap_msg[idx]);
+
+ 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);
+ }
+
+ tap_p->pdu_type = BSSAP_PDU_TYPE_BSSMAP;
+ tap_p->message_type = oct;
+
+ tap_queue_packet(gsm_a_tap, pinfo, tap_p);
+
+ if (str == NULL) 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;
}
/* Register the protocol with Wireshark */
void
proto_register_gsm_a_bssmap(void)
{
- guint i;
- guint last_offset;
-
- /* 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 }
- },
+ guint i;
+ guint last_offset;
+
+ /* 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 }
+ },
{ &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_trigger_id,
+ { "Priority Indication","gsm_a_bssmap.trace_trigger_id",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ 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_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_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_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_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");
}