aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kaiser <wireshark@kaiser.cx>2013-02-05 20:38:15 +0000
committerMartin Kaiser <wireshark@kaiser.cx>2013-02-05 20:38:15 +0000
commit974afe6319f9cea05916108d350d231294cac896 (patch)
treea4dab6b772a2d2ccb66bc9a2a707332d34546740
parentfe29434e82801fc6df0a1fb18b8fd119294884f8 (diff)
a DVB-CI session number is not globally unique, it's only unique per
transport connection, so it's not a good choice for a circuit id use (session number|transport connection id) as circuit id svn path=/trunk/; revision=47499
-rw-r--r--epan/address.h2
-rw-r--r--epan/dissectors/packet-dvbci.c13
2 files changed, 9 insertions, 6 deletions
diff --git a/epan/address.h b/epan/address.h
index c7b9959730..65bde09668 100644
--- a/epan/address.h
+++ b/epan/address.h
@@ -217,7 +217,7 @@ typedef enum {
CT_IAX2, /* IAX2 call id */
CT_H223, /* H.223 logical channel number */
CT_BICC, /* BICC Circuit identifier */
- CT_DVBCI /* DVB-CI session number */
+ CT_DVBCI /* DVB-CI session number|transport connection id */
/* Could also have ATM VPI/VCI pairs */
} circuit_type;
diff --git a/epan/dissectors/packet-dvbci.c b/epan/dissectors/packet-dvbci.c
index ca31bbcb64..358d568714 100644
--- a/epan/dissectors/packet-dvbci.c
+++ b/epan/dissectors/packet-dvbci.c
@@ -156,6 +156,9 @@
#define SESS_CLOSED 0x00
#define SESS_NB_NOT_ALLOC 0xF0
+/* circuit id from session number (16bit) and transport connection id * (8bit) */
+#define CT_ID(s,t) ((guint32)(s<<8|t))
+
/* resource id */
#define RES_ID_TYPE_MASK 0xC0000000
#define RES_CLASS_MASK 0x3FFF0000
@@ -3861,7 +3864,7 @@ dissect_dvbci_apdu(tvbuff_t *tvb, circuit_t *circuit,
static void
dissect_dvbci_spdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- guint8 direction)
+ guint8 direction, guint8 tcid)
{
guint32 spdu_len;
proto_item *ti = NULL;
@@ -3956,7 +3959,7 @@ dissect_dvbci_spdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
}
col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, "Session opened");
- circuit = circuit_new(CT_DVBCI, (guint32)ssnb, pinfo->fd->num);
+ circuit = circuit_new(CT_DVBCI, CT_ID(ssnb, tcid), pinfo->fd->num);
if (circuit) {
/* we always add the resource id immediately after the circuit
was created */
@@ -3980,7 +3983,7 @@ dissect_dvbci_spdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
ssnb = tvb_get_ntohs(tvb, offset+1);
proto_tree_add_item(sess_tree, hf_dvbci_sess_nb,
tvb, offset+1, 2, ENC_BIG_ENDIAN);
- circuit = find_circuit(CT_DVBCI, (guint32)ssnb, pinfo->fd->num);
+ circuit = find_circuit(CT_DVBCI, CT_ID(ssnb, tcid), pinfo->fd->num);
if (circuit)
close_circuit(circuit, pinfo->fd->num);
break;
@@ -3998,7 +4001,7 @@ dissect_dvbci_spdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
if (ssnb && !circuit)
- circuit = find_circuit(CT_DVBCI, (guint32)ssnb, pinfo->fd->num);
+ circuit = find_circuit(CT_DVBCI, CT_ID(ssnb, tcid), pinfo->fd->num);
/* if the packet contains no resource id, we add the cached id from
the circuit so that each packet has a resource id that can be
@@ -4272,7 +4275,7 @@ dissect_dvbci_tpdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
if (payload_tvb)
- dissect_dvbci_spdu(payload_tvb, pinfo, tree, direction);
+ dissect_dvbci_spdu(payload_tvb, pinfo, tree, direction, lpdu_tcid);
}