aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-pppoe.c
diff options
context:
space:
mode:
authorBalint Reczey <balint.reczey@ericsson.com>2009-11-09 15:55:01 +0000
committerBalint Reczey <balint.reczey@ericsson.com>2009-11-09 15:55:01 +0000
commit02c98c4517a18b7453f806ff44397450148b4e26 (patch)
tree8655efcdec320c30e4e2a872d81e64ed7996ae42 /epan/dissectors/packet-pppoe.c
parentedc6f0cd3b77f83904704b2fe29eec3eb561007f (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.c62
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