blob: b030072eed1a4c80288d02f21a9e7745099544ba [file] [log] [blame]
Harald Weltec76f29f2017-11-22 12:46:46 +01001module BSSMAP_Templates {
2
3import from General_Types all;
4import from Osmocom_Types all;
5import from BSSAP_Types all;
6
7type integer BssmapCause;
8
9template PDU_BSSAP ts_BSSAP_BSSMAP := {
10 discriminator := '0'B,
11 spare := '0000000'B,
12 dlci := omit,
13 lengthIndicator := 0, /* overwritten by codec */
14 pdu := ?
15}
16
17template PDU_BSSAP tr_BSSAP_BSSMAP := {
18 discriminator := '0'B,
19 spare := '0000000'B,
20 dlci := omit,
21 lengthIndicator := ?,
22 pdu := {
23 bssmap := ?
24 }
25}
26
27template (value) BSSMAP_IE_Cause ts_BSSMAP_IE_Cause(BssmapCause val) := {
28 elementIdentifier := '04'O,
29 lengthIndicator := 0,
30 causeValue := int2bit(val, 7),
31 extensionCauseValue := '0'B,
32 spare1 := omit
33}
34
35template (value) PDU_BSSAP ts_BSSMAP_Reset(BssmapCause cause) modifies ts_BSSAP_BSSMAP := {
36 pdu := {
37 bssmap := {
38 reset := {
39 messageType := '30'O,
40 cause := ts_BSSMAP_IE_Cause(cause),
41 a_InterfaceSelectorForReset := omit
42 }
43 }
44 }
45}
46
Harald Welte365f4ed2017-11-23 00:00:43 +010047template PDU_BSSAP tr_BSSMAP_Reset modifies tr_BSSAP_BSSMAP := {
48 pdu := {
49 bssmap := {
50 reset := {
51 messageType := '30'O,
52 cause := ?,
53 a_InterfaceSelectorForReset := *
54 }
55 }
56 }
57}
58
Harald Weltec76f29f2017-11-22 12:46:46 +010059template (value) PDU_BSSAP ts_BSSMAP_ResetAck modifies ts_BSSAP_BSSMAP := {
60 pdu := {
61 bssmap := {
62 resetAck := {
63 messageType := '31'O,
64 a_InterfaceSelectorForReset := omit
65 }
66 }
67 }
68}
69
70template PDU_BSSAP tr_BSSMAP_ResetAck modifies tr_BSSAP_BSSMAP := {
71 pdu := {
72 bssmap := {
73 resetAck := {
74 messageType := '31'O,
75 a_InterfaceSelectorForReset := *
76 }
77 }
78 }
79}
80
81template BSSMAP_IE_CellIdentifier ts_BSSMAP_IE_CellID := {
82 elementIdentifier := '05'O,
83 lengthIndicator := 0,
84 cellIdentifierDiscriminator := '0000'B,
85 spare1_4 := '0000'B,
86 cellIdentification := ?
87}
88
89type uint16_t BssmapLAC;
90type uint16_t BssmapCI;
91
92/*
93template BSSMAP_IE_CellIdentifier ts_CellId_CGI(mcc, mnc, lac, ci)
94modifies ts_BSSMAP_IE_CellID := {
95 cellIdentification := {
96 cI_LAC_CGI := {
97 mnc_mcc := FIXME,
98 lac := int2oct(lac, 2),
99 ci := int2oct(ci, 2)
100 }
101 }
102}
103*/
104
105template BSSMAP_IE_CellIdentifier ts_CellID_LAC_CI(BssmapLAC lac, BssmapCI ci)
106modifies ts_BSSMAP_IE_CellID := {
107 cellIdentification := {
108 cI_LAC_CI := {
109 lac := int2oct(lac, 2),
110 ci := int2oct(ci, 2)
111 }
112 }
113}
114
115template BSSMAP_IE_CellIdentifier ts_CellId_CI(BssmapCI ci)
116modifies ts_BSSMAP_IE_CellID := {
117 cellIdentification := {
118 cI_CI := int2oct(ci, 2)
119 }
120}
121
122template BSSMAP_IE_CellIdentifier ts_CellId_none
123modifies ts_BSSMAP_IE_CellID := {
124 cellIdentification := {
125 cI_noCell := ''O
126 }
127}
128
129
130template BSSMAP_IE_Layer3Information ts_BSSMAP_IE_L3Info(octetstring l3info) := {
131 elementIdentifier := '17'O,
132 lengthIndicator := 0,
133 layer3info := l3info
134}
135
136template PDU_BSSAP ts_BSSMAP_ComplL3(BSSMAP_IE_CellIdentifier cell_id, octetstring l3_info)
137modifies ts_BSSAP_BSSMAP := {
138 pdu := {
139 bssmap := {
140 completeLayer3Information := {
141 messageType := '57'O,
142 cellIdentifier := cell_id,
143 layer3Information := ts_BSSMAP_IE_L3Info(l3_info),
144 chosenChannel := omit,
145 lSAIdentifier := omit,
146 aPDU := omit,
147 codecList := omit,
148 redirectAttemptFlag := omit,
149 sendSequenceNumber := omit,
150 iMSI := omit
151 }
152 }
153 }
154}
155
Harald Welte365f4ed2017-11-23 00:00:43 +0100156template PDU_BSSAP tr_BSSMAP_ComplL3 modifies tr_BSSAP_BSSMAP := {
157 pdu := {
158 bssmap := {
159 completeLayer3Information := ?
160 }
161 }
162}
163
164
Harald Weltec76f29f2017-11-22 12:46:46 +0100165template PDU_BSSAP ts_BSSMAP_HandoReq(BssmapCause cause, BSSMAP_IE_CellIdentifierList cid_list)
166modifies ts_BSSAP_BSSMAP := {
167 pdu := {
168 bssmap := {
169 handoverRequired := {
170 messageType := '11'O,
171 cause := ts_BSSMAP_IE_Cause(cause),
172 responseRequest := omit,
173 cellIdentifierList := cid_list,
174 circuitPoolList := omit,
175 currentChannelType1 := omit,
176 speechVersion := omit,
177 queueingIndicator := omit,
178 oldToNewBSSInfo := omit,
179 sourceToTargetRNCTransparentInfo := omit,
180 sourceToTargetRNCTransparentInfoCDMA := omit,
181 gERANClassmark := omit,
182 talkerPriority := omit,
183 speechCodec := omit,
184 cSG_Identifier := omit
185 }
186 }
187 }
188}
189
Harald Welte365f4ed2017-11-23 00:00:43 +0100190const OCT1 ChRate_TCHF := '08'O;
191const OCT1 ChRate_TCHH := '09'O;
192
193template (value) BSSMAP_IE_ChannelType ts_BSSMAP_IE_ChannelType := {
194 elementIdentifier := '0B'O, /* overwritten */
195 lengthIndicator := 0, /* overwritten */
196 speechOrDataIndicator := '0001'B, /* speech */
197 spare1_4 := '0000'B,
198 channelRateAndType := ChRate_TCHF,
199 speechId_DataIndicator := '01'O /* FRv1 */
200}
201
202template (value) BSSMAP_IE_CircuitIdentityCode ts_BSSMAP_IE_CIC(uint11_t span, uint5_t ts) := {
203 elementIdentifier := '01'O, /* overwritten */
204 cicHigh := bit2oct(substr(int2bit(span, 11) << 5, 0, 8)),
205 cicLow := bit2oct((substr(int2bit(span, 11), 8, 3) << 5) & int2bit(ts, 5))
206}
207
208template (value) PDU_BSSAP ts_BSSMAP_AssignmentCmd(uint11_t span, uint5_t ts)
209modifies ts_BSSAP_BSSMAP := {
210 pdu := {
211 bssmap := {
212 assignmentRequest := {
213 messageType :='01'O, /* overwritten */
214 channelType := ts_BSSMAP_IE_ChannelType,
215 layer3HeaderInfo := omit,
216 priority := omit,
217 circuitIdentityCode := ts_BSSMAP_IE_CIC(span, ts),
218 downLinkDTX_Flag := omit,
219 interferenceBandToBeUsed := omit,
220 classmarkInformationType2 := omit,
221 groupCallReference := omit,
222 talkerFlag := omit,
223 configurationEvolutionIndication := omit,
224 lsaAccesControlSuppression := omit,
225 serviceHandover := omit,
226 encryptionInformation := omit,
227 talkerPriority := omit,
228 aoIPTransportLayer := omit,
229 codecList := omit,
230 callIdentifier := omit,
231 kC128 := omit,
232 globalCallReference := omit,
233 lCLS_Configuration := omit,
234 lCLS_ConnectionStatusControl := omit,
235 lCLS_CorrelationNotNeeded := omit
236 }
237 }
238 }
239}
Harald Weltec76f29f2017-11-22 12:46:46 +0100240
241}