diff options
author | Bill Meier <wmeier@newsguy.com> | 2011-11-24 03:20:44 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2011-11-24 03:20:44 +0000 |
commit | 6d9e776d34577ba27696c3c64fe714ccce3f4809 (patch) | |
tree | 64d012a6b6cec066565dd2ca5081aea580c8ac42 /epan/dissectors/packet-netflow.c | |
parent | 1f513638e05e45f38b4854230b1002533bc72e00 (diff) |
Use a GHashTable to store templates instead of
using a home-grown hash table (which didn't handle collisions);
Include complete "connection info" (srcAddr,srcPort,dstAddr,dstPort) in "Template Name";
Rename various variables;
Re-indent & Re-format code.
svn path=/trunk/; revision=39995
Diffstat (limited to 'epan/dissectors/packet-netflow.c')
-rw-r--r-- | epan/dissectors/packet-netflow.c | 15119 |
1 files changed, 7518 insertions, 7601 deletions
diff --git a/epan/dissectors/packet-netflow.c b/epan/dissectors/packet-netflow.c index d2419201af..0bc323a984 100644 --- a/epan/dissectors/packet-netflow.c +++ b/epan/dissectors/packet-netflow.c @@ -77,16 +77,14 @@ */ /* - * September 2010: WMeier: Extensive v9/v10 code cleanup, bug fixing and field display improvements. - * - * ToDo: [09/16/2010: WMeier] + * ToDo: [11/23/2011: WMeier] * * 1. (See the various XXX comments) * 2. Template processing: - * a. source port needs to be part of the template identifier ? - * b. Use GHashTable instead of home-grown hash so no collisions; - * c. (Verify that template with same ID is actually identical to that previously seen ?) - * d. Review use of lengths from template when dissecting fields in a data flow: not really OK ? + * a. Verify that template with same src_addr, ... ,ID is actually identical to that previously seen ? + * Handle changes ? Don't use template to dissect data packets previous to the packet with the templates. + * Essentially; need to keep the packet number containing the first copy of the template. + * b. Review use of lengths from template when dissecting fields in a data flow: not really OK ? * The proto_tree_add_item() calls in dissect_v9_v10_pdu_data() use: * - "lengths" as specified in the previously seen template for the flow; * - a hardwired Wireshark "field-type" (FT_UINT8, etc) in the hf[]array entries. @@ -165,14 +163,14 @@ static dissector_handle_t netflow_handle; using v9 you need to stake a claim in the wilds with the high bit set. Still no naming authority, but at least it will never collide with valid IPFIX */ -#define NTOP_BASE 57472u /* nprobe >= 5.5.6 */ +#define NTOP_BASE 57472u /* nprobe >= 5.5.6 */ /* - * global_netflow_ports : holds the configured range of ports for netflow + * global_netflow_ports : holds the configured range of ports for netflow */ static range_t *global_netflow_ports = NULL; /* - * global_ipfix_ports : holds the configured range of ports for IPFIX + * global_ipfix_ports : holds the configured range of ports for IPFIX */ static range_t *global_ipfix_ports = NULL; @@ -189,14 +187,14 @@ static range_t *global_ipfix_ports = NULL; #define FLOWSET_ID_DATA_MAX 65535 static const range_string rs_flowset_ids[] = { - { FLOWSET_ID_V9_DATA_TEMPLATE , FLOWSET_ID_V9_DATA_TEMPLATE , "Data Template (V9)" }, - { FLOWSET_ID_V9_OPTIONS_TEMPLATE , FLOWSET_ID_V9_OPTIONS_TEMPLATE , "Options Template(V9)" }, - { FLOWSET_ID_V10_DATA_TEMPLATE , FLOWSET_ID_V10_DATA_TEMPLATE , "Data Template (V10 [IPFIX])" }, - { FLOWSET_ID_V10_OPTIONS_TEMPLATE, FLOWSET_ID_V10_OPTIONS_TEMPLATE, "Options Template (V10 [IPFIX])" }, - { FLOWSET_ID_RESERVED_MIN , FLOWSET_ID_RESERVED_MAX , "(Reserved)" }, - { FLOWSET_ID_DATA_MIN , FLOWSET_ID_DATA_MAX , "(Data)" }, - { 0, 0, NULL } - }; + { FLOWSET_ID_V9_DATA_TEMPLATE , FLOWSET_ID_V9_DATA_TEMPLATE , "Data Template (V9)" }, + { FLOWSET_ID_V9_OPTIONS_TEMPLATE , FLOWSET_ID_V9_OPTIONS_TEMPLATE , "Options Template(V9)" }, + { FLOWSET_ID_V10_DATA_TEMPLATE , FLOWSET_ID_V10_DATA_TEMPLATE , "Data Template (V10 [IPFIX])" }, + { FLOWSET_ID_V10_OPTIONS_TEMPLATE, FLOWSET_ID_V10_OPTIONS_TEMPLATE, "Options Template (V10 [IPFIX])" }, + { FLOWSET_ID_RESERVED_MIN , FLOWSET_ID_RESERVED_MAX , "(Reserved)" }, + { FLOWSET_ID_DATA_MIN , FLOWSET_ID_DATA_MAX , "(Data)" }, + { 0, 0, NULL } +}; /* * pdu identifiers & sizes @@ -223,614 +221,612 @@ static const range_string rs_flowset_ids[] = { #define VARIABLE_LENGTH 65535 static const value_string v5_sampling_mode[] = { - {0, "No sampling mode configured"}, - {1, "Packet Interval sampling mode configured"}, - {2, "Random sampling mode configured"}, - {0, NULL} + {0, "No sampling mode configured"}, + {1, "Packet Interval sampling mode configured"}, + {2, "Random sampling mode configured"}, + {0, NULL} }; enum { - V8PDU_NO_METHOD = 0, - V8PDU_AS_METHOD, - V8PDU_PROTO_METHOD, - V8PDU_SPREFIX_METHOD, - V8PDU_DPREFIX_METHOD, - V8PDU_MATRIX_METHOD, - V8PDU_DESTONLY_METHOD, - V8PDU_SRCDEST_METHOD, - V8PDU_FULL_METHOD, - V8PDU_TOSAS_METHOD, - V8PDU_TOSPROTOPORT_METHOD, - V8PDU_TOSSRCPREFIX_METHOD, - V8PDU_TOSDSTPREFIX_METHOD, - V8PDU_TOSMATRIX_METHOD, - V8PDU_PREPORTPROTOCOL_METHOD + V8PDU_NO_METHOD = 0, + V8PDU_AS_METHOD, + V8PDU_PROTO_METHOD, + V8PDU_SPREFIX_METHOD, + V8PDU_DPREFIX_METHOD, + V8PDU_MATRIX_METHOD, + V8PDU_DESTONLY_METHOD, + V8PDU_SRCDEST_METHOD, + V8PDU_FULL_METHOD, + V8PDU_TOSAS_METHOD, + V8PDU_TOSPROTOPORT_METHOD, + V8PDU_TOSSRCPREFIX_METHOD, + V8PDU_TOSDSTPREFIX_METHOD, + V8PDU_TOSMATRIX_METHOD, + V8PDU_PREPORTPROTOCOL_METHOD }; static const value_string v8_agg[] = { - {V8PDU_AS_METHOD, "V8 AS aggregation"}, - {V8PDU_PROTO_METHOD, "V8 Proto/Port aggregation"}, - {V8PDU_SPREFIX_METHOD, "V8 Source Prefix aggregation"}, - {V8PDU_DPREFIX_METHOD, "V8 Destination Prefix aggregation"}, - {V8PDU_MATRIX_METHOD, "V8 Network Matrix aggregation"}, - {V8PDU_DESTONLY_METHOD, "V8 Destination aggregation (Cisco Catalyst)"}, - {V8PDU_SRCDEST_METHOD, "V8 Src/Dest aggregation (Cisco Catalyst)"}, - {V8PDU_FULL_METHOD, "V8 Full aggregation (Cisco Catalyst)"}, - {V8PDU_TOSAS_METHOD, "V8 TOS+AS aggregation"}, - {V8PDU_TOSPROTOPORT_METHOD, "V8 TOS+Protocol aggregation"}, - {V8PDU_TOSSRCPREFIX_METHOD, "V8 TOS+Source Prefix aggregation"}, - {V8PDU_TOSDSTPREFIX_METHOD, "V8 TOS+Destination Prefix aggregation"}, - {V8PDU_TOSMATRIX_METHOD, "V8 TOS+Prefix Matrix aggregation"}, - {V8PDU_PREPORTPROTOCOL_METHOD, "V8 Port+Protocol aggregation"}, - {0, NULL} + {V8PDU_AS_METHOD, "V8 AS aggregation"}, + {V8PDU_PROTO_METHOD, "V8 Proto/Port aggregation"}, + {V8PDU_SPREFIX_METHOD, "V8 Source Prefix aggregation"}, + {V8PDU_DPREFIX_METHOD, "V8 Destination Prefix aggregation"}, + {V8PDU_MATRIX_METHOD, "V8 Network Matrix aggregation"}, + {V8PDU_DESTONLY_METHOD, "V8 Destination aggregation (Cisco Catalyst)"}, + {V8PDU_SRCDEST_METHOD, "V8 Src/Dest aggregation (Cisco Catalyst)"}, + {V8PDU_FULL_METHOD, "V8 Full aggregation (Cisco Catalyst)"}, + {V8PDU_TOSAS_METHOD, "V8 TOS+AS aggregation"}, + {V8PDU_TOSPROTOPORT_METHOD, "V8 TOS+Protocol aggregation"}, + {V8PDU_TOSSRCPREFIX_METHOD, "V8 TOS+Source Prefix aggregation"}, + {V8PDU_TOSDSTPREFIX_METHOD, "V8 TOS+Destination Prefix aggregation"}, + {V8PDU_TOSMATRIX_METHOD, "V8 TOS+Prefix Matrix aggregation"}, + {V8PDU_PREPORTPROTOCOL_METHOD, "V8 Port+Protocol aggregation"}, + {0, NULL} }; static value_string_ext v8_agg_ext = VALUE_STRING_EXT_INIT(v8_agg); -/* Version 9 template cache structures */ -/* This was 100, but this gives a horrible hash distribution. */ -/* I've also increased this to reduce the chance of collisions until I - have a chance to add chaining (or something) to the template cache - hash */ -#define V9_V10_TEMPLATE_CACHE_MAX_ENTRIES 521 /* Max number of entries/scopes per template */ /* Space is allocated dynamically so there isn't really a need to bound this except to cap possible memory use. Unfortunately if this value is too low we can't decode any template with more than - v9template_max_fields fields in it. The best compromise seems - to be to make v9template_max_fields a user preference. + v9_tmplt_max_fields fields in it. The best compromise seems + to be to make v9_tmplt_max_fields a user preference. A value of 0 will be unlimited. */ -#define V9TEMPLATE_MAX_FIELDS_DEF 60 -static guint v9template_max_fields = V9TEMPLATE_MAX_FIELDS_DEF; - -struct v9_v10_template_entry { - guint16 type; - guint16 length; - guint32 pen; - const gchar *pen_str; -}; +#define V9_TMPLT_MAX_FIELDS_DEF 60 +static guint v9_tmplt_max_fields = V9_TMPLT_MAX_FIELDS_DEF; + +typedef struct _v9_v10_tmplt_entry { + guint16 type; + guint16 length; + guint32 pen; + const gchar *pen_str; +} v9_v10_tmplt_entry_t; typedef enum { - TF_SCOPES=0, - TF_ENTRIES, - /* START IPFIX VENDOR FIELDS */ - TF_PLIXER, - TF_NTOP, - TF_NO_VENDOR_INFO -} v9_v10_template_fields_type_t; + TF_SCOPES=0, + TF_ENTRIES, + /* START IPFIX VENDOR FIELDS */ + TF_PLIXER, + TF_NTOP, + TF_NO_VENDOR_INFO +} v9_v10_tmplt_fields_type_t; #define TF_NUM 2 -#define TF_NUM_EXT 5 /* includes vendor fields */ - -struct v9_v10_template { - guint length; - guint16 id; - address source_addr; - guint32 source_id; - gboolean template_exists; /* TRUE: template exists */ - guint16 field_count[TF_NUM]; /* 0:scopes; 1:entries */ - struct v9_v10_template_entry *fields[TF_NUM_EXT]; /* 0:scopes; 1:entries; n:vendor_entries */ -}; +#define TF_NUM_EXT 5 /* includes vendor fields */ + +typedef struct _v9_v10_tmplt { + address src_addr; + guint32 src_port; + address dst_addr; + guint32 dst_port; + guint32 src_id; + guint16 tmplt_id; + guint length; + guint16 field_count[TF_NUM]; /* 0:scopes; 1:entries */ + v9_v10_tmplt_entry_t *fields_p[TF_NUM_EXT]; /* 0:scopes; 1:entries; n:vendor_entries */ +} v9_v10_tmplt_t; + + +GHashTable *v9_v10_tmplt_table = NULL; -static struct v9_v10_template v9_v10_template_cache[V9_V10_TEMPLATE_CACHE_MAX_ENTRIES]; static const value_string v9_v10_template_types[] = { - { 1, "BYTES" }, - { 2, "PKTS" }, - { 3, "FLOWS" }, - { 4, "PROTOCOL" }, - { 5, "IP_TOS" }, - { 6, "TCP_FLAGS" }, - { 7, "L4_SRC_PORT" }, - { 8, "IP_SRC_ADDR" }, - { 9, "SRC_MASK" }, - { 10, "INPUT_SNMP" }, - { 11, "L4_DST_PORT" }, - { 12, "IP_DST_ADDR" }, - { 13, "DST_MASK" }, - { 14, "OUTPUT_SNMP" }, - { 15, "IP_NEXT_HOP" }, - { 16, "SRC_AS" }, - { 17, "DST_AS" }, - { 18, "BGP_NEXT_HOP" }, - { 19, "MUL_DPKTS" }, - { 20, "MUL_DOCTETS" }, - { 21, "LAST_SWITCHED" }, - { 22, "FIRST_SWITCHED" }, - { 23, "OUT_BYTES" }, - { 24, "OUT_PKTS" }, - { 25, "IP LENGTH MINIMUM" }, - { 26, "IP LENGTH MAXIMUM" }, - { 27, "IPV6_SRC_ADDR" }, - { 28, "IPV6_DST_ADDR" }, - { 29, "IPV6_SRC_MASK" }, - { 30, "IPV6_DST_MASK" }, - { 31, "FLOW_LABEL" }, - { 32, "ICMP_TYPE" }, - { 33, "IGMP_TYPE" }, - { 34, "SAMPLING_INTERVAL" }, - { 35, "SAMPLING_ALGORITHM" }, - { 36, "FLOW_ACTIVE_TIMEOUT" }, - { 37, "FLOW_INACTIVE_TIMEOUT" }, - { 38, "ENGINE_TYPE" }, - { 39, "ENGINE_ID" }, - { 40, "TOTAL_BYTES_EXP" }, - { 41, "TOTAL_PKTS_EXP" }, - { 42, "TOTAL_FLOWS_EXP" }, - { 44, "IP_SRC_PREFIX" }, - { 45, "IP_DST_PREFIX" }, - { 46, "MPLS_TOP_LABEL_TYPE" }, - { 47, "MPLS_TOP_LABEL_ADDR" }, - { 48, "FLOW_SAMPLER_ID" }, - { 49, "FLOW_SAMPLER_MODE" }, - { 50, "FLOW_SAMPLER_RANDOM_INTERVAL" }, - { 51, "FLOW_CLASS" }, - { 52, "IP TTL MINIMUM" }, - { 53, "IP TTL MAXIMUM" }, - { 54, "IPv4 ID" }, - { 55, "DST_TOS" }, - { 56, "SRC_MAC" }, - { 57, "DST_MAC" }, - { 58, "SRC_VLAN" }, - { 59, "DST_VLAN" }, - { 60, "IP_PROTOCOL_VERSION" }, - { 61, "DIRECTION" }, - { 62, "IPV6_NEXT_HOP" }, - { 63, "BGP_IPV6_NEXT_HOP" }, - { 64, "IPV6_OPTION_HEADERS" }, - { 70, "MPLS_LABEL_1" }, - { 71, "MPLS_LABEL_2" }, - { 72, "MPLS_LABEL_3" }, - { 73, "MPLS_LABEL_4" }, - { 74, "MPLS_LABEL_5" }, - { 75, "MPLS_LABEL_6" }, - { 76, "MPLS_LABEL_7" }, - { 77, "MPLS_LABEL_8" }, - { 78, "MPLS_LABEL_9" }, - { 79, "MPLS_LABEL_10" }, - { 80, "DESTINATION_MAC" }, - { 81, "SOURCE_MAC" }, - { 82, "IF_NAME" }, - { 83, "IF_DESC" }, - { 84, "SAMPLER_NAME" }, - { 85, "BYTES_TOTAL" }, - { 86, "PACKETS_TOTAL" }, - { 88, "FRAGMENT_OFFSET" }, - { 89, "FORWARDING_STATUS" }, - { 90, "VPN_ROUTE_DISTINGUISHER" }, - { 91, "mplsTopLabelPrefixLength" }, - { 92, "SRC_TRAFFIC_INDEX" }, - { 93, "DST_TRAFFIC_INDEX" }, - { 94, "APPLICATION_DESC" }, - { 95, "APPLICATION_ID" }, - { 96, "APPLICATION_NAME" }, - { 98, "postIpDiffServCodePoint" }, - { 99, "multicastReplicationFactor" }, - { 128, "DST_AS_PEER" }, - { 129, "SRC_AS_PEER" }, - { 130, "exporterIPv4Address" }, - { 131, "exporterIPv6Address" }, - { 132, "DROPPED_BYTES" }, - { 133, "DROPPED_PACKETS" }, - { 134, "DROPPED_BYTES_TOTAL" }, - { 135, "DROPPED_PACKETS_TOTAL" }, - { 136, "flowEndReason" }, - { 137, "commonPropertiesId" }, - { 138, "observationPointId" }, - { 139, "icmpTypeCodeIPv6" }, - { 140, "MPLS_TOP_LABEL_IPv6_ADDRESS" }, - { 141, "lineCardId" }, - { 142, "portId" }, - { 143, "meteringProcessId" }, - { 144, "FLOW_EXPORTER" }, - { 145, "templateId" }, - { 146, "wlanChannelId" }, - { 147, "wlanSSID" }, - { 148, "flowId" }, - { 149, "observationDomainId" }, - { 150, "flowStartSeconds" }, - { 151, "flowEndSeconds" }, - { 152, "flowStartMilliseconds" }, - { 153, "flowEndMilliseconds" }, - { 154, "flowStartMicroseconds" }, - { 155, "flowEndMicroseconds" }, - { 156, "flowStartNanoseconds" }, - { 157, "flowEndNanoseconds" }, - { 158, "flowStartDeltaMicroseconds" }, - { 159, "flowEndDeltaMicroseconds" }, - { 160, "systemInitTimeMilliseconds" }, - { 161, "flowDurationMilliseconds" }, - { 162, "flowDurationMicroseconds" }, - { 163, "observedFlowTotalCount" }, - { 164, "ignoredPacketTotalCount" }, - { 165, "ignoredOctetTotalCount" }, - { 166, "notSentFlowTotalCount" }, - { 167, "notSentPacketTotalCount" }, - { 168, "notSentOctetTotalCount" }, - { 169, "destinationIPv6Prefix" }, - { 170, "sourceIPv6Prefix" }, - { 171, "postOctetTotalCount" }, - { 172, "postPacketTotalCount" }, - { 173, "flowKeyIndicator" }, - { 174, "postMCastPacketTotalCount" }, - { 175, "postMCastOctetTotalCount" }, - { 176, "ICMP_IPv4_TYPE" }, - { 177, "ICMP_IPv4_CODE" }, - { 178, "ICMP_IPv6_TYPE" }, - { 179, "ICMP_IPv6_CODE" }, - { 180, "UDP_SRC_PORT" }, - { 181, "UDP_DST_PORT" }, - { 182, "TCP_SRC_PORT" }, - { 183, "TCP_DST_PORT" }, - { 184, "TCP_SEQ_NUM" }, - { 185, "TCP_ACK_NUM" }, - { 186, "TCP_WINDOW_SIZE" }, - { 187, "TCP_URGENT_PTR" }, - { 188, "TCP_HEADER_LEN" }, - { 189, "IP_HEADER_LEN" }, - { 190, "IP_TOTAL_LEN" }, - { 191, "payloadLengthIPv6" }, - { 192, "IP_TTL" }, - { 193, "nextHeaderIPv6" }, - { 194, "IP_TOS" }, - { 195, "IP_DSCP" }, - { 196, "IP_PRECEDENCE" }, - { 197, "IP_FRAGMENT_FLAGS" }, - { 198, "BYTES_SQUARED" }, - { 199, "BYTES_SQUARED_PERMANENT" }, - { 200, "MPLS_TOP_LABEL_TTL" }, - { 201, "MPLS_LABEL_STACK_OCTETS" }, - { 202, "MPLS_LABEL_STACK_DEPTH" }, - { 203, "MPLS_TOP_LABEL_EXP" }, - { 204, "IP_PAYLOAD_LENGTH" }, - { 205, "UDP_LENGTH" }, - { 206, "IS_MULTICAST" }, - { 207, "IP_HEADER_WORDS" }, - { 208, "IP_OPTION_MAP" }, - { 209, "TCP_OPTION_MAP" }, - { 210, "paddingOctets" }, - { 211, "collectorIPv4Address" }, - { 212, "collectorIPv6Address" }, - { 213, "collectorInterface" }, - { 214, "collectorProtocolVersion" }, - { 215, "collectorTransportProtocol" }, - { 216, "collectorTransportPort" }, - { 217, "exporterTransportPort" }, - { 218, "tcpSynTotalCount" }, - { 219, "tcpFinTotalCount" }, - { 220, "tcpRstTotalCount" }, - { 221, "tcpPshTotalCount" }, - { 222, "tcpAckTotalCount" }, - { 223, "tcpUrgTotalCount" }, - { 224, "ipTotalLength" }, - { 225, "postNATSourceIPv4Address" }, - { 226, "postNATDestinationIPv4Address" }, - { 227, "postNAPTSourceTransportPort" }, - { 228, "postNAPTDestinationTransportPort" }, - { 229, "natOriginatingAddressRealm" }, - { 230, "natEvent" }, - { 231, "initiatorOctets" }, - { 232, "responderOctets" }, - { 233, "firewallEvent" }, - { 234, "ingressVRFID" }, - { 235, "egressVRFID" }, - { 236, "VRFname" }, - { 237, "postMplsTopLabelExp" }, - { 238, "tcpWindowScale" }, - { 239, "biflowDirection" }, - { 240, "ethernetHeaderLength" }, - { 241, "ethernetPayloadLength" }, - { 242, "ethernetTotalLength" }, - { 243, "dot1qVlanId" }, - { 244, "dot1qPriority" }, - { 245, "dot1qCustomerVlanId" }, - { 246, "dot1qCustomerPriority" }, - { 247, "metroEvcId" }, - { 248, "metroEvcType" }, - { 249, "pseudoWireId" }, - { 250, "pseudoWireType" }, - { 251, "pseudoWireControlWord" }, - { 252, "ingressPhysicalInterface" }, - { 253, "egressPhysicalInterface" }, - { 254, "postDot1qVlanId" }, - { 255, "postDot1qCustomerVlanId" }, - { 256, "ethernetType" }, - { 257, "postIpPrecedence" }, - { 258, "collectionTimeMilliseconds" }, - { 259, "exportSctpStreamId" }, - { 260, "maxExportSeconds" }, - { 261, "maxFlowEndSeconds" }, - { 262, "messageMD5Checksum" }, - { 263, "messageScope" }, - { 264, "minExportSeconds" }, - { 265, "minFlowStartSeconds" }, - { 266, "opaqueOctets" }, - { 267, "sessionScope" }, - { 268, "maxFlowEndMicroseconds" }, - { 269, "maxFlowEndMilliseconds" }, - { 270, "maxFlowEndNanoseconds" }, - { 271, "minFlowStartMicroseconds" }, - { 272, "minFlowStartMilliseconds" }, - { 273, "minFlowStartNanoseconds" }, - { 274, "collectorCertificate" }, - { 275, "exporterCertificate" }, - { 301, "selectionSequenceId" }, - { 302, "selectorId" }, - { 303, "informationElementId" }, - { 304, "selectorAlgorithm" }, - { 305, "samplingPacketInterval" }, - { 306, "samplingPacketSpace" }, - { 307, "samplingTimeInterval" }, - { 308, "samplingTimeSpace" }, - { 309, "samplingSize" }, - { 310, "samplingPopulation" }, - { 311, "samplingProbability" }, - { 313, "IP_SECTION HEADER" }, - { 314, "IP_SECTION PAYLOAD" }, - { 316, "mplsLabelStackSection" }, - { 317, "mplsPayloadPacketSection" }, - { 318, "selectorIdTotalPktsObserved" }, - { 319, "selectorIdTotalPktsSelected" }, - { 320, "absoluteError" }, - { 321, "relativeError" }, - { 322, "observationTimeSeconds" }, - { 323, "observationTimeMilliseconds" }, - { 324, "observationTimeMicroseconds" }, - { 325, "observationTimeNanoseconds" }, - { 326, "digestHashValue" }, - { 327, "hashIPPayloadOffset" }, - { 328, "hashIPPayloadSize" }, - { 329, "hashOutputRangeMin" }, - { 330, "hashOutputRangeMax" }, - { 331, "hashSelectedRangeMin" }, - { 332, "hashSelectedRangeMax" }, - { 333, "hashDigestOutput" }, - { 334, "hashInitialiserValue" }, - { 335, "selectorName" }, - { 336, "upperCILimit" }, - { 337, "lowerCILimit" }, - { 338, "confidenceLevel" }, - { 339, "informationElementDataType" }, - { 340, "informationElementDescription" }, - { 341, "informationElementName" }, - { 342, "informationElementRangeBegin" }, - { 343, "informationElementRangeEnd" }, - { 344, "informationElementSemantics" }, - { 345, "informationElementUnits" }, - { 346, "privateEnterpriseNumber" }, - /* Ericsson NAT Logging */ - { 24628, "NAT_LOG_FIELD_IDX_CONTEXT_ID" }, - { 24629, "NAT_LOG_FIELD_IDX_CONTEXT_NAME" }, - { 24630, "NAT_LOG_FIELD_IDX_ASSIGN_TS_SEC" }, - { 24631, "NAT_LOG_FIELD_IDX_UNASSIGN_TS_SEC" }, - { 24632, "NAT_LOG_FIELD_IDX_IPV4_INT_ADDR" }, - { 24633, "NAT_LOG_FIELD_IDX_IPV4_EXT_ADDR" }, - { 24634, "NAT_LOG_FIELD_IDX_EXT_PORT_FIRST" }, - { 24635, "NAT_LOG_FIELD_IDX_EXT_PORT_LAST" }, - /* Cisco ASA5500 Series NetFlow */ - { 33000, "INGRESS_ACL_ID" }, - { 33001, "EGRESS_ACL_ID" }, - { 33002, "FW_EXT_EVENT" }, - /* medianet performance monitor */ - { 37000, "PACKETS_DROPPED" }, - { 37003, "BYTE_RATE" }, - { 37004, "APPLICATION_MEDIA_BYTES" }, - { 37006, "APPLICATION_MEDIA_BYTE_RATE" }, - { 37007, "APPLICATION_MEDIA_PACKETS" }, - { 37009, "APPLICATION_MEDIA_PACKET_RATE" }, - { 37011, "APPLICATION_MEDIA_EVENT" }, - { 37012, "MONITOR_EVENT" }, - { 37013, "TIMESTAMP_INTERVAL" }, - { 37014, "TRANSPORT_PACKETS_EXPECTED" }, - { 37016, "TRANSPORT_ROUND_TRIP_TIME" }, - { 37017, "TRANSPORT_EVENT_PACKET_LOSS" }, - { 37019, "TRANSPORT_PACKETS_LOST" }, - { 37021, "TRANSPORT_PACKETS_LOST_RATE" }, - { 37022, "TRANSPORT_RTP_SSRC" }, - { 37023, "TRANSPORT_RTP_JITTER_MEAN" }, - { 37024, "TRANSPORT_RTP_JITTER_MIN" }, - { 37025, "TRANSPORT_RTP_JITTER_MAX" }, - { 40000, "AAA_USERNAME" }, - { 40001, "XLATE_SRC_ADDR_IPV4" }, - { 40002, "XLATE_DST_ADDR_IPV4" }, - { 40003, "XLATE_SRC_PORT" }, - { 40004, "XLATE_DST_PORT" }, - { 40005, "FW_EVENT" }, - /* v9 nTop extensions. */ - { 80 + NTOP_BASE, "FRAGMENTS" }, - { 82 + NTOP_BASE, "CLIENT_NW_DELAY_SEC" }, - { 83 + NTOP_BASE, "CLIENT_NW_DELAY_USEC" }, - { 84 + NTOP_BASE, "SERVER_NW_DELAY_SEC" }, - { 85 + NTOP_BASE, "SERVER_NW_DELAY_USEC" }, - { 86 + NTOP_BASE, "APPL_LATENCY_SEC" }, - { 87 + NTOP_BASE, "APPL_LATENCY_USEC" }, - { 98 + NTOP_BASE, "ICMP_FLAGS" }, - { 101 + NTOP_BASE, "SRC_IP_COUNTRY" }, - { 102 + NTOP_BASE, "SRC_IP_CITY" }, - { 103 + NTOP_BASE, "DST_IP_COUNTRY" }, - { 104 + NTOP_BASE, "DST_IP_CITY" }, - { 105 + NTOP_BASE, "FLOW_PROTO_PORT" }, - { 106 + NTOP_BASE, "TUNNEL_ID" }, - { 107 + NTOP_BASE, "LONGEST_FLOW_PKT" }, - { 108 + NTOP_BASE, "SHORTEST_FLOW_PKT" }, - { 109 + NTOP_BASE, "RETRANSMITTED_IN_PKTS" }, - { 110 + NTOP_BASE, "RETRANSMITTED_OUT_PKTS" }, - { 111 + NTOP_BASE, "OOORDER_IN_PKTS" }, - { 112 + NTOP_BASE, "OOORDER_OUT_PKTS" }, - { 113 + NTOP_BASE, "UNTUNNELED_PROTOCOL" }, - { 114 + NTOP_BASE, "UNTUNNELED_IPV4_SRC_ADDR" }, - { 115 + NTOP_BASE, "UNTUNNELED_L4_SRC_PORT" }, - { 116 + NTOP_BASE, "UNTUNNELED_IPV4_DST_ADDR" }, - { 117 + NTOP_BASE, "UNTUNNELED_L4_DST_PORT" }, - { 120 + NTOP_BASE, "DUMP_PATH" }, - { 130 + NTOP_BASE, "SIP_CALL_ID" }, - { 131 + NTOP_BASE, "SIP_CALLING_PARTY" }, - { 132 + NTOP_BASE, "SIP_CALLED_PARTY" }, - { 133 + NTOP_BASE, "SIP_RTP_CODECS" }, - { 134 + NTOP_BASE, "SIP_INVITE_TIME" }, - { 135 + NTOP_BASE, "SIP_TRYING_TIME" }, - { 136 + NTOP_BASE, "SIP_RINGING_TIME" }, - { 137 + NTOP_BASE, "SIP_OK_TIME" }, - { 138 + NTOP_BASE, "SIP_BYE_TIME" }, - { 139 + NTOP_BASE, "SIP_RTP_SRC_IP" }, - { 140 + NTOP_BASE, "SIP_RTP_SRC_PORT" }, - { 141 + NTOP_BASE, "SIP_RTP_DST_IP" }, - { 142 + NTOP_BASE, "SIP_RTP_DST_PORT" }, - { 150 + NTOP_BASE, "RTP_FIRST_SSRC" }, - { 151 + NTOP_BASE, "RTP_FIRST_TS" }, - { 152 + NTOP_BASE, "RTP_LAST_SSRC" }, - { 153 + NTOP_BASE, "RTP_LAST_TS" }, - { 154 + NTOP_BASE, "RTP_IN_JITTER" }, - { 155 + NTOP_BASE, "RTP_OUT_JITTER" }, - { 156 + NTOP_BASE, "RTP_IN_PKT_LOST" }, - { 157 + NTOP_BASE, "RTP_OUT_PKT_LOST" }, - { 158 + NTOP_BASE, "RTP_OUT_PAYLOAD_TYPE" }, - { 159 + NTOP_BASE, "RTP_IN_MAX_DELTA" }, - { 160 + NTOP_BASE, "RTP_OUT_MAX_DELTA" }, - { 165 + NTOP_BASE, "L7_PROTO" }, - { 180 + NTOP_BASE, "HTTP_URL" }, - { 181 + NTOP_BASE, "HTTP_RET_CODE" }, - { 182 + NTOP_BASE, "HTTP_REFERER" }, - { 183 + NTOP_BASE, "HTTP_UA" }, - { 184 + NTOP_BASE, "HTTP_MIME" }, - { 185 + NTOP_BASE, "SMTP_MAIL_FROM" }, - { 186 + NTOP_BASE, "SMTP_RCPT_TO" }, - { 195 + NTOP_BASE, "MYSQL_SERVER_VERSION" }, - { 196 + NTOP_BASE, "MYSQL_USERNAME" }, - { 197 + NTOP_BASE, "MYSQL_DB" }, - { 198 + NTOP_BASE, "MYSQL_QUERY" }, - { 199 + NTOP_BASE, "MYSQL_RESPONSE" }, - { 0, NULL } + { 1, "BYTES" }, + { 2, "PKTS" }, + { 3, "FLOWS" }, + { 4, "PROTOCOL" }, + { 5, "IP_TOS" }, + { 6, "TCP_FLAGS" }, + { 7, "L4_SRC_PORT" }, + { 8, "IP_SRC_ADDR" }, + { 9, "SRC_MASK" }, + { 10, "INPUT_SNMP" }, + { 11, "L4_DST_PORT" }, + { 12, "IP_DST_ADDR" }, + { 13, "DST_MASK" }, + { 14, "OUTPUT_SNMP" }, + { 15, "IP_NEXT_HOP" }, + { 16, "SRC_AS" }, + { 17, "DST_AS" }, + { 18, "BGP_NEXT_HOP" }, + { 19, "MUL_DPKTS" }, + { 20, "MUL_DOCTETS" }, + { 21, "LAST_SWITCHED" }, + { 22, "FIRST_SWITCHED" }, + { 23, "OUT_BYTES" }, + { 24, "OUT_PKTS" }, + { 25, "IP LENGTH MINIMUM" }, + { 26, "IP LENGTH MAXIMUM" }, + { 27, "IPV6_SRC_ADDR" }, + { 28, "IPV6_DST_ADDR" }, + { 29, "IPV6_SRC_MASK" }, + { 30, "IPV6_DST_MASK" }, + { 31, "FLOW_LABEL" }, + { 32, "ICMP_TYPE" }, + { 33, "IGMP_TYPE" }, + { 34, "SAMPLING_INTERVAL" }, + { 35, "SAMPLING_ALGORITHM" }, + { 36, "FLOW_ACTIVE_TIMEOUT" }, + { 37, "FLOW_INACTIVE_TIMEOUT" }, + { 38, "ENGINE_TYPE" }, + { 39, "ENGINE_ID" }, + { 40, "TOTAL_BYTES_EXP" }, + { 41, "TOTAL_PKTS_EXP" }, + { 42, "TOTAL_FLOWS_EXP" }, + { 44, "IP_SRC_PREFIX" }, + { 45, "IP_DST_PREFIX" }, + { 46, "MPLS_TOP_LABEL_TYPE" }, + { 47, "MPLS_TOP_LABEL_ADDR" }, + { 48, "FLOW_SAMPLER_ID" }, + { 49, "FLOW_SAMPLER_MODE" }, + { 50, "FLOW_SAMPLER_RANDOM_INTERVAL" }, + { 51, "FLOW_CLASS" }, + { 52, "IP TTL MINIMUM" }, + { 53, "IP TTL MAXIMUM" }, + { 54, "IPv4 ID" }, + { 55, "DST_TOS" }, + { 56, "SRC_MAC" }, + { 57, "DST_MAC" }, + { 58, "SRC_VLAN" }, + { 59, "DST_VLAN" }, + { 60, "IP_PROTOCOL_VERSION" }, + { 61, "DIRECTION" }, + { 62, "IPV6_NEXT_HOP" }, + { 63, "BGP_IPV6_NEXT_HOP" }, + { 64, "IPV6_OPTION_HEADERS" }, + { 70, "MPLS_LABEL_1" }, + { 71, "MPLS_LABEL_2" }, + { 72, "MPLS_LABEL_3" }, + { 73, "MPLS_LABEL_4" }, + { 74, "MPLS_LABEL_5" }, + { 75, "MPLS_LABEL_6" }, + { 76, "MPLS_LABEL_7" }, + { 77, "MPLS_LABEL_8" }, + { 78, "MPLS_LABEL_9" }, + { 79, "MPLS_LABEL_10" }, + { 80, "DESTINATION_MAC" }, + { 81, "SOURCE_MAC" }, + { 82, "IF_NAME" }, + { 83, "IF_DESC" }, + { 84, "SAMPLER_NAME" }, + { 85, "BYTES_TOTAL" }, + { 86, "PACKETS_TOTAL" }, + { 88, "FRAGMENT_OFFSET" }, + { 89, "FORWARDING_STATUS" }, + { 90, "VPN_ROUTE_DISTINGUISHER" }, + { 91, "mplsTopLabelPrefixLength" }, + { 92, "SRC_TRAFFIC_INDEX" }, + { 93, "DST_TRAFFIC_INDEX" }, + { 94, "APPLICATION_DESC" }, + { 95, "APPLICATION_ID" }, + { 96, "APPLICATION_NAME" }, + { 98, "postIpDiffServCodePoint" }, + { 99, "multicastReplicationFactor" }, + { 128, "DST_AS_PEER" }, + { 129, "SRC_AS_PEER" }, + { 130, "exporterIPv4Address" }, + { 131, "exporterIPv6Address" }, + { 132, "DROPPED_BYTES" }, + { 133, "DROPPED_PACKETS" }, + { 134, "DROPPED_BYTES_TOTAL" }, + { 135, "DROPPED_PACKETS_TOTAL" }, + { 136, "flowEndReason" }, + { 137, "commonPropertiesId" }, + { 138, "observationPointId" }, + { 139, "icmpTypeCodeIPv6" }, + { 140, "MPLS_TOP_LABEL_IPv6_ADDRESS" }, + { 141, "lineCardId" }, + { 142, "portId" }, + { 143, "meteringProcessId" }, + { 144, "FLOW_EXPORTER" }, + { 145, "templateId" }, + { 146, "wlanChannelId" }, + { 147, "wlanSSID" }, + { 148, "flowId" }, + { 149, "observationDomainId" }, + { 150, "flowStartSeconds" }, + { 151, "flowEndSeconds" }, + { 152, "flowStartMilliseconds" }, + { 153, "flowEndMilliseconds" }, + { 154, "flowStartMicroseconds" }, + { 155, "flowEndMicroseconds" }, + { 156, "flowStartNanoseconds" }, + { 157, "flowEndNanoseconds" }, + { 158, "flowStartDeltaMicroseconds" }, + { 159, "flowEndDeltaMicroseconds" }, + { 160, "systemInitTimeMilliseconds" }, + { 161, "flowDurationMilliseconds" }, + { 162, "flowDurationMicroseconds" }, + { 163, "observedFlowTotalCount" }, + { 164, "ignoredPacketTotalCount" }, + { 165, "ignoredOctetTotalCount" }, + { 166, "notSentFlowTotalCount" }, + { 167, "notSentPacketTotalCount" }, + { 168, "notSentOctetTotalCount" }, + { 169, "destinationIPv6Prefix" }, + { 170, "sourceIPv6Prefix" }, + { 171, "postOctetTotalCount" }, + { 172, "postPacketTotalCount" }, + { 173, "flowKeyIndicator" }, + { 174, "postMCastPacketTotalCount" }, + { 175, "postMCastOctetTotalCount" }, + { 176, "ICMP_IPv4_TYPE" }, + { 177, "ICMP_IPv4_CODE" }, + { 178, "ICMP_IPv6_TYPE" }, + { 179, "ICMP_IPv6_CODE" }, + { 180, "UDP_SRC_PORT" }, + { 181, "UDP_DST_PORT" }, + { 182, "TCP_SRC_PORT" }, + { 183, "TCP_DST_PORT" }, + { 184, "TCP_SEQ_NUM" }, + { 185, "TCP_ACK_NUM" }, + { 186, "TCP_WINDOW_SIZE" }, + { 187, "TCP_URGENT_PTR" }, + { 188, "TCP_HEADER_LEN" }, + { 189, "IP_HEADER_LEN" }, + { 190, "IP_TOTAL_LEN" }, + { 191, "payloadLengthIPv6" }, + { 192, "IP_TTL" }, + { 193, "nextHeaderIPv6" }, + { 194, "IP_TOS" }, + { 195, "IP_DSCP" }, + { 196, "IP_PRECEDENCE" }, + { 197, "IP_FRAGMENT_FLAGS" }, + { 198, "BYTES_SQUARED" }, + { 199, "BYTES_SQUARED_PERMANENT" }, + { 200, "MPLS_TOP_LABEL_TTL" }, + { 201, "MPLS_LABEL_STACK_OCTETS" }, + { 202, "MPLS_LABEL_STACK_DEPTH" }, + { 203, "MPLS_TOP_LABEL_EXP" }, + { 204, "IP_PAYLOAD_LENGTH" }, + { 205, "UDP_LENGTH" }, + { 206, "IS_MULTICAST" }, + { 207, "IP_HEADER_WORDS" }, + { 208, "IP_OPTION_MAP" }, + { 209, "TCP_OPTION_MAP" }, + { 210, "paddingOctets" }, + { 211, "collectorIPv4Address" }, + { 212, "collectorIPv6Address" }, + { 213, "collectorInterface" }, + { 214, "collectorProtocolVersion" }, + { 215, "collectorTransportProtocol" }, + { 216, "collectorTransportPort" }, + { 217, "exporterTransportPort" }, + { 218, "tcpSynTotalCount" }, + { 219, "tcpFinTotalCount" }, + { 220, "tcpRstTotalCount" }, + { 221, "tcpPshTotalCount" }, + { 222, "tcpAckTotalCount" }, + { 223, "tcpUrgTotalCount" }, + { 224, "ipTotalLength" }, + { 225, "postNATSourceIPv4Address" }, + { 226, "postNATDestinationIPv4Address" }, + { 227, "postNAPTSourceTransportPort" }, + { 228, "postNAPTDestinationTransportPort" }, + { 229, "natOriginatingAddressRealm" }, + { 230, "natEvent" }, + { 231, "initiatorOctets" }, + { 232, "responderOctets" }, + { 233, "firewallEvent" }, + { 234, "ingressVRFID" }, + { 235, "egressVRFID" }, + { 236, "VRFname" }, + { 237, "postMplsTopLabelExp" }, + { 238, "tcpWindowScale" }, + { 239, "biflowDirection" }, + { 240, "ethernetHeaderLength" }, + { 241, "ethernetPayloadLength" }, + { 242, "ethernetTotalLength" }, + { 243, "dot1qVlanId" }, + { 244, "dot1qPriority" }, + { 245, "dot1qCustomerVlanId" }, + { 246, "dot1qCustomerPriority" }, + { 247, "metroEvcId" }, + { 248, "metroEvcType" }, + { 249, "pseudoWireId" }, + { 250, "pseudoWireType" }, + { 251, "pseudoWireControlWord" }, + { 252, "ingressPhysicalInterface" }, + { 253, "egressPhysicalInterface" }, + { 254, "postDot1qVlanId" }, + { 255, "postDot1qCustomerVlanId" }, + { 256, "ethernetType" }, + { 257, "postIpPrecedence" }, + { 258, "collectionTimeMilliseconds" }, + { 259, "exportSctpStreamId" }, + { 260, "maxExportSeconds" }, + { 261, "maxFlowEndSeconds" }, + { 262, "messageMD5Checksum" }, + { 263, "messageScope" }, + { 264, "minExportSeconds" }, + { 265, "minFlowStartSeconds" }, + { 266, "opaqueOctets" }, + { 267, "sessionScope" }, + { 268, "maxFlowEndMicroseconds" }, + { 269, "maxFlowEndMilliseconds" }, + { 270, "maxFlowEndNanoseconds" }, + { 271, "minFlowStartMicroseconds" }, + { 272, "minFlowStartMilliseconds" }, + { 273, "minFlowStartNanoseconds" }, + { 274, "collectorCertificate" }, + { 275, "exporterCertificate" }, + { 301, "selectionSequenceId" }, + { 302, "selectorId" }, + { 303, "informationElementId" }, + { 304, "selectorAlgorithm" }, + { 305, "samplingPacketInterval" }, + { 306, "samplingPacketSpace" }, + { 307, "samplingTimeInterval" }, + { 308, "samplingTimeSpace" }, + { 309, "samplingSize" }, + { 310, "samplingPopulation" }, + { 311, "samplingProbability" }, + { 313, "IP_SECTION HEADER" }, + { 314, "IP_SECTION PAYLOAD" }, + { 316, "mplsLabelStackSection" }, + { 317, "mplsPayloadPacketSection" }, + { 318, "selectorIdTotalPktsObserved" }, + { 319, "selectorIdTotalPktsSelected" }, + { 320, "absoluteError" }, + { 321, "relativeError" }, + { 322, "observationTimeSeconds" }, + { 323, "observationTimeMilliseconds" }, + { 324, "observationTimeMicroseconds" }, + { 325, "observationTimeNanoseconds" }, + { 326, "digestHashValue" }, + { 327, "hashIPPayloadOffset" }, + { 328, "hashIPPayloadSize" }, + { 329, "hashOutputRangeMin" }, + { 330, "hashOutputRangeMax" }, + { 331, "hashSelectedRangeMin" }, + { 332, "hashSelectedRangeMax" }, + { 333, "hashDigestOutput" }, + { 334, "hashInitialiserValue" }, + { 335, "selectorName" }, + { 336, "upperCILimit" }, + { 337, "lowerCILimit" }, + { 338, "confidenceLevel" }, + { 339, "informationElementDataType" }, + { 340, "informationElementDescription" }, + { 341, "informationElementName" }, + { 342, "informationElementRangeBegin" }, + { 343, "informationElementRangeEnd" }, + { 344, "informationElementSemantics" }, + { 345, "informationElementUnits" }, + { 346, "privateEnterpriseNumber" }, + /* Ericsson NAT Logging */ + { 24628, "NAT_LOG_FIELD_IDX_CONTEXT_ID" }, + { 24629, "NAT_LOG_FIELD_IDX_CONTEXT_NAME" }, + { 24630, "NAT_LOG_FIELD_IDX_ASSIGN_TS_SEC" }, + { 24631, "NAT_LOG_FIELD_IDX_UNASSIGN_TS_SEC" }, + { 24632, "NAT_LOG_FIELD_IDX_IPV4_INT_ADDR" }, + { 24633, "NAT_LOG_FIELD_IDX_IPV4_EXT_ADDR" }, + { 24634, "NAT_LOG_FIELD_IDX_EXT_PORT_FIRST" }, + { 24635, "NAT_LOG_FIELD_IDX_EXT_PORT_LAST" }, + /* Cisco ASA5500 Series NetFlow */ + { 33000, "INGRESS_ACL_ID" }, + { 33001, "EGRESS_ACL_ID" }, + { 33002, "FW_EXT_EVENT" }, + /* medianet performance monitor */ + { 37000, "PACKETS_DROPPED" }, + { 37003, "BYTE_RATE" }, + { 37004, "APPLICATION_MEDIA_BYTES" }, + { 37006, "APPLICATION_MEDIA_BYTE_RATE" }, + { 37007, "APPLICATION_MEDIA_PACKETS" }, + { 37009, "APPLICATION_MEDIA_PACKET_RATE" }, + { 37011, "APPLICATION_MEDIA_EVENT" }, + { 37012, "MONITOR_EVENT" }, + { 37013, "TIMESTAMP_INTERVAL" }, + { 37014, "TRANSPORT_PACKETS_EXPECTED" }, + { 37016, "TRANSPORT_ROUND_TRIP_TIME" }, + { 37017, "TRANSPORT_EVENT_PACKET_LOSS" }, + { 37019, "TRANSPORT_PACKETS_LOST" }, + { 37021, "TRANSPORT_PACKETS_LOST_RATE" }, + { 37022, "TRANSPORT_RTP_SSRC" }, + { 37023, "TRANSPORT_RTP_JITTER_MEAN" }, + { 37024, "TRANSPORT_RTP_JITTER_MIN" }, + { 37025, "TRANSPORT_RTP_JITTER_MAX" }, + { 40000, "AAA_USERNAME" }, + { 40001, "XLATE_SRC_ADDR_IPV4" }, + { 40002, "XLATE_DST_ADDR_IPV4" }, + { 40003, "XLATE_SRC_PORT" }, + { 40004, "XLATE_DST_PORT" }, + { 40005, "FW_EVENT" }, + /* v9 nTop extensions. */ + { 80 + NTOP_BASE, "FRAGMENTS" }, + { 82 + NTOP_BASE, "CLIENT_NW_DELAY_SEC" }, + { 83 + NTOP_BASE, "CLIENT_NW_DELAY_USEC" }, + { 84 + NTOP_BASE, "SERVER_NW_DELAY_SEC" }, + { 85 + NTOP_BASE, "SERVER_NW_DELAY_USEC" }, + { 86 + NTOP_BASE, "APPL_LATENCY_SEC" }, + { 87 + NTOP_BASE, "APPL_LATENCY_USEC" }, + { 98 + NTOP_BASE, "ICMP_FLAGS" }, + { 101 + NTOP_BASE, "SRC_IP_COUNTRY" }, + { 102 + NTOP_BASE, "SRC_IP_CITY" }, + { 103 + NTOP_BASE, "DST_IP_COUNTRY" }, + { 104 + NTOP_BASE, "DST_IP_CITY" }, + { 105 + NTOP_BASE, "FLOW_PROTO_PORT" }, + { 106 + NTOP_BASE, "TUNNEL_ID" }, + { 107 + NTOP_BASE, "LONGEST_FLOW_PKT" }, + { 108 + NTOP_BASE, "SHORTEST_FLOW_PKT" }, + { 109 + NTOP_BASE, "RETRANSMITTED_IN_PKTS" }, + { 110 + NTOP_BASE, "RETRANSMITTED_OUT_PKTS" }, + { 111 + NTOP_BASE, "OOORDER_IN_PKTS" }, + { 112 + NTOP_BASE, "OOORDER_OUT_PKTS" }, + { 113 + NTOP_BASE, "UNTUNNELED_PROTOCOL" }, + { 114 + NTOP_BASE, "UNTUNNELED_IPV4_SRC_ADDR" }, + { 115 + NTOP_BASE, "UNTUNNELED_L4_SRC_PORT" }, + { 116 + NTOP_BASE, "UNTUNNELED_IPV4_DST_ADDR" }, + { 117 + NTOP_BASE, "UNTUNNELED_L4_DST_PORT" }, + { 120 + NTOP_BASE, "DUMP_PATH" }, + { 130 + NTOP_BASE, "SIP_CALL_ID" }, + { 131 + NTOP_BASE, "SIP_CALLING_PARTY" }, + { 132 + NTOP_BASE, "SIP_CALLED_PARTY" }, + { 133 + NTOP_BASE, "SIP_RTP_CODECS" }, + { 134 + NTOP_BASE, "SIP_INVITE_TIME" }, + { 135 + NTOP_BASE, "SIP_TRYING_TIME" }, + { 136 + NTOP_BASE, "SIP_RINGING_TIME" }, + { 137 + NTOP_BASE, "SIP_OK_TIME" }, + { 138 + NTOP_BASE, "SIP_BYE_TIME" }, + { 139 + NTOP_BASE, "SIP_RTP_SRC_IP" }, + { 140 + NTOP_BASE, "SIP_RTP_SRC_PORT" }, + { 141 + NTOP_BASE, "SIP_RTP_DST_IP" }, + { 142 + NTOP_BASE, "SIP_RTP_DST_PORT" }, + { 150 + NTOP_BASE, "RTP_FIRST_SSRC" }, + { 151 + NTOP_BASE, "RTP_FIRST_TS" }, + { 152 + NTOP_BASE, "RTP_LAST_SSRC" }, + { 153 + NTOP_BASE, "RTP_LAST_TS" }, + { 154 + NTOP_BASE, "RTP_IN_JITTER" }, + { 155 + NTOP_BASE, "RTP_OUT_JITTER" }, + { 156 + NTOP_BASE, "RTP_IN_PKT_LOST" }, + { 157 + NTOP_BASE, "RTP_OUT_PKT_LOST" }, + { 158 + NTOP_BASE, "RTP_OUT_PAYLOAD_TYPE" }, + { 159 + NTOP_BASE, "RTP_IN_MAX_DELTA" }, + { 160 + NTOP_BASE, "RTP_OUT_MAX_DELTA" }, + { 165 + NTOP_BASE, "L7_PROTO" }, + { 180 + NTOP_BASE, "HTTP_URL" }, + { 181 + NTOP_BASE, "HTTP_RET_CODE" }, + { 182 + NTOP_BASE, "HTTP_REFERER" }, + { 183 + NTOP_BASE, "HTTP_UA" }, + { 184 + NTOP_BASE, "HTTP_MIME" }, + { 185 + NTOP_BASE, "SMTP_MAIL_FROM" }, + { 186 + NTOP_BASE, "SMTP_RCPT_TO" }, + { 195 + NTOP_BASE, "MYSQL_SERVER_VERSION" }, + { 196 + NTOP_BASE, "MYSQL_USERNAME" }, + { 197 + NTOP_BASE, "MYSQL_DB" }, + { 198 + NTOP_BASE, "MYSQL_QUERY" }, + { 199 + NTOP_BASE, "MYSQL_RESPONSE" }, + { 0, NULL } }; +static value_string_ext v9_v10_template_types_ext = VALUE_STRING_EXT_INIT(v9_v10_template_types); + static const value_string v10_template_types_plixer[] = { - { 100, "client_ip_v4" }, - { 101, "client_hostname" }, - { 102, "partner_name" }, - { 103, "server_hostname" }, - { 104, "server_ip_v4" }, - { 105, "recipient_address" }, - { 106, "event_id" }, - { 107, "msgid" }, - { 108, "priority" }, - { 109, "recipient_report_status" }, - { 110, "number_recipients" }, - { 111, "origination_time" }, - { 112, "encryption" }, - { 113, "service_version" }, - { 114, "linked_msgid" }, - { 115, "message_subject" }, - { 116, "sender_address" }, - { 117, "date_time" }, - { 118, "client_ip_v6" }, - { 119, "server_ip_v6" }, - { 120, "source_context" }, - { 121, "connector_id" }, - { 122, "source_component" }, - { 124, "related_recipient_address" }, - { 125, "reference" }, - { 126, "return_path" }, - { 127, "message_info" }, - { 128, "directionality" }, - { 129, "tenant_id" }, - { 130, "original_client_ip_v4" }, - { 131, "original_server_ip_v4" }, - { 132, "custom_data" }, - { 133, "internal_message_id" }, - { 0, NULL } + { 100, "client_ip_v4" }, + { 101, "client_hostname" }, + { 102, "partner_name" }, + { 103, "server_hostname" }, + { 104, "server_ip_v4" }, + { 105, "recipient_address" }, + { 106, "event_id" }, + { 107, "msgid" }, + { 108, "priority" }, + { 109, "recipient_report_status" }, + { 110, "number_recipients" }, + { 111, "origination_time" }, + { 112, "encryption" }, + { 113, "service_version" }, + { 114, "linked_msgid" }, + { 115, "message_subject" }, + { 116, "sender_address" }, + { 117, "date_time" }, + { 118, "client_ip_v6" }, + { 119, "server_ip_v6" }, + { 120, "source_context" }, + { 121, "connector_id" }, + { 122, "source_component" }, + { 124, "related_recipient_address" }, + { 125, "reference" }, + { 126, "return_path" }, + { 127, "message_info" }, + { 128, "directionality" }, + { 129, "tenant_id" }, + { 130, "original_client_ip_v4" }, + { 131, "original_server_ip_v4" }, + { 132, "custom_data" }, + { 133, "internal_message_id" }, + { 0, NULL } }; +static value_string_ext v10_template_types_plixer_ext = VALUE_STRING_EXT_INIT(v10_template_types_plixer); + static const value_string v10_template_types_ntop[] = { - { 80, "FRAGMENTS" }, - { 82, "CLIENT_NW_DELAY_SEC" }, - { 83, "CLIENT_NW_DELAY_USEC" }, - { 84, "SERVER_NW_DELAY_SEC" }, - { 85, "SERVER_NW_DELAY_USEC" }, - { 86, "APPL_LATENCY_SEC" }, - { 87, "APPL_LATENCY_USEC" }, - { 98, "ICMP_FLAGS" }, - { 101, "SRC_IP_COUNTRY" }, - { 102, "SRC_IP_CITY" }, - { 103, "DST_IP_COUNTRY" }, - { 104, "DST_IP_CITY" }, - { 105, "FLOW_PROTO_PORT" }, - { 106, "TUNNEL_ID" }, - { 107, "LONGEST_FLOW_PKT" }, - { 108, "SHORTEST_FLOW_PKT" }, - { 109, "RETRANSMITTED_IN_PKTS" }, - { 110, "RETRANSMITTED_OUT_PKTS" }, - { 111, "OOORDER_IN_PKTS" }, - { 112, "OOORDER_OUT_PKTS" }, - { 113, "UNTUNNELED_PROTOCOL" }, - { 114, "UNTUNNELED_IPV4_SRC_ADDR" }, - { 115, "UNTUNNELED_L4_SRC_PORT" }, - { 116, "UNTUNNELED_IPV4_DST_ADDR" }, - { 117, "UNTUNNELED_L4_DST_PORT" }, - { 120, "DUMP_PATH" }, - { 130, "SIP_CALL_ID" }, - { 131, "SIP_CALLING_PARTY" }, - { 132, "SIP_CALLED_PARTY" }, - { 133, "SIP_RTP_CODECS" }, - { 134, "SIP_INVITE_TIME" }, - { 135, "SIP_TRYING_TIME" }, - { 136, "SIP_RINGING_TIME" }, - { 137, "SIP_OK_TIME" }, - { 138, "SIP_BYE_TIME" }, - { 139, "SIP_RTP_SRC_IP" }, - { 140, "SIP_RTP_SRC_PORT" }, - { 141, "SIP_RTP_DST_IP" }, - { 142, "SIP_RTP_DST_PORT" }, - { 150, "RTP_FIRST_SSRC" }, - { 151, "RTP_FIRST_TS" }, - { 152, "RTP_LAST_SSRC" }, - { 153, "RTP_LAST_TS" }, - { 154, "RTP_IN_JITTER" }, - { 155, "RTP_OUT_JITTER" }, - { 156, "RTP_IN_PKT_LOST" }, - { 157, "RTP_OUT_PKT_LOST" }, - { 158, "RTP_OUT_PAYLOAD_TYPE" }, - { 159, "RTP_IN_MAX_DELTA" }, - { 160, "RTP_OUT_MAX_DELTA" }, - { 165, "L7_PROTO" }, - { 180, "HTTP_URL" }, - { 181, "HTTP_RET_CODE" }, - { 182, "HTTP_REFERER" }, - { 183, "HTTP_UA" }, - { 184, "HTTP_MIME" }, - { 185, "SMTP_MAIL_FROM" }, - { 186, "SMTP_RCPT_TO" }, - { 195, "MYSQL_SERVER_VERSION" }, - { 196, "MYSQL_USERNAME" }, - { 197, "MYSQL_DB" }, - { 198, "MYSQL_QUERY" }, - { 199, "MYSQL_RESPONSE" }, - { 0, NULL } + { 80, "FRAGMENTS" }, + { 82, "CLIENT_NW_DELAY_SEC" }, + { 83, "CLIENT_NW_DELAY_USEC" }, + { 84, "SERVER_NW_DELAY_SEC" }, + { 85, "SERVER_NW_DELAY_USEC" }, + { 86, "APPL_LATENCY_SEC" }, + { 87, "APPL_LATENCY_USEC" }, + { 98, "ICMP_FLAGS" }, + { 101, "SRC_IP_COUNTRY" }, + { 102, "SRC_IP_CITY" }, + { 103, "DST_IP_COUNTRY" }, + { 104, "DST_IP_CITY" }, + { 105, "FLOW_PROTO_PORT" }, + { 106, "TUNNEL_ID" }, + { 107, "LONGEST_FLOW_PKT" }, + { 108, "SHORTEST_FLOW_PKT" }, + { 109, "RETRANSMITTED_IN_PKTS" }, + { 110, "RETRANSMITTED_OUT_PKTS" }, + { 111, "OOORDER_IN_PKTS" }, + { 112, "OOORDER_OUT_PKTS" }, + { 113, "UNTUNNELED_PROTOCOL" }, + { 114, "UNTUNNELED_IPV4_SRC_ADDR" }, + { 115, "UNTUNNELED_L4_SRC_PORT" }, + { 116, "UNTUNNELED_IPV4_DST_ADDR" }, + { 117, "UNTUNNELED_L4_DST_PORT" }, + { 120, "DUMP_PATH" }, + { 130, "SIP_CALL_ID" }, + { 131, "SIP_CALLING_PARTY" }, + { 132, "SIP_CALLED_PARTY" }, + { 133, "SIP_RTP_CODECS" }, + { 134, "SIP_INVITE_TIME" }, + { 135, "SIP_TRYING_TIME" }, + { 136, "SIP_RINGING_TIME" }, + { 137, "SIP_OK_TIME" }, + { 138, "SIP_BYE_TIME" }, + { 139, "SIP_RTP_SRC_IP" }, + { 140, "SIP_RTP_SRC_PORT" }, + { 141, "SIP_RTP_DST_IP" }, + { 142, "SIP_RTP_DST_PORT" }, + { 150, "RTP_FIRST_SSRC" }, + { 151, "RTP_FIRST_TS" }, + { 152, "RTP_LAST_SSRC" }, + { 153, "RTP_LAST_TS" }, + { 154, "RTP_IN_JITTER" }, + { 155, "RTP_OUT_JITTER" }, + { 156, "RTP_IN_PKT_LOST" }, + { 157, "RTP_OUT_PKT_LOST" }, + { 158, "RTP_OUT_PAYLOAD_TYPE" }, + { 159, "RTP_IN_MAX_DELTA" }, + { 160, "RTP_OUT_MAX_DELTA" }, + { 165, "L7_PROTO" }, + { 180, "HTTP_URL" }, + { 181, "HTTP_RET_CODE" }, + { 182, "HTTP_REFERER" }, + { 183, "HTTP_UA" }, + { 184, "HTTP_MIME" }, + { 185, "SMTP_MAIL_FROM" }, + { 186, "SMTP_RCPT_TO" }, + { 195, "MYSQL_SERVER_VERSION" }, + { 196, "MYSQL_USERNAME" }, + { 197, "MYSQL_DB" }, + { 198, "MYSQL_QUERY" }, + { 199, "MYSQL_RESPONSE" }, + { 0, NULL } }; - -static value_string_ext v9_v10_template_types_ext = VALUE_STRING_EXT_INIT(v9_v10_template_types); - -static value_string_ext v10_template_types_plixer_ext = VALUE_STRING_EXT_INIT(v10_template_types_plixer); static value_string_ext v10_template_types_ntop_ext = VALUE_STRING_EXT_INIT(v10_template_types_ntop); static const value_string v9_scope_field_types[] = { - { 1, "System" }, - { 2, "Interface" }, - { 3, "Line Card" }, - { 4, "NetFlow Cache" }, - { 5, "Template" }, - { 0, NULL } + { 1, "System" }, + { 2, "Interface" }, + { 3, "Line Card" }, + { 4, "NetFlow Cache" }, + { 5, "Template" }, + { 0, NULL } }; static value_string_ext v9_scope_field_types_ext = VALUE_STRING_EXT_INIT(v9_scope_field_types); static const value_string v9_sampler_mode[] = { - { 0, "Deterministic" }, - { 1, "Unknown" }, /* "Time-Based" ?? */ - { 2, "Random" }, - { 0, NULL } + { 0, "Deterministic" }, + { 1, "Unknown" }, /* "Time-Based" ?? */ + { 2, "Random" }, + { 0, NULL } }; static const value_string v9_direction[] = { - { 0, "Ingress" }, - { 1, "Egress" }, - { 0, NULL } + { 0, "Ingress" }, + { 1, "Egress" }, + { 0, NULL } }; #define FORWARDING_STATUS_UNKNOWN 0 @@ -839,113 +835,113 @@ static const value_string v9_direction[] = { #define FORWARDING_STATUS_CONSUME 3 static const value_string v9_forwarding_status[] = { - { FORWARDING_STATUS_UNKNOWN, "Unknown"}, /* Observed on IOS-XR 3.2 */ - { FORWARDING_STATUS_FORWARD, "Forward"}, /* Observed on 7200 12.4(9)T */ - { FORWARDING_STATUS_DROP, "Drop"}, /* Observed on 7200 12.4(9)T */ - { FORWARDING_STATUS_CONSUME, "Consume"}, /* Observed on 7200 12.4(9)T */ - { 0, NULL } + { FORWARDING_STATUS_UNKNOWN, "Unknown"}, /* Observed on IOS-XR 3.2 */ + { FORWARDING_STATUS_FORWARD, "Forward"}, /* Observed on 7200 12.4(9)T */ + { FORWARDING_STATUS_DROP, "Drop"}, /* Observed on 7200 12.4(9)T */ + { FORWARDING_STATUS_CONSUME, "Consume"}, /* Observed on 7200 12.4(9)T */ + { 0, NULL } }; static const value_string v9_forwarding_status_unknown_code[] = { - { 0, NULL } + { 0, NULL } }; static const value_string v9_forwarding_status_forward_code[] = { - { 0, "Forwarded (Unknown)" }, - { 1, "Forwarded Fragmented" }, - { 2, "Forwarded not Fragmented" }, - { 0, NULL } + { 0, "Forwarded (Unknown)" }, + { 1, "Forwarded Fragmented" }, + { 2, "Forwarded not Fragmented" }, + { 0, NULL } }; static const value_string v9_forwarding_status_drop_code[] = { - { 0, "Dropped (Unknown)" }, - { 1, "Drop ACL Deny" }, - { 2, "Drop ACL drop" }, - { 3, "Drop Unroutable" }, - { 4, "Drop Adjacency" }, - { 5, "Drop Fragmentation & DF set" }, - { 6, "Drop Bad header checksum" }, - { 7, "Drop Bad total Length" }, - { 8, "Drop Bad Header Length" }, - { 9, "Drop bad TTL" }, - { 10, "Drop Policer" }, - { 11, "Drop WRED" }, - { 12, "Drop RPF" }, - { 13, "Drop For us" }, - { 14, "Drop Bad output interface" }, - { 15, "Drop Hardware" }, - { 0, NULL } + { 0, "Dropped (Unknown)" }, + { 1, "Drop ACL Deny" }, + { 2, "Drop ACL drop" }, + { 3, "Drop Unroutable" }, + { 4, "Drop Adjacency" }, + { 5, "Drop Fragmentation & DF set" }, + { 6, "Drop Bad header checksum" }, + { 7, "Drop Bad total Length" }, + { 8, "Drop Bad Header Length" }, + { 9, "Drop bad TTL" }, + { 10, "Drop Policer" }, + { 11, "Drop WRED" }, + { 12, "Drop RPF" }, + { 13, "Drop For us" }, + { 14, "Drop Bad output interface" }, + { 15, "Drop Hardware" }, + { 0, NULL } }; static const value_string v9_forwarding_status_consume_code[] = { - { 0, "Consumed (Unknown)" }, - { 1, "Terminate Punt Adjacency" }, - { 2, "Terminate Incomplete Adjacency" }, - { 3, "Terminate For us" }, - { 0, NULL } + { 0, "Consumed (Unknown)" }, + { 1, "Terminate Punt Adjacency" }, + { 2, "Terminate Incomplete Adjacency" }, + { 3, "Terminate For us" }, + { 0, NULL } }; static const value_string v9_firewall_event[] = { - { 0, "Default (ignore)"}, - { 1, "Flow created"}, - { 2, "Flow deleted"}, - { 3, "Flow denied"}, - { 4, "Flow alert"}, - { 0, NULL } + { 0, "Default (ignore)"}, + { 1, "Flow created"}, + { 2, "Flow deleted"}, + { 3, "Flow denied"}, + { 4, "Flow alert"}, + { 0, NULL } }; static const value_string v9_extended_firewall_event[] = { - { 0, "ignore"}, - { 1001, "Flow denied by an ingress ACL"}, - { 1002, "Flow denied by an egress ACL"}, - { 1003, "Flow denied by security appliance"}, - { 1004, "Flow denied (TCP flow beginning with not TCP SYN)"}, - { 0, NULL } + { 0, "ignore"}, + { 1001, "Flow denied by an ingress ACL"}, + { 1002, "Flow denied by an egress ACL"}, + { 1003, "Flow denied by security appliance"}, + { 1004, "Flow denied (TCP flow beginning with not TCP SYN)"}, + { 0, NULL } }; static const value_string engine_type[] = { - { 0, "RP"}, - { 1, "VIP/Linecard"}, - { 2, "PFC/DFC" }, - { 0, NULL } + { 0, "RP"}, + { 1, "VIP/Linecard"}, + { 2, "PFC/DFC" }, + { 0, NULL } }; static const value_string v9_flow_end_reason[] = { - { 0, "Unknown"}, - { 1, "Idle timeout"}, - { 2, "Active timeout" }, - { 3, "End of Flow detected" }, - { 4, "Forced end" }, - { 5, "Lack of resources" }, - { 0, NULL } + { 0, "Unknown"}, + { 1, "Idle timeout"}, + { 2, "Active timeout" }, + { 3, "End of Flow detected" }, + { 4, "Forced end" }, + { 5, "Lack of resources" }, + { 0, NULL } }; static const value_string v9_biflow_direction[] = { - { 0, "Arbitrary"}, - { 1, "Initiator"}, - { 2, "ReverseInitiator" }, - { 3, "Perimeter" }, - { 0, NULL } + { 0, "Arbitrary"}, + { 1, "Initiator"}, + { 2, "ReverseInitiator" }, + { 3, "Perimeter" }, + { 0, NULL } }; static const value_string selector_algorithm[] = { - { 0, "Reserved"}, - { 1, "Systematic count-based Sampling"}, - { 2, "Systematic time-based Sampling"}, - { 3, "Random n-out-of-N Sampling"}, - { 4, "Uniform probabilistic Sampling"}, - { 5, "Property match Filtering"}, - { 6, "Hash based Filtering using BOB"}, - { 7, "Hash based Filtering using IPSX"}, - { 8, "Hash based Filtering using CRC"}, - { 0, NULL } + { 0, "Reserved"}, + { 1, "Systematic count-based Sampling"}, + { 2, "Systematic time-based Sampling"}, + { 3, "Random n-out-of-N Sampling"}, + { 4, "Uniform probabilistic Sampling"}, + { 5, "Property match Filtering"}, + { 6, "Hash based Filtering using BOB"}, + { 7, "Hash based Filtering using IPSX"}, + { 8, "Hash based Filtering using CRC"}, + { 0, NULL } }; static value_string_ext selector_algorithm_ext = VALUE_STRING_EXT_INIT(selector_algorithm); static const value_string performance_monitor_specials[] = { - { 0xFFFFFFFF, "Not Measured"}, - { 0xFFFF, "Not Measured"}, - { 0, NULL } + { 0xFFFFFFFF, "Not Measured"}, + { 0xFFFF, "Not Measured"}, + { 0, NULL } }; @@ -953,405 +949,405 @@ static const value_string performance_monitor_specials[] = { * wireshark tree identifiers */ -static int proto_netflow = -1; -static int ett_netflow = -1; -static int ett_unixtime = -1; -static int ett_flow = -1; -static int ett_flowtime = -1; -static int ett_str_len = -1; -static int ett_template = -1; -static int ett_field = -1; -static int ett_dataflowset = -1; -static int ett_fwdstat = -1; +static int proto_netflow = -1; +static int ett_netflow = -1; +static int ett_unixtime = -1; +static int ett_flow = -1; +static int ett_flowtime = -1; +static int ett_str_len = -1; +static int ett_template = -1; +static int ett_field = -1; +static int ett_dataflowset = -1; +static int ett_fwdstat = -1; /* * cflow header */ -static int hf_cflow_version = -1; -static int hf_cflow_count = -1; -static int hf_cflow_len = -1; -static int hf_cflow_sysuptime = -1; -static int hf_cflow_exporttime = -1; -static int hf_cflow_unix_secs = -1; -static int hf_cflow_unix_nsecs = -1; -static int hf_cflow_timestamp = -1; -static int hf_cflow_samplingmode = -1; -static int hf_cflow_samplerate = -1; +static int hf_cflow_version = -1; +static int hf_cflow_count = -1; +static int hf_cflow_len = -1; +static int hf_cflow_sysuptime = -1; +static int hf_cflow_exporttime = -1; +static int hf_cflow_unix_secs = -1; +static int hf_cflow_unix_nsecs = -1; +static int hf_cflow_timestamp = -1; +static int hf_cflow_samplingmode = -1; +static int hf_cflow_samplerate = -1; -static int hf_cflow_unknown_field_type = -1; +static int hf_cflow_unknown_field_type = -1; /* * cflow version specific info */ -static int hf_cflow_sequence = -1; -static int hf_cflow_engine_type = -1; -static int hf_cflow_engine_id = -1; -static int hf_cflow_source_id = -1; +static int hf_cflow_sequence = -1; +static int hf_cflow_engine_type = -1; +static int hf_cflow_engine_id = -1; +static int hf_cflow_source_id = -1; -static int hf_cflow_aggmethod = -1; -static int hf_cflow_aggversion = -1; +static int hf_cflow_aggmethod = -1; +static int hf_cflow_aggversion = -1; /* Version 9 */ -static int hf_cflow_flowset_id = -1; -static int hf_cflow_flowset_length = -1; -static int hf_cflow_template_id = -1; -static int hf_cflow_template_field_count = -1; -static int hf_cflow_template_field_type = -1; -static int hf_cflow_template_field_length = -1; -static int hf_cflow_option_scope_length = -1; -static int hf_cflow_option_length = -1; -static int hf_cflow_template_scope_field_type = -1; - -static int hf_cflow_scope_system = -1; -static int hf_cflow_scope_interface = -1; -static int hf_cflow_scope_linecard = -1; -static int hf_cflow_scope_cache = -1; -static int hf_cflow_scope_template = -1; +static int hf_cflow_flowset_id = -1; +static int hf_cflow_flowset_length = -1; +static int hf_cflow_template_id = -1; +static int hf_cflow_template_field_count = -1; +static int hf_cflow_template_field_type = -1; +static int hf_cflow_template_field_length = -1; +static int hf_cflow_option_scope_length = -1; +static int hf_cflow_option_length = -1; +static int hf_cflow_template_scope_field_type = -1; + +static int hf_cflow_scope_system = -1; +static int hf_cflow_scope_interface = -1; +static int hf_cflow_scope_linecard = -1; +static int hf_cflow_scope_cache = -1; +static int hf_cflow_scope_template = -1; /* IPFIX */ static int hf_cflow_template_ipfix_total_field_count = -1; static int hf_cflow_template_ipfix_scope_field_count = -1; -static int hf_cflow_template_ipfix_pen_provided = -1; -static int hf_cflow_template_ipfix_field_type = -1; -static int hf_cflow_template_ipfix_field_type_enterprise = -1; -static int hf_cflow_template_ipfix_field_pen = -1; +static int hf_cflow_template_ipfix_pen_provided = -1; +static int hf_cflow_template_ipfix_field_type = -1; +static int hf_cflow_template_ipfix_field_type_enterprise = -1; +static int hf_cflow_template_ipfix_field_pen = -1; /* IPFIX / vendor */ -static int hf_cflow_template_plixer_field_type = -1; -static int hf_cflow_template_ntop_field_type = -1; +static int hf_cflow_template_plixer_field_type = -1; +static int hf_cflow_template_ntop_field_type = -1; /* * pdu storage */ -static int hf_cflow_srcaddr = -1; -static int hf_cflow_srcaddr_v6 = -1; -static int hf_cflow_srcnet = -1; -static int hf_cflow_dstaddr = -1; -static int hf_cflow_dstaddr_v6 = -1; -static int hf_cflow_dstnet = -1; -static int hf_cflow_nexthop = -1; -static int hf_cflow_nexthop_v6 = -1; -static int hf_cflow_bgpnexthop = -1; -static int hf_cflow_bgpnexthop_v6 = -1; -static int hf_cflow_inputint = -1; -static int hf_cflow_outputint = -1; -static int hf_cflow_flows = -1; -static int hf_cflow_flows64 = -1; -static int hf_cflow_packets = -1; -static int hf_cflow_packets64 = -1; -static int hf_cflow_octets = -1; -static int hf_cflow_octets64 = -1; -static int hf_cflow_length_min = -1; -static int hf_cflow_length_max = -1; -static int hf_cflow_timedelta = -1; -static int hf_cflow_sys_init_time = -1; -static int hf_cflow_timestart = -1; -static int hf_cflow_timeend = -1; -static int hf_cflow_srcport = -1; -static int hf_cflow_dstport = -1; -static int hf_cflow_prot = -1; -static int hf_cflow_tos = -1; -static int hf_cflow_flags = -1; -static int hf_cflow_tcpflags = -1; -static int hf_cflow_dstas = -1; -static int hf_cflow_srcas = -1; -static int hf_cflow_dstmask = -1; -static int hf_cflow_dstmask_v6 = -1; -static int hf_cflow_srcmask = -1; -static int hf_cflow_srcmask_v6 = -1; -static int hf_cflow_routersc = -1; -static int hf_cflow_mulpackets = -1; -static int hf_cflow_muloctets = -1; -static int hf_cflow_octets_exp = -1; -static int hf_cflow_octets_exp64 = -1; -static int hf_cflow_packets_exp = -1; -static int hf_cflow_packets_exp64 = -1; -static int hf_cflow_flows_exp = -1; -static int hf_cflow_flows_exp64 = -1; -static int hf_cflow_srcprefix = -1; -static int hf_cflow_dstprefix = -1; -static int hf_cflow_flow_class = -1; -static int hf_cflow_ttl_minimum = -1; -static int hf_cflow_ttl_maximum = -1; -static int hf_cflow_ipv4_id = -1; -static int hf_cflow_ip_version = -1; -static int hf_cflow_icmp_type = -1; -static int hf_cflow_igmp_type = -1; -static int hf_cflow_sampling_interval = -1; -static int hf_cflow_sampling_algorithm = -1; -static int hf_cflow_flow_active_timeout = -1; -static int hf_cflow_flow_inactive_timeout = -1; -static int hf_cflow_mpls_top_label_type = -1; -static int hf_cflow_mpls_pe_addr = -1; -static int hf_cflow_sampler_id = -1; -static int hf_cflow_sampler_mode = -1; -static int hf_cflow_sampler_random_interval = -1; -static int hf_cflow_direction = -1; -static int hf_cflow_if_name = -1; -static int hf_cflow_if_descr = -1; -static int hf_cflow_sampler_name = -1; -static int hf_cflow_forwarding_status = -1; -static int hf_cflow_forwarding_status_unknown_code = -1; -static int hf_cflow_forwarding_status_forward_code = -1; -static int hf_cflow_forwarding_status_consume_code = -1; -static int hf_cflow_forwarding_status_drop_code = -1; -static int hf_cflow_nbar_appl_desc = -1; -static int hf_cflow_nbar_appl_id = -1; -static int hf_cflow_nbar_appl_name = -1; -static int hf_cflow_peer_srcas = -1; -static int hf_cflow_peer_dstas = -1; -static int hf_cflow_flow_exporter = -1; -static int hf_cflow_icmp_ipv4_type = -1; -static int hf_cflow_icmp_ipv4_code = -1; -static int hf_cflow_icmp_ipv6_type = -1; -static int hf_cflow_icmp_ipv6_code = -1; -static int hf_cflow_tcp_window_size = -1; -static int hf_cflow_ipv4_total_length = -1; -static int hf_cflow_ip_ttl = -1; -static int hf_cflow_ip_tos = -1; -static int hf_cflow_ip_dscp = -1; -static int hf_cflow_octets_squared64 = -1; -static int hf_cflow_udp_length = -1; -static int hf_cflow_is_multicast = -1; -static int hf_cflow_ip_header_words = -1; -static int hf_cflow_option_map = -1; -static int hf_cflow_section_header = -1; -static int hf_cflow_section_payload = -1; +static int hf_cflow_srcaddr = -1; +static int hf_cflow_srcaddr_v6 = -1; +static int hf_cflow_srcnet = -1; +static int hf_cflow_dstaddr = -1; +static int hf_cflow_dstaddr_v6 = -1; +static int hf_cflow_dstnet = -1; +static int hf_cflow_nexthop = -1; +static int hf_cflow_nexthop_v6 = -1; +static int hf_cflow_bgpnexthop = -1; +static int hf_cflow_bgpnexthop_v6 = -1; +static int hf_cflow_inputint = -1; +static int hf_cflow_outputint = -1; +static int hf_cflow_flows = -1; +static int hf_cflow_flows64 = -1; +static int hf_cflow_packets = -1; +static int hf_cflow_packets64 = -1; +static int hf_cflow_octets = -1; +static int hf_cflow_octets64 = -1; +static int hf_cflow_length_min = -1; +static int hf_cflow_length_max = -1; +static int hf_cflow_timedelta = -1; +static int hf_cflow_sys_init_time = -1; +static int hf_cflow_timestart = -1; +static int hf_cflow_timeend = -1; +static int hf_cflow_srcport = -1; +static int hf_cflow_dstport = -1; +static int hf_cflow_prot = -1; +static int hf_cflow_tos = -1; +static int hf_cflow_flags = -1; +static int hf_cflow_tcpflags = -1; +static int hf_cflow_dstas = -1; +static int hf_cflow_srcas = -1; +static int hf_cflow_dstmask = -1; +static int hf_cflow_dstmask_v6 = -1; +static int hf_cflow_srcmask = -1; +static int hf_cflow_srcmask_v6 = -1; +static int hf_cflow_routersc = -1; +static int hf_cflow_mulpackets = -1; +static int hf_cflow_muloctets = -1; +static int hf_cflow_octets_exp = -1; +static int hf_cflow_octets_exp64 = -1; +static int hf_cflow_packets_exp = -1; +static int hf_cflow_packets_exp64 = -1; +static int hf_cflow_flows_exp = -1; +static int hf_cflow_flows_exp64 = -1; +static int hf_cflow_srcprefix = -1; +static int hf_cflow_dstprefix = -1; +static int hf_cflow_flow_class = -1; +static int hf_cflow_ttl_minimum = -1; +static int hf_cflow_ttl_maximum = -1; +static int hf_cflow_ipv4_id = -1; +static int hf_cflow_ip_version = -1; +static int hf_cflow_icmp_type = -1; +static int hf_cflow_igmp_type = -1; +static int hf_cflow_sampling_interval = -1; +static int hf_cflow_sampling_algorithm = -1; +static int hf_cflow_flow_active_timeout = -1; +static int hf_cflow_flow_inactive_timeout = -1; +static int hf_cflow_mpls_top_label_type = -1; +static int hf_cflow_mpls_pe_addr = -1; +static int hf_cflow_sampler_id = -1; +static int hf_cflow_sampler_mode = -1; +static int hf_cflow_sampler_random_interval = -1; +static int hf_cflow_direction = -1; +static int hf_cflow_if_name = -1; +static int hf_cflow_if_descr = -1; +static int hf_cflow_sampler_name = -1; +static int hf_cflow_forwarding_status = -1; +static int hf_cflow_forwarding_status_unknown_code = -1; +static int hf_cflow_forwarding_status_forward_code = -1; +static int hf_cflow_forwarding_status_consume_code = -1; +static int hf_cflow_forwarding_status_drop_code = -1; +static int hf_cflow_nbar_appl_desc = -1; +static int hf_cflow_nbar_appl_id = -1; +static int hf_cflow_nbar_appl_name = -1; +static int hf_cflow_peer_srcas = -1; +static int hf_cflow_peer_dstas = -1; +static int hf_cflow_flow_exporter = -1; +static int hf_cflow_icmp_ipv4_type = -1; +static int hf_cflow_icmp_ipv4_code = -1; +static int hf_cflow_icmp_ipv6_type = -1; +static int hf_cflow_icmp_ipv6_code = -1; +static int hf_cflow_tcp_window_size = -1; +static int hf_cflow_ipv4_total_length = -1; +static int hf_cflow_ip_ttl = -1; +static int hf_cflow_ip_tos = -1; +static int hf_cflow_ip_dscp = -1; +static int hf_cflow_octets_squared64 = -1; +static int hf_cflow_udp_length = -1; +static int hf_cflow_is_multicast = -1; +static int hf_cflow_ip_header_words = -1; +static int hf_cflow_option_map = -1; +static int hf_cflow_section_header = -1; +static int hf_cflow_section_payload = -1; /* IPFIX (version 10) Information Elements */ -static int hf_cflow_post_octets = -1; -static int hf_cflow_post_octets64 = -1; -static int hf_cflow_post_packets = -1; -static int hf_cflow_post_packets64 = -1; -static int hf_cflow_ipv6_flowlabel = -1; -static int hf_cflow_ipv6_flowlabel24 = -1; -static int hf_cflow_post_tos = -1; -static int hf_cflow_srcmac = -1; -static int hf_cflow_post_dstmac = -1; -static int hf_cflow_vlanid = -1; -static int hf_cflow_post_vlanid = -1; -static int hf_cflow_ipv6_exthdr = -1; -static int hf_cflow_dstmac = -1; -static int hf_cflow_post_srcmac = -1; -static int hf_cflow_permanent_packets = -1; -static int hf_cflow_permanent_packets64 = -1; -static int hf_cflow_permanent_octets = -1; -static int hf_cflow_permanent_octets64 = -1; -static int hf_cflow_fragment_offset = -1; -static int hf_cflow_mpls_vpn_rd = -1; -static int hf_cflow_mpls_top_label_prefix_length = -1; /* ID: 91 */ -static int hf_cflow_post_ip_diff_serv_code_point = -1; /* ID: 98 */ -static int hf_cflow_multicast_replication_factor = -1; /* ID: 99 */ -static int hf_cflow_exporter_addr = -1; -static int hf_cflow_exporter_addr_v6 = -1; -static int hf_cflow_drop_octets = -1; -static int hf_cflow_drop_octets64 = -1; -static int hf_cflow_drop_packets = -1; -static int hf_cflow_drop_packets64 = -1; -static int hf_cflow_drop_total_octets = -1; -static int hf_cflow_drop_total_octets64 = -1; -static int hf_cflow_drop_total_packets = -1; -static int hf_cflow_drop_total_packets64 = -1; -static int hf_cflow_flow_end_reason = -1; -static int hf_cflow_common_properties_id = -1; -static int hf_cflow_observation_point_id = -1; -static int hf_cflow_mpls_pe_addr_v6 = -1; -static int hf_cflow_port_id = -1; -static int hf_cflow_mp_id = -1; -static int hf_cflow_wlan_channel_id = -1; -static int hf_cflow_wlan_ssid = -1; -static int hf_cflow_flow_id = -1; -static int hf_cflow_od_id = -1; -static int hf_cflow_abstimestart = -1; -static int hf_cflow_abstimeend = -1; -static int hf_cflow_dstnet_v6 = -1; -static int hf_cflow_srcnet_v6 = -1; -static int hf_cflow_ignore_packets = -1; -static int hf_cflow_ignore_packets64 = -1; -static int hf_cflow_ignore_octets = -1; -static int hf_cflow_ignore_octets64 = -1; -static int hf_cflow_notsent_flows = -1; -static int hf_cflow_notsent_flows64 = -1; -static int hf_cflow_notsent_packets = -1; -static int hf_cflow_notsent_packets64 = -1; -static int hf_cflow_notsent_octets = -1; -static int hf_cflow_notsent_octets64 = -1; -static int hf_cflow_post_total_octets = -1; -static int hf_cflow_post_total_octets64 = -1; -static int hf_cflow_post_total_packets = -1; -static int hf_cflow_post_total_packets64 = -1; -static int hf_cflow_key = -1; -static int hf_cflow_post_total_mulpackets = -1; -static int hf_cflow_post_total_mulpackets64 = -1; -static int hf_cflow_post_total_muloctets = -1; -static int hf_cflow_post_total_muloctets64 = -1; -static int hf_cflow_tcp_seq_num = -1; -static int hf_cflow_tcp_ack_num = -1; -static int hf_cflow_tcp_urg_ptr = -1; -static int hf_cflow_tcp_header_length = -1; -static int hf_cflow_ip_header_length = -1; -static int hf_cflow_ipv6_payload_length = -1; -static int hf_cflow_ipv6_next_hdr = -1; -static int hf_cflow_ip_precedence = -1; -static int hf_cflow_ip_fragment_flags = -1; -static int hf_cflow_mpls_top_label_ttl = -1; -static int hf_cflow_mpls_label_length = -1; -static int hf_cflow_mpls_label_depth = -1; -static int hf_cflow_mpls_top_label_exp = -1; -static int hf_cflow_ip_payload_length = -1; -static int hf_cflow_tcp_option_map = -1; -static int hf_cflow_collector_addr = -1; -static int hf_cflow_collector_addr_v6 = -1; -static int hf_cflow_export_interface = -1; -static int hf_cflow_export_protocol_version = -1; -static int hf_cflow_export_prot = -1; -static int hf_cflow_collector_port = -1; -static int hf_cflow_exporter_port = -1; -static int hf_cflow_total_tcp_syn = -1; -static int hf_cflow_total_tcp_fin = -1; -static int hf_cflow_total_tcp_rst = -1; -static int hf_cflow_total_tcp_psh = -1; -static int hf_cflow_total_tcp_ack = -1; -static int hf_cflow_total_tcp_urg = -1; -static int hf_cflow_ip_total_length = -1; -static int hf_cflow_post_natsource_ipv4_address = -1; /* ID: 225 */ -static int hf_cflow_post_natdestination_ipv4_address = -1; /* ID: 226 */ -static int hf_cflow_post_naptsource_transport_port = -1; /* ID: 227 */ -static int hf_cflow_post_naptdestination_transport_port = -1; /* ID: 228 */ -static int hf_cflow_nat_originating_address_realm = -1; /* ID: 229 */ -static int hf_cflow_nat_event = -1; /* ID: 230 */ -static int hf_cflow_initiator_octets = -1; /* ID: 231 */ -static int hf_cflow_responder_octets = -1; /* ID: 232 */ -static int hf_cflow_firewall_event = -1; /* ID: 233 */ -static int hf_cflow_ingress_vrfid = -1; /* ID: 234 */ -static int hf_cflow_egress_vrfid = -1; /* ID: 235 */ -static int hf_cflow_vrfname = -1; /* ID: 236 */ -static int hf_cflow_post_mpls_top_label_exp = -1; /* ID: 237 */ -static int hf_cflow_tcp_window_scale = -1; /* ID: 238 */ -static int hf_cflow_biflow_direction = -1; -static int hf_cflow_ethernet_header_length = -1; /* ID: 240 */ -static int hf_cflow_ethernet_payload_length = -1; /* ID: 241 */ -static int hf_cflow_ethernet_total_length = -1; /* ID: 242 */ -static int hf_cflow_dot1q_vlan_id = -1; /* ID: 243 */ -static int hf_cflow_dot1q_priority = -1; /* ID: 244 */ -static int hf_cflow_dot1q_customer_vlan_id = -1; /* ID: 245 */ -static int hf_cflow_dot1q_customer_priority = -1; /* ID: 246 */ -static int hf_cflow_metro_evc_id = -1; /* ID: 247 */ -static int hf_cflow_metro_evc_type = -1; /* ID: 248 */ -static int hf_cflow_pseudo_wire_id = -1; /* ID: 249 */ -static int hf_cflow_pseudo_wire_type = -1; /* ID: 250 */ -static int hf_cflow_pseudo_wire_control_word = -1; /* ID: 251 */ -static int hf_cflow_ingress_physical_interface = -1; /* ID: 252 */ -static int hf_cflow_egress_physical_interface = -1; /* ID: 253 */ -static int hf_cflow_post_dot1q_vlan_id = -1; /* ID: 254 */ -static int hf_cflow_post_dot1q_customer_vlan_id = -1; /* ID: 255 */ -static int hf_cflow_ethernet_type = -1; /* ID: 256 */ -static int hf_cflow_post_ip_precedence = -1; /* ID: 257 */ -static int hf_cflow_collection_time_milliseconds = -1; /* ID: 258 */ -static int hf_cflow_export_sctp_stream_id = -1; /* ID: 259 */ -static int hf_cflow_max_export_seconds = -1; /* ID: 260 */ -static int hf_cflow_max_flow_end_seconds = -1; /* ID: 261 */ -static int hf_cflow_message_md5_checksum = -1; /* ID: 262 */ -static int hf_cflow_message_scope = -1; /* ID: 263 */ -static int hf_cflow_min_export_seconds = -1; /* ID: 264 */ -static int hf_cflow_min_flow_start_seconds = -1; /* ID: 265 */ -static int hf_cflow_opaque_octets = -1; /* ID: 266 */ -static int hf_cflow_session_scope = -1; /* ID: 267 */ -static int hf_cflow_max_flow_end_microseconds = -1; /* ID: 268 */ -static int hf_cflow_max_flow_end_milliseconds = -1; /* ID: 269 */ -static int hf_cflow_max_flow_end_nanoseconds = -1; /* ID: 270 */ -static int hf_cflow_min_flow_start_microseconds = -1; /* ID: 271 */ -static int hf_cflow_min_flow_start_milliseconds = -1; /* ID: 272 */ -static int hf_cflow_min_flow_start_nanoseconds = -1; /* ID: 273 */ -static int hf_cflow_collector_certificate = -1; /* ID: 274 */ -static int hf_cflow_exporter_certificate = -1; /* ID: 275 */ -static int hf_cflow_selection_sequence_id = -1; /* ID: 301 */ -static int hf_cflow_selector_id = -1; /* ID: 302 */ -static int hf_cflow_information_element_id = -1; /* ID: 303 */ -static int hf_cflow_selector_algorithm = -1; /* ID: 304 */ -static int hf_cflow_sampling_packet_interval = -1; /* ID: 305 */ -static int hf_cflow_sampling_packet_space = -1; /* ID: 306 */ -static int hf_cflow_sampling_time_interval = -1; /* ID: 307 */ -static int hf_cflow_sampling_time_space = -1; /* ID: 308 */ -static int hf_cflow_sampling_size = -1; /* ID: 309 */ -static int hf_cflow_sampling_population = -1; /* ID: 310 */ -static int hf_cflow_sampling_probability = -1; /* ID: 311 */ -static int hf_cflow_mpls_label_stack_section = -1; /* ID: 316 */ -static int hf_cflow_mpls_payload_packet_section = -1; /* ID: 317 */ -static int hf_cflow_selector_id_total_pkts_observed = -1; /* ID: 318 */ -static int hf_cflow_selector_id_total_pkts_selected = -1; /* ID: 319 */ -static int hf_cflow_absolute_error = -1; /* ID: 320 */ -static int hf_cflow_relative_error = -1; /* ID: 321 */ -static int hf_cflow_observation_time_seconds = -1; /* ID: 322 */ -static int hf_cflow_observation_time_milliseconds = -1; /* ID: 323 */ -static int hf_cflow_observation_time_microseconds = -1; /* ID: 324 */ -static int hf_cflow_observation_time_nanoseconds = -1; /* ID: 325 */ -static int hf_cflow_digest_hash_value = -1; /* ID: 326 */ -static int hf_cflow_hash_ippayload_offset = -1; /* ID: 327 */ -static int hf_cflow_hash_ippayload_size = -1; /* ID: 328 */ -static int hf_cflow_hash_output_range_min = -1; /* ID: 329 */ -static int hf_cflow_hash_output_range_max = -1; /* ID: 330 */ -static int hf_cflow_hash_selected_range_min = -1; /* ID: 331 */ -static int hf_cflow_hash_selected_range_max = -1; /* ID: 332 */ -static int hf_cflow_hash_digest_output = -1; /* ID: 333 */ -static int hf_cflow_hash_initialiser_value = -1; /* ID: 334 */ -static int hf_cflow_selector_name = -1; /* ID: 335 */ -static int hf_cflow_upper_cilimit = -1; /* ID: 336 */ -static int hf_cflow_lower_cilimit = -1; /* ID: 337 */ -static int hf_cflow_confidence_level = -1; /* ID: 338 */ -static int hf_cflow_information_element_data_type = -1; /* ID: 339 */ -static int hf_cflow_information_element_description = -1; /* ID: 340 */ -static int hf_cflow_information_element_name = -1; /* ID: 341 */ -static int hf_cflow_information_element_range_begin = -1; /* ID: 342 */ -static int hf_cflow_information_element_range_end = -1; /* ID: 343 */ -static int hf_cflow_information_element_semantics = -1; /* ID: 344 */ -static int hf_cflow_information_element_units = -1; /* ID: 345 */ -static int hf_cflow_private_enterprise_number = -1; /* ID: 346 */ -static int hf_cflow_packets_dropped = -1; /* ID: 37000 */ -static int hf_cflow_byte_rate = -1; /* ID: 37003 */ -static int hf_cflow_application_media_bytes = -1; /* ID: 37004 */ -static int hf_cflow_application_media_byte_rate = -1; /* ID: 37006 */ -static int hf_cflow_application_media_packets = -1; /* ID: 37007 */ -static int hf_cflow_application_media_packet_rate = -1; /* ID: 37009 */ -static int hf_cflow_application_media_event = -1; /* ID: 37011 */ -static int hf_cflow_monitor_event = -1; /* ID: 37012 */ -static int hf_cflow_timestamp_interval = -1; /* ID: 37013 */ -static int hf_cflow_transport_packets_expected = -1; /* ID: 37014 */ -static int hf_cflow_transport_round_trip_time = -1; /* ID: 37016 */ -static int hf_cflow_transport_round_trip_time_string = -1; /* ID: 37016 */ -static int hf_cflow_transport_event_packet_loss = -1; /* ID: 37017 */ -static int hf_cflow_transport_packets_lost = -1; /* ID: 37019 */ -static int hf_cflow_transport_packets_lost_string = -1; /* ID: 37019 */ -static int hf_cflow_transport_packets_lost_rate = -1; /* ID: 37021 */ -static int hf_cflow_transport_packets_lost_rate_string = -1; /* ID: 37021 */ -static int hf_cflow_transport_rtp_ssrc = -1; /* ID: 37022 */ -static int hf_cflow_transport_rtp_jitter_mean = -1; /* ID: 37023 */ -static int hf_cflow_transport_rtp_jitter_mean_string = -1; /* ID: 37023 */ -static int hf_cflow_transport_rtp_jitter_min = -1; /* ID: 37024 */ -static int hf_cflow_transport_rtp_jitter_min_string = -1; /* ID: 37024 */ -static int hf_cflow_transport_rtp_jitter_max = -1; /* ID: 37025 */ -static int hf_cflow_transport_rtp_jitter_max_string = -1; /* ID: 37025 */ +static int hf_cflow_post_octets = -1; +static int hf_cflow_post_octets64 = -1; +static int hf_cflow_post_packets = -1; +static int hf_cflow_post_packets64 = -1; +static int hf_cflow_ipv6_flowlabel = -1; +static int hf_cflow_ipv6_flowlabel24 = -1; +static int hf_cflow_post_tos = -1; +static int hf_cflow_srcmac = -1; +static int hf_cflow_post_dstmac = -1; +static int hf_cflow_vlanid = -1; +static int hf_cflow_post_vlanid = -1; +static int hf_cflow_ipv6_exthdr = -1; +static int hf_cflow_dstmac = -1; +static int hf_cflow_post_srcmac = -1; +static int hf_cflow_permanent_packets = -1; +static int hf_cflow_permanent_packets64 = -1; +static int hf_cflow_permanent_octets = -1; +static int hf_cflow_permanent_octets64 = -1; +static int hf_cflow_fragment_offset = -1; +static int hf_cflow_mpls_vpn_rd = -1; +static int hf_cflow_mpls_top_label_prefix_length = -1; /* ID: 91 */ +static int hf_cflow_post_ip_diff_serv_code_point = -1; /* ID: 98 */ +static int hf_cflow_multicast_replication_factor = -1; /* ID: 99 */ +static int hf_cflow_exporter_addr = -1; +static int hf_cflow_exporter_addr_v6 = -1; +static int hf_cflow_drop_octets = -1; +static int hf_cflow_drop_octets64 = -1; +static int hf_cflow_drop_packets = -1; +static int hf_cflow_drop_packets64 = -1; +static int hf_cflow_drop_total_octets = -1; +static int hf_cflow_drop_total_octets64 = -1; +static int hf_cflow_drop_total_packets = -1; +static int hf_cflow_drop_total_packets64 = -1; +static int hf_cflow_flow_end_reason = -1; +static int hf_cflow_common_properties_id = -1; +static int hf_cflow_observation_point_id = -1; +static int hf_cflow_mpls_pe_addr_v6 = -1; +static int hf_cflow_port_id = -1; +static int hf_cflow_mp_id = -1; +static int hf_cflow_wlan_channel_id = -1; +static int hf_cflow_wlan_ssid = -1; +static int hf_cflow_flow_id = -1; +static int hf_cflow_od_id = -1; +static int hf_cflow_abstimestart = -1; +static int hf_cflow_abstimeend = -1; +static int hf_cflow_dstnet_v6 = -1; +static int hf_cflow_srcnet_v6 = -1; +static int hf_cflow_ignore_packets = -1; +static int hf_cflow_ignore_packets64 = -1; +static int hf_cflow_ignore_octets = -1; +static int hf_cflow_ignore_octets64 = -1; +static int hf_cflow_notsent_flows = -1; +static int hf_cflow_notsent_flows64 = -1; +static int hf_cflow_notsent_packets = -1; +static int hf_cflow_notsent_packets64 = -1; +static int hf_cflow_notsent_octets = -1; +static int hf_cflow_notsent_octets64 = -1; +static int hf_cflow_post_total_octets = -1; +static int hf_cflow_post_total_octets64 = -1; +static int hf_cflow_post_total_packets = -1; +static int hf_cflow_post_total_packets64 = -1; +static int hf_cflow_key = -1; +static int hf_cflow_post_total_mulpackets = -1; +static int hf_cflow_post_total_mulpackets64 = -1; +static int hf_cflow_post_total_muloctets = -1; +static int hf_cflow_post_total_muloctets64 = -1; +static int hf_cflow_tcp_seq_num = -1; +static int hf_cflow_tcp_ack_num = -1; +static int hf_cflow_tcp_urg_ptr = -1; +static int hf_cflow_tcp_header_length = -1; +static int hf_cflow_ip_header_length = -1; +static int hf_cflow_ipv6_payload_length = -1; +static int hf_cflow_ipv6_next_hdr = -1; +static int hf_cflow_ip_precedence = -1; +static int hf_cflow_ip_fragment_flags = -1; +static int hf_cflow_mpls_top_label_ttl = -1; +static int hf_cflow_mpls_label_length = -1; +static int hf_cflow_mpls_label_depth = -1; +static int hf_cflow_mpls_top_label_exp = -1; +static int hf_cflow_ip_payload_length = -1; +static int hf_cflow_tcp_option_map = -1; +static int hf_cflow_collector_addr = -1; +static int hf_cflow_collector_addr_v6 = -1; +static int hf_cflow_export_interface = -1; +static int hf_cflow_export_protocol_version = -1; +static int hf_cflow_export_prot = -1; +static int hf_cflow_collector_port = -1; +static int hf_cflow_exporter_port = -1; +static int hf_cflow_total_tcp_syn = -1; +static int hf_cflow_total_tcp_fin = -1; +static int hf_cflow_total_tcp_rst = -1; +static int hf_cflow_total_tcp_psh = -1; +static int hf_cflow_total_tcp_ack = -1; +static int hf_cflow_total_tcp_urg = -1; +static int hf_cflow_ip_total_length = -1; +static int hf_cflow_post_natsource_ipv4_address = -1; /* ID: 225 */ +static int hf_cflow_post_natdestination_ipv4_address = -1; /* ID: 226 */ +static int hf_cflow_post_naptsource_transport_port = -1; /* ID: 227 */ +static int hf_cflow_post_naptdestination_transport_port = -1; /* ID: 228 */ +static int hf_cflow_nat_originating_address_realm = -1; /* ID: 229 */ +static int hf_cflow_nat_event = -1; /* ID: 230 */ +static int hf_cflow_initiator_octets = -1; /* ID: 231 */ +static int hf_cflow_responder_octets = -1; /* ID: 232 */ +static int hf_cflow_firewall_event = -1; /* ID: 233 */ +static int hf_cflow_ingress_vrfid = -1; /* ID: 234 */ +static int hf_cflow_egress_vrfid = -1; /* ID: 235 */ +static int hf_cflow_vrfname = -1; /* ID: 236 */ +static int hf_cflow_post_mpls_top_label_exp = -1; /* ID: 237 */ +static int hf_cflow_tcp_window_scale = -1; /* ID: 238 */ +static int hf_cflow_biflow_direction = -1; +static int hf_cflow_ethernet_header_length = -1; /* ID: 240 */ +static int hf_cflow_ethernet_payload_length = -1; /* ID: 241 */ +static int hf_cflow_ethernet_total_length = -1; /* ID: 242 */ +static int hf_cflow_dot1q_vlan_id = -1; /* ID: 243 */ +static int hf_cflow_dot1q_priority = -1; /* ID: 244 */ +static int hf_cflow_dot1q_customer_vlan_id = -1; /* ID: 245 */ +static int hf_cflow_dot1q_customer_priority = -1; /* ID: 246 */ +static int hf_cflow_metro_evc_id = -1; /* ID: 247 */ +static int hf_cflow_metro_evc_type = -1; /* ID: 248 */ +static int hf_cflow_pseudo_wire_id = -1; /* ID: 249 */ +static int hf_cflow_pseudo_wire_type = -1; /* ID: 250 */ +static int hf_cflow_pseudo_wire_control_word = -1; /* ID: 251 */ +static int hf_cflow_ingress_physical_interface = -1; /* ID: 252 */ +static int hf_cflow_egress_physical_interface = -1; /* ID: 253 */ +static int hf_cflow_post_dot1q_vlan_id = -1; /* ID: 254 */ +static int hf_cflow_post_dot1q_customer_vlan_id = -1; /* ID: 255 */ +static int hf_cflow_ethernet_type = -1; /* ID: 256 */ +static int hf_cflow_post_ip_precedence = -1; /* ID: 257 */ +static int hf_cflow_collection_time_milliseconds = -1; /* ID: 258 */ +static int hf_cflow_export_sctp_stream_id = -1; /* ID: 259 */ +static int hf_cflow_max_export_seconds = -1; /* ID: 260 */ +static int hf_cflow_max_flow_end_seconds = -1; /* ID: 261 */ +static int hf_cflow_message_md5_checksum = -1; /* ID: 262 */ +static int hf_cflow_message_scope = -1; /* ID: 263 */ +static int hf_cflow_min_export_seconds = -1; /* ID: 264 */ +static int hf_cflow_min_flow_start_seconds = -1; /* ID: 265 */ +static int hf_cflow_opaque_octets = -1; /* ID: 266 */ +static int hf_cflow_session_scope = -1; /* ID: 267 */ +static int hf_cflow_max_flow_end_microseconds = -1; /* ID: 268 */ +static int hf_cflow_max_flow_end_milliseconds = -1; /* ID: 269 */ +static int hf_cflow_max_flow_end_nanoseconds = -1; /* ID: 270 */ +static int hf_cflow_min_flow_start_microseconds = -1; /* ID: 271 */ +static int hf_cflow_min_flow_start_milliseconds = -1; /* ID: 272 */ +static int hf_cflow_min_flow_start_nanoseconds = -1; /* ID: 273 */ +static int hf_cflow_collector_certificate = -1; /* ID: 274 */ +static int hf_cflow_exporter_certificate = -1; /* ID: 275 */ +static int hf_cflow_selection_sequence_id = -1; /* ID: 301 */ +static int hf_cflow_selector_id = -1; /* ID: 302 */ +static int hf_cflow_information_element_id = -1; /* ID: 303 */ +static int hf_cflow_selector_algorithm = -1; /* ID: 304 */ +static int hf_cflow_sampling_packet_interval = -1; /* ID: 305 */ +static int hf_cflow_sampling_packet_space = -1; /* ID: 306 */ +static int hf_cflow_sampling_time_interval = -1; /* ID: 307 */ +static int hf_cflow_sampling_time_space = -1; /* ID: 308 */ +static int hf_cflow_sampling_size = -1; /* ID: 309 */ +static int hf_cflow_sampling_population = -1; /* ID: 310 */ +static int hf_cflow_sampling_probability = -1; /* ID: 311 */ +static int hf_cflow_mpls_label_stack_section = -1; /* ID: 316 */ +static int hf_cflow_mpls_payload_packet_section = -1; /* ID: 317 */ +static int hf_cflow_selector_id_total_pkts_observed = -1; /* ID: 318 */ +static int hf_cflow_selector_id_total_pkts_selected = -1; /* ID: 319 */ +static int hf_cflow_absolute_error = -1; /* ID: 320 */ +static int hf_cflow_relative_error = -1; /* ID: 321 */ +static int hf_cflow_observation_time_seconds = -1; /* ID: 322 */ +static int hf_cflow_observation_time_milliseconds = -1; /* ID: 323 */ +static int hf_cflow_observation_time_microseconds = -1; /* ID: 324 */ +static int hf_cflow_observation_time_nanoseconds = -1; /* ID: 325 */ +static int hf_cflow_digest_hash_value = -1; /* ID: 326 */ +static int hf_cflow_hash_ippayload_offset = -1; /* ID: 327 */ +static int hf_cflow_hash_ippayload_size = -1; /* ID: 328 */ +static int hf_cflow_hash_output_range_min = -1; /* ID: 329 */ +static int hf_cflow_hash_output_range_max = -1; /* ID: 330 */ +static int hf_cflow_hash_selected_range_min = -1; /* ID: 331 */ +static int hf_cflow_hash_selected_range_max = -1; /* ID: 332 */ +static int hf_cflow_hash_digest_output = -1; /* ID: 333 */ +static int hf_cflow_hash_initialiser_value = -1; /* ID: 334 */ +static int hf_cflow_selector_name = -1; /* ID: 335 */ +static int hf_cflow_upper_cilimit = -1; /* ID: 336 */ +static int hf_cflow_lower_cilimit = -1; /* ID: 337 */ +static int hf_cflow_confidence_level = -1; /* ID: 338 */ +static int hf_cflow_information_element_data_type = -1; /* ID: 339 */ +static int hf_cflow_information_element_description = -1; /* ID: 340 */ +static int hf_cflow_information_element_name = -1; /* ID: 341 */ +static int hf_cflow_information_element_range_begin = -1; /* ID: 342 */ +static int hf_cflow_information_element_range_end = -1; /* ID: 343 */ +static int hf_cflow_information_element_semantics = -1; /* ID: 344 */ +static int hf_cflow_information_element_units = -1; /* ID: 345 */ +static int hf_cflow_private_enterprise_number = -1; /* ID: 346 */ +static int hf_cflow_packets_dropped = -1; /* ID: 37000 */ +static int hf_cflow_byte_rate = -1; /* ID: 37003 */ +static int hf_cflow_application_media_bytes = -1; /* ID: 37004 */ +static int hf_cflow_application_media_byte_rate = -1; /* ID: 37006 */ +static int hf_cflow_application_media_packets = -1; /* ID: 37007 */ +static int hf_cflow_application_media_packet_rate = -1; /* ID: 37009 */ +static int hf_cflow_application_media_event = -1; /* ID: 37011 */ +static int hf_cflow_monitor_event = -1; /* ID: 37012 */ +static int hf_cflow_timestamp_interval = -1; /* ID: 37013 */ +static int hf_cflow_transport_packets_expected = -1; /* ID: 37014 */ +static int hf_cflow_transport_round_trip_time = -1; /* ID: 37016 */ +static int hf_cflow_transport_round_trip_time_string = -1; /* ID: 37016 */ +static int hf_cflow_transport_event_packet_loss = -1; /* ID: 37017 */ +static int hf_cflow_transport_packets_lost = -1; /* ID: 37019 */ +static int hf_cflow_transport_packets_lost_string = -1; /* ID: 37019 */ +static int hf_cflow_transport_packets_lost_rate = -1; /* ID: 37021 */ +static int hf_cflow_transport_packets_lost_rate_string = -1; /* ID: 37021 */ +static int hf_cflow_transport_rtp_ssrc = -1; /* ID: 37022 */ +static int hf_cflow_transport_rtp_jitter_mean = -1; /* ID: 37023 */ +static int hf_cflow_transport_rtp_jitter_mean_string = -1; /* ID: 37023 */ +static int hf_cflow_transport_rtp_jitter_min = -1; /* ID: 37024 */ +static int hf_cflow_transport_rtp_jitter_min_string = -1; /* ID: 37024 */ +static int hf_cflow_transport_rtp_jitter_max = -1; /* ID: 37025 */ +static int hf_cflow_transport_rtp_jitter_max_string = -1; /* ID: 37025 */ /* Ericsson SE NAT Logging */ -static int hf_cflow_nat_context_id = -1; /* ID: 24628 */ -static int hf_cflow_nat_context_name = -1; /* ID: 24629 */ -static int hf_cflow_nat_assign_time = -1; /* ID: 24630 */ -static int hf_cflow_nat_unassign_time = -1; /* ID: 24631 */ -static int hf_cflow_nat_int_addr = -1; /* ID: 24632 */ -static int hf_cflow_nat_ext_addr = -1; /* ID: 24633 */ -static int hf_cflow_nat_ext_port_first = -1; /* ID: 24634 */ -static int hf_cflow_nat_ext_port_last = -1; /* ID: 24635 */ +static int hf_cflow_nat_context_id = -1; /* ID: 24628 */ +static int hf_cflow_nat_context_name = -1; /* ID: 24629 */ +static int hf_cflow_nat_assign_time = -1; /* ID: 24630 */ +static int hf_cflow_nat_unassign_time = -1; /* ID: 24631 */ +static int hf_cflow_nat_int_addr = -1; /* ID: 24632 */ +static int hf_cflow_nat_ext_addr = -1; /* ID: 24633 */ +static int hf_cflow_nat_ext_port_first = -1; /* ID: 24634 */ +static int hf_cflow_nat_ext_port_last = -1; /* ID: 24635 */ /* Cisco ASA 5500 Series */ -static int hf_cflow_ingress_acl_id = -1; /* NF_F_INGRESS_ACL_ID (33000) */ -static int hf_cflow_egress_acl_id = -1; /* NF_F_EGRESS_ACL_ID (33001) */ -static int hf_cflow_fw_ext_event = -1; /* NF_F_FW_EXT_EVENT (33002) */ -static int hf_cflow_aaa_username = -1; /* NF_F_USERNAME[_MAX] (40000) */ +static int hf_cflow_ingress_acl_id = -1; /* NF_F_INGRESS_ACL_ID (33000) */ +static int hf_cflow_egress_acl_id = -1; /* NF_F_EGRESS_ACL_ID (33001) */ +static int hf_cflow_fw_ext_event = -1; /* NF_F_FW_EXT_EVENT (33002) */ +static int hf_cflow_aaa_username = -1; /* NF_F_USERNAME[_MAX] (40000) */ -static int hf_ipfix_enterprise_private_entry = -1; +static int hf_ipfix_enterprise_private_entry = -1; /* pie = private information element */ @@ -1370,488 +1366,482 @@ static int hf_pie_cace_local_username = -1; static int hf_pie_cace_local_cmd_len = -1; static int hf_pie_cace_local_cmd = -1; -static int hf_pie_ntop_fragmented = -1; -static int hf_pie_ntop_fingerprint = -1; -static int hf_pie_ntop_client_nw_delay_sec = -1; +static int hf_pie_ntop_fragmented = -1; +static int hf_pie_ntop_fingerprint = -1; +static int hf_pie_ntop_client_nw_delay_sec = -1; static int hf_pie_ntop_client_nw_delay_usec = -1; -static int hf_pie_ntop_server_nw_delay_sec = -1; +static int hf_pie_ntop_server_nw_delay_sec = -1; static int hf_pie_ntop_server_nw_delay_usec = -1; -static int hf_pie_ntop_appl_latency_sec = -1; -static int hf_pie_ntop_icmp_flags = -1; -static int hf_pie_ntop_src_ip_country = -1; -static int hf_pie_ntop_src_ip_city = -1; -static int hf_pie_ntop_dst_ip_country = -1; -static int hf_pie_ntop_dst_ip_city = -1; -static int hf_pie_ntop_flow_proto_port = -1; - -static int hf_pie_ntop_longest_flow_pkt = -1; -static int hf_pie_ntop_ooorder_in_pkts = -1; -static int hf_pie_ntop_ooorder_out_pkts = -1; +static int hf_pie_ntop_appl_latency_sec = -1; +static int hf_pie_ntop_icmp_flags = -1; +static int hf_pie_ntop_src_ip_country = -1; +static int hf_pie_ntop_src_ip_city = -1; +static int hf_pie_ntop_dst_ip_country = -1; +static int hf_pie_ntop_dst_ip_city = -1; +static int hf_pie_ntop_flow_proto_port = -1; + +static int hf_pie_ntop_longest_flow_pkt = -1; +static int hf_pie_ntop_ooorder_in_pkts = -1; +static int hf_pie_ntop_ooorder_out_pkts = -1; static int hf_pie_ntop_retransmitted_in_pkts = -1; static int hf_pie_ntop_retransmitted_out_pkts = -1; -static int hf_pie_ntop_shortest_flow_pkt = -1; -static int hf_pie_ntop_tunnel_id = -1; +static int hf_pie_ntop_shortest_flow_pkt = -1; +static int hf_pie_ntop_tunnel_id = -1; static int hf_pie_ntop_untunneled_ipv4_dst_addr = -1; static int hf_pie_ntop_untunneled_ipv4_src_addr = -1; static int hf_pie_ntop_untunneled_l4_dst_port = -1; static int hf_pie_ntop_untunneled_l4_src_port = -1; -static int hf_pie_ntop_untunneled_protocol = -1; - -static int hf_pie_ntop_dump_path = -1; -static int hf_pie_ntop_sip_call_id = -1; -static int hf_pie_ntop_sip_calling_party = -1; -static int hf_pie_ntop_sip_called_party = -1; -static int hf_pie_ntop_sip_rtp_codecs = -1; -static int hf_pie_ntop_sip_invite_time = -1; -static int hf_pie_ntop_sip_trying_time = -1; -static int hf_pie_ntop_sip_ringing_time = -1; -static int hf_pie_ntop_sip_ok_time = -1; -static int hf_pie_ntop_sip_bye_time = -1; -static int hf_pie_ntop_sip_rtp_src_ip = -1; -static int hf_pie_ntop_sip_rtp_src_port = -1; -static int hf_pie_ntop_sip_rtp_dst_ip = -1; -static int hf_pie_ntop_sip_rtp_dst_port = -1; -static int hf_pie_ntop_rtp_first_ssrc = -1; -static int hf_pie_ntop_rtp_first_ts = -1; -static int hf_pie_ntop_rtp_last_ssrc = -1; -static int hf_pie_ntop_rtp_last_ts = -1; -static int hf_pie_ntop_rtp_in_jitter = -1; -static int hf_pie_ntop_rtp_out_jitter = -1; -static int hf_pie_ntop_rtp_in_pkt_lost = -1; -static int hf_pie_ntop_rtp_out_pkt_lost = -1; +static int hf_pie_ntop_untunneled_protocol = -1; + +static int hf_pie_ntop_dump_path = -1; +static int hf_pie_ntop_sip_call_id = -1; +static int hf_pie_ntop_sip_calling_party = -1; +static int hf_pie_ntop_sip_called_party = -1; +static int hf_pie_ntop_sip_rtp_codecs = -1; +static int hf_pie_ntop_sip_invite_time = -1; +static int hf_pie_ntop_sip_trying_time = -1; +static int hf_pie_ntop_sip_ringing_time = -1; +static int hf_pie_ntop_sip_ok_time = -1; +static int hf_pie_ntop_sip_bye_time = -1; +static int hf_pie_ntop_sip_rtp_src_ip = -1; +static int hf_pie_ntop_sip_rtp_src_port = -1; +static int hf_pie_ntop_sip_rtp_dst_ip = -1; +static int hf_pie_ntop_sip_rtp_dst_port = -1; +static int hf_pie_ntop_rtp_first_ssrc = -1; +static int hf_pie_ntop_rtp_first_ts = -1; +static int hf_pie_ntop_rtp_last_ssrc = -1; +static int hf_pie_ntop_rtp_last_ts = -1; +static int hf_pie_ntop_rtp_in_jitter = -1; +static int hf_pie_ntop_rtp_out_jitter = -1; +static int hf_pie_ntop_rtp_in_pkt_lost = -1; +static int hf_pie_ntop_rtp_out_pkt_lost = -1; static int hf_pie_ntop_rtp_out_payload_type = -1; -static int hf_pie_ntop_rtp_in_max_delta = -1; -static int hf_pie_ntop_rtp_out_max_delta = -1; -static int hf_pie_ntop_proc_id = -1; -static int hf_pie_ntop_proc_name = -1; -static int hf_pie_ntop_http_url = -1; -static int hf_pie_ntop_http_ret_code = -1; -static int hf_pie_ntop_smtp_mail_from = -1; -static int hf_pie_ntop_smtp_rcpt_to = -1; +static int hf_pie_ntop_rtp_in_max_delta = -1; +static int hf_pie_ntop_rtp_out_max_delta = -1; +static int hf_pie_ntop_proc_id = -1; +static int hf_pie_ntop_proc_name = -1; +static int hf_pie_ntop_http_url = -1; +static int hf_pie_ntop_http_ret_code = -1; +static int hf_pie_ntop_smtp_mail_from = -1; +static int hf_pie_ntop_smtp_rcpt_to = -1; static int hf_pie_ntop_mysql_server_version = -1; -static int hf_pie_ntop_mysql_username = -1; -static int hf_pie_ntop_mysql_db = -1; -static int hf_pie_ntop_mysql_query = -1; -static int hf_pie_ntop_mysql_response = -1; - -static int hf_pie_plixer_client_ip_v4 = -1; -static int hf_pie_plixer_client_hostname = -1; /* string */ -static int hf_pie_plixer_partner_name = -1; /* string */ -static int hf_pie_plixer_server_hostname = -1; /* string */ -static int hf_pie_plixer_server_ip_v4 = -1; -static int hf_pie_plixer_recipient_address = -1; /* string */ -static int hf_pie_plixer_event_id = -1; -static int hf_pie_plixer_msgid = -1; /* string */ - -static int hf_pie_plixer_priority = -1; +static int hf_pie_ntop_mysql_username = -1; +static int hf_pie_ntop_mysql_db = -1; +static int hf_pie_ntop_mysql_query = -1; +static int hf_pie_ntop_mysql_response = -1; + +static int hf_pie_plixer_client_ip_v4 = -1; +static int hf_pie_plixer_client_hostname = -1; /* string */ +static int hf_pie_plixer_partner_name = -1; /* string */ +static int hf_pie_plixer_server_hostname = -1; /* string */ +static int hf_pie_plixer_server_ip_v4 = -1; +static int hf_pie_plixer_recipient_address = -1; /* string */ +static int hf_pie_plixer_event_id = -1; +static int hf_pie_plixer_msgid = -1; /* string */ + +static int hf_pie_plixer_priority = -1; static int hf_pie_plixer_recipient_report_status = -1; -static int hf_pie_plixer_number_recipients = -1; -static int hf_pie_plixer_origination_time = -1; -static int hf_pie_plixer_encryption = -1; /* string */ -static int hf_pie_plixer_service_version = -1; /* string */ -static int hf_pie_plixer_linked_msgid = -1; /* string */ -static int hf_pie_plixer_message_subject = -1; /* string */ -static int hf_pie_plixer_sender_address = -1; /* string */ -static int hf_pie_plixer_date_time = -1; - -static int hf_string_len_short = -1; +static int hf_pie_plixer_number_recipients = -1; +static int hf_pie_plixer_origination_time = -1; +static int hf_pie_plixer_encryption = -1; /* string */ +static int hf_pie_plixer_service_version = -1; /* string */ +static int hf_pie_plixer_linked_msgid = -1; /* string */ +static int hf_pie_plixer_message_subject = -1; /* string */ +static int hf_pie_plixer_sender_address = -1; /* string */ +static int hf_pie_plixer_date_time = -1; + +static int hf_string_len_short = -1; static int hf_string_len_long = -1; static const value_string special_mpls_top_label_type[] = { - {0, "Unknown"}, - {1, "TE-MIDPT"}, - {2, "ATOM"}, - {3, "VPN"}, - {4, "BGP"}, - {5, "LDP"}, - {0, NULL } + {0, "Unknown"}, + {1, "TE-MIDPT"}, + {2, "ATOM"}, + {3, "VPN"}, + {4, "BGP"}, + {5, "LDP"}, + {0, NULL } }; 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); - 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 { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "MPLS-Label%d: bad length %d", level, length); - } - return ti; + 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); + 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 { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "MPLS-Label%d: bad length %d", level, length); + } + return ti; } static void nbar_fmt_id(gchar *result, guint32 nbar_id) { - guint32 nbar_id_type = (nbar_id>>24)&0xFF; - nbar_id &= 0xFFFFFF; + guint32 nbar_id_type = (nbar_id>>24)&0xFF; + nbar_id &= 0xFFFFFF; - g_snprintf(result, ITEM_LABEL_LENGTH, - "NBAR Application ID: %d:%d (type:id)", nbar_id_type, nbar_id); + g_snprintf(result, ITEM_LABEL_LENGTH, + "NBAR Application ID: %d:%d (type:id)", nbar_id_type, nbar_id); } -void proto_reg_handoff_netflow(void); +void proto_reg_handoff_netflow(void); typedef struct _hdrinfo_t { - guint8 vspec; - guint32 src_id; /* SourceID in NetFlow V9, Observation Domain ID in IPFIX */ - address net_src; - time_t export_time_secs; /* secs since epoch */ + guint8 vspec; + guint32 src_id; /* SourceID in NetFlow V9, Observation Domain ID in IPFIX */ + time_t export_time_secs; /* secs since epoch */ } hdrinfo_t; typedef int dissect_pdu_t(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, - hdrinfo_t *hdrinfo); + hdrinfo_t *hdrinfo_p); static int dissect_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, - hdrinfo_t *hdrinfo); + hdrinfo_t *hdrinfo_p); static int dissect_v8_aggpdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, - int offset, hdrinfo_t *hdrinfo); + int offset, hdrinfo_t *hdrinfo_p); static int dissect_v8_flowpdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, - int offset, hdrinfo_t *hdrinfo); -static int dissect_v9_v10_flowset(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, - int offset, hdrinfo_t *hdrinfo); -static int dissect_v9_v10_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, - int offset, guint16 id, guint length, hdrinfo_t *hdrinfo); -static guint dissect_v9_v10_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, - int offset, struct v9_v10_template *tplt, hdrinfo_t *hdrinfo); -static guint dissect_v9_pdu_scope(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, - int offset, struct v9_v10_template *tplt); -static guint dissect_v9_v10_pdu_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, - int offset, struct v9_v10_template *tplt, hdrinfo_t *hdrinfo, - v9_v10_template_fields_type_t fields_type); -static int dissect_v9_v10_options_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, - int offset, int len, hdrinfo_t *hdrinfo, guint16 flowset_id); -static int dissect_v9_v10_data_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, - int offset, int len, hdrinfo_t *hdrinfo, guint16 flowset_id); -static int v9_v10_template_hash(guint16 id, const address *net_src, - guint32 src_id); -static struct v9_v10_template *v9_v10_template_cache_addr(guint16 id, address *net_src, guint32 src_id); -static struct v9_v10_template *v9_v10_template_get(guint16 id, address *net_src, guint32 src_id); + int offset, hdrinfo_t *hdrinfo_p); +static int dissect_v9_v10_flowset(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, + int offset, hdrinfo_t *hdrinfo_p); +static int dissect_v9_v10_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, + int offset, guint16 id, guint length, hdrinfo_t *hdrinfo_p); +static guint dissect_v9_v10_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, + int offset, v9_v10_tmplt_t *tmplt_p, hdrinfo_t *hdrinfo_p); +static guint dissect_v9_pdu_scope(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, + int offset, v9_v10_tmplt_t *tmplt_p); +static guint dissect_v9_v10_pdu_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, + int offset, v9_v10_tmplt_t *tmplt_p, hdrinfo_t *hdrinfo_p, + v9_v10_tmplt_fields_type_t fields_type); +static int dissect_v9_v10_options_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, + int offset, int len, hdrinfo_t *hdrinfo_p, guint16 flowset_id); +static int dissect_v9_v10_data_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, + int offset, int len, hdrinfo_t *hdrinfo_p, guint16 flowset_id); + static const gchar *getprefix(const guint32 *address, int prefix); static int flow_process_ints(proto_tree *pdutree, tvbuff_t *tvb, - int offset); + int offset); static int flow_process_ports(proto_tree *pdutree, tvbuff_t *tvb, - int offset); + int offset); static int flow_process_timeperiod(proto_tree *pdutree, tvbuff_t *tvb, - int offset); + int offset); static int flow_process_aspair(proto_tree *pdutree, tvbuff_t *tvb, - int offset); + int offset); static int flow_process_sizecount(proto_tree *pdutree, tvbuff_t *tvb, - int offset); + int offset); static int flow_process_textfield(proto_tree *pdutree, tvbuff_t *tvb, - int offset, int bytes, - const char *text); - -static int pen_to_type_hf_list (guint32 pen) { - switch (pen) { - case VENDOR_PLIXER: - return TF_PLIXER; - case VENDOR_NTOP: - return TF_NTOP; - default: - return TF_NO_VENDOR_INFO; - } + int offset, int bytes, + const char *text); + +static v9_v10_tmplt_t *v9_v10_tmplt_build_key(v9_v10_tmplt_t *tmplt_p, packet_info *pinfo, guint32 src_id, guint16 tmplt_id); + + + +static int +pen_to_type_hf_list (guint32 pen) { + switch (pen) { + case VENDOR_PLIXER: + return TF_PLIXER; + case VENDOR_NTOP: + return TF_NTOP; + default: + return TF_NO_VENDOR_INFO; + } } static int dissect_netflow(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - proto_tree *netflow_tree = NULL; - proto_tree *ti; - proto_item *timeitem, *pduitem; - proto_tree *timetree, *pdutree; - unsigned int pduret, ver, pdus, x; - hdrinfo_t hdrinfo; - gint flow_len = -1; - guint available, pdusize, offset = 0; - nstime_t ts; - dissect_pdu_t *pduptr; - - ipfix_debug0("dissect_netflow: start"); - - ver = tvb_get_ntohs(tvb, offset); - - ipfix_debug1("dissect_netflow: found version %d", ver); - - switch (ver) { - case 1: - pdusize = V1PDU_SIZE; - pduptr = &dissect_pdu; - break; - case 5: - pdusize = V5PDU_SIZE; - pduptr = &dissect_pdu; - break; - case 7: - pdusize = V7PDU_SIZE; - pduptr = &dissect_pdu; - break; - case 8: - pdusize = -1; /* deferred */ - pduptr = &dissect_v8_aggpdu; - break; - case 9: - case 10: /* IPFIX */ - pdusize = -1; /* deferred */ - pduptr = &dissect_v9_v10_flowset; - break; - default: - /* This does not appear to be a valid netflow packet; - * return 0 to let another dissector have a chance at - * dissecting it. - */ - return 0; - } - - col_set_str(pinfo->cinfo, COL_PROTOCOL, "CFLOW"); - col_clear(pinfo->cinfo, COL_INFO); - ipfix_debug0("dissect_netflow: column cleared"); - - if (tree) { - ti = proto_tree_add_item(tree, proto_netflow, tvb, - offset, -1, ENC_NA); - netflow_tree = proto_item_add_subtree(ti, ett_netflow); - } - ipfix_debug0("dissect_netflow: tree added"); - - hdrinfo.vspec = ver; - hdrinfo.src_id = 0; - SET_ADDRESS(&hdrinfo.net_src, pinfo->net_src.type, pinfo->net_src.len, - pinfo->net_src.data); - - if (tree) - proto_tree_add_uint(netflow_tree, hf_cflow_version, tvb, - offset, 2, ver); - offset += 2; - - pdus = tvb_get_ntohs(tvb, offset); - if (tree) { - if(ver == 10) { - proto_tree_add_uint(netflow_tree, hf_cflow_len, tvb, - offset, 2, pdus); - flow_len = pdus; - } else { - proto_tree_add_uint(netflow_tree, hf_cflow_count, tvb, - offset, 2, pdus); - flow_len = -1; - } - } - offset += 2; - - /* - * set something interesting in the display now that we have info - */ - if (check_col(pinfo->cinfo, COL_INFO)) { - if (ver == 9) { - col_add_fstr(pinfo->cinfo, COL_INFO, - "total: %u (v%u) record%s", pdus, ver, - plurality(pdus, "", "s")); - } else if (ver == 10) { - gint remaining = tvb_reported_length_remaining(tvb, offset)+4; - - if(remaining == flow_len) - col_add_fstr(pinfo->cinfo, COL_INFO, "IPFIX flow (%d bytes)", flow_len); - else - col_add_fstr(pinfo->cinfo, COL_INFO, - "IPFIX partial flow (%u/%u bytes)", - remaining, flow_len); - } else { - col_add_fstr(pinfo->cinfo, COL_INFO, - "total: %u (v%u) flow%s", pdus, ver, - plurality(pdus, "", "s")); - } - } - - /* - * The rest is only interesting if we're displaying/searching the - * packet or if V9/V10 so we need to keep going to find any templates - */ - if ( (ver != 9) && (ver != 10) && !tree ) - return tvb_length(tvb); - - if(ver != 10) { - proto_tree_add_item(netflow_tree, hf_cflow_sysuptime, tvb, - offset, 4, ENC_BIG_ENDIAN); - offset += 4; - } - - ts.secs = tvb_get_ntohl(tvb, offset); - hdrinfo.export_time_secs = ts.secs; - - if ((ver != 9) && (ver != 10)) { - ts.nsecs = tvb_get_ntohl(tvb, offset + 4); - timeitem = proto_tree_add_time(netflow_tree, - hf_cflow_timestamp, tvb, offset, - 8, &ts); - } else { - ts.nsecs = 0; - timeitem = proto_tree_add_time(netflow_tree, - hf_cflow_timestamp, tvb, offset, - 4, &ts); - } - - timetree = proto_item_add_subtree(timeitem, ett_unixtime); - - proto_tree_add_item(timetree, - (ver == 10) ? hf_cflow_exporttime : hf_cflow_unix_secs, - tvb, offset, 4, ENC_BIG_ENDIAN); - - offset += 4; - - if ((ver != 9) && (ver != 10)) { - proto_tree_add_item(timetree, hf_cflow_unix_nsecs, tvb, - offset, 4, ENC_BIG_ENDIAN); - offset += 4; - } - - /* - * version specific header - */ - if (ver == 5 || ver == 7 || ver == 8 || ver == 9 || ver == 10) { - proto_tree_add_item(netflow_tree, hf_cflow_sequence, - tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; - } - if (ver == 5 || ver == 8) { - proto_tree_add_item(netflow_tree, hf_cflow_engine_type, - tvb, offset++, 1, ENC_NA); - proto_tree_add_item(netflow_tree, hf_cflow_engine_id, - tvb, offset++, 1, ENC_NA); - } else if ((ver == 9) || (ver == 10)) { - proto_tree_add_item(netflow_tree, - (ver == 9) ? hf_cflow_source_id : hf_cflow_od_id, - tvb, offset, 4, ENC_BIG_ENDIAN); - hdrinfo.src_id = tvb_get_ntohl(tvb, offset); - offset += 4; - } - if (ver == 8) { - hdrinfo.vspec = tvb_get_guint8(tvb, offset); - switch (hdrinfo.vspec) { - case V8PDU_AS_METHOD: - pdusize = V8PDU_AS_SIZE; - break; - case V8PDU_PROTO_METHOD: - pdusize = V8PDU_PROTO_SIZE; - break; - case V8PDU_SPREFIX_METHOD: - pdusize = V8PDU_SPREFIX_SIZE; - break; - case V8PDU_DPREFIX_METHOD: - pdusize = V8PDU_DPREFIX_SIZE; - break; - case V8PDU_MATRIX_METHOD: - pdusize = V8PDU_MATRIX_SIZE; - break; - case V8PDU_DESTONLY_METHOD: - pdusize = V8PDU_DESTONLY_SIZE; - pduptr = &dissect_v8_flowpdu; - break; - case V8PDU_SRCDEST_METHOD: - pdusize = V8PDU_SRCDEST_SIZE; - pduptr = &dissect_v8_flowpdu; - break; - case V8PDU_FULL_METHOD: - pdusize = V8PDU_FULL_SIZE; - pduptr = &dissect_v8_flowpdu; - break; - case V8PDU_TOSAS_METHOD: - pdusize = V8PDU_TOSAS_SIZE; - break; - case V8PDU_TOSPROTOPORT_METHOD: - pdusize = V8PDU_TOSPROTOPORT_SIZE; - break; - case V8PDU_TOSSRCPREFIX_METHOD: - pdusize = V8PDU_TOSSRCPREFIX_SIZE; - break; - case V8PDU_TOSDSTPREFIX_METHOD: - pdusize = V8PDU_TOSDSTPREFIX_SIZE; - break; - case V8PDU_TOSMATRIX_METHOD: - pdusize = V8PDU_TOSMATRIX_SIZE; - break; - case V8PDU_PREPORTPROTOCOL_METHOD: - pdusize = V8PDU_PREPORTPROTOCOL_SIZE; - break; - default: - pdusize = -1; - hdrinfo.vspec = 0; - break; - } - proto_tree_add_uint(netflow_tree, hf_cflow_aggmethod, - tvb, offset++, 1, hdrinfo.vspec); - proto_tree_add_item(netflow_tree, hf_cflow_aggversion, - tvb, offset++, 1, ENC_NA); - } - if (ver == 7 || ver == 8) - offset = flow_process_textfield(netflow_tree, tvb, offset, 4, - "reserved"); - else if (ver == 5) { - proto_tree_add_item(netflow_tree, hf_cflow_samplingmode, - tvb, offset, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(netflow_tree, hf_cflow_samplerate, - tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - } - - if (pdus == 0) { /* no payload to decode - in theory */ - /* This is absurd, but does happen in practice. */ - proto_tree_add_text(netflow_tree, tvb, offset, tvb_length_remaining(tvb, offset), - "FlowSets impossible - PDU Count is %d", pdus); - return tvb_length(tvb); - } - /* - * everything below here should be payload - */ - available = tvb_reported_length_remaining(tvb, offset); - for (x = 1; ((ver != 10) && (x < pdus + 1)) || ((ver == 10) && ((available - pdusize) > 0)); x++) { - /* - * make sure we have a pdu's worth of data - */ - available = tvb_reported_length_remaining(tvb, offset); - if(((ver == 9) || (ver == 10)) && available >= 4) { - /* pdusize can be different for each v9/v10 flowset */ - pdusize = tvb_get_ntohs(tvb, offset + 2); - } - - if (available < pdusize) - break; - - if ((ver == 9) || (ver == 10)) { - pduitem = proto_tree_add_text(netflow_tree, tvb, - offset, pdusize, - (ver == 9) ? "FlowSet %u" : "Set %u", x); - } else { - pduitem = proto_tree_add_text(netflow_tree, tvb, - offset, pdusize, "pdu %u/%u", x, pdus); - } - pdutree = proto_item_add_subtree(pduitem, ett_flow); - - pduret = pduptr(tvb, pinfo, pdutree, offset, &hdrinfo); - - if (pduret < pdusize) pduret = pdusize; /* padding */ - - /* - * if we came up short, stop processing - */ - if ((pduret == pdusize) && (pduret != 0)) - offset += pduret; - else - break; - } - - return tvb_length(tvb); + proto_tree *netflow_tree = NULL; + proto_tree *ti; + proto_item *timeitem, *pduitem; + proto_tree *timetree, *pdutree; + unsigned int pduret, ver, pdus, x; + hdrinfo_t hdrinfo; + gint flow_len = -1; + guint available, pdusize, offset = 0; + nstime_t ts; + dissect_pdu_t *pduptr; + + ipfix_debug0("dissect_netflow: start"); + + ver = tvb_get_ntohs(tvb, offset); + + ipfix_debug1("dissect_netflow: found version %d", ver); + + switch (ver) { + case 1: + pdusize = V1PDU_SIZE; + pduptr = &dissect_pdu; + break; + case 5: + pdusize = V5PDU_SIZE; + pduptr = &dissect_pdu; + break; + case 7: + pdusize = V7PDU_SIZE; + pduptr = &dissect_pdu; + break; + case 8: + pdusize = -1; /* deferred */ + pduptr = &dissect_v8_aggpdu; + break; + case 9: + case 10: /* IPFIX */ + pdusize = -1; /* deferred */ + pduptr = &dissect_v9_v10_flowset; + break; + default: + /* This does not appear to be a valid netflow packet; + * return 0 to let another dissector have a chance at + * dissecting it. + */ + return 0; + } + + col_set_str(pinfo->cinfo, COL_PROTOCOL, "CFLOW"); + col_clear(pinfo->cinfo, COL_INFO); + ipfix_debug0("dissect_netflow: column cleared"); + + if (tree) { + ti = proto_tree_add_item(tree, proto_netflow, tvb, offset, -1, ENC_NA); + netflow_tree = proto_item_add_subtree(ti, ett_netflow); + } + ipfix_debug0("dissect_netflow: tree added"); + + hdrinfo.vspec = ver; + hdrinfo.src_id = 0; + + if (tree) + proto_tree_add_uint(netflow_tree, hf_cflow_version, tvb, offset, 2, ver); + offset += 2; + + pdus = tvb_get_ntohs(tvb, offset); + if (tree) { + if(ver == 10) { + proto_tree_add_uint(netflow_tree, hf_cflow_len, tvb, offset, 2, pdus); + flow_len = pdus; + } else { + proto_tree_add_uint(netflow_tree, hf_cflow_count, tvb, offset, 2, pdus); + flow_len = -1; + } + } + offset += 2; + + /* + * set something interesting in the display now that we have info + */ + if (check_col(pinfo->cinfo, COL_INFO)) { + if (ver == 9) { + col_add_fstr(pinfo->cinfo, COL_INFO, + "total: %u (v%u) record%s", pdus, ver, + plurality(pdus, "", "s")); + } else if (ver == 10) { + gint remaining = tvb_reported_length_remaining(tvb, offset)+4; + + if(remaining == flow_len) + col_add_fstr(pinfo->cinfo, COL_INFO, "IPFIX flow (%d bytes)", flow_len); + else + col_add_fstr(pinfo->cinfo, COL_INFO, + "IPFIX partial flow (%u/%u bytes)", + remaining, flow_len); + } else { + col_add_fstr(pinfo->cinfo, COL_INFO, + "total: %u (v%u) flow%s", pdus, ver, + plurality(pdus, "", "s")); + } + } + + /* + * The rest is only interesting if we're displaying/searching the + * packet or if V9/V10 so we need to keep going to find any templates + */ + if ( (ver != 9) && (ver != 10) && !tree ) + return tvb_reported_length(tvb); + + if(ver != 10) { + proto_tree_add_item(netflow_tree, hf_cflow_sysuptime, tvb, + offset, 4, ENC_BIG_ENDIAN); + offset += 4; + } + + ts.secs = tvb_get_ntohl(tvb, offset); + hdrinfo.export_time_secs = ts.secs; + + if ((ver != 9) && (ver != 10)) { + ts.nsecs = tvb_get_ntohl(tvb, offset + 4); + timeitem = proto_tree_add_time(netflow_tree, + hf_cflow_timestamp, tvb, offset, + 8, &ts); + } else { + ts.nsecs = 0; + timeitem = proto_tree_add_time(netflow_tree, + hf_cflow_timestamp, tvb, offset, + 4, &ts); + } + + timetree = proto_item_add_subtree(timeitem, ett_unixtime); + + proto_tree_add_item(timetree, + (ver == 10) ? hf_cflow_exporttime : hf_cflow_unix_secs, + tvb, offset, 4, ENC_BIG_ENDIAN); + + offset += 4; + + if ((ver != 9) && (ver != 10)) { + proto_tree_add_item(timetree, hf_cflow_unix_nsecs, tvb, + offset, 4, ENC_BIG_ENDIAN); + offset += 4; + } + + /* + * version specific header + */ + if (ver == 5 || ver == 7 || ver == 8 || ver == 9 || ver == 10) { + proto_tree_add_item(netflow_tree, hf_cflow_sequence, + tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + } + if (ver == 5 || ver == 8) { + proto_tree_add_item(netflow_tree, hf_cflow_engine_type, + tvb, offset++, 1, ENC_NA); + proto_tree_add_item(netflow_tree, hf_cflow_engine_id, + tvb, offset++, 1, ENC_NA); + } else if ((ver == 9) || (ver == 10)) { + proto_tree_add_item(netflow_tree, + (ver == 9) ? hf_cflow_source_id : hf_cflow_od_id, + tvb, offset, 4, ENC_BIG_ENDIAN); + hdrinfo.src_id = tvb_get_ntohl(tvb, offset); + offset += 4; + } + if (ver == 8) { + hdrinfo.vspec = tvb_get_guint8(tvb, offset); + switch (hdrinfo.vspec) { + case V8PDU_AS_METHOD: + pdusize = V8PDU_AS_SIZE; + break; + case V8PDU_PROTO_METHOD: + pdusize = V8PDU_PROTO_SIZE; + break; + case V8PDU_SPREFIX_METHOD: + pdusize = V8PDU_SPREFIX_SIZE; + break; + case V8PDU_DPREFIX_METHOD: + pdusize = V8PDU_DPREFIX_SIZE; + break; + case V8PDU_MATRIX_METHOD: + pdusize = V8PDU_MATRIX_SIZE; + break; + case V8PDU_DESTONLY_METHOD: + pdusize = V8PDU_DESTONLY_SIZE; + pduptr = &dissect_v8_flowpdu; + break; + case V8PDU_SRCDEST_METHOD: + pdusize = V8PDU_SRCDEST_SIZE; + pduptr = &dissect_v8_flowpdu; + break; + case V8PDU_FULL_METHOD: + pdusize = V8PDU_FULL_SIZE; + pduptr = &dissect_v8_flowpdu; + break; + case V8PDU_TOSAS_METHOD: + pdusize = V8PDU_TOSAS_SIZE; + break; + case V8PDU_TOSPROTOPORT_METHOD: + pdusize = V8PDU_TOSPROTOPORT_SIZE; + break; + case V8PDU_TOSSRCPREFIX_METHOD: + pdusize = V8PDU_TOSSRCPREFIX_SIZE; + break; + case V8PDU_TOSDSTPREFIX_METHOD: + pdusize = V8PDU_TOSDSTPREFIX_SIZE; + break; + case V8PDU_TOSMATRIX_METHOD: + pdusize = V8PDU_TOSMATRIX_SIZE; + break; + case V8PDU_PREPORTPROTOCOL_METHOD: + pdusize = V8PDU_PREPORTPROTOCOL_SIZE; + break; + default: + pdusize = -1; + hdrinfo.vspec = 0; + break; + } + proto_tree_add_uint(netflow_tree, hf_cflow_aggmethod, + tvb, offset++, 1, hdrinfo.vspec); + proto_tree_add_item(netflow_tree, hf_cflow_aggversion, + tvb, offset++, 1, ENC_NA); + } + if (ver == 7 || ver == 8) + offset = flow_process_textfield(netflow_tree, tvb, offset, 4, "reserved"); + else if (ver == 5) { + proto_tree_add_item(netflow_tree, hf_cflow_samplingmode, + tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(netflow_tree, hf_cflow_samplerate, + tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + } + + if (pdus == 0) { /* no payload to decode - in theory */ + /* This is absurd, but does happen in practice. */ + proto_tree_add_text(netflow_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), + "FlowSets impossible - PDU Count is %d", pdus); + return tvb_reported_length(tvb); + } + /* + * everything below here should be payload + */ + available = tvb_reported_length_remaining(tvb, offset); + for (x = 1; ((ver != 10) && (x < pdus + 1)) || ((ver == 10) && ((available - pdusize) > 0)); x++) { + /* + * make sure we have a pdu's worth of data + */ + available = tvb_reported_length_remaining(tvb, offset); + if(((ver == 9) || (ver == 10)) && available >= 4) { + /* pdusize can be different for each v9/v10 flowset */ + pdusize = tvb_get_ntohs(tvb, offset + 2); + } + + if (available < pdusize) + break; + + if ((ver == 9) || (ver == 10)) { + pduitem = proto_tree_add_text(netflow_tree, tvb, + offset, pdusize, + (ver == 9) ? "FlowSet %u" : "Set %u", x); + } else { + pduitem = proto_tree_add_text(netflow_tree, tvb, + offset, pdusize, "pdu %u/%u", x, pdus); + } + pdutree = proto_item_add_subtree(pduitem, ett_flow); + + pduret = pduptr(tvb, pinfo, pdutree, offset, &hdrinfo); + + if (pduret < pdusize) pduret = pdusize; /* padding */ + + /* + * if we came up short, stop processing + */ + if ((pduret == pdusize) && (pduret != 0)) + offset += pduret; + else + break; + } + + return tvb_reported_length(tvb); } /* @@ -1861,165 +1851,158 @@ dissect_netflow(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) static int flow_process_ints(proto_tree *pdutree, tvbuff_t *tvb, int offset) { - proto_tree_add_item(pdutree, hf_cflow_inputint, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + proto_tree_add_item(pdutree, hf_cflow_inputint, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; - proto_tree_add_item(pdutree, hf_cflow_outputint, tvb, offset, 2, - ENC_BIG_ENDIAN); - offset += 2; + proto_tree_add_item(pdutree, hf_cflow_outputint, tvb, offset, 2, + ENC_BIG_ENDIAN); + offset += 2; - return offset; + return offset; } static int flow_process_ports(proto_tree *pdutree, tvbuff_t *tvb, int offset) { - proto_tree_add_item(pdutree, hf_cflow_srcport, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + proto_tree_add_item(pdutree, hf_cflow_srcport, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; - proto_tree_add_item(pdutree, hf_cflow_dstport, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + proto_tree_add_item(pdutree, hf_cflow_dstport, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; - return offset; + return offset; } static int flow_process_timeperiod(proto_tree *pdutree, tvbuff_t *tvb, int offset) { - nstime_t ts_start, ts_end; - int offset_s, offset_e; - nstime_t ts_delta; - guint32 msec_start, msec_end; - guint32 msec_delta; - proto_tree *timetree; - proto_item *timeitem; - - - msec_start = tvb_get_ntohl(tvb, offset); - ts_start.secs = msec_start / 1000; - ts_start.nsecs = (msec_start % 1000) * 1000000; - offset_s = offset; - offset += 4; - - msec_end = tvb_get_ntohl(tvb, offset); - ts_end.secs = msec_end / 1000; - ts_end.nsecs = (msec_end % 1000) * 1000000; - offset_e = offset; - offset += 4; - - msec_delta = msec_end - msec_start; - ts_delta.secs = msec_delta / 1000; - ts_delta.nsecs = (msec_delta % 1000) * 1000000; - - - timeitem = proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, - offset_s, 8, &ts_delta); - PROTO_ITEM_SET_GENERATED(timeitem); - timetree = proto_item_add_subtree(timeitem, ett_flowtime); - - proto_tree_add_time(timetree, hf_cflow_timestart, tvb, offset_s, 4, - &ts_start); - proto_tree_add_time(timetree, hf_cflow_timeend, tvb, offset_e, 4, - &ts_end); - - return offset; + nstime_t ts_start, ts_end; + int offset_s, offset_e; + nstime_t ts_delta; + guint32 msec_start, msec_end; + guint32 msec_delta; + proto_tree *timetree; + proto_item *timeitem; + + + msec_start = tvb_get_ntohl(tvb, offset); + ts_start.secs = msec_start / 1000; + ts_start.nsecs = (msec_start % 1000) * 1000000; + offset_s = offset; + offset += 4; + + msec_end = tvb_get_ntohl(tvb, offset); + ts_end.secs = msec_end / 1000; + ts_end.nsecs = (msec_end % 1000) * 1000000; + offset_e = offset; + offset += 4; + + msec_delta = msec_end - msec_start; + ts_delta.secs = msec_delta / 1000; + ts_delta.nsecs = (msec_delta % 1000) * 1000000; + + + timeitem = proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, + offset_s, 8, &ts_delta); + PROTO_ITEM_SET_GENERATED(timeitem); + timetree = proto_item_add_subtree(timeitem, ett_flowtime); + + proto_tree_add_time(timetree, hf_cflow_timestart, tvb, offset_s, 4, + &ts_start); + proto_tree_add_time(timetree, hf_cflow_timeend, tvb, offset_e, 4, + &ts_end); + + return offset; } static int flow_process_aspair(proto_tree *pdutree, tvbuff_t *tvb, int offset) { - proto_tree_add_item(pdutree, hf_cflow_srcas, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + proto_tree_add_item(pdutree, hf_cflow_srcas, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; - proto_tree_add_item(pdutree, hf_cflow_dstas, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; + proto_tree_add_item(pdutree, hf_cflow_dstas, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; - return offset; + return offset; } static int flow_process_sizecount(proto_tree *pdutree, tvbuff_t *tvb, int offset) { - proto_tree_add_item(pdutree, hf_cflow_packets, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + proto_tree_add_item(pdutree, hf_cflow_packets, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; - proto_tree_add_item(pdutree, hf_cflow_octets, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; + proto_tree_add_item(pdutree, hf_cflow_octets, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; - return offset; + return offset; } static int -flow_process_textfield(proto_tree *pdutree, tvbuff_t *tvb, int offset, - int bytes, const char *text) +flow_process_textfield(proto_tree *pdutree, tvbuff_t *tvb, int offset, int bytes, const char *text) { - proto_tree_add_text(pdutree, tvb, offset, bytes, "%s", text); - offset += bytes; + proto_tree_add_text(pdutree, tvb, offset, bytes, "%s", text); + offset += bytes; - return offset; + return offset; } static int dissect_v8_flowpdu(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *pdutree, int offset, - hdrinfo_t *hdrinfo) + hdrinfo_t *hdrinfo_p) { - int startoffset = offset; - guint8 verspec; - - proto_tree_add_item(pdutree, hf_cflow_dstaddr, tvb, offset, 4, ENC_NA); - offset += 4; - - verspec = hdrinfo->vspec; - - if (verspec != V8PDU_DESTONLY_METHOD) { - proto_tree_add_item(pdutree, hf_cflow_srcaddr, tvb, offset, 4, - ENC_BIG_ENDIAN); - offset += 4; - } - if (verspec == V8PDU_FULL_METHOD) { - proto_tree_add_item(pdutree, hf_cflow_dstport, tvb, offset, 2, - ENC_BIG_ENDIAN); - offset += 2; - proto_tree_add_item(pdutree, hf_cflow_srcport, tvb, offset, 2, - ENC_BIG_ENDIAN); - offset += 2; - } - - offset = flow_process_sizecount(pdutree, tvb, offset); - offset = flow_process_timeperiod(pdutree, tvb, offset); - - proto_tree_add_item(pdutree, hf_cflow_outputint, tvb, offset, 2, - ENC_BIG_ENDIAN); - offset += 2; - - if (verspec != V8PDU_DESTONLY_METHOD) { - proto_tree_add_item(pdutree, hf_cflow_inputint, tvb, offset, 2, - ENC_BIG_ENDIAN); - offset += 2; - } - - proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset++, 1, ENC_NA); - if (verspec == V8PDU_FULL_METHOD) - proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset++, 1, - ENC_NA); - offset = flow_process_textfield(pdutree, tvb, offset, 1, "marked tos"); - - if (verspec == V8PDU_SRCDEST_METHOD) - offset = - flow_process_textfield(pdutree, tvb, offset, 2, - "reserved"); - else if (verspec == V8PDU_FULL_METHOD) - offset = - flow_process_textfield(pdutree, tvb, offset, 1, "padding"); - - offset = - flow_process_textfield(pdutree, tvb, offset, 4, "extra packets"); - - proto_tree_add_item(pdutree, hf_cflow_routersc, tvb, offset, 4, ENC_NA); - offset += 4; - - return (offset - startoffset); + int startoffset = offset; + guint8 verspec; + + proto_tree_add_item(pdutree, hf_cflow_dstaddr, tvb, offset, 4, ENC_NA); + offset += 4; + + verspec = hdrinfo_p->vspec; + + if (verspec != V8PDU_DESTONLY_METHOD) { + proto_tree_add_item(pdutree, hf_cflow_srcaddr, tvb, offset, 4, + ENC_BIG_ENDIAN); + offset += 4; + } + if (verspec == V8PDU_FULL_METHOD) { + proto_tree_add_item(pdutree, hf_cflow_dstport, tvb, offset, 2, + ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(pdutree, hf_cflow_srcport, tvb, offset, 2, + ENC_BIG_ENDIAN); + offset += 2; + } + + offset = flow_process_sizecount(pdutree, tvb, offset); + offset = flow_process_timeperiod(pdutree, tvb, offset); + + proto_tree_add_item(pdutree, hf_cflow_outputint, tvb, offset, 2, + ENC_BIG_ENDIAN); + offset += 2; + + if (verspec != V8PDU_DESTONLY_METHOD) { + proto_tree_add_item(pdutree, hf_cflow_inputint, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + } + + proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset++, 1, ENC_NA); + if (verspec == V8PDU_FULL_METHOD) + proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset++, 1, ENC_NA); + offset = flow_process_textfield(pdutree, tvb, offset, 1, "marked tos"); + + if (verspec == V8PDU_SRCDEST_METHOD) + offset = flow_process_textfield(pdutree, tvb, offset, 2, "reserved"); + else if (verspec == V8PDU_FULL_METHOD) + offset = flow_process_textfield(pdutree, tvb, offset, 1, "padding"); + + offset = flow_process_textfield(pdutree, tvb, offset, 4, "extra packets"); + + proto_tree_add_item(pdutree, hf_cflow_routersc, tvb, offset, 4, ENC_NA); + offset += 4; + + return (offset - startoffset); } /* @@ -2028,258 +2011,232 @@ dissect_v8_flowpdu(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *pdutre static int dissect_v8_aggpdu(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *pdutree, int offset, - hdrinfo_t *hdrinfo) + hdrinfo_t *hdrinfo_p) { - int startoffset = offset; - guint8 verspec; - int local_cflow_as; /* hf_cflow_srcas || hf_cflow_dstas */ - int local_cflow_net; /* hf_cflow_srcnet || hf_cflow_dstnet */ - int local_cflow_int; /* hf_cflow_outputint || hf_cflow_inputint */ - int local_cflow_mask; /* hf_cflow_srcmask || hf_cflow_dstmask */ - - proto_tree_add_item(pdutree, hf_cflow_flows, tvb, offset, 4, ENC_BIG_ENDIAN); - offset += 4; - - offset = flow_process_sizecount(pdutree, tvb, offset); - offset = flow_process_timeperiod(pdutree, tvb, offset); - - verspec = hdrinfo->vspec; - - switch (verspec) { - case V8PDU_AS_METHOD: - case V8PDU_TOSAS_METHOD: - offset = flow_process_aspair(pdutree, tvb, offset); - - if (verspec == V8PDU_TOSAS_METHOD) { - proto_tree_add_item(pdutree, hf_cflow_tos, tvb, - offset++, 1, ENC_NA); - offset = - flow_process_textfield(pdutree, tvb, offset, 1, - "padding"); - offset = - flow_process_textfield(pdutree, tvb, offset, 2, - "reserved"); - } - /* ACF - Seen in the wild and documented here... - http://www.caida.org/tools/measurement/cflowd/configuration/configuration-9.html#ss9.1 - */ - offset = flow_process_ints(pdutree, tvb, offset); - break; - case V8PDU_PROTO_METHOD: - case V8PDU_TOSPROTOPORT_METHOD: - proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset++, 1, - ENC_NA); - - if (verspec == V8PDU_PROTO_METHOD) - offset = - flow_process_textfield(pdutree, tvb, offset, 1, - "padding"); - else if (verspec == V8PDU_TOSPROTOPORT_METHOD) - proto_tree_add_item(pdutree, hf_cflow_tos, tvb, - offset++, 1, ENC_NA); - - offset = - flow_process_textfield(pdutree, tvb, offset, 2, - "reserved"); - offset = flow_process_ports(pdutree, tvb, offset); - - if (verspec == V8PDU_TOSPROTOPORT_METHOD) - offset = flow_process_ints(pdutree, tvb, offset); - break; - case V8PDU_SPREFIX_METHOD: - case V8PDU_DPREFIX_METHOD: - case V8PDU_TOSSRCPREFIX_METHOD: - case V8PDU_TOSDSTPREFIX_METHOD: - switch (verspec) { - case V8PDU_SPREFIX_METHOD: - case V8PDU_TOSSRCPREFIX_METHOD: - local_cflow_net = hf_cflow_srcnet; - local_cflow_mask = hf_cflow_srcmask; - local_cflow_as = hf_cflow_srcas; - local_cflow_int = hf_cflow_inputint; - break; - case V8PDU_DPREFIX_METHOD: - case V8PDU_TOSDSTPREFIX_METHOD: - default: /* stop warning that : - 'local_cflow_*' may be used - uninitialized in this function */ - local_cflow_net = hf_cflow_dstnet; - local_cflow_mask = hf_cflow_dstmask; - local_cflow_as = hf_cflow_dstas; - local_cflow_int = hf_cflow_outputint; - break; - } - - proto_tree_add_item(pdutree, - local_cflow_net, tvb, offset, 4, ENC_NA); - offset += 4; - - proto_tree_add_item(pdutree, - local_cflow_mask, tvb, offset++, 1, ENC_NA); - - if (verspec == V8PDU_SPREFIX_METHOD - || verspec == V8PDU_DPREFIX_METHOD) - offset = - flow_process_textfield(pdutree, tvb, offset, 1, - "padding"); - else if (verspec == V8PDU_TOSSRCPREFIX_METHOD - || verspec == V8PDU_TOSDSTPREFIX_METHOD) - proto_tree_add_item(pdutree, hf_cflow_tos, tvb, - offset++, 1, ENC_NA); - - proto_tree_add_item(pdutree, - local_cflow_as, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - proto_tree_add_item(pdutree, - local_cflow_int, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - offset = - flow_process_textfield(pdutree, tvb, offset, 2, - "reserved"); - break; - case V8PDU_MATRIX_METHOD: - case V8PDU_TOSMATRIX_METHOD: - case V8PDU_PREPORTPROTOCOL_METHOD: - proto_tree_add_item(pdutree, hf_cflow_srcnet, tvb, offset, 4, - ENC_NA); - offset += 4; - - proto_tree_add_item(pdutree, hf_cflow_dstnet, tvb, offset, 4, - ENC_NA); - offset += 4; - - proto_tree_add_item(pdutree, hf_cflow_srcmask, tvb, offset++, - 1, ENC_NA); - - proto_tree_add_item(pdutree, hf_cflow_dstmask, tvb, offset++, - 1, ENC_NA); - - if (verspec == V8PDU_TOSMATRIX_METHOD || - verspec == V8PDU_PREPORTPROTOCOL_METHOD) { - proto_tree_add_item(pdutree, hf_cflow_tos, tvb, - offset++, 1, ENC_NA); - if (verspec == V8PDU_TOSMATRIX_METHOD) { - offset = - flow_process_textfield(pdutree, tvb, - offset, 1, - "padding"); - } else if (verspec == V8PDU_PREPORTPROTOCOL_METHOD) { - proto_tree_add_item(pdutree, hf_cflow_prot, - tvb, offset++, 1, ENC_NA); - } - } else { - offset = - flow_process_textfield(pdutree, tvb, offset, 2, - "reserved"); - } - - if (verspec == V8PDU_MATRIX_METHOD - || verspec == V8PDU_TOSMATRIX_METHOD) { - offset = flow_process_aspair(pdutree, tvb, offset); - } else if (verspec == V8PDU_PREPORTPROTOCOL_METHOD) { - offset = flow_process_ports(pdutree, tvb, offset); - } - - offset = flow_process_ints(pdutree, tvb, offset); - break; - } - - - return (offset - startoffset); + int startoffset = offset; + guint8 verspec; + int local_cflow_as; /* hf_cflow_srcas || hf_cflow_dstas */ + int local_cflow_net; /* hf_cflow_srcnet || hf_cflow_dstnet */ + int local_cflow_int; /* hf_cflow_outputint || hf_cflow_inputint */ + int local_cflow_mask; /* hf_cflow_srcmask || hf_cflow_dstmask */ + + proto_tree_add_item(pdutree, hf_cflow_flows, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + offset = flow_process_sizecount(pdutree, tvb, offset); + offset = flow_process_timeperiod(pdutree, tvb, offset); + + verspec = hdrinfo_p->vspec; + + switch (verspec) { + + case V8PDU_AS_METHOD: + case V8PDU_TOSAS_METHOD: + offset = flow_process_aspair(pdutree, tvb, offset); + + if (verspec == V8PDU_TOSAS_METHOD) { + proto_tree_add_item(pdutree, hf_cflow_tos, tvb, + offset++, 1, ENC_NA); + offset = flow_process_textfield(pdutree, tvb, offset, 1, "padding"); + offset = flow_process_textfield(pdutree, tvb, offset, 2, "reserved"); + } + /* ACF - Seen in the wild and documented here... + http://www.caida.org/tools/measurement/cflowd/configuration/configuration-9.html#ss9.1 + */ + offset = flow_process_ints(pdutree, tvb, offset); + break; + + case V8PDU_PROTO_METHOD: + case V8PDU_TOSPROTOPORT_METHOD: + proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset++, 1, ENC_NA); + + if (verspec == V8PDU_PROTO_METHOD) + offset = flow_process_textfield(pdutree, tvb, offset, 1, "padding"); + else if (verspec == V8PDU_TOSPROTOPORT_METHOD) + proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset++, 1, ENC_NA); + + offset = flow_process_textfield(pdutree, tvb, offset, 2, "reserved"); + offset = flow_process_ports(pdutree, tvb, offset); + + if (verspec == V8PDU_TOSPROTOPORT_METHOD) + offset = flow_process_ints(pdutree, tvb, offset); + break; + + case V8PDU_SPREFIX_METHOD: + case V8PDU_DPREFIX_METHOD: + case V8PDU_TOSSRCPREFIX_METHOD: + case V8PDU_TOSDSTPREFIX_METHOD: + switch (verspec) { + case V8PDU_SPREFIX_METHOD: + case V8PDU_TOSSRCPREFIX_METHOD: + local_cflow_net = hf_cflow_srcnet; + local_cflow_mask = hf_cflow_srcmask; + local_cflow_as = hf_cflow_srcas; + local_cflow_int = hf_cflow_inputint; + break; + case V8PDU_DPREFIX_METHOD: + case V8PDU_TOSDSTPREFIX_METHOD: + default: /* stop warning that : + 'local_cflow_*' may be used + uninitialized in this function */ + local_cflow_net = hf_cflow_dstnet; + local_cflow_mask = hf_cflow_dstmask; + local_cflow_as = hf_cflow_dstas; + local_cflow_int = hf_cflow_outputint; + break; + } + + proto_tree_add_item(pdutree, local_cflow_net, tvb, offset, 4, ENC_NA); + offset += 4; + + proto_tree_add_item(pdutree, local_cflow_mask, tvb, offset++, 1, ENC_NA); + + if ((verspec == V8PDU_SPREFIX_METHOD) || (verspec == V8PDU_DPREFIX_METHOD)) + offset = flow_process_textfield(pdutree, tvb, offset, 1, "padding"); + + else if ((verspec == V8PDU_TOSSRCPREFIX_METHOD) || (verspec == V8PDU_TOSDSTPREFIX_METHOD)) + proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset++, 1, ENC_NA); + + proto_tree_add_item(pdutree, local_cflow_as, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + proto_tree_add_item(pdutree, local_cflow_int, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + offset = flow_process_textfield(pdutree, tvb, offset, 2, "reserved"); + break; + + case V8PDU_MATRIX_METHOD: + case V8PDU_TOSMATRIX_METHOD: + case V8PDU_PREPORTPROTOCOL_METHOD: + proto_tree_add_item(pdutree, hf_cflow_srcnet, tvb, offset, 4, ENC_NA); + offset += 4; + + proto_tree_add_item(pdutree, hf_cflow_dstnet, tvb, offset, 4, ENC_NA); + offset += 4; + + proto_tree_add_item(pdutree, hf_cflow_srcmask, tvb, offset++, 1, ENC_NA); + + proto_tree_add_item(pdutree, hf_cflow_dstmask, tvb, offset++, 1, ENC_NA); + + if ((verspec == V8PDU_TOSMATRIX_METHOD) || + (verspec == V8PDU_PREPORTPROTOCOL_METHOD)) { + proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset++, 1, ENC_NA); + if (verspec == V8PDU_TOSMATRIX_METHOD) { + offset = flow_process_textfield(pdutree, tvb, offset, 1, "padding"); + } else if (verspec == V8PDU_PREPORTPROTOCOL_METHOD) { + proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset++, 1, ENC_NA); + } + } else { + offset = flow_process_textfield(pdutree, tvb, offset, 2, "reserved"); + } + + if ((verspec == V8PDU_MATRIX_METHOD) + || (verspec == V8PDU_TOSMATRIX_METHOD)) { + offset = flow_process_aspair(pdutree, tvb, offset); + } else if (verspec == V8PDU_PREPORTPROTOCOL_METHOD) { + offset = flow_process_ports(pdutree, tvb, offset); + } + + offset = flow_process_ints(pdutree, tvb, offset); + break; + } + + return (offset - startoffset); } /* Dissect a version 9 FlowSet and return the length we processed. */ static int -dissect_v9_v10_flowset(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, int offset, hdrinfo_t *hdrinfo) +dissect_v9_v10_flowset(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, int offset, hdrinfo_t *hdrinfo_p) { - int length; - guint16 flowset_id; - guint8 ver; - - ver = hdrinfo->vspec; - - if ((ver != 9) && (ver != 10)) - return (0); - - flowset_id = tvb_get_ntohs(tvb, offset); - length = tvb_get_ntohs(tvb, offset + 2); - - if (length < 4) { - expert_add_info_format(pinfo, NULL, PI_MALFORMED, PI_WARN, - "Length (%u) too short", length); - return tvb_length_remaining(tvb, offset); - } - - proto_tree_add_item(pdutree, hf_cflow_flowset_id, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - proto_tree_add_item(pdutree, hf_cflow_flowset_length, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - switch (flowset_id) { - case FLOWSET_ID_V9_DATA_TEMPLATE: - case FLOWSET_ID_V10_DATA_TEMPLATE: - dissect_v9_v10_data_template(tvb, pinfo, pdutree, offset, length - 4, hdrinfo, flowset_id); - break; - case FLOWSET_ID_V9_OPTIONS_TEMPLATE: - case FLOWSET_ID_V10_OPTIONS_TEMPLATE: - dissect_v9_v10_options_template(tvb, pinfo, pdutree, offset, length - 4, hdrinfo, flowset_id); - break; - default: - if (flowset_id >= FLOWSET_ID_DATA_MIN) { - dissect_v9_v10_data(tvb, pinfo, pdutree, offset, flowset_id, (guint)length - 4, hdrinfo); - } - break; - } - - return (length); + int length; + guint16 flowset_id; + guint8 ver; + + ver = hdrinfo_p->vspec; + + if ((ver != 9) && (ver != 10)) + return (0); + + flowset_id = tvb_get_ntohs(tvb, offset); + length = tvb_get_ntohs(tvb, offset + 2); + + if (length < 4) { + expert_add_info_format(pinfo, NULL, PI_MALFORMED, PI_WARN, + "Length (%u) too short", length); + return tvb_reported_length_remaining(tvb, offset); + } + + proto_tree_add_item(pdutree, hf_cflow_flowset_id, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + proto_tree_add_item(pdutree, hf_cflow_flowset_length, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + switch (flowset_id) { + case FLOWSET_ID_V9_DATA_TEMPLATE: + case FLOWSET_ID_V10_DATA_TEMPLATE: + dissect_v9_v10_data_template(tvb, pinfo, pdutree, offset, length - 4, hdrinfo_p, flowset_id); + break; + case FLOWSET_ID_V9_OPTIONS_TEMPLATE: + case FLOWSET_ID_V10_OPTIONS_TEMPLATE: + dissect_v9_v10_options_template(tvb, pinfo, pdutree, offset, length - 4, hdrinfo_p, flowset_id); + break; + default: + if (flowset_id >= FLOWSET_ID_DATA_MIN) { + dissect_v9_v10_data(tvb, pinfo, pdutree, offset, flowset_id, (guint)length - 4, hdrinfo_p); + } + break; + } + + return (length); } static int dissect_v9_v10_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, int offset, - guint16 id, guint length, hdrinfo_t *hdrinfo) + guint16 id, guint length, hdrinfo_t *hdrinfo_p) { - struct v9_v10_template *tplt; - proto_tree *data_tree; - proto_item *data_item; - guint pdu_len; - - if (length == 0) { - expert_add_info_format(pinfo, pdutree, PI_MALFORMED, - PI_WARN, "No flow information"); - } - - tplt = v9_v10_template_get(id, &hdrinfo->net_src, hdrinfo->src_id); - if (tplt != NULL && tplt->length != 0) { - int count = 1; - /* Note: If the flow contains variable length fields then */ - /* tplt->length will be less then actual length of the flow. */ - while (length >= tplt->length) { - data_item = proto_tree_add_text(pdutree, tvb, - offset, tplt->length, "Flow %d", count++); - data_tree = proto_item_add_subtree(data_item, ett_dataflowset); - - pdu_len = dissect_v9_v10_pdu(tvb, pinfo, data_tree, offset, tplt, hdrinfo); - - offset += pdu_len; - /* XXX - Throw an exception */ - length -= (pdu_len < length) ? pdu_len : length; - } - if (length != 0) { - proto_tree_add_text(pdutree, tvb, offset, length, - "Padding (%u byte%s)", - length, plurality(length, "", "s")); - } - } else { - proto_tree_add_text(pdutree, tvb, offset, length, - "Data (%u byte%s), no template found", - length, plurality(length, "", "s")); - } - - return (0); + v9_v10_tmplt_t *tmplt_p; + v9_v10_tmplt_t tmplt_key; + proto_tree *data_tree; + proto_item *data_item; + guint pdu_len; + + if (length == 0) { + expert_add_info_format(pinfo, pdutree, PI_MALFORMED, + PI_WARN, "No flow information"); + } + + v9_v10_tmplt_build_key(&tmplt_key, pinfo, hdrinfo_p->src_id, id); + tmplt_p = g_hash_table_lookup(v9_v10_tmplt_table, &tmplt_key); + if ((tmplt_p != NULL) && (tmplt_p->length != 0)) { + int count = 1; + /* Note: If the flow contains variable length fields then */ + /* tmplt_p->length will be less then actual length of the flow. */ + while (length >= tmplt_p->length) { + data_item = proto_tree_add_text(pdutree, tvb, + offset, tmplt_p->length, "Flow %d", count++); + data_tree = proto_item_add_subtree(data_item, ett_dataflowset); + + pdu_len = dissect_v9_v10_pdu(tvb, pinfo, data_tree, offset, tmplt_p, hdrinfo_p); + + offset += pdu_len; + /* XXX - Throw an exception */ + length -= (pdu_len < length) ? pdu_len : length; + } + if (length != 0) { + proto_tree_add_text(pdutree, tvb, offset, length, + "Padding (%u byte%s)", + length, plurality(length, "", "s")); + } + } else { + proto_tree_add_text(pdutree, tvb, offset, length, + "Data (%u byte%s), no template found", + length, plurality(length, "", "s")); + } + + return (0); } #define GOT_LOCAL_ADDR (1 << 0) @@ -2294,3218 +2251,3199 @@ dissect_v9_v10_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, int #define GOT_COMMAND (1 << 9) #define GOT_BASE ( \ - GOT_LOCAL_ADDR | \ - GOT_REMOTE_ADDR | \ - GOT_UID | \ - GOT_PID | \ - GOT_USERNAME | \ - GOT_COMMAND \ - ) + GOT_LOCAL_ADDR | \ + GOT_REMOTE_ADDR | \ + GOT_UID | \ + GOT_PID | \ + GOT_USERNAME | \ + GOT_COMMAND \ + ) #define GOT_TCP_UDP (GOT_BASE | GOT_LOCAL_PORT | GOT_REMOTE_PORT) #define GOT_ICMP (GOT_BASE | GOT_IPv4_ID | GOT_ICMP_ID) static guint dissect_v9_v10_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, int offset, - struct v9_v10_template *tplt, hdrinfo_t *hdrinfo) + v9_v10_tmplt_t *tmplt_p, hdrinfo_t *hdrinfo_p) { - int orig_offset = offset; - - if ((tplt->fields[TF_SCOPES] != NULL) - && (tplt->field_count[TF_SCOPES] > 0)) { - if (hdrinfo->vspec == 9) { - offset += dissect_v9_pdu_scope(tvb, pinfo, pdutree, offset, tplt); - } else if (hdrinfo->vspec == 10) { - offset += dissect_v9_v10_pdu_data(tvb, pinfo, pdutree, offset, tplt, hdrinfo, TF_SCOPES); - } - } - offset += dissect_v9_v10_pdu_data(tvb, pinfo, pdutree, offset, tplt, hdrinfo, TF_ENTRIES); - - return (guint) (offset - orig_offset); + int orig_offset = offset; + + if ((tmplt_p->fields_p[TF_SCOPES] != NULL) + && (tmplt_p->field_count[TF_SCOPES] > 0)) { + if (hdrinfo_p->vspec == 9) { + offset += dissect_v9_pdu_scope(tvb, pinfo, pdutree, offset, tmplt_p); + } else if (hdrinfo_p->vspec == 10) { + offset += dissect_v9_v10_pdu_data(tvb, pinfo, pdutree, offset, tmplt_p, hdrinfo_p, TF_SCOPES); + } + } + offset += dissect_v9_v10_pdu_data(tvb, pinfo, pdutree, offset, tmplt_p, hdrinfo_p, TF_ENTRIES); + + return (guint) (offset - orig_offset); } static guint dissect_v9_pdu_scope(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *pdutree, int offset, - struct v9_v10_template *tplt) + v9_v10_tmplt_t *tmplt_p) { - int orig_offset; - int i; - - DISSECTOR_ASSERT(tplt->fields[TF_SCOPES] != NULL); - - orig_offset = offset; - - for(i = 0; i < tplt->field_count[TF_SCOPES]; i++) { - guint16 type = tplt->fields[TF_SCOPES][i].type; - guint16 length = tplt->fields[TF_SCOPES][i].length; - if (length == 0) { /* XXX: Zero length fields probably shouldn't be included in the cached template */ - /* YYY: Maybe. If you don't cache the zero length fields can you still compare that you actually have the same template with the same ID. See WMeier comment "c." above */ - continue; - } - switch (type) { - /* XXX: template length fields should be validated during template processing ... */ - case 1: /* system */ - proto_tree_add_item(pdutree, hf_cflow_scope_system, - tvb, offset, length, ENC_NA); - break; - case 2: /* interface */ - proto_tree_add_item(pdutree, hf_cflow_scope_interface, - tvb, offset, length, ENC_NA); - break; - case 3: /* linecard */ - proto_tree_add_item(pdutree, hf_cflow_scope_linecard, - tvb, offset, length, ENC_NA); - break; - case 4: /* netflow cache */ - proto_tree_add_item(pdutree, hf_cflow_scope_cache, - tvb, offset, length, ENC_NA); - break; - case 5: /* tplt */ - proto_tree_add_item(pdutree, hf_cflow_scope_template, - tvb, offset, length, ENC_NA); - break; - default: /* unknown */ - proto_tree_add_item(pdutree, hf_cflow_unknown_field_type, - tvb, offset, length, ENC_NA); - break; - } - offset += length; - } - return (guint) (offset - orig_offset); + int orig_offset; + int i; + + DISSECTOR_ASSERT(tmplt_p->fields_p[TF_SCOPES] != NULL); + + orig_offset = offset; + + for(i = 0; i < tmplt_p->field_count[TF_SCOPES]; i++) { + guint16 type = tmplt_p->fields_p[TF_SCOPES][i].type; + guint16 length = tmplt_p->fields_p[TF_SCOPES][i].length; + if (length == 0) { /* XXX: Zero length fields probably shouldn't be included in the cached template */ + /* YYY: Maybe. If you don't cache the zero length fields can you still compare that you actually */ + /* have the same template with the same ID. See WMeier comment "c." above */ + continue; + } + switch (type) { + /* XXX: template length fields should be validated during template processing ... */ + case 1: /* system */ + proto_tree_add_item(pdutree, hf_cflow_scope_system, + tvb, offset, length, ENC_NA); + break; + case 2: /* interface */ + proto_tree_add_item(pdutree, hf_cflow_scope_interface, + tvb, offset, length, ENC_NA); + break; + case 3: /* linecard */ + proto_tree_add_item(pdutree, hf_cflow_scope_linecard, + tvb, offset, length, ENC_NA); + break; + case 4: /* netflow cache */ + proto_tree_add_item(pdutree, hf_cflow_scope_cache, + tvb, offset, length, ENC_NA); + break; + case 5: /* tmplt */ + proto_tree_add_item(pdutree, hf_cflow_scope_template, + tvb, offset, length, ENC_NA); + break; + default: /* unknown */ + proto_tree_add_item(pdutree, hf_cflow_unknown_field_type, + tvb, offset, length, ENC_NA); + break; + } + offset += length; + } + return (guint) (offset - orig_offset); } static guint dissect_v9_v10_pdu_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, int offset, - struct v9_v10_template *tplt, hdrinfo_t *hdrinfo, v9_v10_template_fields_type_t fields_type) + v9_v10_tmplt_t *tmplt_p, hdrinfo_t *hdrinfo_p, v9_v10_tmplt_fields_type_t fields_type) { - int orig_offset; - int rev; - nstime_t ts_start[2], ts_end[2]; - int offset_s[2], offset_e[2]; - nstime_t ts; - guint32 msec_start[2], msec_end[2]; - guint32 msec_delta; - nstime_t ts_delta; - guint32 usec; - int i; - - address local_addr, remote_addr; - guint16 local_port = 0, remote_port = 0/*, ipv4_id = 0, icmp_id = 0*/; - guint32 uid = 0, pid = 0; - int uname_len; - gchar *uname_str = NULL; - int cmd_len; - gchar *cmd_str = NULL; - guint16 got_flags = 0; - - int string_len_short = 0; - int string_len_long = 0; - - proto_tree *string_tree; - - gchar * gen_str = NULL; - int gen_str_offset = 0; - - proto_item *ti; - guint16 count; - struct v9_v10_template_entry *entries; - proto_tree *fwdstattree; - - entries = tplt->fields[fields_type]; - if (entries == NULL) { - /* I don't think we can actually hit this condition. - If we can, what would cause it? Does this need a - warn? If so what? - */ - return 0; - } - orig_offset = offset; - count = tplt->field_count[fields_type]; - - offset_s[0] = offset_s[1] = offset_e[0] = offset_e[1] = 0; - msec_start[0] = msec_start[1] = msec_end[0] = msec_end[1] = 0; - - for (i = 0; i < count; i++) { - guint64 pen_type; - guint16 type; - guint16 masked_type; - guint16 length; - guint32 pen; - const gchar *pen_str; - int vstr_len; - - type = entries[i].type; - length = entries[i].length; - pen = entries[i].pen; - pen_str = entries[i].pen_str; - - if (length == 0) { /* XXX: Zero length fields probably shouldn't be included in the cached template */ - /* YYY: Maybe. If you don't cache the zero length fields can you still compare that you actually have the same template with the same ID. See WMeier comment "c." above */ - continue; - } - /* See if variable length field */ - vstr_len = 0; - if (length == VARIABLE_LENGTH) { - vstr_len = 1; - string_len_short = length = tvb_get_guint8(tvb, offset); - if (length == 255) { - vstr_len = 3; - string_len_long = length = tvb_get_ntohs(tvb, offset+1); - } - offset += vstr_len; - gen_str_offset = offset; - } - - /* v9 types - * 0x 0000 0000 0000 to - * 0x 0000 0000 ffff - * v10 global types (presumably consistent with v9 types 0x0000 - 0x7fff) - * 0x 0000 0000 0000 to - * 0x 0000 0000 7fff - * V10 Enterprise types - * 0x 0000 0001 0000 to - * 0x ffff ffff 7fff - */ - pen_type = masked_type = type; - rev = 0; - - if ((hdrinfo->vspec == 10) && (type & 0x8000)) { - pen_type = masked_type = type & 0x7fff; - if (pen == REVPEN) { /* reverse PEN */ - rev = 1; - } else if (pen == 0) { - pen_type = (0xffff << 16) | pen_type; /* hack to force "unknown" */ - } else { - pen_type = (pen << 16) | pen_type; - } - } - - ti = NULL; - switch (pen_type) { - - case 1: /* bytes */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_octets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Octets: length %u", length); - } - break; - - case 2: /* packets */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_packets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_packets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Packets: length %u", length); - } - break; - - case 163: /* observedFlowTotalCount */ - case 3: /* flows */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_flows, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_flows64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Flows: length %u", length); - } - break; - - case 4: /* proto */ - ti = proto_tree_add_item(pdutree, hf_cflow_prot, - tvb, offset, length, ENC_NA); - break; - - case 5: /* TOS */ - ti = proto_tree_add_item(pdutree, hf_cflow_tos, - tvb, offset, length, ENC_NA); - break; - - case 6: /* TCP flags */ - ti = proto_tree_add_item(pdutree, hf_cflow_tcpflags, - tvb, offset, length, ENC_NA); - break; - - case 7: /* source port */ - case 180: /* udpSourcePort */ - case 182: /* tcpSourcePort */ - ti = proto_tree_add_item(pdutree, hf_cflow_srcport, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 8: /* source IP */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_srcaddr, - tvb, offset, length, ENC_NA); - } else if (length == 16) { - ti = proto_tree_add_item(pdutree, hf_cflow_srcaddr_v6, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "SrcAddr: length %u", length); - } - break; - - case 9: /* source mask */ - ti = proto_tree_add_item(pdutree, hf_cflow_srcmask, - tvb, offset, length, ENC_NA); - break; - - case 10: /* input SNMP */ - ti = proto_tree_add_item(pdutree, hf_cflow_inputint, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 11: /* dest port */ - case 181: /* udpDestinationPort */ - case 183: /* tcpDestinationPort */ - ti = proto_tree_add_item(pdutree, hf_cflow_dstport, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 12: /* dest IP */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_dstaddr, - tvb, offset, length, ENC_NA); - } else if (length == 16) { - ti = proto_tree_add_item(pdutree, hf_cflow_dstaddr_v6, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "DstAddr: length %u", length); - } - break; - - case 13: /* dest mask */ - ti = proto_tree_add_item(pdutree, hf_cflow_dstmask, - tvb, offset, length, ENC_NA); - break; - - case 14: /* output SNMP */ - ti = proto_tree_add_item(pdutree, hf_cflow_outputint, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 15: /* nexthop IP */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_nexthop, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "NextHop: length %u", length); - } - break; - - case 16: /* source AS */ - ti = proto_tree_add_item(pdutree, hf_cflow_srcas, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 17: /* dest AS */ - ti = proto_tree_add_item(pdutree, hf_cflow_dstas, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 18: /* BGP nexthop IP */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_bgpnexthop, - tvb, offset, length, ENC_NA); - } else if (length == 16) { - ti = proto_tree_add_item(pdutree, hf_cflow_bgpnexthop_v6, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "BGPNextHop: length %u", length); - } - break; - - case 19: /* multicast packets */ - ti = proto_tree_add_item(pdutree, hf_cflow_mulpackets, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 20: /* multicast octets */ - ti = proto_tree_add_item(pdutree, hf_cflow_muloctets, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 21: /* last switched */ - offset_e[rev] = offset; - msec_end[rev] = tvb_get_ntohl(tvb, offset); - ts_end[rev].secs = msec_end[rev] / 1000; - ts_end[rev].nsecs = (msec_end[rev] % 1000) * 1000000; - goto timestamp_common; - break; - case 22: /* first switched */ - offset_s[rev] = offset; - msec_start[rev] = tvb_get_ntohl(tvb, offset); - ts_start[rev].secs = msec_start[rev] / 1000; - ts_start[rev].nsecs = (msec_start[rev] % 1000) * 1000000; - goto timestamp_common; - break; - - case 150: /* flowStartSeconds */ - offset_s[rev] = offset; - ts_start[rev].secs = tvb_get_ntohl(tvb, offset); - ts_start[rev].nsecs = 0; - goto timestamp_common; - break; - - case 151: /* flowEndSeconds */ - offset_e[rev] = offset; - ts_end[rev].secs = tvb_get_ntohl(tvb, offset); - ts_end[rev].nsecs = 0; - goto timestamp_common; - break; - - case 152: /* flowStartMilliseconds: 64-bit integer */ - offset_s[rev] = offset; - ts_start[rev].secs = tvb_get_ntoh64(tvb, offset)/1000; - ts_start[rev].nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) * 1000000; - goto timestamp_common; - break; - - case 153: /* flowEndMilliseconds; 64-bit integer */ - offset_e[rev] = offset; - ts_end[rev].secs = (tvb_get_ntoh64(tvb, offset)/1000); - ts_end[rev].nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) * 1000000; - goto timestamp_common; - break; - - case 154: /* flowStartMicroseconds: 64-bit NTP format */ - offset_s[rev] = offset; - ntp_to_nstime(tvb, offset, &ts_start[rev]); - goto timestamp_common; - break; - - case 155: /* flowEndMicroseconds: 64-bit NTP format */ - /* XXX: Not tested ... */ - offset_e[rev] = offset; - ntp_to_nstime(tvb, offset, &ts_end[rev]); - goto timestamp_common; - break; - - case 156: /* flowStartNanoseconds: 64-bit NTP format */ - /* XXX: Not tested ... */ - offset_s[rev] = offset; - ntp_to_nstime(tvb, offset, &ts_start[rev]); - goto timestamp_common; - break; - - case 157: /* flowEndNanoseconds: 64-bit NTP format */ - /* XXX: Not tested ... */ - offset_e[rev] = offset; - ntp_to_nstime(tvb, offset, &ts_end[rev]); - goto timestamp_common; - break; - - case 158: /* flowStartDeltaMicroseconds: 32-bit integer; negative time offset */ - /* relative to the export time specified in the IPFIX Message Header */ - /* XXX: Not tested ... */ - offset_s[rev] = offset; - usec = tvb_get_ntohl(tvb, offset); - ts_start[rev].secs = (((guint64)(hdrinfo->export_time_secs)*1000000 - usec) / 1000000); - ts_start[rev].nsecs = (int)(((guint64)(hdrinfo->export_time_secs)*1000000 - usec) % 1000000) * 1000; - goto timestamp_common; - break; - - case 159: /* flowEndDeltaMicroseconds: 32-bit integer; negative time offset */ - /* relative to the export time specified in the IPFIX Message Header */ - /* XXX: Not tested ... */ - offset_e[rev] = offset; - usec = tvb_get_ntohl(tvb, offset); - ts_end[rev].secs = (((guint64)(hdrinfo->export_time_secs)*1000000 - usec) / 1000000); - ts_end[rev].nsecs = (int)(((guint64)(hdrinfo->export_time_secs)*1000000 - usec) % 1000000) * 1000; - - /* This code executed for all timestamp fields above */ - /* !! Assumption: Only 1 set of time fields in a flow */ - timestamp_common: - if(offset_s[rev] && offset_e[rev]) { - proto_tree *timetree; - proto_item *timeitem; - - nstime_delta(&ts_delta, &ts_end[rev], &ts_start[rev]); - timeitem = - proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, - offset_s[rev], 0, &ts_delta); - PROTO_ITEM_SET_GENERATED(timeitem); - timetree = proto_item_add_subtree(timeitem, ett_flowtime); - /* Note: length of "start" is assumed to match that of "end" */ - if (msec_start[rev]) { - proto_tree_add_time(timetree, hf_cflow_timestart, tvb, - offset_s[rev], length, &ts_start[rev]); - } else { - proto_tree_add_time(timetree, hf_cflow_abstimestart, tvb, - offset_s[rev], length, &ts_start[rev]); - } - if (msec_end[rev]) { - proto_tree_add_time(timetree, hf_cflow_timeend, tvb, - offset_e[rev], length, &ts_end[rev]); - } else { - proto_tree_add_time(timetree, hf_cflow_abstimeend, tvb, - offset_e[rev], length, &ts_end[rev]); - } - } - break; - - case 23: /* postOctetDeltaCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_octets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Post Octets: length %u", length); - } - break; - - case 24: /* postPacketDeltaCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_packets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_packets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Post Packets: length %u", length); - } - break; - - case 25: /* length_min */ - ti = proto_tree_add_item(pdutree, hf_cflow_length_min, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 26: /* length_max */ - ti = proto_tree_add_item(pdutree, hf_cflow_length_max, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 27: /* IPv6 src addr */ - ti = proto_tree_add_item(pdutree, hf_cflow_srcaddr_v6, - tvb, offset, length, ENC_NA); - break; - - case 28: /* IPv6 dst addr */ - ti = proto_tree_add_item(pdutree, hf_cflow_dstaddr_v6, - tvb, offset, length, ENC_NA); - break; - - case 29: /* IPv6 src addr mask */ - ti = proto_tree_add_item(pdutree, hf_cflow_srcmask_v6, - tvb, offset, length, ENC_NA); - break; - - case 30: /* IPv6 dst addr mask */ - ti = proto_tree_add_item(pdutree, hf_cflow_dstmask_v6, - tvb, offset, length, ENC_NA); - break; - - case 31: /* flowLabelIPv6 */ - /* RFC5102 defines that Abstract Data Type of this - Information Element is unsigned32 */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_flowlabel, - tvb, offset, length, ENC_BIG_ENDIAN); - } - /* RFC3954 defines that length of this field is 3 - Bytes */ - else if (length == 3) { - ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_flowlabel24, - tvb, offset, length, ENC_BIG_ENDIAN); - } - break; - - case 32: /* ICMP_TYPE */ - ti = proto_tree_add_item(pdutree, hf_cflow_icmp_type, - tvb, offset, length, ENC_NA); - break; - - case 33: /* IGMP_TYPE */ - ti = proto_tree_add_item(pdutree, hf_cflow_igmp_type, - tvb, offset, length, ENC_NA); - break; - - case 34: /* sampling interval */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampling_interval, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 35: /* sampling algorithm */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampling_algorithm, - tvb, offset, length, ENC_NA); - break; - - case 36: /* flow active timeout */ - ti = proto_tree_add_item(pdutree, hf_cflow_flow_active_timeout, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 37: /* flow inactive timeout */ - ti = proto_tree_add_item(pdutree, hf_cflow_flow_inactive_timeout, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 38: /* engine type */ - ti = proto_tree_add_item(pdutree, hf_cflow_engine_type, - tvb, offset, length, ENC_NA); - break; - - case 39: /* engine id*/ - ti = proto_tree_add_item(pdutree, hf_cflow_engine_id, - tvb, offset, length, ENC_NA); - break; - - case 40: /* bytes exported */ - if( length == 8 ) { - ti = proto_tree_add_item(pdutree, hf_cflow_octets_exp64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if( length == 4 ) { - ti = proto_tree_add_item(pdutree, hf_cflow_octets_exp, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "BytesExported: length %u", length); - } - break; - - case 41: /* packets exported */ - if( length == 8 ) { - ti = proto_tree_add_item(pdutree, hf_cflow_packets_exp64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if( length == 4 ) { - ti = proto_tree_add_item(pdutree, hf_cflow_packets_exp, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "PacketsExported: length %u", length); - } - break; - - case 42: /* flows exported */ - if( length == 8 ) { - ti = proto_tree_add_item(pdutree, hf_cflow_flows_exp64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if( length == 4 ) { - ti = proto_tree_add_item(pdutree, hf_cflow_flows_exp, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "FlowsExported: length %u", length); - } - break; - - case 44: /* IP source prefix */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_srcprefix, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "SrcPrefix: length %u", length); - } - break; - - case 45: /* IP destination prefix */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_dstprefix, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "DstPrefix: length %u", length); - } - break; - - case 46: /* top MPLS label type*/ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_type, - tvb, offset, length, ENC_NA); - break; - - case 47: /* top MPLS label PE address*/ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_pe_addr, - tvb, offset, length, ENC_NA); - break; - - case 48: /* Flow Sampler ID */ + int orig_offset; + int rev; + nstime_t ts_start[2], ts_end[2]; + int offset_s[2], offset_e[2]; + nstime_t ts; + guint32 msec_start[2], msec_end[2]; + guint32 msec_delta; + nstime_t ts_delta; + guint32 usec; + int i; + + address local_addr, remote_addr; + guint16 local_port = 0, remote_port = 0/*, ipv4_id = 0, icmp_id = 0*/; + guint32 uid = 0, pid = 0; + int uname_len; + gchar *uname_str = NULL; + int cmd_len; + gchar *cmd_str = NULL; + guint16 got_flags = 0; + + int string_len_short = 0; + int string_len_long = 0; + + proto_tree *string_tree; + + gchar *gen_str = NULL; + int gen_str_offset = 0; + + proto_item *ti; + guint16 count; + v9_v10_tmplt_entry_t *entries_p; + proto_tree *fwdstattree; + + entries_p = tmplt_p->fields_p[fields_type]; + if (entries_p == NULL) { + /* I don't think we can actually hit this condition. + If we can, what would cause it? Does this need a + warn? If so, what? + */ + return 0; + } + orig_offset = offset; + count = tmplt_p->field_count[fields_type]; + + offset_s[0] = offset_s[1] = offset_e[0] = offset_e[1] = 0; + msec_start[0] = msec_start[1] = msec_end[0] = msec_end[1] = 0; + + for (i = 0; i < count; i++) { + guint64 pen_type; + guint16 type; + guint16 masked_type; + guint16 length; + guint32 pen; + const gchar *pen_str; + int vstr_len; + + type = entries_p[i].type; + length = entries_p[i].length; + pen = entries_p[i].pen; + pen_str = entries_p[i].pen_str; + + if (length == 0) { /* XXX: Zero length fields probably shouldn't be included in the cached template */ + /* YYY: Maybe. If you don't cache the zero length fields can you still compare that you actually */ + /* have the same template with the same ID. See WMeier comment "c." above */ + continue; + } + /* See if variable length field */ + vstr_len = 0; + if (length == VARIABLE_LENGTH) { + vstr_len = 1; + string_len_short = length = tvb_get_guint8(tvb, offset); + if (length == 255) { + vstr_len = 3; + string_len_long = length = tvb_get_ntohs(tvb, offset+1); + } + offset += vstr_len; + gen_str_offset = offset; + } + + /* v9 types + * 0x 0000 0000 0000 to + * 0x 0000 0000 ffff + * v10 global types (presumably consistent with v9 types 0x0000 - 0x7fff) + * 0x 0000 0000 0000 to + * 0x 0000 0000 7fff + * V10 Enterprise types + * 0x 0000 0001 0000 to + * 0x ffff ffff 7fff + */ + pen_type = masked_type = type; + rev = 0; + + if ((hdrinfo_p->vspec == 10) && (type & 0x8000)) { + pen_type = masked_type = type & 0x7fff; + if (pen == REVPEN) { /* reverse PEN */ + rev = 1; + } else if (pen == 0) { + pen_type = (0xffff << 16) | pen_type; /* hack to force "unknown" */ + } else { + pen_type = (pen << 16) | pen_type; + } + } + + ti = NULL; + switch (pen_type) { + + case 1: /* bytes */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_octets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Octets: length %u", length); + } + break; + + case 2: /* packets */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_packets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_packets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Packets: length %u", length); + } + break; + + case 163: /* observedFlowTotalCount */ + case 3: /* flows */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_flows, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_flows64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Flows: length %u", length); + } + break; + + case 4: /* proto */ + ti = proto_tree_add_item(pdutree, hf_cflow_prot, + tvb, offset, length, ENC_NA); + break; + + case 5: /* TOS */ + ti = proto_tree_add_item(pdutree, hf_cflow_tos, + tvb, offset, length, ENC_NA); + break; + + case 6: /* TCP flags */ + ti = proto_tree_add_item(pdutree, hf_cflow_tcpflags, + tvb, offset, length, ENC_NA); + break; + + case 7: /* source port */ + case 180: /* udpSourcePort */ + case 182: /* tcpSourcePort */ + ti = proto_tree_add_item(pdutree, hf_cflow_srcport, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 8: /* source IP */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_srcaddr, + tvb, offset, length, ENC_NA); + } else if (length == 16) { + ti = proto_tree_add_item(pdutree, hf_cflow_srcaddr_v6, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "SrcAddr: length %u", length); + } + break; + + case 9: /* source mask */ + ti = proto_tree_add_item(pdutree, hf_cflow_srcmask, + tvb, offset, length, ENC_NA); + break; + + case 10: /* input SNMP */ + ti = proto_tree_add_item(pdutree, hf_cflow_inputint, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 11: /* dest port */ + case 181: /* udpDestinationPort */ + case 183: /* tcpDestinationPort */ + ti = proto_tree_add_item(pdutree, hf_cflow_dstport, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 12: /* dest IP */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_dstaddr, + tvb, offset, length, ENC_NA); + } else if (length == 16) { + ti = proto_tree_add_item(pdutree, hf_cflow_dstaddr_v6, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "DstAddr: length %u", length); + } + break; + + case 13: /* dest mask */ + ti = proto_tree_add_item(pdutree, hf_cflow_dstmask, + tvb, offset, length, ENC_NA); + break; + + case 14: /* output SNMP */ + ti = proto_tree_add_item(pdutree, hf_cflow_outputint, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 15: /* nexthop IP */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_nexthop, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "NextHop: length %u", length); + } + break; + + case 16: /* source AS */ + ti = proto_tree_add_item(pdutree, hf_cflow_srcas, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 17: /* dest AS */ + ti = proto_tree_add_item(pdutree, hf_cflow_dstas, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 18: /* BGP nexthop IP */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_bgpnexthop, + tvb, offset, length, ENC_NA); + } else if (length == 16) { + ti = proto_tree_add_item(pdutree, hf_cflow_bgpnexthop_v6, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "BGPNextHop: length %u", length); + } + break; + + case 19: /* multicast packets */ + ti = proto_tree_add_item(pdutree, hf_cflow_mulpackets, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 20: /* multicast octets */ + ti = proto_tree_add_item(pdutree, hf_cflow_muloctets, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 21: /* last switched */ + offset_e[rev] = offset; + msec_end[rev] = tvb_get_ntohl(tvb, offset); + ts_end[rev].secs = msec_end[rev] / 1000; + ts_end[rev].nsecs = (msec_end[rev] % 1000) * 1000000; + goto timestamp_common; + break; + case 22: /* first switched */ + offset_s[rev] = offset; + msec_start[rev] = tvb_get_ntohl(tvb, offset); + ts_start[rev].secs = msec_start[rev] / 1000; + ts_start[rev].nsecs = (msec_start[rev] % 1000) * 1000000; + goto timestamp_common; + break; + + case 150: /* flowStartSeconds */ + offset_s[rev] = offset; + ts_start[rev].secs = tvb_get_ntohl(tvb, offset); + ts_start[rev].nsecs = 0; + goto timestamp_common; + break; + + case 151: /* flowEndSeconds */ + offset_e[rev] = offset; + ts_end[rev].secs = tvb_get_ntohl(tvb, offset); + ts_end[rev].nsecs = 0; + goto timestamp_common; + break; + + case 152: /* flowStartMilliseconds: 64-bit integer */ + offset_s[rev] = offset; + ts_start[rev].secs = tvb_get_ntoh64(tvb, offset)/1000; + ts_start[rev].nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) * 1000000; + goto timestamp_common; + break; + + case 153: /* flowEndMilliseconds; 64-bit integer */ + offset_e[rev] = offset; + ts_end[rev].secs = (tvb_get_ntoh64(tvb, offset)/1000); + ts_end[rev].nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) * 1000000; + goto timestamp_common; + break; + + case 154: /* flowStartMicroseconds: 64-bit NTP format */ + offset_s[rev] = offset; + ntp_to_nstime(tvb, offset, &ts_start[rev]); + goto timestamp_common; + break; + + case 155: /* flowEndMicroseconds: 64-bit NTP format */ + /* XXX: Not tested ... */ + offset_e[rev] = offset; + ntp_to_nstime(tvb, offset, &ts_end[rev]); + goto timestamp_common; + break; + + case 156: /* flowStartNanoseconds: 64-bit NTP format */ + /* XXX: Not tested ... */ + offset_s[rev] = offset; + ntp_to_nstime(tvb, offset, &ts_start[rev]); + goto timestamp_common; + break; + + case 157: /* flowEndNanoseconds: 64-bit NTP format */ + /* XXX: Not tested ... */ + offset_e[rev] = offset; + ntp_to_nstime(tvb, offset, &ts_end[rev]); + goto timestamp_common; + break; + + case 158: /* flowStartDeltaMicroseconds: 32-bit integer; negative time offset */ + /* relative to the export time specified in the IPFIX Message Header */ + /* XXX: Not tested ... */ + offset_s[rev] = offset; + usec = tvb_get_ntohl(tvb, offset); + ts_start[rev].secs = (((guint64)(hdrinfo_p->export_time_secs)*1000000 - usec) / 1000000); + ts_start[rev].nsecs = (int)(((guint64)(hdrinfo_p->export_time_secs)*1000000 - usec) % 1000000) * 1000; + goto timestamp_common; + break; + + case 159: /* flowEndDeltaMicroseconds: 32-bit integer; negative time offset */ + /* relative to the export time specified in the IPFIX Message Header */ + /* XXX: Not tested ... */ + offset_e[rev] = offset; + usec = tvb_get_ntohl(tvb, offset); + ts_end[rev].secs = (((guint64)(hdrinfo_p->export_time_secs)*1000000 - usec) / 1000000); + ts_end[rev].nsecs = (int)(((guint64)(hdrinfo_p->export_time_secs)*1000000 - usec) % 1000000) * 1000; + + /* This code executed for all timestamp fields above */ + /* !! Assumption: Only 1 set of time fields in a flow */ + timestamp_common: + if(offset_s[rev] && offset_e[rev]) { + proto_tree *timetree; + proto_item *timeitem; + + nstime_delta(&ts_delta, &ts_end[rev], &ts_start[rev]); + timeitem = + proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, + offset_s[rev], 0, &ts_delta); + PROTO_ITEM_SET_GENERATED(timeitem); + timetree = proto_item_add_subtree(timeitem, ett_flowtime); + /* Note: length of "start" is assumed to match that of "end" */ + if (msec_start[rev]) { + proto_tree_add_time(timetree, hf_cflow_timestart, tvb, + offset_s[rev], length, &ts_start[rev]); + } else { + proto_tree_add_time(timetree, hf_cflow_abstimestart, tvb, + offset_s[rev], length, &ts_start[rev]); + } + if (msec_end[rev]) { + proto_tree_add_time(timetree, hf_cflow_timeend, tvb, + offset_e[rev], length, &ts_end[rev]); + } else { + proto_tree_add_time(timetree, hf_cflow_abstimeend, tvb, + offset_e[rev], length, &ts_end[rev]); + } + } + break; + + case 23: /* postOctetDeltaCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_octets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Post Octets: length %u", length); + } + break; + + case 24: /* postPacketDeltaCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_packets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_packets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Post Packets: length %u", length); + } + break; + + case 25: /* length_min */ + ti = proto_tree_add_item(pdutree, hf_cflow_length_min, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 26: /* length_max */ + ti = proto_tree_add_item(pdutree, hf_cflow_length_max, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 27: /* IPv6 src addr */ + ti = proto_tree_add_item(pdutree, hf_cflow_srcaddr_v6, + tvb, offset, length, ENC_NA); + break; + + case 28: /* IPv6 dst addr */ + ti = proto_tree_add_item(pdutree, hf_cflow_dstaddr_v6, + tvb, offset, length, ENC_NA); + break; + + case 29: /* IPv6 src addr mask */ + ti = proto_tree_add_item(pdutree, hf_cflow_srcmask_v6, + tvb, offset, length, ENC_NA); + break; + + case 30: /* IPv6 dst addr mask */ + ti = proto_tree_add_item(pdutree, hf_cflow_dstmask_v6, + tvb, offset, length, ENC_NA); + break; + + case 31: /* flowLabelIPv6 */ + /* RFC5102 defines that Abstract Data Type of this + Information Element is unsigned32 */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_flowlabel, + tvb, offset, length, ENC_BIG_ENDIAN); + } + /* RFC3954 defines that length of this field is 3 + Bytes */ + else if (length == 3) { + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_flowlabel24, + tvb, offset, length, ENC_BIG_ENDIAN); + } + break; + + case 32: /* ICMP_TYPE */ + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_type, + tvb, offset, length, ENC_NA); + break; + + case 33: /* IGMP_TYPE */ + ti = proto_tree_add_item(pdutree, hf_cflow_igmp_type, + tvb, offset, length, ENC_NA); + break; + + case 34: /* sampling interval */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_interval, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 35: /* sampling algorithm */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_algorithm, + tvb, offset, length, ENC_NA); + break; + + case 36: /* flow active timeout */ + ti = proto_tree_add_item(pdutree, hf_cflow_flow_active_timeout, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 37: /* flow inactive timeout */ + ti = proto_tree_add_item(pdutree, hf_cflow_flow_inactive_timeout, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 38: /* engine type */ + ti = proto_tree_add_item(pdutree, hf_cflow_engine_type, + tvb, offset, length, ENC_NA); + break; + + case 39: /* engine id*/ + ti = proto_tree_add_item(pdutree, hf_cflow_engine_id, + tvb, offset, length, ENC_NA); + break; + + case 40: /* bytes exported */ + if( length == 8 ) { + ti = proto_tree_add_item(pdutree, hf_cflow_octets_exp64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if( length == 4 ) { + ti = proto_tree_add_item(pdutree, hf_cflow_octets_exp, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "BytesExported: length %u", length); + } + break; + + case 41: /* packets exported */ + if( length == 8 ) { + ti = proto_tree_add_item(pdutree, hf_cflow_packets_exp64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if( length == 4 ) { + ti = proto_tree_add_item(pdutree, hf_cflow_packets_exp, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "PacketsExported: length %u", length); + } + break; + + case 42: /* flows exported */ + if( length == 8 ) { + ti = proto_tree_add_item(pdutree, hf_cflow_flows_exp64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if( length == 4 ) { + ti = proto_tree_add_item(pdutree, hf_cflow_flows_exp, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "FlowsExported: length %u", length); + } + break; + + case 44: /* IP source prefix */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_srcprefix, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "SrcPrefix: length %u", length); + } + break; + + case 45: /* IP destination prefix */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_dstprefix, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "DstPrefix: length %u", length); + } + break; + + case 46: /* top MPLS label type*/ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_type, + tvb, offset, length, ENC_NA); + break; + + case 47: /* top MPLS label PE address*/ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_pe_addr, + tvb, offset, length, ENC_NA); + break; + + case 48: /* Flow Sampler ID */ #if 0 - /* XXX: Why was code originally add_text for just this one case ? */ - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "FlowSamplerID: %d", tvb_get_guint8(tvb, offset)); + /* XXX: Why was code originally add_text for just this one case ? */ + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "FlowSamplerID: %d", tvb_get_guint8(tvb, offset)); #endif - ti = proto_tree_add_item(pdutree, hf_cflow_sampler_id, - tvb, offset, length, ENC_NA); - break; - - case 49: /* FLOW_SAMPLER_MODE */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampler_mode, - tvb, offset, length, ENC_NA); - break; - - case 50: /* FLOW_SAMPLER_RANDOM_INTERVAL */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampler_random_interval, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 51: /* FLOW_CLASS */ - ti = proto_tree_add_item(pdutree, hf_cflow_flow_class, - tvb, offset, length, ENC_NA); - break; - - case 52: /* TTL_MINIMUM */ - ti = proto_tree_add_item(pdutree, hf_cflow_ttl_minimum, - tvb, offset, length, ENC_NA); - break; - - case 53: /* TTL_MAXIMUM */ - ti = proto_tree_add_item(pdutree, hf_cflow_ttl_maximum, - tvb, offset, length, ENC_NA); - break; - - case 54: /* IPV4_ID */ - ti = proto_tree_add_item(pdutree, hf_cflow_ipv4_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 55: /* postIpClassOfService */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_tos, - tvb, offset, length, ENC_NA); - break; - - case 56: /* sourceMacAddress */ - ti = proto_tree_add_item(pdutree, hf_cflow_srcmac, - tvb, offset, length, ENC_NA); - break; - - case 57: /* postDestinationMacAddress */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_dstmac, - tvb, offset, length, ENC_NA); - break; - - case 58: /* vlanId */ - ti = proto_tree_add_item(pdutree, hf_cflow_vlanid, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 59: /* postVlanId */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_vlanid, - tvb, offset, length, ENC_NA); - break; - - case 60: /* IP_VERSION */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_version, - tvb, offset, length, ENC_NA); - break; - - case 61: /* DIRECTION */ - ti = proto_tree_add_item(pdutree, hf_cflow_direction, - tvb, offset, length, ENC_NA); - break; - - case 62: /* IPV6_NEXT_HOP */ - if (length == 16) { - ti = proto_tree_add_item(pdutree, hf_cflow_nexthop_v6, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "NextHop: length %u", length); - } - break; - - case 63: /* BGP_IPV6_NEXT_HOP */ - if (length == 16) { - ti = proto_tree_add_item(pdutree, hf_cflow_bgpnexthop_v6, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "BGPNextHop: length %u", length); - } - break; - - case 64: /* ipv6ExtensionHeaders */ - ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_exthdr, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 70: /* MPLS label1*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 1); - break; - - case 71: /* MPLS label2*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 2); - break; - - case 72: /* MPLS label3*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 3); - break; - - case 73: /* MPLS label4*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 4); - break; - - case 74: /* MPLS label5*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 5); - break; - - case 75: /* MPLS label6*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 6); - break; - - case 76: /* MPLS label7*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 7); - break; - - case 77: /* MPLS label8*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 8); - break; - - case 78: /* MPLS label9*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 9); - break; - - case 79: /* MPLS label10*/ - ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 10); - break; - - case 80: /* destinationMacAddress */ - ti = proto_tree_add_item(pdutree, hf_cflow_dstmac, - tvb, offset, length, ENC_NA); - break; - - case 81: /* postSourceMacAddress */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_srcmac, - tvb, offset, length, ENC_NA); - break; - - case 82: /* IF_NAME */ - ti = proto_tree_add_item(pdutree, hf_cflow_if_name, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 83: /* IF_DESCR */ - ti = proto_tree_add_item(pdutree, hf_cflow_if_descr, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 84: /* SAMPLER_NAME */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampler_name, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 85: /* BYTES_PERMANENT */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_permanent_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_permanent_octets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Running Octets: length %u", length); - } - break; - - case 86: /* PACKETS_PERMANENT */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_permanent_packets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_permanent_packets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Running Packets: length %u", length); - } - break; - - case 88: /* fragmentOffset */ - ti = proto_tree_add_item(pdutree, hf_cflow_fragment_offset, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 89: { - /* FORWARDING_STATUS */ - /* Forwarding status is encoded on 1 byte with - * the 2 left bits giving the status and the 6 - * remaining bits giving the reason code. */ - - guint8 forwarding_status; - const value_string *x_vs; - int x_hf; - - ti = proto_tree_add_text(pdutree, tvb, offset, length, "Forwarding Status"); - fwdstattree = proto_item_add_subtree(ti, ett_fwdstat); - - forwarding_status = tvb_get_guint8(tvb, offset)>>6; - switch(forwarding_status) { - default: - case FORWARDING_STATUS_UNKNOWN: - x_vs = v9_forwarding_status_unknown_code; - x_hf = hf_cflow_forwarding_status_unknown_code; - break; - case FORWARDING_STATUS_FORWARD: - x_vs = v9_forwarding_status_forward_code; - x_hf = hf_cflow_forwarding_status_forward_code; - break; - case FORWARDING_STATUS_DROP: - x_vs = v9_forwarding_status_drop_code; - x_hf = hf_cflow_forwarding_status_drop_code; - break; - case FORWARDING_STATUS_CONSUME: - x_vs = v9_forwarding_status_consume_code; - x_hf = hf_cflow_forwarding_status_consume_code; - break; - } - - proto_tree_add_item(fwdstattree, hf_cflow_forwarding_status, - tvb, offset, length, ENC_NA); - - proto_tree_add_item(fwdstattree, x_hf, - tvb, offset, length, ENC_NA); - - /* add status code to tree summary */ - if (length==1) { - proto_item_append_text(ti, ": %s", val_to_str_const(forwarding_status, - v9_forwarding_status, "(Unknown)")); - proto_item_append_text(ti, ": %s", val_to_str_const((tvb_get_guint8(tvb, offset)&0x3F), - x_vs, "(Unknown)")); - }; - } - break; - - case 90: /* mplsVpnRouteDistinguisher */ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_vpn_rd, - tvb, offset, length, ENC_NA); - break; - - case 91: /* mplsTopLabelPrefixLength */ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_prefix_length, - tvb, offset, length, ENC_NA); - break; - - case 94: /* NBAR applicationDesc */ - ti = proto_tree_add_item(pdutree, hf_cflow_nbar_appl_desc, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 95: /* NBAR applicationId */ - ti = proto_tree_add_item(pdutree, hf_cflow_nbar_appl_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 96: /* NBAR applicationName */ - ti = proto_tree_add_item(pdutree, hf_cflow_nbar_appl_name, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 98: /* postIpDiffServCodePoint */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_ip_diff_serv_code_point, - tvb, offset, length, ENC_NA); - break; - - case 99: /* multicastReplicationFactor */ - ti = proto_tree_add_item(pdutree, hf_cflow_multicast_replication_factor, - tvb, offset, length, ENC_NA); - break; - - case 128: /* dest AS Peer */ - ti = proto_tree_add_item(pdutree, hf_cflow_peer_dstas, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 129: /* source AS Peer*/ - ti = proto_tree_add_item(pdutree, hf_cflow_peer_srcas, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 130: /* exporterIPv4Address */ - ti = proto_tree_add_item(pdutree, hf_cflow_exporter_addr, - tvb, offset, length, ENC_NA); - break; - - case 131: /* exporterIPv6Address */ - ti = proto_tree_add_item(pdutree, - hf_cflow_exporter_addr_v6, - tvb, offset, length, ENC_NA); - break; - - case 132: /* droppedOctetDeltaCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_drop_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_drop_octets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "Dropped Octets: length %u", - length); - } - break; - - case 133: /* droppedPacketDeltaCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_drop_packets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_drop_packets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "Dropped Packets: length %u", - length); - } - break; - - case 134: /* droppedOctetTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_octets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "Dropped Total Octets: length %u", length); - } - break; - - case 135: /* droppedPacketTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_packets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_packets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "Dropped Total Packets: length %u", length); - } - break; - - case 136: /* flowEndReason */ - ti = proto_tree_add_item(pdutree, hf_cflow_flow_end_reason, - tvb, offset, length, ENC_NA); - break; - - case 137: /* commonPropertiesId */ - ti = proto_tree_add_item(pdutree, hf_cflow_common_properties_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 138: /* observationPointId */ - ti = proto_tree_add_item(pdutree, hf_cflow_observation_point_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 139: /* icmpTypeCodeIPv6 */ - ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_type, - tvb, offset, 1, ENC_NA); - ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_code, - tvb, offset + 1, 1, ENC_NA); - break; - - case 140: /* mplsTopLabelIPv6Address */ - if (length == 16) { - ti = proto_tree_add_item(pdutree, - hf_cflow_mpls_pe_addr_v6, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "mplsTopLabelIPv6Addr: length %u", - length); - } - break; - - case 141: /* lineCardId */ - ti = proto_tree_add_item(pdutree, hf_cflow_scope_linecard, - tvb, offset, length, ENC_NA); - break; - - case 142: /* portId */ - ti = proto_tree_add_item(pdutree, hf_cflow_port_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 143: /* meteringProcessId */ - ti = proto_tree_add_item(pdutree, hf_cflow_mp_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 144: /* FLOW EXPORTER */ - ti = proto_tree_add_item(pdutree, hf_cflow_flow_exporter, - tvb, offset, length, ENC_NA); - break; - - case 145: /* templateId */ - ti = proto_tree_add_item(pdutree, hf_cflow_template_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 146: /* wlanChannelId */ - ti = proto_tree_add_item(pdutree, hf_cflow_wlan_channel_id, - tvb, offset, length, ENC_NA); - break; - - case 147: /* wlanSSID */ - ti = proto_tree_add_item(pdutree, hf_cflow_wlan_ssid, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 148: /* flowId */ - ti = proto_tree_add_item(pdutree, hf_cflow_flow_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 149: /* observationDomainId */ - ti = proto_tree_add_item(pdutree, hf_cflow_od_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 160: /* systemInitTimeMilliseconds */ - ts.secs = (tvb_get_ntoh64(tvb, offset)/1000); - ts.nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) *1000000; - ti = proto_tree_add_time(pdutree, - hf_cflow_sys_init_time, - tvb, offset, length, &ts); - break; - - case 161: /* flowDurationMilliseconds */ - msec_delta = tvb_get_ntohl(tvb, offset); - ts_delta.secs = msec_delta / 1000; - ts_delta.nsecs = (msec_delta % 1000) * 1000000; - ti = proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, - offset, length, &ts_delta); - break; - - case 162: /* flowDurationMicroseconds */ - msec_delta = tvb_get_ntohl(tvb, offset); - ts_delta.secs = msec_delta / 1000000; - ts_delta.nsecs = (msec_delta % 1000000) * 1000000; - ti = proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, - offset, length, &ts_delta); - break; - - case 164: /* ignoredPacketTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_ignore_packets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_ignore_packets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Ignored Packets: length %u", length); - } - break; - - case 165: /* ignoredOctetTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_ignore_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_ignore_octets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Ignored Octets: length %u", length); - } - break; - - case 166: /* notSentFlowTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_notsent_flows, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_notsent_flows64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Not Sent Flows: length %u", length); - } - break; - - case 167: /* notSentPacketTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_notsent_packets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_notsent_packets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Not Sent Packets: length %u", length); - } - break; - - case 168: /* notSentOctetTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_notsent_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_notsent_octets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Not Sent Packets: length %u", length); - } - break; - - case 169: /* destinationIPv6Prefix */ - if (length == 16) { - ti = proto_tree_add_item(pdutree, hf_cflow_dstnet_v6, - tvb, offset, length, ENC_NA); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "DstPrefix: length %u", length); - } - break; - - case 170: /* sourceIPv6Prefix */ - if (length == 16) { - ti = proto_tree_add_item(pdutree, hf_cflow_srcnet_v6, - tvb, offset, length, ENC_NA); - } else if (length != 4 && length != 16) { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "SrcPrefix: length %u", length); - } - break; - - case 171: /* postOctetTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_total_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_total_octets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Post Total Octets: length %u", length); - } - break; - - case 172: /* postPacketTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_total_packets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_total_packets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Post Total Packets: length %u", length); - } - break; - - case 173: /* flowKeyIndicator */ - ti = proto_tree_add_item(pdutree, hf_cflow_key, - tvb, offset, length, ENC_NA); - break; - - case 174: /* postMCastPacketTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_total_mulpackets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_total_mulpackets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Post Total Multicast Packets: length %u", length); - } - break; - - case 175: /* postMCastOctetTotalCount */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_total_muloctets, - tvb, offset, length, ENC_BIG_ENDIAN); - } else if (length == 8) { - ti = proto_tree_add_item(pdutree, hf_cflow_post_total_muloctets64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "Post Total Multicast Octets: length %u", length); - } - break; - - case 176: /* ICMP_IPv4_TYPE */ - ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv4_type, - tvb, offset, length, ENC_NA); - break; - - case 177: /* ICMP_IPv4_CODE */ - ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv4_code, - tvb, offset, length, ENC_NA); - break; - - case 178: /* ICMP_IPv6_TYPE */ - ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_type, - tvb, offset, length, ENC_NA); - break; - - case 179: /* ICMP_IPv6_CODE */ - ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_code, - tvb, offset, length, ENC_NA); - break; - - case 184: /* tcpSequenceNumber */ - ti = proto_tree_add_item(pdutree, hf_cflow_tcp_seq_num, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 185: /* tcpAcknowledgementNumber */ - ti = proto_tree_add_item(pdutree, hf_cflow_tcp_ack_num, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 186: /* TCP_WINDOWS_SIZE */ - ti = proto_tree_add_item(pdutree, hf_cflow_tcp_window_size, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 187: /* tcpUrgentPointer */ - ti = proto_tree_add_item(pdutree, hf_cflow_tcp_urg_ptr, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 188: /* tcpHeaderLength */ - ti = proto_tree_add_item(pdutree, hf_cflow_tcp_header_length, - tvb, offset, length, ENC_NA); - break; - - case 189: /* ipHeaderLength */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_header_length, - tvb, offset, length, ENC_NA); - break; - - case 190: /* IPV4_TOTAL_LENGTH */ - ti = proto_tree_add_item(pdutree, hf_cflow_ipv4_total_length, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 191: /* payloadLengthIPv6 */ - ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_payload_length, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 192: /* IP_TTL */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_ttl, - tvb, offset, length, ENC_NA); - break; - - case 193: /* nextHeaderIPv6 */ - ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_next_hdr, - tvb, offset, length, ENC_NA); - break; - - case 194: /* IP_TOS */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_tos, - tvb, offset, length, ENC_NA); - break; - - case 195: /* IP_DSCP */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_dscp, - tvb, offset, length, ENC_NA); - break; - - case 196: /* ipPrecedence */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_precedence, - tvb, offset, length, ENC_NA); - break; - - case 197: /* fragmentFlags */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_fragment_flags, - tvb, offset, length, ENC_NA); - break; - - case 198: /* BYTES_SQUARED */ - case 199: /* BYTES_SQUARED_PERMANENT */ - if( length == 8 ) { - ti = proto_tree_add_item(pdutree, hf_cflow_octets_squared64, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "Bytes Squared: length %u", length); - } - break; - case 200: /* mplsTopLabelTTL */ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_ttl, - tvb, offset, length, ENC_NA); - break; - - case 201: /* mplsLabelStackLength */ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_label_length, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 202: /* mplsLabelStackDepth */ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_label_depth, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 203: /* mplsTopLabelExp */ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_exp, - tvb, offset, length, ENC_NA); - break; - - case 204: /* ipPayloadLength */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_payload_length, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 205: /* UDP_LENGTH */ - ti = proto_tree_add_item(pdutree, hf_cflow_udp_length, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 206: /* IS_MULTICAST */ - ti = proto_tree_add_item(pdutree, hf_cflow_is_multicast, - tvb, offset, length, ENC_NA); - break; - - case 207: /* IP_HEADER_WORDS */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_header_words, - tvb, offset, length, ENC_NA); - break; - - case 208: /* OPTION_MAP */ - ti = proto_tree_add_item(pdutree, hf_cflow_option_map, - tvb, offset, length, ENC_NA); - break; - - case 209: /* tcpOptions */ - ti = proto_tree_add_item(pdutree, hf_cflow_tcp_option_map, - tvb, offset, length, ENC_NA); - break; - - case 210: /* paddingOctets */ - ti = proto_tree_add_text(pdutree, tvb, offset, length, - "Padding (%u byte%s)", - length, plurality(length, "", "s")); - break; - - case 211: /* collectorIPv4Address */ - ti = proto_tree_add_item(pdutree, hf_cflow_collector_addr, - tvb, offset, length, ENC_NA); - break; - - case 212: /* collectorIPv6Address */ - ti = proto_tree_add_item(pdutree, hf_cflow_collector_addr_v6, - tvb, offset, length, ENC_NA); - break; - - case 213: /* exportInterface */ - if (length == 4) { - ti = proto_tree_add_item(pdutree, hf_cflow_export_interface, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_text(pdutree, - tvb, offset, length, - "exportInterface: invalid size %d", length ); - } - break; - - case 214: /* exportProtocolVersion */ - ti = proto_tree_add_item(pdutree, hf_cflow_export_protocol_version, - tvb, offset, length, ENC_NA); - break; - - case 215: /* exportTransportProtocol */ - ti = proto_tree_add_item(pdutree, hf_cflow_export_prot, - tvb, offset, length, ENC_NA); - break; - - case 216: /* collectorTransportPort */ - ti = proto_tree_add_item(pdutree, hf_cflow_collector_port, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 217: /* exporterTransportPort */ - ti = proto_tree_add_item(pdutree, hf_cflow_exporter_port, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 218: /* tcpSynTotalCount */ - ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_syn, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 219: /* tcpFinTotalCount */ - ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_fin, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 220: /* tcpRstTotalCount */ - ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_rst, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 221: /* tcpPshTotalCount */ - ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_psh, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 222: /* tcpAckTotalCount */ - ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_ack, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 223: /* tcpUrgTotalCount */ - ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_urg, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 224: /* IP_TOTAL_LENGTH */ - ti = proto_tree_add_item(pdutree, hf_cflow_ip_total_length, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 225: /* postNATSourceIPv4Address */ - case 40001: /* NF_F_XLATE_SRC_ADDR_IPV4 (Cisco ASA 5500 Series) */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_natsource_ipv4_address, - tvb, offset, length, ENC_NA); - break; - - case 226: /* postNATDestinationIPv4Address */ - case 40002: /* NF_F_XLATE_DST_ADDR_IPV4 (Cisco ASA 5500 Series) */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_natdestination_ipv4_address, - tvb, offset, length, ENC_NA); - break; - - case 227: /* postNAPTSourceTransportPort */ - case 40003: /* NF_F_XLATE_SRC_PORT (Cisco ASA 5500 Series) */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_naptsource_transport_port, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 228: /* postNAPTDestinationTransportPort */ - case 40004: /* NF_F_XLATE_DST_PORT (Cisco ASA 5500 Series) */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_naptdestination_transport_port, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 229: /* natOriginatingAddressRealm */ - ti = proto_tree_add_item(pdutree, hf_cflow_nat_originating_address_realm, - tvb, offset, length, ENC_NA); - break; - - case 230: /* natEvent */ - ti = proto_tree_add_item(pdutree, hf_cflow_nat_event, - tvb, offset, length, ENC_NA); - break; - - case 231: /* initiatorOctets */ - ti = proto_tree_add_item(pdutree, hf_cflow_initiator_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 232: /* responderOctets */ - ti = proto_tree_add_item(pdutree, hf_cflow_responder_octets, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 233: /* firewallEvent */ - case 40005: /* NF_F_FW_EVENT (Cisco ASA 5500 Series) */ - ti = proto_tree_add_item(pdutree, hf_cflow_firewall_event, - tvb, offset, length, ENC_NA); - break; - - case 234: /* ingressVRFID */ - ti = proto_tree_add_item(pdutree, hf_cflow_ingress_vrfid, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 235: /* egressVRFID */ - ti = proto_tree_add_item(pdutree, hf_cflow_egress_vrfid, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 236: /* VRFname */ - ti = proto_tree_add_item(pdutree, hf_cflow_vrfname, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 237: /* postMplsTopLabelExp */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_mpls_top_label_exp, - tvb, offset, length, ENC_NA); - break; - - case 238: /* tcpWindowScale */ - ti = proto_tree_add_item(pdutree, hf_cflow_tcp_window_scale, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 239: /* biflowDirection */ - ti = proto_tree_add_item(pdutree, hf_cflow_biflow_direction, - tvb, offset, length, ENC_NA); - break; - - case 240: /* ethernetHeaderLength */ - ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_header_length, - tvb, offset, length, ENC_NA); - break; - - case 241: /* ethernetPayloadLength */ - ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_payload_length, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 242: /* ethernetTotalLength */ - ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_total_length, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 243: /* dot1qVlanId */ - ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_vlan_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 244: /* dot1qPriority */ - ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_priority, - tvb, offset, length, ENC_NA); - break; - - case 245: /* dot1qCustomerVlanId */ - ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_customer_vlan_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 246: /* dot1qCustomerPriority */ - ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_customer_priority, - tvb, offset, length, ENC_NA); - break; - - case 247: /* metroEvcId */ - ti = proto_tree_add_item(pdutree, hf_cflow_metro_evc_id, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 248: /* metroEvcType */ - ti = proto_tree_add_item(pdutree, hf_cflow_metro_evc_type, - tvb, offset, length, ENC_NA); - break; - - case 249: /* pseudoWireId */ - ti = proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 250: /* pseudoWireType */ - ti = proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_type, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 251: /* pseudoWireControlWord */ - ti = proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_control_word, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 252: /* ingressPhysicalInterface */ - ti = proto_tree_add_item(pdutree, hf_cflow_ingress_physical_interface, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 253: /* egressPhysicalInterface */ - ti = proto_tree_add_item(pdutree, hf_cflow_egress_physical_interface, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 254: /* postDot1qVlanId */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_dot1q_vlan_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 255: /* postDot1qCustomerVlanId */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_dot1q_customer_vlan_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 256: /* ethernetType */ - ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_type, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 257: /* postIpPrecedence */ - ti = proto_tree_add_item(pdutree, hf_cflow_post_ip_precedence, - tvb, offset, length, ENC_NA); - break; - - case 258: /* collectionTimeMilliseconds */ - ts.secs = (tvb_get_ntoh64(tvb, offset)/1000); - ts.nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) *1000000; - ti = proto_tree_add_time(pdutree, - hf_cflow_collection_time_milliseconds, - tvb, offset, length, &ts); - break; - - case 259: /* exportSctpStreamId */ - ti = proto_tree_add_item(pdutree, hf_cflow_export_sctp_stream_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 260: /* maxExportSeconds */ - ts.secs = tvb_get_ntohl(tvb, offset); - ts.nsecs = 0; - 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; - ti = proto_tree_add_time(pdutree, hf_cflow_max_flow_end_seconds, - tvb, offset, length, &ts); - break; - - case 262: /* messageMD5Checksum */ - ti = proto_tree_add_item(pdutree, hf_cflow_message_md5_checksum, - tvb, offset, length, ENC_NA); - break; - - case 263: /* messageScope */ - ti = proto_tree_add_item(pdutree, hf_cflow_message_scope, - tvb, offset, length, ENC_NA); - break; - - case 264: /* minExportSeconds */ - ts.secs = tvb_get_ntohl(tvb, offset); - ts.nsecs = 0; - 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; - ti = proto_tree_add_time(pdutree, hf_cflow_min_flow_start_seconds, - tvb, offset, length, &ts); - break; - - case 266: /* opaqueOctets */ - ti = proto_tree_add_item(pdutree, hf_cflow_opaque_octets, - tvb, offset, length, ENC_NA); - break; - - case 267: /* sessionScope */ - ti = proto_tree_add_item(pdutree, hf_cflow_session_scope, - tvb, offset, length, ENC_NA); - break; - - case 268: /* maxFlowEndMicroseconds */ - ti = proto_tree_add_item(pdutree, hf_cflow_max_flow_end_microseconds, - tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); - break; - - case 269: /* maxFlowEndMilliseconds */ - ts.secs = (tvb_get_ntoh64(tvb, offset)/1000); - ts.nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) * 1000000; - ti = proto_tree_add_time(pdutree, hf_cflow_max_flow_end_milliseconds, - tvb, offset, length, &ts); - break; - - case 270: /* maxFlowEndNanoseconds */ - ti = proto_tree_add_item(pdutree, hf_cflow_max_flow_end_nanoseconds, - tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); - break; - - case 271: /* minFlowStartMicroseconds */ - ti = proto_tree_add_item(pdutree, hf_cflow_min_flow_start_microseconds, - tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); - break; - - case 272: /* minFlowStartMilliseconds */ - ts.secs = (tvb_get_ntohl(tvb, offset)/1000); - ts.nsecs = (tvb_get_ntohl(tvb, offset)%1000) * 1000000; - ti = proto_tree_add_time(pdutree, hf_cflow_min_flow_start_milliseconds, - tvb, offset, length, &ts); - break; - - case 273: /* minFlowStartNanoseconds */ - ti = proto_tree_add_item(pdutree, hf_cflow_min_flow_start_nanoseconds, - tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); - break; - - case 274: /* collectorCertificate */ - ti = proto_tree_add_item(pdutree, hf_cflow_collector_certificate, - tvb, offset, length, ENC_NA); - break; - - case 275: /* exporterCertificate */ - ti = proto_tree_add_item(pdutree, hf_cflow_exporter_certificate, - tvb, offset, length, ENC_NA); - break; - - case 301: /* selectionSequenceId */ - ti = proto_tree_add_item(pdutree, hf_cflow_selection_sequence_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 302: /* selectorId */ - ti = proto_tree_add_item(pdutree, hf_cflow_selector_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 303: /* informationElementId */ - ti = proto_tree_add_item(pdutree, hf_cflow_information_element_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 304: /* selectorAlgorithm */ - ti = proto_tree_add_item(pdutree, hf_cflow_selector_algorithm, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 305: /* samplingPacketInterval */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampling_packet_interval, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 306: /* samplingPacketSpace */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampling_packet_space, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 307: /* samplingTimeInterval */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampling_time_interval, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 308: /* samplingTimeSpace */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampling_time_space, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 309: /* samplingSize */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampling_size, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 310: /* samplingPopulation */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampling_population, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 311: /* samplingProbability */ - ti = proto_tree_add_item(pdutree, hf_cflow_sampling_probability, - tvb, offset, length, ENC_NA); - break; - - case 313: /* SECTION_HEADER */ - ti = proto_tree_add_item(pdutree, hf_cflow_section_header, - tvb, offset, length, ENC_NA); - break; - - case 314: /* SECTION_PAYLOAD */ - ti = proto_tree_add_item(pdutree, hf_cflow_section_payload, - tvb, offset, length, ENC_NA); - break; - - case 316: /* mplsLabelStackSection */ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_label_stack_section, - tvb, offset, length, ENC_NA); - break; - - case 317: /* mplsPayloadPacketSection */ - ti = proto_tree_add_item(pdutree, hf_cflow_mpls_payload_packet_section, - tvb, offset, length, ENC_NA); - break; - - case 318: /* selectorIdTotalPktsObserved */ - ti = proto_tree_add_item(pdutree, hf_cflow_selector_id_total_pkts_observed, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 319: /* selectorIdTotalPktsSelected */ - ti = proto_tree_add_item(pdutree, hf_cflow_selector_id_total_pkts_selected, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 320: /* absoluteError */ - ti = proto_tree_add_item(pdutree, hf_cflow_absolute_error, - tvb, offset, length, ENC_NA); - break; - - case 321: /* relativeError */ - ti = proto_tree_add_item(pdutree, hf_cflow_relative_error, - tvb, offset, length, ENC_NA); - break; - - case 322: /* observationTimeSeconds */ - ts.secs = tvb_get_ntohl(tvb, offset); - ts.nsecs = 0; - ti = proto_tree_add_time(pdutree, hf_cflow_observation_time_seconds, - tvb, offset, length, &ts); - break; - - case 323: /* observationTimeMilliseconds */ - ts.secs = (tvb_get_ntoh64(tvb, offset)/1000); - ts.nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) * 1000000; - ti = proto_tree_add_time(pdutree, hf_cflow_observation_time_milliseconds, - tvb, offset, length, &ts); - break; - - case 324: /* observationTimeMicroseconds */ - ti = proto_tree_add_item(pdutree, hf_cflow_observation_time_microseconds, - tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); - break; - - case 325: /* observationTimeNanoseconds */ - ti = proto_tree_add_item(pdutree, hf_cflow_observation_time_nanoseconds, - tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); - break; - - case 326: /* digestHashValue */ - ti = proto_tree_add_item(pdutree, hf_cflow_digest_hash_value, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 327: /* hashIPPayloadOffset */ - ti = proto_tree_add_item(pdutree, hf_cflow_hash_ippayload_offset, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 328: /* hashIPPayloadSize */ - ti = proto_tree_add_item(pdutree, hf_cflow_hash_ippayload_size, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 329: /* hashOutputRangeMin */ - ti = proto_tree_add_item(pdutree, hf_cflow_hash_output_range_min, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 330: /* hashOutputRangeMax */ - ti = proto_tree_add_item(pdutree, hf_cflow_hash_output_range_max, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 331: /* hashSelectedRangeMin */ - ti = proto_tree_add_item(pdutree, hf_cflow_hash_selected_range_min, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 332: /* hashSelectedRangeMax */ - ti = proto_tree_add_item(pdutree, hf_cflow_hash_selected_range_max, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 333: /* hashDigestOutput */ - ti = proto_tree_add_item(pdutree, hf_cflow_hash_digest_output, - tvb, offset, length, ENC_NA); - break; - - case 334: /* hashInitialiserValue */ - ti = proto_tree_add_item(pdutree, hf_cflow_hash_initialiser_value, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 335: /* selectorName */ - ti = proto_tree_add_item(pdutree, hf_cflow_selector_name, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 336: /* upperCILimit */ - ti = proto_tree_add_item(pdutree, hf_cflow_upper_cilimit, - tvb, offset, length, ENC_NA); - break; - - case 337: /* lowerCILimit */ - ti = proto_tree_add_item(pdutree, hf_cflow_lower_cilimit, - tvb, offset, length, ENC_NA); - break; - - case 338: /* confidenceLevel */ - ti = proto_tree_add_item(pdutree, hf_cflow_confidence_level, - tvb, offset, length, ENC_NA); - break; - - case 339: /* informationElementDataType */ - ti = proto_tree_add_item(pdutree, hf_cflow_information_element_data_type, - tvb, offset, length, ENC_NA); - break; - - case 340: /* informationElementDescription */ - ti = proto_tree_add_item(pdutree, hf_cflow_information_element_description, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 341: /* informationElementName */ - ti = proto_tree_add_item(pdutree, hf_cflow_information_element_name, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case 342: /* informationElementRangeBegin */ - ti = proto_tree_add_item(pdutree, hf_cflow_information_element_range_begin, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 343: /* informationElementRangeEnd */ - ti = proto_tree_add_item(pdutree, hf_cflow_information_element_range_end, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 344: /* informationElementSemantics */ - ti = proto_tree_add_item(pdutree, hf_cflow_information_element_semantics, - tvb, offset, length, ENC_NA); - break; - - case 345: /* informationElementUnits */ - ti = proto_tree_add_item(pdutree, hf_cflow_information_element_units, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 346: /* privateEnterpriseNumber */ - ti = proto_tree_add_item(pdutree, hf_cflow_private_enterprise_number, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 37000: /* packets_dropped */ - ti = proto_tree_add_item(pdutree, hf_cflow_packets_dropped, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 37003: /* byte_rate */ - ti = proto_tree_add_item(pdutree, hf_cflow_byte_rate, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 37004: /* application_media_bytes */ - ti = proto_tree_add_item(pdutree, hf_cflow_application_media_bytes, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 37006: /* application_media_byte_rate */ - ti = proto_tree_add_item(pdutree, hf_cflow_application_media_byte_rate, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 37007: /* application_media_packets */ - ti = proto_tree_add_item(pdutree, hf_cflow_application_media_packets, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 37009: /* application_media_packet_rate */ - ti = proto_tree_add_item(pdutree, hf_cflow_application_media_packet_rate, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 37011: /* application_media_event */ - ti = proto_tree_add_item(pdutree, hf_cflow_application_media_event, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 37012: /* monitor_event */ - ti = proto_tree_add_item(pdutree, hf_cflow_monitor_event, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case 37013: /* timestamp_interval */ - ti = proto_tree_add_item(pdutree, hf_cflow_timestamp_interval, - tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); - break; - case 37014: /* transport_packets_expected */ - ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_expected, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 37016: /* transport_round_trip_time */ - if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { - ti = proto_tree_add_item(pdutree, hf_cflow_transport_round_trip_time_string, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - /* value is in microseconds, adjust to nanoseconds*/ - ts.secs =0; - ts.nsecs= tvb_get_ntohl(tvb,offset) * 1000; - ti = proto_tree_add_time(pdutree, hf_cflow_transport_round_trip_time, - tvb, offset, length, &ts); - } - break; - case 37017: /* transport_event_packet_loss */ - ti = proto_tree_add_item(pdutree, hf_cflow_transport_event_packet_loss, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 37019: /* transport_packets_lost */ - if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { - ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_lost_string, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_lost, - tvb, offset, length, ENC_BIG_ENDIAN); - } - break; - case 37021: /* transport_packets_lost_rate */ - if (tvb_get_ntohl(tvb,offset)== 0xFFFF ) { - ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_lost_rate_string, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_lost_rate, - tvb, offset, length, ENC_BIG_ENDIAN); - } - break; - case 37022: /* transport_rtp_ssrc */ - ti = proto_tree_add_item(pdutree, hf_cflow_transport_rtp_ssrc, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 37023: /* transport_rtp_jitter_mean */ - if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { - ti = proto_tree_add_item(pdutree, hf_cflow_transport_rtp_jitter_mean_string, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - /* value is in microseconds, adjust to nanoseconds*/ - ts.secs =0; - ts.nsecs= tvb_get_ntohl(tvb,offset) * 1000; - - ti = proto_tree_add_time(pdutree, hf_cflow_transport_rtp_jitter_mean, - tvb, offset, length, &ts); - } - break; - case 37024: /* transport_rtp_jitter_min */ - if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { - ti = proto_tree_add_item(pdutree, hf_cflow_transport_rtp_jitter_min_string, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - /* value is in microseconds, adjust to nanoseconds*/ - ts.secs =0; - ts.nsecs= tvb_get_ntohl(tvb,offset) * 1000; - ti = proto_tree_add_time(pdutree, hf_cflow_transport_rtp_jitter_min, - tvb, offset, length, &ts); - } - break; - case 37025: /* transport_rtp_jitter_max */ - if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { - ti = proto_tree_add_item(pdutree, hf_cflow_transport_rtp_jitter_max_string, - tvb, offset, length, ENC_BIG_ENDIAN); - } else { - /* value is in microseconds, adjust to nanoseconds*/ - ts.secs =0; - ts.nsecs= tvb_get_ntohl(tvb,offset) * 1000; - ti = proto_tree_add_time(pdutree, hf_cflow_transport_rtp_jitter_max, - tvb, offset, length, &ts); - } - break; - - - /* Ericsson SE NAT Logging */ - case 24628: /* natContextId */ - ti = proto_tree_add_item(pdutree, hf_cflow_nat_context_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 24629: /* natContextName */ - ti = proto_tree_add_item(pdutree, hf_cflow_nat_context_name, - tvb, offset, length, ENC_UTF_8|ENC_NA); - break; - case 24630: /* natAssignTime */ - ts.secs = tvb_get_ntohl(tvb, offset); - ts.nsecs = 0; - ti = proto_tree_add_time(pdutree, hf_cflow_nat_assign_time, - tvb, offset, length, &ts); - break; - case 24631: /* natUnAssignTime */ - ts.secs = tvb_get_ntohl(tvb, offset); - ts.nsecs = 0; - ti = proto_tree_add_time(pdutree, hf_cflow_nat_unassign_time, - tvb, offset, length, &ts); - break; - case 24632: /* natInternalAddr */ - ti = proto_tree_add_item(pdutree, hf_cflow_nat_int_addr, - tvb, offset, length, ENC_NA); - break; - case 24633: /* natExternalAddr */ - ti = proto_tree_add_item(pdutree, hf_cflow_nat_ext_addr, - tvb, offset, length, ENC_NA); - break; - case 24634: /* natExternalPortFirst */ - ti = proto_tree_add_item(pdutree, hf_cflow_nat_ext_port_first, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 24635: /* natExternalPortLast */ - ti = proto_tree_add_item(pdutree, hf_cflow_nat_ext_port_last, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - /* Cisco ASA 5500 Series */ - case 33000: /* NF_F_INGRESS_ACL_ID */ - proto_tree_add_item(pdutree, hf_cflow_ingress_acl_id, - tvb, offset, length, ENC_NA); - break; - case 33001: /* NF_F_EGRESS_ACL_ID */ - proto_tree_add_item(pdutree, hf_cflow_egress_acl_id, - tvb, offset, length, ENC_NA); - break; - case 33002: /* NF_F_FW_EXT_EVENT */ - proto_tree_add_item(pdutree, hf_cflow_fw_ext_event, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case 40000: /* NF_F_USERNAME[_MAX] */ - proto_tree_add_item(pdutree, hf_cflow_aaa_username, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - /* CACE Technologies */ - case VENDOR_CACE << 16 | 0: /* caceLocalIPv4Address */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_local_ipv4_address, - tvb, offset, length, ENC_NA); - 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 */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_remote_ipv4_address, - tvb, offset, length, ENC_NA); - 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 */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_local_ipv6_address, - tvb, offset, length, ENC_NA); - 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 */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_remote_ipv6_address, - tvb, offset, length, ENC_NA); - 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 */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_local_port, - tvb, offset, length, ENC_BIG_ENDIAN); - local_port = tvb_get_ntohs(tvb, offset); - got_flags |= GOT_LOCAL_PORT; - break; - - case VENDOR_CACE << 16 | 5: /* caceRemoteTransportPort */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_remote_port, - tvb, offset, length, ENC_BIG_ENDIAN); - remote_port = tvb_get_ntohs(tvb, offset); - got_flags |= GOT_REMOTE_PORT; - break; - - case VENDOR_CACE << 16 | 6: /* caceLocalIPv4id */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_local_ipv4_id, - tvb, offset, length, ENC_BIG_ENDIAN); - /*ipv4_id = tvb_get_ntohs(tvb, offset);*/ - /*got_flags |= GOT_IPv4_ID;*/ - break; - - case VENDOR_CACE << 16 | 7: /* caceLocalICMPid */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_local_icmp_id, - tvb, offset, length, ENC_BIG_ENDIAN); - /*icmp_id = tvb_get_ntohs(tvb, offset);*/ - /*got_flags |= GOT_ICMP_ID;*/ - break; - - case VENDOR_CACE << 16 | 8: /* caceLocalProcessUserId */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_local_uid, - tvb, offset, length, ENC_BIG_ENDIAN); - uid = tvb_get_ntohl(tvb, offset); - got_flags |= GOT_UID; - break; - - case VENDOR_CACE << 16 | 9: /* caceLocalProcessId */ - ti = proto_tree_add_item(pdutree, hf_pie_cace_local_pid, - tvb, offset, length, ENC_BIG_ENDIAN); - pid = tvb_get_ntohl(tvb, offset); - got_flags |= GOT_PID; - break; - - case VENDOR_CACE << 16 | 10: /* caceLocalProcessUserName */ - uname_len = tvb_get_guint8(tvb, offset); - uname_str = tvb_format_text(tvb, offset+1, uname_len); - proto_tree_add_item(pdutree, hf_pie_cace_local_username_len, - tvb, offset, 1, ENC_NA); - 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; - break; - - case VENDOR_CACE << 16 | 11: /* caceLocalProcessCommand */ - cmd_len = tvb_get_guint8(tvb, offset); - cmd_str = tvb_format_text(tvb, offset+1, cmd_len); - proto_tree_add_item(pdutree, hf_pie_cace_local_cmd_len, - tvb, offset, 1, ENC_NA); - 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; - break; - - /* START NTOP */ - case (NTOP_BASE + 80): /* FRAGMENTED */ - case ((VENDOR_NTOP << 16) | 80): /* FRAGMENTED */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_fragmented, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 81): /* FINGERPRINT */ - case ((VENDOR_NTOP << 16) | 81): /* FINGERPRINT */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_fingerprint, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 82): /* CLIENT_NW_DELAY_SEC */ - case ((VENDOR_NTOP << 16) | 82): /* CLIENT_NW_DELAY_SEC */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_client_nw_delay_sec, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 83): /* /\* CLIENT_NW_DELAY_USEC *\/ */ - case ((VENDOR_NTOP << 16) | 83): /* CLIENT_NW_DELAY_USEC */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_client_nw_delay_usec, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 84): /* SERVER_NW_DELAY_SEC */ - case ((VENDOR_NTOP << 16) | 84): /* SERVER_NW_DELAY_SEC */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_server_nw_delay_sec, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 85): /* SERVER_NW_DELAY_USEC */ - case ((VENDOR_NTOP << 16) | 85): /* SERVER_NW_DELAY_USEC */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_server_nw_delay_usec, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 86): /* APPL_LATENCY_SEC */ - case ((VENDOR_NTOP << 16) | 86): /* APPL_LATENCY_SEC */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_appl_latency_sec, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 87): /* APPL_LATENCY_USEC */ - case ((VENDOR_NTOP << 16) | 87): /* APPL_LATENCY_USEC */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_appl_latency_sec, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 98): /* ICMP_FLAGS */ - case ((VENDOR_NTOP << 16) | 98): /* ICMP_FLAGS */ - /* Cumulative of all flow ICMP types */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_icmp_flags, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 101): /* SRC_IP_COUNTRY */ - case ((VENDOR_NTOP << 16) | 101): /* SRC_IP_COUNTRY */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_src_ip_country, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - case (NTOP_BASE + 102): /* SRC_IP_CITY */ - case ((VENDOR_NTOP << 16) | 102): /* SRC_IP_CITY */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_src_ip_city, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - case (NTOP_BASE + 103): /* DST_IP_COUNTRY */ - case ((VENDOR_NTOP << 16) | 103): /* DST_IP_COUNTRY */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_dst_ip_country, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - case (NTOP_BASE + 104): /* DST_IP_CITY */ - case ((VENDOR_NTOP << 16) | 104): /* DST_IP_CITY */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_dst_ip_city, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - case (NTOP_BASE + 105): /* FLOW_PROTO_PORT */ - case ((VENDOR_NTOP << 16) | 105): /* FLOW_PROTO_PORT */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_flow_proto_port, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case (NTOP_BASE + 106): /* TUNNEL_ID */ - case ((VENDOR_NTOP << 16) | 106): /* TUNNEL_ID */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_tunnel_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 107): /* LONGEST_FLOW_PKT */ - case ((VENDOR_NTOP << 16) | 107): /* LONGEST_FLOW_PKT */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_longest_flow_pkt, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 108): /* SHORTEST_FLOW_PKT */ - case ((VENDOR_NTOP << 16) | 108): /* SHORTEST_FLOW_PKT */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_shortest_flow_pkt, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 109): /* RETRANSMITTED_IN_PKTS */ - case ((VENDOR_NTOP << 16) | 109): /* RETRANSMITTED_IN_PKTS */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_retransmitted_in_pkts, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 110): /* RETRANSMITTED_OUT_PKTS */ - case ((VENDOR_NTOP << 16) | 110): /* RETRANSMITTED_OUT_PKTS */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_retransmitted_out_pkts, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 111): /* OOORDER_IN_PKTS */ - case ((VENDOR_NTOP << 16) | 111): /* OOORDER_IN_PKTS */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_ooorder_in_pkts, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 112): /* OOORDER_OUT_PKTS */ - case ((VENDOR_NTOP << 16) | 112): /* OOORDER_OUT_PKTS */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_ooorder_out_pkts, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 113): /* UNTUNNELED_PROTOCOL */ - case ((VENDOR_NTOP << 16) | 113): /* UNTUNNELED_PROTOCOL */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_protocol, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 114): /* UNTUNNELED_IPV4_SRC_ADDR */ - case ((VENDOR_NTOP << 16) | 114): /* UNTUNNELED_IPV4_SRC_ADDR */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_ipv4_src_addr, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 115): /* UNTUNNELED_L4_SRC_PORT */ - case ((VENDOR_NTOP << 16) | 115): /* UNTUNNELED_L4_SRC_PORT */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_l4_src_port, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 116): /* UNTUNNELED_IPV4_DST_ADDR */ - case ((VENDOR_NTOP << 16) | 116): /* UNTUNNELED_IPV4_DST_ADDR */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_ipv4_dst_addr, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 117): /* UNTUNNELED_L4_DST_PORT */ - case ((VENDOR_NTOP << 16) | 117): /* UNTUNNELED_L4_DST_PORT */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_l4_dst_port, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case (NTOP_BASE + 120): /* DUMP_PATH */ - case ((VENDOR_NTOP << 16) | 120): /* DUMP_PATH */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_dump_path, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - - case (NTOP_BASE + 130): /* SIP_CALL_ID */ - case ((VENDOR_NTOP << 16) | 130): /* SIP_CALL_ID */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_sip_call_id, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 131): /* SIP_CALLING_PARTY */ - case ((VENDOR_NTOP << 16) | 131): /* SIP_CALLING_PARTY */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_sip_calling_party, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 132): /* SIP_CALLED_PARTY */ - case ((VENDOR_NTOP << 16) | 132): /* SIP_CALLED_PARTY */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_sip_called_party, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 133): /* SIP_RTP_CODECS */ - case ((VENDOR_NTOP << 16) | 133): /* SIP_RTP_CODECS */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_sip_rtp_codecs, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 134): /* SIP_INVITE_TIME */ - case ((VENDOR_NTOP << 16) | 134): /* SIP_INVITE_TIME */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_invite_time, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 135): /* SIP_TRYING_TIME */ - case ((VENDOR_NTOP << 16) | 135): /* SIP_TRYING_TIME */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_trying_time, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 136): /* SIP_RINGING_TIME */ - case ((VENDOR_NTOP << 16) | 136): /* SIP_RINGING_TIME */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_ringing_time, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 137): /* SIP_OK_TIME */ - case ((VENDOR_NTOP << 16) | 137): /* SIP_OK_TIME */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_ok_time, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 138): /* SIP_BYE_TIME */ - case ((VENDOR_NTOP << 16) | 138): /* SIP_BYE_TIME */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_bye_time, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 139): /* SIP_RTP_SRC_IP */ - case ((VENDOR_NTOP << 16) | 139): /* SIP_RTP_SRC_IP */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_rtp_src_ip, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 140): /* SIP_RTP_SRC_PORT */ - case ((VENDOR_NTOP << 16) | 140): /* SIP_RTP_SRC_PORT */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_rtp_src_port, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 141): /* SIP_RTP_DST_IP */ - case ((VENDOR_NTOP << 16) | 141): /* SIP_RTP_DST_IP */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_rtp_dst_ip, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 142): /* SIP_RTP_DST_PORT */ - case ((VENDOR_NTOP << 16) | 142): /* SIP_RTP_DST_PORT */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_rtp_dst_port, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 150): /* RTP_FIRST_SSRC */ - case ((VENDOR_NTOP << 16) | 150): /* RTP_FIRST_SSRC */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_first_ssrc, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 151): /* RTP_FIRST_TS */ - case ((VENDOR_NTOP << 16) | 151): /* RTP_FIRST_TS */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_first_ts, - tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 152): /* RTP_LAST_SSRC */ - case ((VENDOR_NTOP << 16) | 152): /* RTP_LAST_SSRC */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_last_ssrc, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 153): /* RTP_LAST_TS */ - case ((VENDOR_NTOP << 16) | 153): /* RTP_LAST_TS */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_last_ts, - tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 154): /* RTP_IN_JITTER */ - case ((VENDOR_NTOP << 16) | 154): /* RTP_IN_JITTER */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_in_jitter, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 155): /* RTP_OUT_JITTER */ - case ((VENDOR_NTOP << 16) | 155): /* RTP_OUT_JITTER */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_out_jitter, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 156): /* RTP_IN_PKT_LOST */ - case ((VENDOR_NTOP << 16) | 156): /* RTP_IN_PKT_LOST */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_in_pkt_lost, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 157): /* RTP_OUT_PKT_LOST */ - case ((VENDOR_NTOP << 16) | 157): /* RTP_OUT_PKT_LOST */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_out_pkt_lost, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 158): /* RTP_OUT_PAYLOAD_TYPE */ - case ((VENDOR_NTOP << 16) | 158): /* RTP_OUT_PAYLOAD_TYPE */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_out_payload_type, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 159): /* RTP_IN_MAX_DELTA */ - case ((VENDOR_NTOP << 16) | 159): /* RTP_IN_MAX_DELTA */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_in_max_delta, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 160): /* RTP_OUT_MAX_DELTA */ - case ((VENDOR_NTOP << 16) | 160): /* RTP_OUT_MAX_DELTA */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_out_max_delta, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 168): /* PROC_ID */ - case ((VENDOR_NTOP << 16) | 168): /* PROC_ID */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_proc_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case (NTOP_BASE + 169): /* PROC_NAME */ - case ((VENDOR_NTOP << 16) | 169): /* PROC_NAME */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_proc_name, - tvb, offset, length, ENC_ASCII|ENC_NA); - break; - case (NTOP_BASE + 180): /* HTTP_URL */ - case ((VENDOR_NTOP << 16) | 180): /* HTTP_URL */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_http_url, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 181): /* HTTP_RET_CODE */ - case ((VENDOR_NTOP << 16) | 181): /* HTTP_RET_CODE */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_http_ret_code, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - - case (NTOP_BASE + 182): /* HTTP_REFERER */ - case ((VENDOR_NTOP << 16) | 182): /* HTTP_REFERER */ - break; - case (NTOP_BASE + 183): /* HTTP_UA */ - case ((VENDOR_NTOP << 16) | 183): /* HTTP_UA */ - break; - case (NTOP_BASE + 184): /* HTTP_MIME */ - case ((VENDOR_NTOP << 16) | 184): /* HTTP_MIME */ - break; - - case (NTOP_BASE + 185): /* SMTP_MAIL_FROM */ - case ((VENDOR_NTOP << 16) | 185): /* SMTP_MAIL_FROM */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_smtp_mail_from, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 186): /* SMTP_RCPT_TO */ - case ((VENDOR_NTOP << 16) | 186): /* SMTP_RCPT_TO */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_smtp_rcpt_to, - tvb, offset, length, gen_str); - break; - - case (NTOP_BASE + 190): /* FLOW_ID */ - case ((VENDOR_NTOP << 16) | 190): /* FLOW_ID */ - ti = proto_tree_add_item(pdutree, hf_cflow_flow_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - - case (NTOP_BASE + 195): /* MYSQL_SERVER_VERSION */ - case ((VENDOR_NTOP << 16) | 195): /* MYSQL_SERVER_VERSION */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_mysql_server_version, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 196): /* MYSQL_USERNAME */ - case ((VENDOR_NTOP << 16) | 196): /* MYSQL_USERNAME */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_mysql_username, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 197): /* MYSQL_DB */ - case ((VENDOR_NTOP << 16) | 197): /* MYSQL_DB */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_mysql_db, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 198): /* MYSQL_QUERY */ - case ((VENDOR_NTOP << 16) | 198): /* MYSQL_QUERY */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_ntop_mysql_query, - tvb, offset, length, gen_str); - break; - case (NTOP_BASE + 199): /* MYSQL_RESPONSE */ - case ((VENDOR_NTOP << 16) | 199): /* MYSQL_RESPONSE */ - ti = proto_tree_add_item(pdutree, hf_pie_ntop_mysql_response, - tvb, offset, length, ENC_BIG_ENDIAN); - - break; - - /* END NTOP */ - - /* START Plixer International */ - case ((VENDOR_PLIXER << 16) | 100): /* client_ip_v4 */ - ti = proto_tree_add_item(pdutree, hf_pie_plixer_client_ip_v4, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case ((VENDOR_PLIXER << 16) | 101): /* client_hostname */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_plixer_client_hostname, - tvb, offset, length, gen_str); - break; - case ((VENDOR_PLIXER << 16) | 102): /* partner_name */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_plixer_partner_name, - tvb, offset, length, gen_str); - break; - case ((VENDOR_PLIXER << 16) | 103): /* server_hostname */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_plixer_server_hostname, - tvb, offset, length, gen_str); - break; - case ((VENDOR_PLIXER << 16) | 104): /* server_ip_v4 */ - ti = proto_tree_add_item(pdutree, hf_pie_plixer_server_ip_v4, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case ((VENDOR_PLIXER << 16) | 105): /* recipient_address */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_plixer_recipient_address, - tvb, offset, length, gen_str); - break; - case ((VENDOR_PLIXER << 16) | 106): /* event_id */ - ti = proto_tree_add_item(pdutree, hf_pie_plixer_event_id, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case ((VENDOR_PLIXER << 16) | 107): /* msgid */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_plixer_msgid, - tvb, offset, length, gen_str); - break; - case ((VENDOR_PLIXER << 16) | 108): /* priority */ - ti = proto_tree_add_item(pdutree, hf_pie_plixer_priority, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case ((VENDOR_PLIXER << 16) | 109): /* recipient_report_status */ - ti = proto_tree_add_item(pdutree, hf_pie_plixer_recipient_report_status, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case ((VENDOR_PLIXER << 16) | 110): /* number_recipients */ - ti = proto_tree_add_item(pdutree, hf_pie_plixer_number_recipients, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case ((VENDOR_PLIXER << 16) | 111): /* origination_time */ - ti = proto_tree_add_item(pdutree, hf_pie_plixer_origination_time, - tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); - break; - case ((VENDOR_PLIXER << 16) | 112): /* encryption */ - ti = proto_tree_add_item(pdutree, hf_pie_plixer_encryption, - tvb, offset, length, ENC_BIG_ENDIAN); - break; - case ((VENDOR_PLIXER << 16) | 113): /* service_version */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_plixer_service_version, - tvb, offset, length, gen_str); - break; - case ((VENDOR_PLIXER << 16) | 114): /* linked_msgid */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_plixer_linked_msgid, - tvb, offset, length, gen_str); - break; - case ((VENDOR_PLIXER << 16) | 115): /* message_subject */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_plixer_message_subject, - tvb, offset, length, gen_str); - break; - case ((VENDOR_PLIXER << 16) | 116): /* sender_address */ - gen_str = tvb_format_text(tvb, offset, length); - ti = proto_tree_add_string(pdutree, hf_pie_plixer_sender_address, - tvb, offset, length, gen_str); - break; - case ((VENDOR_PLIXER << 16) | 117): /* date_time */ - ti = proto_tree_add_item(pdutree, hf_pie_plixer_date_time, - tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); - break; - /* END Plixer International */ - - default: /* Unknown Field ID */ - if ((hdrinfo->vspec == 9) || (pen == REVPEN)) { - ti = proto_tree_add_bytes_format_value(pdutree, hf_cflow_unknown_field_type, - tvb, offset, length, NULL, - "Type %u: Value (hex bytes): %s", - masked_type, - tvb_bytes_to_str_punct(tvb, offset, length, ' ')); - } else { /* v10 PEN */ - ti = proto_tree_add_bytes_format_value(pdutree, hf_ipfix_enterprise_private_entry, - tvb, offset, length, NULL, - "(%s) Type %u: Value (hex bytes): %s", - pen_str ? pen_str : "(null)", - masked_type, - tvb_bytes_to_str_punct(tvb, offset, length, ' ')); - } - break; - - } /* switch (pen_type) */ - - if (ti && (vstr_len != 0)) { - /* XXX: ugh: not very pretty: how to show/highlight actual length bytes ?? */ - /* YYY: added the length in a tree. Not sure if this is best. */ - proto_item_append_text(ti, " (Variable Length)"); - PROTO_ITEM_SET_GENERATED(ti); - string_tree = proto_item_add_subtree(ti, ett_str_len); - proto_tree_add_uint(string_tree, hf_string_len_short, tvb, - gen_str_offset-vstr_len, 1, string_len_short); - if (vstr_len == 3) { - proto_tree_add_uint(string_tree, hf_string_len_long, tvb, - gen_str_offset-2, 2, string_len_long); - } - - - - } - - if (ti && (pen == REVPEN)) { - /* XXX: why showing type ? type not shown if not reverse */ - proto_item_append_text(ti, " (Reverse Type %u %s)", - masked_type, - val_to_str_ext_const(masked_type, &v9_v10_template_types_ext,"Unknown")); - } - - offset += length; - } /* for (i=0; i < count; i++) */ - - /* If only "start" or "end" time, show it here */ - /* XXX: length is actually 8 if millisec, microsec, nanosec time */ - for (i = 0; i < 2; i++) { - if (!(offset_s[i] && offset_e[i])) { - if (offset_s[i]) { - if (msec_start[i]) { - proto_tree_add_time(pdutree, hf_cflow_timestart, tvb, - offset_s[i], 4, &ts_start[i]); - } else { - proto_tree_add_time(pdutree, hf_cflow_abstimestart, tvb, - offset_s[i], 4, &ts_start[i]); - } - } - if (offset_e[i]) { - if (msec_end[i]) { - proto_tree_add_time(pdutree, hf_cflow_timeend, tvb, - offset_e[i], 4, &ts_end[i]); - } else { - proto_tree_add_time(pdutree, hf_cflow_abstimeend, tvb, - offset_s[i], 4, &ts_start[i]); - } - } - } - } - - /* XXX - These IDs are currently hard-coded in procflow.py. */ - if (got_flags == GOT_TCP_UDP && (tplt->id == 256 || tplt->id == 258)) { - add_tcp_process_info(pinfo->fd->num, &local_addr, &remote_addr, local_port, remote_port, uid, pid, uname_str, cmd_str); - } - if (got_flags == GOT_TCP_UDP && (tplt->id == 257 || tplt->id == 259)) { - add_udp_process_info(pinfo->fd->num, &local_addr, &remote_addr, local_port, remote_port, uid, pid, uname_str, cmd_str); - } - - return (guint) (offset - orig_offset); + ti = proto_tree_add_item(pdutree, hf_cflow_sampler_id, + tvb, offset, length, ENC_NA); + break; + + case 49: /* FLOW_SAMPLER_MODE */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampler_mode, + tvb, offset, length, ENC_NA); + break; + + case 50: /* FLOW_SAMPLER_RANDOM_INTERVAL */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampler_random_interval, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 51: /* FLOW_CLASS */ + ti = proto_tree_add_item(pdutree, hf_cflow_flow_class, + tvb, offset, length, ENC_NA); + break; + + case 52: /* TTL_MINIMUM */ + ti = proto_tree_add_item(pdutree, hf_cflow_ttl_minimum, + tvb, offset, length, ENC_NA); + break; + + case 53: /* TTL_MAXIMUM */ + ti = proto_tree_add_item(pdutree, hf_cflow_ttl_maximum, + tvb, offset, length, ENC_NA); + break; + + case 54: /* IPV4_ID */ + ti = proto_tree_add_item(pdutree, hf_cflow_ipv4_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 55: /* postIpClassOfService */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_tos, + tvb, offset, length, ENC_NA); + break; + + case 56: /* sourceMacAddress */ + ti = proto_tree_add_item(pdutree, hf_cflow_srcmac, + tvb, offset, length, ENC_NA); + break; + + case 57: /* postDestinationMacAddress */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_dstmac, + tvb, offset, length, ENC_NA); + break; + + case 58: /* vlanId */ + ti = proto_tree_add_item(pdutree, hf_cflow_vlanid, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 59: /* postVlanId */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_vlanid, + tvb, offset, length, ENC_NA); + break; + + case 60: /* IP_VERSION */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_version, + tvb, offset, length, ENC_NA); + break; + + case 61: /* DIRECTION */ + ti = proto_tree_add_item(pdutree, hf_cflow_direction, + tvb, offset, length, ENC_NA); + break; + + case 62: /* IPV6_NEXT_HOP */ + if (length == 16) { + ti = proto_tree_add_item(pdutree, hf_cflow_nexthop_v6, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "NextHop: length %u", length); + } + break; + + case 63: /* BGP_IPV6_NEXT_HOP */ + if (length == 16) { + ti = proto_tree_add_item(pdutree, hf_cflow_bgpnexthop_v6, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "BGPNextHop: length %u", length); + } + break; + + case 64: /* ipv6ExtensionHeaders */ + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_exthdr, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 70: /* MPLS label1*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 1); + break; + + case 71: /* MPLS label2*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 2); + break; + + case 72: /* MPLS label3*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 3); + break; + + case 73: /* MPLS label4*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 4); + break; + + case 74: /* MPLS label5*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 5); + break; + + case 75: /* MPLS label6*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 6); + break; + + case 76: /* MPLS label7*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 7); + break; + + case 77: /* MPLS label8*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 8); + break; + + case 78: /* MPLS label9*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 9); + break; + + case 79: /* MPLS label10*/ + ti = proto_tree_add_mpls_label(pdutree, tvb, offset, length, 10); + break; + + case 80: /* destinationMacAddress */ + ti = proto_tree_add_item(pdutree, hf_cflow_dstmac, + tvb, offset, length, ENC_NA); + break; + + case 81: /* postSourceMacAddress */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_srcmac, + tvb, offset, length, ENC_NA); + break; + + case 82: /* IF_NAME */ + ti = proto_tree_add_item(pdutree, hf_cflow_if_name, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 83: /* IF_DESCR */ + ti = proto_tree_add_item(pdutree, hf_cflow_if_descr, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 84: /* SAMPLER_NAME */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampler_name, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 85: /* BYTES_PERMANENT */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_permanent_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_permanent_octets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Running Octets: length %u", length); + } + break; + + case 86: /* PACKETS_PERMANENT */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_permanent_packets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_permanent_packets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Running Packets: length %u", length); + } + break; + + case 88: /* fragmentOffset */ + ti = proto_tree_add_item(pdutree, hf_cflow_fragment_offset, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 89: { + /* FORWARDING_STATUS */ + /* Forwarding status is encoded on 1 byte with + * the 2 left bits giving the status and the 6 + * remaining bits giving the reason code. */ + + guint8 forwarding_status; + const value_string *x_vs; + int x_hf; + + ti = proto_tree_add_text(pdutree, tvb, offset, length, "Forwarding Status"); + fwdstattree = proto_item_add_subtree(ti, ett_fwdstat); + + forwarding_status = tvb_get_guint8(tvb, offset)>>6; + switch(forwarding_status) { + default: + case FORWARDING_STATUS_UNKNOWN: + x_vs = v9_forwarding_status_unknown_code; + x_hf = hf_cflow_forwarding_status_unknown_code; + break; + case FORWARDING_STATUS_FORWARD: + x_vs = v9_forwarding_status_forward_code; + x_hf = hf_cflow_forwarding_status_forward_code; + break; + case FORWARDING_STATUS_DROP: + x_vs = v9_forwarding_status_drop_code; + x_hf = hf_cflow_forwarding_status_drop_code; + break; + case FORWARDING_STATUS_CONSUME: + x_vs = v9_forwarding_status_consume_code; + x_hf = hf_cflow_forwarding_status_consume_code; + break; + } + + proto_tree_add_item(fwdstattree, hf_cflow_forwarding_status, + tvb, offset, length, ENC_NA); + + proto_tree_add_item(fwdstattree, x_hf, + tvb, offset, length, ENC_NA); + + /* add status code to tree summary */ + if (length==1) { + proto_item_append_text(ti, ": %s", val_to_str_const(forwarding_status, + v9_forwarding_status, "(Unknown)")); + proto_item_append_text(ti, ": %s", val_to_str_const((tvb_get_guint8(tvb, offset)&0x3F), + x_vs, "(Unknown)")); + }; + } + break; + + case 90: /* mplsVpnRouteDistinguisher */ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_vpn_rd, + tvb, offset, length, ENC_NA); + break; + + case 91: /* mplsTopLabelPrefixLength */ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_prefix_length, + tvb, offset, length, ENC_NA); + break; + + case 94: /* NBAR applicationDesc */ + ti = proto_tree_add_item(pdutree, hf_cflow_nbar_appl_desc, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 95: /* NBAR applicationId */ + ti = proto_tree_add_item(pdutree, hf_cflow_nbar_appl_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 96: /* NBAR applicationName */ + ti = proto_tree_add_item(pdutree, hf_cflow_nbar_appl_name, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 98: /* postIpDiffServCodePoint */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_ip_diff_serv_code_point, + tvb, offset, length, ENC_NA); + break; + + case 99: /* multicastReplicationFactor */ + ti = proto_tree_add_item(pdutree, hf_cflow_multicast_replication_factor, + tvb, offset, length, ENC_NA); + break; + + case 128: /* dest AS Peer */ + ti = proto_tree_add_item(pdutree, hf_cflow_peer_dstas, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 129: /* source AS Peer*/ + ti = proto_tree_add_item(pdutree, hf_cflow_peer_srcas, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 130: /* exporterIPv4Address */ + ti = proto_tree_add_item(pdutree, hf_cflow_exporter_addr, + tvb, offset, length, ENC_NA); + break; + + case 131: /* exporterIPv6Address */ + ti = proto_tree_add_item(pdutree, + hf_cflow_exporter_addr_v6, + tvb, offset, length, ENC_NA); + break; + + case 132: /* droppedOctetDeltaCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_drop_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_drop_octets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "Dropped Octets: length %u", + length); + } + break; + + case 133: /* droppedPacketDeltaCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_drop_packets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_drop_packets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "Dropped Packets: length %u", + length); + } + break; + + case 134: /* droppedOctetTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_octets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "Dropped Total Octets: length %u", length); + } + break; + + case 135: /* droppedPacketTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_packets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_drop_total_packets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "Dropped Total Packets: length %u", length); + } + break; + + case 136: /* flowEndReason */ + ti = proto_tree_add_item(pdutree, hf_cflow_flow_end_reason, + tvb, offset, length, ENC_NA); + break; + + case 137: /* commonPropertiesId */ + ti = proto_tree_add_item(pdutree, hf_cflow_common_properties_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 138: /* observationPointId */ + ti = proto_tree_add_item(pdutree, hf_cflow_observation_point_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 139: /* icmpTypeCodeIPv6 */ + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_type, + tvb, offset, 1, ENC_NA); + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_code, + tvb, offset + 1, 1, ENC_NA); + break; + + case 140: /* mplsTopLabelIPv6Address */ + if (length == 16) { + ti = proto_tree_add_item(pdutree, + hf_cflow_mpls_pe_addr_v6, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "mplsTopLabelIPv6Addr: length %u", + length); + } + break; + + case 141: /* lineCardId */ + ti = proto_tree_add_item(pdutree, hf_cflow_scope_linecard, + tvb, offset, length, ENC_NA); + break; + + case 142: /* portId */ + ti = proto_tree_add_item(pdutree, hf_cflow_port_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 143: /* meteringProcessId */ + ti = proto_tree_add_item(pdutree, hf_cflow_mp_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 144: /* FLOW EXPORTER */ + ti = proto_tree_add_item(pdutree, hf_cflow_flow_exporter, + tvb, offset, length, ENC_NA); + break; + + case 145: /* templateId */ + ti = proto_tree_add_item(pdutree, hf_cflow_template_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 146: /* wlanChannelId */ + ti = proto_tree_add_item(pdutree, hf_cflow_wlan_channel_id, + tvb, offset, length, ENC_NA); + break; + + case 147: /* wlanSSID */ + ti = proto_tree_add_item(pdutree, hf_cflow_wlan_ssid, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 148: /* flowId */ + ti = proto_tree_add_item(pdutree, hf_cflow_flow_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 149: /* observationDomainId */ + ti = proto_tree_add_item(pdutree, hf_cflow_od_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 160: /* systemInitTimeMilliseconds */ + ts.secs = (tvb_get_ntoh64(tvb, offset)/1000); + ts.nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) *1000000; + ti = proto_tree_add_time(pdutree, + hf_cflow_sys_init_time, + tvb, offset, length, &ts); + break; + + case 161: /* flowDurationMilliseconds */ + msec_delta = tvb_get_ntohl(tvb, offset); + ts_delta.secs = msec_delta / 1000; + ts_delta.nsecs = (msec_delta % 1000) * 1000000; + ti = proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, + offset, length, &ts_delta); + break; + + case 162: /* flowDurationMicroseconds */ + msec_delta = tvb_get_ntohl(tvb, offset); + ts_delta.secs = msec_delta / 1000000; + ts_delta.nsecs = (msec_delta % 1000000) * 1000000; + ti = proto_tree_add_time(pdutree, hf_cflow_timedelta, tvb, + offset, length, &ts_delta); + break; + + case 164: /* ignoredPacketTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_ignore_packets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_ignore_packets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Ignored Packets: length %u", length); + } + break; + + case 165: /* ignoredOctetTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_ignore_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_ignore_octets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Ignored Octets: length %u", length); + } + break; + + case 166: /* notSentFlowTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_flows, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_flows64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Not Sent Flows: length %u", length); + } + break; + + case 167: /* notSentPacketTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_packets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_packets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Not Sent Packets: length %u", length); + } + break; + + case 168: /* notSentOctetTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_notsent_octets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Not Sent Packets: length %u", length); + } + break; + + case 169: /* destinationIPv6Prefix */ + if (length == 16) { + ti = proto_tree_add_item(pdutree, hf_cflow_dstnet_v6, + tvb, offset, length, ENC_NA); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "DstPrefix: length %u", length); + } + break; + + case 170: /* sourceIPv6Prefix */ + if (length == 16) { + ti = proto_tree_add_item(pdutree, hf_cflow_srcnet_v6, + tvb, offset, length, ENC_NA); + } else if (length != 4 && length != 16) { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "SrcPrefix: length %u", length); + } + break; + + case 171: /* postOctetTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_octets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Post Total Octets: length %u", length); + } + break; + + case 172: /* postPacketTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_packets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_packets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Post Total Packets: length %u", length); + } + break; + + case 173: /* flowKeyIndicator */ + ti = proto_tree_add_item(pdutree, hf_cflow_key, + tvb, offset, length, ENC_NA); + break; + + case 174: /* postMCastPacketTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_mulpackets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_mulpackets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Post Total Multicast Packets: length %u", length); + } + break; + + case 175: /* postMCastOctetTotalCount */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_muloctets, + tvb, offset, length, ENC_BIG_ENDIAN); + } else if (length == 8) { + ti = proto_tree_add_item(pdutree, hf_cflow_post_total_muloctets64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "Post Total Multicast Octets: length %u", length); + } + break; + + case 176: /* ICMP_IPv4_TYPE */ + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv4_type, + tvb, offset, length, ENC_NA); + break; + + case 177: /* ICMP_IPv4_CODE */ + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv4_code, + tvb, offset, length, ENC_NA); + break; + + case 178: /* ICMP_IPv6_TYPE */ + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_type, + tvb, offset, length, ENC_NA); + break; + + case 179: /* ICMP_IPv6_CODE */ + ti = proto_tree_add_item(pdutree, hf_cflow_icmp_ipv6_code, + tvb, offset, length, ENC_NA); + break; + + case 184: /* tcpSequenceNumber */ + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_seq_num, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 185: /* tcpAcknowledgementNumber */ + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_ack_num, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 186: /* TCP_WINDOWS_SIZE */ + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_window_size, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 187: /* tcpUrgentPointer */ + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_urg_ptr, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 188: /* tcpHeaderLength */ + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_header_length, + tvb, offset, length, ENC_NA); + break; + + case 189: /* ipHeaderLength */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_header_length, + tvb, offset, length, ENC_NA); + break; + + case 190: /* IPV4_TOTAL_LENGTH */ + ti = proto_tree_add_item(pdutree, hf_cflow_ipv4_total_length, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 191: /* payloadLengthIPv6 */ + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_payload_length, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 192: /* IP_TTL */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_ttl, + tvb, offset, length, ENC_NA); + break; + + case 193: /* nextHeaderIPv6 */ + ti = proto_tree_add_item(pdutree, hf_cflow_ipv6_next_hdr, + tvb, offset, length, ENC_NA); + break; + + case 194: /* IP_TOS */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_tos, + tvb, offset, length, ENC_NA); + break; + + case 195: /* IP_DSCP */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_dscp, + tvb, offset, length, ENC_NA); + break; + + case 196: /* ipPrecedence */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_precedence, + tvb, offset, length, ENC_NA); + break; + + case 197: /* fragmentFlags */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_fragment_flags, + tvb, offset, length, ENC_NA); + break; + + case 198: /* BYTES_SQUARED */ + case 199: /* BYTES_SQUARED_PERMANENT */ + if( length == 8 ) { + ti = proto_tree_add_item(pdutree, hf_cflow_octets_squared64, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "Bytes Squared: length %u", length); + } + break; + case 200: /* mplsTopLabelTTL */ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_ttl, + tvb, offset, length, ENC_NA); + break; + + case 201: /* mplsLabelStackLength */ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_label_length, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 202: /* mplsLabelStackDepth */ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_label_depth, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 203: /* mplsTopLabelExp */ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_top_label_exp, + tvb, offset, length, ENC_NA); + break; + + case 204: /* ipPayloadLength */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_payload_length, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 205: /* UDP_LENGTH */ + ti = proto_tree_add_item(pdutree, hf_cflow_udp_length, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 206: /* IS_MULTICAST */ + ti = proto_tree_add_item(pdutree, hf_cflow_is_multicast, + tvb, offset, length, ENC_NA); + break; + + case 207: /* IP_HEADER_WORDS */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_header_words, + tvb, offset, length, ENC_NA); + break; + + case 208: /* OPTION_MAP */ + ti = proto_tree_add_item(pdutree, hf_cflow_option_map, + tvb, offset, length, ENC_NA); + break; + + case 209: /* tcpOptions */ + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_option_map, + tvb, offset, length, ENC_NA); + break; + + case 210: /* paddingOctets */ + ti = proto_tree_add_text(pdutree, tvb, offset, length, + "Padding (%u byte%s)", + length, plurality(length, "", "s")); + break; + + case 211: /* collectorIPv4Address */ + ti = proto_tree_add_item(pdutree, hf_cflow_collector_addr, + tvb, offset, length, ENC_NA); + break; + + case 212: /* collectorIPv6Address */ + ti = proto_tree_add_item(pdutree, hf_cflow_collector_addr_v6, + tvb, offset, length, ENC_NA); + break; + + case 213: /* exportInterface */ + if (length == 4) { + ti = proto_tree_add_item(pdutree, hf_cflow_export_interface, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_text(pdutree, + tvb, offset, length, + "exportInterface: invalid size %d", length ); + } + break; + + case 214: /* exportProtocolVersion */ + ti = proto_tree_add_item(pdutree, hf_cflow_export_protocol_version, + tvb, offset, length, ENC_NA); + break; + + case 215: /* exportTransportProtocol */ + ti = proto_tree_add_item(pdutree, hf_cflow_export_prot, + tvb, offset, length, ENC_NA); + break; + + case 216: /* collectorTransportPort */ + ti = proto_tree_add_item(pdutree, hf_cflow_collector_port, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 217: /* exporterTransportPort */ + ti = proto_tree_add_item(pdutree, hf_cflow_exporter_port, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 218: /* tcpSynTotalCount */ + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_syn, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 219: /* tcpFinTotalCount */ + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_fin, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 220: /* tcpRstTotalCount */ + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_rst, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 221: /* tcpPshTotalCount */ + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_psh, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 222: /* tcpAckTotalCount */ + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_ack, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 223: /* tcpUrgTotalCount */ + ti = proto_tree_add_item(pdutree, hf_cflow_total_tcp_urg, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 224: /* IP_TOTAL_LENGTH */ + ti = proto_tree_add_item(pdutree, hf_cflow_ip_total_length, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 225: /* postNATSourceIPv4Address */ + case 40001: /* NF_F_XLATE_SRC_ADDR_IPV4 (Cisco ASA 5500 Series) */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_natsource_ipv4_address, + tvb, offset, length, ENC_NA); + break; + + case 226: /* postNATDestinationIPv4Address */ + case 40002: /* NF_F_XLATE_DST_ADDR_IPV4 (Cisco ASA 5500 Series) */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_natdestination_ipv4_address, + tvb, offset, length, ENC_NA); + break; + + case 227: /* postNAPTSourceTransportPort */ + case 40003: /* NF_F_XLATE_SRC_PORT (Cisco ASA 5500 Series) */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_naptsource_transport_port, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 228: /* postNAPTDestinationTransportPort */ + case 40004: /* NF_F_XLATE_DST_PORT (Cisco ASA 5500 Series) */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_naptdestination_transport_port, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 229: /* natOriginatingAddressRealm */ + ti = proto_tree_add_item(pdutree, hf_cflow_nat_originating_address_realm, + tvb, offset, length, ENC_NA); + break; + + case 230: /* natEvent */ + ti = proto_tree_add_item(pdutree, hf_cflow_nat_event, + tvb, offset, length, ENC_NA); + break; + + case 231: /* initiatorOctets */ + ti = proto_tree_add_item(pdutree, hf_cflow_initiator_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 232: /* responderOctets */ + ti = proto_tree_add_item(pdutree, hf_cflow_responder_octets, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 233: /* firewallEvent */ + case 40005: /* NF_F_FW_EVENT (Cisco ASA 5500 Series) */ + ti = proto_tree_add_item(pdutree, hf_cflow_firewall_event, + tvb, offset, length, ENC_NA); + break; + + case 234: /* ingressVRFID */ + ti = proto_tree_add_item(pdutree, hf_cflow_ingress_vrfid, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 235: /* egressVRFID */ + ti = proto_tree_add_item(pdutree, hf_cflow_egress_vrfid, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 236: /* VRFname */ + ti = proto_tree_add_item(pdutree, hf_cflow_vrfname, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 237: /* postMplsTopLabelExp */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_mpls_top_label_exp, + tvb, offset, length, ENC_NA); + break; + + case 238: /* tcpWindowScale */ + ti = proto_tree_add_item(pdutree, hf_cflow_tcp_window_scale, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 239: /* biflowDirection */ + ti = proto_tree_add_item(pdutree, hf_cflow_biflow_direction, + tvb, offset, length, ENC_NA); + break; + + case 240: /* ethernetHeaderLength */ + ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_header_length, + tvb, offset, length, ENC_NA); + break; + + case 241: /* ethernetPayloadLength */ + ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_payload_length, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 242: /* ethernetTotalLength */ + ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_total_length, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 243: /* dot1qVlanId */ + ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_vlan_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 244: /* dot1qPriority */ + ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_priority, + tvb, offset, length, ENC_NA); + break; + + case 245: /* dot1qCustomerVlanId */ + ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_customer_vlan_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 246: /* dot1qCustomerPriority */ + ti = proto_tree_add_item(pdutree, hf_cflow_dot1q_customer_priority, + tvb, offset, length, ENC_NA); + break; + + case 247: /* metroEvcId */ + ti = proto_tree_add_item(pdutree, hf_cflow_metro_evc_id, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 248: /* metroEvcType */ + ti = proto_tree_add_item(pdutree, hf_cflow_metro_evc_type, + tvb, offset, length, ENC_NA); + break; + + case 249: /* pseudoWireId */ + ti = proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 250: /* pseudoWireType */ + ti = proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_type, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 251: /* pseudoWireControlWord */ + ti = proto_tree_add_item(pdutree, hf_cflow_pseudo_wire_control_word, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 252: /* ingressPhysicalInterface */ + ti = proto_tree_add_item(pdutree, hf_cflow_ingress_physical_interface, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 253: /* egressPhysicalInterface */ + ti = proto_tree_add_item(pdutree, hf_cflow_egress_physical_interface, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 254: /* postDot1qVlanId */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_dot1q_vlan_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 255: /* postDot1qCustomerVlanId */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_dot1q_customer_vlan_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 256: /* ethernetType */ + ti = proto_tree_add_item(pdutree, hf_cflow_ethernet_type, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 257: /* postIpPrecedence */ + ti = proto_tree_add_item(pdutree, hf_cflow_post_ip_precedence, + tvb, offset, length, ENC_NA); + break; + + case 258: /* collectionTimeMilliseconds */ + ts.secs = (tvb_get_ntoh64(tvb, offset)/1000); + ts.nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) *1000000; + ti = proto_tree_add_time(pdutree, + hf_cflow_collection_time_milliseconds, + tvb, offset, length, &ts); + break; + + case 259: /* exportSctpStreamId */ + ti = proto_tree_add_item(pdutree, hf_cflow_export_sctp_stream_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 260: /* maxExportSeconds */ + ts.secs = tvb_get_ntohl(tvb, offset); + ts.nsecs = 0; + 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; + ti = proto_tree_add_time(pdutree, hf_cflow_max_flow_end_seconds, + tvb, offset, length, &ts); + break; + + case 262: /* messageMD5Checksum */ + ti = proto_tree_add_item(pdutree, hf_cflow_message_md5_checksum, + tvb, offset, length, ENC_NA); + break; + + case 263: /* messageScope */ + ti = proto_tree_add_item(pdutree, hf_cflow_message_scope, + tvb, offset, length, ENC_NA); + break; + + case 264: /* minExportSeconds */ + ts.secs = tvb_get_ntohl(tvb, offset); + ts.nsecs = 0; + 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; + ti = proto_tree_add_time(pdutree, hf_cflow_min_flow_start_seconds, + tvb, offset, length, &ts); + break; + + case 266: /* opaqueOctets */ + ti = proto_tree_add_item(pdutree, hf_cflow_opaque_octets, + tvb, offset, length, ENC_NA); + break; + + case 267: /* sessionScope */ + ti = proto_tree_add_item(pdutree, hf_cflow_session_scope, + tvb, offset, length, ENC_NA); + break; + + case 268: /* maxFlowEndMicroseconds */ + ti = proto_tree_add_item(pdutree, hf_cflow_max_flow_end_microseconds, + tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); + break; + + case 269: /* maxFlowEndMilliseconds */ + ts.secs = (tvb_get_ntoh64(tvb, offset)/1000); + ts.nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) * 1000000; + ti = proto_tree_add_time(pdutree, hf_cflow_max_flow_end_milliseconds, + tvb, offset, length, &ts); + break; + + case 270: /* maxFlowEndNanoseconds */ + ti = proto_tree_add_item(pdutree, hf_cflow_max_flow_end_nanoseconds, + tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); + break; + + case 271: /* minFlowStartMicroseconds */ + ti = proto_tree_add_item(pdutree, hf_cflow_min_flow_start_microseconds, + tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); + break; + + case 272: /* minFlowStartMilliseconds */ + ts.secs = (tvb_get_ntohl(tvb, offset)/1000); + ts.nsecs = (tvb_get_ntohl(tvb, offset)%1000) * 1000000; + ti = proto_tree_add_time(pdutree, hf_cflow_min_flow_start_milliseconds, + tvb, offset, length, &ts); + break; + + case 273: /* minFlowStartNanoseconds */ + ti = proto_tree_add_item(pdutree, hf_cflow_min_flow_start_nanoseconds, + tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); + break; + + case 274: /* collectorCertificate */ + ti = proto_tree_add_item(pdutree, hf_cflow_collector_certificate, + tvb, offset, length, ENC_NA); + break; + + case 275: /* exporterCertificate */ + ti = proto_tree_add_item(pdutree, hf_cflow_exporter_certificate, + tvb, offset, length, ENC_NA); + break; + + case 301: /* selectionSequenceId */ + ti = proto_tree_add_item(pdutree, hf_cflow_selection_sequence_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 302: /* selectorId */ + ti = proto_tree_add_item(pdutree, hf_cflow_selector_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 303: /* informationElementId */ + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 304: /* selectorAlgorithm */ + ti = proto_tree_add_item(pdutree, hf_cflow_selector_algorithm, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 305: /* samplingPacketInterval */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_packet_interval, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 306: /* samplingPacketSpace */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_packet_space, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 307: /* samplingTimeInterval */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_time_interval, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 308: /* samplingTimeSpace */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_time_space, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 309: /* samplingSize */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_size, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 310: /* samplingPopulation */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_population, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 311: /* samplingProbability */ + ti = proto_tree_add_item(pdutree, hf_cflow_sampling_probability, + tvb, offset, length, ENC_NA); + break; + + case 313: /* SECTION_HEADER */ + ti = proto_tree_add_item(pdutree, hf_cflow_section_header, + tvb, offset, length, ENC_NA); + break; + + case 314: /* SECTION_PAYLOAD */ + ti = proto_tree_add_item(pdutree, hf_cflow_section_payload, + tvb, offset, length, ENC_NA); + break; + + case 316: /* mplsLabelStackSection */ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_label_stack_section, + tvb, offset, length, ENC_NA); + break; + + case 317: /* mplsPayloadPacketSection */ + ti = proto_tree_add_item(pdutree, hf_cflow_mpls_payload_packet_section, + tvb, offset, length, ENC_NA); + break; + + case 318: /* selectorIdTotalPktsObserved */ + ti = proto_tree_add_item(pdutree, hf_cflow_selector_id_total_pkts_observed, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 319: /* selectorIdTotalPktsSelected */ + ti = proto_tree_add_item(pdutree, hf_cflow_selector_id_total_pkts_selected, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 320: /* absoluteError */ + ti = proto_tree_add_item(pdutree, hf_cflow_absolute_error, + tvb, offset, length, ENC_NA); + break; + + case 321: /* relativeError */ + ti = proto_tree_add_item(pdutree, hf_cflow_relative_error, + tvb, offset, length, ENC_NA); + break; + + case 322: /* observationTimeSeconds */ + ts.secs = tvb_get_ntohl(tvb, offset); + ts.nsecs = 0; + ti = proto_tree_add_time(pdutree, hf_cflow_observation_time_seconds, + tvb, offset, length, &ts); + break; + + case 323: /* observationTimeMilliseconds */ + ts.secs = (tvb_get_ntoh64(tvb, offset)/1000); + ts.nsecs = (int)(tvb_get_ntoh64(tvb, offset)%1000) * 1000000; + ti = proto_tree_add_time(pdutree, hf_cflow_observation_time_milliseconds, + tvb, offset, length, &ts); + break; + + case 324: /* observationTimeMicroseconds */ + ti = proto_tree_add_item(pdutree, hf_cflow_observation_time_microseconds, + tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); + break; + + case 325: /* observationTimeNanoseconds */ + ti = proto_tree_add_item(pdutree, hf_cflow_observation_time_nanoseconds, + tvb, offset, length, ENC_TIME_NTP|ENC_BIG_ENDIAN); + break; + + case 326: /* digestHashValue */ + ti = proto_tree_add_item(pdutree, hf_cflow_digest_hash_value, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 327: /* hashIPPayloadOffset */ + ti = proto_tree_add_item(pdutree, hf_cflow_hash_ippayload_offset, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 328: /* hashIPPayloadSize */ + ti = proto_tree_add_item(pdutree, hf_cflow_hash_ippayload_size, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 329: /* hashOutputRangeMin */ + ti = proto_tree_add_item(pdutree, hf_cflow_hash_output_range_min, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 330: /* hashOutputRangeMax */ + ti = proto_tree_add_item(pdutree, hf_cflow_hash_output_range_max, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 331: /* hashSelectedRangeMin */ + ti = proto_tree_add_item(pdutree, hf_cflow_hash_selected_range_min, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 332: /* hashSelectedRangeMax */ + ti = proto_tree_add_item(pdutree, hf_cflow_hash_selected_range_max, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 333: /* hashDigestOutput */ + ti = proto_tree_add_item(pdutree, hf_cflow_hash_digest_output, + tvb, offset, length, ENC_NA); + break; + + case 334: /* hashInitialiserValue */ + ti = proto_tree_add_item(pdutree, hf_cflow_hash_initialiser_value, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 335: /* selectorName */ + ti = proto_tree_add_item(pdutree, hf_cflow_selector_name, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 336: /* upperCILimit */ + ti = proto_tree_add_item(pdutree, hf_cflow_upper_cilimit, + tvb, offset, length, ENC_NA); + break; + + case 337: /* lowerCILimit */ + ti = proto_tree_add_item(pdutree, hf_cflow_lower_cilimit, + tvb, offset, length, ENC_NA); + break; + + case 338: /* confidenceLevel */ + ti = proto_tree_add_item(pdutree, hf_cflow_confidence_level, + tvb, offset, length, ENC_NA); + break; + + case 339: /* informationElementDataType */ + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_data_type, + tvb, offset, length, ENC_NA); + break; + + case 340: /* informationElementDescription */ + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_description, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 341: /* informationElementName */ + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_name, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case 342: /* informationElementRangeBegin */ + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_range_begin, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 343: /* informationElementRangeEnd */ + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_range_end, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 344: /* informationElementSemantics */ + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_semantics, + tvb, offset, length, ENC_NA); + break; + + case 345: /* informationElementUnits */ + ti = proto_tree_add_item(pdutree, hf_cflow_information_element_units, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 346: /* privateEnterpriseNumber */ + ti = proto_tree_add_item(pdutree, hf_cflow_private_enterprise_number, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 37000: /* packets_dropped */ + ti = proto_tree_add_item(pdutree, hf_cflow_packets_dropped, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 37003: /* byte_rate */ + ti = proto_tree_add_item(pdutree, hf_cflow_byte_rate, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 37004: /* application_media_bytes */ + ti = proto_tree_add_item(pdutree, hf_cflow_application_media_bytes, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 37006: /* application_media_byte_rate */ + ti = proto_tree_add_item(pdutree, hf_cflow_application_media_byte_rate, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 37007: /* application_media_packets */ + ti = proto_tree_add_item(pdutree, hf_cflow_application_media_packets, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 37009: /* application_media_packet_rate */ + ti = proto_tree_add_item(pdutree, hf_cflow_application_media_packet_rate, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 37011: /* application_media_event */ + ti = proto_tree_add_item(pdutree, hf_cflow_application_media_event, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 37012: /* monitor_event */ + ti = proto_tree_add_item(pdutree, hf_cflow_monitor_event, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case 37013: /* timestamp_interval */ + ti = proto_tree_add_item(pdutree, hf_cflow_timestamp_interval, + tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); + break; + case 37014: /* transport_packets_expected */ + ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_expected, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 37016: /* transport_round_trip_time */ + if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { + ti = proto_tree_add_item(pdutree, hf_cflow_transport_round_trip_time_string, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + /* value is in microseconds, adjust to nanoseconds*/ + ts.secs =0; + ts.nsecs= tvb_get_ntohl(tvb,offset) * 1000; + ti = proto_tree_add_time(pdutree, hf_cflow_transport_round_trip_time, + tvb, offset, length, &ts); + } + break; + case 37017: /* transport_event_packet_loss */ + ti = proto_tree_add_item(pdutree, hf_cflow_transport_event_packet_loss, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 37019: /* transport_packets_lost */ + if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { + ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_lost_string, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_lost, + tvb, offset, length, ENC_BIG_ENDIAN); + } + break; + case 37021: /* transport_packets_lost_rate */ + if (tvb_get_ntohl(tvb,offset)== 0xFFFF ) { + ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_lost_rate_string, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + ti = proto_tree_add_item(pdutree, hf_cflow_transport_packets_lost_rate, + tvb, offset, length, ENC_BIG_ENDIAN); + } + break; + case 37022: /* transport_rtp_ssrc */ + ti = proto_tree_add_item(pdutree, hf_cflow_transport_rtp_ssrc, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 37023: /* transport_rtp_jitter_mean */ + if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { + ti = proto_tree_add_item(pdutree, hf_cflow_transport_rtp_jitter_mean_string, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + /* value is in microseconds, adjust to nanoseconds*/ + ts.secs =0; + ts.nsecs= tvb_get_ntohl(tvb,offset) * 1000; + + ti = proto_tree_add_time(pdutree, hf_cflow_transport_rtp_jitter_mean, + tvb, offset, length, &ts); + } + break; + case 37024: /* transport_rtp_jitter_min */ + if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { + ti = proto_tree_add_item(pdutree, hf_cflow_transport_rtp_jitter_min_string, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + /* value is in microseconds, adjust to nanoseconds*/ + ts.secs =0; + ts.nsecs= tvb_get_ntohl(tvb,offset) * 1000; + ti = proto_tree_add_time(pdutree, hf_cflow_transport_rtp_jitter_min, + tvb, offset, length, &ts); + } + break; + case 37025: /* transport_rtp_jitter_max */ + if (tvb_get_ntohl(tvb,offset)== 0xFFFFFFFF ) { + ti = proto_tree_add_item(pdutree, hf_cflow_transport_rtp_jitter_max_string, + tvb, offset, length, ENC_BIG_ENDIAN); + } else { + /* value is in microseconds, adjust to nanoseconds*/ + ts.secs =0; + ts.nsecs= tvb_get_ntohl(tvb,offset) * 1000; + ti = proto_tree_add_time(pdutree, hf_cflow_transport_rtp_jitter_max, + tvb, offset, length, &ts); + } + break; + + + /* Ericsson SE NAT Logging */ + case 24628: /* natContextId */ + ti = proto_tree_add_item(pdutree, hf_cflow_nat_context_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 24629: /* natContextName */ + ti = proto_tree_add_item(pdutree, hf_cflow_nat_context_name, + tvb, offset, length, ENC_UTF_8|ENC_NA); + break; + case 24630: /* natAssignTime */ + ts.secs = tvb_get_ntohl(tvb, offset); + ts.nsecs = 0; + ti = proto_tree_add_time(pdutree, hf_cflow_nat_assign_time, + tvb, offset, length, &ts); + break; + case 24631: /* natUnAssignTime */ + ts.secs = tvb_get_ntohl(tvb, offset); + ts.nsecs = 0; + ti = proto_tree_add_time(pdutree, hf_cflow_nat_unassign_time, + tvb, offset, length, &ts); + break; + case 24632: /* natInternalAddr */ + ti = proto_tree_add_item(pdutree, hf_cflow_nat_int_addr, + tvb, offset, length, ENC_NA); + break; + case 24633: /* natExternalAddr */ + ti = proto_tree_add_item(pdutree, hf_cflow_nat_ext_addr, + tvb, offset, length, ENC_NA); + break; + case 24634: /* natExternalPortFirst */ + ti = proto_tree_add_item(pdutree, hf_cflow_nat_ext_port_first, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 24635: /* natExternalPortLast */ + ti = proto_tree_add_item(pdutree, hf_cflow_nat_ext_port_last, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + /* Cisco ASA 5500 Series */ + case 33000: /* NF_F_INGRESS_ACL_ID */ + proto_tree_add_item(pdutree, hf_cflow_ingress_acl_id, + tvb, offset, length, ENC_NA); + break; + case 33001: /* NF_F_EGRESS_ACL_ID */ + proto_tree_add_item(pdutree, hf_cflow_egress_acl_id, + tvb, offset, length, ENC_NA); + break; + case 33002: /* NF_F_FW_EXT_EVENT */ + proto_tree_add_item(pdutree, hf_cflow_fw_ext_event, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case 40000: /* NF_F_USERNAME[_MAX] */ + proto_tree_add_item(pdutree, hf_cflow_aaa_username, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + /* CACE Technologies */ + case VENDOR_CACE << 16 | 0: /* caceLocalIPv4Address */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_ipv4_address, + tvb, offset, length, ENC_NA); + 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 */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_remote_ipv4_address, + tvb, offset, length, ENC_NA); + 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 */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_ipv6_address, + tvb, offset, length, ENC_NA); + 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 */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_remote_ipv6_address, + tvb, offset, length, ENC_NA); + 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 */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_port, + tvb, offset, length, ENC_BIG_ENDIAN); + local_port = tvb_get_ntohs(tvb, offset); + got_flags |= GOT_LOCAL_PORT; + break; + + case VENDOR_CACE << 16 | 5: /* caceRemoteTransportPort */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_remote_port, + tvb, offset, length, ENC_BIG_ENDIAN); + remote_port = tvb_get_ntohs(tvb, offset); + got_flags |= GOT_REMOTE_PORT; + break; + + case VENDOR_CACE << 16 | 6: /* caceLocalIPv4id */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_ipv4_id, + tvb, offset, length, ENC_BIG_ENDIAN); + /*ipv4_id = tvb_get_ntohs(tvb, offset);*/ + /*got_flags |= GOT_IPv4_ID;*/ + break; + + case VENDOR_CACE << 16 | 7: /* caceLocalICMPid */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_icmp_id, + tvb, offset, length, ENC_BIG_ENDIAN); + /*icmp_id = tvb_get_ntohs(tvb, offset);*/ + /*got_flags |= GOT_ICMP_ID;*/ + break; + + case VENDOR_CACE << 16 | 8: /* caceLocalProcessUserId */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_uid, + tvb, offset, length, ENC_BIG_ENDIAN); + uid = tvb_get_ntohl(tvb, offset); + got_flags |= GOT_UID; + break; + + case VENDOR_CACE << 16 | 9: /* caceLocalProcessId */ + ti = proto_tree_add_item(pdutree, hf_pie_cace_local_pid, + tvb, offset, length, ENC_BIG_ENDIAN); + pid = tvb_get_ntohl(tvb, offset); + got_flags |= GOT_PID; + break; + + case VENDOR_CACE << 16 | 10: /* caceLocalProcessUserName */ + uname_len = tvb_get_guint8(tvb, offset); + uname_str = tvb_format_text(tvb, offset+1, uname_len); + proto_tree_add_item(pdutree, hf_pie_cace_local_username_len, + tvb, offset, 1, ENC_NA); + 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; + break; + + case VENDOR_CACE << 16 | 11: /* caceLocalProcessCommand */ + cmd_len = tvb_get_guint8(tvb, offset); + cmd_str = tvb_format_text(tvb, offset+1, cmd_len); + proto_tree_add_item(pdutree, hf_pie_cace_local_cmd_len, + tvb, offset, 1, ENC_NA); + 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; + break; + + /* START NTOP */ + case (NTOP_BASE + 80): /* FRAGMENTED */ + case ((VENDOR_NTOP << 16) | 80): /* FRAGMENTED */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_fragmented, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 81): /* FINGERPRINT */ + case ((VENDOR_NTOP << 16) | 81): /* FINGERPRINT */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_fingerprint, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 82): /* CLIENT_NW_DELAY_SEC */ + case ((VENDOR_NTOP << 16) | 82): /* CLIENT_NW_DELAY_SEC */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_client_nw_delay_sec, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 83): /* /\* CLIENT_NW_DELAY_USEC *\/ */ + case ((VENDOR_NTOP << 16) | 83): /* CLIENT_NW_DELAY_USEC */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_client_nw_delay_usec, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 84): /* SERVER_NW_DELAY_SEC */ + case ((VENDOR_NTOP << 16) | 84): /* SERVER_NW_DELAY_SEC */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_server_nw_delay_sec, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 85): /* SERVER_NW_DELAY_USEC */ + case ((VENDOR_NTOP << 16) | 85): /* SERVER_NW_DELAY_USEC */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_server_nw_delay_usec, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 86): /* APPL_LATENCY_SEC */ + case ((VENDOR_NTOP << 16) | 86): /* APPL_LATENCY_SEC */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_appl_latency_sec, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 87): /* APPL_LATENCY_USEC */ + case ((VENDOR_NTOP << 16) | 87): /* APPL_LATENCY_USEC */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_appl_latency_sec, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 98): /* ICMP_FLAGS */ + case ((VENDOR_NTOP << 16) | 98): /* ICMP_FLAGS */ + /* Cumulative of all flow ICMP types */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_icmp_flags, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 101): /* SRC_IP_COUNTRY */ + case ((VENDOR_NTOP << 16) | 101): /* SRC_IP_COUNTRY */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_src_ip_country, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + case (NTOP_BASE + 102): /* SRC_IP_CITY */ + case ((VENDOR_NTOP << 16) | 102): /* SRC_IP_CITY */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_src_ip_city, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + case (NTOP_BASE + 103): /* DST_IP_COUNTRY */ + case ((VENDOR_NTOP << 16) | 103): /* DST_IP_COUNTRY */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_dst_ip_country, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + case (NTOP_BASE + 104): /* DST_IP_CITY */ + case ((VENDOR_NTOP << 16) | 104): /* DST_IP_CITY */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_dst_ip_city, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + case (NTOP_BASE + 105): /* FLOW_PROTO_PORT */ + case ((VENDOR_NTOP << 16) | 105): /* FLOW_PROTO_PORT */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_flow_proto_port, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case (NTOP_BASE + 106): /* TUNNEL_ID */ + case ((VENDOR_NTOP << 16) | 106): /* TUNNEL_ID */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_tunnel_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 107): /* LONGEST_FLOW_PKT */ + case ((VENDOR_NTOP << 16) | 107): /* LONGEST_FLOW_PKT */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_longest_flow_pkt, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 108): /* SHORTEST_FLOW_PKT */ + case ((VENDOR_NTOP << 16) | 108): /* SHORTEST_FLOW_PKT */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_shortest_flow_pkt, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 109): /* RETRANSMITTED_IN_PKTS */ + case ((VENDOR_NTOP << 16) | 109): /* RETRANSMITTED_IN_PKTS */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_retransmitted_in_pkts, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 110): /* RETRANSMITTED_OUT_PKTS */ + case ((VENDOR_NTOP << 16) | 110): /* RETRANSMITTED_OUT_PKTS */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_retransmitted_out_pkts, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 111): /* OOORDER_IN_PKTS */ + case ((VENDOR_NTOP << 16) | 111): /* OOORDER_IN_PKTS */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_ooorder_in_pkts, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 112): /* OOORDER_OUT_PKTS */ + case ((VENDOR_NTOP << 16) | 112): /* OOORDER_OUT_PKTS */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_ooorder_out_pkts, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 113): /* UNTUNNELED_PROTOCOL */ + case ((VENDOR_NTOP << 16) | 113): /* UNTUNNELED_PROTOCOL */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_protocol, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 114): /* UNTUNNELED_IPV4_SRC_ADDR */ + case ((VENDOR_NTOP << 16) | 114): /* UNTUNNELED_IPV4_SRC_ADDR */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_ipv4_src_addr, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 115): /* UNTUNNELED_L4_SRC_PORT */ + case ((VENDOR_NTOP << 16) | 115): /* UNTUNNELED_L4_SRC_PORT */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_l4_src_port, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 116): /* UNTUNNELED_IPV4_DST_ADDR */ + case ((VENDOR_NTOP << 16) | 116): /* UNTUNNELED_IPV4_DST_ADDR */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_ipv4_dst_addr, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 117): /* UNTUNNELED_L4_DST_PORT */ + case ((VENDOR_NTOP << 16) | 117): /* UNTUNNELED_L4_DST_PORT */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_untunneled_l4_dst_port, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case (NTOP_BASE + 120): /* DUMP_PATH */ + case ((VENDOR_NTOP << 16) | 120): /* DUMP_PATH */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_dump_path, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + + case (NTOP_BASE + 130): /* SIP_CALL_ID */ + case ((VENDOR_NTOP << 16) | 130): /* SIP_CALL_ID */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_sip_call_id, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 131): /* SIP_CALLING_PARTY */ + case ((VENDOR_NTOP << 16) | 131): /* SIP_CALLING_PARTY */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_sip_calling_party, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 132): /* SIP_CALLED_PARTY */ + case ((VENDOR_NTOP << 16) | 132): /* SIP_CALLED_PARTY */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_sip_called_party, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 133): /* SIP_RTP_CODECS */ + case ((VENDOR_NTOP << 16) | 133): /* SIP_RTP_CODECS */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_sip_rtp_codecs, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 134): /* SIP_INVITE_TIME */ + case ((VENDOR_NTOP << 16) | 134): /* SIP_INVITE_TIME */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_invite_time, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 135): /* SIP_TRYING_TIME */ + case ((VENDOR_NTOP << 16) | 135): /* SIP_TRYING_TIME */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_trying_time, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 136): /* SIP_RINGING_TIME */ + case ((VENDOR_NTOP << 16) | 136): /* SIP_RINGING_TIME */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_ringing_time, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 137): /* SIP_OK_TIME */ + case ((VENDOR_NTOP << 16) | 137): /* SIP_OK_TIME */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_ok_time, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 138): /* SIP_BYE_TIME */ + case ((VENDOR_NTOP << 16) | 138): /* SIP_BYE_TIME */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_bye_time, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 139): /* SIP_RTP_SRC_IP */ + case ((VENDOR_NTOP << 16) | 139): /* SIP_RTP_SRC_IP */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_rtp_src_ip, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 140): /* SIP_RTP_SRC_PORT */ + case ((VENDOR_NTOP << 16) | 140): /* SIP_RTP_SRC_PORT */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_rtp_src_port, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 141): /* SIP_RTP_DST_IP */ + case ((VENDOR_NTOP << 16) | 141): /* SIP_RTP_DST_IP */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_rtp_dst_ip, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 142): /* SIP_RTP_DST_PORT */ + case ((VENDOR_NTOP << 16) | 142): /* SIP_RTP_DST_PORT */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_sip_rtp_dst_port, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 150): /* RTP_FIRST_SSRC */ + case ((VENDOR_NTOP << 16) | 150): /* RTP_FIRST_SSRC */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_first_ssrc, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 151): /* RTP_FIRST_TS */ + case ((VENDOR_NTOP << 16) | 151): /* RTP_FIRST_TS */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_first_ts, + tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 152): /* RTP_LAST_SSRC */ + case ((VENDOR_NTOP << 16) | 152): /* RTP_LAST_SSRC */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_last_ssrc, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 153): /* RTP_LAST_TS */ + case ((VENDOR_NTOP << 16) | 153): /* RTP_LAST_TS */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_last_ts, + tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 154): /* RTP_IN_JITTER */ + case ((VENDOR_NTOP << 16) | 154): /* RTP_IN_JITTER */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_in_jitter, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 155): /* RTP_OUT_JITTER */ + case ((VENDOR_NTOP << 16) | 155): /* RTP_OUT_JITTER */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_out_jitter, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 156): /* RTP_IN_PKT_LOST */ + case ((VENDOR_NTOP << 16) | 156): /* RTP_IN_PKT_LOST */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_in_pkt_lost, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 157): /* RTP_OUT_PKT_LOST */ + case ((VENDOR_NTOP << 16) | 157): /* RTP_OUT_PKT_LOST */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_out_pkt_lost, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 158): /* RTP_OUT_PAYLOAD_TYPE */ + case ((VENDOR_NTOP << 16) | 158): /* RTP_OUT_PAYLOAD_TYPE */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_out_payload_type, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 159): /* RTP_IN_MAX_DELTA */ + case ((VENDOR_NTOP << 16) | 159): /* RTP_IN_MAX_DELTA */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_in_max_delta, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 160): /* RTP_OUT_MAX_DELTA */ + case ((VENDOR_NTOP << 16) | 160): /* RTP_OUT_MAX_DELTA */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_rtp_out_max_delta, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 168): /* PROC_ID */ + case ((VENDOR_NTOP << 16) | 168): /* PROC_ID */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_proc_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case (NTOP_BASE + 169): /* PROC_NAME */ + case ((VENDOR_NTOP << 16) | 169): /* PROC_NAME */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_proc_name, + tvb, offset, length, ENC_ASCII|ENC_NA); + break; + case (NTOP_BASE + 180): /* HTTP_URL */ + case ((VENDOR_NTOP << 16) | 180): /* HTTP_URL */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_http_url, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 181): /* HTTP_RET_CODE */ + case ((VENDOR_NTOP << 16) | 181): /* HTTP_RET_CODE */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_http_ret_code, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + + case (NTOP_BASE + 182): /* HTTP_REFERER */ + case ((VENDOR_NTOP << 16) | 182): /* HTTP_REFERER */ + break; + case (NTOP_BASE + 183): /* HTTP_UA */ + case ((VENDOR_NTOP << 16) | 183): /* HTTP_UA */ + break; + case (NTOP_BASE + 184): /* HTTP_MIME */ + case ((VENDOR_NTOP << 16) | 184): /* HTTP_MIME */ + break; + + case (NTOP_BASE + 185): /* SMTP_MAIL_FROM */ + case ((VENDOR_NTOP << 16) | 185): /* SMTP_MAIL_FROM */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_smtp_mail_from, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 186): /* SMTP_RCPT_TO */ + case ((VENDOR_NTOP << 16) | 186): /* SMTP_RCPT_TO */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_smtp_rcpt_to, + tvb, offset, length, gen_str); + break; + + case (NTOP_BASE + 190): /* FLOW_ID */ + case ((VENDOR_NTOP << 16) | 190): /* FLOW_ID */ + ti = proto_tree_add_item(pdutree, hf_cflow_flow_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + + case (NTOP_BASE + 195): /* MYSQL_SERVER_VERSION */ + case ((VENDOR_NTOP << 16) | 195): /* MYSQL_SERVER_VERSION */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_mysql_server_version, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 196): /* MYSQL_USERNAME */ + case ((VENDOR_NTOP << 16) | 196): /* MYSQL_USERNAME */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_mysql_username, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 197): /* MYSQL_DB */ + case ((VENDOR_NTOP << 16) | 197): /* MYSQL_DB */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_mysql_db, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 198): /* MYSQL_QUERY */ + case ((VENDOR_NTOP << 16) | 198): /* MYSQL_QUERY */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_ntop_mysql_query, + tvb, offset, length, gen_str); + break; + case (NTOP_BASE + 199): /* MYSQL_RESPONSE */ + case ((VENDOR_NTOP << 16) | 199): /* MYSQL_RESPONSE */ + ti = proto_tree_add_item(pdutree, hf_pie_ntop_mysql_response, + tvb, offset, length, ENC_BIG_ENDIAN); + + break; + + /* END NTOP */ + + /* START Plixer International */ + case ((VENDOR_PLIXER << 16) | 100): /* client_ip_v4 */ + ti = proto_tree_add_item(pdutree, hf_pie_plixer_client_ip_v4, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case ((VENDOR_PLIXER << 16) | 101): /* client_hostname */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_plixer_client_hostname, + tvb, offset, length, gen_str); + break; + case ((VENDOR_PLIXER << 16) | 102): /* partner_name */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_plixer_partner_name, + tvb, offset, length, gen_str); + break; + case ((VENDOR_PLIXER << 16) | 103): /* server_hostname */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_plixer_server_hostname, + tvb, offset, length, gen_str); + break; + case ((VENDOR_PLIXER << 16) | 104): /* server_ip_v4 */ + ti = proto_tree_add_item(pdutree, hf_pie_plixer_server_ip_v4, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case ((VENDOR_PLIXER << 16) | 105): /* recipient_address */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_plixer_recipient_address, + tvb, offset, length, gen_str); + break; + case ((VENDOR_PLIXER << 16) | 106): /* event_id */ + ti = proto_tree_add_item(pdutree, hf_pie_plixer_event_id, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case ((VENDOR_PLIXER << 16) | 107): /* msgid */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_plixer_msgid, + tvb, offset, length, gen_str); + break; + case ((VENDOR_PLIXER << 16) | 108): /* priority */ + ti = proto_tree_add_item(pdutree, hf_pie_plixer_priority, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case ((VENDOR_PLIXER << 16) | 109): /* recipient_report_status */ + ti = proto_tree_add_item(pdutree, hf_pie_plixer_recipient_report_status, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case ((VENDOR_PLIXER << 16) | 110): /* number_recipients */ + ti = proto_tree_add_item(pdutree, hf_pie_plixer_number_recipients, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case ((VENDOR_PLIXER << 16) | 111): /* origination_time */ + ti = proto_tree_add_item(pdutree, hf_pie_plixer_origination_time, + tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); + break; + case ((VENDOR_PLIXER << 16) | 112): /* encryption */ + ti = proto_tree_add_item(pdutree, hf_pie_plixer_encryption, + tvb, offset, length, ENC_BIG_ENDIAN); + break; + case ((VENDOR_PLIXER << 16) | 113): /* service_version */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_plixer_service_version, + tvb, offset, length, gen_str); + break; + case ((VENDOR_PLIXER << 16) | 114): /* linked_msgid */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_plixer_linked_msgid, + tvb, offset, length, gen_str); + break; + case ((VENDOR_PLIXER << 16) | 115): /* message_subject */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_plixer_message_subject, + tvb, offset, length, gen_str); + break; + case ((VENDOR_PLIXER << 16) | 116): /* sender_address */ + gen_str = tvb_format_text(tvb, offset, length); + ti = proto_tree_add_string(pdutree, hf_pie_plixer_sender_address, + tvb, offset, length, gen_str); + break; + case ((VENDOR_PLIXER << 16) | 117): /* date_time */ + ti = proto_tree_add_item(pdutree, hf_pie_plixer_date_time, + tvb, offset, length, ENC_TIME_TIMESPEC|ENC_BIG_ENDIAN); + break; + /* END Plixer International */ + + default: /* Unknown Field ID */ + if ((hdrinfo_p->vspec == 9) || (pen == REVPEN)) { + ti = proto_tree_add_bytes_format_value(pdutree, hf_cflow_unknown_field_type, + tvb, offset, length, NULL, + "Type %u: Value (hex bytes): %s", + masked_type, + tvb_bytes_to_str_punct(tvb, offset, length, ' ')); + } else { /* v10 PEN */ + ti = proto_tree_add_bytes_format_value(pdutree, hf_ipfix_enterprise_private_entry, + tvb, offset, length, NULL, + "(%s) Type %u: Value (hex bytes): %s", + pen_str ? pen_str : "(null)", + masked_type, + tvb_bytes_to_str_punct(tvb, offset, length, ' ')); + } + break; + + } /* switch (pen_type) */ + + if (ti && (vstr_len != 0)) { + /* XXX: ugh: not very pretty: how to show/highlight actual length bytes ?? */ + /* YYY: added the length in a tree. Not sure if this is best. */ + proto_item_append_text(ti, " (Variable Length)"); + PROTO_ITEM_SET_GENERATED(ti); + string_tree = proto_item_add_subtree(ti, ett_str_len); + proto_tree_add_uint(string_tree, hf_string_len_short, tvb, + gen_str_offset-vstr_len, 1, string_len_short); + if (vstr_len == 3) { + proto_tree_add_uint(string_tree, hf_string_len_long, tvb, + gen_str_offset-2, 2, string_len_long); + } + + + + } + + if (ti && (pen == REVPEN)) { + /* XXX: why showing type ? type not shown if not reverse */ + proto_item_append_text(ti, " (Reverse Type %u %s)", + masked_type, + val_to_str_ext_const(masked_type, &v9_v10_template_types_ext,"Unknown")); + } + + offset += length; + } /* for (i=0; i < count; i++) */ + + /* If only "start" or "end" time, show it here */ + /* XXX: length is actually 8 if millisec, microsec, nanosec time */ + for (i = 0; i < 2; i++) { + if (!(offset_s[i] && offset_e[i])) { + if (offset_s[i]) { + if (msec_start[i]) { + proto_tree_add_time(pdutree, hf_cflow_timestart, tvb, + offset_s[i], 4, &ts_start[i]); + } else { + proto_tree_add_time(pdutree, hf_cflow_abstimestart, tvb, + offset_s[i], 4, &ts_start[i]); + } + } + if (offset_e[i]) { + if (msec_end[i]) { + proto_tree_add_time(pdutree, hf_cflow_timeend, tvb, + offset_e[i], 4, &ts_end[i]); + } else { + proto_tree_add_time(pdutree, hf_cflow_abstimeend, tvb, + offset_s[i], 4, &ts_start[i]); + } + } + } + } + + /* XXX - These IDs are currently hard-coded in procflow.py. */ + if (got_flags == GOT_TCP_UDP && (tmplt_p->tmplt_id == 256 || tmplt_p->tmplt_id == 258)) { + add_tcp_process_info(pinfo->fd->num, &local_addr, &remote_addr, local_port, remote_port, uid, pid, uname_str, cmd_str); + } + if (got_flags == GOT_TCP_UDP && (tmplt_p->tmplt_id == 257 || tmplt_p->tmplt_id == 259)) { + add_udp_process_info(pinfo->fd->num, &local_addr, &remote_addr, local_port, remote_port, uid, pid, uname_str, cmd_str); + } + + return (guint) (offset - orig_offset); } /* --- Dissect Template ---*/ /* Template Fields Dissection */ static const int *v9_template_type_hf_list[TF_NUM] = { - &hf_cflow_template_scope_field_type, /* scope */ - &hf_cflow_template_field_type}; /* entry */ + &hf_cflow_template_scope_field_type, /* scope */ + &hf_cflow_template_field_type}; /* entry */ static const int *v10_template_type_hf_list[TF_NUM_EXT] = { - &hf_cflow_template_ipfix_field_type, /* scope */ - &hf_cflow_template_ipfix_field_type, - &hf_cflow_template_plixer_field_type, - &hf_cflow_template_ntop_field_type, - NULL}; + &hf_cflow_template_ipfix_field_type, /* scope */ + &hf_cflow_template_ipfix_field_type, + &hf_cflow_template_plixer_field_type, + &hf_cflow_template_ntop_field_type, + NULL}; static value_string_ext *v9_template_type_vse_list[TF_NUM] = { - &v9_scope_field_types_ext, /* scope */ - &v9_v10_template_types_ext }; /* entry */ + &v9_scope_field_types_ext, /* scope */ + &v9_v10_template_types_ext }; /* entry */ static value_string_ext *v10_template_type_vse_list[TF_NUM_EXT] = { - &v9_v10_template_types_ext, /* scope */ - &v9_v10_template_types_ext, /* entry */ - &v10_template_types_plixer_ext, - &v10_template_types_ntop_ext, - NULL}; + &v9_v10_template_types_ext, /* scope */ + &v9_v10_template_types_ext, /* entry */ + &v10_template_types_plixer_ext, + &v10_template_types_ntop_ext, + NULL}; static int -dissect_v9_v10_template_fields(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tplt_tree, int offset, - hdrinfo_t *hdrinfo, - struct v9_v10_template *tplt, - v9_v10_template_fields_type_t fields_type) +dissect_v9_v10_template_fields(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tmplt_tree, int offset, + hdrinfo_t *hdrinfo_p, + v9_v10_tmplt_t *tmplt_p, + v9_v10_tmplt_fields_type_t fields_type) { - int ver; - int count; - int i; - - DISSECTOR_ASSERT((fields_type==TF_SCOPES) || (fields_type==TF_ENTRIES)); - - ver = hdrinfo->vspec; - DISSECTOR_ASSERT((ver==9) || (ver==10)); - - count = tplt->field_count[fields_type]; - for(i=0; i<count; i++) { - guint16 type; - guint16 length; - guint32 pen; - const gchar *pen_str; - proto_tree *field_tree; - proto_item *field_item; - proto_item *ti; - - pen = 0; - pen_str = NULL; - type = tvb_get_ntohs(tvb, offset); - length = tvb_get_ntohs(tvb,offset+2); /* XXX: 0 length should not be allowed ? exception: "ScopeSystem" */ - if ((ver == 10) && (type & 0x8000)) { /* IPFIX only */ - pen = tvb_get_ntohl(tvb,offset+4); - pen_str = val_to_str_ext_const(pen, &sminmpec_values_ext, "(Unknown)"); - } - - if (tplt->fields[fields_type] != NULL) { - DISSECTOR_ASSERT (i < count); - tplt->fields[fields_type][i].type = type; - tplt->fields[fields_type][i].length = length; - tplt->fields[fields_type][i].pen = pen; - tplt->fields[fields_type][i].pen_str = pen_str; - if (length != VARIABLE_LENGTH) { /* Don't include "variable length" in the total */ - tplt->length += length; - } - } - - field_item = proto_tree_add_text(tplt_tree, tvb, offset, 4+((pen_str!=NULL)?4:0), "Field (%u/%u)", i+1, count); - field_tree = proto_item_add_subtree(field_item, ett_field); - if (fields_type == TF_SCOPES) { - proto_item_append_text(field_item, " [Scope]"); - } - - if (ver == 9) { /* v9 */ - proto_tree_add_item(field_tree, *v9_template_type_hf_list[fields_type], - tvb, offset, 2, ENC_BIG_ENDIAN); - proto_item_append_text(field_item, ": %s", - val_to_str_ext(type, v9_template_type_vse_list[fields_type], "Unknown(%d)")); - } else { /* v10 */ - proto_tree_add_item(field_tree, hf_cflow_template_ipfix_pen_provided, - tvb, offset, 2, ENC_BIG_ENDIAN); - if ( !(type & 0x8000) || (pen == REVPEN)) { - proto_item *rp_ti; - rp_ti = proto_tree_add_item(field_tree, *v10_template_type_hf_list[fields_type], - tvb, offset, 2, ENC_BIG_ENDIAN); - proto_item_append_text(field_item, ": %s", - val_to_str_ext(type&0x7fff, v10_template_type_vse_list[fields_type], "Unknown(%d)")); - if (pen == REVPEN) { - proto_item_append_text(rp_ti, " [Reverse]"); - proto_item_append_text(field_item, " [Reverse]"); - } - } else { - int fields_type_pen = pen_to_type_hf_list(pen); - if (fields_type_pen != TF_NO_VENDOR_INFO) { - proto_tree_add_item(field_tree, *v10_template_type_hf_list[fields_type_pen], - tvb, offset, 2, ENC_BIG_ENDIAN); - proto_item_append_text(field_item, ": %s", - val_to_str_ext(type&0x7fff, v10_template_type_vse_list[fields_type_pen], "Unknown(%d)")); - } else { /* Private Enterprise */ - proto_item *pen_ti; - pen_ti = proto_tree_add_item(field_tree, hf_cflow_template_ipfix_field_type_enterprise, - tvb, offset, 2, ENC_BIG_ENDIAN); - proto_item_append_text(pen_ti, " [pen: %s]", pen_str); - proto_item_append_text(field_item, ": %3u [pen: %s]", type&0x7fff, pen_str); - } - } - } - - offset += 2; - - ti = proto_tree_add_item(field_tree, hf_cflow_template_field_length, tvb, - offset, 2, ENC_BIG_ENDIAN); - if (length == VARIABLE_LENGTH) { - proto_item_append_text(ti, " [i.e.: \"Variable Length\"]"); - } - offset += 2; - - /* Private Enterprise Number (IPFIX only) */ - if ((ver == 10) && (type & 0x8000)) { - proto_tree_add_uint_format_value(field_tree, hf_cflow_template_ipfix_field_pen, tvb, offset, 4, - pen, "%s (%u)", pen_str, pen); - offset += 4; - } - } - return offset; + int ver; + int count; + int i; + + DISSECTOR_ASSERT((fields_type==TF_SCOPES) || (fields_type==TF_ENTRIES)); + + ver = hdrinfo_p->vspec; + DISSECTOR_ASSERT((ver==9) || (ver==10)); + + count = tmplt_p->field_count[fields_type]; + for(i=0; i<count; i++) { + guint16 type; + guint16 length; + guint32 pen; + const gchar *pen_str; + proto_tree *field_tree; + proto_item *field_item; + proto_item *ti; + + pen = 0; + pen_str = NULL; + type = tvb_get_ntohs(tvb, offset); + length = tvb_get_ntohs(tvb,offset+2); /* XXX: 0 length should not be allowed ? exception: "ScopeSystem" */ + if ((ver == 10) && (type & 0x8000)) { /* IPFIX only */ + pen = tvb_get_ntohl(tvb,offset+4); + pen_str = val_to_str_ext_const(pen, &sminmpec_values_ext, "(Unknown)"); + } + + if (tmplt_p->fields_p[fields_type] != NULL) { + DISSECTOR_ASSERT (i < count); + tmplt_p->fields_p[fields_type][i].type = type; + tmplt_p->fields_p[fields_type][i].length = length; + tmplt_p->fields_p[fields_type][i].pen = pen; + tmplt_p->fields_p[fields_type][i].pen_str = pen_str; + if (length != VARIABLE_LENGTH) { /* Don't include "variable length" in the total */ + tmplt_p->length += length; + } + } + + field_item = proto_tree_add_text(tmplt_tree, tvb, offset, 4+((pen_str!=NULL)?4:0), "Field (%u/%u)", i+1, count); + field_tree = proto_item_add_subtree(field_item, ett_field); + if (fields_type == TF_SCOPES) { + proto_item_append_text(field_item, " [Scope]"); + } + + if (ver == 9) { /* v9 */ + proto_tree_add_item(field_tree, *v9_template_type_hf_list[fields_type], + tvb, offset, 2, ENC_BIG_ENDIAN); + proto_item_append_text(field_item, ": %s", + val_to_str_ext(type, v9_template_type_vse_list[fields_type], "Unknown(%d)")); + } else { /* v10 */ + proto_tree_add_item(field_tree, hf_cflow_template_ipfix_pen_provided, + tvb, offset, 2, ENC_BIG_ENDIAN); + if ( !(type & 0x8000) || (pen == REVPEN)) { + proto_item *rp_ti; + rp_ti = proto_tree_add_item(field_tree, *v10_template_type_hf_list[fields_type], + tvb, offset, 2, ENC_BIG_ENDIAN); + proto_item_append_text(field_item, ": %s", + val_to_str_ext(type&0x7fff, v10_template_type_vse_list[fields_type], "Unknown(%d)")); + if (pen == REVPEN) { + proto_item_append_text(rp_ti, " [Reverse]"); + proto_item_append_text(field_item, " [Reverse]"); + } + } else { + int fields_type_pen = pen_to_type_hf_list(pen); + if (fields_type_pen != TF_NO_VENDOR_INFO) { + proto_tree_add_item(field_tree, *v10_template_type_hf_list[fields_type_pen], + tvb, offset, 2, ENC_BIG_ENDIAN); + proto_item_append_text(field_item, ": %s", + val_to_str_ext(type&0x7fff, v10_template_type_vse_list[fields_type_pen], "Unknown(%d)")); + } else { /* Private Enterprise */ + proto_item *pen_ti; + pen_ti = proto_tree_add_item(field_tree, hf_cflow_template_ipfix_field_type_enterprise, + tvb, offset, 2, ENC_BIG_ENDIAN); + proto_item_append_text(pen_ti, " [pen: %s]", pen_str); + proto_item_append_text(field_item, ": %3u [pen: %s]", type&0x7fff, pen_str); + } + } + } + + offset += 2; + + ti = proto_tree_add_item(field_tree, hf_cflow_template_field_length, tvb, + offset, 2, ENC_BIG_ENDIAN); + if (length == VARIABLE_LENGTH) { + proto_item_append_text(ti, " [i.e.: \"Variable Length\"]"); + } + offset += 2; + + /* Private Enterprise Number (IPFIX only) */ + if ((ver == 10) && (type & 0x8000)) { + proto_tree_add_uint_format_value(field_tree, hf_cflow_template_ipfix_field_pen, tvb, offset, 4, + pen, "%s (%u)", pen_str, pen); + offset += 4; + } + } + return offset; } /* Options Template Dissection */ static int dissect_v9_v10_options_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, int offset, int length, - hdrinfo_t *hdrinfo, guint16 flowset_id) + hdrinfo_t *hdrinfo_p, guint16 flowset_id) { - int remaining; - - remaining = length; - while (remaining > 3) { /* allow for padding */ - struct v9_v10_template *tmplt_cache_p; - struct v9_v10_template tplt; - proto_tree *tplt_tree; - proto_item *tplt_item; - proto_item *ti; - guint16 id; - guint16 option_scope_field_count; - guint16 option_field_count; - int orig_offset; - - orig_offset = offset; - - id = tvb_get_ntohs(tvb, offset); - - tplt_item = proto_tree_add_text(pdutree, tvb, offset, -1, "Options Template (Id = %u)", id); - tplt_tree = proto_item_add_subtree(tplt_item, ett_template); - - proto_tree_add_item(tplt_tree, hf_cflow_template_id, tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - if (flowset_id == FLOWSET_ID_V9_OPTIONS_TEMPLATE) { /* V9 */ - /* Note: v9: field_count = fields_byte_length/4 since each entry is 4 bytes */ - /* XXX: validate byte_length is a multiple of 4 ? */ - option_scope_field_count = tvb_get_ntohs(tvb, offset)/4; - proto_tree_add_item(tplt_tree, - hf_cflow_option_scope_length, - tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - option_field_count = tvb_get_ntohs(tvb, offset)/4; - ti = proto_tree_add_item(tplt_tree, - hf_cflow_option_length, - tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - } else { /* IPFIX (V10) */ - guint16 option_total_field_count; - - option_total_field_count = tvb_get_ntohs(tvb, offset); - proto_tree_add_item(tplt_tree, - hf_cflow_template_ipfix_total_field_count, - tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - option_scope_field_count = tvb_get_ntohs(tvb, offset); - ti = proto_tree_add_item(tplt_tree, - hf_cflow_template_ipfix_scope_field_count, - tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - option_field_count = option_total_field_count - option_scope_field_count; - - if (option_scope_field_count == 0) { - expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_WARN, - "No scope fields"); - return 0; - } - if (option_scope_field_count > option_total_field_count) { - expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_WARN, - "More scope fields (%u) than fields (%u)", - option_scope_field_count, option_total_field_count); - return 0; - } - } - - proto_item_append_text(tplt_item, " (Scope Count = %u; Data Count = %u)", option_scope_field_count, option_field_count); - proto_item_set_len(tplt_item, 6 +4*(option_scope_field_count+option_field_count)); - - if (v9template_max_fields && - (option_field_count > v9template_max_fields)) { - expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_NOTE, - "More options (%u) than we can handle. Maximum value can be adjusted in the protocol preferences.", - option_field_count); - } - - if (v9template_max_fields && - (option_scope_field_count > v9template_max_fields)) { - expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_NOTE, - "More scopes (%u) than we can handle [template won't be used]. Maximum value can be adjusted in the protocol preferences.", - option_scope_field_count); - } - - /* Cache template */ - memset(&tplt, 0, sizeof(tplt)); - - tplt.id = id; - SE_COPY_ADDRESS(&tplt.source_addr, &hdrinfo->net_src); - tplt.source_id = hdrinfo->src_id; - - tplt.field_count[TF_SCOPES] = option_scope_field_count; - tplt.field_count[TF_ENTRIES] = option_field_count; - tplt.template_exists = TRUE; - - /* If an entry for this hash already exists (whether or not actually for for this id, ...) */ - /* then after the 'do {} while' tplt.fields[TF_SCOPES] and tplt.fields[TF_ENTRIES] will */ - /* be NULL (no memory will have been allocated) and thus this template will not be cached */ - /* after dissection. */ - /* ToDo: expert warning if replacement/collision and new template ignored. */ - /* XXX: Is an Options template with only scope fields allowed for V9 ?? */ - - tmplt_cache_p = v9_v10_template_cache_addr(tplt.id, &tplt.source_addr, tplt.source_id); - if (!pinfo->fd->flags.visited) { /* cache template info only during first pass */ - do { - if ((option_scope_field_count == 0) || - (v9template_max_fields && - ((option_scope_field_count > v9template_max_fields) - || (option_field_count > v9template_max_fields)))) { - break; /* Don't allow cache of this template */ - } - if (tmplt_cache_p->template_exists) { - /* Entry for this hash already exists; Can be dup or collision. */ - /* ToDo: use GHashTable so no collisions. */ - /* ToDo: Test for changed template ? */ - break; /* Don't allow cache of this template */ - } - tplt.fields[TF_SCOPES] = se_alloc0(option_scope_field_count *sizeof(struct v9_v10_template_entry)); - tplt.fields[TF_ENTRIES] = se_alloc0(option_field_count *sizeof(struct v9_v10_template_entry)); - break; - } while (FALSE); - } - - offset = dissect_v9_v10_template_fields(tvb, pinfo, tplt_tree, offset, - hdrinfo, &tplt, TF_SCOPES); - - offset = dissect_v9_v10_template_fields(tvb, pinfo, tplt_tree, offset, - hdrinfo, &tplt, TF_ENTRIES); - - if (tplt.fields[TF_SCOPES] || tplt.fields[TF_ENTRIES]) { - memcpy(tmplt_cache_p, &tplt, sizeof(tplt)); - } - - remaining -= offset - orig_offset; - } - if (remaining > 0) - flow_process_textfield(pdutree, tvb, offset, remaining, "[Padding]"); - - return length; + int remaining; + + remaining = length; + while (remaining > 3) { /* allow for padding */ + v9_v10_tmplt_t *tmplt_p; + v9_v10_tmplt_t tmplt; + proto_tree *tmplt_tree; + proto_item *tmplt_item; + proto_item *ti; + guint16 id; + guint16 option_scope_field_count; + guint16 option_field_count; + int orig_offset; + + orig_offset = offset; + + id = tvb_get_ntohs(tvb, offset); + + tmplt_item = proto_tree_add_text(pdutree, tvb, offset, -1, "Options Template (Id = %u)", id); + tmplt_tree = proto_item_add_subtree(tmplt_item, ett_template); + + proto_tree_add_item(tmplt_tree, hf_cflow_template_id, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + if (flowset_id == FLOWSET_ID_V9_OPTIONS_TEMPLATE) { /* V9 */ + /* Note: v9: field_count = fields_byte_length/4 since each entry is 4 bytes */ + /* XXX: validate byte_length is a multiple of 4 ? */ + option_scope_field_count = tvb_get_ntohs(tvb, offset)/4; + proto_tree_add_item(tmplt_tree, + hf_cflow_option_scope_length, + tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + option_field_count = tvb_get_ntohs(tvb, offset)/4; + ti = proto_tree_add_item(tmplt_tree, + hf_cflow_option_length, + tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + } else { /* IPFIX (V10) */ + guint16 option_total_field_count; + + option_total_field_count = tvb_get_ntohs(tvb, offset); + proto_tree_add_item(tmplt_tree, + hf_cflow_template_ipfix_total_field_count, + tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + option_scope_field_count = tvb_get_ntohs(tvb, offset); + ti = proto_tree_add_item(tmplt_tree, + hf_cflow_template_ipfix_scope_field_count, + tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + option_field_count = option_total_field_count - option_scope_field_count; + + if (option_scope_field_count == 0) { + expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_WARN, + "No scope fields"); + return 0; + } + if (option_scope_field_count > option_total_field_count) { + expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_WARN, + "More scope fields (%u) than fields (%u)", + option_scope_field_count, option_total_field_count); + return 0; + } + } + + proto_item_append_text(tmplt_item, + " (Scope Count = %u; Data Count = %u)", + option_scope_field_count, option_field_count); + proto_item_set_len(tmplt_item, 6 +4*(option_scope_field_count+option_field_count)); + + if (v9_tmplt_max_fields && + (option_field_count > v9_tmplt_max_fields)) { + expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, + "More options (%u) than we can handle." + " Maximum value can be adjusted in the protocol preferences.", + option_field_count); + } + + if (v9_tmplt_max_fields && + (option_scope_field_count > v9_tmplt_max_fields)) { + expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, + "More scopes (%u) than we can handle [template won't be used]." + " Maximum value can be adjusted in the protocol preferences.", + option_scope_field_count); + } + + memset(&tmplt, 0, sizeof(tmplt)); + + v9_v10_tmplt_build_key(&tmplt, pinfo, hdrinfo_p->src_id, id); + + tmplt.field_count[TF_SCOPES] = option_scope_field_count; + tmplt.field_count[TF_ENTRIES] = option_field_count; + + /* If an entry for this template already exists in the template table then after the */ + /* 'do {} while' tmplt.fields_p[TF_SCOPES] and tmplt.fields_p[TF_ENTRIES] will be NULL */ + /* (no memory will have been allocated) and thus this template will not be cached after */ + /* dissection. */ + /* ToDo: expert warning if replacement (changed) and new template ignored. */ + /* XXX: Is an Options template with only scope fields allowed for V9 ?? */ + + tmplt_p = g_hash_table_lookup(v9_v10_tmplt_table, &tmplt); + if (!pinfo->fd->flags.visited) { /* cache template info only during first pass */ + do { + if ((option_scope_field_count == 0) || + (v9_tmplt_max_fields && + ((option_scope_field_count > v9_tmplt_max_fields) + || (option_field_count > v9_tmplt_max_fields)))) { + break; /* Don't allow cache of this template */ + } + if (tmplt_p != NULL) { + /* Entry for this template already exists; Can be dup or changed */ + /* ToDo: Test for changed template ? If so: expert ? */ + break; /* Don't allow cacheing of this template */ + } + tmplt.fields_p[TF_SCOPES] = se_alloc0(option_scope_field_count *sizeof(v9_v10_tmplt_entry_t)); + tmplt.fields_p[TF_ENTRIES] = se_alloc0(option_field_count *sizeof(v9_v10_tmplt_entry_t)); + break; + } while (FALSE); + } + + offset = dissect_v9_v10_template_fields(tvb, pinfo, tmplt_tree, offset, + hdrinfo_p, &tmplt, TF_SCOPES); + + offset = dissect_v9_v10_template_fields(tvb, pinfo, tmplt_tree, offset, + hdrinfo_p, &tmplt, TF_ENTRIES); + + if ((tmplt_p == NULL) && (tmplt.fields_p[TF_SCOPES] || tmplt.fields_p[TF_ENTRIES])) { + /* create permanent template copy for storage in template table */ + tmplt_p = se_memdup(&tmplt, sizeof(tmplt)); + SE_COPY_ADDRESS(&tmplt_p->src_addr, &pinfo->net_src); + SE_COPY_ADDRESS(&tmplt_p->dst_addr, &pinfo->net_dst); + g_hash_table_insert(v9_v10_tmplt_table, tmplt_p, tmplt_p); + } + + remaining -= offset - orig_offset; + } + if (remaining > 0) + flow_process_textfield(pdutree, tvb, offset, remaining, "[Padding]"); + + return length; } /* Data Template Dissection */ static int dissect_v9_v10_data_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *pdutree, int offset, int length, - hdrinfo_t *hdrinfo, guint16 flowset_id _U_) + hdrinfo_t *hdrinfo_p, guint16 flowset_id _U_) { - int remaining; - - remaining = length; - while (remaining > 3) { /* allow for padding */ - struct v9_v10_template *tmplt_cache_p; - struct v9_v10_template tplt; - proto_tree *tplt_tree; - proto_item *tplt_item; - proto_item *ti; - guint16 id; - guint16 count; - int orig_offset; - - orig_offset = offset; - id = tvb_get_ntohs(tvb, offset); - count = tvb_get_ntohs(tvb, offset + 2); - - tplt_item = proto_tree_add_text(pdutree, tvb, offset, - 4 + 4 * count /* hdrsiz + count*2*(sizeof guint16)*/, - "Template (Id = %u, Count = %u)", id, count); - tplt_tree = proto_item_add_subtree(tplt_item, ett_template); - - proto_tree_add_item(tplt_tree, hf_cflow_template_id, tvb, - offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - ti = proto_tree_add_item(tplt_tree, hf_cflow_template_field_count, - tvb, offset, 2, ENC_BIG_ENDIAN); - offset += 2; - - if (v9template_max_fields && (count > v9template_max_fields)) { - expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_NOTE, - "More entries (%u) than we can handle [template won't be used]." - " Maximum value can be adjusted in the protocol preferences.", - count); - } - - /* Cache template */ - memset(&tplt, 0, sizeof(tplt)); - - tplt.id = id; - SE_COPY_ADDRESS(&tplt.source_addr, &hdrinfo->net_src); - tplt.source_id = hdrinfo->src_id; - tplt.field_count[TF_ENTRIES] = count; - tplt.template_exists = TRUE; - - /* If an entry for this hash already exists (whether or not actually for for this id, ...) */ - /* then after the 'do {} while' tplt.fields[TF_ENTRIES] will be NULL (no memory will have */ - /* been allocated) and thus this template will not be cached. */ - /* ToDo: expert warning if replacement/collision and new template ignored. */ - - tmplt_cache_p = v9_v10_template_cache_addr(tplt.id, &tplt.source_addr, tplt.source_id); - if (!pinfo->fd->flags.visited) { /* cache template info only during first pass */ - do { - if ((count == 0) || - (v9template_max_fields && (count > v9template_max_fields))) { - break; /* Don't allow cache of this template */ - } - if (tmplt_cache_p->template_exists) { - /* Entry for this hash already exists; Can be dup or collision. */ - /* ToDo: use GHashTable so no collisions. */ - /* ToDo: Test for changed template ? */ - break; /* Don't allow cache of this template */ - } - tplt.fields[TF_ENTRIES] = se_alloc0(count * sizeof(struct v9_v10_template_entry)); - break; - } while (FALSE); - } - offset = dissect_v9_v10_template_fields(tvb, pinfo, tplt_tree, offset, - hdrinfo, &tplt, TF_ENTRIES); - - if (tplt.fields[TF_ENTRIES]) { - memcpy(tmplt_cache_p, &tplt, sizeof(tplt)); - } - remaining -= offset - orig_offset; - } - if (remaining > 0) - flow_process_textfield(pdutree, tvb, offset, remaining, "[Padding]"); - - return length; + int remaining; + + remaining = length; + while (remaining > 3) { /* allow for padding */ + v9_v10_tmplt_t *tmplt_p; + v9_v10_tmplt_t tmplt; + proto_tree *tmplt_tree; + proto_item *tmplt_item; + proto_item *ti; + guint16 id; + guint16 count; + int orig_offset; + + orig_offset = offset; + id = tvb_get_ntohs(tvb, offset); + count = tvb_get_ntohs(tvb, offset + 2); + + tmplt_item = proto_tree_add_text(pdutree, tvb, offset, + 4 + 4 * count /* hdrsiz + count*2*(sizeof guint16)*/, + "Template (Id = %u, Count = %u)", id, count); + tmplt_tree = proto_item_add_subtree(tmplt_item, ett_template); + + proto_tree_add_item(tmplt_tree, hf_cflow_template_id, tvb, + offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + ti = proto_tree_add_item(tmplt_tree, hf_cflow_template_field_count, + tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + if (v9_tmplt_max_fields && (count > v9_tmplt_max_fields)) { + expert_add_info_format(pinfo, ti, PI_UNDECODED, PI_WARN, + "More entries (%u) than we can handle [template won't be used]." + " Maximum value can be adjusted in the protocol preferences.", + count); + } + + memset(&tmplt, 0, sizeof(tmplt)); + + v9_v10_tmplt_build_key(&tmplt, pinfo, hdrinfo_p->src_id, id); /* lookup only ! */ + + tmplt.field_count[TF_ENTRIES] = count; + + /* If an entry for this hash already exists in the template table then after the */ + /* 'do {} while' tmplt.fields_p[TF_ENTRIES] will be NULL (no memory will have been */ + /* been allocated) and thus this template will not be cached after dissection. */ + /* ToDo: expert warning if replacement (changed) and new template ignored. */ + + tmplt_p = g_hash_table_lookup(v9_v10_tmplt_table, &tmplt); + if (!pinfo->fd->flags.visited) { /* cache template info only during first pass */ + do { + if ((count == 0) || + (v9_tmplt_max_fields && (count > v9_tmplt_max_fields))) { + break; /* Don't allow cache of this template */ + } + if (tmplt_p != NULL) { + /* Entry for this template already exists; Can be dup or changed */ + /* ToDo: Test for changed template ? If so: expert ? */ + break; /* Don't allow cacheing of this template */ + } + tmplt.fields_p[TF_ENTRIES] = se_alloc0(count * sizeof(v9_v10_tmplt_entry_t)); + break; + } while (FALSE); + } + offset = dissect_v9_v10_template_fields(tvb, pinfo, tmplt_tree, offset, + hdrinfo_p, &tmplt, TF_ENTRIES); + + if ((tmplt_p == NULL) && tmplt.fields_p[TF_ENTRIES]) { + /* create permanent template copy for storage in template table */ + tmplt_p = se_memdup(&tmplt, sizeof(tmplt)); + SE_COPY_ADDRESS(&tmplt_p->src_addr, &pinfo->net_src); + SE_COPY_ADDRESS(&tmplt_p->dst_addr, &pinfo->net_dst); + g_hash_table_insert(v9_v10_tmplt_table, tmplt_p, tmplt_p); + } + remaining -= offset - orig_offset; + } + if (remaining > 0) + flow_process_textfield(pdutree, tvb, offset, remaining, "[Padding]"); + + return length; } - -static int -v9_v10_template_hash(guint16 id, const address *net_src, guint32 src_id) +/* build temporary key */ +/* Note: address at *(pinfo->net_???.data) is *not* copied */ +static v9_v10_tmplt_t *v9_v10_tmplt_build_key(v9_v10_tmplt_t *tmplt_p, packet_info *pinfo, guint32 src_id, guint16 tmplt_id) { - guint32 val; - const guint8 *p; - guint32 temp; - int cnt; - int i; - - p = (guint8 *)(net_src->data); - - val = id << 9; - - switch (net_src->type) { - case AT_IPv4: - cnt = 1; - break; - case AT_IPv6: - cnt = 4; - break; - default: - cnt = 0; - break; - } - - for (i=0; i < cnt; i++) { - memcpy((guint8 *)&temp, p, 4); - val += GUINT32_TO_LE(temp); /* Use *reverse* of each 4 bytes of IP address when */ - /* calculating the hash on both BE and LE machines. */ - /* EG: hash of IP address 1.2.3.4 will be 0x04030201 */ - /* (Note that we'll get the right result on a LE */ - /* machine since the IP address is stored in */ - /* network order and GUINT32_TO_LE is a no-op. On */ - /* a BE machine GUINT32_TO_LE will swap the bytes. */ - p += 4; - } - - val = (val + src_id) % V9_V10_TEMPLATE_CACHE_MAX_ENTRIES; - - return val; + SET_ADDRESS(&tmplt_p->src_addr, pinfo->net_src.type, pinfo->net_src.len, pinfo->net_src.data); /* lookup only! */ + tmplt_p->src_port = pinfo->srcport; + SET_ADDRESS(&tmplt_p->dst_addr, pinfo->net_dst.type, pinfo->net_dst.len, pinfo->net_dst.data); /* lookup only! */ + tmplt_p->dst_port = pinfo->destport; + tmplt_p->src_id = src_id; + tmplt_p->tmplt_id = tmplt_id; + return tmplt_p; } - -static struct v9_v10_template * -v9_v10_template_cache_addr(guint16 id, address *net_src, guint32 src_id) +static gboolean +v9_v10_tmplt_table_equal(gconstpointer k1, gconstpointer k2) { - return &v9_v10_template_cache[v9_v10_template_hash(id, net_src, src_id)]; + const v9_v10_tmplt_t *ta = k1; + const v9_v10_tmplt_t *tb = k2; + + return ( + (CMP_ADDRESS(&ta->src_addr, &tb->src_addr) == 0) && + (ta->src_port == tb->src_port) && + (CMP_ADDRESS(&ta->dst_addr, &tb->dst_addr) == 0) && + (ta->dst_port == tb->dst_port) && + (ta->src_id == tb->src_id) && + (ta->tmplt_id == tb->tmplt_id) + ); } -static struct v9_v10_template * -v9_v10_template_get(guint16 id, address *net_src, guint32 src_id) +static int +v9_v10_tmplt_table_hash(gconstpointer k) { - struct v9_v10_template *tplt; + const v9_v10_tmplt_t *tmplt_p = k; + guint32 val; - tplt = v9_v10_template_cache_addr(id, net_src, src_id); + val = tmplt_p->src_id + (tmplt_p->tmplt_id << 9) + tmplt_p->src_port + tmplt_p->dst_port; - if ((tplt->template_exists != TRUE) || - (tplt->id != id) || - !ADDRESSES_EQUAL(&tplt->source_addr, net_src) || - (tplt->source_id != src_id)) { - tplt = NULL; - } + ADD_ADDRESS_TO_HASH(val, &tmplt_p->src_addr); + ADD_ADDRESS_TO_HASH(val, &tmplt_p->dst_addr); - return (tplt); + return val; } /* @@ -5514,2609 +5452,2589 @@ v9_v10_template_get(guint16 id, address *net_src, guint32 src_id) */ static int -dissect_pdu(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *pdutree, int offset, hdrinfo_t *hdrinfo) +dissect_pdu(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *pdutree, int offset, hdrinfo_t *hdrinfo_p) { - proto_item *hidden_item; - int startoffset = offset; - guint32 srcaddr, dstaddr; - guint8 mask; - nstime_t ts; - guint8 ver; - - memset(&ts, '\0', sizeof(ts)); - - /* - * memcpy so we can use the values later to calculate a prefix - */ - srcaddr = tvb_get_ipv4(tvb, offset); - proto_tree_add_ipv4(pdutree, hf_cflow_srcaddr, tvb, offset, 4, - srcaddr); - offset += 4; - - dstaddr = tvb_get_ipv4(tvb, offset); - proto_tree_add_ipv4(pdutree, hf_cflow_dstaddr, tvb, offset, 4, - dstaddr); - offset += 4; - - proto_tree_add_item(pdutree, hf_cflow_nexthop, tvb, offset, 4, ENC_NA); - offset += 4; - - offset = flow_process_ints(pdutree, tvb, offset); - offset = flow_process_sizecount(pdutree, tvb, offset); - offset = flow_process_timeperiod(pdutree, tvb, offset); - offset = flow_process_ports(pdutree, tvb, offset); - - /* - * and the similarities end here - */ - - ver = hdrinfo->vspec; - - if (ver == 1) { - offset = - flow_process_textfield(pdutree, tvb, offset, 2, "padding"); - - proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset++, 1, - ENC_NA); - - proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset++, 1, - ENC_NA); - - proto_tree_add_item(pdutree, hf_cflow_tcpflags, tvb, offset++, - 1, ENC_NA); - - offset = - flow_process_textfield(pdutree, tvb, offset, 3, "padding"); - - offset = - flow_process_textfield(pdutree, tvb, offset, 4, - "reserved"); - } else { - if (ver == 5) - offset = - flow_process_textfield(pdutree, tvb, offset, 1, - "padding"); - else { - proto_tree_add_item(pdutree, hf_cflow_flags, tvb, - offset++, 1, ENC_NA); - } - - proto_tree_add_item(pdutree, hf_cflow_tcpflags, tvb, offset++, - 1, ENC_NA); - - proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset++, 1, - ENC_NA); - - proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset++, 1, - ENC_NA); - - offset = flow_process_aspair(pdutree, tvb, offset); - - mask = tvb_get_guint8(tvb, offset); - proto_tree_add_text(pdutree, tvb, offset, 1, - "SrcMask: %u (prefix: %s/%u)", - mask, getprefix(&srcaddr, mask), - mask != 0 ? mask : 32); - hidden_item = proto_tree_add_uint(pdutree, hf_cflow_srcmask, tvb, - offset++, 1, mask); - PROTO_ITEM_SET_HIDDEN(hidden_item); - - mask = tvb_get_guint8(tvb, offset); - proto_tree_add_text(pdutree, tvb, offset, 1, - "DstMask: %u (prefix: %s/%u)", - mask, getprefix(&dstaddr, mask), - mask != 0 ? mask : 32); - hidden_item = proto_tree_add_uint(pdutree, hf_cflow_dstmask, tvb, - offset++, 1, mask); - PROTO_ITEM_SET_HIDDEN(hidden_item); - - offset = - flow_process_textfield(pdutree, tvb, offset, 2, "padding"); - - if (ver == 7) { - proto_tree_add_item(pdutree, hf_cflow_routersc, tvb, - offset, 4, ENC_NA); - offset += 4; - } - } - - return (offset - startoffset); + proto_item *hidden_item; + int startoffset = offset; + guint32 srcaddr, dstaddr; + guint8 mask; + nstime_t ts; + guint8 ver; + + memset(&ts, 0, sizeof(ts)); + + /* + * memcpy so we can use the values later to calculate a prefix + */ + srcaddr = tvb_get_ipv4(tvb, offset); + proto_tree_add_ipv4(pdutree, hf_cflow_srcaddr, tvb, offset, 4, srcaddr); + offset += 4; + + dstaddr = tvb_get_ipv4(tvb, offset); + proto_tree_add_ipv4(pdutree, hf_cflow_dstaddr, tvb, offset, 4, dstaddr); + offset += 4; + + proto_tree_add_item(pdutree, hf_cflow_nexthop, tvb, offset, 4, ENC_NA); + offset += 4; + + offset = flow_process_ints(pdutree, tvb, offset); + offset = flow_process_sizecount(pdutree, tvb, offset); + offset = flow_process_timeperiod(pdutree, tvb, offset); + offset = flow_process_ports(pdutree, tvb, offset); + + /* + * and the similarities end here + */ + + ver = hdrinfo_p->vspec; + + if (ver == 1) { + offset = flow_process_textfield(pdutree, tvb, offset, 2, "padding"); + + proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset++, 1, ENC_NA); + + proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset++, 1, ENC_NA); + + proto_tree_add_item(pdutree, hf_cflow_tcpflags, tvb, offset++, 1, ENC_NA); + + offset = flow_process_textfield(pdutree, tvb, offset, 3, "padding"); + + offset = flow_process_textfield(pdutree, tvb, offset, 4, "reserved"); + } else { + if (ver == 5) + offset = flow_process_textfield(pdutree, tvb, offset, 1, "padding"); + else { + proto_tree_add_item(pdutree, hf_cflow_flags, tvb, offset++, 1, ENC_NA); + } + + proto_tree_add_item(pdutree, hf_cflow_tcpflags, tvb, offset++, 1, ENC_NA); + + proto_tree_add_item(pdutree, hf_cflow_prot, tvb, offset++, 1, ENC_NA); + + proto_tree_add_item(pdutree, hf_cflow_tos, tvb, offset++, 1, ENC_NA); + + offset = flow_process_aspair(pdutree, tvb, offset); + + mask = tvb_get_guint8(tvb, offset); + proto_tree_add_text(pdutree, tvb, offset, 1, + "SrcMask: %u (prefix: %s/%u)", + mask, getprefix(&srcaddr, mask), + mask != 0 ? mask : 32); + hidden_item = proto_tree_add_uint(pdutree, hf_cflow_srcmask, tvb, offset++, 1, mask); + PROTO_ITEM_SET_HIDDEN(hidden_item); + + mask = tvb_get_guint8(tvb, offset); + proto_tree_add_text(pdutree, tvb, offset, 1, + "DstMask: %u (prefix: %s/%u)", + mask, getprefix(&dstaddr, mask), + mask != 0 ? mask : 32); + hidden_item = proto_tree_add_uint(pdutree, hf_cflow_dstmask, tvb, offset++, 1, mask); + PROTO_ITEM_SET_HIDDEN(hidden_item); + + offset = flow_process_textfield(pdutree, tvb, offset, 2, "padding"); + + if (ver == 7) { + proto_tree_add_item(pdutree, hf_cflow_routersc, tvb, offset, 4, ENC_NA); + offset += 4; + } + } + + return (offset - startoffset); } static const gchar * getprefix(const guint32 *addr, int prefix) { - guint32 gprefix; + guint32 gprefix; - gprefix = *addr & g_htonl((0xffffffff << (32 - prefix))); + gprefix = *addr & g_htonl((0xffffffff << (32 - prefix))); - return (ip_to_str((const guint8 *)&gprefix)); + return (ip_to_str((const guint8 *)&gprefix)); } -/* Called whenever a pref is changed, a new capture is loaded, & etc */ +/* Called whenever a new capture is loaded, a complete redissection is done, a pref is changed, & etc */ static void -netflow_reinit(void) +netflow_init(void) { - /* Clear out the template cache. */ - memset(v9_v10_template_cache, 0, sizeof v9_v10_template_cache); + /* keys & values are "se allocated"; se memory is freed as part of the init sequence */ + if (v9_v10_tmplt_table != NULL) { + g_hash_table_destroy(v9_v10_tmplt_table); + } + v9_v10_tmplt_table = g_hash_table_new(v9_v10_tmplt_table_hash, v9_v10_tmplt_table_equal); } void proto_register_netflow(void) { - static hf_register_info hf[] = { - /* - * flow header - */ - {&hf_cflow_version, - {"Version", "cflow.version", - FT_UINT16, BASE_DEC, NULL, 0x0, - "NetFlow Version", HFILL} - }, - {&hf_cflow_len, - {"Length", "cflow.len", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Length of PDUs", HFILL} - }, - {&hf_cflow_count, - {"Count", "cflow.count", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Count of PDUs", HFILL} - }, - {&hf_cflow_sysuptime, - {"SysUptime", "cflow.sysuptime", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Time since router booted (in milliseconds)", HFILL} - }, - {&hf_cflow_exporttime, - {"ExportTime", "cflow.exporttime", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Time when the flow has been exported", HFILL} - }, - {&hf_cflow_timestamp, - {"Timestamp", "cflow.timestamp", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - "Current seconds since epoch", HFILL} - }, - {&hf_cflow_unix_secs, - {"CurrentSecs", "cflow.unix_secs", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Current seconds since epoch", HFILL} - }, - {&hf_cflow_unix_nsecs, - {"CurrentNSecs", "cflow.unix_nsecs", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Residual nanoseconds since epoch", HFILL} - }, - {&hf_cflow_samplingmode, - {"SamplingMode", "cflow.samplingmode", - FT_UINT16, BASE_DEC, VALS(v5_sampling_mode), 0xC000, - "Sampling Mode of exporter", HFILL} - }, - {&hf_cflow_samplerate, - {"SampleRate", "cflow.samplerate", - FT_UINT16, BASE_DEC, NULL, 0x3FFF, - "Sample Frequency of exporter", HFILL} - }, - - /* - * end version-agnostic header - * version-specific flow header - */ - {&hf_cflow_sequence, - {"FlowSequence", "cflow.sequence", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Sequence number of flows seen", HFILL} - }, - {&hf_cflow_engine_type, - {"EngineType", "cflow.engine_type", - FT_UINT8, BASE_DEC, VALS(engine_type), 0x0, - "Flow switching engine type", HFILL} - }, - {&hf_cflow_engine_id, - {"EngineId", "cflow.engine_id", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Slot number of switching engine", HFILL} - }, - {&hf_cflow_source_id, - {"SourceId", "cflow.source_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Identifier for export device", HFILL} - }, - {&hf_cflow_aggmethod, - {"AggMethod", "cflow.aggmethod", - FT_UINT8, BASE_DEC|BASE_EXT_STRING, &v8_agg_ext, 0x0, - "CFlow V8 Aggregation Method", HFILL} - }, - {&hf_cflow_aggversion, - {"AggVersion", "cflow.aggversion", - FT_UINT8, BASE_DEC, NULL, 0x0, - "CFlow V8 Aggregation Version", HFILL} - }, - /* - * end version specific header storage - */ - /* - * Version 9 - */ - {&hf_cflow_flowset_id, - {"FlowSet Id", "cflow.flowset_id", - FT_UINT16, BASE_RANGE_STRING | BASE_DEC, RVALS(rs_flowset_ids), 0x0, - NULL, HFILL} - }, - {&hf_cflow_flowset_length, - {"FlowSet Length", "cflow.flowset_length", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_template_id, - {"Template Id", "cflow.template_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_template_field_count, - {"Field Count", "cflow.template_field_count", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Template field count", HFILL} - }, - {&hf_cflow_template_field_type, - {"Type", "cflow.template_field_type", - FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v9_v10_template_types_ext, 0x0, - "Template field type", HFILL} - }, - {&hf_cflow_template_field_length, - {"Length", "cflow.template_field_length", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Template field length", HFILL} - }, - - /* options */ - {&hf_cflow_option_scope_length, - {"Option Scope Length", "cflow.option_scope_length", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_option_length, - {"Option Length", "cflow.option_length", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_template_scope_field_type, - {"Scope Type", "cflow.scope_field_type", - FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v9_scope_field_types_ext, 0x0, - "Scope field type", HFILL} - }, - {&hf_cflow_icmp_type, - {"ICMP Type", "cflow.icmp_type", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_igmp_type, - {"IGMP Type", "cflow.igmp_type", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_sampling_interval, - {"Sampling interval", "cflow.sampling_interval", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_sampling_algorithm, - {"Sampling algorithm", "cflow.sampling_algorithm", - FT_UINT8, BASE_DEC, VALS(v5_sampling_mode), 0x0, - NULL, HFILL} - }, - {&hf_cflow_flow_active_timeout, - {"Flow active timeout", "cflow.flow_active_timeout", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_flow_inactive_timeout, - {"Flow inactive timeout", "cflow.flow_inactive_timeout", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - - /* - * begin pdu content storage - */ - {&hf_cflow_srcaddr, - {"SrcAddr", "cflow.srcaddr", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Flow Source Address (IPv4)", HFILL} - }, - {&hf_cflow_srcaddr_v6, - {"SrcAddr", "cflow.srcaddrv6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Flow Source Address (IPv6)", HFILL} - }, - {&hf_cflow_srcnet, - {"SrcNet", "cflow.srcnet", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Flow Source Network", HFILL} - }, - {&hf_cflow_dstaddr, - {"DstAddr", "cflow.dstaddr", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Flow Destination Address (IPv4)", HFILL} - }, - {&hf_cflow_dstaddr_v6, - {"DstAddr", "cflow.dstaddrv6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Flow Destination Address (IPv6)", HFILL} - }, - {&hf_cflow_dstnet, - {"DstNet", "cflow.dstnet", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Flow Destination Network", HFILL} - }, - {&hf_cflow_nexthop, - {"NextHop", "cflow.nexthop", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Router nexthop (IPv4)", HFILL} - }, - {&hf_cflow_nexthop_v6, - {"NextHop", "cflow.nexthopv6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Router nexthop (IPv6)", HFILL} - }, - {&hf_cflow_bgpnexthop, - {"BGPNextHop", "cflow.bgpnexthop", - FT_IPv4, BASE_NONE, NULL, 0x0, - "BGP Router Nexthop (IPv4)", HFILL} - }, - {&hf_cflow_bgpnexthop_v6, - {"BGPNextHop", "cflow.bgpnexthopv6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "BGP Router Nexthop (IPv6)", HFILL} - }, - {&hf_cflow_inputint, - {"InputInt", "cflow.inputint", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Flow Input Interface", HFILL} - }, - {&hf_cflow_outputint, - {"OutputInt", "cflow.outputint", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Flow Output Interface", HFILL} - }, - {&hf_cflow_flows, - {"Flows", "cflow.flows", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Flows Aggregated in PDU", HFILL} - }, - {&hf_cflow_flows64, - {"Flows", "cflow.flows64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Flows Aggregated in PDU", HFILL} - }, - {&hf_cflow_packets, - {"Packets", "cflow.packets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of packets", HFILL} - }, - {&hf_cflow_packets64, - {"Packets", "cflow.packets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of packets", HFILL} - }, - {&hf_cflow_octets, - {"Octets", "cflow.octets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of bytes", HFILL} - }, - {&hf_cflow_octets64, - {"Octets", "cflow.octets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of bytes", HFILL} - }, - {&hf_cflow_length_min, - {"MinLength", "cflow.length_min", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Packet Length Min", HFILL} - }, - {&hf_cflow_length_max, - {"MaxLength", "cflow.length_max", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Packet Length Max", HFILL} - }, - {&hf_cflow_timedelta, - {"Duration", "cflow.timedelta", - FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, - "Duration of flow sample (end - start)", HFILL} - }, - {&hf_cflow_timestart, - {"StartTime", "cflow.timestart", - FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, - "Uptime at start of flow", HFILL} - }, - {&hf_cflow_timeend, - {"EndTime", "cflow.timeend", - FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, - "Uptime at end of flow", HFILL} - }, - {&hf_cflow_srcport, - {"SrcPort", "cflow.srcport", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Flow Source Port", HFILL} - }, - {&hf_cflow_dstport, - {"DstPort", "cflow.dstport", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Flow Destination Port", HFILL} - }, - {&hf_cflow_prot, - {"Protocol", "cflow.protocol", - FT_UINT8, BASE_DEC, NULL, 0x0, - "IP Protocol", HFILL} - }, - {&hf_cflow_tos, - {"IP ToS", "cflow.tos", - FT_UINT8, BASE_HEX, NULL, 0x0, - "IP Type of Service", HFILL} - }, - {&hf_cflow_flags, - {"Export Flags", "cflow.flags", - FT_UINT8, BASE_HEX, NULL, 0x0, - "CFlow Flags", HFILL} - }, - {&hf_cflow_tcpflags, - {"TCP Flags", "cflow.tcpflags", - FT_UINT8, BASE_HEX, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_srcas, - {"SrcAS", "cflow.srcas", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Source AS", HFILL} - }, - {&hf_cflow_dstas, - {"DstAS", "cflow.dstas", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Destination AS", HFILL} - }, - {&hf_cflow_srcmask, - {"SrcMask", "cflow.srcmask", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Source Prefix Mask", HFILL} - }, - {&hf_cflow_srcmask_v6, - {"SrcMask", "cflow.srcmaskv6", - FT_UINT8, BASE_DEC, NULL, 0x0, - "IPv6 Source Prefix Mask", HFILL} - }, - {&hf_cflow_dstmask, - {"DstMask", "cflow.dstmask", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Destination Prefix Mask", HFILL} - }, - {&hf_cflow_dstmask_v6, - {"DstMask", "cflow.dstmaskv6", - FT_UINT8, BASE_DEC, NULL, 0x0, - "IPv6 Destination Prefix Mask", HFILL} - }, - {&hf_cflow_routersc, - {"Router Shortcut", "cflow.routersc", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Router shortcut by switch", HFILL} - }, - {&hf_cflow_mulpackets, - {"MulticastPackets", "cflow.mulpackets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of multicast packets", HFILL} - }, - {&hf_cflow_muloctets, - {"MulticastOctets", "cflow.muloctets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of multicast octets", HFILL} - }, - {&hf_cflow_octets_exp, - {"OctetsExp", "cflow.octetsexp", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Octets exported", HFILL} - }, - {&hf_cflow_octets_exp64, - {"OctetsExp", "cflow.octetsexp64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Octets exported", HFILL} - }, - {&hf_cflow_packets_exp, - {"PacketsExp", "cflow.packetsexp", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Packets exported", HFILL} - }, - {&hf_cflow_packets_exp64, - {"PacketsExp", "cflow.packetsexp64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Packets exported", HFILL} - }, - {&hf_cflow_flows_exp, - {"FlowsExp", "cflow.flowsexp", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Flows exported", HFILL} - }, - {&hf_cflow_flows_exp64, - {"FlowsExp", "cflow.flowsexp64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Flows exported", HFILL} - }, - {&hf_cflow_srcprefix, - {"SrcPrefix", "cflow.srcprefix", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Flow Source Prefix", HFILL} - }, - {&hf_cflow_dstprefix, - {"DstPrefix", "cflow.dstprefix", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Flow Destination Prefix", HFILL} - }, - {&hf_cflow_mpls_top_label_type, - {"TopLabelType", "cflow.toplabeltype", - FT_UINT8, BASE_DEC, VALS(special_mpls_top_label_type), 0x0, - "Top MPLS label Type", HFILL} - }, - {&hf_cflow_mpls_pe_addr, - {"TopLabelAddr", "cflow.toplabeladdr", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Top MPLS label PE address", HFILL} - }, - {&hf_cflow_sampler_id, - {"SamplerID", "cflow.sampler_id", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Flow Sampler ID", HFILL} - }, - {&hf_cflow_sampler_mode, - {"SamplerMode", "cflow.sampler_mode", - FT_UINT8, BASE_DEC, VALS(v9_sampler_mode), 0x0, - "Flow Sampler Mode", HFILL} - }, - {&hf_cflow_sampler_random_interval, - {"SamplerRandomInterval", "cflow.sampler_random_interval", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Flow Sampler Random Interval", HFILL} - }, - {&hf_cflow_flow_class, - {"FlowClass", "cflow.flow_class", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Flow Class", HFILL} - }, - {&hf_cflow_ttl_minimum, - {"MinTTL", "cflow.ttl_min", - FT_UINT8, BASE_DEC, NULL, 0x0, - "TTL minimum", HFILL} - }, - {&hf_cflow_ttl_maximum, - {"MaxTTL", "cflow.ttl_max", - FT_UINT8, BASE_DEC, NULL, 0x0, - "TTL maximum", HFILL} - }, - {&hf_cflow_ipv4_id, - {"IPv4Ident", "cflow.ipv4_ident", - FT_UINT16, BASE_DEC, NULL, 0x0, - "IPv4 Identifier", HFILL} - }, - {&hf_cflow_ip_version, - {"IPVersion", "cflow.ip_version", - FT_BYTES, BASE_NONE, NULL, 0x0, - "IP Version", HFILL} - }, - {&hf_cflow_direction, - {"Direction", "cflow.direction", - FT_UINT8, BASE_DEC, VALS(v9_direction), 0x0, - NULL, HFILL} - }, - {&hf_cflow_if_name, - {"IfName", "cflow.if_name", - FT_STRINGZ/*FT_BYTES*/, BASE_NONE, NULL, 0x0, - "SNMP Interface Name", HFILL} - }, - {&hf_cflow_if_descr, - {"IfDescr", "cflow.if_descr", - FT_STRINGZ/*FT_BYTES*/, BASE_NONE, NULL, 0x0, - "SNMP Interface Description", HFILL} - }, - {&hf_cflow_sampler_name, - {"SamplerName", "cflow.sampler_name", - FT_STRINGZ/*FT_BYTES*/, BASE_NONE, NULL, 0x0, - "Sampler Name", HFILL} - }, - {&hf_cflow_forwarding_status, - {"ForwdStat", "cflow.forwarding_status", - FT_UINT8, BASE_DEC, VALS(v9_forwarding_status), 0xC0, - "Forwarding Status", HFILL} - }, - {&hf_cflow_forwarding_status_unknown_code, - {"ForwdCode", "cflow.forwarding_status_unknown_code", - FT_UINT8, BASE_DEC, VALS(v9_forwarding_status_unknown_code), 0x3F, - NULL, HFILL} - }, - {&hf_cflow_forwarding_status_forward_code, - {"ForwdCode", "cflow.forwarding_status_foreward_code", - FT_UINT8, BASE_DEC, VALS(v9_forwarding_status_forward_code), 0x3F, - NULL, HFILL} - }, - {&hf_cflow_forwarding_status_drop_code, - {"ForwdCode", "cflow.forwarding_status_drop_code", - FT_UINT8, BASE_DEC, VALS(v9_forwarding_status_drop_code), 0x3F, - NULL, HFILL} - }, - {&hf_cflow_forwarding_status_consume_code, - {"ForwdCode", "cflow.forwarding_status_consume_code", - FT_UINT8, BASE_DEC, VALS(v9_forwarding_status_consume_code), 0x3F, - NULL, HFILL} - }, - {&hf_cflow_nbar_appl_desc, - {"ApplicationDesc", "cflow.appl_desc", - FT_STRINGZ, BASE_NONE, NULL, 0x0, - "Application Desc (NBAR)", HFILL} - }, - {&hf_cflow_nbar_appl_id, - {"ApplicationID", "cflow.appl_id", - FT_UINT32, BASE_CUSTOM, nbar_fmt_id, 0x0, - "Application ID (NBAR)", HFILL} - }, - {&hf_cflow_nbar_appl_name, - {"ApplicationName", "cflow.appl_name", - FT_STRINGZ, BASE_NONE, NULL, 0x0, - "Application Name (NBAR)", HFILL} - }, - {&hf_cflow_peer_srcas, - {"PeerSrcAS", "cflow.peer_srcas", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Peer Source AS", HFILL} - }, - {&hf_cflow_peer_dstas, - {"PeerDstAS", "cflow.peer_dstas", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Peer Destination AS", HFILL} - }, - {&hf_cflow_flow_exporter, - {"FlowExporter", "cflow.flow_exporter", - FT_BYTES/*FT_IPv4*/, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_icmp_ipv4_type, - {"IPv4 ICMP Type", "cflow.icmp_ipv4_type", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_icmp_ipv4_code, - {"IPv4 ICMP Code", "cflow.icmp_ipv4_code", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_icmp_ipv6_type, - {"IPv6 ICMP Type", "cflow.icmp_ipv6_type", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_icmp_ipv6_code, - {"IPv6 ICMP Code", "cflow.icmp_ipv6_code", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_tcp_window_size, - {"TCP Windows Size", "cflow.tcp_windows_size", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ipv4_total_length, - {"IPV4 Total Length", "cflow.ipv4_total_length", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ip_ttl, - {"IP TTL", "cflow.ip_ttl", - FT_UINT8, BASE_DEC, NULL, 0x0, - "IP time to live", HFILL} - }, - {&hf_cflow_ip_tos, - {"IP TOS", "cflow.ip_tos", - FT_UINT8, BASE_DEC, NULL, 0x0, - "IP type of service", HFILL} - }, - {&hf_cflow_ip_dscp, - {"DSCP", "cflow.ip_dscp", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_octets_squared64, - {"OctetsSquared", "cflow.octets_squared", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_udp_length, - {"UDP Length", "cflow.udp_length", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_is_multicast, - {"IsMulticast", "cflow.is_multicast", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ip_header_words, - {"IPHeaderLen", "cflow.ip_header_words", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_option_map, - {"OptionMap", "cflow.option_map", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_section_header, - {"SectionHeader", "cflow.section_header", - FT_BYTES, BASE_NONE, NULL, 0x0, - "Header of Packet", HFILL} - }, - {&hf_cflow_section_payload, - {"SectionPayload", "cflow.section_payload", - FT_BYTES, BASE_NONE, NULL, 0x0, - "Payload of Packet", HFILL} - }, - /* IPFIX Information Elements */ - {&hf_cflow_post_octets, - {"Post Octets", "cflow.post_octets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of post bytes", HFILL} - }, - {&hf_cflow_post_octets64, - {"Post Octets", "cflow.post_octets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of post bytes", HFILL} - }, - {&hf_cflow_post_packets, - {"Post Packets", "cflow.post_packets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of post packets", HFILL} - }, - {&hf_cflow_post_packets64, - {"Post Packets", "cflow.post_packets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of post packets", HFILL} - }, - {&hf_cflow_ipv6_flowlabel, - {"ipv6FlowLabel", "cflow.ipv6flowlabel", - FT_UINT32, BASE_DEC, NULL, 0x0, - "IPv6 Flow Label", HFILL} - }, - {&hf_cflow_ipv6_flowlabel24, - {"ipv6FlowLabel", "cflow.ipv6flowlabel24", - FT_UINT32, BASE_DEC, NULL, 0x0, - "IPv6 Flow Label", HFILL} - }, - {&hf_cflow_post_tos, - {"Post IP ToS", "cflow.post_tos", - FT_UINT8, BASE_HEX, NULL, 0x0, - "Post IP Type of Service", HFILL} - }, - {&hf_cflow_srcmac, - {"Source Mac Address", "cflow.srcmac", - FT_ETHER, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_dstmac, - {"Post Destination Mac Address", "cflow.post_dstmac", - FT_ETHER, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_vlanid, - {"Vlan Id", "cflow.vlanid", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_vlanid, - {"Post Vlan Id", "cflow.post_vlanid", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ipv6_exthdr, - {"IPv6 Extension Headers", "cflow.ipv6_exthdr", - FT_UINT32, BASE_HEX, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_dstmac, - {"Destination Mac Address", "cflow.dstmac", - FT_ETHER, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_srcmac, - {"Post Source Mac Address", "cflow.post_srcmac", - FT_ETHER, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_permanent_packets, - {"Permanent Packets", "cflow.permanent_packets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Running Count of packets for permanent flows", HFILL} - }, - {&hf_cflow_permanent_packets64, - {"Permanent Packets", "cflow.permanent_packets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Running Count of packets for permanent flows", HFILL} - }, - {&hf_cflow_permanent_octets, - {"Permanent Octets", "cflow.permanent_octets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Running Count of bytes for permanent flows", HFILL} - }, - {&hf_cflow_permanent_octets64, - {"Permanent Octets", "cflow.permanent_octets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Running Count of bytes for permanent flows", HFILL} - }, - {&hf_cflow_fragment_offset, - {"Fragment Offset", "cflow.fragment_offset", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_mpls_vpn_rd, - {"MPLS VPN RD", "cflow.mpls_vpn_rd", - FT_BYTES, BASE_NONE, NULL, 0x0, - "MPLS VPN Route Distinguisher", HFILL} - }, - {&hf_cflow_mpls_top_label_prefix_length, - {"Mpls Top Label Prefix Length", "cflow.mpls_top_label_prefix_length", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_ip_diff_serv_code_point, - {"Post Ip Diff Serv Code Point", "cflow.post_ip_diff_serv_code_point", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_multicast_replication_factor, - {"Multicast Replication Factor", "cflow.multicast_replication_factor", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_exporter_addr, - {"ExporterAddr", "cflow.exporter_addr", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Flow Exporter Address", HFILL} - }, - {&hf_cflow_exporter_addr_v6, - {"ExporterAddr", "cflow.exporter_addr_v6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Flow Exporter Address", HFILL} - }, - {&hf_cflow_drop_octets, - {"Dropped Octets", "cflow.drop_octets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of dropped bytes", HFILL} - }, - {&hf_cflow_drop_octets64, - {"Dropped Octets", "cflow.drop_octets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of dropped bytes", HFILL} - }, - {&hf_cflow_drop_packets, - {"Dropped Packets", "cflow.drop_packets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of dropped packets", HFILL} - }, - {&hf_cflow_drop_packets64, - {"Dropped Packets", "cflow.drop_packets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of dropped packets", HFILL} - }, - {&hf_cflow_drop_total_octets, - {"Dropped Total Octets", "cflow.drop_total_octets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of total dropped bytes", HFILL} - }, - {&hf_cflow_drop_total_octets64, - {"Dropped Total Octets", "cflow.drop_total_octets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of total dropped bytes", HFILL} - }, - {&hf_cflow_drop_total_packets, - {"Dropped Total Packets", "cflow.drop_total_packets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of total dropped packets", HFILL} - }, - {&hf_cflow_drop_total_packets64, - {"Dropped Total Packets", "cflow.drop_total_packets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of total dropped packets", HFILL} - }, - {&hf_cflow_flow_end_reason, - {"Flow End Reason", "cflow.flow_end_reason", - FT_UINT8, BASE_DEC, VALS(v9_flow_end_reason), 0x0, - NULL, HFILL} - }, - {&hf_cflow_common_properties_id, - {"Common Properties Id", "cflow.common_properties_id", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_observation_point_id, - {"Observation Point Id", "cflow.observation_point_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_mpls_pe_addr_v6, - {"TopLabelAddr V6", "cflow.toplabeladdr_v6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Top MPLS label PE address IPv6", HFILL} - }, - {&hf_cflow_port_id, - {"Port Id", "cflow.port_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_mp_id, - {"Metering Process Id", "cflow.mp_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_wlan_channel_id, - {"Wireless LAN Channel Id", "cflow.wlan_channel_id", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_wlan_ssid, - {"Wireless LAN SSId", "cflow.wlan_ssid", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_flow_id, - {"Flow Id", "cflow.flow_id", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_od_id, - {"Observation Domain Id", "cflow.od_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Identifier of an Observation Domain that is locally unique to an Exporting Process", HFILL} - }, - {&hf_cflow_sys_init_time, - {"System Init Time", "cflow.sys_init_time", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_abstimestart, - {"StartTime", "cflow.abstimestart", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - "Uptime at start of flow", HFILL} - }, - {&hf_cflow_abstimeend, - {"EndTime", "cflow.abstimeend", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - "Uptime at end of flow", HFILL} - }, - {&hf_cflow_dstnet_v6, - {"DstNet", "cflow.dstnetv6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Flow Destination Network (IPv6)", HFILL} - }, - {&hf_cflow_srcnet_v6, - {"SrcNet", "cflow.srcnetv6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Flow Source Network (IPv6)", HFILL} - }, - {&hf_cflow_ignore_packets, - {"Ignored Packets", "cflow.ignore_packets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of ignored packets", HFILL} - }, - {&hf_cflow_ignore_packets64, - {"Ignored Packets", "cflow.ignore_packets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of ignored packets", HFILL} - }, - {&hf_cflow_ignore_octets, - {"Ignored Octets", "cflow.ignore_octets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of ignored octets", HFILL} - }, - {&hf_cflow_ignore_octets64, - {"Ignored Octets", "cflow.ignore_octets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of ignored octets", HFILL} - }, - {&hf_cflow_notsent_flows, - {"Not Sent Flows", "cflow.notsent_flows", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of not sent flows", HFILL} - }, - {&hf_cflow_notsent_flows64, - {"Not Sent Flows", "cflow.notsent_flows64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of not sent flows", HFILL} - }, - {&hf_cflow_notsent_packets, - {"Not Sent Packets", "cflow.notsent_packets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of not sent packets", HFILL} - }, - {&hf_cflow_notsent_packets64, - {"Not Sent Packets", "cflow.notsent_packets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of not sent packets", HFILL} - }, - {&hf_cflow_notsent_octets, - {"Not Sent Octets", "cflow.notsent_octets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of not sent octets", HFILL} - }, - {&hf_cflow_notsent_octets64, - {"Not Sent Octets", "cflow.notsent_octets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of not sent octets", HFILL} - }, - {&hf_cflow_post_total_octets, - {"Post Total Octets", "cflow.post_total_octets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of post total octets", HFILL} - }, - {&hf_cflow_post_total_octets64, - {"Post Total Octets", "cflow.post_total_octets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of post total octets", HFILL} - }, - {&hf_cflow_post_total_packets, - {"Post Total Packets", "cflow.post_total_packets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of post total packets", HFILL} - }, - {&hf_cflow_post_total_packets64, - {"Post Total Packets", "cflow.post_total_packets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of post total packets", HFILL} - }, - {&hf_cflow_key, - {"floKeyIndicator", "cflow.post_key", - FT_BOOLEAN, BASE_NONE, NULL, 0x0, - "Flow Key Indicator", HFILL} - }, - {&hf_cflow_post_total_mulpackets, - {"Post Total Multicast Packets", "cflow.post_total_mulpackets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of post total multicast packets", HFILL} - }, - {&hf_cflow_post_total_mulpackets64, - {"Post Total Multicast Packets", "cflow.post_total_mulpackets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of post total multicast packets", HFILL} - }, - {&hf_cflow_post_total_muloctets, - {"Post Total Multicast Octets", "cflow.post_total_muloctets", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Count of post total multicast octets", HFILL} - }, - {&hf_cflow_post_total_muloctets64, - {"Post Total Multicast Octets", "cflow.post_total_muloctets64", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of post total multicast octets", HFILL} - }, - {&hf_cflow_tcp_seq_num, - {"TCP Sequence Number", "cflow.tcp_seq_num", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_tcp_ack_num, - {"TCP Acknowledgement Number", "cflow.tcp_ack_num", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_tcp_urg_ptr, - {"TCP Urgent Pointer", "cflow.tcp_urg_ptr", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_tcp_header_length, - {"TCP Header Length", "cflow.tcp_header_length", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ip_header_length, - {"IP Header Length", "cflow.ip_header_length", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ipv6_payload_length, - {"IPv6 Payload Length", "cflow.ipv6_payload_length", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ipv6_next_hdr, - {"IPv6 Next Header", "cflow.ipv6_next_hdr", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ip_precedence, - {"IP Precedence", "cflow.ip_precedence", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ip_fragment_flags, - {"IP Fragment Flags", "cflow.ip_fragment_flags", - FT_UINT8, BASE_HEX, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_mpls_top_label_ttl, - {"MPLS Top Label TTL", "cflow.mpls_top_label_ttl", - FT_UINT8, BASE_DEC, NULL, 0x0, - "MPLS top label time to live", HFILL} - }, - {&hf_cflow_mpls_label_length, - {"MPLS Label Stack Length", "cflow.mpls_label_length", - FT_UINT32, BASE_DEC, NULL, 0x0, - "The length of the MPLS label stac", HFILL} - }, - {&hf_cflow_mpls_label_depth, - {"MPLS Label Stack Depth", "cflow.mpls_label_depth", - FT_UINT32, BASE_DEC, NULL, 0x0, - "The number of labels in the MPLS label stack", HFILL} - }, - {&hf_cflow_ip_payload_length, - {"IP Payload Length", "cflow.ip_payload_length", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_mpls_top_label_exp, - {"MPLS Top Label Exp", "cflow.mpls_top_label_exp", - FT_UINT8, BASE_OCT, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_tcp_option_map, - {"TCP OptionMap", "cflow.tcp_option_map", - FT_BYTES, BASE_NONE, NULL, 0x0, - "TCP Option Map", HFILL} - }, - {&hf_cflow_collector_addr, - {"CollectorAddr", "cflow.collector_addr", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Flow Collector Address (IPv4)", HFILL} - }, - {&hf_cflow_collector_addr_v6, - {"CollectorAddr", "cflow.collector_addr_v6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Flow Collector Address (IPv6)", HFILL} - }, - {&hf_cflow_export_interface, - {"ExportInterface", "cflow.export_interface", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_export_protocol_version, - {"ExportProtocolVersion", "cflow.export_protocol_version", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_export_prot, - {"ExportTransportProtocol", "cflow.exporter_protocol", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Transport Protocol used by the Exporting Process", HFILL} - }, - {&hf_cflow_collector_port, - {"CollectorPort", "cflow.collector_port", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Flow Collector Port", HFILL} - }, - {&hf_cflow_exporter_port, - {"ExporterPort", "cflow.exporter_port", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Flow Exporter Port", HFILL} - }, - {&hf_cflow_total_tcp_syn, - {"Total TCP syn", "cflow.total_tcp_syn", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of total TCP syn", HFILL} - }, - {&hf_cflow_total_tcp_fin, - {"Total TCP fin", "cflow.total_tcp_fin", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of total TCP fin", HFILL} - }, - {&hf_cflow_total_tcp_rst, - {"Total TCP rst", "cflow.total_tcp_rst", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of total TCP rst", HFILL} - }, - {&hf_cflow_total_tcp_psh, - {"Total TCP psh", "cflow.total_tcp_psh", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of total TCP psh", HFILL} - }, - {&hf_cflow_total_tcp_ack, - {"Total TCP ack", "cflow.total_tcp_ack", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of total TCP ack", HFILL} - }, - {&hf_cflow_total_tcp_urg, - {"Total TCP urg", "cflow.total_tcp_urg", - FT_UINT64, BASE_DEC, NULL, 0x0, - "Count of total TCP urg", HFILL} - }, - {&hf_cflow_ip_total_length, - {"IP Total Length", "cflow.ip_total_length", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_natsource_ipv4_address, - {"Post NAT Source IPv4 Address", "cflow.post_natsource_ipv4_address", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_natdestination_ipv4_address, - {"Post NAT Destination IPv4 Address", "cflow.post_natdestination_ipv4_address", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_naptsource_transport_port, - {"Post NAPT Source Transport Port", "cflow.post_naptsource_transport_port", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_naptdestination_transport_port, - {"Post NAPT Destination Transport Port", "cflow.post_naptdestination_transport_port", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_nat_originating_address_realm, - {"Nat Originating Address Realm", "cflow.nat_originating_address_realm", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_nat_event, - {"Nat Event", "cflow.nat_event", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_initiator_octets, - {"Initiator Octets", "cflow.initiator_octets", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_responder_octets, - {"Responder Octets", "cflow.responder_octets", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_firewall_event, - {"Firewall Event", "cflow.firewall_event", - FT_UINT8, BASE_DEC, VALS(v9_firewall_event), 0x0, - NULL, HFILL} - }, - {&hf_cflow_ingress_vrfid, - {"Ingress VRFID", "cflow.ingress_vrfid", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_egress_vrfid, - {"Egress VRFID", "cflow.egress_vrfid", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_vrfname, - {"VRFname", "cflow.vrfname", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_mpls_top_label_exp, - {"Post Mpls Top Label Exp", "cflow.post_mpls_top_label_exp", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_tcp_window_scale, - {"Tcp Window Scale", "cflow.tcp_window_scale", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_biflow_direction, - {"Biflow Direction", "cflow.biflow_direction", - FT_UINT8, BASE_DEC, VALS(v9_biflow_direction), 0x0, - NULL, HFILL} - }, - {&hf_cflow_ethernet_header_length, - {"Ethernet Header Length", "cflow.ethernet_header_length", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ethernet_payload_length, - {"Ethernet Payload Length", "cflow.ethernet_payload_length", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ethernet_total_length, - {"Ethernet Total Length", "cflow.ethernet_total_length", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_dot1q_vlan_id, - {"Dot1q Vlan Id", "cflow.dot1q_vlan_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_dot1q_priority, - {"Dot1q Priority", "cflow.dot1q_priority", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_dot1q_customer_vlan_id, - {"Dot1q Customer Vlan Id", "cflow.dot1q_customer_vlan_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_dot1q_customer_priority, - {"Dot1q Customer Priority", "cflow.dot1q_customer_priority", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_metro_evc_id, - {"Metro Evc Id", "cflow.metro_evc_id", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_metro_evc_type, - {"Metro Evc Type", "cflow.metro_evc_type", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_pseudo_wire_id, - {"Pseudo Wire Id", "cflow.pseudo_wire_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_pseudo_wire_type, - {"Pseudo Wire Type", "cflow.pseudo_wire_type", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_pseudo_wire_control_word, - {"Pseudo Wire Control Word", "cflow.pseudo_wire_control_word", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ingress_physical_interface, - {"Ingress Physical Interface", "cflow.ingress_physical_interface", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_egress_physical_interface, - {"Egress Physical Interface", "cflow.egress_physical_interface", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_dot1q_vlan_id, - {"Post Dot1q Vlan Id", "cflow.post_dot1q_vlan_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_dot1q_customer_vlan_id, - {"Post Dot1q Customer Vlan Id", "cflow.post_dot1q_customer_vlan_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_ethernet_type, - {"Ethernet Type", "cflow.ethernet_type", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_post_ip_precedence, - {"Post Ip Precedence", "cflow.post_ip_precedence", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_collection_time_milliseconds, - {"Collection Time Milliseconds", "cflow.collection_time_milliseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_export_sctp_stream_id, - {"Export Sctp Stream Id", "cflow.export_sctp_stream_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_max_export_seconds, - {"Max Export Seconds", "cflow.max_export_seconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_max_flow_end_seconds, - {"Max Flow End Seconds", "cflow.max_flow_end_seconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_message_md5_checksum, - {"Message MD5 Checksum", "cflow.message_md5_checksum", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_message_scope, - {"Message Scope", "cflow.message_scope", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_min_export_seconds, - {"Min Export Seconds", "cflow.min_export_seconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_min_flow_start_seconds, - {"Min Flow Start Seconds", "cflow.min_flow_start_seconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_opaque_octets, - {"Opaque Octets", "cflow.opaque_octets", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_session_scope, - {"Session Scope", "cflow.session_scope", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_max_flow_end_microseconds, - {"Max Flow End Microseconds", "cflow.max_flow_end_microseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_max_flow_end_milliseconds, - {"Max Flow End Milliseconds", "cflow.max_flow_end_milliseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_max_flow_end_nanoseconds, - {"Max Flow End Nanoseconds", "cflow.max_flow_end_nanoseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_min_flow_start_microseconds, - {"Min Flow Start Microseconds", "cflow.min_flow_start_microseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_min_flow_start_milliseconds, - {"Min Flow Start Milliseconds", "cflow.min_flow_start_milliseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_min_flow_start_nanoseconds, - {"Min Flow Start Nanoseconds", "cflow.min_flow_start_nanoseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_collector_certificate, - {"Collector Certificate", "cflow.collector_certificate", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_exporter_certificate, - {"Exporter Certificate", "cflow.exporter_certificate", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_selection_sequence_id, - {"Selection Sequence Id", "cflow.selection_sequence_id", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_selector_id, - {"Selector Id", "cflow.selector_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_information_element_id, - {"Information Element Id", "cflow.information_element_id", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_selector_algorithm, - {"Selector Algorithm", "cflow.selector_algorithm", - FT_UINT16, BASE_DEC|BASE_EXT_STRING, &selector_algorithm_ext, 0x0, - NULL, HFILL} - }, - {&hf_cflow_sampling_packet_interval, - {"Sampling Packet Interval", "cflow.sampling_packet_interval", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_sampling_packet_space, - {"Sampling Packet Space", "cflow.sampling_packet_space", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_sampling_time_interval, - {"Sampling Time Interval", "cflow.sampling_time_interval", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_sampling_time_space, - {"Sampling Time Space", "cflow.sampling_time_space", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_sampling_size, - {"Sampling Size", "cflow.sampling_size", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_sampling_population, - {"Sampling Population", "cflow.sampling_population", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_sampling_probability, - {"Sampling Probability", "cflow.sampling_probability", - FT_FLOAT, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_mpls_label_stack_section, - {"Mpls Label Stack Section", "cflow.mpls_label_stack_section", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_mpls_payload_packet_section, - {"Mpls Payload Packet Section", "cflow.mpls_payload_packet_section", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_selector_id_total_pkts_observed, - {"Selector Id Total Pkts Observed", "cflow.selector_id_total_pkts_observed", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_selector_id_total_pkts_selected, - {"Selector Id Total Pkts Selected", "cflow.selector_id_total_pkts_selected", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_absolute_error, - {"Absolute Error", "cflow.absolute_error", - FT_FLOAT, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_relative_error, - {"Relative Error", "cflow.relative_error", - FT_FLOAT, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_observation_time_seconds, - {"Observation Time Seconds", "cflow.observation_time_seconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_observation_time_milliseconds, - {"Observation Time Milliseconds", "cflow.observation_time_milliseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_observation_time_microseconds, - {"Observation Time Microseconds", "cflow.observation_time_microseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_observation_time_nanoseconds, - {"Observation Time Nanoseconds", "cflow.observation_time_nanoseconds", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_digest_hash_value, - {"Digest Hash Value", "cflow.digest_hash_value", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_hash_ippayload_offset, - {"Hash IPPayload Offset", "cflow.hash_ippayload_offset", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_hash_ippayload_size, - {"Hash IPPayload Size", "cflow.hash_ippayload_size", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_hash_output_range_min, - {"Hash Output Range Min", "cflow.hash_output_range_min", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_hash_output_range_max, - {"Hash Output Range Max", "cflow.hash_output_range_max", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_hash_selected_range_min, - {"Hash Selected Range Min", "cflow.hash_selected_range_min", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_hash_selected_range_max, - {"Hash Selected Range Max", "cflow.hash_selected_range_max", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_hash_digest_output, - {"Hash Digest Output", "cflow.hash_digest_output", - FT_BOOLEAN, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_hash_initialiser_value, - {"Hash Initialiser Value", "cflow.hash_initialiser_value", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_selector_name, - {"Selector Name", "cflow.selector_name", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_upper_cilimit, - {"Upper CILimit", "cflow.upper_cilimit", - FT_FLOAT, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_lower_cilimit, - {"Lower CILimit", "cflow.lower_cilimit", - FT_FLOAT, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_confidence_level, - {"Confidence Level", "cflow.confidence_level", - FT_FLOAT, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_information_element_data_type, - {"Information Element Data Type", "cflow.information_element_data_type", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_information_element_description, - {"Information Element Description", "cflow.information_element_description", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_information_element_name, - {"Information Element Name", "cflow.information_element_name", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_information_element_range_begin, - {"Information Element Range Begin", "cflow.information_element_range_begin", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_information_element_range_end, - {"Information Element Range End", "cflow.information_element_range_end", - FT_UINT64, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_information_element_semantics, - {"Information Element Semantics", "cflow.information_element_semantics", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_information_element_units, - {"Information Element Units", "cflow.information_element_units", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_private_enterprise_number, - {"Private Enterprise Number", "cflow.private_enterprise_number", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* - * end pdu content storage - */ - {&hf_cflow_scope_system, - {"ScopeSystem", "cflow.scope_system", - FT_BYTES, BASE_NONE, NULL, 0x0, - "Option Scope System", HFILL} - }, - {&hf_cflow_scope_interface, - {"ScopeInterface", "cflow.scope_interface", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Option Scope Interface", HFILL} - }, - {&hf_cflow_scope_linecard, - {"ScopeLinecard", "cflow.scope_linecard", - FT_BYTES, BASE_NONE, NULL, 0x0, - "Option Scope Linecard", HFILL} - }, - {&hf_cflow_scope_cache, - {"ScopeCache", "cflow.scope_cache", - FT_BYTES, BASE_NONE, NULL, 0x0, - "Option Scope Cache", HFILL} - }, - {&hf_cflow_scope_template, - {"ScopeTemplate", "cflow.scope_template", - FT_BYTES, BASE_NONE, NULL, 0x0, - "Option Scope Template", HFILL} - }, - - /* IPFIX */ - {&hf_cflow_unknown_field_type, - {"Unknown Field Type", "cflow.unknown_field_type", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_template_ipfix_total_field_count, - {"Total Field Count", "cflow.template_ipfix_total_field_count", - FT_UINT16, BASE_DEC, NULL, 0x0, - "IPFIX Options Template Total Field Count", HFILL} - }, - {&hf_cflow_template_ipfix_scope_field_count, - {"Scope Field Count", "cflow.template_ipfix_scope_field_count", - FT_UINT16, BASE_DEC, NULL, 0x0, - "IPFIX Options Template Scope Field Count", HFILL} - }, - {&hf_cflow_template_ipfix_pen_provided, - {"Pen provided", "cflow.template_ipfix_pen_provided", - FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x8000, - "Is Template Enterprise Specific", HFILL} - }, - {&hf_cflow_template_ipfix_field_type, - {"Type", "cflow.template_ipfix_field_type", - FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v9_v10_template_types_ext, 0x7FFF, - "Template field type", HFILL} - }, - {&hf_cflow_template_plixer_field_type, - {"Type", "cflow.template_plixer_field_type", - FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v10_template_types_plixer_ext, 0x7FFF, - "Template field type", HFILL} - }, - {&hf_cflow_template_ntop_field_type, - {"Type", "cflow.template_ntop_field_type", - FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v10_template_types_ntop_ext, 0x7FFF, - "Template field type", HFILL} - }, - {&hf_cflow_template_ipfix_field_type_enterprise, - {"Type", "cflow.template_ipfix_field_type_enterprise", - FT_UINT16, BASE_DEC, NULL, 0x7FFF, - "Template field type", HFILL} - }, - {&hf_cflow_template_ipfix_field_pen, - {"PEN", - "cflow.template_ipfix_field_pen", - FT_UINT32, BASE_DEC, NULL, 0x0, - "IPFIX Private Enterprise Number", HFILL} - }, - {&hf_cflow_packets_dropped, - {"Packets Dropped", - "cflow.packets_dropped", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_byte_rate, - {"Byte Rate", - "cflow.byte_rate", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_application_media_bytes, - {"Media Bytes", - "cflow.application_media_bytes", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_application_media_byte_rate, - {"Media Byte Rate", - "cflow.media_byte_rate", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_application_media_packets, - {"Media Packets", - "cflow.application_media_packets", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_application_media_packet_rate, - {"Media Packet Rate", - "cflow.media_packet_rate", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_application_media_event, - {"Media Event", - "cflow.application_media_event", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_monitor_event, - {"Monitor Event", - "cflow.monitor_event", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_timestamp_interval, - {"Timestamp Interval", - "cflow.timestamp_interval", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_packets_expected, - {"Transport Packets Expected", - "cflow.transport_packets_expected", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_round_trip_time_string, - {"Transport Round-Trip-Time", - "cflow.transport_rtt", - FT_UINT32, BASE_DEC, VALS(performance_monitor_specials), 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_round_trip_time, - {"Transport Round-Trip-Time", - "cflow.transport_rtt", - FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_event_packet_loss, - {"Transport Packet Loss Events", - "cflow.transport_packet_loss_event", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_packets_lost, - {"Transport Packets Lost", - "cflow.transport_packets_lost", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_packets_lost_string, - {"Transport Packets Lost", - "cflow.transport_packets_lost", - FT_UINT32, BASE_HEX, VALS(performance_monitor_specials), 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_packets_lost_rate, - {"Transport Packet Loss Rate", - "cflow.transport_packet_loss_rate", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_packets_lost_rate_string, - {"Transport Packet Loss Rate", - "cflow.transport_packet_loss_rate", - FT_UINT32, BASE_HEX, VALS(performance_monitor_specials) , 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_rtp_ssrc, - {"RTP SSRC", - "cflow.transport_rtp_ssrc", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_rtp_jitter_mean, - {"RTP Mean Jitter", - "cflow.transport_jitter_mean", - FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_rtp_jitter_mean_string, - {"RTP Mean Jitter", - "cflow.transport_jitter_mean", - FT_UINT32, BASE_HEX, VALS(performance_monitor_specials), 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_rtp_jitter_min, - {"RTP Min Jitter", - "cflow.transport_jitter_min", - FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_rtp_jitter_min_string, - {"RTP Min Jitter", - "cflow.transport_jitter_min", - FT_UINT32, BASE_HEX, VALS(performance_monitor_specials), 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_rtp_jitter_max, - {"RTP Max Jitter", - "cflow.transport_jitter_max", - FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_transport_rtp_jitter_max_string, - {"RTP Max Jitter", - "cflow.transport_jitter_max", - FT_UINT32, BASE_HEX, VALS(performance_monitor_specials), 0x0, - NULL, HFILL} - }, - /* Ericsson SE NAT Logging */ - {&hf_cflow_nat_context_id, - {"NAT Context ID", "cflow.nat_context_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Internal context ID", HFILL} - }, - {&hf_cflow_nat_context_name, - {"NAT Context Name", "cflow.nat_context_name", - FT_STRINGZ, BASE_NONE, NULL, 0x0, - "Zero terminated context Name", HFILL} - }, - {&hf_cflow_nat_assign_time, - {"NAT Assign Time", "cflow.nat_assign_time", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - "Seconds of UNIX timestamp for assign", HFILL} - }, - {&hf_cflow_nat_unassign_time, - {"NAT Unassign Time", "cflow.nat_unassign_time", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - "Seconds of UNIX timestamp for unassign", HFILL} - }, - {&hf_cflow_nat_int_addr, - {"Internal IPv4 address", "cflow.nat_int_addr", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_nat_ext_addr, - {"External IPv4 address", "cflow.nat_ext_addr", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_nat_ext_port_first, - {"NAT port start", "cflow.nat_ext_port_first", - FT_UINT16, BASE_DEC, NULL, 0x0, - "External L4 port start", HFILL} - }, - {&hf_cflow_nat_ext_port_last, - {"NAT port end", "cflow.nat_ext_port_last", - FT_UINT16, BASE_DEC, NULL, 0x0, - "External L4 port end", HFILL} - }, - /* Cisco ASA 5500 Series */ - {&hf_cflow_ingress_acl_id, - {"Ingress ACL ID", "cflow.ingress_acl_id", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_egress_acl_id, - {"Egress ACL ID", "cflow.egress_acl_id", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_cflow_fw_ext_event, - {"Extended firewall event code", "cflow.fw_ext_event", - FT_UINT16, BASE_DEC, VALS(v9_extended_firewall_event), 0x0, - NULL, HFILL} - }, - {&hf_cflow_aaa_username, - {"AAA username", "cflow.aaa_username", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - - {&hf_ipfix_enterprise_private_entry, - {"Enterprise Private entry", "cflow.enterprise_private_entry", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* Private Information Elements */ - - /* CACE Technologies, 32622 / 0 */ - {&hf_pie_cace_local_ipv4_address, - {"Local IPv4 Address", "cflow.pie.cace.localaddr4", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Local IPv4 Address (caceLocalIPv4Address)", HFILL} - }, - /* CACE Technologies, 32622 / 1 */ - {&hf_pie_cace_remote_ipv4_address, - {"Remote IPv4 Address", "cflow.pie.cace.remoteaddr4", - FT_IPv4, BASE_NONE, NULL, 0x0, - "Remote IPv4 Address (caceRemoteIPv4Address)", HFILL} - }, - /* CACE Technologies, 32622 / 2 */ - {&hf_pie_cace_local_ipv6_address, - {"Local IPv6 Address", "cflow.pie.cace.localaddr6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Local IPv6 Address (caceLocalIPv6Address)", HFILL} - }, - /* CACE Technologies, 32622 / 3 */ - {&hf_pie_cace_remote_ipv6_address, - {"Remote IPv6 Address", "cflow.pie.cace.remoteaddr6", - FT_IPv6, BASE_NONE, NULL, 0x0, - "Remote IPv6 Address (caceRemoteIPv6Address)", HFILL} - }, - /* CACE Technologies, 32622 / 4 */ - {&hf_pie_cace_local_port, - {"Local Port", "cflow.pie.cace.localport", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Local Transport Port (caceLocalTransportPort)", HFILL} - }, - /* CACE Technologies, 32622 / 5 */ - {&hf_pie_cace_remote_port, - {"Remote Port", "cflow.pie.cace.remoteport", - FT_UINT16, BASE_DEC, NULL, 0x0, - "Remote Transport Port (caceRemoteTransportPort)", HFILL} - }, - /* CACE Technologies, 32622 / 6 */ - {&hf_pie_cace_local_ipv4_id, - {"Local IPv4 ID", "cflow.pie.cace.localip4id", - FT_UINT16, BASE_DEC, NULL, 0x0, - "The IPv4 identification header field from a locally-originated packet (caceLocalIPv4id)", HFILL} - }, - /* CACE Technologies, 32622 / 7 */ - {&hf_pie_cace_local_icmp_id, - {"Local ICMP ID", "cflow.pie.cace.localicmpid", - FT_UINT16, BASE_DEC, NULL, 0x0, - "The ICMP identification header field from a locally-originated ICMPv4 or ICMPv6 echo request (caceLocalICMPid)", HFILL} - }, - /* CACE Technologies, 32622 / 8 */ - {&hf_pie_cace_local_uid, - {"Local User ID", "cflow.pie.cace.localuid", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Local User ID (caceLocalProcessUserId)", HFILL} - }, - /* CACE Technologies, 32622 / 9 */ - {&hf_pie_cace_local_pid, - {"Local Process ID", "cflow.pie.cace.localpid", - FT_UINT32, BASE_DEC, NULL, 0x0, - "Local Process ID (caceLocalProcessId)", HFILL} - }, - /* CACE Technologies, 32622 / 10 */ - {&hf_pie_cace_local_username_len, - {"Local Username Length", "cflow.pie.cace.localusernamelen", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Local User Name Length (caceLocalProcessUserName)", HFILL} - }, - /* CACE Technologies, 32622 / 10 */ - {&hf_pie_cace_local_username, - {"Local User Name", "cflow.pie.cace.localusername", - FT_STRING, BASE_NONE, NULL, 0x0, - "Local User Name (caceLocalProcessUserName)", HFILL} - }, - /* CACE Technologies, 32622 / 11 */ - {&hf_pie_cace_local_cmd_len, - {"Local Command Length", "cflow.pie.cace.localcmdlen", - FT_UINT8, BASE_DEC, NULL, 0x0, - "Local Command Length (caceLocalProcessCommand)", HFILL} - }, - /* CACE Technologies, 32622 / 11 */ - {&hf_pie_cace_local_cmd, - {"Local Command", "cflow.pie.cace.localcmd", - FT_STRING, BASE_NONE, NULL, 0x0, - "Local Command (caceLocalProcessCommand)", HFILL} - }, - /* ntop, 35632 / 80 */ - {&hf_pie_ntop_fragmented, - {"Fragmented","cflow.pie.ntop.fragmented", - FT_BOOLEAN, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 81 */ - {&hf_pie_ntop_fingerprint, - {"Fingerprint","cflow.pie.ntop.fingerprint", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 82 */ - {&hf_pie_ntop_client_nw_delay_sec, - {"Client_nw_delay_sec","cflow.pie.ntop.client_nw_delay_sec", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 83 */ - {&hf_pie_ntop_client_nw_delay_usec, - {"Client_nw_delay_usec","cflow.pie.ntop.client_nw_delay_usec", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 84 */ - {&hf_pie_ntop_server_nw_delay_sec, - {"Server_nw_delay_sec","cflow.pie.ntop.server_nw_delay_sec", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 85 */ - {&hf_pie_ntop_server_nw_delay_usec, - {"Server_nw_delay_usec","cflow.pie.ntop.server_nw_delay_usec", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 86 */ - {&hf_pie_ntop_appl_latency_sec, - {"Appl_latency_sec","cflow.pie.ntop.appl_latency_sec", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 98 */ - {&hf_pie_ntop_icmp_flags, - {"Icmp_flags","cflow.pie.ntop.icmp_flags", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 101 */ - {&hf_pie_ntop_src_ip_country, - {"Src_ip_country","cflow.pie.ntop.src_ip_country", - FT_STRINGZ, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 102 */ - {&hf_pie_ntop_src_ip_city, - {"Src_ip_city","cflow.pie.ntop.src_ip_city", - FT_STRINGZ, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 103 */ - {&hf_pie_ntop_dst_ip_country, - {"Dst_ip_country","cflow.pie.ntop.dst_ip_country", - FT_STRINGZ, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 104 */ - {&hf_pie_ntop_dst_ip_city, - {"Dst_ip_city","cflow.pie.ntop.dst_ip_city", - FT_STRINGZ, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 105 */ - {&hf_pie_ntop_flow_proto_port, - {"Flow_proto_port","cflow.pie.ntop.flow_proto_port", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 106 */ - {&hf_pie_ntop_tunnel_id, - {"Tunnel_id","cflow.pie.ntop.tunnel_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 107 */ - {&hf_pie_ntop_longest_flow_pkt, - {"Longest_flow_pkt","cflow.pie.ntop.longest_flow_pkt", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 108 */ - {&hf_pie_ntop_shortest_flow_pkt, - {"Shortest_flow_pkt","cflow.pie.ntop.shortest_flow_pkt", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 109 */ - {&hf_pie_ntop_retransmitted_in_pkts, - {"Retransmitted_in_pkts","cflow.pie.ntop.retransmitted_in_pkts", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 110 */ - {&hf_pie_ntop_retransmitted_out_pkts, - {"Retransmitted_out_pkts","cflow.pie.ntop.retransmitted_out_pkts", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 111 */ - {&hf_pie_ntop_ooorder_in_pkts, - {"Ooorder_in_pkts","cflow.pie.ntop.ooorder_in_pkts", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 112 */ - {&hf_pie_ntop_ooorder_out_pkts, - {"Ooorder_out_pkts","cflow.pie.ntop.ooorder_out_pkts", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 113 */ - {&hf_pie_ntop_untunneled_protocol, - {"Untunneled_protocol","cflow.pie.ntop.untunneled_protocol", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 114 */ - {&hf_pie_ntop_untunneled_ipv4_src_addr, - {"Untunneled_ipv4_src_addr","cflow.pie.ntop.untunneled_ipv4_src_addr", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 115 */ - {&hf_pie_ntop_untunneled_l4_src_port, - {"Untunneled_l4_src_port","cflow.pie.ntop.untunneled_l4_src_port", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 116 */ - {&hf_pie_ntop_untunneled_ipv4_dst_addr, - {"Untunneled_ipv4_dst_addr","cflow.pie.ntop.untunneled_ipv4_dst_addr", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 117 */ - {&hf_pie_ntop_untunneled_l4_dst_port, - {"Untunneled_l4_dst_port","cflow.pie.ntop.untunneled_l4_dst_port", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - - /* ntop, 35632 / 110 */ - {&hf_pie_ntop_dump_path, - {"Dump_path","cflow.pie.ntop.dump_path", - FT_STRINGZ, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 130 */ - {&hf_pie_ntop_sip_call_id, - {"Sip_call_id","cflow.pie.ntop.sip_call_id", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 131 */ - {&hf_pie_ntop_sip_calling_party, - {"Sip_calling_party","cflow.pie.ntop.sip_calling_party", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 132 */ - {&hf_pie_ntop_sip_called_party, - {"Sip_called_party","cflow.pie.ntop.sip_called_party", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 133 */ - {&hf_pie_ntop_sip_rtp_codecs, - {"Sip_rtp_codecs","cflow.pie.ntop.sip_rtp_codecs", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 134 */ - {&hf_pie_ntop_sip_invite_time, - {"Sip_invite_time","cflow.pie.ntop.sip_invite_time", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 135 */ - {&hf_pie_ntop_sip_trying_time, - {"Sip_trying_time","cflow.pie.ntop.sip_trying_time", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 136 */ - {&hf_pie_ntop_sip_ringing_time, - {"Sip_ringing_time","cflow.pie.ntop.sip_ringing_time", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 137 */ - {&hf_pie_ntop_sip_ok_time, - {"Sip_ok_time","cflow.pie.ntop.sip_ok_time", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 138 */ - {&hf_pie_ntop_sip_bye_time, - {"Sip_bye_time","cflow.pie.ntop.sip_bye_time", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 139 */ - {&hf_pie_ntop_sip_rtp_src_ip, - {"Sip_rtp_src_ip","cflow.pie.ntop.sip_rtp_src_ip", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 140 */ - {&hf_pie_ntop_sip_rtp_src_port, - {"Sip_rtp_src_port","cflow.pie.ntop.sip_rtp_src_port", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 141 */ - {&hf_pie_ntop_sip_rtp_dst_ip, - {"Sip_rtp_dst_ip","cflow.pie.ntop.sip_rtp_dst_ip", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 142 */ - {&hf_pie_ntop_sip_rtp_dst_port, - {"Sip_rtp_dst_port","cflow.pie.ntop.sip_rtp_dst_port", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 150 */ - {&hf_pie_ntop_rtp_first_ssrc, - {"Rtp_first_ssrc","cflow.pie.ntop.rtp_first_ssrc", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 151 */ - {&hf_pie_ntop_rtp_first_ts, - {"Rtp_first_ts","cflow.pie.ntop.rtp_first_ts", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 152 */ - {&hf_pie_ntop_rtp_last_ssrc, - {"Rtp_last_ssrc","cflow.pie.ntop.rtp_last_ssrc", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 153 */ - {&hf_pie_ntop_rtp_last_ts, - {"Rtp_last_ts","cflow.pie.ntop.rtp_last_ts", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 154 */ - {&hf_pie_ntop_rtp_in_jitter, - {"Rtp_in_jitter","cflow.pie.ntop.rtp_in_jitter", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 155 */ - {&hf_pie_ntop_rtp_out_jitter, - {"Rtp_out_jitter","cflow.pie.ntop.rtp_out_jitter", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 156 */ - {&hf_pie_ntop_rtp_in_pkt_lost, - {"Rtp_in_pkt_lost","cflow.pie.ntop.rtp_in_pkt_lost", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 157 */ - {&hf_pie_ntop_rtp_out_pkt_lost, - {"Rtp_out_pkt_lost","cflow.pie.ntop.rtp_out_pkt_lost", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 158 */ - {&hf_pie_ntop_rtp_out_payload_type, - {"Rtp_out_payload_type","cflow.pie.ntop.rtp_out_payload_type", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 159 */ - {&hf_pie_ntop_rtp_in_max_delta, - {"Rtp_in_max_delta","cflow.pie.ntop.rtp_in_max_delta", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 160 */ - {&hf_pie_ntop_rtp_out_max_delta, - {"Rtp_out_max_delta","cflow.pie.ntop.rtp_out_max_delta", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 168 */ - {&hf_pie_ntop_proc_id, - {"Proc_id","cflow.pie.ntop.proc_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 169 */ - {&hf_pie_ntop_proc_name, - {"Proc_name","cflow.pie.ntop.proc_name", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 180 */ - {&hf_pie_ntop_http_url, - {"Http_url","cflow.pie.ntop.http_url", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 181 */ - {&hf_pie_ntop_http_ret_code, - {"Http_ret_code","cflow.pie.ntop.http_ret_code", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 185 */ - {&hf_pie_ntop_smtp_mail_from, - {"Smtp_mail_from","cflow.pie.ntop.smtp_mail_from", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 186 */ - {&hf_pie_ntop_smtp_rcpt_to, - {"Smtp_rcpt_to","cflow.pie.ntop.smtp_rcpt_to", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 195 */ - {&hf_pie_ntop_mysql_server_version, - {"Mysql_server_version","cflow.pie.ntop.mysql_server_version", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 196 */ - {&hf_pie_ntop_mysql_username, - {"Mysql_username","cflow.pie.ntop.mysql_username", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 197 */ - {&hf_pie_ntop_mysql_db, - {"Mysql_db","cflow.pie.ntop.mysql_db", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 198 */ - {&hf_pie_ntop_mysql_query, - {"Mysql_query","cflow.pie.ntop.mysql_query", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* ntop, 35632 / 199 */ - {&hf_pie_ntop_mysql_response, - {"Mysql_response","cflow.pie.ntop.mysql_response", - FT_UINT16, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - - /* plixer, 13745 / 100 */ - {&hf_pie_plixer_client_ip_v4, - {"client_ip_v4","cflow.pie.plixer.client.ip_v4", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - {&hf_pie_plixer_client_hostname, - /* plixer, 13745 / 101 */ - {"client_hostname","cflow.pie.plixer.client_hostname", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 102 */ - {&hf_pie_plixer_partner_name, - {"Partner_name","cflow.pie.plixer.partner_name", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 103 */ - {&hf_pie_plixer_server_hostname, - {"Server_hostname","cflow.pie.plixer.server_hostname", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 104 */ - {&hf_pie_plixer_server_ip_v4, - {"Server_ip_v4","cflow.pie.plixer.server_ip_v4", - FT_IPv4, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 105 */ - {&hf_pie_plixer_recipient_address, - {"Recipient_address","cflow.pie.plixer.recipient_address", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 106 */ - {&hf_pie_plixer_event_id, - {"Event_id","cflow.pie.plixer.event_id", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 107 */ - {&hf_pie_plixer_msgid, - {"Msgid","cflow.pie.plixer.msgid", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 108 */ - {&hf_pie_plixer_priority, - {"Priority","cflow.pie.plixer_priority", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 109 */ - {&hf_pie_plixer_recipient_report_status, - {"Recipient_report_status","cflow.pie.plixer.recipient_report_status", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 110 */ - {&hf_pie_plixer_number_recipients, - {"Number_recipients","cflow.pie.plixer.number_recipients", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 111 */ - {&hf_pie_plixer_origination_time, - {"Origination_time","cflow.pie.plixer.origination_time", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 112 */ - {&hf_pie_plixer_encryption, - {"Cncryption","cflow.pie.plixer.encryption", - FT_UINT32, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 113 */ - {&hf_pie_plixer_service_version, - {"Service_version","cflow.pie.plixer.service_version", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 114 */ - {&hf_pie_plixer_linked_msgid, - {"Linked_msgid","cflow.pie.plixer.linked_msgid", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 115 */ - {&hf_pie_plixer_message_subject, - {"Message_subject","cflow.pie.plixer.message_subject", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 116 */ - {&hf_pie_plixer_sender_address, - {"Sender_address","cflow.pie.plixer.sender_address", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL} - }, - /* plixer, 13745 / 117 */ - {&hf_pie_plixer_date_time, - {"Date_time","cflow.pie.plixer.date_time", - FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, - NULL, HFILL} - }, - - {&hf_string_len_short, - {"String_len_short","cflow.string_len_short", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - }, - {&hf_string_len_long, - {"String_len_short","cflow.string_len_long", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL} - } - - }; - - static gint *ett[] = { - &ett_netflow, - &ett_unixtime, - &ett_flow, - &ett_flowtime, - &ett_str_len, - &ett_template, - &ett_field, - &ett_dataflowset, - &ett_fwdstat - }; - - module_t *netflow_module; - - proto_netflow = proto_register_protocol("Cisco NetFlow/IPFIX", "CFLOW", - "cflow"); - - proto_register_field_array(proto_netflow, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); - - /* Register our configuration options for NetFlow */ - netflow_module = prefs_register_protocol(proto_netflow, - proto_reg_handoff_netflow); - - /* Set default Netflow port(s) */ - range_convert_str(&global_netflow_ports,NETFLOW_UDP_PORTS, - MAX_UDP_PORT); - range_convert_str(&global_ipfix_ports, IPFIX_UDP_PORTS, - MAX_UDP_PORT); - - prefs_register_obsolete_preference(netflow_module, "udp.port"); - - prefs_register_range_preference(netflow_module, "netflow.ports", - "NetFlow UDP Port(s)", - "Set the port(s) for NetFlow messages" - " (default: " NETFLOW_UDP_PORTS ")", - &global_netflow_ports, MAX_UDP_PORT); - - prefs_register_range_preference(netflow_module, "ipfix.ports", - "IPFIX UDP/TCP/SCTP Port(s)", - "Set the port(s) for IPFIX messages" - " (default: " IPFIX_UDP_PORTS ")", - &global_ipfix_ports, MAX_UDP_PORT); - - prefs_register_uint_preference(netflow_module, "max_template_fields", - "Maximum number of fields allowed in a template", - "Set the number of fields allowed in a template. " - "Use 0 (zero) for unlimited. " - " (default: " STRINGIFY(V9TEMPLATE_MAX_FIELDS_DEF) ")", - 10, &v9template_max_fields); - - register_init_routine(&netflow_reinit); + static hf_register_info hf[] = { + /* + * flow header + */ + {&hf_cflow_version, + {"Version", "cflow.version", + FT_UINT16, BASE_DEC, NULL, 0x0, + "NetFlow Version", HFILL} + }, + {&hf_cflow_len, + {"Length", "cflow.len", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Length of PDUs", HFILL} + }, + {&hf_cflow_count, + {"Count", "cflow.count", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Count of PDUs", HFILL} + }, + {&hf_cflow_sysuptime, + {"SysUptime", "cflow.sysuptime", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Time since router booted (in milliseconds)", HFILL} + }, + {&hf_cflow_exporttime, + {"ExportTime", "cflow.exporttime", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Time when the flow has been exported", HFILL} + }, + {&hf_cflow_timestamp, + {"Timestamp", "cflow.timestamp", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + "Current seconds since epoch", HFILL} + }, + {&hf_cflow_unix_secs, + {"CurrentSecs", "cflow.unix_secs", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Current seconds since epoch", HFILL} + }, + {&hf_cflow_unix_nsecs, + {"CurrentNSecs", "cflow.unix_nsecs", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Residual nanoseconds since epoch", HFILL} + }, + {&hf_cflow_samplingmode, + {"SamplingMode", "cflow.samplingmode", + FT_UINT16, BASE_DEC, VALS(v5_sampling_mode), 0xC000, + "Sampling Mode of exporter", HFILL} + }, + {&hf_cflow_samplerate, + {"SampleRate", "cflow.samplerate", + FT_UINT16, BASE_DEC, NULL, 0x3FFF, + "Sample Frequency of exporter", HFILL} + }, + + /* + * end version-agnostic header + * version-specific flow header + */ + {&hf_cflow_sequence, + {"FlowSequence", "cflow.sequence", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Sequence number of flows seen", HFILL} + }, + {&hf_cflow_engine_type, + {"EngineType", "cflow.engine_type", + FT_UINT8, BASE_DEC, VALS(engine_type), 0x0, + "Flow switching engine type", HFILL} + }, + {&hf_cflow_engine_id, + {"EngineId", "cflow.engine_id", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Slot number of switching engine", HFILL} + }, + {&hf_cflow_source_id, + {"SourceId", "cflow.source_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Identifier for export device", HFILL} + }, + {&hf_cflow_aggmethod, + {"AggMethod", "cflow.aggmethod", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &v8_agg_ext, 0x0, + "CFlow V8 Aggregation Method", HFILL} + }, + {&hf_cflow_aggversion, + {"AggVersion", "cflow.aggversion", + FT_UINT8, BASE_DEC, NULL, 0x0, + "CFlow V8 Aggregation Version", HFILL} + }, + /* + * end version specific header storage + */ + /* + * Version 9 + */ + {&hf_cflow_flowset_id, + {"FlowSet Id", "cflow.flowset_id", + FT_UINT16, BASE_RANGE_STRING | BASE_DEC, RVALS(rs_flowset_ids), 0x0, + NULL, HFILL} + }, + {&hf_cflow_flowset_length, + {"FlowSet Length", "cflow.flowset_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_template_id, + {"Template Id", "cflow.template_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_template_field_count, + {"Field Count", "cflow.template_field_count", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Template field count", HFILL} + }, + {&hf_cflow_template_field_type, + {"Type", "cflow.template_field_type", + FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v9_v10_template_types_ext, 0x0, + "Template field type", HFILL} + }, + {&hf_cflow_template_field_length, + {"Length", "cflow.template_field_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Template field length", HFILL} + }, + + /* options */ + {&hf_cflow_option_scope_length, + {"Option Scope Length", "cflow.option_scope_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_option_length, + {"Option Length", "cflow.option_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_template_scope_field_type, + {"Scope Type", "cflow.scope_field_type", + FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v9_scope_field_types_ext, 0x0, + "Scope field type", HFILL} + }, + {&hf_cflow_icmp_type, + {"ICMP Type", "cflow.icmp_type", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_igmp_type, + {"IGMP Type", "cflow.igmp_type", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_sampling_interval, + {"Sampling interval", "cflow.sampling_interval", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_sampling_algorithm, + {"Sampling algorithm", "cflow.sampling_algorithm", + FT_UINT8, BASE_DEC, VALS(v5_sampling_mode), 0x0, + NULL, HFILL} + }, + {&hf_cflow_flow_active_timeout, + {"Flow active timeout", "cflow.flow_active_timeout", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_flow_inactive_timeout, + {"Flow inactive timeout", "cflow.flow_inactive_timeout", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + + /* + * begin pdu content storage + */ + {&hf_cflow_srcaddr, + {"SrcAddr", "cflow.srcaddr", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Flow Source Address (IPv4)", HFILL} + }, + {&hf_cflow_srcaddr_v6, + {"SrcAddr", "cflow.srcaddrv6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Flow Source Address (IPv6)", HFILL} + }, + {&hf_cflow_srcnet, + {"SrcNet", "cflow.srcnet", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Flow Source Network", HFILL} + }, + {&hf_cflow_dstaddr, + {"DstAddr", "cflow.dstaddr", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Flow Destination Address (IPv4)", HFILL} + }, + {&hf_cflow_dstaddr_v6, + {"DstAddr", "cflow.dstaddrv6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Flow Destination Address (IPv6)", HFILL} + }, + {&hf_cflow_dstnet, + {"DstNet", "cflow.dstnet", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Flow Destination Network", HFILL} + }, + {&hf_cflow_nexthop, + {"NextHop", "cflow.nexthop", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Router nexthop (IPv4)", HFILL} + }, + {&hf_cflow_nexthop_v6, + {"NextHop", "cflow.nexthopv6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Router nexthop (IPv6)", HFILL} + }, + {&hf_cflow_bgpnexthop, + {"BGPNextHop", "cflow.bgpnexthop", + FT_IPv4, BASE_NONE, NULL, 0x0, + "BGP Router Nexthop (IPv4)", HFILL} + }, + {&hf_cflow_bgpnexthop_v6, + {"BGPNextHop", "cflow.bgpnexthopv6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "BGP Router Nexthop (IPv6)", HFILL} + }, + {&hf_cflow_inputint, + {"InputInt", "cflow.inputint", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Flow Input Interface", HFILL} + }, + {&hf_cflow_outputint, + {"OutputInt", "cflow.outputint", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Flow Output Interface", HFILL} + }, + {&hf_cflow_flows, + {"Flows", "cflow.flows", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Flows Aggregated in PDU", HFILL} + }, + {&hf_cflow_flows64, + {"Flows", "cflow.flows64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Flows Aggregated in PDU", HFILL} + }, + {&hf_cflow_packets, + {"Packets", "cflow.packets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of packets", HFILL} + }, + {&hf_cflow_packets64, + {"Packets", "cflow.packets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of packets", HFILL} + }, + {&hf_cflow_octets, + {"Octets", "cflow.octets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of bytes", HFILL} + }, + {&hf_cflow_octets64, + {"Octets", "cflow.octets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of bytes", HFILL} + }, + {&hf_cflow_length_min, + {"MinLength", "cflow.length_min", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Packet Length Min", HFILL} + }, + {&hf_cflow_length_max, + {"MaxLength", "cflow.length_max", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Packet Length Max", HFILL} + }, + {&hf_cflow_timedelta, + {"Duration", "cflow.timedelta", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "Duration of flow sample (end - start)", HFILL} + }, + {&hf_cflow_timestart, + {"StartTime", "cflow.timestart", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "Uptime at start of flow", HFILL} + }, + {&hf_cflow_timeend, + {"EndTime", "cflow.timeend", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + "Uptime at end of flow", HFILL} + }, + {&hf_cflow_srcport, + {"SrcPort", "cflow.srcport", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Flow Source Port", HFILL} + }, + {&hf_cflow_dstport, + {"DstPort", "cflow.dstport", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Flow Destination Port", HFILL} + }, + {&hf_cflow_prot, + {"Protocol", "cflow.protocol", + FT_UINT8, BASE_DEC, NULL, 0x0, + "IP Protocol", HFILL} + }, + {&hf_cflow_tos, + {"IP ToS", "cflow.tos", + FT_UINT8, BASE_HEX, NULL, 0x0, + "IP Type of Service", HFILL} + }, + {&hf_cflow_flags, + {"Export Flags", "cflow.flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + "CFlow Flags", HFILL} + }, + {&hf_cflow_tcpflags, + {"TCP Flags", "cflow.tcpflags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_srcas, + {"SrcAS", "cflow.srcas", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Source AS", HFILL} + }, + {&hf_cflow_dstas, + {"DstAS", "cflow.dstas", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Destination AS", HFILL} + }, + {&hf_cflow_srcmask, + {"SrcMask", "cflow.srcmask", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Source Prefix Mask", HFILL} + }, + {&hf_cflow_srcmask_v6, + {"SrcMask", "cflow.srcmaskv6", + FT_UINT8, BASE_DEC, NULL, 0x0, + "IPv6 Source Prefix Mask", HFILL} + }, + {&hf_cflow_dstmask, + {"DstMask", "cflow.dstmask", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Destination Prefix Mask", HFILL} + }, + {&hf_cflow_dstmask_v6, + {"DstMask", "cflow.dstmaskv6", + FT_UINT8, BASE_DEC, NULL, 0x0, + "IPv6 Destination Prefix Mask", HFILL} + }, + {&hf_cflow_routersc, + {"Router Shortcut", "cflow.routersc", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Router shortcut by switch", HFILL} + }, + {&hf_cflow_mulpackets, + {"MulticastPackets", "cflow.mulpackets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of multicast packets", HFILL} + }, + {&hf_cflow_muloctets, + {"MulticastOctets", "cflow.muloctets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of multicast octets", HFILL} + }, + {&hf_cflow_octets_exp, + {"OctetsExp", "cflow.octetsexp", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Octets exported", HFILL} + }, + {&hf_cflow_octets_exp64, + {"OctetsExp", "cflow.octetsexp64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Octets exported", HFILL} + }, + {&hf_cflow_packets_exp, + {"PacketsExp", "cflow.packetsexp", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Packets exported", HFILL} + }, + {&hf_cflow_packets_exp64, + {"PacketsExp", "cflow.packetsexp64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Packets exported", HFILL} + }, + {&hf_cflow_flows_exp, + {"FlowsExp", "cflow.flowsexp", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Flows exported", HFILL} + }, + {&hf_cflow_flows_exp64, + {"FlowsExp", "cflow.flowsexp64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Flows exported", HFILL} + }, + {&hf_cflow_srcprefix, + {"SrcPrefix", "cflow.srcprefix", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Flow Source Prefix", HFILL} + }, + {&hf_cflow_dstprefix, + {"DstPrefix", "cflow.dstprefix", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Flow Destination Prefix", HFILL} + }, + {&hf_cflow_mpls_top_label_type, + {"TopLabelType", "cflow.toplabeltype", + FT_UINT8, BASE_DEC, VALS(special_mpls_top_label_type), 0x0, + "Top MPLS label Type", HFILL} + }, + {&hf_cflow_mpls_pe_addr, + {"TopLabelAddr", "cflow.toplabeladdr", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Top MPLS label PE address", HFILL} + }, + {&hf_cflow_sampler_id, + {"SamplerID", "cflow.sampler_id", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Flow Sampler ID", HFILL} + }, + {&hf_cflow_sampler_mode, + {"SamplerMode", "cflow.sampler_mode", + FT_UINT8, BASE_DEC, VALS(v9_sampler_mode), 0x0, + "Flow Sampler Mode", HFILL} + }, + {&hf_cflow_sampler_random_interval, + {"SamplerRandomInterval", "cflow.sampler_random_interval", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Flow Sampler Random Interval", HFILL} + }, + {&hf_cflow_flow_class, + {"FlowClass", "cflow.flow_class", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Flow Class", HFILL} + }, + {&hf_cflow_ttl_minimum, + {"MinTTL", "cflow.ttl_min", + FT_UINT8, BASE_DEC, NULL, 0x0, + "TTL minimum", HFILL} + }, + {&hf_cflow_ttl_maximum, + {"MaxTTL", "cflow.ttl_max", + FT_UINT8, BASE_DEC, NULL, 0x0, + "TTL maximum", HFILL} + }, + {&hf_cflow_ipv4_id, + {"IPv4Ident", "cflow.ipv4_ident", + FT_UINT16, BASE_DEC, NULL, 0x0, + "IPv4 Identifier", HFILL} + }, + {&hf_cflow_ip_version, + {"IPVersion", "cflow.ip_version", + FT_BYTES, BASE_NONE, NULL, 0x0, + "IP Version", HFILL} + }, + {&hf_cflow_direction, + {"Direction", "cflow.direction", + FT_UINT8, BASE_DEC, VALS(v9_direction), 0x0, + NULL, HFILL} + }, + {&hf_cflow_if_name, + {"IfName", "cflow.if_name", + FT_STRINGZ/*FT_BYTES*/, BASE_NONE, NULL, 0x0, + "SNMP Interface Name", HFILL} + }, + {&hf_cflow_if_descr, + {"IfDescr", "cflow.if_descr", + FT_STRINGZ/*FT_BYTES*/, BASE_NONE, NULL, 0x0, + "SNMP Interface Description", HFILL} + }, + {&hf_cflow_sampler_name, + {"SamplerName", "cflow.sampler_name", + FT_STRINGZ/*FT_BYTES*/, BASE_NONE, NULL, 0x0, + "Sampler Name", HFILL} + }, + {&hf_cflow_forwarding_status, + {"ForwdStat", "cflow.forwarding_status", + FT_UINT8, BASE_DEC, VALS(v9_forwarding_status), 0xC0, + "Forwarding Status", HFILL} + }, + {&hf_cflow_forwarding_status_unknown_code, + {"ForwdCode", "cflow.forwarding_status_unknown_code", + FT_UINT8, BASE_DEC, VALS(v9_forwarding_status_unknown_code), 0x3F, + NULL, HFILL} + }, + {&hf_cflow_forwarding_status_forward_code, + {"ForwdCode", "cflow.forwarding_status_foreward_code", + FT_UINT8, BASE_DEC, VALS(v9_forwarding_status_forward_code), 0x3F, + NULL, HFILL} + }, + {&hf_cflow_forwarding_status_drop_code, + {"ForwdCode", "cflow.forwarding_status_drop_code", + FT_UINT8, BASE_DEC, VALS(v9_forwarding_status_drop_code), 0x3F, + NULL, HFILL} + }, + {&hf_cflow_forwarding_status_consume_code, + {"ForwdCode", "cflow.forwarding_status_consume_code", + FT_UINT8, BASE_DEC, VALS(v9_forwarding_status_consume_code), 0x3F, + NULL, HFILL} + }, + {&hf_cflow_nbar_appl_desc, + {"ApplicationDesc", "cflow.appl_desc", + FT_STRINGZ, BASE_NONE, NULL, 0x0, + "Application Desc (NBAR)", HFILL} + }, + {&hf_cflow_nbar_appl_id, + {"ApplicationID", "cflow.appl_id", + FT_UINT32, BASE_CUSTOM, nbar_fmt_id, 0x0, + "Application ID (NBAR)", HFILL} + }, + {&hf_cflow_nbar_appl_name, + {"ApplicationName", "cflow.appl_name", + FT_STRINGZ, BASE_NONE, NULL, 0x0, + "Application Name (NBAR)", HFILL} + }, + {&hf_cflow_peer_srcas, + {"PeerSrcAS", "cflow.peer_srcas", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Peer Source AS", HFILL} + }, + {&hf_cflow_peer_dstas, + {"PeerDstAS", "cflow.peer_dstas", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Peer Destination AS", HFILL} + }, + {&hf_cflow_flow_exporter, + {"FlowExporter", "cflow.flow_exporter", + FT_BYTES/*FT_IPv4*/, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_icmp_ipv4_type, + {"IPv4 ICMP Type", "cflow.icmp_ipv4_type", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_icmp_ipv4_code, + {"IPv4 ICMP Code", "cflow.icmp_ipv4_code", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_icmp_ipv6_type, + {"IPv6 ICMP Type", "cflow.icmp_ipv6_type", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_icmp_ipv6_code, + {"IPv6 ICMP Code", "cflow.icmp_ipv6_code", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_tcp_window_size, + {"TCP Windows Size", "cflow.tcp_windows_size", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ipv4_total_length, + {"IPV4 Total Length", "cflow.ipv4_total_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ip_ttl, + {"IP TTL", "cflow.ip_ttl", + FT_UINT8, BASE_DEC, NULL, 0x0, + "IP time to live", HFILL} + }, + {&hf_cflow_ip_tos, + {"IP TOS", "cflow.ip_tos", + FT_UINT8, BASE_DEC, NULL, 0x0, + "IP type of service", HFILL} + }, + {&hf_cflow_ip_dscp, + {"DSCP", "cflow.ip_dscp", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_octets_squared64, + {"OctetsSquared", "cflow.octets_squared", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_udp_length, + {"UDP Length", "cflow.udp_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_is_multicast, + {"IsMulticast", "cflow.is_multicast", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ip_header_words, + {"IPHeaderLen", "cflow.ip_header_words", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_option_map, + {"OptionMap", "cflow.option_map", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_section_header, + {"SectionHeader", "cflow.section_header", + FT_BYTES, BASE_NONE, NULL, 0x0, + "Header of Packet", HFILL} + }, + {&hf_cflow_section_payload, + {"SectionPayload", "cflow.section_payload", + FT_BYTES, BASE_NONE, NULL, 0x0, + "Payload of Packet", HFILL} + }, + /* IPFIX Information Elements */ + {&hf_cflow_post_octets, + {"Post Octets", "cflow.post_octets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of post bytes", HFILL} + }, + {&hf_cflow_post_octets64, + {"Post Octets", "cflow.post_octets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of post bytes", HFILL} + }, + {&hf_cflow_post_packets, + {"Post Packets", "cflow.post_packets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of post packets", HFILL} + }, + {&hf_cflow_post_packets64, + {"Post Packets", "cflow.post_packets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of post packets", HFILL} + }, + {&hf_cflow_ipv6_flowlabel, + {"ipv6FlowLabel", "cflow.ipv6flowlabel", + FT_UINT32, BASE_DEC, NULL, 0x0, + "IPv6 Flow Label", HFILL} + }, + {&hf_cflow_ipv6_flowlabel24, + {"ipv6FlowLabel", "cflow.ipv6flowlabel24", + FT_UINT32, BASE_DEC, NULL, 0x0, + "IPv6 Flow Label", HFILL} + }, + {&hf_cflow_post_tos, + {"Post IP ToS", "cflow.post_tos", + FT_UINT8, BASE_HEX, NULL, 0x0, + "Post IP Type of Service", HFILL} + }, + {&hf_cflow_srcmac, + {"Source Mac Address", "cflow.srcmac", + FT_ETHER, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_dstmac, + {"Post Destination Mac Address", "cflow.post_dstmac", + FT_ETHER, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_vlanid, + {"Vlan Id", "cflow.vlanid", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_vlanid, + {"Post Vlan Id", "cflow.post_vlanid", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ipv6_exthdr, + {"IPv6 Extension Headers", "cflow.ipv6_exthdr", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_dstmac, + {"Destination Mac Address", "cflow.dstmac", + FT_ETHER, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_srcmac, + {"Post Source Mac Address", "cflow.post_srcmac", + FT_ETHER, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_permanent_packets, + {"Permanent Packets", "cflow.permanent_packets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Running Count of packets for permanent flows", HFILL} + }, + {&hf_cflow_permanent_packets64, + {"Permanent Packets", "cflow.permanent_packets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Running Count of packets for permanent flows", HFILL} + }, + {&hf_cflow_permanent_octets, + {"Permanent Octets", "cflow.permanent_octets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Running Count of bytes for permanent flows", HFILL} + }, + {&hf_cflow_permanent_octets64, + {"Permanent Octets", "cflow.permanent_octets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Running Count of bytes for permanent flows", HFILL} + }, + {&hf_cflow_fragment_offset, + {"Fragment Offset", "cflow.fragment_offset", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_mpls_vpn_rd, + {"MPLS VPN RD", "cflow.mpls_vpn_rd", + FT_BYTES, BASE_NONE, NULL, 0x0, + "MPLS VPN Route Distinguisher", HFILL} + }, + {&hf_cflow_mpls_top_label_prefix_length, + {"Mpls Top Label Prefix Length", "cflow.mpls_top_label_prefix_length", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_ip_diff_serv_code_point, + {"Post Ip Diff Serv Code Point", "cflow.post_ip_diff_serv_code_point", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_multicast_replication_factor, + {"Multicast Replication Factor", "cflow.multicast_replication_factor", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_exporter_addr, + {"ExporterAddr", "cflow.exporter_addr", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Flow Exporter Address", HFILL} + }, + {&hf_cflow_exporter_addr_v6, + {"ExporterAddr", "cflow.exporter_addr_v6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Flow Exporter Address", HFILL} + }, + {&hf_cflow_drop_octets, + {"Dropped Octets", "cflow.drop_octets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of dropped bytes", HFILL} + }, + {&hf_cflow_drop_octets64, + {"Dropped Octets", "cflow.drop_octets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of dropped bytes", HFILL} + }, + {&hf_cflow_drop_packets, + {"Dropped Packets", "cflow.drop_packets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of dropped packets", HFILL} + }, + {&hf_cflow_drop_packets64, + {"Dropped Packets", "cflow.drop_packets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of dropped packets", HFILL} + }, + {&hf_cflow_drop_total_octets, + {"Dropped Total Octets", "cflow.drop_total_octets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of total dropped bytes", HFILL} + }, + {&hf_cflow_drop_total_octets64, + {"Dropped Total Octets", "cflow.drop_total_octets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of total dropped bytes", HFILL} + }, + {&hf_cflow_drop_total_packets, + {"Dropped Total Packets", "cflow.drop_total_packets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of total dropped packets", HFILL} + }, + {&hf_cflow_drop_total_packets64, + {"Dropped Total Packets", "cflow.drop_total_packets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of total dropped packets", HFILL} + }, + {&hf_cflow_flow_end_reason, + {"Flow End Reason", "cflow.flow_end_reason", + FT_UINT8, BASE_DEC, VALS(v9_flow_end_reason), 0x0, + NULL, HFILL} + }, + {&hf_cflow_common_properties_id, + {"Common Properties Id", "cflow.common_properties_id", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_observation_point_id, + {"Observation Point Id", "cflow.observation_point_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_mpls_pe_addr_v6, + {"TopLabelAddr V6", "cflow.toplabeladdr_v6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Top MPLS label PE address IPv6", HFILL} + }, + {&hf_cflow_port_id, + {"Port Id", "cflow.port_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_mp_id, + {"Metering Process Id", "cflow.mp_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_wlan_channel_id, + {"Wireless LAN Channel Id", "cflow.wlan_channel_id", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_wlan_ssid, + {"Wireless LAN SSId", "cflow.wlan_ssid", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_flow_id, + {"Flow Id", "cflow.flow_id", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_od_id, + {"Observation Domain Id", "cflow.od_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Identifier of an Observation Domain that is locally unique to an Exporting Process", HFILL} + }, + {&hf_cflow_sys_init_time, + {"System Init Time", "cflow.sys_init_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_abstimestart, + {"StartTime", "cflow.abstimestart", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + "Uptime at start of flow", HFILL} + }, + {&hf_cflow_abstimeend, + {"EndTime", "cflow.abstimeend", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + "Uptime at end of flow", HFILL} + }, + {&hf_cflow_dstnet_v6, + {"DstNet", "cflow.dstnetv6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Flow Destination Network (IPv6)", HFILL} + }, + {&hf_cflow_srcnet_v6, + {"SrcNet", "cflow.srcnetv6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Flow Source Network (IPv6)", HFILL} + }, + {&hf_cflow_ignore_packets, + {"Ignored Packets", "cflow.ignore_packets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of ignored packets", HFILL} + }, + {&hf_cflow_ignore_packets64, + {"Ignored Packets", "cflow.ignore_packets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of ignored packets", HFILL} + }, + {&hf_cflow_ignore_octets, + {"Ignored Octets", "cflow.ignore_octets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of ignored octets", HFILL} + }, + {&hf_cflow_ignore_octets64, + {"Ignored Octets", "cflow.ignore_octets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of ignored octets", HFILL} + }, + {&hf_cflow_notsent_flows, + {"Not Sent Flows", "cflow.notsent_flows", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of not sent flows", HFILL} + }, + {&hf_cflow_notsent_flows64, + {"Not Sent Flows", "cflow.notsent_flows64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of not sent flows", HFILL} + }, + {&hf_cflow_notsent_packets, + {"Not Sent Packets", "cflow.notsent_packets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of not sent packets", HFILL} + }, + {&hf_cflow_notsent_packets64, + {"Not Sent Packets", "cflow.notsent_packets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of not sent packets", HFILL} + }, + {&hf_cflow_notsent_octets, + {"Not Sent Octets", "cflow.notsent_octets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of not sent octets", HFILL} + }, + {&hf_cflow_notsent_octets64, + {"Not Sent Octets", "cflow.notsent_octets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of not sent octets", HFILL} + }, + {&hf_cflow_post_total_octets, + {"Post Total Octets", "cflow.post_total_octets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of post total octets", HFILL} + }, + {&hf_cflow_post_total_octets64, + {"Post Total Octets", "cflow.post_total_octets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of post total octets", HFILL} + }, + {&hf_cflow_post_total_packets, + {"Post Total Packets", "cflow.post_total_packets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of post total packets", HFILL} + }, + {&hf_cflow_post_total_packets64, + {"Post Total Packets", "cflow.post_total_packets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of post total packets", HFILL} + }, + {&hf_cflow_key, + {"floKeyIndicator", "cflow.post_key", + FT_BOOLEAN, BASE_NONE, NULL, 0x0, + "Flow Key Indicator", HFILL} + }, + {&hf_cflow_post_total_mulpackets, + {"Post Total Multicast Packets", "cflow.post_total_mulpackets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of post total multicast packets", HFILL} + }, + {&hf_cflow_post_total_mulpackets64, + {"Post Total Multicast Packets", "cflow.post_total_mulpackets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of post total multicast packets", HFILL} + }, + {&hf_cflow_post_total_muloctets, + {"Post Total Multicast Octets", "cflow.post_total_muloctets", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Count of post total multicast octets", HFILL} + }, + {&hf_cflow_post_total_muloctets64, + {"Post Total Multicast Octets", "cflow.post_total_muloctets64", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of post total multicast octets", HFILL} + }, + {&hf_cflow_tcp_seq_num, + {"TCP Sequence Number", "cflow.tcp_seq_num", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_tcp_ack_num, + {"TCP Acknowledgement Number", "cflow.tcp_ack_num", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_tcp_urg_ptr, + {"TCP Urgent Pointer", "cflow.tcp_urg_ptr", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_tcp_header_length, + {"TCP Header Length", "cflow.tcp_header_length", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ip_header_length, + {"IP Header Length", "cflow.ip_header_length", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ipv6_payload_length, + {"IPv6 Payload Length", "cflow.ipv6_payload_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ipv6_next_hdr, + {"IPv6 Next Header", "cflow.ipv6_next_hdr", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ip_precedence, + {"IP Precedence", "cflow.ip_precedence", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ip_fragment_flags, + {"IP Fragment Flags", "cflow.ip_fragment_flags", + FT_UINT8, BASE_HEX, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_mpls_top_label_ttl, + {"MPLS Top Label TTL", "cflow.mpls_top_label_ttl", + FT_UINT8, BASE_DEC, NULL, 0x0, + "MPLS top label time to live", HFILL} + }, + {&hf_cflow_mpls_label_length, + {"MPLS Label Stack Length", "cflow.mpls_label_length", + FT_UINT32, BASE_DEC, NULL, 0x0, + "The length of the MPLS label stac", HFILL} + }, + {&hf_cflow_mpls_label_depth, + {"MPLS Label Stack Depth", "cflow.mpls_label_depth", + FT_UINT32, BASE_DEC, NULL, 0x0, + "The number of labels in the MPLS label stack", HFILL} + }, + {&hf_cflow_ip_payload_length, + {"IP Payload Length", "cflow.ip_payload_length", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_mpls_top_label_exp, + {"MPLS Top Label Exp", "cflow.mpls_top_label_exp", + FT_UINT8, BASE_OCT, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_tcp_option_map, + {"TCP OptionMap", "cflow.tcp_option_map", + FT_BYTES, BASE_NONE, NULL, 0x0, + "TCP Option Map", HFILL} + }, + {&hf_cflow_collector_addr, + {"CollectorAddr", "cflow.collector_addr", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Flow Collector Address (IPv4)", HFILL} + }, + {&hf_cflow_collector_addr_v6, + {"CollectorAddr", "cflow.collector_addr_v6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Flow Collector Address (IPv6)", HFILL} + }, + {&hf_cflow_export_interface, + {"ExportInterface", "cflow.export_interface", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_export_protocol_version, + {"ExportProtocolVersion", "cflow.export_protocol_version", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_export_prot, + {"ExportTransportProtocol", "cflow.exporter_protocol", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Transport Protocol used by the Exporting Process", HFILL} + }, + {&hf_cflow_collector_port, + {"CollectorPort", "cflow.collector_port", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Flow Collector Port", HFILL} + }, + {&hf_cflow_exporter_port, + {"ExporterPort", "cflow.exporter_port", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Flow Exporter Port", HFILL} + }, + {&hf_cflow_total_tcp_syn, + {"Total TCP syn", "cflow.total_tcp_syn", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of total TCP syn", HFILL} + }, + {&hf_cflow_total_tcp_fin, + {"Total TCP fin", "cflow.total_tcp_fin", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of total TCP fin", HFILL} + }, + {&hf_cflow_total_tcp_rst, + {"Total TCP rst", "cflow.total_tcp_rst", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of total TCP rst", HFILL} + }, + {&hf_cflow_total_tcp_psh, + {"Total TCP psh", "cflow.total_tcp_psh", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of total TCP psh", HFILL} + }, + {&hf_cflow_total_tcp_ack, + {"Total TCP ack", "cflow.total_tcp_ack", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of total TCP ack", HFILL} + }, + {&hf_cflow_total_tcp_urg, + {"Total TCP urg", "cflow.total_tcp_urg", + FT_UINT64, BASE_DEC, NULL, 0x0, + "Count of total TCP urg", HFILL} + }, + {&hf_cflow_ip_total_length, + {"IP Total Length", "cflow.ip_total_length", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_natsource_ipv4_address, + {"Post NAT Source IPv4 Address", "cflow.post_natsource_ipv4_address", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_natdestination_ipv4_address, + {"Post NAT Destination IPv4 Address", "cflow.post_natdestination_ipv4_address", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_naptsource_transport_port, + {"Post NAPT Source Transport Port", "cflow.post_naptsource_transport_port", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_naptdestination_transport_port, + {"Post NAPT Destination Transport Port", "cflow.post_naptdestination_transport_port", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_nat_originating_address_realm, + {"Nat Originating Address Realm", "cflow.nat_originating_address_realm", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_nat_event, + {"Nat Event", "cflow.nat_event", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_initiator_octets, + {"Initiator Octets", "cflow.initiator_octets", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_responder_octets, + {"Responder Octets", "cflow.responder_octets", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_firewall_event, + {"Firewall Event", "cflow.firewall_event", + FT_UINT8, BASE_DEC, VALS(v9_firewall_event), 0x0, + NULL, HFILL} + }, + {&hf_cflow_ingress_vrfid, + {"Ingress VRFID", "cflow.ingress_vrfid", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_egress_vrfid, + {"Egress VRFID", "cflow.egress_vrfid", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_vrfname, + {"VRFname", "cflow.vrfname", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_mpls_top_label_exp, + {"Post Mpls Top Label Exp", "cflow.post_mpls_top_label_exp", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_tcp_window_scale, + {"Tcp Window Scale", "cflow.tcp_window_scale", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_biflow_direction, + {"Biflow Direction", "cflow.biflow_direction", + FT_UINT8, BASE_DEC, VALS(v9_biflow_direction), 0x0, + NULL, HFILL} + }, + {&hf_cflow_ethernet_header_length, + {"Ethernet Header Length", "cflow.ethernet_header_length", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ethernet_payload_length, + {"Ethernet Payload Length", "cflow.ethernet_payload_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ethernet_total_length, + {"Ethernet Total Length", "cflow.ethernet_total_length", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_dot1q_vlan_id, + {"Dot1q Vlan Id", "cflow.dot1q_vlan_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_dot1q_priority, + {"Dot1q Priority", "cflow.dot1q_priority", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_dot1q_customer_vlan_id, + {"Dot1q Customer Vlan Id", "cflow.dot1q_customer_vlan_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_dot1q_customer_priority, + {"Dot1q Customer Priority", "cflow.dot1q_customer_priority", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_metro_evc_id, + {"Metro Evc Id", "cflow.metro_evc_id", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_metro_evc_type, + {"Metro Evc Type", "cflow.metro_evc_type", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_pseudo_wire_id, + {"Pseudo Wire Id", "cflow.pseudo_wire_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_pseudo_wire_type, + {"Pseudo Wire Type", "cflow.pseudo_wire_type", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_pseudo_wire_control_word, + {"Pseudo Wire Control Word", "cflow.pseudo_wire_control_word", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ingress_physical_interface, + {"Ingress Physical Interface", "cflow.ingress_physical_interface", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_egress_physical_interface, + {"Egress Physical Interface", "cflow.egress_physical_interface", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_dot1q_vlan_id, + {"Post Dot1q Vlan Id", "cflow.post_dot1q_vlan_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_dot1q_customer_vlan_id, + {"Post Dot1q Customer Vlan Id", "cflow.post_dot1q_customer_vlan_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_ethernet_type, + {"Ethernet Type", "cflow.ethernet_type", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_post_ip_precedence, + {"Post Ip Precedence", "cflow.post_ip_precedence", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_collection_time_milliseconds, + {"Collection Time Milliseconds", "cflow.collection_time_milliseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_export_sctp_stream_id, + {"Export Sctp Stream Id", "cflow.export_sctp_stream_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_max_export_seconds, + {"Max Export Seconds", "cflow.max_export_seconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_max_flow_end_seconds, + {"Max Flow End Seconds", "cflow.max_flow_end_seconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_message_md5_checksum, + {"Message MD5 Checksum", "cflow.message_md5_checksum", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_message_scope, + {"Message Scope", "cflow.message_scope", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_min_export_seconds, + {"Min Export Seconds", "cflow.min_export_seconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_min_flow_start_seconds, + {"Min Flow Start Seconds", "cflow.min_flow_start_seconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_opaque_octets, + {"Opaque Octets", "cflow.opaque_octets", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_session_scope, + {"Session Scope", "cflow.session_scope", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_max_flow_end_microseconds, + {"Max Flow End Microseconds", "cflow.max_flow_end_microseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_max_flow_end_milliseconds, + {"Max Flow End Milliseconds", "cflow.max_flow_end_milliseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_max_flow_end_nanoseconds, + {"Max Flow End Nanoseconds", "cflow.max_flow_end_nanoseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_min_flow_start_microseconds, + {"Min Flow Start Microseconds", "cflow.min_flow_start_microseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_min_flow_start_milliseconds, + {"Min Flow Start Milliseconds", "cflow.min_flow_start_milliseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_min_flow_start_nanoseconds, + {"Min Flow Start Nanoseconds", "cflow.min_flow_start_nanoseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_collector_certificate, + {"Collector Certificate", "cflow.collector_certificate", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_exporter_certificate, + {"Exporter Certificate", "cflow.exporter_certificate", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_selection_sequence_id, + {"Selection Sequence Id", "cflow.selection_sequence_id", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_selector_id, + {"Selector Id", "cflow.selector_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_information_element_id, + {"Information Element Id", "cflow.information_element_id", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_selector_algorithm, + {"Selector Algorithm", "cflow.selector_algorithm", + FT_UINT16, BASE_DEC|BASE_EXT_STRING, &selector_algorithm_ext, 0x0, + NULL, HFILL} + }, + {&hf_cflow_sampling_packet_interval, + {"Sampling Packet Interval", "cflow.sampling_packet_interval", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_sampling_packet_space, + {"Sampling Packet Space", "cflow.sampling_packet_space", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_sampling_time_interval, + {"Sampling Time Interval", "cflow.sampling_time_interval", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_sampling_time_space, + {"Sampling Time Space", "cflow.sampling_time_space", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_sampling_size, + {"Sampling Size", "cflow.sampling_size", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_sampling_population, + {"Sampling Population", "cflow.sampling_population", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_sampling_probability, + {"Sampling Probability", "cflow.sampling_probability", + FT_FLOAT, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_mpls_label_stack_section, + {"Mpls Label Stack Section", "cflow.mpls_label_stack_section", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_mpls_payload_packet_section, + {"Mpls Payload Packet Section", "cflow.mpls_payload_packet_section", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_selector_id_total_pkts_observed, + {"Selector Id Total Pkts Observed", "cflow.selector_id_total_pkts_observed", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_selector_id_total_pkts_selected, + {"Selector Id Total Pkts Selected", "cflow.selector_id_total_pkts_selected", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_absolute_error, + {"Absolute Error", "cflow.absolute_error", + FT_FLOAT, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_relative_error, + {"Relative Error", "cflow.relative_error", + FT_FLOAT, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_observation_time_seconds, + {"Observation Time Seconds", "cflow.observation_time_seconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_observation_time_milliseconds, + {"Observation Time Milliseconds", "cflow.observation_time_milliseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_observation_time_microseconds, + {"Observation Time Microseconds", "cflow.observation_time_microseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_observation_time_nanoseconds, + {"Observation Time Nanoseconds", "cflow.observation_time_nanoseconds", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_digest_hash_value, + {"Digest Hash Value", "cflow.digest_hash_value", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_hash_ippayload_offset, + {"Hash IPPayload Offset", "cflow.hash_ippayload_offset", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_hash_ippayload_size, + {"Hash IPPayload Size", "cflow.hash_ippayload_size", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_hash_output_range_min, + {"Hash Output Range Min", "cflow.hash_output_range_min", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_hash_output_range_max, + {"Hash Output Range Max", "cflow.hash_output_range_max", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_hash_selected_range_min, + {"Hash Selected Range Min", "cflow.hash_selected_range_min", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_hash_selected_range_max, + {"Hash Selected Range Max", "cflow.hash_selected_range_max", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_hash_digest_output, + {"Hash Digest Output", "cflow.hash_digest_output", + FT_BOOLEAN, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_hash_initialiser_value, + {"Hash Initialiser Value", "cflow.hash_initialiser_value", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_selector_name, + {"Selector Name", "cflow.selector_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_upper_cilimit, + {"Upper CILimit", "cflow.upper_cilimit", + FT_FLOAT, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_lower_cilimit, + {"Lower CILimit", "cflow.lower_cilimit", + FT_FLOAT, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_confidence_level, + {"Confidence Level", "cflow.confidence_level", + FT_FLOAT, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_information_element_data_type, + {"Information Element Data Type", "cflow.information_element_data_type", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_information_element_description, + {"Information Element Description", "cflow.information_element_description", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_information_element_name, + {"Information Element Name", "cflow.information_element_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_information_element_range_begin, + {"Information Element Range Begin", "cflow.information_element_range_begin", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_information_element_range_end, + {"Information Element Range End", "cflow.information_element_range_end", + FT_UINT64, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_information_element_semantics, + {"Information Element Semantics", "cflow.information_element_semantics", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_information_element_units, + {"Information Element Units", "cflow.information_element_units", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_private_enterprise_number, + {"Private Enterprise Number", "cflow.private_enterprise_number", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* + * end pdu content storage + */ + {&hf_cflow_scope_system, + {"ScopeSystem", "cflow.scope_system", + FT_BYTES, BASE_NONE, NULL, 0x0, + "Option Scope System", HFILL} + }, + {&hf_cflow_scope_interface, + {"ScopeInterface", "cflow.scope_interface", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Option Scope Interface", HFILL} + }, + {&hf_cflow_scope_linecard, + {"ScopeLinecard", "cflow.scope_linecard", + FT_BYTES, BASE_NONE, NULL, 0x0, + "Option Scope Linecard", HFILL} + }, + {&hf_cflow_scope_cache, + {"ScopeCache", "cflow.scope_cache", + FT_BYTES, BASE_NONE, NULL, 0x0, + "Option Scope Cache", HFILL} + }, + {&hf_cflow_scope_template, + {"ScopeTemplate", "cflow.scope_template", + FT_BYTES, BASE_NONE, NULL, 0x0, + "Option Scope Template", HFILL} + }, + + /* IPFIX */ + {&hf_cflow_unknown_field_type, + {"Unknown Field Type", "cflow.unknown_field_type", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_template_ipfix_total_field_count, + {"Total Field Count", "cflow.template_ipfix_total_field_count", + FT_UINT16, BASE_DEC, NULL, 0x0, + "IPFIX Options Template Total Field Count", HFILL} + }, + {&hf_cflow_template_ipfix_scope_field_count, + {"Scope Field Count", "cflow.template_ipfix_scope_field_count", + FT_UINT16, BASE_DEC, NULL, 0x0, + "IPFIX Options Template Scope Field Count", HFILL} + }, + {&hf_cflow_template_ipfix_pen_provided, + {"Pen provided", "cflow.template_ipfix_pen_provided", + FT_BOOLEAN, 16, TFS(&tfs_yes_no), 0x8000, + "Is Template Enterprise Specific", HFILL} + }, + {&hf_cflow_template_ipfix_field_type, + {"Type", "cflow.template_ipfix_field_type", + FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v9_v10_template_types_ext, 0x7FFF, + "Template field type", HFILL} + }, + {&hf_cflow_template_plixer_field_type, + {"Type", "cflow.template_plixer_field_type", + FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v10_template_types_plixer_ext, 0x7FFF, + "Template field type", HFILL} + }, + {&hf_cflow_template_ntop_field_type, + {"Type", "cflow.template_ntop_field_type", + FT_UINT16, BASE_DEC|BASE_EXT_STRING, &v10_template_types_ntop_ext, 0x7FFF, + "Template field type", HFILL} + }, + {&hf_cflow_template_ipfix_field_type_enterprise, + {"Type", "cflow.template_ipfix_field_type_enterprise", + FT_UINT16, BASE_DEC, NULL, 0x7FFF, + "Template field type", HFILL} + }, + {&hf_cflow_template_ipfix_field_pen, + {"PEN", + "cflow.template_ipfix_field_pen", + FT_UINT32, BASE_DEC, NULL, 0x0, + "IPFIX Private Enterprise Number", HFILL} + }, + {&hf_cflow_packets_dropped, + {"Packets Dropped", + "cflow.packets_dropped", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_byte_rate, + {"Byte Rate", + "cflow.byte_rate", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_application_media_bytes, + {"Media Bytes", + "cflow.application_media_bytes", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_application_media_byte_rate, + {"Media Byte Rate", + "cflow.media_byte_rate", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_application_media_packets, + {"Media Packets", + "cflow.application_media_packets", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_application_media_packet_rate, + {"Media Packet Rate", + "cflow.media_packet_rate", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_application_media_event, + {"Media Event", + "cflow.application_media_event", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_monitor_event, + {"Monitor Event", + "cflow.monitor_event", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_timestamp_interval, + {"Timestamp Interval", + "cflow.timestamp_interval", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_packets_expected, + {"Transport Packets Expected", + "cflow.transport_packets_expected", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_round_trip_time_string, + {"Transport Round-Trip-Time", + "cflow.transport_rtt", + FT_UINT32, BASE_DEC, VALS(performance_monitor_specials), 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_round_trip_time, + {"Transport Round-Trip-Time", + "cflow.transport_rtt", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_event_packet_loss, + {"Transport Packet Loss Events", + "cflow.transport_packet_loss_event", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_packets_lost, + {"Transport Packets Lost", + "cflow.transport_packets_lost", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_packets_lost_string, + {"Transport Packets Lost", + "cflow.transport_packets_lost", + FT_UINT32, BASE_HEX, VALS(performance_monitor_specials), 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_packets_lost_rate, + {"Transport Packet Loss Rate", + "cflow.transport_packet_loss_rate", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_packets_lost_rate_string, + {"Transport Packet Loss Rate", + "cflow.transport_packet_loss_rate", + FT_UINT32, BASE_HEX, VALS(performance_monitor_specials) , 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_rtp_ssrc, + {"RTP SSRC", + "cflow.transport_rtp_ssrc", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_rtp_jitter_mean, + {"RTP Mean Jitter", + "cflow.transport_jitter_mean", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_rtp_jitter_mean_string, + {"RTP Mean Jitter", + "cflow.transport_jitter_mean", + FT_UINT32, BASE_HEX, VALS(performance_monitor_specials), 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_rtp_jitter_min, + {"RTP Min Jitter", + "cflow.transport_jitter_min", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_rtp_jitter_min_string, + {"RTP Min Jitter", + "cflow.transport_jitter_min", + FT_UINT32, BASE_HEX, VALS(performance_monitor_specials), 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_rtp_jitter_max, + {"RTP Max Jitter", + "cflow.transport_jitter_max", + FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_transport_rtp_jitter_max_string, + {"RTP Max Jitter", + "cflow.transport_jitter_max", + FT_UINT32, BASE_HEX, VALS(performance_monitor_specials), 0x0, + NULL, HFILL} + }, + /* Ericsson SE NAT Logging */ + {&hf_cflow_nat_context_id, + {"NAT Context ID", "cflow.nat_context_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Internal context ID", HFILL} + }, + {&hf_cflow_nat_context_name, + {"NAT Context Name", "cflow.nat_context_name", + FT_STRINGZ, BASE_NONE, NULL, 0x0, + "Zero terminated context Name", HFILL} + }, + {&hf_cflow_nat_assign_time, + {"NAT Assign Time", "cflow.nat_assign_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + "Seconds of UNIX timestamp for assign", HFILL} + }, + {&hf_cflow_nat_unassign_time, + {"NAT Unassign Time", "cflow.nat_unassign_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + "Seconds of UNIX timestamp for unassign", HFILL} + }, + {&hf_cflow_nat_int_addr, + {"Internal IPv4 address", "cflow.nat_int_addr", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_nat_ext_addr, + {"External IPv4 address", "cflow.nat_ext_addr", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_nat_ext_port_first, + {"NAT port start", "cflow.nat_ext_port_first", + FT_UINT16, BASE_DEC, NULL, 0x0, + "External L4 port start", HFILL} + }, + {&hf_cflow_nat_ext_port_last, + {"NAT port end", "cflow.nat_ext_port_last", + FT_UINT16, BASE_DEC, NULL, 0x0, + "External L4 port end", HFILL} + }, + /* Cisco ASA 5500 Series */ + {&hf_cflow_ingress_acl_id, + {"Ingress ACL ID", "cflow.ingress_acl_id", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_egress_acl_id, + {"Egress ACL ID", "cflow.egress_acl_id", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_cflow_fw_ext_event, + {"Extended firewall event code", "cflow.fw_ext_event", + FT_UINT16, BASE_DEC, VALS(v9_extended_firewall_event), 0x0, + NULL, HFILL} + }, + {&hf_cflow_aaa_username, + {"AAA username", "cflow.aaa_username", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + + {&hf_ipfix_enterprise_private_entry, + {"Enterprise Private entry", "cflow.enterprise_private_entry", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* Private Information Elements */ + + /* CACE Technologies, 32622 / 0 */ + {&hf_pie_cace_local_ipv4_address, + {"Local IPv4 Address", "cflow.pie.cace.localaddr4", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Local IPv4 Address (caceLocalIPv4Address)", HFILL} + }, + /* CACE Technologies, 32622 / 1 */ + {&hf_pie_cace_remote_ipv4_address, + {"Remote IPv4 Address", "cflow.pie.cace.remoteaddr4", + FT_IPv4, BASE_NONE, NULL, 0x0, + "Remote IPv4 Address (caceRemoteIPv4Address)", HFILL} + }, + /* CACE Technologies, 32622 / 2 */ + {&hf_pie_cace_local_ipv6_address, + {"Local IPv6 Address", "cflow.pie.cace.localaddr6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Local IPv6 Address (caceLocalIPv6Address)", HFILL} + }, + /* CACE Technologies, 32622 / 3 */ + {&hf_pie_cace_remote_ipv6_address, + {"Remote IPv6 Address", "cflow.pie.cace.remoteaddr6", + FT_IPv6, BASE_NONE, NULL, 0x0, + "Remote IPv6 Address (caceRemoteIPv6Address)", HFILL} + }, + /* CACE Technologies, 32622 / 4 */ + {&hf_pie_cace_local_port, + {"Local Port", "cflow.pie.cace.localport", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Local Transport Port (caceLocalTransportPort)", HFILL} + }, + /* CACE Technologies, 32622 / 5 */ + {&hf_pie_cace_remote_port, + {"Remote Port", "cflow.pie.cace.remoteport", + FT_UINT16, BASE_DEC, NULL, 0x0, + "Remote Transport Port (caceRemoteTransportPort)", HFILL} + }, + /* CACE Technologies, 32622 / 6 */ + {&hf_pie_cace_local_ipv4_id, + {"Local IPv4 ID", "cflow.pie.cace.localip4id", + FT_UINT16, BASE_DEC, NULL, 0x0, + "The IPv4 identification header field from a locally-originated packet (caceLocalIPv4id)", HFILL} + }, + /* CACE Technologies, 32622 / 7 */ + {&hf_pie_cace_local_icmp_id, + {"Local ICMP ID", "cflow.pie.cace.localicmpid", + FT_UINT16, BASE_DEC, NULL, 0x0, + "The ICMP identification header field from a locally-originated ICMPv4 or ICMPv6 echo request (caceLocalICMPid)", HFILL} + }, + /* CACE Technologies, 32622 / 8 */ + {&hf_pie_cace_local_uid, + {"Local User ID", "cflow.pie.cace.localuid", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Local User ID (caceLocalProcessUserId)", HFILL} + }, + /* CACE Technologies, 32622 / 9 */ + {&hf_pie_cace_local_pid, + {"Local Process ID", "cflow.pie.cace.localpid", + FT_UINT32, BASE_DEC, NULL, 0x0, + "Local Process ID (caceLocalProcessId)", HFILL} + }, + /* CACE Technologies, 32622 / 10 */ + {&hf_pie_cace_local_username_len, + {"Local Username Length", "cflow.pie.cace.localusernamelen", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Local User Name Length (caceLocalProcessUserName)", HFILL} + }, + /* CACE Technologies, 32622 / 10 */ + {&hf_pie_cace_local_username, + {"Local User Name", "cflow.pie.cace.localusername", + FT_STRING, BASE_NONE, NULL, 0x0, + "Local User Name (caceLocalProcessUserName)", HFILL} + }, + /* CACE Technologies, 32622 / 11 */ + {&hf_pie_cace_local_cmd_len, + {"Local Command Length", "cflow.pie.cace.localcmdlen", + FT_UINT8, BASE_DEC, NULL, 0x0, + "Local Command Length (caceLocalProcessCommand)", HFILL} + }, + /* CACE Technologies, 32622 / 11 */ + {&hf_pie_cace_local_cmd, + {"Local Command", "cflow.pie.cace.localcmd", + FT_STRING, BASE_NONE, NULL, 0x0, + "Local Command (caceLocalProcessCommand)", HFILL} + }, + /* ntop, 35632 / 80 */ + {&hf_pie_ntop_fragmented, + {"Fragmented","cflow.pie.ntop.fragmented", + FT_BOOLEAN, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 81 */ + {&hf_pie_ntop_fingerprint, + {"Fingerprint","cflow.pie.ntop.fingerprint", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 82 */ + {&hf_pie_ntop_client_nw_delay_sec, + {"Client_nw_delay_sec","cflow.pie.ntop.client_nw_delay_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 83 */ + {&hf_pie_ntop_client_nw_delay_usec, + {"Client_nw_delay_usec","cflow.pie.ntop.client_nw_delay_usec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 84 */ + {&hf_pie_ntop_server_nw_delay_sec, + {"Server_nw_delay_sec","cflow.pie.ntop.server_nw_delay_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 85 */ + {&hf_pie_ntop_server_nw_delay_usec, + {"Server_nw_delay_usec","cflow.pie.ntop.server_nw_delay_usec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 86 */ + {&hf_pie_ntop_appl_latency_sec, + {"Appl_latency_sec","cflow.pie.ntop.appl_latency_sec", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 98 */ + {&hf_pie_ntop_icmp_flags, + {"Icmp_flags","cflow.pie.ntop.icmp_flags", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 101 */ + {&hf_pie_ntop_src_ip_country, + {"Src_ip_country","cflow.pie.ntop.src_ip_country", + FT_STRINGZ, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 102 */ + {&hf_pie_ntop_src_ip_city, + {"Src_ip_city","cflow.pie.ntop.src_ip_city", + FT_STRINGZ, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 103 */ + {&hf_pie_ntop_dst_ip_country, + {"Dst_ip_country","cflow.pie.ntop.dst_ip_country", + FT_STRINGZ, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 104 */ + {&hf_pie_ntop_dst_ip_city, + {"Dst_ip_city","cflow.pie.ntop.dst_ip_city", + FT_STRINGZ, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 105 */ + {&hf_pie_ntop_flow_proto_port, + {"Flow_proto_port","cflow.pie.ntop.flow_proto_port", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 106 */ + {&hf_pie_ntop_tunnel_id, + {"Tunnel_id","cflow.pie.ntop.tunnel_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 107 */ + {&hf_pie_ntop_longest_flow_pkt, + {"Longest_flow_pkt","cflow.pie.ntop.longest_flow_pkt", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 108 */ + {&hf_pie_ntop_shortest_flow_pkt, + {"Shortest_flow_pkt","cflow.pie.ntop.shortest_flow_pkt", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 109 */ + {&hf_pie_ntop_retransmitted_in_pkts, + {"Retransmitted_in_pkts","cflow.pie.ntop.retransmitted_in_pkts", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 110 */ + {&hf_pie_ntop_retransmitted_out_pkts, + {"Retransmitted_out_pkts","cflow.pie.ntop.retransmitted_out_pkts", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 111 */ + {&hf_pie_ntop_ooorder_in_pkts, + {"Ooorder_in_pkts","cflow.pie.ntop.ooorder_in_pkts", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 112 */ + {&hf_pie_ntop_ooorder_out_pkts, + {"Ooorder_out_pkts","cflow.pie.ntop.ooorder_out_pkts", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 113 */ + {&hf_pie_ntop_untunneled_protocol, + {"Untunneled_protocol","cflow.pie.ntop.untunneled_protocol", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 114 */ + {&hf_pie_ntop_untunneled_ipv4_src_addr, + {"Untunneled_ipv4_src_addr","cflow.pie.ntop.untunneled_ipv4_src_addr", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 115 */ + {&hf_pie_ntop_untunneled_l4_src_port, + {"Untunneled_l4_src_port","cflow.pie.ntop.untunneled_l4_src_port", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 116 */ + {&hf_pie_ntop_untunneled_ipv4_dst_addr, + {"Untunneled_ipv4_dst_addr","cflow.pie.ntop.untunneled_ipv4_dst_addr", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 117 */ + {&hf_pie_ntop_untunneled_l4_dst_port, + {"Untunneled_l4_dst_port","cflow.pie.ntop.untunneled_l4_dst_port", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + + /* ntop, 35632 / 110 */ + {&hf_pie_ntop_dump_path, + {"Dump_path","cflow.pie.ntop.dump_path", + FT_STRINGZ, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 130 */ + {&hf_pie_ntop_sip_call_id, + {"Sip_call_id","cflow.pie.ntop.sip_call_id", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 131 */ + {&hf_pie_ntop_sip_calling_party, + {"Sip_calling_party","cflow.pie.ntop.sip_calling_party", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 132 */ + {&hf_pie_ntop_sip_called_party, + {"Sip_called_party","cflow.pie.ntop.sip_called_party", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 133 */ + {&hf_pie_ntop_sip_rtp_codecs, + {"Sip_rtp_codecs","cflow.pie.ntop.sip_rtp_codecs", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 134 */ + {&hf_pie_ntop_sip_invite_time, + {"Sip_invite_time","cflow.pie.ntop.sip_invite_time", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 135 */ + {&hf_pie_ntop_sip_trying_time, + {"Sip_trying_time","cflow.pie.ntop.sip_trying_time", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 136 */ + {&hf_pie_ntop_sip_ringing_time, + {"Sip_ringing_time","cflow.pie.ntop.sip_ringing_time", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 137 */ + {&hf_pie_ntop_sip_ok_time, + {"Sip_ok_time","cflow.pie.ntop.sip_ok_time", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 138 */ + {&hf_pie_ntop_sip_bye_time, + {"Sip_bye_time","cflow.pie.ntop.sip_bye_time", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 139 */ + {&hf_pie_ntop_sip_rtp_src_ip, + {"Sip_rtp_src_ip","cflow.pie.ntop.sip_rtp_src_ip", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 140 */ + {&hf_pie_ntop_sip_rtp_src_port, + {"Sip_rtp_src_port","cflow.pie.ntop.sip_rtp_src_port", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 141 */ + {&hf_pie_ntop_sip_rtp_dst_ip, + {"Sip_rtp_dst_ip","cflow.pie.ntop.sip_rtp_dst_ip", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 142 */ + {&hf_pie_ntop_sip_rtp_dst_port, + {"Sip_rtp_dst_port","cflow.pie.ntop.sip_rtp_dst_port", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 150 */ + {&hf_pie_ntop_rtp_first_ssrc, + {"Rtp_first_ssrc","cflow.pie.ntop.rtp_first_ssrc", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 151 */ + {&hf_pie_ntop_rtp_first_ts, + {"Rtp_first_ts","cflow.pie.ntop.rtp_first_ts", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 152 */ + {&hf_pie_ntop_rtp_last_ssrc, + {"Rtp_last_ssrc","cflow.pie.ntop.rtp_last_ssrc", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 153 */ + {&hf_pie_ntop_rtp_last_ts, + {"Rtp_last_ts","cflow.pie.ntop.rtp_last_ts", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 154 */ + {&hf_pie_ntop_rtp_in_jitter, + {"Rtp_in_jitter","cflow.pie.ntop.rtp_in_jitter", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 155 */ + {&hf_pie_ntop_rtp_out_jitter, + {"Rtp_out_jitter","cflow.pie.ntop.rtp_out_jitter", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 156 */ + {&hf_pie_ntop_rtp_in_pkt_lost, + {"Rtp_in_pkt_lost","cflow.pie.ntop.rtp_in_pkt_lost", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 157 */ + {&hf_pie_ntop_rtp_out_pkt_lost, + {"Rtp_out_pkt_lost","cflow.pie.ntop.rtp_out_pkt_lost", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 158 */ + {&hf_pie_ntop_rtp_out_payload_type, + {"Rtp_out_payload_type","cflow.pie.ntop.rtp_out_payload_type", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 159 */ + {&hf_pie_ntop_rtp_in_max_delta, + {"Rtp_in_max_delta","cflow.pie.ntop.rtp_in_max_delta", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 160 */ + {&hf_pie_ntop_rtp_out_max_delta, + {"Rtp_out_max_delta","cflow.pie.ntop.rtp_out_max_delta", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 168 */ + {&hf_pie_ntop_proc_id, + {"Proc_id","cflow.pie.ntop.proc_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 169 */ + {&hf_pie_ntop_proc_name, + {"Proc_name","cflow.pie.ntop.proc_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 180 */ + {&hf_pie_ntop_http_url, + {"Http_url","cflow.pie.ntop.http_url", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 181 */ + {&hf_pie_ntop_http_ret_code, + {"Http_ret_code","cflow.pie.ntop.http_ret_code", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 185 */ + {&hf_pie_ntop_smtp_mail_from, + {"Smtp_mail_from","cflow.pie.ntop.smtp_mail_from", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 186 */ + {&hf_pie_ntop_smtp_rcpt_to, + {"Smtp_rcpt_to","cflow.pie.ntop.smtp_rcpt_to", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 195 */ + {&hf_pie_ntop_mysql_server_version, + {"Mysql_server_version","cflow.pie.ntop.mysql_server_version", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 196 */ + {&hf_pie_ntop_mysql_username, + {"Mysql_username","cflow.pie.ntop.mysql_username", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 197 */ + {&hf_pie_ntop_mysql_db, + {"Mysql_db","cflow.pie.ntop.mysql_db", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 198 */ + {&hf_pie_ntop_mysql_query, + {"Mysql_query","cflow.pie.ntop.mysql_query", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* ntop, 35632 / 199 */ + {&hf_pie_ntop_mysql_response, + {"Mysql_response","cflow.pie.ntop.mysql_response", + FT_UINT16, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + + /* plixer, 13745 / 100 */ + {&hf_pie_plixer_client_ip_v4, + {"client_ip_v4","cflow.pie.plixer.client.ip_v4", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + {&hf_pie_plixer_client_hostname, + /* plixer, 13745 / 101 */ + {"client_hostname","cflow.pie.plixer.client_hostname", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 102 */ + {&hf_pie_plixer_partner_name, + {"Partner_name","cflow.pie.plixer.partner_name", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 103 */ + {&hf_pie_plixer_server_hostname, + {"Server_hostname","cflow.pie.plixer.server_hostname", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 104 */ + {&hf_pie_plixer_server_ip_v4, + {"Server_ip_v4","cflow.pie.plixer.server_ip_v4", + FT_IPv4, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 105 */ + {&hf_pie_plixer_recipient_address, + {"Recipient_address","cflow.pie.plixer.recipient_address", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 106 */ + {&hf_pie_plixer_event_id, + {"Event_id","cflow.pie.plixer.event_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 107 */ + {&hf_pie_plixer_msgid, + {"Msgid","cflow.pie.plixer.msgid", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 108 */ + {&hf_pie_plixer_priority, + {"Priority","cflow.pie.plixer_priority", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 109 */ + {&hf_pie_plixer_recipient_report_status, + {"Recipient_report_status","cflow.pie.plixer.recipient_report_status", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 110 */ + {&hf_pie_plixer_number_recipients, + {"Number_recipients","cflow.pie.plixer.number_recipients", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 111 */ + {&hf_pie_plixer_origination_time, + {"Origination_time","cflow.pie.plixer.origination_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 112 */ + {&hf_pie_plixer_encryption, + {"Cncryption","cflow.pie.plixer.encryption", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 113 */ + {&hf_pie_plixer_service_version, + {"Service_version","cflow.pie.plixer.service_version", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 114 */ + {&hf_pie_plixer_linked_msgid, + {"Linked_msgid","cflow.pie.plixer.linked_msgid", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 115 */ + {&hf_pie_plixer_message_subject, + {"Message_subject","cflow.pie.plixer.message_subject", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 116 */ + {&hf_pie_plixer_sender_address, + {"Sender_address","cflow.pie.plixer.sender_address", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL} + }, + /* plixer, 13745 / 117 */ + {&hf_pie_plixer_date_time, + {"Date_time","cflow.pie.plixer.date_time", + FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, + NULL, HFILL} + }, + + {&hf_string_len_short, + {"String_len_short","cflow.string_len_short", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + }, + {&hf_string_len_long, + {"String_len_short","cflow.string_len_long", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL} + } + + }; + + static gint *ett[] = { + &ett_netflow, + &ett_unixtime, + &ett_flow, + &ett_flowtime, + &ett_str_len, + &ett_template, + &ett_field, + &ett_dataflowset, + &ett_fwdstat + }; + + module_t *netflow_module; + + proto_netflow = proto_register_protocol("Cisco NetFlow/IPFIX", "CFLOW", "cflow"); + + proto_register_field_array(proto_netflow, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); + + /* Register our configuration options for NetFlow */ + netflow_module = prefs_register_protocol(proto_netflow, proto_reg_handoff_netflow); + + /* Set default Netflow port(s) */ + range_convert_str(&global_netflow_ports,NETFLOW_UDP_PORTS, MAX_UDP_PORT); + range_convert_str(&global_ipfix_ports, IPFIX_UDP_PORTS, MAX_UDP_PORT); + + prefs_register_obsolete_preference(netflow_module, "udp.port"); + + prefs_register_range_preference(netflow_module, "netflow.ports", + "NetFlow UDP Port(s)", + "Set the port(s) for NetFlow messages" + " (default: " NETFLOW_UDP_PORTS ")", + &global_netflow_ports, MAX_UDP_PORT); + + prefs_register_range_preference(netflow_module, "ipfix.ports", + "IPFIX UDP/TCP/SCTP Port(s)", + "Set the port(s) for IPFIX messages" + " (default: " IPFIX_UDP_PORTS ")", + &global_ipfix_ports, MAX_UDP_PORT); + + prefs_register_uint_preference(netflow_module, "max_template_fields", + "Maximum number of fields allowed in a template", + "Set the number of fields allowed in a template. " + "Use 0 (zero) for unlimited. " + " (default: " STRINGIFY(V9TEMPLATE_MAX_FIELDS_DEF) ")", + 10, &v9_tmplt_max_fields); + + register_init_routine(&netflow_init); } @@ -8126,74 +8044,73 @@ proto_register_netflow(void) static void netflow_delete_callback(guint32 port) { - if ( port ) { - dissector_delete_uint("udp.port", port, netflow_handle); - } + if ( port ) { + dissector_delete_uint("udp.port", port, netflow_handle); + } } static void netflow_add_callback(guint32 port) { - if ( port ) { - dissector_add_uint("udp.port", port, netflow_handle); - } + if ( port ) { + dissector_add_uint("udp.port", port, netflow_handle); + } } static void ipfix_delete_callback(guint32 port) { - if ( port ) { - dissector_delete_uint("udp.port", port, netflow_handle); - dissector_delete_uint("tcp.port", port, netflow_handle); - dissector_delete_uint("sctp.port", port, netflow_handle); - } + if ( port ) { + dissector_delete_uint("udp.port", port, netflow_handle); + dissector_delete_uint("tcp.port", port, netflow_handle); + dissector_delete_uint("sctp.port", port, netflow_handle); + } } static void ipfix_add_callback(guint32 port) { - if ( port ) { - dissector_add_uint("udp.port", port, netflow_handle); - dissector_add_uint("tcp.port", port, netflow_handle); - dissector_add_uint("sctp.port", port, netflow_handle); - } + if ( port ) { + dissector_add_uint("udp.port", port, netflow_handle); + dissector_add_uint("tcp.port", port, netflow_handle); + dissector_add_uint("sctp.port", port, netflow_handle); + } } void proto_reg_handoff_netflow(void) { - static gboolean netflow_prefs_initialized = FALSE; - static range_t *netflow_ports; - static range_t *ipfix_ports; - - if (!netflow_prefs_initialized) { - netflow_handle = new_create_dissector_handle(dissect_netflow, proto_netflow); - netflow_prefs_initialized = TRUE; - dissector_add_uint("wtap_encap", WTAP_ENCAP_RAW_IPFIX, netflow_handle); - } else { - range_foreach(netflow_ports, netflow_delete_callback); - g_free(netflow_ports); - range_foreach(ipfix_ports, ipfix_delete_callback); - g_free(ipfix_ports); - } - - netflow_ports = range_copy(global_netflow_ports); - ipfix_ports = range_copy(global_ipfix_ports); - - range_foreach(netflow_ports, netflow_add_callback); - range_foreach(ipfix_ports, ipfix_add_callback); - + static gboolean netflow_prefs_initialized = FALSE; + static range_t *netflow_ports; + static range_t *ipfix_ports; + + if (!netflow_prefs_initialized) { + netflow_handle = new_create_dissector_handle(dissect_netflow, proto_netflow); + netflow_prefs_initialized = TRUE; + dissector_add_uint("wtap_encap", WTAP_ENCAP_RAW_IPFIX, netflow_handle); + } else { + range_foreach(netflow_ports, netflow_delete_callback); + g_free(netflow_ports); + range_foreach(ipfix_ports, ipfix_delete_callback); + g_free(ipfix_ports); + } + + netflow_ports = range_copy(global_netflow_ports); + ipfix_ports = range_copy(global_ipfix_ports); + + range_foreach(netflow_ports, netflow_add_callback); + range_foreach(ipfix_ports, ipfix_add_callback); } /* * Editor modelines * * Local Variables: - * c-basic-offset: 8 + * c-basic-offset: 4 * tab-width: 8 - * indent-tabs-mode: t + * indent-tabs-mode: nil * End: * - * ex: set shiftwidth=8 tabstop=8 noexpandtab: - * :indentSize=8:tabSize=8:noTabs=false: + * ex: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ |