diff options
author | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2010-03-02 06:12:21 +0000 |
---|---|---|
committer | etxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7> | 2010-03-02 06:12:21 +0000 |
commit | 8cbeee42fef8948282e411fbf59df1e87faa2669 (patch) | |
tree | 7de53d9240dd31bb1c66b86db2e52921dbfcea81 /epan/dissectors/packet-netflow.c | |
parent | d4caaf816a35c8c86529032ef43ccd10633cfe7d (diff) |
From Hitoshi Irino:
Displaying value and type of IPFIX reverse PEN elements in data records
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4399
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@32082 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-netflow.c')
-rw-r--r-- | epan/dissectors/packet-netflow.c | 689 |
1 files changed, 346 insertions, 343 deletions
diff --git a/epan/dissectors/packet-netflow.c b/epan/dissectors/packet-netflow.c index 74a8b12a97..b3974634c5 100644 --- a/epan/dissectors/packet-netflow.c +++ b/epan/dissectors/packet-netflow.c @@ -545,22 +545,24 @@ const value_string special_mpls_top_label_type[] = { {0, NULL } }; -static void +static proto_item * proto_tree_add_mpls_label(proto_tree * pdutree, tvbuff_t * tvb, int offset, int length, int level) { + proto_item * ti; if( length == 3) { guint8 b0 = tvb_get_guint8(tvb, offset); guint8 b1 = tvb_get_guint8(tvb, offset + 1); guint8 b2 = tvb_get_guint8(tvb, offset + 2); - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "MPLS-Label%d: %u exp-bits: %u %s", level, ((b0<<12)+(b1<<4)+(b2>>4)), ((b2>>1)&0x7), ((b2&0x1)?"top-of-stack":"")); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "MPLS-Label%d: bad length %d", level, length); } + return ti; } void proto_reg_handoff_netflow(void); @@ -585,11 +587,11 @@ static int dissect_v9_flowset(tvbuff_t * tvb, packet_info * pinfo, proto_tree * static int dissect_v9_data(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int offset, guint16 id, guint length, hdrinfo_t * hdrinfo); static guint dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, - int offset, struct v9_template * tplt); + int offset, struct v9_template * tplt, hdrinfo_t * hdrinfo); static int dissect_v9_options_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, int offset, hdrinfo_t *hdrinfo, guint16 flowset_id); static int dissect_v9_template(proto_tree * pdutree, tvbuff_t * tvb, packet_info *pinfo, - int offset, int len, hdrinfo_t * hdrinfo); + int offset, int len, hdrinfo_t * hdrinfo, guint16 flowset_id); static int v9_template_hash(guint16 id, const address * net_src, guint32 src_id); static struct v9_template *v9_template_get(guint16 id, address * net_src, @@ -1247,7 +1249,7 @@ dissect_v9_flowset(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, in offset, 2, FALSE); offset += 2; - dissect_v9_template(pdutree, tvb, pinfo, offset, length - 4, hdrinfo); + dissect_v9_template(pdutree, tvb, pinfo, offset, length - 4, hdrinfo, flowset_id); } else if ((flowset_id == 1) || (flowset_id == 3)) { /* Option Template */ proto_tree_add_item(pdutree, hf_cflow_options_flowset_id, tvb, @@ -1303,7 +1305,7 @@ dissect_v9_data(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int o data_tree = proto_item_add_subtree(data_item, ett_dataflowset); - pdu_len = dissect_v9_pdu(tvb, pinfo, data_tree, offset, tplt); + pdu_len = dissect_v9_pdu(tvb, pinfo, data_tree, offset, tplt, hdrinfo); offset += tplt->length; /* XXX - Throw an exception */ @@ -1348,7 +1350,7 @@ dissect_v9_data(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int o static guint dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int offset, - struct v9_template * tplt) + struct v9_template * tplt, hdrinfo_t * hdrinfo) { int orig_offset = offset; int i; @@ -1428,7 +1430,7 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of rev = 0; type = tplt->entries[i].type; length = tplt->entries[i].length; - if (type & 0x8000) { + if (hdrinfo->vspec == 10 && type & 0x8000) { pen = tplt->entries[i].pen; if (pen == REVPEN) { /* reverse PEN */ type &= 0x7fff; @@ -1436,20 +1438,20 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of } } - pen_type = pen << 16 | (type & 0x7fff); - + pen_type = (pen > 0 && pen != REVPEN) ? pen << 16 | (type & 0x7fff) : type; + ti = NULL; switch (pen_type) { case 85: /* BYTES_PERMANENT */ case 1: /* bytes */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_octets, + ti = proto_tree_add_item(pdutree, hf_cflow_octets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_octets64, + ti = proto_tree_add_item(pdutree, hf_cflow_octets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Octets: length %u", length); } @@ -1458,13 +1460,13 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 86: /* PACKETS_PERMANENT */ case 2: /* packets */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_packets, + ti = proto_tree_add_item(pdutree, hf_cflow_packets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_packets64, + ti = proto_tree_add_item(pdutree, hf_cflow_packets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Packets: length %u", length); } @@ -1473,134 +1475,134 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 163: /* observedFlowTotalCount */ case 3: /* flows */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_flows, + ti = proto_tree_add_item(pdutree, hf_cflow_flows, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Flows: length %u", length); } break; case 4: /* proto */ - proto_tree_add_item(pdutree, hf_cflow_prot, + ti = proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset, length, FALSE); break; case 5: /* TOS */ - proto_tree_add_item(pdutree, hf_cflow_tos, + ti = proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset, length, FALSE); break; case 6: /* TCP flags */ - proto_tree_add_item(pdutree, hf_cflow_tcpflags, + ti = proto_tree_add_item(pdutree, hf_cflow_tcpflags, tvb, offset, length, FALSE); break; case 7: /* source port */ case 180: /* udpSourcePort */ case 182: /* tcpSourcePort */ - proto_tree_add_item(pdutree, hf_cflow_srcport, + ti = proto_tree_add_item(pdutree, hf_cflow_srcport, tvb, offset, length, FALSE); break; case 8: /* source IP */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_srcaddr, + ti = proto_tree_add_item(pdutree, hf_cflow_srcaddr, tvb, offset, length, FALSE); } else if (length == 16) { - proto_tree_add_item(pdutree, hf_cflow_srcaddr_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_srcaddr_v6, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "SrcAddr: length %u", length); } break; case 9: /* source mask */ - proto_tree_add_item(pdutree, hf_cflow_srcmask, + ti = proto_tree_add_item(pdutree, hf_cflow_srcmask, tvb, offset, length, FALSE); break; case 10: /* input SNMP */ - proto_tree_add_item(pdutree, hf_cflow_inputint, + ti = proto_tree_add_item(pdutree, hf_cflow_inputint, tvb, offset, length, FALSE); break; case 11: /* dest port */ case 181: /* udpDestinationPort */ case 183: /* tcpDestinationPort */ - proto_tree_add_item(pdutree, hf_cflow_dstport, + ti = proto_tree_add_item(pdutree, hf_cflow_dstport, tvb, offset, length, FALSE); break; case 12: /* dest IP */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_dstaddr, + ti = proto_tree_add_item(pdutree, hf_cflow_dstaddr, tvb, offset, length, FALSE); } else if (length == 16) { - proto_tree_add_item(pdutree, hf_cflow_dstaddr_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_dstaddr_v6, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "DstAddr: length %u", length); } break; case 13: /* dest mask */ - proto_tree_add_item(pdutree, hf_cflow_dstmask, + ti = proto_tree_add_item(pdutree, hf_cflow_dstmask, tvb, offset, length, FALSE); break; case 14: /* output SNMP */ - proto_tree_add_item(pdutree, hf_cflow_outputint, + ti = proto_tree_add_item(pdutree, hf_cflow_outputint, tvb, offset, length, FALSE); break; case 15: /* nexthop IP */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_nexthop, + ti = proto_tree_add_item(pdutree, hf_cflow_nexthop, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "NextHop: length %u", length); } break; case 16: /* source AS */ - proto_tree_add_item(pdutree, hf_cflow_srcas, + ti = proto_tree_add_item(pdutree, hf_cflow_srcas, tvb, offset, length, FALSE); break; case 17: /* dest AS */ - proto_tree_add_item(pdutree, hf_cflow_dstas, + ti = proto_tree_add_item(pdutree, hf_cflow_dstas, tvb, offset, length, FALSE); break; case 18: /* BGP nexthop IP */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_bgpnexthop, + ti = proto_tree_add_item(pdutree, hf_cflow_bgpnexthop, tvb, offset, length, FALSE); } else if (length == 16) { - proto_tree_add_item(pdutree, hf_cflow_bgpnexthop_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_bgpnexthop_v6, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "BGPNextHop: length %u", length); } break; case 19: /* multicast packets */ - proto_tree_add_item(pdutree, hf_cflow_mulpackets, + ti = proto_tree_add_item(pdutree, hf_cflow_mulpackets, tvb, offset, length, FALSE); break; case 20: /* multicast octets */ - proto_tree_add_item(pdutree, hf_cflow_muloctets, + ti = proto_tree_add_item(pdutree, hf_cflow_muloctets, tvb, offset, length, FALSE); break; @@ -1706,13 +1708,13 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 23: /* postOctetDeltaCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_post_octets, + ti = proto_tree_add_item(pdutree, hf_cflow_post_octets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_post_octets64, + ti = proto_tree_add_item(pdutree, hf_cflow_post_octets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Post Octets: length %u", length); } @@ -1720,45 +1722,45 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 24: /* postPacketDeltaCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_post_packets, + ti = proto_tree_add_item(pdutree, hf_cflow_post_packets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_post_packets64, + ti = proto_tree_add_item(pdutree, hf_cflow_post_packets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Post Packets: length %u", length); } break; case 25: /* length_min */ - proto_tree_add_item(pdutree, hf_cflow_length_min, + ti = proto_tree_add_item(pdutree, hf_cflow_length_min, tvb, offset, length, FALSE); break; case 26: /* length_max */ - proto_tree_add_item(pdutree, hf_cflow_length_max, + ti = proto_tree_add_item(pdutree, hf_cflow_length_max, tvb, offset, length, FALSE); break; case 27: /* IPv6 src addr */ - proto_tree_add_item(pdutree, hf_cflow_srcaddr_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_srcaddr_v6, tvb, offset, length, FALSE); break; case 28: /* IPv6 dst addr */ - proto_tree_add_item(pdutree, hf_cflow_dstaddr_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_dstaddr_v6, tvb, offset, length, FALSE); break; case 29: /* IPv6 src addr mask */ - proto_tree_add_item(pdutree, hf_cflow_srcmask_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_srcmask_v6, tvb, offset, length, FALSE); break; case 30: /* IPv6 dst addr mask */ - proto_tree_add_item(pdutree, hf_cflow_dstmask_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_dstmask_v6, tvb, offset, length, FALSE); break; @@ -1766,202 +1768,202 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of /* RFC5102 defines that Abstract Data Type of this Information Element is unsigned32 */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_ipv6_flowlabel, + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_flowlabel, tvb, offset, length, FALSE); } /* RFC3954 defines that length of this field is 3 Bytes */ else if (length == 3) { - proto_tree_add_item(pdutree, hf_cflow_ipv6_flowlabel24, + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_flowlabel24, tvb, offset, length, FALSE); } break; case 32: /* ICMP_TYPE */ - proto_tree_add_item(pdutree, hf_cflow_icmp_type, + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_type, tvb, offset, length, FALSE); break; case 33: /* IGMP_TYPE */ - proto_tree_add_item(pdutree, hf_cflow_igmp_type, + ti = proto_tree_add_item(pdutree, hf_cflow_igmp_type, tvb, offset, length, FALSE); break; case 34: /* sampling interval */ - proto_tree_add_item(pdutree, hf_cflow_sampling_interval, + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_interval, tvb, offset, length, FALSE); break; case 35: /* sampling algorithm */ - proto_tree_add_item(pdutree, hf_cflow_sampling_algorithm, + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_algorithm, tvb, offset, length, FALSE); break; case 36: /* flow active timeout */ - proto_tree_add_item(pdutree, hf_cflow_flow_active_timeout, + ti = proto_tree_add_item(pdutree, hf_cflow_flow_active_timeout, tvb, offset, length, FALSE); break; case 37: /* flow inactive timeout */ - proto_tree_add_item(pdutree, hf_cflow_flow_inactive_timeout, + ti = proto_tree_add_item(pdutree, hf_cflow_flow_inactive_timeout, tvb, offset, length, FALSE); break; case 38: /* engine type */ - proto_tree_add_item(pdutree, hf_cflow_engine_type, + ti = proto_tree_add_item(pdutree, hf_cflow_engine_type, tvb, offset, length, FALSE); break; case 39: /* engine id*/ - proto_tree_add_item(pdutree, hf_cflow_engine_id, + ti = proto_tree_add_item(pdutree, hf_cflow_engine_id, tvb, offset, length, FALSE); break; case 40: /* bytes exported */ if( length == 8 ) { - proto_tree_add_item(pdutree, hf_cflow_octets_exp64, + ti = proto_tree_add_item(pdutree, hf_cflow_octets_exp64, tvb, offset, length, FALSE); } else if( length == 4 ) { - proto_tree_add_item(pdutree, hf_cflow_octets_exp, + ti = proto_tree_add_item(pdutree, hf_cflow_octets_exp, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "BytesExported: length %u", length); } break; case 41: /* packets exported */ if( length == 8 ) { - proto_tree_add_item(pdutree, hf_cflow_packets_exp64, + ti = proto_tree_add_item(pdutree, hf_cflow_packets_exp64, tvb, offset, length, FALSE); } else if( length == 4 ) { - proto_tree_add_item(pdutree, hf_cflow_packets_exp, + ti = proto_tree_add_item(pdutree, hf_cflow_packets_exp, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "PacketsExported: length %u", length); } break; case 42: /* flows exported */ if( length == 8 ) { - proto_tree_add_item(pdutree, hf_cflow_flows_exp64, + ti = proto_tree_add_item(pdutree, hf_cflow_flows_exp64, tvb, offset, length, FALSE); } else if( length == 4 ) { - proto_tree_add_item(pdutree, hf_cflow_flows_exp, + ti = proto_tree_add_item(pdutree, hf_cflow_flows_exp, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "FlowsExported: length %u", length); } break; case 44: /* IP source prefix */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_srcprefix, + ti = proto_tree_add_item(pdutree, hf_cflow_srcprefix, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "SrcPrefix: length %u", length); } break; case 45: /* IP destination prefix */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_dstprefix, + ti = proto_tree_add_item(pdutree, hf_cflow_dstprefix, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "DstPrefix: length %u", length); } break; case 46: /* top MPLS label type*/ - proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_type, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_type, tvb, offset, length, FALSE); break; case 47: /* top MPLS label PE address*/ - proto_tree_add_item(pdutree, hf_cflow_mpls_pe_addr, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_pe_addr, tvb, offset, length, FALSE); break; case 48: /* Flow Sampler ID */ - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "FlowSamplerID: %d", tvb_get_guint8(tvb, offset)); break; case 49: /* FLOW_SAMPLER_MODE */ - proto_tree_add_item(pdutree, hf_cflow_sampler_mode, + ti = proto_tree_add_item(pdutree, hf_cflow_sampler_mode, tvb, offset, length, FALSE); break; case 50: /* FLOW_SAMPLER_RANDOM_INTERVAL */ - proto_tree_add_item(pdutree, hf_cflow_sampler_random_interval, + ti = proto_tree_add_item(pdutree, hf_cflow_sampler_random_interval, tvb, offset, length, FALSE); break; case 51: /* FLOW_CLASS */ - proto_tree_add_item(pdutree, hf_cflow_flow_class, + ti = proto_tree_add_item(pdutree, hf_cflow_flow_class, tvb, offset, length, FALSE); break; case 52: /* TTL_MINIMUM */ - proto_tree_add_item(pdutree, hf_cflow_ttl_minimum, + ti = proto_tree_add_item(pdutree, hf_cflow_ttl_minimum, tvb, offset, length, FALSE); break; case 53: /* TTL_MAXIMUM */ - proto_tree_add_item(pdutree, hf_cflow_ttl_maximum, + ti = proto_tree_add_item(pdutree, hf_cflow_ttl_maximum, tvb, offset, length, FALSE); break; case 54: /* IPV4_ID */ - proto_tree_add_item(pdutree, hf_cflow_ipv4_id, + ti = proto_tree_add_item(pdutree, hf_cflow_ipv4_id, tvb, offset, length, FALSE); break; case 55: /* postIpClassOfService */ - proto_tree_add_item(pdutree, hf_cflow_post_tos, + ti = proto_tree_add_item(pdutree, hf_cflow_post_tos, tvb, offset, length, FALSE); break; case 56: /* sourceMacAddress */ - proto_tree_add_item(pdutree, hf_cflow_srcmac, + ti = proto_tree_add_item(pdutree, hf_cflow_srcmac, tvb, offset, length, FALSE); break; case 57: /* postDestinationMacAddress */ - proto_tree_add_item(pdutree, hf_cflow_post_dstmac, + ti = proto_tree_add_item(pdutree, hf_cflow_post_dstmac, tvb, offset, length, FALSE); break; case 58: /* vlanId */ - proto_tree_add_item(pdutree, hf_cflow_vlanid, + ti = proto_tree_add_item(pdutree, hf_cflow_vlanid, tvb, offset, length, FALSE); break; case 59: /* postVlanId */ - proto_tree_add_item(pdutree, hf_cflow_post_vlanid, + ti = proto_tree_add_item(pdutree, hf_cflow_post_vlanid, tvb, offset, length, FALSE); break; case 60: /* IP_VERSION */ - proto_tree_add_item(pdutree, hf_cflow_ip_version, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_version, tvb, offset, length, FALSE); break; case 61: /* DIRECTION */ - proto_tree_add_item(pdutree, hf_cflow_direction, + ti = proto_tree_add_item(pdutree, hf_cflow_direction, tvb, offset, length, FALSE); break; case 62: /* IPV6_NEXT_HOP */ if (length == 16) { - proto_tree_add_item(pdutree, hf_cflow_nexthop_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_nexthop_v6, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "NextHop: length %u", length); } @@ -1969,87 +1971,87 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 63: /* BGP_IPV6_NEXT_HOP */ if (length == 16) { - proto_tree_add_item(pdutree, hf_cflow_bgpnexthop_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_bgpnexthop_v6, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "BGPNextHop: length %u", length); } break; case 64: /* ipv6ExtensionHeaders */ - proto_tree_add_item(pdutree, hf_cflow_ipv6_exthdr, + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_exthdr, tvb, offset, length, FALSE); break; case 70: /* MPLS label1*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 1); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 1); break; case 71: /* MPLS label2*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 2); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 2); break; case 72: /* MPLS label3*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 3); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 3); break; case 73: /* MPLS label4*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 4); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 4); break; case 74: /* MPLS label5*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 5); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 5); break; case 75: /* MPLS label6*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 6); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 6); break; case 76: /* MPLS label7*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 7); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 7); break; case 77: /* MPLS label8*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 8); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 8); break; case 78: /* MPLS label9*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 9); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 9); break; case 79: /* MPLS label10*/ - proto_tree_add_mpls_label(pdutree, tvb, offset, length, 10); + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 10); break; case 80: /* destinationMacAddress */ - proto_tree_add_item(pdutree, hf_cflow_dstmac, + ti = proto_tree_add_item(pdutree, hf_cflow_dstmac, tvb, offset, length, FALSE); break; case 81: /* postSourceMacAddress */ - proto_tree_add_item(pdutree, hf_cflow_post_srcmac, + ti = proto_tree_add_item(pdutree, hf_cflow_post_srcmac, tvb, offset, length, FALSE); break; case 82: /* IF_NAME */ - proto_tree_add_item(pdutree, hf_cflow_if_name, + ti = proto_tree_add_item(pdutree, hf_cflow_if_name, tvb, offset, length, FALSE); break; case 83: /* IF_DESCR */ - proto_tree_add_item(pdutree, hf_cflow_if_descr, + ti = proto_tree_add_item(pdutree, hf_cflow_if_descr, tvb, offset, length, FALSE); break; case 84: /* SAMPLER_NAME */ - proto_tree_add_item(pdutree, hf_cflow_sampler_name, + ti = proto_tree_add_item(pdutree, hf_cflow_sampler_name, tvb, offset, length, FALSE); break; case 88: /* fragmentOffset */ - proto_tree_add_item(pdutree, hf_cflow_fragment_offset, + ti = proto_tree_add_item(pdutree, hf_cflow_fragment_offset, tvb, offset, length, FALSE); break; @@ -2061,70 +2063,70 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of break; case 90: /* mplsVpnRouteDistinguisher */ - proto_tree_add_item(pdutree, hf_cflow_mpls_vpn_rd, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_vpn_rd, tvb, offset, length, FALSE); break; case 91: /* mplsTopLabelPrefixLength */ - proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_prefix_length, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_prefix_length, tvb, offset, length, FALSE); break; case 94: /* NBAR applicationDesc */ - proto_tree_add_item(pdutree, hf_cflow_nbar_appl_desc, + ti = proto_tree_add_item(pdutree, hf_cflow_nbar_appl_desc, tvb, offset, length, FALSE); break; case 95: /* NBAR applicationId */ - proto_tree_add_item(pdutree, hf_cflow_nbar_appl_id, + ti = proto_tree_add_item(pdutree, hf_cflow_nbar_appl_id, tvb, offset+2, 2, FALSE); break; case 96: /* NBAR applicationName */ - proto_tree_add_item(pdutree, hf_cflow_nbar_appl_name, + ti = proto_tree_add_item(pdutree, hf_cflow_nbar_appl_name, tvb, offset, length, FALSE); break; case 98: /* postIpDiffServCodePoint */ - proto_tree_add_item(pdutree, hf_cflow_post_ip_diff_serv_code_point, + ti = proto_tree_add_item(pdutree, hf_cflow_post_ip_diff_serv_code_point, tvb, offset, length, FALSE); break; case 99: /* multicastReplicationFactor */ - proto_tree_add_item(pdutree, hf_cflow_multicast_replication_factor, + ti = proto_tree_add_item(pdutree, hf_cflow_multicast_replication_factor, tvb, offset, length, FALSE); break; case 128: /* source AS Peer */ - proto_tree_add_item(pdutree, hf_cflow_peer_srcas, + ti = proto_tree_add_item(pdutree, hf_cflow_peer_srcas, tvb, offset, length, FALSE); break; case 129: /* dest AS Peer*/ - proto_tree_add_item(pdutree, hf_cflow_peer_dstas, + ti = proto_tree_add_item(pdutree, hf_cflow_peer_dstas, tvb, offset, length, FALSE); break; case 130: /* exporterIPv4Address */ - proto_tree_add_item(pdutree, hf_cflow_exporter_addr, + ti = proto_tree_add_item(pdutree, hf_cflow_exporter_addr, tvb, offset, length, FALSE); break; case 131: /* exporterIPv6Address */ - proto_tree_add_item(pdutree, + ti = proto_tree_add_item(pdutree, hf_cflow_exporter_addr_v6, tvb, offset, length, FALSE); break; case 132: /* droppedOctetDeltaCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_drop_octets, + ti = proto_tree_add_item(pdutree, hf_cflow_drop_octets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_drop_octets64, + ti = proto_tree_add_item(pdutree, hf_cflow_drop_octets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Dropped Octets: length %u", length); } @@ -2132,13 +2134,13 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 133: /* droppedPacketDeltaCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_drop_packets, + ti = proto_tree_add_item(pdutree, hf_cflow_drop_packets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_drop_packets64, + ti = proto_tree_add_item(pdutree, hf_cflow_drop_packets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Dropped Packets: length %u", length); } @@ -2146,111 +2148,111 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 134: /* droppedOctetTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_drop_total_octets, + ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_octets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_drop_total_octets64, + ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_octets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Dropped Total Octets: length %u", length); } break; case 135: /* droppedPacketTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_drop_total_packets, + ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_packets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_drop_total_packets64, + ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_packets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Dropped Total Packets: length %u", length); } break; case 136: /* flowEndReason */ - proto_tree_add_item(pdutree, hf_cflow_flow_end_reason, + ti = proto_tree_add_item(pdutree, hf_cflow_flow_end_reason, tvb, offset, length, FALSE); break; case 137: /* commonPropertiesId */ - proto_tree_add_item(pdutree, hf_cflow_common_properties_id, + ti = proto_tree_add_item(pdutree, hf_cflow_common_properties_id, tvb, offset, length, FALSE); break; case 138: /* observationPointId */ - proto_tree_add_item(pdutree, hf_cflow_observation_point_id, + ti = proto_tree_add_item(pdutree, hf_cflow_observation_point_id, tvb, offset, length, FALSE); break; case 139: /* icmpTypeCodeIPv6 */ - proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_type, + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_type, tvb, offset, 1, FALSE); - proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_code, + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_code, tvb, offset + 1, 1, FALSE); break; case 140: /* mplsTopLabelIPv6Address */ if (length == 16) { - proto_tree_add_item(pdutree, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_pe_addr_v6, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "mplsTopLabelIPv6Addr: length %u", length); } break; case 141: /* lineCardId */ - proto_tree_add_item(pdutree, hf_cflow_scope_linecard, + ti = proto_tree_add_item(pdutree, hf_cflow_scope_linecard, tvb, offset, length, FALSE); break; case 142: /* portId */ - proto_tree_add_item(pdutree, hf_cflow_port_id, + ti = proto_tree_add_item(pdutree, hf_cflow_port_id, tvb, offset, length, FALSE); break; case 143: /* meteringProcessId */ - proto_tree_add_item(pdutree, hf_cflow_mp_id, + ti = proto_tree_add_item(pdutree, hf_cflow_mp_id, tvb, offset, length, FALSE); break; case 144: /* FLOW EXPORTER */ - proto_tree_add_item(pdutree, hf_cflow_flow_exporter, + ti = proto_tree_add_item(pdutree, hf_cflow_flow_exporter, tvb, offset, length, FALSE); break; case 145: /* templateId */ - proto_tree_add_item(pdutree, hf_cflow_template_id, + ti = proto_tree_add_item(pdutree, hf_cflow_template_id, tvb, offset, length, FALSE); break; case 146: /* wlanChannelId */ - proto_tree_add_item(pdutree, hf_cflow_wlan_channel_id, + ti = proto_tree_add_item(pdutree, hf_cflow_wlan_channel_id, tvb, offset, length, FALSE); break; case 147: /* wlanSSID */ - proto_tree_add_item(pdutree, hf_cflow_wlan_ssid, + ti = proto_tree_add_item(pdutree, hf_cflow_wlan_ssid, tvb, offset, length, FALSE); break; case 148: /* flowId */ - proto_tree_add_item(pdutree, hf_cflow_flow_id, + ti = proto_tree_add_item(pdutree, hf_cflow_flow_id, tvb, offset, length, FALSE); break; case 149: /* observationDomainId */ - proto_tree_add_item(pdutree, hf_cflow_od_id, + ti = proto_tree_add_item(pdutree, hf_cflow_od_id, tvb, offset, length, FALSE); break; case 160: /* systemInitTimeMilliseconds */ - proto_tree_add_item(pdutree, hf_cflow_sysuptime, + ti = proto_tree_add_item(pdutree, hf_cflow_sysuptime, tvb, offset, length, FALSE); break; @@ -2258,7 +2260,7 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of msec_delta = tvb_get_ntohl(tvb, offset); ts_delta.secs = msec_delta / 1000; ts_delta.nsecs = (msec_delta % 1000) * 1000000; - proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, + ti = proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, offset, length, &ts_delta); break; @@ -2266,19 +2268,19 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of msec_delta = tvb_get_ntohl(tvb, offset); ts_delta.secs = msec_delta / 1000000; ts_delta.nsecs = (msec_delta % 1000000) * 1000000; - proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, + ti = proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, offset, length, &ts_delta); break; case 164: /* ignoredPacketTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_ignore_packets, + ti = proto_tree_add_item(pdutree, hf_cflow_ignore_packets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_ignore_packets64, + ti = proto_tree_add_item(pdutree, hf_cflow_ignore_packets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Ignored Packets: length %u", length); } @@ -2286,13 +2288,13 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 165: /* ignoredOctetTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_ignore_octets, + ti = proto_tree_add_item(pdutree, hf_cflow_ignore_octets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_ignore_octets64, + ti = proto_tree_add_item(pdutree, hf_cflow_ignore_octets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Ignored Octets: length %u", length); } @@ -2300,13 +2302,13 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 166: /* notSentFlowTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_notsent_flows, + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_flows, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_notsent_flows64, + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_flows64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Not Sent Flows: length %u", length); } @@ -2314,13 +2316,13 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 167: /* notSentPacketTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_notsent_packets, + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_packets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_notsent_packets64, + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_packets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Not Sent Packets: length %u", length); } @@ -2328,13 +2330,13 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 168: /* notSentOctetTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_notsent_packets, + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_packets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_notsent_packets64, + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_packets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Not Sent Packets: length %u", length); } @@ -2342,10 +2344,10 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 169: /* destinationIPv6Prefix */ if (length == 16) { - proto_tree_add_item(pdutree, hf_cflow_dstnet_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_dstnet_v6, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "DstPrefix: length %u", length); } @@ -2353,10 +2355,10 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 170: /* sourceIPv6Prefix */ if (length == 16) { - proto_tree_add_item(pdutree, hf_cflow_srcnet_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_srcnet_v6, tvb, offset, length, FALSE); } else if (length != 4 && length != 16) { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "SrcPrefix: length %u", length); } @@ -2364,13 +2366,13 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 171: /* postOctetTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_post_total_octets, + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_octets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_post_total_octets64, + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_octets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Post Total Octets: length %u", length); } @@ -2378,32 +2380,32 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 172: /* postPacketTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_post_total_packets, + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_packets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_post_total_packets64, + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_packets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Post Total Packets: length %u", length); } break; case 173: /* flowKeyIndicator */ - proto_tree_add_item(pdutree, hf_cflow_key, + ti = proto_tree_add_item(pdutree, hf_cflow_key, tvb, offset, length, FALSE); break; case 174: /* postMCastPacketTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_post_total_mulpackets, + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_mulpackets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_post_total_mulpackets64, + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_mulpackets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Post Total Multicast Packets: length %u", length); } @@ -2411,756 +2413,756 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of case 175: /* postMCastOctetTotalCount */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_post_total_muloctets, + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_muloctets, tvb, offset, length, FALSE); } else if (length == 8) { - proto_tree_add_item(pdutree, hf_cflow_post_total_muloctets64, + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_muloctets64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Post Total Multicast Octets: length %u", length); } break; case 176: /* ICMP_IPv4_TYPE */ - proto_tree_add_item(pdutree, hf_cflow_icmp_ipv4_type, + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv4_type, tvb, offset, length, FALSE); break; case 177: /* ICMP_IPv4_CODE */ - proto_tree_add_item(pdutree, hf_cflow_icmp_ipv4_code, + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv4_code, tvb, offset, length, FALSE); break; case 178: /* ICMP_IPv6_TYPE */ - proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_type, + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_type, tvb, offset, length, FALSE); break; case 179: /* ICMP_IPv6_CODE */ - proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_code, + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_code, tvb, offset, length, FALSE); break; case 184: /* tcpSequenceNumber */ - proto_tree_add_item(pdutree, hf_cflow_tcp_seq_num, + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_seq_num, tvb, offset, length, FALSE); break; case 185: /* tcpAcknowledgementNumber */ - proto_tree_add_item(pdutree, hf_cflow_tcp_ack_num, + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_ack_num, tvb, offset, length, FALSE); break; case 186: /* TCP_WINDOWS_SIZE */ - proto_tree_add_item(pdutree, hf_cflow_tcp_window_size, + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_window_size, tvb, offset, length, FALSE); break; case 187: /* tcpUrgentPointer */ - proto_tree_add_item(pdutree, hf_cflow_tcp_urg_ptr, + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_urg_ptr, tvb, offset, length, FALSE); break; case 188: /* tcpHeaderLength */ - proto_tree_add_item(pdutree, hf_cflow_tcp_header_length, + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_header_length, tvb, offset, length, FALSE); break; case 189: /* ipHeaderLength */ - proto_tree_add_item(pdutree, hf_cflow_ip_header_length, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_header_length, tvb, offset, length, FALSE); break; case 190: /* IP_TOTAL_LENGTH */ - proto_tree_add_item(pdutree, hf_cflow_ip_total_length, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_total_length, tvb, offset, length, FALSE); break; case 191: /* payloadLengthIPv6 */ - proto_tree_add_item(pdutree, hf_cflow_ipv6_payload_length, + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_payload_length, tvb, offset, length, FALSE); break; case 192: /* IP_TTL */ - proto_tree_add_item(pdutree, hf_cflow_ip_ttl, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_ttl, tvb, offset, length, FALSE); break; case 193: /* nextHeaderIPv6 */ - proto_tree_add_item(pdutree, hf_cflow_ipv6_next_hdr, + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_next_hdr, tvb, offset, length, FALSE); break; case 194: /* IP_TOS */ - proto_tree_add_item(pdutree, hf_cflow_ip_tos, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_tos, tvb, offset, length, FALSE); break; case 195: /* IP_DSCP */ - proto_tree_add_item(pdutree, hf_cflow_ip_dscp, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_dscp, tvb, offset, length, FALSE); break; case 196: /* ipPrecedence */ - proto_tree_add_item(pdutree, hf_cflow_ip_precedence, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_precedence, tvb, offset, length, FALSE); break; case 197: /* fragmentFlags */ - proto_tree_add_item(pdutree, hf_cflow_ip_fragment_flags, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_fragment_flags, tvb, offset, length, FALSE); break; case 198: /* BYTES_SQUARED */ case 199: /* BYTES_SQUARED_PERMANENT */ if( length == 8 ) { - proto_tree_add_item(pdutree, hf_cflow_octets_squared64, + ti = proto_tree_add_item(pdutree, hf_cflow_octets_squared64, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Bytes Squared: length %u", length); } break; case 200: /* mplsTopLabelTTL */ - proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_ttl, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_ttl, tvb, offset, length, FALSE); break; case 201: /* mplsLabelStackLength */ - proto_tree_add_item(pdutree, hf_cflow_mpls_label_length, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_label_length, tvb, offset, length, FALSE); break; case 202: /* mplsLabelStackDepth */ - proto_tree_add_item(pdutree, hf_cflow_mpls_label_depth, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_label_depth, tvb, offset, length, FALSE); break; case 203: /* mplsTopLabelExp */ - proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_exp, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_exp, tvb, offset, length, FALSE); break; case 204: /* ipPayloadLength */ - proto_tree_add_item(pdutree, hf_cflow_ip_payload_length, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_payload_length, tvb, offset, length, FALSE); break; case 205: /* UDP_LENGTH */ - proto_tree_add_item(pdutree, hf_cflow_udp_length, + ti = proto_tree_add_item(pdutree, hf_cflow_udp_length, tvb, offset, length, FALSE); break; case 206: /* IS_MULTICAST */ - proto_tree_add_item(pdutree, hf_cflow_is_multicast, + ti = proto_tree_add_item(pdutree, hf_cflow_is_multicast, tvb, offset, length, FALSE); break; case 207: /* IP_HEADER_WORDS */ - proto_tree_add_item(pdutree, hf_cflow_ip_header_words, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_header_words, tvb, offset, length, FALSE); break; case 208: /* OPTION_MAP */ - proto_tree_add_item(pdutree, hf_cflow_option_map, + ti = proto_tree_add_item(pdutree, hf_cflow_option_map, tvb, offset, length, FALSE); break; case 209: /* tcpOptions */ - proto_tree_add_item(pdutree, hf_cflow_tcp_option_map, + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_option_map, tvb, offset, length, FALSE); break; case 210: /* paddingOctets */ - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Padding (%u byte%s)", length, plurality(length, "", "s")); break; case 211: /* collectorIPv4Address */ - proto_tree_add_item(pdutree, hf_cflow_collector_addr, + ti = proto_tree_add_item(pdutree, hf_cflow_collector_addr, tvb, offset, length, FALSE); break; case 212: /* collectorIPv6Address */ - proto_tree_add_item(pdutree, hf_cflow_collector_addr_v6, + ti = proto_tree_add_item(pdutree, hf_cflow_collector_addr_v6, tvb, offset, length, FALSE); break; case 213: /* exportInterface */ if (length == 4) { - proto_tree_add_item(pdutree, hf_cflow_export_interface, + ti = proto_tree_add_item(pdutree, hf_cflow_export_interface, tvb, offset, length, FALSE); } else { - proto_tree_add_text(pdutree, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "exportInterface: invalid size %d", length ); } break; case 214: /* exportProtocolVersion */ - proto_tree_add_item(pdutree, hf_cflow_export_protocol_version, + ti = proto_tree_add_item(pdutree, hf_cflow_export_protocol_version, tvb, offset, length, FALSE); break; case 215: /* exportTransportProtocol */ - proto_tree_add_item(pdutree, hf_cflow_export_prot, + ti = proto_tree_add_item(pdutree, hf_cflow_export_prot, tvb, offset, length, FALSE); break; case 216: /* collectorTransportPort */ - proto_tree_add_item(pdutree, hf_cflow_collector_port, + ti = proto_tree_add_item(pdutree, hf_cflow_collector_port, tvb, offset, length, FALSE); break; case 217: /* exporterTransportPort */ - proto_tree_add_item(pdutree, hf_cflow_exporter_port, + ti = proto_tree_add_item(pdutree, hf_cflow_exporter_port, tvb, offset, length, FALSE); break; case 218: /* tcpSynTotalCount */ - proto_tree_add_item(pdutree, hf_cflow_total_tcp_syn, + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_syn, tvb, offset, length, FALSE); break; case 219: /* tcpFinTotalCount */ - proto_tree_add_item(pdutree, hf_cflow_total_tcp_fin, + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_fin, tvb, offset, length, FALSE); break; case 220: /* tcpRstTotalCount */ - proto_tree_add_item(pdutree, hf_cflow_total_tcp_rst, + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_rst, tvb, offset, length, FALSE); break; case 221: /* tcpPshTotalCount */ - proto_tree_add_item(pdutree, hf_cflow_total_tcp_psh, + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_psh, tvb, offset, length, FALSE); break; case 222: /* tcpAckTotalCount */ - proto_tree_add_item(pdutree, hf_cflow_total_tcp_ack, + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_ack, tvb, offset, length, FALSE); break; case 223: /* tcpUrgTotalCount */ - proto_tree_add_item(pdutree, hf_cflow_total_tcp_urg, + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_urg, tvb, offset, length, FALSE); break; case 224: /* IP_TOTAL_LENGTH */ - proto_tree_add_item(pdutree, hf_cflow_ip_total_length64, + ti = proto_tree_add_item(pdutree, hf_cflow_ip_total_length64, tvb, offset, length, FALSE); break; case 237: /* postMplsTopLabelExp */ - proto_tree_add_item(pdutree, hf_cflow_post_mpls_top_label_exp, + ti = proto_tree_add_item(pdutree, hf_cflow_post_mpls_top_label_exp, tvb, offset, length, FALSE); break; case 238: /* tcpWindowScale */ - proto_tree_add_item(pdutree, hf_cflow_tcp_window_scale, + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_window_scale, tvb, offset, length, FALSE); break; case 239: /* biflowDirection */ - proto_tree_add_item(pdutree, hf_cflow_biflow_direction, + ti = proto_tree_add_item(pdutree, hf_cflow_biflow_direction, tvb, offset, length, FALSE); break; case 240: /* ethernetHeaderLength */ - proto_tree_add_item(pdutree, hf_cflow_ethernet_header_length, + ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_header_length, tvb, offset, length, FALSE); break; case 241: /* ethernetPayloadLength */ - proto_tree_add_item(pdutree, hf_cflow_ethernet_payload_length, + ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_payload_length, tvb, offset, length, FALSE); break; case 242: /* ethernetTotalLength */ - proto_tree_add_item(pdutree, hf_cflow_ethernet_total_length, + ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_total_length, tvb, offset, length, FALSE); break; case 243: /* dot1qVlanId */ - proto_tree_add_item(pdutree, hf_cflow_dot1q_vlan_id, + ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_vlan_id, tvb, offset, length, FALSE); break; case 244: /* dot1qPriority */ - proto_tree_add_item(pdutree, hf_cflow_dot1q_priority, + ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_priority, tvb, offset, length, FALSE); break; case 245: /* dot1qCustomerVlanId */ - proto_tree_add_item(pdutree, hf_cflow_dot1q_customer_vlan_id, + ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_customer_vlan_id, tvb, offset, length, FALSE); break; case 246: /* dot1qCustomerPriority */ - proto_tree_add_item(pdutree, hf_cflow_dot1q_customer_priority, + ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_customer_priority, tvb, offset, length, FALSE); break; case 247: /* metroEvcId */ - proto_tree_add_item(pdutree, hf_cflow_metro_evc_id, + ti = proto_tree_add_item(pdutree, hf_cflow_metro_evc_id, tvb, offset, length, FALSE); break; case 248: /* metroEvcType */ - proto_tree_add_item(pdutree, hf_cflow_metro_evc_type, + ti = proto_tree_add_item(pdutree, hf_cflow_metro_evc_type, tvb, offset, length, FALSE); break; case 249: /* pseudoWireId */ - proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_id, + ti = proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_id, tvb, offset, length, FALSE); break; case 250: /* pseudoWireType */ - proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_type, + ti = proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_type, tvb, offset, length, FALSE); break; case 251: /* pseudoWireControlWord */ - proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_control_word, + ti = proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_control_word, tvb, offset, length, FALSE); break; case 252: /* ingressPhysicalInterface */ - proto_tree_add_item(pdutree, hf_cflow_ingress_physical_interface, + ti = proto_tree_add_item(pdutree, hf_cflow_ingress_physical_interface, tvb, offset, length, FALSE); break; case 253: /* egressPhysicalInterface */ - proto_tree_add_item(pdutree, hf_cflow_egress_physical_interface, + ti = proto_tree_add_item(pdutree, hf_cflow_egress_physical_interface, tvb, offset, length, FALSE); break; case 254: /* postDot1qVlanId */ - proto_tree_add_item(pdutree, hf_cflow_post_dot1q_vlan_id, + ti = proto_tree_add_item(pdutree, hf_cflow_post_dot1q_vlan_id, tvb, offset, length, FALSE); break; case 255: /* postDot1qCustomerVlanId */ - proto_tree_add_item(pdutree, hf_cflow_post_dot1q_customer_vlan_id, + ti = proto_tree_add_item(pdutree, hf_cflow_post_dot1q_customer_vlan_id, tvb, offset, length, FALSE); break; case 256: /* ethernetType */ - proto_tree_add_item(pdutree, hf_cflow_ethernet_type, + ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_type, tvb, offset, length, FALSE); break; case 257: /* postIpPrecedence */ - proto_tree_add_item(pdutree, hf_cflow_post_ip_precedence, + ti = proto_tree_add_item(pdutree, hf_cflow_post_ip_precedence, tvb, offset, length, FALSE); break; case 258: /* collectionTimeMilliseconds */ ts.secs = tvb_get_ntohl(tvb, offset); ts.nsecs = tvb_get_ntohl(tvb, offset + 4); - timeitem = proto_tree_add_time(pdutree, + ti = proto_tree_add_time(pdutree, hf_cflow_collection_time_milliseconds, tvb, offset, length, &ts); break; case 259: /* exportSctpStreamId */ - proto_tree_add_item(pdutree, hf_cflow_export_sctp_stream_id, + ti = proto_tree_add_item(pdutree, hf_cflow_export_sctp_stream_id, tvb, offset, length, FALSE); break; case 260: /* maxExportSeconds */ ts.secs = tvb_get_ntohl(tvb, offset); ts.nsecs = 0; - proto_tree_add_time(pdutree, hf_cflow_max_export_seconds, + ti = proto_tree_add_time(pdutree, hf_cflow_max_export_seconds, tvb, offset, length, &ts); break; case 261: /* maxFlowEndSeconds */ ts.secs = tvb_get_ntohl(tvb, offset); ts.nsecs = 0; - proto_tree_add_time(pdutree, hf_cflow_max_flow_end_seconds, + ti = proto_tree_add_time(pdutree, hf_cflow_max_flow_end_seconds, tvb, offset, length, &ts); break; case 262: /* messageMD5Checksum */ - proto_tree_add_item(pdutree, hf_cflow_message_md5_checksum, + ti = proto_tree_add_item(pdutree, hf_cflow_message_md5_checksum, tvb, offset, length, FALSE); break; case 263: /* messageScope */ - proto_tree_add_item(pdutree, hf_cflow_message_scope, + ti = proto_tree_add_item(pdutree, hf_cflow_message_scope, tvb, offset, length, FALSE); break; case 264: /* minExportSeconds */ ts.secs = tvb_get_ntohl(tvb, offset); ts.nsecs = 0; - proto_tree_add_time(pdutree, hf_cflow_min_export_seconds, + ti = proto_tree_add_time(pdutree, hf_cflow_min_export_seconds, tvb, offset, length, &ts); break; case 265: /* minFlowStartSeconds */ ts.secs = tvb_get_ntohl(tvb, offset); ts.nsecs = 0; - proto_tree_add_time(pdutree, hf_cflow_min_flow_start_seconds, + ti = proto_tree_add_time(pdutree, hf_cflow_min_flow_start_seconds, tvb, offset, length, &ts); break; case 266: /* opaqueOctets */ - proto_tree_add_item(pdutree, hf_cflow_opaque_octets, + ti = proto_tree_add_item(pdutree, hf_cflow_opaque_octets, tvb, offset, length, FALSE); break; case 267: /* sessionScope */ - proto_tree_add_item(pdutree, hf_cflow_session_scope, + ti = proto_tree_add_item(pdutree, hf_cflow_session_scope, tvb, offset, length, FALSE); break; case 268: /* maxFlowEndMicroseconds */ reftime = tvb_get_ptr(tvb, offset, 8); - proto_tree_add_bytes_format_value(pdutree, hf_cflow_max_flow_end_microseconds, + ti = proto_tree_add_bytes_format_value(pdutree, hf_cflow_max_flow_end_microseconds, tvb, offset, length, reftime, "%s", ntp_fmt_ts(reftime)); break; case 269: /* maxFlowEndMilliseconds */ ts.secs = tvb_get_ntohl(tvb, offset); ts.nsecs = tvb_get_ntohl(tvb, offset + 4); - proto_tree_add_time(pdutree, hf_cflow_max_flow_end_milliseconds, + ti = proto_tree_add_time(pdutree, hf_cflow_max_flow_end_milliseconds, tvb, offset, length, &ts); break; case 270: /* maxFlowEndNanoseconds */ reftime = tvb_get_ptr(tvb, offset, 8); - proto_tree_add_bytes_format_value(pdutree, hf_cflow_max_flow_end_nanoseconds, + ti = proto_tree_add_bytes_format_value(pdutree, hf_cflow_max_flow_end_nanoseconds, tvb, offset, length, reftime, "%s", ntp_fmt_ts(reftime)); break; case 271: /* minFlowStartMicroseconds */ reftime = tvb_get_ptr(tvb, offset, 8); - proto_tree_add_bytes_format_value(pdutree, hf_cflow_min_flow_start_microseconds, + ti = proto_tree_add_bytes_format_value(pdutree, hf_cflow_min_flow_start_microseconds, tvb, offset, length, reftime, "%s", ntp_fmt_ts(reftime)); break; case 272: /* minFlowStartMilliseconds */ ts.secs = tvb_get_ntohl(tvb, offset); ts.nsecs = tvb_get_ntohl(tvb, offset + 4); - proto_tree_add_time(pdutree, hf_cflow_min_flow_start_milliseconds, + ti = proto_tree_add_time(pdutree, hf_cflow_min_flow_start_milliseconds, tvb, offset, length, &ts); break; case 273: /* minFlowStartNanoseconds */ reftime = tvb_get_ptr(tvb, offset, 8); - proto_tree_add_bytes_format_value(pdutree, hf_cflow_min_flow_start_nanoseconds, + ti = proto_tree_add_bytes_format_value(pdutree, hf_cflow_min_flow_start_nanoseconds, tvb, offset, length, reftime, "%s", ntp_fmt_ts(reftime)); break; case 274: /* collectorCertificate */ - proto_tree_add_item(pdutree, hf_cflow_collector_certificate, + ti = proto_tree_add_item(pdutree, hf_cflow_collector_certificate, tvb, offset, length, FALSE); break; case 275: /* exporterCertificate */ - proto_tree_add_item(pdutree, hf_cflow_exporter_certificate, + ti = proto_tree_add_item(pdutree, hf_cflow_exporter_certificate, tvb, offset, length, FALSE); break; case 301: /* selectionSequenceId */ - proto_tree_add_item(pdutree, hf_cflow_selection_sequence_id, + ti = proto_tree_add_item(pdutree, hf_cflow_selection_sequence_id, tvb, offset, length, FALSE); break; case 302: /* selectorId */ - proto_tree_add_item(pdutree, hf_cflow_selector_id, + ti = proto_tree_add_item(pdutree, hf_cflow_selector_id, tvb, offset, length, FALSE); break; case 303: /* informationElementId */ - proto_tree_add_item(pdutree, hf_cflow_information_element_id, + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_id, tvb, offset, length, FALSE); break; case 304: /* selectorAlgorithm */ - proto_tree_add_item(pdutree, hf_cflow_selector_algorithm, + ti = proto_tree_add_item(pdutree, hf_cflow_selector_algorithm, tvb, offset, length, FALSE); break; case 305: /* samplingPacketInterval */ - proto_tree_add_item(pdutree, hf_cflow_sampling_packet_interval, + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_packet_interval, tvb, offset, length, FALSE); break; case 306: /* samplingPacketSpace */ - proto_tree_add_item(pdutree, hf_cflow_sampling_packet_space, + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_packet_space, tvb, offset, length, FALSE); break; case 307: /* samplingTimeInterval */ - proto_tree_add_item(pdutree, hf_cflow_sampling_time_interval, + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_time_interval, tvb, offset, length, FALSE); break; case 308: /* samplingTimeSpace */ - proto_tree_add_item(pdutree, hf_cflow_sampling_time_space, + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_time_space, tvb, offset, length, FALSE); break; case 309: /* samplingSize */ - proto_tree_add_item(pdutree, hf_cflow_sampling_size, + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_size, tvb, offset, length, FALSE); break; case 310: /* samplingPopulation */ - proto_tree_add_item(pdutree, hf_cflow_sampling_population, + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_population, tvb, offset, length, FALSE); break; case 311: /* samplingProbability */ - proto_tree_add_item(pdutree, hf_cflow_sampling_probability, + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_probability, tvb, offset, length, FALSE); break; case 313: /* SECTION_HEADER */ - proto_tree_add_item(pdutree, hf_cflow_section_header, + ti = proto_tree_add_item(pdutree, hf_cflow_section_header, tvb, offset, length, FALSE); break; case 314: /* SECTION_PAYLOAD */ - proto_tree_add_item(pdutree, hf_cflow_section_payload, + ti = proto_tree_add_item(pdutree, hf_cflow_section_payload, tvb, offset, length, FALSE); break; case 316: /* mplsLabelStackSection */ - proto_tree_add_item(pdutree, hf_cflow_mpls_label_stack_section, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_label_stack_section, tvb, offset, length, FALSE); break; case 317: /* mplsPayloadPacketSection */ - proto_tree_add_item(pdutree, hf_cflow_mpls_payload_packet_section, + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_payload_packet_section, tvb, offset, length, FALSE); break; case 318: /* selectorIdTotalPktsObserved */ - proto_tree_add_item(pdutree, hf_cflow_selector_id_total_pkts_observed, + ti = proto_tree_add_item(pdutree, hf_cflow_selector_id_total_pkts_observed, tvb, offset, length, FALSE); break; case 319: /* selectorIdTotalPktsSelected */ - proto_tree_add_item(pdutree, hf_cflow_selector_id_total_pkts_selected, + ti = proto_tree_add_item(pdutree, hf_cflow_selector_id_total_pkts_selected, tvb, offset, length, FALSE); break; case 320: /* absoluteError */ - proto_tree_add_item(pdutree, hf_cflow_absolute_error, + ti = proto_tree_add_item(pdutree, hf_cflow_absolute_error, tvb, offset, length, FALSE); break; case 321: /* relativeError */ - proto_tree_add_item(pdutree, hf_cflow_relative_error, + ti = proto_tree_add_item(pdutree, hf_cflow_relative_error, tvb, offset, length, FALSE); break; case 322: /* observationTimeSeconds */ ts.secs = tvb_get_ntohl(tvb, offset); ts.nsecs = 0; - proto_tree_add_time(pdutree, hf_cflow_observation_time_seconds, + ti = proto_tree_add_time(pdutree, hf_cflow_observation_time_seconds, tvb, offset, length, &ts); break; case 323: /* observationTimeMilliseconds */ ts.secs = tvb_get_ntohl(tvb, offset); ts.nsecs = tvb_get_ntohl(tvb, offset + 4); - proto_tree_add_time(pdutree, hf_cflow_observation_time_milliseconds, + ti = proto_tree_add_time(pdutree, hf_cflow_observation_time_milliseconds, tvb, offset, length, &ts); break; case 324: /* observationTimeMicroseconds */ reftime = tvb_get_ptr(tvb, offset, 8); - proto_tree_add_bytes_format_value(pdutree, hf_cflow_observation_time_microseconds, + ti = proto_tree_add_bytes_format_value(pdutree, hf_cflow_observation_time_microseconds, tvb, offset, length, reftime, "%s", ntp_fmt_ts(reftime)); break; case 325: /* observationTimeNanoseconds */ reftime = tvb_get_ptr(tvb, offset, 8); - proto_tree_add_bytes_format_value(pdutree, hf_cflow_observation_time_nanoseconds, + ti = proto_tree_add_bytes_format_value(pdutree, hf_cflow_observation_time_nanoseconds, tvb, offset, length, reftime, "%s", ntp_fmt_ts(reftime)); break; case 326: /* digestHashValue */ - proto_tree_add_item(pdutree, hf_cflow_digest_hash_value, + ti = proto_tree_add_item(pdutree, hf_cflow_digest_hash_value, tvb, offset, length, FALSE); break; case 327: /* hashIPPayloadOffset */ - proto_tree_add_item(pdutree, hf_cflow_hash_ippayload_offset, + ti = proto_tree_add_item(pdutree, hf_cflow_hash_ippayload_offset, tvb, offset, length, FALSE); break; case 328: /* hashIPPayloadSize */ - proto_tree_add_item(pdutree, hf_cflow_hash_ippayload_size, + ti = proto_tree_add_item(pdutree, hf_cflow_hash_ippayload_size, tvb, offset, length, FALSE); break; case 329: /* hashOutputRangeMin */ - proto_tree_add_item(pdutree, hf_cflow_hash_output_range_min, + ti = proto_tree_add_item(pdutree, hf_cflow_hash_output_range_min, tvb, offset, length, FALSE); break; case 330: /* hashOutputRangeMax */ - proto_tree_add_item(pdutree, hf_cflow_hash_output_range_max, + ti = proto_tree_add_item(pdutree, hf_cflow_hash_output_range_max, tvb, offset, length, FALSE); break; case 331: /* hashSelectedRangeMin */ - proto_tree_add_item(pdutree, hf_cflow_hash_selected_range_min, + ti = proto_tree_add_item(pdutree, hf_cflow_hash_selected_range_min, tvb, offset, length, FALSE); break; case 332: /* hashSelectedRangeMax */ - proto_tree_add_item(pdutree, hf_cflow_hash_selected_range_max, + ti = proto_tree_add_item(pdutree, hf_cflow_hash_selected_range_max, tvb, offset, length, FALSE); break; case 333: /* hashDigestOutput */ - proto_tree_add_item(pdutree, hf_cflow_hash_digest_output, + ti = proto_tree_add_item(pdutree, hf_cflow_hash_digest_output, tvb, offset, length, FALSE); break; case 334: /* hashInitialiserValue */ - proto_tree_add_item(pdutree, hf_cflow_hash_initialiser_value, + ti = proto_tree_add_item(pdutree, hf_cflow_hash_initialiser_value, tvb, offset, length, FALSE); break; case 335: /* selectorName */ - proto_tree_add_item(pdutree, hf_cflow_selector_name, + ti = proto_tree_add_item(pdutree, hf_cflow_selector_name, tvb, offset, length, FALSE); break; case 336: /* upperCILimit */ - proto_tree_add_item(pdutree, hf_cflow_upper_cilimit, + ti = proto_tree_add_item(pdutree, hf_cflow_upper_cilimit, tvb, offset, length, FALSE); break; case 337: /* lowerCILimit */ - proto_tree_add_item(pdutree, hf_cflow_lower_cilimit, + ti = proto_tree_add_item(pdutree, hf_cflow_lower_cilimit, tvb, offset, length, FALSE); break; case 338: /* confidenceLevel */ - proto_tree_add_item(pdutree, hf_cflow_confidence_level, + ti = proto_tree_add_item(pdutree, hf_cflow_confidence_level, tvb, offset, length, FALSE); break; case 339: /* informationElementDataType */ - proto_tree_add_item(pdutree, hf_cflow_information_element_data_type, + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_data_type, tvb, offset, length, FALSE); break; case 340: /* informationElementDescription */ - proto_tree_add_item(pdutree, hf_cflow_information_element_description, + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_description, tvb, offset, length, FALSE); break; case 341: /* informationElementName */ - proto_tree_add_item(pdutree, hf_cflow_information_element_name, + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_name, tvb, offset, length, FALSE); break; case 342: /* informationElementRangeBegin */ - proto_tree_add_item(pdutree, hf_cflow_information_element_range_begin, + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_range_begin, tvb, offset, length, FALSE); break; case 343: /* informationElementRangeEnd */ - proto_tree_add_item(pdutree, hf_cflow_information_element_range_end, + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_range_end, tvb, offset, length, FALSE); break; case 344: /* informationElementSemantics */ - proto_tree_add_item(pdutree, hf_cflow_information_element_semantics, + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_semantics, tvb, offset, length, FALSE); break; case 345: /* informationElementUnits */ - proto_tree_add_item(pdutree, hf_cflow_information_element_units, + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_units, tvb, offset, length, FALSE); break; case 346: /* privateEnterpriseNumber */ - proto_tree_add_item(pdutree, hf_cflow_private_enterprise_number, + ti = proto_tree_add_item(pdutree, hf_cflow_private_enterprise_number, tvb, offset, length, FALSE); break; /* CACE Technologies */ case VENDOR_CACE << 16 | 0: /* caceLocalIPv4Address */ - proto_tree_add_item(pdutree, hf_pie_cace_local_ipv4_address, + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_ipv4_address, tvb, offset, length, FALSE); SET_ADDRESS(&local_addr, AT_IPv4, 4, tvb_get_ptr(tvb, offset, 4)); got_flags |= GOT_LOCAL_ADDR; break; case VENDOR_CACE << 16 | 1: /* caceRemoteIPv4Address */ - proto_tree_add_item(pdutree, hf_pie_cace_remote_ipv4_address, + ti = proto_tree_add_item(pdutree, hf_pie_cace_remote_ipv4_address, tvb, offset, length, FALSE); SET_ADDRESS(&remote_addr, AT_IPv4, 4, tvb_get_ptr(tvb, offset, 4)); got_flags |= GOT_REMOTE_ADDR; break; case VENDOR_CACE << 16 | 2: /* caceLocalIPv6Address */ - proto_tree_add_item(pdutree, hf_pie_cace_local_ipv6_address, + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_ipv6_address, tvb, offset, length, FALSE); SET_ADDRESS(&local_addr, AT_IPv6, 16, tvb_get_ptr(tvb, offset, 16)); got_flags |= GOT_LOCAL_ADDR; break; case VENDOR_CACE << 16 | 3: /* caceRemoteIPv6Address */ - proto_tree_add_item(pdutree, hf_pie_cace_remote_ipv6_address, + ti = proto_tree_add_item(pdutree, hf_pie_cace_remote_ipv6_address, tvb, offset, length, FALSE); SET_ADDRESS(&remote_addr, AT_IPv6, 16, tvb_get_ptr(tvb, offset, 16)); got_flags |= GOT_REMOTE_ADDR; break; case VENDOR_CACE << 16 | 4: /* caceLocalTransportPort */ - proto_tree_add_item(pdutree, hf_pie_cace_local_port, + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_port, tvb, offset, length, FALSE); local_port = tvb_get_ntohs(tvb, offset); got_flags |= GOT_LOCAL_PORT; break; case VENDOR_CACE << 16 | 5: /* caceRemoteTransportPort */ - proto_tree_add_item(pdutree, hf_pie_cace_remote_port, + ti = proto_tree_add_item(pdutree, hf_pie_cace_remote_port, tvb, offset, length, FALSE); remote_port = tvb_get_ntohs(tvb, offset); got_flags |= GOT_REMOTE_PORT; break; case VENDOR_CACE << 16 | 6: /* caceLocalIPv4id */ - proto_tree_add_item(pdutree, hf_pie_cace_local_ipv4_id, + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_ipv4_id, tvb, offset, length, FALSE); ipv4_id = tvb_get_ntohs(tvb, offset); got_flags |= GOT_IPv4_ID; break; case VENDOR_CACE << 16 | 7: /* caceLocalICMPid */ - proto_tree_add_item(pdutree, hf_pie_cace_local_icmp_id, + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_icmp_id, tvb, offset, length, FALSE); icmp_id = tvb_get_ntohs(tvb, offset); got_flags |= GOT_ICMP_ID; break; case VENDOR_CACE << 16 | 8: /* caceLocalProcessUserId */ - proto_tree_add_item(pdutree, hf_pie_cace_local_uid, + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_uid, tvb, offset, length, FALSE); uid = tvb_get_ntohl(tvb, offset); got_flags |= GOT_UID; break; case VENDOR_CACE << 16 | 9: /* caceLocalProcessId */ - proto_tree_add_item(pdutree, hf_pie_cace_local_pid, + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_pid, tvb, offset, length, FALSE); pid = tvb_get_ntohl(tvb, offset); got_flags |= GOT_PID; @@ -3171,7 +3173,7 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of uname_str = tvb_format_text(tvb, offset+1, uname_len); proto_tree_add_item(pdutree, hf_pie_cace_local_username_len, tvb, offset, 1, FALSE); - proto_tree_add_string(pdutree, hf_pie_cace_local_username, + ti = proto_tree_add_string(pdutree, hf_pie_cace_local_username, tvb, offset+1, uname_len, uname_str); length = uname_len + 1; got_flags |= GOT_USERNAME; @@ -3182,7 +3184,7 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of cmd_str = tvb_format_text(tvb, offset+1, cmd_len); proto_tree_add_item(pdutree, hf_pie_cace_local_cmd_len, tvb, offset, 1, FALSE); - proto_tree_add_string(pdutree, hf_pie_cace_local_cmd, + ti = proto_tree_add_string(pdutree, hf_pie_cace_local_cmd, tvb, offset+1, cmd_len, cmd_str); length = cmd_len + 1; got_flags |= GOT_COMMAND; @@ -3190,16 +3192,15 @@ dissect_v9_pdu(tvbuff_t * tvb, packet_info * pinfo, proto_tree * pdutree, int of default: if ((type & 0x8000) && (pen != REVPEN)) - proto_tree_add_text(pdutree, tvb, offset, length, + ti = proto_tree_add_text(pdutree, tvb, offset, length, "(%s) Type %u ", match_strval(pen, sminmpec_values), type & 0x7fff); - - else - proto_tree_add_text(pdutree, tvb, offset, length, - "%s Type %u %s", pen == REVPEN ? "Reverse" : "", - type & 0x7fff, decode_v9_template_types(type)); break; } + if (ti && pen == REVPEN) { + proto_item_append_text(ti, " (Reverse Type %u %s)", + type & 0x7fff, decode_v9_template_types(type)); + } offset += length; } @@ -3393,7 +3394,7 @@ dissect_v9_options_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutr } static int -dissect_v9_template(proto_tree * pdutree, tvbuff_t * tvb, packet_info *pinfo, int offset, int length, hdrinfo_t * hdrinfo) +dissect_v9_template(proto_tree * pdutree, tvbuff_t * tvb, packet_info *pinfo, int offset, int length, hdrinfo_t * hdrinfo, guint16 flowset_id) { struct v9_template tplt; proto_tree *tplt_tree; @@ -3453,7 +3454,7 @@ dissect_v9_template(proto_tree * pdutree, tvbuff_t * tvb, packet_info *pinfo, in type = tvb_get_ntohs(tvb, offset); entry_length = tvb_get_ntohs(tvb, offset + 2); - if (type & 0x8000) { + if ((flowset_id == 2) && (type & 0x8000)) { pen = tvb_get_ntohl(tvb, offset + 4); } @@ -3464,21 +3465,23 @@ dissect_v9_template(proto_tree * pdutree, tvbuff_t * tvb, packet_info *pinfo, in tplt.entries[i].pen = pen; } - if ((type & 0x8000) && (pen != REVPEN)) { /* except reverse pen */ + if ((flowset_id == 2) && (type & 0x8000) && (pen != REVPEN)) { /* except reverse pen */ proto_tree_add_text(field_tree, tvb, offset, 2, "Type: %u", type & 0x7fff); } else { proto_tree_add_item(field_tree, - hf_cflow_template_field_type, tvb, offset, 2, FALSE); + flowset_id == 0 ? hf_cflow_template_field_type : hf_cflow_template_field_type_ipfix, + tvb, offset, 2, FALSE); } offset += 2; proto_tree_add_item(field_tree, hf_cflow_template_field_length, tvb, offset, 2, FALSE); offset += 2; - if (type & 0x8000) { /* Private Enterprise Number (IPFIX only) */ - proto_tree_add_item(field_tree, + /* Private Enterprise Number (IPFIX only) */ + if ((flowset_id == 2) && (type & 0x8000)) { + proto_tree_add_item(field_tree, hf_cflow_template_field_pen, tvb, offset, 4, FALSE); offset += 4; } @@ -4203,7 +4206,7 @@ proto_register_netflow(void) }, {&hf_cflow_sampling_algorithm, {"Sampling algorithm", "cflow.sampling_algorithm", - FT_UINT8, BASE_DEC, NULL, 0x0, + FT_UINT8, BASE_DEC, VALS(v5_sampling_mode), 0x0, NULL, HFILL} }, {&hf_cflow_flow_active_timeout, |