From Steven McCoy:

AFI fields are 2 bytes i.s.o. 1.

From me, several more size changes and decode cleanup.

svn path=/trunk/; revision=33003
This commit is contained in:
Jaap Keuter 2010-05-27 21:54:58 +00:00
parent f5df768724
commit de3efcf4f5
1 changed files with 22 additions and 7 deletions

View File

@ -198,6 +198,7 @@ static int hf_pgm_opt_type = -1;
static int hf_pgm_opt_len = -1;
static int hf_pgm_opt_tlen = -1;
static int hf_pgm_genopt_end = -1;
static int hf_pgm_genopt_type = -1;
static int hf_pgm_genopt_len = -1;
static int hf_pgm_genopt_opx = -1;
@ -421,6 +422,7 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_join);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
if (genopts_len < PGM_OPT_JOIN_SIZE) {
@ -443,7 +445,9 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_parityprm);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
if (genopts_len < PGM_OPT_PARITY_PRM_SIZE) {
proto_tree_add_uint_format(opt_tree, hf_pgm_genopt_len, ptvcursor_tvbuff(cursor),
@ -468,6 +472,7 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_paritygrp);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
if (genopts_len < PGM_OPT_PARITY_GRP_SIZE) {
@ -494,6 +499,7 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_naklist);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
optdata_len = tvb_get_guint8(tvb, ptvcursor_current_offset(cursor));
@ -552,6 +558,7 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_ccdata);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
if (genopts_len < PGM_OPT_PGMCC_DATA_SIZE) {
@ -566,8 +573,8 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
ptvcursor_add(cursor, hf_pgm_opt_ccdata_res, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_ccdata_tsp, 4, FALSE);
optdata_afi = tvb_get_ntohs(tvb, ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_pgm_opt_ccdata_afi, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_ccdata_res2, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_ccdata_afi, 2, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_ccdata_res2, 2, FALSE);
switch (optdata_afi) {
@ -593,6 +600,7 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_ccdata);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
if (genopts_len < PGM_OPT_PGMCC_FEEDBACK_SIZE) {
@ -632,6 +640,7 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_nak_bo_ivl);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
if (genopts_len < PGM_OPT_NAK_BO_IVL_SIZE) {
@ -644,8 +653,8 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
ptvcursor_add(cursor, hf_pgm_genopt_len, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_opx, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_nak_bo_ivl_res, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_nak_bo_ivl_bo_ivl, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_nak_bo_ivl_bo_ivl_sqn, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_nak_bo_ivl_bo_ivl, 4, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_nak_bo_ivl_bo_ivl_sqn, 4, FALSE);
break;
}
@ -653,6 +662,7 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_nak_bo_rng);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
if (genopts_len < PGM_OPT_NAK_BO_RNG_SIZE) {
@ -676,6 +686,7 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_redirect);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
if (genopts_len < PGM_OPT_REDIRECT_SIZE) {
@ -689,8 +700,8 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
ptvcursor_add(cursor, hf_pgm_genopt_opx, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_redirect_res, 1, FALSE);
optdata_afi = tvb_get_ntohs(tvb, ptvcursor_current_offset(cursor));
ptvcursor_add(cursor, hf_pgm_opt_redirect_afi, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_redirect_res2, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_redirect_afi, 2, FALSE);
ptvcursor_add(cursor, hf_pgm_opt_redirect_res2, 2, FALSE);
switch (optdata_afi) {
@ -714,6 +725,7 @@ dissect_pgmopts(ptvcursor_t* cursor, const char *pktname)
opt_tree = proto_item_add_subtree(tf, ett_pgm_opts_fragment);
ptvcursor_set_tree(cursor, opt_tree);
ptvcursor_add_no_advance(cursor, hf_pgm_genopt_end, 1, FALSE);
ptvcursor_add(cursor, hf_pgm_genopt_type, 1, FALSE);
if (genopts_len < PGM_OPT_FRAGMENT_SIZE) {
@ -1235,9 +1247,12 @@ proto_register_pgm(void)
{ &hf_pgm_opt_tlen,
{ "Total Length", "pgm.opts.tlen", FT_UINT16, BASE_DEC,
NULL, 0x0, NULL, HFILL }},
{ &hf_pgm_genopt_end,
{ "Option end", "pgm.genopts.end", FT_BOOLEAN, 8,
TFS(&tfs_yes_no), 0x80, NULL, HFILL }},
{ &hf_pgm_genopt_type,
{ "Type", "pgm.genopts.type", FT_UINT8, BASE_HEX,
VALS(opt_vals), 0x0, NULL, HFILL }},
VALS(opt_vals), 0x7f, NULL, HFILL }},
{ &hf_pgm_genopt_len,
{ "Length", "pgm.genopts.len", FT_UINT8, BASE_DEC,
NULL, 0x0, NULL, HFILL }},