mirror of
https://github.com/brmlab/osmo-tetra.git
synced 2025-06-10 02:44:05 +02:00
Introduce LLC layer that has been completely missign so far
All our MM/CMCE/SNDCP 'decodes' were broken previously, as they assumed that the MM/CMCE/SNDCP message follows immediately after the MAC header. However, there's the LLC layer in between. This is just simple LLC decoding and does not do re-assembly yet.
This commit is contained in:
parent
2c6eab8f48
commit
b5d6edbb82
4 changed files with 264 additions and 4 deletions
80
src/tetra_llc_pdu.h
Normal file
80
src/tetra_llc_pdu.h
Normal file
|
@ -0,0 +1,80 @@
|
|||
#ifndef TETRA_LLC_PDU_H
|
||||
#define TETRA_LLC_PDU_H
|
||||
|
||||
/* Table 21.1 */
|
||||
enum tetra_llc_pdu_t {
|
||||
TLLC_PDUT_BL_ADATA = 0,
|
||||
TLLC_PDUT_BL_DATA = 1,
|
||||
TLLC_PDUT_BL_UDATA = 2,
|
||||
TLLC_PDUT_BL_ACK = 3,
|
||||
TLLC_PDUT_BL_ADATA_FCS = 4,
|
||||
TLLC_PDUT_BL_DATA_FCS = 5,
|
||||
TLLC_PDUT_BL_UDATA_FCS = 6,
|
||||
TLLC_PDUT_BL_ACK_FCS = 7,
|
||||
TLLC_PDUT_AL_SETUP = 8,
|
||||
TLLC_PDUT_AL_DATA_FINAL = 9,
|
||||
TLLC_PDUT_AL_UDATA_UFINAL = 10,
|
||||
TLLC_PDUT_AL_ACK_RNR = 11,
|
||||
TLLC_PDUT_AL_RECONNECT = 12,
|
||||
TLLC_PDUT_SUPPL = 13,
|
||||
TLLC_PDUT_L2SIG = 14,
|
||||
TLLD_PDUT_AL_DISC = 15
|
||||
};
|
||||
const char *tetra_get_llc_pdut_name(uint8_t pdut);
|
||||
|
||||
/* Table 21.2 */
|
||||
enum tetra_llc_l2sig_pdu_t {
|
||||
TLLC_PDUT_L2_DATA_PRIO = 0,
|
||||
TLLC_PDUT_L2_SCHEDULE_SYNC = 1,
|
||||
TLLC_PDUT_L2_LINK_FB_CTRL = 2,
|
||||
TLLC_PDUT_L2_LINK_FB_INFO = 3,
|
||||
TLLC_PDUT_L2_LINK_FB_INFO_RD_PRIO = 4
|
||||
};
|
||||
|
||||
/* Table 21.3 */
|
||||
enum tetra_llc_suppl_pdu_t {
|
||||
TLLC_PDUT_SUPPL_ALX_DATA_FINAL = 0,
|
||||
TLLC_PDUT_SUPPL_ALX_UDATA_UFINAL = 1,
|
||||
TLLC_PDUT_SUPPL_ALX_ACK_RNR = 2
|
||||
};
|
||||
|
||||
/* Decoded */
|
||||
|
||||
enum tllc_pdut_dec {
|
||||
TLLC_PDUT_DEC_UNKNOWN,
|
||||
TLLC_PDUT_DEC_BL_ADATA,
|
||||
TLLC_PDUT_DEC_BL_DATA,
|
||||
TLLC_PDUT_DEC_BL_UDATA,
|
||||
TLLC_PDUT_DEC_BL_ACK,
|
||||
TLLC_PDUT_DEC_AL_SETUP,
|
||||
TLLC_PDUT_DEC_AL_DATA,
|
||||
TLLC_PDUT_DEC_AL_FINAL,
|
||||
TLLC_PDUT_DEC_AL_UDATA,
|
||||
TLLC_PDUT_DEC_AL_UFINAL,
|
||||
TLLC_PDUT_DEC_AL_ACK,
|
||||
TLLC_PDUT_DEC_AL_RNR,
|
||||
TLLC_PDUT_DEC_AL_RECONNECT,
|
||||
TLLC_PDUT_DEC_AL_DISC,
|
||||
TLLC_PDUT_DEC_ALX_DATA,
|
||||
TLLC_PDUT_DEC_ALX_FINAL,
|
||||
TLLC_PDUT_DEC_ALX_UDATA,
|
||||
TLLC_PDUT_DEC_ALX_UFINAL,
|
||||
TLLC_PDUT_DEC_ALX_ACK,
|
||||
TLLC_PDUT_DEC_ALX_RNR,
|
||||
};
|
||||
const char *tetra_get_llc_pdut_dec_name(enum tllc_pdut_dec pdut);
|
||||
|
||||
struct tetra_llc_pdu {
|
||||
enum tllc_pdut_dec pdu_type;
|
||||
uint8_t nr;
|
||||
uint8_t ns;
|
||||
uint8_t ss;
|
||||
uint32_t _fcs;
|
||||
uint32_t *fcs;
|
||||
uint8_t *tl_sdu; /* pointer to bitbuf */
|
||||
uint8_t tl_sdu_len; /* in bits */
|
||||
};
|
||||
|
||||
int tetra_llc_pdu_parse(struct tetra_llc_pdu *lpp, uint8_t *buf, int len);
|
||||
|
||||
#endif /* TETRA_LLC_PDU_H */
|
Loading…
Add table
Add a link
Reference in a new issue