blob: ded6a631efbf5d80931380b2c30bc62e7c24b6dc [file] [log] [blame]
Andrey Velikiyb39df232019-06-14 21:08:00 +03001% This Source Code Form is subject to the terms of the Mozilla Public
2% License, v. 2.0. If a copy of the MPL was not distributed with this
3% file, You can obtain one at https://mozilla.org/MPL/2.0/.
4% (C) 2019 Andrey Velikiy <agreat22@gmail.com>
5% (C) 2019 Fairwaves (edited)
6
7-ifndef(GSUP_PROTOCOL).
8-define(GSUP_PROTOCOL, true).
9
10-type 'GSUPMessageType'() :: location_upd_req
11 | location_upd_err
12 | location_upd_res
13 | send_auth_info_req
14 | send_auth_info_err
15 | send_auth_info_res
16 | auth_failure_report
17 | purge_ms_req
18 | purge_ms_err
19 | purge_ms_res
20 | insert_sub_data_req
21 | insert_sub_data_err
22 | insert_sub_data_res
23 | delete_sub_data_req
24 | delete_sub_data_err
25 | delete_sub_data_res
26 | location_cancellation_req
27 | location_cancellation_err
28 | location_cancellation_res
29 | ss_req
30 | ss_err
31 | ss_res
Andrey Velikiyfde0fd92019-08-02 09:42:22 +030032 | mo_forward_sm_req
33 | mo_forward_sm_err
34 | mo_forward_sm_res
35 | mt_forward_sm_req
36 | mt_forward_sm_err
37 | mt_forward_sm_res
Andrey Velikiyb39df232019-06-14 21:08:00 +030038 | ready_for_sm_req
39 | ready_for_sm_err
40 | ready_for_sm_res
41 | check_imei_req
42 | check_imei_err
Andrey Velikiybb299662019-06-19 14:19:10 +030043 | check_imei_res
44 | e_prepare_handover_req
45 | e_prepare_handover_err
46 | e_prepare_handover_res
47 | e_prepare_subseq_handover_req
48 | e_prepare_subseq_handover_err
49 | e_prepare_subseq_handover_res
50 | e_send_end_signal_req
51 | e_send_end_signal_err
52 | e_send_end_signal_res
53 | e_process_access_signalling_req
54 | e_forward_access_signalling_req
55 | e_close
56 | e_abort
57 | e_routing_err.
Andrey Velikiyb39df232019-06-14 21:08:00 +030058
Harald Welteb76c7fa2019-08-22 13:48:00 +020059-type 'GSUPRatType'() :: rat_unknown | rat_geran_a | rat_utran_iu | rat_eutran_sgs.
60
Harald Welte0ba55332019-08-12 18:53:08 +020061-type 'GSUPAuthTuple'() :: #{
62 rand := binary(),
63 sres := binary(),
64 kc := binary(),
65 ik => binary(),
66 ck => binary(),
67 autn => binary(),
68 res => binary()
69}.
70
Harald Weltec92ebfa2019-08-13 07:37:20 +020071-type 'GSUPPdpInfo'() :: #{
72 pdp_context_id => integer(),
73 pdp_type => integer(),
74 access_point_name => binary(),
75 quality_of_service => binary(),
76 pdp_charging => integer()
77}.
78
Andrey Velikiyb39df232019-06-14 21:08:00 +030079-type 'GSUPMessage'() :: #{
80 message_type := 'GSUPMessageType'(),
81 imsi := binary(),
82 cause => integer(),
Harald Welte0ba55332019-08-12 18:53:08 +020083 auth_tuples => ['GSUPAuthTuple'()],
Andrey Velikiyb39df232019-06-14 21:08:00 +030084 pdp_info_complete => true,
Harald Weltec92ebfa2019-08-13 07:37:20 +020085 pdp_info_list => ['GSUPPdpInfo'()],
Andrey Velikiyb39df232019-06-14 21:08:00 +030086 cancellation_type => integer(),
87 freeze_p_tmsi => true,
88 msisdn => binary(),
89 hlr_number => binary(),
90 pdp_context_id => [integer()],
91 pdp_charging => integer(),
92 rand => binary(),
93 auts => binary(),
94 cn_domain => integer(),
Harald Welteb76c7fa2019-08-22 13:48:00 +020095 rat_type => 'GSUPRatType'(),
Andrey Velikiyb39df232019-06-14 21:08:00 +030096 session_id => integer(),
97 session_state => integer(),
98 ss_info => binary(),
99 sm_rp_mr => integer(),
100 sm_rp_da => binary(),
101 sm_rp_oa => binary(),
102 sm_rp_ui => binary(),
103 sm_rp_cause => integer(),
104 sm_rp_mms => integer(),
105 sm_alert_reason => integer(),
106 imei => binary(),
Andrey Velikiyc66c8d02019-06-19 14:16:52 +0300107 imei_check_result => integer(),
Andrey Velikiybb299662019-06-19 14:19:10 +0300108 message_class => integer(),
109 source_name => binary(),
110 destination_name => binary(),
111 an_apdu => binary(),
112 rr_cause => integer(),
113 session_management_cause => integer(),
114 bssap_cause => integer()
Andrey Velikiyb39df232019-06-14 21:08:00 +0300115}.
116
117-define(SESSION_STATE_BEGIN, 1).
118-define(SESSION_STATE_CONTINUE, 2).
119-define(SESSION_STATE_END, 3).
120
121-define(IMSI, 16#01).
122-define(CAUSE, 16#02).
123-define(AUTH_TUPLE, 16#03).
124-define(PDP_INFO_COMPLETE, 16#04).
125-define(PDP_INFO, 16#05).
126-define(CANCELLATION_TYPE, 16#06).
127-define(FREEZE_P_TMSI, 16#07).
128-define(MSISDN, 16#08).
129-define(HLR_NUMBER, 16#09).
Andrey Velikiyc66c8d02019-06-19 14:16:52 +0300130-define(MESSAGE_CLASS, 16#0a).
Andrey Velikiyb39df232019-06-14 21:08:00 +0300131-define(PDP_CONTEXT_ID, 16#10).
132-define(PDP_TYPE, 16#11).
133-define(ACCESS_POINT_NAME, 16#12).
134-define(QUALITY_OF_SERVICE, 16#13).
135-define(PDP_CHARGING, 16#14).
136-define(RAND, 16#20).
137-define(SRES, 16#21).
138-define(KC, 16#22).
139-define(IK, 16#23).
140-define(CK, 16#24).
141-define(AUTN, 16#25).
142-define(AUTS, 16#26).
143-define(RES, 16#27).
144-define(CN_DOMAIN, 16#28).
Harald Welteb76c7fa2019-08-22 13:48:00 +0200145-define(RAT_TYPE, 16#29).
Andrey Velikiyb39df232019-06-14 21:08:00 +0300146-define(SESSION_ID, 16#30).
147-define(SESSION_STATE, 16#31).
148-define(SS_INFO, 16#35).
149-define(SM_RP_MR, 16#40).
150-define(SM_RP_DA, 16#41).
151-define(SM_RP_OA, 16#42).
152-define(SM_RP_UI, 16#43).
153-define(SM_RP_CAUSE, 16#44).
154-define(SM_RP_MMS, 16#45).
155-define(SM_ALERT_REASON, 16#46).
156-define(IMEI, 16#50).
157-define(IMEI_CHECK_RESULT, 16#51).
Andrey Velikiybb299662019-06-19 14:19:10 +0300158-define(SOURCE_NAME, 16#60).
159-define(DESTINATION_NAME, 16#61).
160-define(AN_APDU, 16#62).
161-define(RR_CAUSE, 16#63).
162-define(BSSAP_CAUSE, 16#64).
163-define(SESSION_MANAGEMENT_CAUSE, 16#65).
Andrey Velikiyb39df232019-06-14 21:08:00 +0300164
165-define(MANDATORY_DEFAULT, [imsi, message_type]).
166
Andrey Velikiyc66c8d02019-06-19 14:16:52 +0300167-define(OPTIONAL_DEFAULT, [message_class]).
168
Andrey Velikiyb39df232019-06-14 21:08:00 +0300169-define (GSUP_MESSAGES(), #{
170 16#04 => #{message_type => location_upd_req, mandatory => [], optional => [cn_domain]},
171 16#05 => #{message_type => location_upd_err, mandatory => [cause]},
Andrey Velikiy1e801782019-06-24 14:09:57 +0300172 16#06 => #{message_type => location_upd_res, mandatory => [], optional => [msisdn, hlr_number, pdp_info_complete, pdp_info_list, pdp_charging]},
Harald Welteb76c7fa2019-08-22 13:48:00 +0200173 16#08 => #{message_type => send_auth_info_req, mandatory => [], optional => [cn_domain, auts, rand, rat_type]},
Andrey Velikiyb39df232019-06-14 21:08:00 +0300174 16#09 => #{message_type => send_auth_info_err, mandatory => [cause]},
Andrey Velikiy1e801782019-06-24 14:09:57 +0300175 16#0a => #{message_type => send_auth_info_res, mandatory => [], optional => [auth_tuples, auts, rand]},
Andrey Velikiyb39df232019-06-14 21:08:00 +0300176 16#0b => #{message_type => auth_failure_report, mandatory => [], optional => [cn_domain]},
Andrey Velikiy1e801782019-06-24 14:09:57 +0300177 16#0c => #{message_type => purge_ms_req, mandatory => [], optional => [cn_domain, hlr_number]},
Andrey Velikiyb39df232019-06-14 21:08:00 +0300178 16#0d => #{message_type => purge_ms_err, mandatory => [cause]},
179 16#0e => #{message_type => purge_ms_res, mandatory => [freeze_p_tmsi]},
180 16#10 => #{message_type => insert_sub_data_req, mandatory => [pdp_info_complete], optional => [cn_domain, msisdn, hlr_number, pdp_info_list, pdp_charging]},
181 16#11 => #{message_type => insert_sub_data_err, mandatory => [cause]},
182 16#12 => #{message_type => insert_sub_data_res, mandatory => []},
183 16#14 => #{message_type => delete_sub_data_req, mandatory => [], optional => [cn_domain, pdp_context_id]},
184 16#15 => #{message_type => delete_sub_data_err, mandatory => [cause]},
185 16#16 => #{message_type => delete_sub_data_res, mandatory => []},
186 16#1c => #{message_type => location_cancellation_req, mandatory => [], optional => [cn_domain, cancellation_type]},
187 16#1d => #{message_type => location_cancellation_err, mandatory => [cause]},
188 16#1e => #{message_type => location_cancellation_res, mandatory => [], optional => [cn_domain]},
189 16#20 => #{message_type => ss_req, mandatory => [session_id, session_state], optional => [ss_info]},
190 16#21 => #{message_type => ss_err, mandatory => [session_id, session_state, cause]},
191 16#22 => #{message_type => ss_res, mandatory => [session_id, session_state], optional => [ss_info]},
Andrey Velikiyfde0fd92019-08-02 09:42:22 +0300192 16#24 => #{message_type => mo_forward_sm_req, mandatory => [sm_rp_mr, sm_rp_da, sm_rp_oa, sm_rp_ui]},
193 16#25 => #{message_type => mo_forward_sm_err, mandatory => [sm_rp_mr, sm_rp_cause], optional => [sm_rp_ui]},
194 16#26 => #{message_type => mo_forward_sm_res, mandatory => [sm_rp_mr], optional => [sm_rp_ui]},
195 16#28 => #{message_type => mt_forward_sm_req, mandatory => [sm_rp_mr, sm_rp_da, sm_rp_oa, sm_rp_ui], optional => [sm_rp_mms]},
196 16#29 => #{message_type => mt_forward_sm_err, mandatory => [sm_rp_mr, sm_rp_cause], optional => [sm_rp_ui]},
197 16#2a => #{message_type => mt_forward_sm_res, mandatory => [sm_rp_mr], optional => [sm_rp_ui]},
Andrey Velikiy1e801782019-06-24 14:09:57 +0300198 16#2c => #{message_type => ready_for_sm_req, mandatory => [sm_alert_reason]},
199 16#2d => #{message_type => ready_for_sm_err, mandatory => [sm_rp_cause], optional => [sm_rp_ui]},
200 16#2e => #{message_type => ready_for_sm_res, mandatory => []},
Andrey Velikiyb39df232019-06-14 21:08:00 +0300201 16#30 => #{message_type => check_imei_req, mandatory => [imei]},
202 16#31 => #{message_type => check_imei_err, mandatory => [cause]},
Andrey Velikiybb299662019-06-19 14:19:10 +0300203 16#32 => #{message_type => check_imei_res, mandatory => [imei_check_result]},
204 16#34 => #{message_type => e_prepare_handover_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
205 16#35 => #{message_type => e_prepare_handover_err, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state, bssap_cause]},
206 16#36 => #{message_type => e_prepare_handover_res, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
207 16#38 => #{message_type => e_prepare_subseq_handover_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
208 16#39 => #{message_type => e_prepare_subseq_handover_err, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state, bssap_cause]},
209 16#3a => #{message_type => e_prepare_subseq_handover_res, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
210 16#3c => #{message_type => e_send_end_signal_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
211 16#3d => #{message_type => e_send_end_signal_err, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state, bssap_cause]},
212 16#3e => #{message_type => e_send_end_signal_res, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
213 16#40 => #{message_type => e_process_access_signalling_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
214 16#44 => #{message_type => e_forward_access_signalling_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
215 16#47 => #{message_type => e_close, mandatory => [message_class, source_name, destination_name, session_id, session_state]},
216 16#4b => #{message_type => e_abort, mandatory => [message_class, session_id, session_state, bssap_cause]},
217 16#4e => #{message_type => e_routing_err, mandatory => [message_class, source_name, destination_name, session_id, session_state]}
Andrey Velikiyb39df232019-06-14 21:08:00 +0300218}).
219
220-define(AUTH_TUPLE_MANDATORY, [rand, sres, kc]).
221-define(AUTH_TUPLE_OPTIONAL, [ik, ck, autn, res]).
222-define(PDP_INFO_MANDATORY, []).
223-define(PDP_INFO_OPTIONAL, [pdp_context_id, pdp_type, access_point_name, quality_of_service, pdp_charging]).
224
225-endif.