diff options
author | Michael Mann <mmann78@netscape.net> | 2015-04-12 19:12:35 -0400 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2015-04-13 13:46:11 +0000 |
commit | 6ab6136a94ec4ca7481a837f348050091505c6e0 (patch) | |
tree | 76ccdc6456b22d5138bca40573eb43fcf990cada /epan/dissectors/packet-dect.c | |
parent | 89cd92d15f16ff99e1601484e3d6e94c1f00a5f9 (diff) |
Add more "bitmask grouping" APIs.
Add proto_tree_add_bitmask_value, proto_tree_add_bitmask_value_with_flags and proto_tree_add_bitmask_list to aid in the removal of proto_tree_add_boolean "groupings" as well as "groups" of fields that use proto_tree_add_item with the same offset/len.
This may be able to be optimized later, but the first step will be converting dissectors to use it. A sample conversion of each API is also included.
Change-Id: I53febc7450ad632482f82615a7fa62174f8472c9
Reviewed-on: https://code.wireshark.org/review/8038
Reviewed-by: Michael Mann <mmann78@netscape.net>
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-dect.c')
-rw-r--r-- | epan/dissectors/packet-dect.c | 107 |
1 files changed, 60 insertions, 47 deletions
diff --git a/epan/dissectors/packet-dect.c b/epan/dissectors/packet-dect.c index f7500ae2da..e6d768119a 100644 --- a/epan/dissectors/packet-dect.c +++ b/epan/dissectors/packet-dect.c @@ -1539,59 +1539,72 @@ dissect_afield(gboolean dect_packet_type, guint8 *ba, /* TODO */ break; case 3: /* Fixed Part Capabilities */ + { + static const int * cap1_flags[] = { + &hf_dect_A_Tail_Qt_3_A12, + &hf_dect_A_Tail_Qt_3_A13, + &hf_dect_A_Tail_Qt_3_A14, + &hf_dect_A_Tail_Qt_3_A15, + NULL + }; + static const int * cap2_flags[] = { + &hf_dect_A_Tail_Qt_3_A16, + &hf_dect_A_Tail_Qt_3_A17, + &hf_dect_A_Tail_Qt_3_A18, + &hf_dect_A_Tail_Qt_3_A19, + &hf_dect_A_Tail_Qt_3_A20, + &hf_dect_A_Tail_Qt_3_A21, + &hf_dect_A_Tail_Qt_3_A22, + &hf_dect_A_Tail_Qt_3_A23, + NULL + }; + static const int * cap3_flags[] = { + &hf_dect_A_Tail_Qt_3_A24, + &hf_dect_A_Tail_Qt_3_A25, + &hf_dect_A_Tail_Qt_3_A26, + &hf_dect_A_Tail_Qt_3_A27, + &hf_dect_A_Tail_Qt_3_A28, + &hf_dect_A_Tail_Qt_3_A29, + &hf_dect_A_Tail_Qt_3_A30, + &hf_dect_A_Tail_Qt_3_A31, + NULL + }; + static const int * cap4_flags[] = { + &hf_dect_A_Tail_Qt_3_A32, + &hf_dect_A_Tail_Qt_3_A33, + &hf_dect_A_Tail_Qt_3_A34, + &hf_dect_A_Tail_Qt_3_A35, + &hf_dect_A_Tail_Qt_3_A36, + &hf_dect_A_Tail_Qt_3_A37, + &hf_dect_A_Tail_Qt_3_A38, + &hf_dect_A_Tail_Qt_3_A39, + NULL + }; + + static const int * cap5_flags[] = { + &hf_dect_A_Tail_Qt_3_A40, + &hf_dect_A_Tail_Qt_3_A41, + &hf_dect_A_Tail_Qt_3_A42, + &hf_dect_A_Tail_Qt_3_A43, + &hf_dect_A_Tail_Qt_3_A44, + &hf_dect_A_Tail_Qt_3_A45, + &hf_dect_A_Tail_Qt_3_A46, + &hf_dect_A_Tail_Qt_3_A47, + NULL + }; + /* ETSI EN 300 175-3 V2.3.0 7.2.3.4 */ proto_tree_add_string(ColumnsTree, hf_dect_cc_AField, tvb, offset, 1, "Fixed Part Capabilities"); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A12, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A13, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A14, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A15, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A16, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A17, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A18, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A19, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A20, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A21, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A22, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A23, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A24, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A25, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A26, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A27, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A28, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A29, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A30, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A31, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - + proto_tree_add_bitmask_list(ATail, tvb, offset, 1, cap1_flags, ENC_BIG_ENDIAN); + proto_tree_add_bitmask_list(ATail, tvb, offset+1, 1, cap2_flags, ENC_BIG_ENDIAN); + proto_tree_add_bitmask_list(ATail, tvb, offset+2, 1, cap3_flags, ENC_BIG_ENDIAN); /* higher layer capabilities */ - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A32, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A33, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A34, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A35, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A36, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A37, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A38, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A39, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; - - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A40, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A41, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A42, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A43, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A44, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A45, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A46, tvb, offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A47, tvb, offset, 1, ENC_BIG_ENDIAN); - offset++; + proto_tree_add_bitmask_list(ATail, tvb, offset+3, 1, cap4_flags, ENC_BIG_ENDIAN); + proto_tree_add_bitmask_list(ATail, tvb, offset+4, 1, cap5_flags, ENC_BIG_ENDIAN); - /* due to addition further down */ - offset-=5; + } break; case 4: /* Extended Fixed Part Capabilities */ /* ETSI EN 300 175-3 V2.3.0 7.2.3.5 */ |