summaryrefslogtreecommitdiffstats
path: root/library/LLC_Templates.ttcn
blob: 086207cbea3866cd781703f83d791b8b2f173b21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
module LLC_Templates {

import from LLC_Types all;
import from Osmocom_Types all;
import from General_Types all;

template Address_field t_LLC_Addr(template BIT4 sapi, template BIT1 cr, template BIT1 pd := '0'B) := {
	sAPI := sapi,
	spare := '00'B,
	cR := cr,
	pD := '0'B
}

template (value) Control_field_UI ts_LLC_CtrlUI(uint9_t n_u, boolean encrypted := false,
					boolean protected := false) := {
	format := '110'B,
	spare := '00'B,
	nU := n_u,
	e := bool2bit(encrypted),
	pM := bool2bit(protected)
}

template (value) Control_field_U ts_LLC_CtrlU(BIT4 m_bits, BIT1 p_f) := {
	mBits := m_bits,
	pF := p_f,
	format := '111'B
}

template Control_field_UI tr_LLC_CtrlUI(template uint9_t n_u,
					template boolean encrypted := ?,
					template boolean protected := ?) := {
	format := '110'B,
	spare := '00'B,
	nU := n_u,
	e := bool2bit_tmpl(encrypted),
	pM := bool2bit_tmpl(protected)
}

template Control_field_U tr_LLC_CtrlU(template BIT4 m_bits := ?,
					template BIT1 p_f := ?) := {
	mBits := m_bits,
	pF := p_f,
	format := '111'B
}


template PDU_LLC ts_LLC_UI(octetstring payload, BIT4 sapi, BIT1 cr, uint9_t n_u,
			   boolean encrypted := false, boolean protected := false) := {
	pDU_LLC_UI := {
		address_field := t_LLC_Addr(sapi, cr),
		control_field := ts_LLC_CtrlUI(n_u, encrypted, protected),
		information_field_UI := payload,
		fCS := omit /* causes encoder to generate FCS */
	}
}

template PDU_LLC tr_LLC_UI(template octetstring payload := ?, template BIT4 sapi := ?,
			   template BIT1 cr := ?, template uint9_t n_u := ?,
			   template boolean encrypted := ?, template boolean protected := ?) := {
	pDU_LLC_UI := {
		address_field := t_LLC_Addr(sapi, cr),
		control_field := tr_LLC_CtrlUI(n_u, encrypted, protected),
		information_field_UI := payload,
		fCS := '000000'O /* provided by decoder if FCS OK */
	}
}

template PDU_LLC tr_LLC_XID(template XID_Information xid, template BIT4 sapi := ?,
			    template BIT1 cr := ?, template BIT1 p_f := ?) := {
	pDU_LLC_U := {
		address_field := t_LLC_Addr(sapi, cr),
		control_field := tr_LLC_CtrlU('1011'B, p_f),
		information_field_U := {
			xID := xid
		},
		fCS := '000000'O /* provided by decoder if FCS OK */
	}
}


const BIT4 c_LLC_SAPI_LLGMM := '0001'B;
const BIT4 c_LLC_SAPI_TOM2 := '0010'B;
const BIT4 c_LLC_SAPI_LL3 := '0011'B;
const BIT4 c_LLC_SAPI_LL5 := '0101'B;
const BIT4 c_LLC_SAPI_LLSMS := '0111'B;
const BIT4 c_LLC_SAPI_TOM8 := '1000'B;
const BIT4 c_LLC_SAPI_LL9 := '1001'B;
const BIT4 c_LLC_SAPI_LL11 := '1011'B;

const BIT1 LLC_CR_DL_CMD := '1'B;
const BIT1 LLC_CR_DL_RSP := '0'B;
const BIT1 LLC_CR_UL_CMD := '0'B;
const BIT1 LLC_CR_UL_RSP := '1'B;

/* LLC UI frame with SAPI for L3 payload */
template PDU_LLC tr_LLC_UI_L3 := ( tr_LLC_UI(?, c_LLC_SAPI_LLGMM) );

/* LLC UI frame with SAPI for User payload */
template PDU_LLC tr_LLC_UI_USER := tr_LLC_UI(?, (c_LLC_SAPI_LL3,
						 c_LLC_SAPI_LL5,
						 c_LLC_SAPI_LL9,
						 c_LLC_SAPI_LL11)
						);


}