From Pascal Quantin:

Add the following enhancements to the UMTS RLC dissector
(as specified in 3GPP 25.322 v9.2.0):
- UDP framing protocol to allow dissection of RLC PDUs over UDP (like what is
done for LTE MAC/RLC/PDCP protocols)
- 15 bits Length Indicator support (both with variable and fixed LI size)
- Poll type SUFI
- enhanced dissection of LIST, Relative List and Bitmap SUFI
- dissection of Reset and Reset Ack Control PDU
- an option to decode RLC headers only
- an option to skip SDU reassembly

svn path=/trunk/; revision=37576
This commit is contained in:
Anders Broman 2011-06-06 20:01:53 +00:00
parent af0e8c25d0
commit 318e86e2d7
3 changed files with 766 additions and 171 deletions

View File

@ -189,6 +189,7 @@ static guint16 assign_rb_info(tvbuff_t *tvb, packet_info *pinfo, guint16 offset,
rlcinf->urnti[i] = urnti;
rlcinf->ciphered[i] = ciphered;
rlcinf->deciphered[i] = deciphered;
rlcinf->li_size[i] = RLC_LI_VARIABLE;
macinf->ctmux[i] = ctmux ? TRUE : FALSE;
switch (content) {

File diff suppressed because it is too large Load Diff

View File

@ -27,12 +27,84 @@ enum rlc_mode {
RLC_AM
};
enum rlc_li_size {
RLC_LI_VARIABLE,
RLC_LI_7BITS,
RLC_LI_15BITS
};
#define MAX_RLC_CHANS 64
typedef struct rlc_info
{
guint32 urnti[MAX_RLC_CHANS];
guint8 mode[MAX_RLC_CHANS];
guint8 rbid[MAX_RLC_CHANS];
enum rlc_li_size li_size[MAX_RLC_CHANS];
gboolean ciphered[MAX_RLC_CHANS];
gboolean deciphered[MAX_RLC_CHANS];
} rlc_info;
/*****************************************************************/
/* UDP framing format */
/* ----------------------- */
/* Several people have asked about dissecting RLC by framing */
/* PDUs over IP. A suggested format over UDP has been defined */
/* and implemented by this dissector, using the definitions */
/* below. A link to an example program showing you how to encode */
/* these headers and send RLC PDUs on a UDP socket is provided */
/* at http://wiki.wireshark.org/RLC */
/* */
/* A heuristic dissecter (enabled by a preference) will */
/* recognise a signature at the beginning of these frames. */
/* Until someone is using this format, suggestions for changes */
/* are welcome. */
/*****************************************************************/
/* Signature. Rather than try to define a port for this, or make the
port number a preference, frames will start with this string (with no
terminating NULL */
#define RLC_START_STRING "umts-rlc"
/* Conditional fields. The channel type or RLC mode should be present.
If the channel type is present, the RLC mode will be ignored.
If none of them is present, the decoding will be skipped.
The RLC mode tag uses the values from the rlc_mode enum. */
#define CHANNEL_TYPE_UNSPECIFIED 0
#define CHANNEL_TYPE_PCCH 1
#define CHANNEL_TYPE_CCCH 2
#define CHANNEL_TYPE_DCCH 3
#define CHANNEL_TYPE_PS_DTCH 4
#define CHANNEL_TYPE_CTCH 5
#define RLC_CHANNEL_TYPE_TAG 0x02
/* 1 byte */
#define RLC_MODE_TAG 0x03
/* 1 byte, enum rlc_mode value */
/* Optional fields. Attaching this info to frames will allow you
to show you display/filter/plot/add-custom-columns on these fields, so should
be added if available.
The format is to have the tag, followed by the value (there is no length field,
its implicit from the tag) */
#define DIRECTION_UPLINK 0
#define DIRECTION_DOWNLINK 1
#define RLC_DIRECTION_TAG 0x04
/* 1 byte */
#define RLC_URNTI_TAG 0x05
/* 4 bytes, network order */
#define RLC_RADIO_BEARER_ID_TAG 0x06
/* 1 byte */
#define RLC_LI_SIZE_TAG 0x07
/* 1 byte, enum rlc_li_size value */
/* RLC PDU. Following this tag comes the actual RLC PDU (there is no length, the PDU
continues until the end of the frame) */
#define RLC_PAYLOAD_TAG 0x01