diff options
author | Jörg Mayer <jmayer@loplof.de> | 2009-03-30 21:55:22 +0000 |
---|---|---|
committer | Jörg Mayer <jmayer@loplof.de> | 2009-03-30 21:55:22 +0000 |
commit | 8b6ae788b2b681250a62f22c7733ce338f625579 (patch) | |
tree | 5e0b569590facec04d57240db611e126857cdd27 /epan/dissectors/packet-dect.c | |
parent | 7247fa0b450b9cfde030450e2c5904d678caba1d (diff) |
Andreas Schuler:
add framenumber, extended fixed part capabilities and higher
layer capabilities
Me;
- replace div by crc to fix a shadowed global variable
- the last argument to proto_tree_add_item is the endianess
indicator, not the value
- replace // by /* */
svn path=/trunk/; revision=27904
Diffstat (limited to 'epan/dissectors/packet-dect.c')
-rw-r--r-- | epan/dissectors/packet-dect.c | 871 |
1 files changed, 788 insertions, 83 deletions
diff --git a/epan/dissectors/packet-dect.c b/epan/dissectors/packet-dect.c index 004731cf78..57e447d482 100644 --- a/epan/dissectors/packet-dect.c +++ b/epan/dissectors/packet-dect.c @@ -138,6 +138,57 @@ static int hf_dect_A_Tail_Qt_3_A28 = -1; static int hf_dect_A_Tail_Qt_3_A29 = -1; static int hf_dect_A_Tail_Qt_3_A30 = -1; static int hf_dect_A_Tail_Qt_3_A31 = -1; +static int hf_dect_A_Tail_Qt_3_A32 = -1; +static int hf_dect_A_Tail_Qt_3_A33 = -1; +static int hf_dect_A_Tail_Qt_3_A34 = -1; +static int hf_dect_A_Tail_Qt_3_A35 = -1; +static int hf_dect_A_Tail_Qt_3_A36 = -1; +static int hf_dect_A_Tail_Qt_3_A37 = -1; +static int hf_dect_A_Tail_Qt_3_A38 = -1; +static int hf_dect_A_Tail_Qt_3_A39 = -1; +static int hf_dect_A_Tail_Qt_3_A40 = -1; +static int hf_dect_A_Tail_Qt_3_A41 = -1; +static int hf_dect_A_Tail_Qt_3_A42 = -1; +static int hf_dect_A_Tail_Qt_3_A43 = -1; +static int hf_dect_A_Tail_Qt_3_A44 = -1; +static int hf_dect_A_Tail_Qt_3_A45 = -1; +static int hf_dect_A_Tail_Qt_3_A46 = -1; +static int hf_dect_A_Tail_Qt_3_A47 = -1; +static int hf_dect_A_Tail_Qt_4_CRFPHops = -1; +static int hf_dect_A_Tail_Qt_4_CRFPEnc = -1; +static int hf_dect_A_Tail_Qt_4_REFHops = -1; +static int hf_dect_A_Tail_Qt_4_REPCap = -1; +static int hf_dect_A_Tail_Qt_4_Sync = -1; +static int hf_dect_A_Tail_Qt_4_A20 = -1; +static int hf_dect_A_Tail_Qt_4_MACSusp = -1; +static int hf_dect_A_Tail_Qt_4_MACIpq = -1; +static int hf_dect_A_Tail_Qt_4_A23 = -1; +static int hf_dect_A_Tail_Qt_4_A24 = -1; +static int hf_dect_A_Tail_Qt_4_A25 = -1; +static int hf_dect_A_Tail_Qt_4_A26 = -1; +static int hf_dect_A_Tail_Qt_4_A27 = -1; +static int hf_dect_A_Tail_Qt_4_A28 = -1; +static int hf_dect_A_Tail_Qt_4_A29 = -1; +static int hf_dect_A_Tail_Qt_4_A30 = -1; +static int hf_dect_A_Tail_Qt_4_A31 = -1; +static int hf_dect_A_Tail_Qt_4_A32 = -1; +static int hf_dect_A_Tail_Qt_4_A33 = -1; +static int hf_dect_A_Tail_Qt_4_A34 = -1; +static int hf_dect_A_Tail_Qt_4_A35 = -1; +static int hf_dect_A_Tail_Qt_4_A36 = -1; +static int hf_dect_A_Tail_Qt_4_A37 = -1; +static int hf_dect_A_Tail_Qt_4_A38 = -1; +static int hf_dect_A_Tail_Qt_4_A39 = -1; +static int hf_dect_A_Tail_Qt_4_A40 = -1; +static int hf_dect_A_Tail_Qt_4_A41 = -1; +static int hf_dect_A_Tail_Qt_4_A42 = -1; +static int hf_dect_A_Tail_Qt_4_A43 = -1; +static int hf_dect_A_Tail_Qt_4_A44 = -1; +static int hf_dect_A_Tail_Qt_4_A45 = -1; +static int hf_dect_A_Tail_Qt_4_A46 = -1; +static int hf_dect_A_Tail_Qt_4_A47 = -1; +static int hf_dect_A_Tail_Qt_6_Spare = -1; +static int hf_dect_A_Tail_Qt_6_Mfn = -1; static int hf_dect_A_Tail_Mt_Mh = -1; static int hf_dect_A_Tail_Mt_BasicConCtrl = -1; static int hf_dect_A_Tail_Mt_Encr_Cmd1 = -1; @@ -430,144 +481,497 @@ static const value_string QTScanCarrierNum_vals[]= static const value_string Qt_A12_vals[]= { - {0, ""}, + {0, " Extended FP Info"}, {1, "Extended FP Info"}, {0, NULL} }; static const value_string Qt_A13_vals[]= { - {0, ""}, + {0, " Double Duplex Bearer Connections"}, {1, "Double Duplex Bearer Connections"}, {0, NULL} }; static const value_string Qt_A14_vals[]= { - {0, ""}, + {0, " Reserved"}, {1, "Reserved"}, {0, NULL} }; static const value_string Qt_A15_vals[]= { - {0, ""}, + {0, " Double Slot"}, {1, "Double Slot"}, {0, NULL} }; static const value_string Qt_A16_vals[]= { - {0, ""}, + {0, " Half Slot"}, {1, "Half Slot"}, {0, NULL} }; static const value_string Qt_A17_vals[]= { - {0, ""}, + {0, " Full Slot"}, {1, "Full Slot"}, {0, NULL} }; static const value_string Qt_A18_vals[]= { - {0, ""}, + {0, " Frequency Control"}, {1, "Frequency Control"}, {0, NULL} }; static const value_string Qt_A19_vals[]= { - {0, ""}, + {0, " Page Repetition"}, {1, "Page Repetition"}, {0, NULL} }; static const value_string Qt_A20_vals[]= { - {0, ""}, + {0, " C/O Setup on Dummy allowed"}, {1, "C/O Setup on Dummy allowed"}, {0, NULL} }; static const value_string Qt_A21_vals[]= { - {0, ""}, + {0, " C/L Uplink"}, {1, "C/L Uplink"}, {0, NULL} }; static const value_string Qt_A22_vals[]= { - {0, ""}, + {0, " C/L Downlink"}, {1, "C/L Downlink"}, {0, NULL} }; static const value_string Qt_A23_vals[]= { - {0, ""}, + {0, " Basic A-Field Set-Up"}, {1, "Basic A-Field Set-Up"}, {0, NULL} }; static const value_string Qt_A24_vals[]= { - {0, ""}, + {0, " Advanced A-Field Set-Up"}, {1, "Advanced A-Field Set-Up"}, {0, NULL} }; static const value_string Qt_A25_vals[]= { - {0, ""}, + {0, " B-field Set-Up"}, {1, "B-field Set-Up"}, {0, NULL} }; static const value_string Qt_A26_vals[]= { - {0, ""}, + {0, " Cf Messages"}, {1, "Cf Messages"}, {0, NULL} }; static const value_string Qt_A27_vals[]= { - {0, ""}, + {0, " In Minimum Delay"}, {1, "In Minimum Delay"}, {0, NULL} }; static const value_string Qt_A28_vals[]= { - {0, ""}, + {0, " In Normal Delay"}, {1, "In Normal Delay"}, {0, NULL} }; static const value_string Qt_A29_vals[]= { - {0, ""}, + {0, " Ip Error Detection"}, {1, "Ip Error Detection"}, {0, NULL} }; static const value_string Qt_A30_vals[]= { - {0, ""}, + {0, " Ip Error Correction"}, {1, "Ip Error Correction"}, {0, NULL} }; static const value_string Qt_A31_vals[]= { - {0, ""}, + {0, " Multibearer Connections"}, {1, "Multibearer Connections"}, {0, NULL} }; +static const value_string Qt_A32_vals[]= +{ + {0, " ADPCM/G.726 Voice service"}, + {1, "ADPCM/G.726 Voice service"}, + {0, NULL} +}; + +static const value_string Qt_A33_vals[]= +{ + {0, " GAP basic speech"}, + {1, "GAP basic speech"}, + {0, NULL} +}; + +static const value_string Qt_A34_vals[]= +{ + {0, " Non-voice circuit switched service"}, + {1, "Non-voice circuit switched service"}, + {0, NULL} +}; + +static const value_string Qt_A35_vals[]= +{ + {0, " Non-voice packet switched service"}, + {1, "Non-voice packet switched service"}, + {0, NULL} +}; + +static const value_string Qt_A36_vals[]= +{ + {0, " Standard authentication required"}, + {1, "Standard authentication required"}, + {0, NULL} +}; + +static const value_string Qt_A37_vals[]= +{ + {0, " Standard ciphering supported"}, + {1, "Standard ciphering supported"}, + {0, NULL} +}; + +static const value_string Qt_A38_vals[]= +{ + {0, " Location registration supported"}, + {1, "Location registration supported"}, + {0, NULL} +}; + +static const value_string Qt_A39_vals[]= +{ + {0, " SIM services available"}, + {1, "SIM services available"}, + {0, NULL} +}; + +static const value_string Qt_A40_vals[]= +{ + {0, " Non-static Fixed Part (FP)"}, + {1, "Non-static Fixed Part (FP)"}, + {0, NULL} +}; + +static const value_string Qt_A41_vals[]= +{ + {0, " CISS services available"}, + {1, "CISS services available"}, + {0, NULL} +}; + +static const value_string Qt_A42_vals[]= +{ + {0, " CLMS service available"}, + {1, "CLMS service available"}, + {0, NULL} +}; + +static const value_string Qt_A43_vals[]= +{ + {0, " COMS service available"}, + {1, "COMS service available"}, + {0, NULL} +}; + +static const value_string Qt_A44_vals[]= +{ + {0, " Access rights requests supported"}, + {1, "Access rights requests supported"}, + {0, NULL} +}; + +static const value_string Qt_A45_vals[]= +{ + {0, " External handover supported"}, + {1, "External handover supported"}, + {0, NULL} +}; + +static const value_string Qt_A46_vals[]= +{ + {0, " Connection handover supported"}, + {1, "Connection handover supported"}, + {0, NULL} +}; + +static const value_string Qt_A47_vals[]= +{ + {0, " Reserved"}, + {1, "Reserved"}, + {0, NULL} +}; + + +static const value_string Qt_EA20_vals[]= +{ + {0, " Reserved"}, + {1, "Reserved"}, + {0, NULL} +}; + +static const value_string Qt_CRFPHops_vals[]= +{ + {0, "1 CRFP is allowed"}, + {1, "2 CRFP allowed in cascade"}, + {2, "3 CRFP allowed in cascade"}, + {3, "No CRFP allowed"}, + {0, NULL} +}; + +static const value_string Qt_CRFPEnc_vals[]= +{ + {0, "CRFP encryption not supported"}, + {1, "CRFP encryption supported"}, + {0, NULL} +}; + +static const value_string Qt_REPHops_vals[]= +{ + {0, "REP not supported"}, + {1, "1 REP is allowed"}, + {2, "2 REP are allowed in cascade"}, + {3, "3 REP are allowed in cascade"}, + {0, NULL} +}; + +static const value_string Qt_REPCap_vals[]= +{ + {0, "REP interlacing not supported"}, + {1, "REP interlacing supported"}, + {0, NULL} +}; + +static const value_string Qt_Sync_vals[]= +{ + {0, "standard, see EN 300 175-2 [2], clauses 4.6 and 5.2"}, + {1, "prolonged preamble, see EN 300 175-2 [2], annex C (see note)"}, + {2, "reserved"}, + {3, "reserved"}, + {0, NULL} +}; + +static const value_string Qt_MACSusp_vals[]= +{ + {0, "Suspend and Resume not supported"}, + {1, "Suspend and Resume supported"}, + {0, NULL} +}; + +static const value_string Qt_MACIpq_vals[]= +{ + {0, "Ipq not supported"}, + {1, "Ipq supported"}, + {0, NULL} +}; + +static const value_string Qt_EA23_vals[]= +{ + {0, " Extended Fixed Part Info 2"}, + {1, "Extended Fixed Part Info 2"}, + {0, NULL} +}; + +static const value_string Qt_EA24_vals[]= +{ + {0, " Unused"}, + {1, "Unused"}, + {0, NULL} +}; + +static const value_string Qt_EA25_vals[]= +{ + {0, " F-MMS Interworking profile supported"}, + {1, "F-MMS Interworking profile supported"}, + {0, NULL} +}; + +static const value_string Qt_EA26_vals[]= +{ + {0, " Basic ODAP supported"}, + {1, "Basic ODAP supported"}, + {0, NULL} +}; + +static const value_string Qt_EA27_vals[]= +{ + {0, " Generic Media Encapsulation transport (DPRS) supported"}, + {1, "Generic Media Encapsulation transport (DPRS) supported"}, + {0, NULL} +}; + +static const value_string Qt_EA28_vals[]= +{ + {0, " IP Roaming unrestricted supported"}, + {1, "IP Roaming unrestricted supported"}, + {0, NULL} +}; + +static const value_string Qt_EA29_vals[]= +{ + {0, " Ethernet"}, + {1, "Ethernet"}, + {0, NULL} +}; + +static const value_string Qt_EA30_vals[]= +{ + {0, " Token Ring"}, + {1, "Token Ring"}, + {0, NULL} +}; + +static const value_string Qt_EA31_vals[]= +{ + {0, " IP"}, + {1, "IP"}, + {0, NULL} +}; + +static const value_string Qt_EA32_vals[]= +{ + {0, " PPP"}, + {1, "PPP"}, + {0, NULL} +}; + +static const value_string Qt_EA33_vals[]= +{ + {0, " V.24"}, + {1, "V.24"}, + {0, NULL} +}; + +static const value_string Qt_EA34_vals[]= +{ + {0, " Reserved"}, + {1, "Reserved"}, + {0, NULL} +}; + +static const value_string Qt_EA35_vals[]= +{ + {0, " Reserved"}, + {1, "Reserved"}, + {0, NULL} +}; + +static const value_string Qt_EA36_vals[]= +{ + {0, " RAP Part 1 Profile"}, + {1, "RAP Part 1 Profile"}, + {0, NULL} +}; + +static const value_string Qt_EA37_vals[]= +{ + {0, " ISDN intermediate system"}, + {1, "ISDN intermediate system"}, + {0, NULL} +}; + +static const value_string Qt_EA38_vals[]= +{ + {0, " Synchronization to GPS achieved"}, + {1, "Synchronization to GPS achieved"}, + {0, NULL} +}; + +static const value_string Qt_EA39_vals[]= +{ + {0, " Location registration with TPUI allowed"}, + {1, "Location registration with TPUI allowed"}, + {0, NULL} +}; + +static const value_string Qt_EA40_vals[]= +{ + {0, " Emergency call supported"}, + {1, "Emergency call supported"}, + {0, NULL} +}; + +static const value_string Qt_EA41_vals[]= +{ + {0, " Asymmetric bearers supported"}, + {1, "Asymmetric bearers supported"}, + {0, NULL} +}; + +static const value_string Qt_EA42_vals[]= +{ + {0, " Reserved"}, + {1, "Reserved"}, + {0, NULL} +}; + +static const value_string Qt_EA43_vals[]= +{ + {0, " LRMS"}, + {1, "LRMS"}, + {0, NULL} +}; + +static const value_string Qt_EA44_vals[]= +{ + {0, " Data Service Profile D"}, + {1, "Data Service Profile D"}, + {0, NULL} +}; + +static const value_string Qt_EA45_vals[]= +{ + {0, " DPRS Stream"}, + {1, "DPRS Stream"}, + {0, NULL} +}; + +static const value_string Qt_EA46_vals[]= +{ + {0, " DPRS FREL"}, + {1, "DPRS FREL"}, + {0, NULL} +}; + +static const value_string Qt_EA47_vals[]= +{ + {0, " ISDN Data Services"}, + {1, "ISDN Data Services"}, + {0, NULL} +}; + + + + static const value_string MTHead_vals[]= { {0, "Basic Connection Control"}, @@ -716,7 +1120,7 @@ calc_xcrc(guint8* data, guint8 length) { guint8 bits[21]; guint8 gp=0x1; - guint8 div; + guint8 crc; guint8 next; int y, x; @@ -725,7 +1129,7 @@ calc_xcrc(guint8* data, guint8 length) setbit(bits, y, getbit(data, y+48*(1+(int)(y/16)))); } length=10; - div=bits[0]; + crc=bits[0]; y=0; while(y<length) { @@ -737,10 +1141,10 @@ calc_xcrc(guint8* data, guint8 length) x=0; while(x<8) { - while(!(div&0x80)) + while(!(crc&0x80)) { - div<<=1; - div|=!!(next&0x80); + crc<<=1; + crc|=!!(next&0x80); next<<=1; x++; if(x>7) @@ -748,15 +1152,15 @@ calc_xcrc(guint8* data, guint8 length) } if(x>7) break; - div<<=1; - div|=!!(next&0x80); + crc<<=1; + crc|=!!(next&0x80); next<<=1; x++; - div^=(gp<<4); + crc^=(gp<<4); } } -/* div^=0x10; */ - return div; +/* crc^=0x10; */ + return crc; } static guint16 @@ -764,11 +1168,11 @@ calc_rcrc(guint8* data) { guint16 gp=0x0589; /* 10000010110001001 without the leading 1 */ - guint16 div; + guint16 crc; guint8 next; int y, x; - div=data[0]<<8|data[1]; + crc=data[0]<<8|data[1]; y=0; while(y<6) { @@ -777,10 +1181,10 @@ calc_rcrc(guint8* data) x=0; while(x<8) { - while(!(div&0x8000)) + while(!(crc&0x8000)) { - div<<=1; - div|=!!(next&0x80); + crc<<=1; + crc|=!!(next&0x80); next<<=1; x++; if(x>7) @@ -788,15 +1192,15 @@ calc_rcrc(guint8* data) } if(x>7) break; - div<<=1; - div|=!!(next&0x80); + crc<<=1; + crc|=!!(next&0x80); next<<=1; x++; - div^=gp; + crc^=gp; } } - div^=1; - return div; + crc^=1; + return crc; } static gint @@ -1027,7 +1431,7 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, if(check_col(pinfo->cinfo, COL_HPUX_SUBSYS)) col_set_str(pinfo->cinfo, COL_HPUX_SUBSYS, "[Qt]"); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_Qh, tvb, offset, 1, (pkt_afield->Tail[0])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_Qh, tvb, offset, 1, FALSE); switch(pkt_afield->Tail[0]>>4) { @@ -1036,14 +1440,14 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Static System Info"); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_Nr, tvb, offset, 1, (pkt_afield->Tail[0])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_Sn, tvb, offset, 1, (pkt_afield->Tail[0])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Nr, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Sn, tvb, offset, 1, FALSE); offset++; - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_Sp, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_Esc, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_Txs, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_Mc, tvb, offset, 1, (pkt_afield->Tail[1])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Sp, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Esc, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Txs, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Mc, tvb, offset, 1, FALSE); offset++; proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Mt_Mh, tvb, offset, 2, 0x2323, " Carrier%s%s%s%s%s%s%s%s%s%s available", @@ -1053,12 +1457,12 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, (pkt_afield->Tail[2]&0x01)?" 9":""); offset++; - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_Spr1, tvb, offset, 1, (pkt_afield->Tail[3])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_Cn, tvb, offset, 1, (pkt_afield->Tail[3])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Spr1, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Cn, tvb, offset, 1, FALSE); offset++; - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_Spr2, tvb, offset, 1, (pkt_afield->Tail[4])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_0_PSCN, tvb, offset, 1, (pkt_afield->Tail[4])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Spr2, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_PSCN, tvb, offset, 1, FALSE); offset++; /* due to addition further down */ offset-=5; @@ -1071,31 +1475,53 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Fixed Part Capabilities"); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A12, tvb, offset, 1, (pkt_afield->Tail[0])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A13, tvb, offset, 1, (pkt_afield->Tail[0])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A14, tvb, offset, 1, (pkt_afield->Tail[0])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A15, tvb, offset, 1, (pkt_afield->Tail[0])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A12, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A13, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A14, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A15, tvb, offset, 1, FALSE); offset++; - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A16, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A17, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A18, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A19, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A20, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A21, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A22, tvb, offset, 1, (pkt_afield->Tail[1])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A23, tvb, offset, 1, (pkt_afield->Tail[1])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A16, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A17, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A18, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A19, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A20, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A21, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A22, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A23, tvb, offset, 1, FALSE); + offset++; + + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A24, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A25, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A26, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A27, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A28, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A29, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A30, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A31, tvb, offset, 1, FALSE); offset++; - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A24, tvb, offset, 1, (pkt_afield->Tail[2])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A25, tvb, offset, 1, (pkt_afield->Tail[2])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A26, tvb, offset, 1, (pkt_afield->Tail[2])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A27, tvb, offset, 1, (pkt_afield->Tail[2])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A28, tvb, offset, 1, (pkt_afield->Tail[2])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A29, tvb, offset, 1, (pkt_afield->Tail[2])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A30, tvb, offset, 1, (pkt_afield->Tail[2])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Qt_3_A31, tvb, offset, 1, (pkt_afield->Tail[2])); - offset+=3; + + /* higher layer capabilities */ + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A32, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A33, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A34, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A35, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A36, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A37, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A38, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A39, tvb, offset, 1, FALSE); + offset++; + + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A40, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A41, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A42, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A43, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A44, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A45, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A46, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A47, tvb, offset, 1, FALSE); + offset++; /* due to addition further down */ offset-=5; @@ -1103,6 +1529,57 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, case 4: /* Extended Fixed Part Capabilities */ if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Extended Fixed Part Capabilities"); + + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_CRFPHops, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_CRFPEnc, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_REFHops, tvb, offset, 2, + ((pkt_afield->Tail[0]&0x01)<<1)|((pkt_afield->Tail[1]&0x80)>>7)); + offset++; + + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_REPCap, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_Sync, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A20, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_MACSusp, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_MACIpq, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A23, tvb, offset, 1, FALSE); + offset++; + + + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A24, tvb, offset, 1, FALSE); + + /* higher layer capabilities */ + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A25, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A26, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A27, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A28, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A29, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A30, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A31, tvb, offset, 1, FALSE); + offset++; + + + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A32, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A33, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A34, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A35, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A36, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A37, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A38, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A39, tvb, offset, 1, FALSE); + offset++; + + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A40, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A41, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A42, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A43, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A44, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A45, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A46, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A47, tvb, offset, 1, FALSE); + offset++; + + /* due to addition further down */ + offset-=5; break; case 5: /* SARI List Contents */ if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) @@ -1111,6 +1588,17 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, case 6: /* Multi-Frame No. */ if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Multi-Frame No."); + + proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Qt_6_Spare, tvb, offset, 2, 0x2323,"Spare Bits: %.1x%.2x", + (pkt_afield->Tail[0])&0x0f,(pkt_afield->Tail[1])); + offset+=2; + + proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Qt_6_Spare, tvb, offset, 3, 0x2323,"Multiframe Number: %.2x%.2x%.2x", + (pkt_afield->Tail[2]),(pkt_afield->Tail[3]),(pkt_afield->Tail[4])); + offset+=3; + + /* due to addition further down */ + offset-=5; break; case 7: /* Escape */ if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) @@ -1132,7 +1620,10 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Transmit Information(?)"); break; - case 12: /* Reserved */ + case 12: /* Extended Fixed Part Capabilities 2 */ + if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) + col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Extended Fixed Part Capabilities 2"); + break; case 13: case 14: case 15: @@ -1156,7 +1647,7 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, case 0: /* Basic Connection Control */ if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Basic Connection Control"); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Mt_BasicConCtrl, tvb, offset, 1, (pkt_afield->Tail[0])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_BasicConCtrl, tvb, offset, 1, FALSE); offset++; if(((pkt_afield->Tail[0]&&0x0f)==6)||((pkt_afield->Tail[0]&&0x0f)==7)) @@ -1195,8 +1686,8 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, if(check_col(pinfo->cinfo, COL_DEF_NET_SRC)) col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Encryption Control"); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Mt_Encr_Cmd1, tvb, offset, 1, (pkt_afield->Tail[0])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Mt_Encr_Cmd2, tvb, offset, 1, (pkt_afield->Tail[0])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_Encr_Cmd1, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_Encr_Cmd2, tvb, offset, 1, FALSE); offset++; proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Mt_Mh, tvb, offset, 2, 0x2323, "FMID:%.3x", (pkt_afield->Tail[1]<<4)|(pkt_afield->Tail[2]>>4)); @@ -1240,8 +1731,8 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, if(check_col(pinfo->cinfo, COL_HPUX_SUBSYS)) col_set_str(pinfo->cinfo, COL_HPUX_SUBSYS, "[Pt]"); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Pt_ExtFlag, tvb, offset, 1, (pkt_afield->Tail[0])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Pt_SDU, tvb, offset, 1, (pkt_afield->Tail[0])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_ExtFlag, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_SDU, tvb, offset, 1, FALSE); switch((pkt_afield->Tail[0]&0x70)>>4) { case 0: /* Zero Length Page */ @@ -1253,7 +1744,7 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, proto_tree_add_uint_format(atailti, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 3, 0x2323, "RFPI:xxxxx%.1x%.2x%.2x", (pkt_afield->Tail[0]&0x0f), pkt_afield->Tail[1], pkt_afield->Tail[2]); offset+=3; - proto_tree_add_uint(ATail, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 1, (pkt_afield->Tail[3])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 1, FALSE); } else { @@ -1262,7 +1753,7 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, proto_tree_add_uint_format(atailti, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 3, 0x2323, "Bs Data:%.1x%.2x%.2x", (pkt_afield->Tail[0]&0x0f), pkt_afield->Tail[1], pkt_afield->Tail[2]); offset+=3; - proto_tree_add_uint(ATail, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 1, (pkt_afield->Tail[3])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 1, FALSE); } switch(pkt_afield->Tail[3]>>4) { @@ -1286,11 +1777,11 @@ dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield, case 4: /* Good RFP Bearer */ case 5: /* Dummy or connectionless Bearer Position */ case 12: /* Connectionless Bearer Position */ - proto_tree_add_uint(ATail, hf_dect_A_Tail_Pt_Bearer_Sn, tvb, offset, 1, (pkt_afield->Tail[3])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_Bearer_Sn, tvb, offset, 1, FALSE); offset++; - proto_tree_add_uint(ATail, hf_dect_A_Tail_Pt_Bearer_Sp, tvb, offset, 1, (pkt_afield->Tail[4])); - proto_tree_add_uint(ATail, hf_dect_A_Tail_Pt_Bearer_Cn, tvb, offset, 1, (pkt_afield->Tail[4])); + proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_Bearer_Sp, tvb, offset, 1, FALSE); + proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_Bearer_Cn, tvb, offset, 1, FALSE); offset++; break; case 6: /* Extended Modulation Types */ @@ -1677,6 +2168,220 @@ proto_register_dect(void) {"A31", "dect.afield.tail.Qt.Fp.A31", FT_UINT8, BASE_DEC, VALS(Qt_A31_vals), 0x01, NULL, HFILL}}, + + /* higher layer capabilities */ + { &hf_dect_A_Tail_Qt_3_A32, + {"A32", "dect.afield.tail.Qt.Fp.A32", FT_UINT8, BASE_DEC, VALS(Qt_A32_vals), + 0x80, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A33, + {"A33", "dect.afield.tail.Qt.Fp.A33", FT_UINT8, BASE_DEC, VALS(Qt_A33_vals), + 0x40, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A34, + {"A34", "dect.afield.tail.Qt.Fp.A34", FT_UINT8, BASE_DEC, VALS(Qt_A34_vals), + 0x20, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A35, + {"A35", "dect.afield.tail.Qt.Fp.A35", FT_UINT8, BASE_DEC, VALS(Qt_A35_vals), + 0x10, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A36, + {"A36", "dect.afield.tail.Qt.Fp.A36", FT_UINT8, BASE_DEC, VALS(Qt_A36_vals), + 0x08, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A37, + {"A37", "dect.afield.tail.Qt.Fp.A37", FT_UINT8, BASE_DEC, VALS(Qt_A37_vals), + 0x04, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A38, + {"A38", "dect.afield.tail.Qt.Fp.A38", FT_UINT8, BASE_DEC, VALS(Qt_A38_vals), + 0x02, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A39, + {"A39", "dect.afield.tail.Qt.Fp.A39", FT_UINT8, BASE_DEC, VALS(Qt_A39_vals), + 0x01, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A40, + {"A40", "dect.afield.tail.Qt.Fp.A40", FT_UINT8, BASE_DEC, VALS(Qt_A40_vals), + 0x80, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A41, + {"A41", "dect.afield.tail.Qt.Fp.A41", FT_UINT8, BASE_DEC, VALS(Qt_A41_vals), + 0x40, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A42, + {"A42", "dect.afield.tail.Qt.Fp.A42", FT_UINT8, BASE_DEC, VALS(Qt_A42_vals), + 0x20, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A43, + {"A43", "dect.afield.tail.Qt.Fp.A43", FT_UINT8, BASE_DEC, VALS(Qt_A43_vals), + 0x10, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A44, + {"A44", "dect.afield.tail.Qt.Fp.A44", FT_UINT8, BASE_DEC, VALS(Qt_A44_vals), + 0x08, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A45, + {"A45", "dect.afield.tail.Qt.Fp.A45", FT_UINT8, BASE_DEC, VALS(Qt_A45_vals), + 0x04, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A46, + {"A46", "dect.afield.tail.Qt.Fp.A46", FT_UINT8, BASE_DEC, VALS(Qt_A46_vals), + 0x02, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_3_A47, + {"A47", "dect.afield.tail.Qt.Fp.A47", FT_UINT8, BASE_DEC, VALS(Qt_A47_vals), + 0x01, NULL, HFILL}}, + + /* Qt Extended Fixed Part Capabilities */ + + { &hf_dect_A_Tail_Qt_4_CRFPHops, + {"CRFP Hops", "dect.afield.tail.Qt.Efp.CRFPHops", FT_UINT8, BASE_DEC, VALS(Qt_CRFPHops_vals), + 0x0C, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_CRFPEnc, + {"CRFP Enc", "dect.afield.tail.Qt.Efp.CRFPEnc", FT_UINT8, BASE_DEC, VALS(Qt_CRFPEnc_vals), + 0x02, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_REFHops, + {"REP Hops", "dect.afield.tail.Qt.Efp.REPHops", FT_UINT8, BASE_DEC, VALS(Qt_REPHops_vals), + 0x03, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_REPCap, + {"REP Cap.", "dect.afield.tail.Qt.Efp.REPCap", FT_UINT8, BASE_DEC, VALS(Qt_REPCap_vals), + 0x40, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_Sync, + {"Sync", "dect.afield.tail.Qt.Efp.Sync", FT_UINT8, BASE_DEC, VALS(Qt_Sync_vals), + 0x30, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A20, + {"A20", "dect.afield.tail.Qt.Efp.A20", FT_UINT8, BASE_DEC, VALS(Qt_EA20_vals), + 0x08, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_MACSusp, + {"MAC Suspend", "dect.afield.tail.Qt.Efp.MACSusp", FT_UINT8, BASE_DEC, VALS(Qt_MACSusp_vals), + 0x04, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_MACIpq, + {"MAC Ipq", "dect.afield.tail.Qt.Efp.MACIpq", FT_UINT8, BASE_DEC, VALS(Qt_MACIpq_vals), + 0x02, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A23, + {"A23", "dect.afield.tail.Qt.Efp.A23", FT_UINT8, BASE_DEC, VALS(Qt_EA23_vals), + 0x01, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A24, + {"A24", "dect.afield.tail.Qt.Efp.A24", FT_UINT8, BASE_DEC, VALS(Qt_EA24_vals), + 0x80, NULL, HFILL}}, + + + /* Higher Layer Capabilities */ + + { &hf_dect_A_Tail_Qt_4_A25, + {"A25", "dect.afield.tail.Qt.Efp.A25", FT_UINT8, BASE_DEC, VALS(Qt_EA25_vals), + 0x40, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A26, + {"A26", "dect.afield.tail.Qt.Efp.A26", FT_UINT8, BASE_DEC, VALS(Qt_EA26_vals), + 0x20, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A27, + {"A27", "dect.afield.tail.Qt.Efp.A27", FT_UINT8, BASE_DEC, VALS(Qt_EA27_vals), + 0x10, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A28, + {"A28", "dect.afield.tail.Qt.Efp.A28", FT_UINT8, BASE_DEC, VALS(Qt_EA28_vals), + 0x08, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A29, + {"A29", "dect.afield.tail.Qt.Efp.A29", FT_UINT8, BASE_DEC, VALS(Qt_EA29_vals), + 0x04, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A30, + {"A30", "dect.afield.tail.Qt.Efp.A30", FT_UINT8, BASE_DEC, VALS(Qt_EA30_vals), + 0x02, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A31, + {"A31", "dect.afield.tail.Qt.Efp.A31", FT_UINT8, BASE_DEC, VALS(Qt_EA31_vals), + 0x01, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A32, + {"A32", "dect.afield.tail.Qt.Efp.A32", FT_UINT8, BASE_DEC, VALS(Qt_EA32_vals), + 0x80, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A33, + {"A33", "dect.afield.tail.Qt.Efp.A33", FT_UINT8, BASE_DEC, VALS(Qt_EA33_vals), + 0x40, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A34, + {"A34", "dect.afield.tail.Qt.Efp.A34", FT_UINT8, BASE_DEC, VALS(Qt_EA34_vals), + 0x20, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A35, + {"A35", "dect.afield.tail.Qt.Efp.A35", FT_UINT8, BASE_DEC, VALS(Qt_EA35_vals), + 0x10, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A36, + {"A36", "dect.afield.tail.Qt.Efp.A36", FT_UINT8, BASE_DEC, VALS(Qt_EA36_vals), + 0x08, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A37, + {"A37", "dect.afield.tail.Qt.Efp.A37", FT_UINT8, BASE_DEC, VALS(Qt_EA37_vals), + 0x04, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A38, + {"A38", "dect.afield.tail.Qt.Efp.A38", FT_UINT8, BASE_DEC, VALS(Qt_EA38_vals), + 0x02, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A39, + {"A39", "dect.afield.tail.Qt.Efp.A39", FT_UINT8, BASE_DEC, VALS(Qt_EA39_vals), + 0x01, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A40, + {"A40", "dect.afield.tail.Qt.Efp.A40", FT_UINT8, BASE_DEC, VALS(Qt_EA40_vals), + 0x80, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A41, + {"A41", "dect.afield.tail.Qt.Efp.A41", FT_UINT8, BASE_DEC, VALS(Qt_EA41_vals), + 0x40, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A42, + {"A42", "dect.afield.tail.Qt.Efp.A42", FT_UINT8, BASE_DEC, VALS(Qt_EA42_vals), + 0x20, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A43, + {"A43", "dect.afield.tail.Qt.Efp.A43", FT_UINT8, BASE_DEC, VALS(Qt_EA43_vals), + 0x10, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A44, + {"A44", "dect.afield.tail.Qt.Efp.A44", FT_UINT8, BASE_DEC, VALS(Qt_EA44_vals), + 0x08, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A45, + {"A45", "dect.afield.tail.Qt.Efp.A45", FT_UINT8, BASE_DEC, VALS(Qt_EA45_vals), + 0x04, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A46, + {"A46", "dect.afield.tail.Qt.Efp.A46", FT_UINT8, BASE_DEC, VALS(Qt_EA46_vals), + 0x02, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_4_A47, + {"A47", "dect.afield.tail.Qt.Efp.A47", FT_UINT8, BASE_DEC, VALS(Qt_EA47_vals), + 0x01, NULL, HFILL}}, + + + /* Qt Multiframe Number */ + { &hf_dect_A_Tail_Qt_6_Spare, + {"Spare Bits", "dect.afield.tail.Qt.Mfn.Spare", FT_UINT8, BASE_DEC, NULL, + 0x0F, NULL, HFILL}}, + + { &hf_dect_A_Tail_Qt_6_Mfn, + {"Multiframe Number", "dect.afield.tail.Qt.Mfn.Mfn", FT_UINT8, BASE_DEC, NULL, + 0xFF, NULL, HFILL}}, + + /* Mt */ { &hf_dect_A_Tail_Mt_Mh, {"Mh", "dect.afield.tail.Mt.Mh", FT_UINT8, BASE_DEC, VALS(MTHead_vals), |