diff options
author | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2016-02-24 22:45:45 +0100 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2016-02-25 04:03:37 +0000 |
commit | 06550a84a8e681531dd71739ff40336beddebfb5 (patch) | |
tree | a00cca35ecfb1702b65fddb62f79b3afa68ca29b /epan | |
parent | c9c0effa4b0ad685073da35b37ecc21a095ec788 (diff) |
sFlow: Add lag_port_stats (format 7)
Bug:10501
Change-Id: I8d77c41537f1bfed9b5fbc585119496ec73c06eb
Reviewed-on: https://code.wireshark.org/review/14123
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-sflow.c | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/epan/dissectors/packet-sflow.c b/epan/dissectors/packet-sflow.c index e878cad70f..3bfd571076 100644 --- a/epan/dissectors/packet-sflow.c +++ b/epan/dissectors/packet-sflow.c @@ -84,6 +84,7 @@ static gboolean global_analyze_samp_ip_headers = FALSE; #define COUNTERSSAMPLE 2 #define EXPANDED_FLOWSAMPLE 3 #define EXPANDED_COUNTERSSAMPLE 4 +#define LAG_PORT_STATS 7 static const value_string sflow_agent_address_types[] = { { ADDR_TYPE_IPV4, "IPv4" }, @@ -96,6 +97,7 @@ static const value_string sflow_245_sampletype[] = { { COUNTERSSAMPLE, "Counters sample"}, { EXPANDED_FLOWSAMPLE, "Expanded flow sample"}, { EXPANDED_COUNTERSSAMPLE, "Expanded counters sample"}, + { LAG_PORT_STATS, "Lag Port stats"}, { 0, NULL} }; @@ -595,6 +597,24 @@ static int hf_sflow_5_extended_url_direction = -1; static int hf_sflow_5_extended_mpls_ftn_description = -1; static int hf_sflow_245_ip_protocol = -1; +static int hf_sflow_lag_port_actorsystemid = -1; +static int hf_sflow_lag_port_partneropersystemid = -1; +static int hf_sflow_lag_port_attachedaggid = -1; +static int hf_sflow_lag_port_state = -1; +static int hf_sflow_lag_port_actoradminstate = -1; +static int hf_sflow_lag_port_actoroperstate = -1; +static int hf_sflow_lag_port_partneradminstate = -1; +static int hf_sflow_lag_port_partneroperstate = -1; +static int hf_sflow_lag_port_reserved = -1; +static int hf_sflow_lag_port_stats_lacpdusrx = -1; +static int hf_sflow_lag_port_stats_markerpdusrx = -1; +static int hf_sflow_lag_port_stats_markerresponsepdusrx = -1; +static int hf_sflow_lag_port_stats_unknownrx = -1; +static int hf_sflow_lag_port_stats_illegalrx = -1; +static int hf_sflow_lag_port_stats_lacpdustx = -1; +static int hf_sflow_lag_port_stats_markerpdustx = -1; +static int hf_sflow_lag_port_stats_markerresponsepdustx = -1; + /* Initialize the subtree pointers */ static gint ett_sflow_245 = -1; static gint ett_sflow_245_sample = -1; @@ -607,6 +627,7 @@ static gint ett_sflow_245_gw_as_dst = -1; static gint ett_sflow_245_gw_as_dst_seg = -1; static gint ett_sflow_245_gw_community = -1; static gint ett_sflow_245_sampled_header = -1; +static gint ett_sflow_lag_port_state_flags = -1; static expert_field ei_sflow_invalid_address_type = EI_INIT; @@ -2164,6 +2185,57 @@ dissect_sflow_5_expanded_counters_sample(tvbuff_t *tvb, proto_tree *tree, gint o } } +static const int *sflow_lag_port_state_flags[] = { + &hf_sflow_lag_port_actoradminstate, + &hf_sflow_lag_port_actoroperstate, + &hf_sflow_lag_port_partneradminstate, + &hf_sflow_lag_port_partneroperstate, + &hf_sflow_lag_port_reserved, + NULL +}; + + +/* dissect an LAG Port Stats ( http://www.sflow.org/sflow_lag.txt ) */ +static void +dissect_sflow_5_lag_port_stats(tvbuff_t *tvb, proto_tree *tree, gint offset, proto_item *parent _U_) { + + proto_tree_add_item(tree, hf_sflow_lag_port_actorsystemid, tvb, offset, 6, ENC_NA); + offset += 6; + + proto_tree_add_item(tree, hf_sflow_lag_port_partneropersystemid, tvb, offset, 6, ENC_NA); + offset += 6; + + proto_tree_add_item(tree, hf_sflow_lag_port_attachedaggid, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + proto_tree_add_bitmask(tree, tvb, offset, hf_sflow_lag_port_state, ett_sflow_lag_port_state_flags, sflow_lag_port_state_flags, ENC_BIG_ENDIAN); + offset += 4; + + proto_tree_add_item(tree, hf_sflow_lag_port_stats_lacpdusrx, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + proto_tree_add_item(tree, hf_sflow_lag_port_stats_markerpdusrx, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + proto_tree_add_item(tree, hf_sflow_lag_port_stats_markerresponsepdusrx, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + proto_tree_add_item(tree, hf_sflow_lag_port_stats_unknownrx, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + proto_tree_add_item(tree, hf_sflow_lag_port_stats_illegalrx, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + proto_tree_add_item(tree, hf_sflow_lag_port_stats_lacpdustx, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + proto_tree_add_item(tree, hf_sflow_lag_port_stats_markerpdustx, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + + proto_tree_add_item(tree, hf_sflow_lag_port_stats_markerresponsepdustx, tvb, offset, 4, ENC_BIG_ENDIAN); + /*offset += 4;*/ +} + /* Code to dissect the sflow v2/4/5 samples */ static gint dissect_sflow_245_samples(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset, guint32 version) { @@ -2202,6 +2274,9 @@ dissect_sflow_245_samples(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g case EXPANDED_COUNTERSSAMPLE: dissect_sflow_5_expanded_counters_sample(tvb, sflow_245_sample_tree, offset, ti); break; + case LAG_PORT_STATS: + dissect_sflow_5_lag_port_stats(tvb, sflow_245_sample_tree, offset, ti); + break; default: break; } @@ -3357,6 +3432,93 @@ proto_register_sflow(void) { FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, + + { &hf_sflow_lag_port_actorsystemid, + { "Actor System ID", "sflow.lag_port.actor_system_id", + FT_ETHER, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_partneropersystemid, + { "Partner Oper System ID", "sflow.lag_port.partner_oper_system_id", + FT_ETHER, BASE_NONE, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_attachedaggid, + { "Port Attached Agg ID", "sflow.lag_port.attached_agg_id", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_state, + { "State", "sflow.lag_port.state", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_actoradminstate, + { "Actor Admin State", "sflow.lag_port.actor_admin_state", + FT_BOOLEAN, 32, NULL, 0x00000001, + NULL, HFILL } + }, + { &hf_sflow_lag_port_actoroperstate, + { "Actor Oper State", "sflow.lag_port.actor_oper_state", + FT_BOOLEAN, 32, NULL, 0x00000002, + NULL, HFILL } + }, + { &hf_sflow_lag_port_partneradminstate, + { "Partner Admin State", "sflow.lag_port.partner_admin_state", + FT_BOOLEAN, 32, NULL, 0x00000004, + NULL, HFILL } + }, + { &hf_sflow_lag_port_partneroperstate, + { "Partner Oper State", "sflow.lag_port.partner_oper_state", + FT_BOOLEAN, 32, NULL, 0x00000008, + NULL, HFILL } + }, + { &hf_sflow_lag_port_reserved, + { "Reserved", "sflow.lag_port.reserved", + FT_UINT32, BASE_HEX, NULL, 0xFFFFFFF0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_stats_lacpdusrx, + { "LACPDUs Rx", "sflow.lag_port.lacpdus.rx", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_stats_markerpdusrx, + { "Marker PDUs Rx", "sflow.lag_port.marker_pdus.rx", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_stats_markerresponsepdusrx, + { "Marker Response PDUs Rx", "sflow.lag_port.marker_response_pdus.rx", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_stats_unknownrx, + { "Unknown Rx", "sflow.lag_port.unknown.rx", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_stats_illegalrx, + { "Illegal Rx", "sflow.lag_port.illegal.rx", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_stats_lacpdustx, + { "LACPDUs Tx", "sflow.lag_port.lacpdus.tx", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_stats_markerpdustx, + { "Marker PDUs Tx", "sflow.lag_port.marker_pdus.tx", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_lag_port_stats_markerresponsepdustx, + { "Marker Response PDUs Tx", "sflow.lag_port.marker_response_pdus.tx", + FT_UINT32, BASE_DEC, NULL, 0x0, + NULL, HFILL } + }, + { &hf_sflow_245_as_type, { "AS Type", "sflow.as_type", FT_UINT32, BASE_DEC, VALS(sflow_245_as_types), 0x0, @@ -3447,6 +3609,7 @@ proto_register_sflow(void) { &ett_sflow_245_gw_as_dst_seg, &ett_sflow_245_gw_community, &ett_sflow_245_sampled_header, + &ett_sflow_lag_port_state_flags, }; static ei_register_info ei[] = { |