static int hf_icmpv6_checksum_bad = -1;
static int hf_icmpv6_reserved = -1;
static int hf_icmpv6_data = -1;
+static int hf_icmpv6_unknown_data = -1;
static int hf_icmpv6_mtu = -1;
static int hf_icmpv6_pointer = -1;
static int hf_icmpv6_echo_identifier = -1;
-static void
+static int
dissect_contained_icmpv6(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
gboolean save_in_error_pkt;
/* tiny sanity check */
if ((tvb_get_guint8(tvb, offset) & 0xf0) == 0x60) {
/* The contained packet is an IPv6 datagram; dissect it. */
- call_dissector(ipv6_handle, next_tvb, pinfo, tree);
+ offset += call_dissector(ipv6_handle, next_tvb, pinfo, tree);
} else
- call_dissector(data_handle,next_tvb, pinfo, tree);
+ offset += call_dissector(data_handle, next_tvb, pinfo, tree);
/* Restore the "we're inside an error packet" flag. */
pinfo->in_error_pkt = save_in_error_pkt;
+
+ return offset;
}
} /* transaction_end() */
-static void
+static int
dissect_icmpv6_nd_opt(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
proto_tree *icmp6opt_tree, *flag_tree;
if(opt_len == 0){
expert_add_info_format(pinfo, ti_opt_len, PI_MALFORMED, PI_ERROR, "Invalid option length (Zero)");
- return;
+ return opt_offset;
}
/* decode... */
ti_opt = proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_src_linkaddr, tvb, opt_offset, opt_len-2, FALSE);
PROTO_ITEM_SET_HIDDEN(ti_opt);
}
+ opt_offset += opt_len;
+
break;
}
case ND_OPT_TARGET_LINKADDR: /* Target Link-layer Address (2) */
ti_opt = proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_target_linkaddr, tvb, opt_offset, opt_len-2, FALSE);
PROTO_ITEM_SET_HIDDEN(ti_opt);
}
-
+ opt_offset += opt_len;
break;
}
case ND_OPT_PREFIX_INFORMATION: /* Prefix Information (3) */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_redirected_packet, tvb, opt_offset, -1, FALSE);
- dissect_contained_icmpv6(tvb, opt_offset, pinfo, icmp6opt_tree);
+ offset = dissect_contained_icmpv6(tvb, opt_offset, pinfo, icmp6opt_tree);
break;
case ND_OPT_MTU: /* MTU (5) */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_mtu, tvb, opt_offset, 4, FALSE);
proto_item_append_text(ti, " : %d", tvb_get_ntohl(tvb, opt_offset));
+ opt_offset += 4;
break;
case ND_OPT_NBMA: /* NBMA Shortcut Limit Option (6) */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_advertisement_interval, tvb, opt_offset, 4, FALSE);
proto_item_append_text(ti, " : %d", tvb_get_ntohl(tvb, opt_offset));
+ opt_offset += 4;
break;
case ND_OPT_HOMEAGENT_INFO: /* Home Agent Information Option (8) */
/* Padding */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_padding, tvb, opt_offset, padd_length, FALSE);
+ opt_offset += padd_length;
break;
}
case ND_OPT_RSA: /* RSA Signature Option (12) */
/* Digital Signature */
par_len = opt_len - 20;
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_digital_signature_padding , tvb, opt_offset, par_len, FALSE);
+ opt_offset += par_len;
/* Padding */
/* TODO: Calculate padding length and exlude from the signature */
* second.
*/
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_timestamp, tvb, opt_offset + 2, 4, FALSE);
+ opt_offset += 8;
break;
case ND_OPT_NONCE: /* Nonce option (14) */
- /* 5.3.2. Nonce Option */
+ /* 5.3.2. Nonce Option */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_nonce, tvb, opt_offset, opt_len - 2, FALSE);
- /* Nonce */
+ opt_offset += opt_len -2;
break;
case ND_OPT_TRUST_ANCHOR: /* Trust Anchor Option (15) */
{
default:
break;
}
- opt_offset = opt_offset + par_len;
+ opt_offset += par_len;
/* Padding */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_padding, tvb, opt_offset, padd_length, FALSE);
+ opt_offset += padd_length;
break;
}
padd_length = opt_len - (opt_offset - offset);
/* Padding */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_padding, tvb, opt_offset, padd_length, FALSE);
+ opt_offset += padd_length;
}else{
padd_length = opt_len - 4;
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_certificate_padding, tvb, opt_offset, padd_length, FALSE);
+ opt_offset += padd_length;
}
break;
+
}
case ND_OPT_IP_ADDRESS_PREFIX: /* IP Address/Prefix Option (17) */
{
/* IPv6 Address */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_ipa_ipv6_address, tvb, opt_offset, 16, FALSE);
- opt_offset += 16;
-
proto_item_append_text(ti, " %s/%d", tvb_ip6_to_str(tvb, opt_offset), prefix_len);
+ opt_offset += 16;
break;
}
/* Prefix */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_nrpi_prefix, tvb, opt_offset, 16, FALSE);
+ proto_item_append_text(ti, " %s/%d", tvb_ip6_to_str(tvb, opt_offset), prefix_len);
opt_offset += 16;
- proto_item_append_text(ti, " %s/%d", tvb_ip6_to_str(tvb, opt_offset), prefix_len);
break;
}
case ND_OPT_LINK_LAYER_ADDRESS: /* Link-layer Address Option (19) */
/* Link Layer Address */
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_lla_bytes, tvb, opt_offset, opt_len-3, FALSE);
+ opt_offset += opt_len - 3;
break;
}
if(status == 2){
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_naack_supplied_ncoa, tvb, opt_offset, 16, FALSE);
+ opt_offset += 16;
}else{
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_reserved, tvb, opt_offset, opt_len - 4, FALSE);
+ opt_offset += opt_len - 4;
}
break;
}
tvb_memcpy(tvb, (guint8 *)&prefix.bytes, opt_offset, 8);
proto_tree_add_ipv6(icmp6opt_tree, hf_icmpv6_opt_prefix, tvb, opt_offset, 8, prefix.bytes);
proto_item_append_text(ti, " %s/%d", ip6_to_str(&prefix), prefix_len);
+ opt_offset += 8;
break;
case 24:
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_prefix, tvb, opt_offset, 16, FALSE);
proto_item_append_text(ti, " %s/%d", tvb_ip6_to_str(tvb, opt_offset), prefix_len);
+ opt_offset += 16;
break;
default:
expert_add_info_format(pinfo, ti_opt_len, PI_MALFORMED, PI_ERROR, "Invalid Option Length");
opt_offset += 2;
proto_tree_add_item(flag_tree, hf_icmpv6_opt_reserved, tvb, opt_offset, 4, FALSE);
+ opt_offset += 4;
break;
}
case ND_OPT_HANDOVER_KEY_REQUEST: /* Handover Key Request Option (27) */
/* Padding... */
padd_length = opt_len - opt_offset;
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_padding, tvb, opt_offset, padd_length, FALSE);
+ opt_offset += padd_length;
break;
}
/* Padding... */
padd_length = opt_len - opt_offset;
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_padding, tvb, opt_offset, padd_length, FALSE);
+ opt_offset += padd_length;
+
break;
}
case ND_OPT_DNS_SEARCH_LIST: /* DNS Search List Option (31) */
/* Digital Signature */
par_len = opt_len - 20;
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_digital_signature_padding , tvb, opt_offset, par_len, FALSE);
-
+ opt_offset += par_len;
/* Padding */
/* TODO: Calculate padding length and exlude from the signature */
break;
tvb_memcpy(tvb, (guint8 *)&context_prefix.bytes, opt_offset, 8);
proto_tree_add_ipv6(icmp6opt_tree, hf_icmpv6_opt_6co_context_prefix, tvb, opt_offset, 8, context_prefix.bytes);
proto_item_append_text(ti, " %s/%d", ip6_to_str(&context_prefix), context_len);
+ opt_offset += 8;
break;
case 24:
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_opt_6co_context_prefix, tvb, opt_offset, 16, FALSE);
proto_item_append_text(ti, " %s/%d", tvb_ip6_to_str(tvb, opt_offset), context_len);
+ opt_offset += 16;
break;
default:
expert_add_info_format(pinfo, ti_opt_len, PI_MALFORMED, PI_ERROR, "Invalid Option Length");
" code not implemented, Contact Wireshark developers"
" if you want this supported", opt_type);
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_data, tvb, opt_offset, opt_len, FALSE);
+ opt_offset += opt_len;
break;
} /* switch (opt_type) */
offset += opt_len;
+ if(offset > opt_offset){
+ ti_opt = proto_tree_add_item(icmp6opt_tree, hf_icmpv6_unknown_data, tvb, opt_offset, offset - opt_offset, FALSE);
+ expert_add_info_format(pinfo, ti_opt, PI_MALFORMED, PI_ERROR, "Unknown Data (not interpreted)");
+ }
/* Close the ) to option root label */
proto_item_append_text(ti, ")");
}
+ return offset;
}
/* RPL: draft-ietf-roll-rpl-19.txt: Routing over Low-Power and Lossy Networks. */
-static void
+static int
dissect_icmpv6_rpl_opt(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
{
proto_tree *icmp6opt_tree, *flag_tree;
/* n-byte padding */
ti_opt = proto_tree_add_item(icmp6opt_tree, hf_icmpv6_rpl_opt_padn, tvb, opt_offset, opt_len, FALSE);
proto_item_append_text(ti_opt, " (Length : %i bytes)", opt_len);
+ opt_offset += opt_len;
break;
case RPL_OPT_METRIC:
tvb_memcpy(tvb, (guint8 *)&prefix.bytes, opt_offset, 8);
proto_tree_add_ipv6(icmp6opt_tree, hf_icmpv6_rpl_opt_route_prefix, tvb, opt_offset, 8, prefix.bytes);
proto_item_append_text(ti, " %s/%d", ip6_to_str(&prefix), prefix_len);
+ opt_offset += 8;
break;
case 22:
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_rpl_opt_route_prefix, tvb, opt_offset, 16, FALSE);
proto_item_append_text(ti, " %s/%d", tvb_ip6_to_str(tvb, opt_offset), prefix_len);
+ opt_offset += 16;
break;
default:
expert_add_info_format(pinfo, ti_opt_len, PI_MALFORMED, PI_ERROR, "Invalid Option Length");
tvb_memcpy(tvb, (guint8 *)&target_prefix.bytes, opt_offset, 8);
proto_tree_add_ipv6(icmp6opt_tree, hf_icmpv6_rpl_opt_target_prefix, tvb, opt_offset, 8, target_prefix.bytes);
proto_item_append_text(ti, " %s/%d", ip6_to_str(&target_prefix), prefix_len);
+ opt_offset += 8;
break;
case 18:
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_rpl_opt_target_prefix, tvb, opt_offset, 16, FALSE);
proto_item_append_text(ti, " %s/%d", tvb_ip6_to_str(tvb, opt_offset), prefix_len);
+ opt_offset += 16;
break;
default:
expert_add_info_format(pinfo, ti_opt_len, PI_MALFORMED, PI_ERROR, "Invalid Option Length");
" (%d) code not implemented, Contact"
" Wireshark developers if you want this supported", opt_type);
proto_tree_add_item(icmp6opt_tree, hf_icmpv6_data, tvb, opt_offset, opt_len, FALSE);
+ opt_offset += opt_len;
break;
} /* switch (opt_type) */
offset += opt_len + 2;
+ if(offset > opt_offset){
+ ti_opt = proto_tree_add_item(icmp6opt_tree, hf_icmpv6_unknown_data, tvb, opt_offset, offset - opt_offset, FALSE);
+ expert_add_info_format(pinfo, ti_opt, PI_MALFORMED, PI_ERROR, "Unknown Data (not interpreted)");
+ }
+
/* Close the ) to option root label */
proto_item_append_text(ti, ")");
} /* while */
+ return offset;
}
-static void
+static int
dissect_rpl_control(tvbuff_t *tvb, int rpl_offset, packet_info *pinfo _U_, proto_tree *icmp6_tree, guint8 icmp6_type _U_, guint8 icmp6_code)
{
proto_tree *flag_tree;
rpl_offset += 1;
/* RPL Options */
- dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
+ rpl_offset = dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
break;
}
case ICMP6_RPL_DIO: /* DODAG Information Object (1) */
rpl_offset += 16;
/* RPL Options */
- dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
+ rpl_offset = dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
break;
}
case ICMP6_RPL_DAO: /* Destination Advertisement Object (2) */
rpl_offset += 16;
}
/* Options */
- dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
+ rpl_offset = dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
break;
}
case ICMP6_RPL_DAOACK: /* Destination Advertisement Object Acknowledgment (3) */
}
/* Options */
- dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
+ rpl_offset = dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
break;
}
case ICMP6_RPL_CC:
rpl_offset += 4;
/* Options */
- dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
+ rpl_offset = dissect_icmpv6_rpl_opt(tvb, rpl_offset, pinfo, icmp6_tree);
break;
}
}
+ return rpl_offset;
}
/* RFC 4620 - IPv6 Node Information Queries */
-static void
+static int
dissect_nodeinfo(tvbuff_t *tvb, int ni_offset, packet_info *pinfo _U_, proto_tree *tree, guint8 icmp6_type, guint8 icmp6_code)
{
proto_tree *flag_tree;
/* Data ? */
if(tvb_reported_length_remaining(tvb, ni_offset) == 0){
- return;
+ return ni_offset;
}
if(icmp6_type == ICMP6_NI_QUERY){
ni_offset += 4;
/* Data ? */
if(tvb_reported_length_remaining(tvb, ni_offset) == 0){
- return;
+ return ni_offset;
}
while(ni_offset < (int)tvb_reported_length(tvb) ) {
}
}
}
+ return ni_offset;
}
/* RFC 2894 - Router Renumbering for IPv6 */
-static void
+static int
dissect_rrenum(tvbuff_t *tvb, int rr_offset, packet_info *pinfo _U_, proto_tree *tree, guint8 icmp6_type _U_, guint8 icmp6_code)
{
proto_tree *flag_tree, *mp_tree, *up_tree, *rm_tree;
/* Data ? */
if(tvb_reported_length_remaining(tvb, rr_offset) == 0){
- return;
+ return rr_offset;
}
if(icmp6_code == ICMP6_ROUTER_RENUMBERING_COMMAND){
proto_item_append_text(ti_rm, ": %s/%u (interface %u)", tvb_ip6_to_str(tvb, rr_offset), matchlen, interfaceindex);
}
}
+ return rr_offset;
}
-static void
+static int
dissect_mldrv2( tvbuff_t *tvb, guint32 offset, packet_info *pinfo _U_, proto_tree *tree )
{
proto_tree *mar_tree;
proto_item_append_text(ti_mar, " %s: %s", val_to_str(record_type, mldr_record_type_val,"Unknown Record Type (%d)"), ip6_to_str(&multicast_address));
}
+ return mldr_offset;
}
-static void
+static int
dissect_icmpv6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
proto_tree *icmp6_tree = NULL, *flag_tree = NULL;
}
}
next_tvb = tvb_new_subset(tvb, offset, -1, -1);
- call_dissector(data_handle, next_tvb, pinfo, icmp6_tree);
+ offset += call_dissector(data_handle, next_tvb, pinfo, icmp6_tree);
}
}
proto_tree_add_item(icmp6_tree, hf_icmpv6_reserved, tvb, offset, 4, FALSE);
offset += 4;
- dissect_contained_icmpv6(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_contained_icmpv6(tvb, offset, pinfo, icmp6_tree);
break;
case ICMP6_PACKET_TOO_BIG: /* Packet Too Big (2) */
/* MTU */
proto_tree_add_item(icmp6_tree, hf_icmpv6_mtu, tvb, offset, 4, FALSE);
offset += 4;
- dissect_contained_icmpv6(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_contained_icmpv6(tvb, offset, pinfo, icmp6_tree);
break;
case ICMP6_PARAM_PROB: /* Parameter Problem (4) */
/* MTU */
proto_tree_add_item(icmp6_tree, hf_icmpv6_pointer, tvb, offset, 4, FALSE);
offset += 4;
- dissect_contained_icmpv6(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_contained_icmpv6(tvb, offset, pinfo, icmp6_tree);
break;
case ICMP6_ECHO_REQUEST: /* Echo Request (128) */
case ICMP6_ECHO_REPLY: /* Echo Reply (129) */
offset += 4;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_ND_ROUTER_ADVERT: /* Router Advertisement (134) */
offset += 4;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_ND_NEIGHBOR_SOLICIT: /* Neighbor Solicitation (135) */
offset += 16;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_ND_NEIGHBOR_ADVERT: /* Neighbor Advertisement (136) */
offset += 16;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_ND_REDIRECT: /* Redirect Message (137) */
offset += 16;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_ROUTER_RENUMBERING: /* Router Renumbering (138) */
{
- dissect_rrenum(tvb, offset, pinfo, icmp6_tree, icmp6_type, icmp6_code);
+ offset = dissect_rrenum(tvb, offset, pinfo, icmp6_tree, icmp6_type, icmp6_code);
break;
}
case ICMP6_NI_QUERY: /* ICMP Node Information Query (139) */
case ICMP6_NI_REPLY: /* ICMP Node Information Response (140) */
{
- dissect_nodeinfo(tvb, offset, pinfo, icmp6_tree, icmp6_type, icmp6_code);
+ offset = dissect_nodeinfo(tvb, offset, pinfo, icmp6_tree, icmp6_type, icmp6_code);
break;
}
case ICMP6_IND_SOLICIT: /* Inverse Neighbor Discovery Solicitation Message (141) */
offset += 4;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_MLDV2_REPORT: /* Version 2 Multicast Listener Report (143) */
{
- dissect_mldrv2( tvb, offset, pinfo, icmp6_tree );
+ offset = dissect_mldrv2( tvb, offset, pinfo, icmp6_tree );
break;
}
case ICMP6_MIP6_DHAAD_REQUEST: /* Home Agent Address Discovery Request Message (144) */
offset += 2;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_CERT_PATH_SOL: /* Certification Path Solicitation Message (148) */
offset += 2;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_CERT_PATH_AD: /* Certification Path Advertisement Message (149) */
offset += 2;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_EXPERIMENTAL_MOBILITY: /* ICMP messages utilized by experimental mobility protocols (150) */
offset += 2;
/* Show options */
- dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
+ offset = dissect_icmpv6_nd_opt(tvb, offset, pinfo, icmp6_tree);
break;
}
case ICMP6_MCAST_ROUTER_ADVERT: /* Multicast Router Advertisement (151) */
case ICMP6_RPL_CONTROL: /* RPL Control (155) */
{
/* RPL: draft-ietf-roll-rpl-19.txt: Routing over Low-Power and Lossy Networks. */
- dissect_rpl_control(tvb, offset, pinfo, icmp6_tree, icmp6_type, icmp6_code);
+ offset = dissect_rpl_control(tvb, offset, pinfo, icmp6_tree, icmp6_type, icmp6_code);
break;
}
default:
if (trans)
tap_queue_packet(icmpv6_tap, pinfo, trans);
+
+ return offset;
}
void
{ &hf_icmpv6_data,
{ "Data", "icmpv6.data", FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
+ { &hf_icmpv6_unknown_data,
+ { "Unknown Data", "icmpv6.unknown_data", FT_BYTES, BASE_NONE, NULL, 0x0,
+ "Not interpreted Data", HFILL }},
{ &hf_icmpv6_mtu,
{ "MTU", "icmpv6.mtu", FT_UINT32, BASE_DEC, NULL, 0x0,
"The Maximum Transmission Unit of the next-hop link", HFILL }},
proto_register_field_array(proto_icmpv6, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
- register_dissector("icmpv6", dissect_icmpv6, proto_icmpv6);
+ new_register_dissector("icmpv6", dissect_icmpv6, proto_icmpv6);
icmpv6_tap = register_tap("icmpv6");
}
{
dissector_handle_t icmpv6_handle;
- icmpv6_handle = create_dissector_handle(dissect_icmpv6, proto_icmpv6);
+ icmpv6_handle = new_create_dissector_handle(dissect_icmpv6, proto_icmpv6);
dissector_add_uint("ip.proto", IP_PROTO_ICMPV6, icmpv6_handle);
/*