diff options
author | Balint Reczey <balint.reczey@ericsson.com> | 2009-11-09 15:55:01 +0000 |
---|---|---|
committer | Balint Reczey <balint.reczey@ericsson.com> | 2009-11-09 15:55:01 +0000 |
commit | 02c98c4517a18b7453f806ff44397450148b4e26 (patch) | |
tree | 8655efcdec320c30e4e2a872d81e64ed7996ae42 /epan/dissectors/packet-pppoe.c | |
parent | edc6f0cd3b77f83904704b2fe29eec3eb561007f (diff) |
Decode Circuit ID and Remote ID DSL Forum TR-101 PPPoE tags.
Based on patch from Stefan Puiu <stefan.puiu@gmail.com>.
This fixes bug 3113.
svn path=/trunk/; revision=30908
Diffstat (limited to 'epan/dissectors/packet-pppoe.c')
-rw-r--r-- | epan/dissectors/packet-pppoe.c | 62 |
1 files changed, 42 insertions, 20 deletions
diff --git a/epan/dissectors/packet-pppoe.c b/epan/dissectors/packet-pppoe.c index 87a7778fcc..f19c0e0c17 100644 --- a/epan/dissectors/packet-pppoe.c +++ b/epan/dissectors/packet-pppoe.c @@ -58,6 +58,8 @@ static gint hf_pppoed_tag_vendor_id = -1; static gint hf_pppoed_tag_vendor_unspecified = -1; static gint hf_pppoed_tag_vspec_tags = -1; static gint hf_pppoed_tag_vspec_tag = -1; +static gint hf_pppoed_tag_vspec_circuit_id = -1; +static gint hf_pppoed_tag_vspec_remote_id = -1; static gint hf_pppoed_tag_vspec_act_data_rate_up = -1; static gint hf_pppoed_tag_vspec_act_data_rate_down = -1; static gint hf_pppoed_tag_vspec_min_data_rate_up = -1; @@ -164,6 +166,8 @@ static gboolean global_pppoe_show_tags_and_lengths = FALSE; #define PPPOE_VENDOR_ID_DSLF 3561 +#define PPPOE_TAG_VSPEC_DSLF_CIRCUIT_ID 0x01 +#define PPPOE_TAG_VSPEC_DSLF_REMOTE_ID 0x02 #define PPPOE_TAG_VSPEC_DSLF_ACT_DATA_RATE_UP 0x81 #define PPPOE_TAG_VSPEC_DSLF_ACT_DATA_RATE_DOWN 0x82 #define PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_UP 0x83 @@ -246,6 +250,8 @@ static const value_string tag_vals[] = { }; static const value_string vspec_tag_vals[] = { + {PPPOE_TAG_VSPEC_DSLF_CIRCUIT_ID, "Circuit-ID" }, + {PPPOE_TAG_VSPEC_DSLF_REMOTE_ID, "Remote-ID" }, {PPPOE_TAG_VSPEC_DSLF_ACT_DATA_RATE_UP, "Actual-Data-Rate-Up" }, {PPPOE_TAG_VSPEC_DSLF_ACT_DATA_RATE_DOWN, "Actual-Data-Rate-Down" }, {PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_UP, "Min-Data-Rate-Up" }, @@ -299,12 +305,14 @@ const value_string datarate_scale_vals[] = { }; -#define CASE_VSPEC_DSLF_TAG(tag_name, length, hf_var) case tag_name: \ - ti = proto_tree_add_item(pppoe_tree, hf_var, tvb, \ - tagstart+2, length, FALSE); \ - if (poe_tag_length != length) \ - expert_add_info_format(pinfo, ti, PI_MALFORMED, PI_WARN, "%s: Wrong length: %u (expected %d)", \ - val_to_str(poe_tag, vspec_tag_vals, "Unknown"), poe_tag_length, length); \ +#define CASE_VSPEC_DSLF_TAG(tag_name, relation, length, hf_var) case tag_name: \ + if (!(poe_tag_length relation length)) { \ + expert_add_info_format(pinfo, pppoe_tree, PI_MALFORMED, PI_WARN, "%s: Wrong length: %u (expected %s %d)", \ + val_to_str(poe_tag, vspec_tag_vals, "Unknown"), poe_tag_length, #relation, length); \ + } else { \ + proto_tree_add_item(pppoe_tree, hf_var, tvb, \ + tagstart+2, poe_tag_length, FALSE); \ + } \ break; /* Dissect Vendor-Specific Tags introduced by the DSLF */ @@ -343,33 +351,37 @@ dissect_pppoe_subtags_dslf(tvbuff_t *tvb, packet_info *pinfo _U_, int offset, pr /* Show tag data */ switch (poe_tag) { - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ACT_DATA_RATE_UP, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_CIRCUIT_ID, <=, 63, + hf_pppoed_tag_vspec_circuit_id) + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_REMOTE_ID, <=, 63, + hf_pppoed_tag_vspec_remote_id) + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ACT_DATA_RATE_UP, ==, 4, hf_pppoed_tag_vspec_act_data_rate_up) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ACT_DATA_RATE_DOWN, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ACT_DATA_RATE_DOWN, ==, 4, hf_pppoed_tag_vspec_act_data_rate_down) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_UP, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_UP, ==, 4, hf_pppoed_tag_vspec_min_data_rate_up) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_DOWN, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_DOWN, ==, 4, hf_pppoed_tag_vspec_min_data_rate_down) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ATTAINABLE_DATA_RATE_UP, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ATTAINABLE_DATA_RATE_UP, ==, 4, hf_pppoed_tag_vspec_attainable_data_rate_up) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ATTAINABLE_DATA_RATE_DOWN, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ATTAINABLE_DATA_RATE_DOWN, ==, 4, hf_pppoed_tag_vspec_attainable_data_rate_down) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MAX_DATA_RATE_UP, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MAX_DATA_RATE_UP, ==, 4, hf_pppoed_tag_vspec_max_data_rate_up) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MAX_DATA_RATE_DOWN, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MAX_DATA_RATE_DOWN, ==, 4, hf_pppoed_tag_vspec_max_data_rate_down) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_UP_LP, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_UP_LP, ==, 4, hf_pppoed_tag_vspec_min_data_rate_up_lp) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_DOWN_LP, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MIN_DATA_RATE_DOWN_LP, ==, 4, hf_pppoed_tag_vspec_min_data_rate_down_lp) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MAX_INT_DELAY_UP, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MAX_INT_DELAY_UP, ==, 4, hf_pppoed_tag_vspec_max_int_delay_up) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ACT_INT_DELAY_UP, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ACT_INT_DELAY_UP, ==, 4, hf_pppoed_tag_vspec_act_int_delay_up) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MAX_INT_DELAY_DOWN, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_MAX_INT_DELAY_DOWN, ==, 4, hf_pppoed_tag_vspec_max_int_delay_down) - CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ACT_INT_DELAY_DOWN, 4, + CASE_VSPEC_DSLF_TAG(PPPOE_TAG_VSPEC_DSLF_ACT_INT_DELAY_DOWN, ==, 4, hf_pppoed_tag_vspec_act_int_delay_down) case PPPOE_TAG_VSPEC_DSLF_ACCESS_LOOP_ENCAPSULATION: ti = proto_tree_add_item(pppoe_tree, hf_pppoed_tag_vspec_access_loop_encapsulation, tvb, @@ -785,6 +797,16 @@ void proto_register_pppoed(void) VALS(vspec_tag_vals), 0x0, "", HFILL } }, + { &hf_pppoed_tag_vspec_circuit_id, + { "Circuit ID", "pppoed.tags.circuit_id", FT_STRING, BASE_NONE, + NULL, 0x0, "", HFILL + } + }, + { &hf_pppoed_tag_vspec_remote_id, + { "Remote ID", "pppoed.tags.remote_id", FT_STRING, BASE_NONE, + NULL, 0x0, "", HFILL + } + }, { &hf_pppoed_tag_vspec_act_data_rate_up, { "Actual Data Rate Upstream", "pppoed.tags.act_data_rate_up", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL |