summaryrefslogtreecommitdiff
path: root/epan/dissectors/packet-dect.c
diff options
context:
space:
mode:
authorJörg Mayer <jmayer@loplof.de>2009-03-24 22:09:21 +0000
committerJörg Mayer <jmayer@loplof.de>2009-03-24 22:09:21 +0000
commitd50755f465706ad4a3f7b562a26b37fb9bd2b044 (patch)
tree731292593e06cb23a56c6bfffc72b6b8ef5c02c7 /epan/dissectors/packet-dect.c
parent0210800d08360362bd8e5c8dd6e11392f2afb9da (diff)
downloadwireshark-d50755f465706ad4a3f7b562a26b37fb9bd2b044.tar.gz
Andreas Schuler
small fix: In a PP packet TA=7 gets dissected as Paging tail. In case of PP it is really an Mt . svn path=/trunk/; revision=27843
Diffstat (limited to 'epan/dissectors/packet-dect.c')
-rw-r--r--epan/dissectors/packet-dect.c91
1 files changed, 65 insertions, 26 deletions
diff --git a/epan/dissectors/packet-dect.c b/epan/dissectors/packet-dect.c
index a812732584..352adf2829 100644
--- a/epan/dissectors/packet-dect.c
+++ b/epan/dissectors/packet-dect.c
@@ -48,6 +48,9 @@
#define ETHERTYPE_DECT 0x2323 /* move to epan/etypes.h */
+#define DECT_PACKET_PP 0
+#define DECT_PACKET_FP 1
+
/* scramble table with corrections by Jakub Hruska */
static guint8 scrt[8][31]=
{
@@ -97,7 +100,8 @@ static int hf_dect_rssi = -1;
static int hf_dect_slot = -1;
static int hf_dect_A = -1;
static int hf_dect_A_Head = -1;
-static int hf_dect_A_Head_TA = -1;
+static int hf_dect_A_Head_TA_FP = -1;
+static int hf_dect_A_Head_TA_PP = -1;
static int hf_dect_A_Head_Q1 = -1;
static int hf_dect_A_Head_BA = -1;
static int hf_dect_A_Head_Q2 = -1;
@@ -157,7 +161,7 @@ static const value_string tranceiver_mode[]=
{0, NULL}
};
-static const value_string TA_vals[]=
+static const value_string TA_vals_FP[]=
{
{0, "Ct Next Data Packet"},
{1, "Ct First Data Packet"},
@@ -170,6 +174,19 @@ static const value_string TA_vals[]=
{0, NULL}
};
+static const value_string TA_vals_PP[]=
+{
+ {0, "Ct Next Data Packet"},
+ {1, "Ct First Data Packet"},
+ {2, "Nt Identities Information on Connectionless Bearer"},
+ {3, "Nt Identities Information"},
+ {4, "Qt Multiframe Synchronisation and System Information"},
+ {5, "Escape"},
+ {6, "Mt MAC Layer Control"},
+ {7, "Mt MAC Layer Control,first packet"},
+ {0, NULL}
+};
+
static const value_string BA_vals[]=
{
{0, "U-Type, In, SIn or Ip Packet No. 0 or No Valid Ip_error_detect Channel Data"},
@@ -913,7 +930,7 @@ dissect_bfield(gboolean type _U_, struct dect_afield *pkt_afield,
}
static void
-dissect_decttype(gboolean type, struct dect_afield *pkt_afield,
+dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield,
struct dect_bfield *pkt_bfield, packet_info *pinfo, const guint8 *pkt_ptr,
tvbuff_t *tvb, proto_item *ti, proto_tree *DectTree)
{
@@ -921,6 +938,7 @@ dissect_decttype(gboolean type, struct dect_afield *pkt_afield,
guint16 rcrc;
guint8 rcrcdat[8];
gint offset =11;
+ guint8 tailtype =0;
proto_item *afieldti =NULL;
proto_item *aheadti =NULL;
proto_item *atailti =NULL;
@@ -945,25 +963,38 @@ dissect_decttype(gboolean type, struct dect_afield *pkt_afield,
aheadti = proto_tree_add_uint_format(afieldti, hf_dect_A_Head, tvb, offset, 1, 0x2323, "Header");
AHead = proto_item_add_subtree(aheadti, ett_ahead);
- proto_tree_add_uint(AHead, hf_dect_A_Head_TA, tvb, offset, 1, pkt_afield->Header);
+ if(dect_packet_type==DECT_PACKET_FP)
+ proto_tree_add_uint(AHead, hf_dect_A_Head_TA_FP, tvb, offset, 1, pkt_afield->Header);
+ else
+ proto_tree_add_uint(AHead, hf_dect_A_Head_TA_PP, tvb, offset, 1, pkt_afield->Header);
+
proto_tree_add_uint(AHead, hf_dect_A_Head_Q1, tvb, offset, 1, pkt_afield->Header);
proto_tree_add_uint(AHead, hf_dect_A_Head_BA, tvb, offset, 1, pkt_afield->Header);
proto_tree_add_uint(AHead, hf_dect_A_Head_Q2, tvb, offset, 1, pkt_afield->Header);
offset++;
/* Tail */
- atailti = proto_tree_add_uint_format(afieldti, hf_dect_A_Tail, tvb, offset, 5, 0x2323, "Tail: %s", TA_vals[(pkt_afield->Header&0xE0)>>5].strptr);
+ if(dect_packet_type==DECT_PACKET_FP)
+ {
+ atailti = proto_tree_add_uint_format(afieldti, hf_dect_A_Tail, tvb, offset, 5, 0x2323, "Tail: %s", TA_vals_FP[(pkt_afield->Header&0xE0)>>5].strptr);
+ }
+ else
+ {
+ atailti = proto_tree_add_uint_format(afieldti, hf_dect_A_Tail, tvb, offset, 5, 0x2323, "Tail: %s", TA_vals_PP[(pkt_afield->Header&0xE0)>>5].strptr);
+ }
+
+
ATail = proto_item_add_subtree(atailti, ett_atail);
- switch((pkt_afield->Header&0xE0)>>5)
+ tailtype = (pkt_afield->Header&0xE0)>>5;
+
+ if((tailtype==0)||(tailtype==1)) /* Ct */
{
- case 0: /* Ct */
- case 1:
if(check_col(pinfo->cinfo, COL_HPUX_SUBSYS))
col_set_str(pinfo->cinfo, COL_HPUX_SUBSYS, "[Ct]");
- break;
- case 2: /* Nt */
- case 3: /* Nt connectionless bearer */
+ }
+ else if((tailtype==2)||(tailtype==3)) /* Nt, Nt connectionless bearer */
+ {
if(check_col(pinfo->cinfo, COL_DEF_NET_SRC))
{
str_p = ep_strdup_printf("RFPI:%.2x%.2x%.2x%.2x%.2x"
@@ -982,8 +1013,9 @@ dissect_decttype(gboolean type, struct dect_afield *pkt_afield,
proto_tree_add_uint_format(atailti, hf_dect_A_Tail_Nt, tvb, offset, 5, 0x2323, "RFPI:%.2x%.2x%.2x%.2x%.2x"
, pkt_afield->Tail[0], pkt_afield->Tail[1], pkt_afield->Tail[2], pkt_afield->Tail[3]
, pkt_afield->Tail[4]);
- break;
- case 4: /* Qt */
+ }
+ else if(tailtype==4) /* Qt */
+ {
if(check_col(pinfo->cinfo, COL_HPUX_SUBSYS))
col_set_str(pinfo->cinfo, COL_HPUX_SUBSYS, "[Qt]");
@@ -1100,10 +1132,12 @@ dissect_decttype(gboolean type, struct dect_afield *pkt_afield,
col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Reserved");
break;
}
- break;
- case 5: /* Escape */
- break;
- case 6: /* Mt */
+ }
+ else if(tailtype==5) /* Escape */
+ {
+ }
+ else if((tailtype==6)||((tailtype==7)&&(dect_packet_type==DECT_PACKET_PP))) /* Mt */
+ {
if(check_col(pinfo->cinfo, COL_HPUX_SUBSYS))
col_set_str(pinfo->cinfo, COL_HPUX_SUBSYS, "[Mt]");
@@ -1119,7 +1153,7 @@ dissect_decttype(gboolean type, struct dect_afield *pkt_afield,
if(((pkt_afield->Tail[0]&&0x0f)==6)||((pkt_afield->Tail[0]&&0x0f)==7))
{
- proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Mt_Mh, tvb, offset, 5, 0x2323, "hier sollten attribute stehn...");
+ proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Mt_Mh, tvb, offset, 5, 0x2323, "here should be attributes...");
}
else
{
@@ -1192,8 +1226,9 @@ dissect_decttype(gboolean type, struct dect_afield *pkt_afield,
col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "Reserved");
break;
}
- break;
- case 7: /* Pt */
+ }
+ else if((tailtype==7)&&(dect_packet_type==DECT_PACKET_FP)) /* Pt */
+ {
if(check_col(pinfo->cinfo, COL_HPUX_SUBSYS))
col_set_str(pinfo->cinfo, COL_HPUX_SUBSYS, "[Pt]");
@@ -1301,8 +1336,8 @@ dissect_decttype(gboolean type, struct dect_afield *pkt_afield,
col_append_str(pinfo->cinfo, COL_DEF_NET_SRC, "All of a Long Page: ");
break;
}
- break;
}
+
offset+=5;
/* R-CRC */
@@ -1319,7 +1354,7 @@ dissect_decttype(gboolean type, struct dect_afield *pkt_afield,
offset+=2;
/* **************** B-Field ************************************/
- offset=dissect_bfield(type, pkt_afield, pkt_bfield, pinfo, pkt_ptr, tvb, ti, DectTree, offset);
+ offset=dissect_bfield(dect_packet_type, pkt_afield, pkt_bfield, pinfo, pkt_ptr, tvb, ti, DectTree, offset);
}
static void
@@ -1409,7 +1444,7 @@ dissect_dect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
col_set_str(pinfo->cinfo, COL_PROTOCOL, "DECT PP");
}
proto_item_append_text(typeti, " Phone Packet");
- dissect_decttype(0, &pkt_afield, &pkt_bfield, pinfo, pkt_ptr, tvb, ti, DectTree);
+ dissect_decttype(DECT_PACKET_PP, &pkt_afield, &pkt_bfield, pinfo, pkt_ptr, tvb, ti, DectTree);
break;
case 0xe98a:
if(check_col(pinfo->cinfo, COL_PROTOCOL))
@@ -1417,7 +1452,7 @@ dissect_dect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
col_set_str(pinfo->cinfo, COL_PROTOCOL, "DECT RFP");
}
proto_item_append_text(typeti, " Station Packet");
- dissect_decttype(1, &pkt_afield, &pkt_bfield, pinfo, pkt_ptr, tvb, ti, DectTree);
+ dissect_decttype(DECT_PACKET_FP, &pkt_afield, &pkt_bfield, pinfo, pkt_ptr, tvb, ti, DectTree);
break;
default:
if(check_col(pinfo->cinfo, COL_PROTOCOL))
@@ -1473,8 +1508,12 @@ proto_register_dect(void)
{"A-Field Header", "dect.afield.head", FT_UINT8, BASE_DEC, NULL,
0x0, NULL, HFILL}},
- { &hf_dect_A_Head_TA,
- {"TA", "dect.afield.head.TA", FT_UINT8, BASE_DEC, VALS(TA_vals),
+ { &hf_dect_A_Head_TA_FP,
+ {"TA", "dect.afield.head.TA", FT_UINT8, BASE_DEC, VALS(TA_vals_FP),
+ 0xE0, NULL, HFILL}},
+
+ { &hf_dect_A_Head_TA_PP,
+ {"TA", "dect.afield.head.TA", FT_UINT8, BASE_DEC, VALS(TA_vals_PP),
0xE0, NULL, HFILL}},
{ &hf_dect_A_Head_Q1,