blob: 5db534ebd9301837916c73bef023a05d65d4f022 [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>
Pau Espin Pedrol9487d922024-01-22 14:38:31 +01005% (C) 2019 Fairwaves (edited)
Harald Welteb470dfa2019-12-01 16:28:48 +01006% (C) 2019 Harald Welte <laforge@gnumonks.org>
Andrey Velikiyb39df232019-06-14 21:08:00 +03007
8-ifndef(GSUP_PROTOCOL).
9-define(GSUP_PROTOCOL, true).
10
11-type 'GSUPMessageType'() :: location_upd_req
12 | location_upd_err
13 | location_upd_res
14 | send_auth_info_req
15 | send_auth_info_err
16 | send_auth_info_res
17 | auth_failure_report
18 | purge_ms_req
19 | purge_ms_err
20 | purge_ms_res
21 | insert_sub_data_req
22 | insert_sub_data_err
23 | insert_sub_data_res
24 | delete_sub_data_req
25 | delete_sub_data_err
26 | delete_sub_data_res
27 | location_cancellation_req
28 | location_cancellation_err
29 | location_cancellation_res
30 | ss_req
31 | ss_err
32 | ss_res
Andrey Velikiyfde0fd92019-08-02 09:42:22 +030033 | mo_forward_sm_req
34 | mo_forward_sm_err
35 | mo_forward_sm_res
36 | mt_forward_sm_req
37 | mt_forward_sm_err
38 | mt_forward_sm_res
Andrey Velikiyb39df232019-06-14 21:08:00 +030039 | ready_for_sm_req
40 | ready_for_sm_err
41 | ready_for_sm_res
42 | check_imei_req
43 | check_imei_err
Andrey Velikiybb299662019-06-19 14:19:10 +030044 | check_imei_res
45 | e_prepare_handover_req
46 | e_prepare_handover_err
47 | e_prepare_handover_res
48 | e_prepare_subseq_handover_req
49 | e_prepare_subseq_handover_err
50 | e_prepare_subseq_handover_res
51 | e_send_end_signal_req
52 | e_send_end_signal_err
53 | e_send_end_signal_res
54 | e_process_access_signalling_req
55 | e_forward_access_signalling_req
56 | e_close
57 | e_abort
58 | e_routing_err.
Andrey Velikiyb39df232019-06-14 21:08:00 +030059
Harald Welteb76c7fa2019-08-22 13:48:00 +020060-type 'GSUPRatType'() :: rat_unknown | rat_geran_a | rat_utran_iu | rat_eutran_sgs.
61
Harald Welte0ba55332019-08-12 18:53:08 +020062-type 'GSUPAuthTuple'() :: #{
63 rand := binary(),
64 sres := binary(),
65 kc := binary(),
66 ik => binary(),
67 ck => binary(),
68 autn => binary(),
69 res => binary()
70}.
71
Harald Weltec92ebfa2019-08-13 07:37:20 +020072-type 'GSUPPdpInfo'() :: #{
73 pdp_context_id => integer(),
74 pdp_type => integer(),
75 access_point_name => binary(),
76 quality_of_service => binary(),
77 pdp_charging => integer()
78}.
79
Andrey Velikiyb39df232019-06-14 21:08:00 +030080-type 'GSUPMessage'() :: #{
81 message_type := 'GSUPMessageType'(),
82 imsi := binary(),
83 cause => integer(),
Harald Welte0ba55332019-08-12 18:53:08 +020084 auth_tuples => ['GSUPAuthTuple'()],
Andrey Velikiyb39df232019-06-14 21:08:00 +030085 pdp_info_complete => true,
Harald Weltec92ebfa2019-08-13 07:37:20 +020086 pdp_info_list => ['GSUPPdpInfo'()],
Andrey Velikiyb39df232019-06-14 21:08:00 +030087 cancellation_type => integer(),
Pau Espin Pedrol9487d922024-01-22 14:38:31 +010088 freeze_p_tmsi => true,
Andrey Velikiyb39df232019-06-14 21:08:00 +030089 msisdn => binary(),
90 hlr_number => binary(),
91 pdp_context_id => [integer()],
92 pdp_charging => integer(),
93 rand => binary(),
94 auts => binary(),
95 cn_domain => integer(),
Harald Weltebb32d462019-12-01 16:20:50 +010096 supported_rat_types => ['GSUPRatType'()],
Harald Welteb470dfa2019-12-01 16:28:48 +010097 current_rat_type => 'GSUPRatType'(),
Andrey Velikiyb39df232019-06-14 21:08:00 +030098 session_id => integer(),
99 session_state => integer(),
100 ss_info => binary(),
101 sm_rp_mr => integer(),
102 sm_rp_da => binary(),
103 sm_rp_oa => binary(),
104 sm_rp_ui => binary(),
105 sm_rp_cause => integer(),
106 sm_rp_mms => integer(),
107 sm_alert_reason => integer(),
108 imei => binary(),
Andrey Velikiyc66c8d02019-06-19 14:16:52 +0300109 imei_check_result => integer(),
Alexander Couzensb656fc12019-12-27 05:04:40 +0100110 num_vectors_req => integer(),
Andrey Velikiybb299662019-06-19 14:19:10 +0300111 message_class => integer(),
112 source_name => binary(),
113 destination_name => binary(),
114 an_apdu => binary(),
115 rr_cause => integer(),
116 session_management_cause => integer(),
117 bssap_cause => integer()
Andrey Velikiyb39df232019-06-14 21:08:00 +0300118}.
119
120-define(SESSION_STATE_BEGIN, 1).
121-define(SESSION_STATE_CONTINUE, 2).
122-define(SESSION_STATE_END, 3).
123
124-define(IMSI, 16#01).
125-define(CAUSE, 16#02).
126-define(AUTH_TUPLE, 16#03).
127-define(PDP_INFO_COMPLETE, 16#04).
128-define(PDP_INFO, 16#05).
129-define(CANCELLATION_TYPE, 16#06).
130-define(FREEZE_P_TMSI, 16#07).
131-define(MSISDN, 16#08).
132-define(HLR_NUMBER, 16#09).
Andrey Velikiyc66c8d02019-06-19 14:16:52 +0300133-define(MESSAGE_CLASS, 16#0a).
Andrey Velikiyb39df232019-06-14 21:08:00 +0300134-define(PDP_CONTEXT_ID, 16#10).
135-define(PDP_TYPE, 16#11).
136-define(ACCESS_POINT_NAME, 16#12).
137-define(QUALITY_OF_SERVICE, 16#13).
138-define(PDP_CHARGING, 16#14).
139-define(RAND, 16#20).
140-define(SRES, 16#21).
141-define(KC, 16#22).
142-define(IK, 16#23).
143-define(CK, 16#24).
144-define(AUTN, 16#25).
145-define(AUTS, 16#26).
146-define(RES, 16#27).
147-define(CN_DOMAIN, 16#28).
Harald Weltebb32d462019-12-01 16:20:50 +0100148-define(SUPPORTED_RAT_TYPES, 16#29).
Harald Welteb470dfa2019-12-01 16:28:48 +0100149-define(CURRENT_RAT_TYPE, 16#2a).
Andrey Velikiyb39df232019-06-14 21:08:00 +0300150-define(SESSION_ID, 16#30).
151-define(SESSION_STATE, 16#31).
152-define(SS_INFO, 16#35).
153-define(SM_RP_MR, 16#40).
154-define(SM_RP_DA, 16#41).
155-define(SM_RP_OA, 16#42).
156-define(SM_RP_UI, 16#43).
157-define(SM_RP_CAUSE, 16#44).
158-define(SM_RP_MMS, 16#45).
159-define(SM_ALERT_REASON, 16#46).
160-define(IMEI, 16#50).
161-define(IMEI_CHECK_RESULT, 16#51).
Alexander Couzensb656fc12019-12-27 05:04:40 +0100162-define(NUM_VECTORS_REQ, 16#52).
Andrey Velikiybb299662019-06-19 14:19:10 +0300163-define(SOURCE_NAME, 16#60).
164-define(DESTINATION_NAME, 16#61).
165-define(AN_APDU, 16#62).
166-define(RR_CAUSE, 16#63).
167-define(BSSAP_CAUSE, 16#64).
168-define(SESSION_MANAGEMENT_CAUSE, 16#65).
Andrey Velikiyb39df232019-06-14 21:08:00 +0300169
170-define(MANDATORY_DEFAULT, [imsi, message_type]).
171
Vadim Yanitskiye708e542019-12-26 13:14:35 +0100172-define(OPTIONAL_DEFAULT, [message_class, source_name, destination_name]).
Andrey Velikiyc66c8d02019-06-19 14:16:52 +0300173
Andrey Velikiyb39df232019-06-14 21:08:00 +0300174-define (GSUP_MESSAGES(), #{
175 16#04 => #{message_type => location_upd_req, mandatory => [], optional => [cn_domain]},
176 16#05 => #{message_type => location_upd_err, mandatory => [cause]},
Andrey Velikiy1e801782019-06-24 14:09:57 +0300177 16#06 => #{message_type => location_upd_res, mandatory => [], optional => [msisdn, hlr_number, pdp_info_complete, pdp_info_list, pdp_charging]},
Alexander Couzensb656fc12019-12-27 05:04:40 +0100178 16#08 => #{message_type => send_auth_info_req, mandatory => [], optional => [cn_domain, auts, rand, supported_rat_types, current_rat_type, num_vectors_req]},
Andrey Velikiyb39df232019-06-14 21:08:00 +0300179 16#09 => #{message_type => send_auth_info_err, mandatory => [cause]},
Andrey Velikiy1e801782019-06-24 14:09:57 +0300180 16#0a => #{message_type => send_auth_info_res, mandatory => [], optional => [auth_tuples, auts, rand]},
Andrey Velikiyb39df232019-06-14 21:08:00 +0300181 16#0b => #{message_type => auth_failure_report, mandatory => [], optional => [cn_domain]},
Andrey Velikiy1e801782019-06-24 14:09:57 +0300182 16#0c => #{message_type => purge_ms_req, mandatory => [], optional => [cn_domain, hlr_number]},
Andrey Velikiyb39df232019-06-14 21:08:00 +0300183 16#0d => #{message_type => purge_ms_err, mandatory => [cause]},
184 16#0e => #{message_type => purge_ms_res, mandatory => [freeze_p_tmsi]},
Alexander Couzens8c724022019-12-27 18:34:54 +0100185 16#10 => #{message_type => insert_sub_data_req, mandatory => [], optional => [cn_domain, msisdn, hlr_number, pdp_info_complete, pdp_info_list, pdp_charging]},
Andrey Velikiyb39df232019-06-14 21:08:00 +0300186 16#11 => #{message_type => insert_sub_data_err, mandatory => [cause]},
187 16#12 => #{message_type => insert_sub_data_res, mandatory => []},
188 16#14 => #{message_type => delete_sub_data_req, mandatory => [], optional => [cn_domain, pdp_context_id]},
189 16#15 => #{message_type => delete_sub_data_err, mandatory => [cause]},
190 16#16 => #{message_type => delete_sub_data_res, mandatory => []},
191 16#1c => #{message_type => location_cancellation_req, mandatory => [], optional => [cn_domain, cancellation_type]},
192 16#1d => #{message_type => location_cancellation_err, mandatory => [cause]},
193 16#1e => #{message_type => location_cancellation_res, mandatory => [], optional => [cn_domain]},
194 16#20 => #{message_type => ss_req, mandatory => [session_id, session_state], optional => [ss_info]},
195 16#21 => #{message_type => ss_err, mandatory => [session_id, session_state, cause]},
196 16#22 => #{message_type => ss_res, mandatory => [session_id, session_state], optional => [ss_info]},
Andrey Velikiyfde0fd92019-08-02 09:42:22 +0300197 16#24 => #{message_type => mo_forward_sm_req, mandatory => [sm_rp_mr, sm_rp_da, sm_rp_oa, sm_rp_ui]},
198 16#25 => #{message_type => mo_forward_sm_err, mandatory => [sm_rp_mr, sm_rp_cause], optional => [sm_rp_ui]},
199 16#26 => #{message_type => mo_forward_sm_res, mandatory => [sm_rp_mr], optional => [sm_rp_ui]},
200 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]},
201 16#29 => #{message_type => mt_forward_sm_err, mandatory => [sm_rp_mr, sm_rp_cause], optional => [sm_rp_ui]},
202 16#2a => #{message_type => mt_forward_sm_res, mandatory => [sm_rp_mr], optional => [sm_rp_ui]},
Vadim Yanitskiy657fee92019-12-26 13:18:02 +0100203 16#2c => #{message_type => ready_for_sm_req, mandatory => [sm_rp_mr, sm_alert_reason]},
204 16#2d => #{message_type => ready_for_sm_err, mandatory => [sm_rp_mr, sm_rp_cause], optional => [sm_rp_ui]},
205 16#2e => #{message_type => ready_for_sm_res, mandatory => [sm_rp_mr]},
Andrey Velikiyb39df232019-06-14 21:08:00 +0300206 16#30 => #{message_type => check_imei_req, mandatory => [imei]},
207 16#31 => #{message_type => check_imei_err, mandatory => [cause]},
Andrey Velikiybb299662019-06-19 14:19:10 +0300208 16#32 => #{message_type => check_imei_res, mandatory => [imei_check_result]},
209 16#34 => #{message_type => e_prepare_handover_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
210 16#35 => #{message_type => e_prepare_handover_err, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state, bssap_cause]},
211 16#36 => #{message_type => e_prepare_handover_res, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
212 16#38 => #{message_type => e_prepare_subseq_handover_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
213 16#39 => #{message_type => e_prepare_subseq_handover_err, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state, bssap_cause]},
214 16#3a => #{message_type => e_prepare_subseq_handover_res, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
215 16#3c => #{message_type => e_send_end_signal_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
216 16#3d => #{message_type => e_send_end_signal_err, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state, bssap_cause]},
217 16#3e => #{message_type => e_send_end_signal_res, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
218 16#40 => #{message_type => e_process_access_signalling_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
219 16#44 => #{message_type => e_forward_access_signalling_req, mandatory => [message_class, source_name, destination_name, an_apdu, session_id, session_state]},
220 16#47 => #{message_type => e_close, mandatory => [message_class, source_name, destination_name, session_id, session_state]},
221 16#4b => #{message_type => e_abort, mandatory => [message_class, session_id, session_state, bssap_cause]},
Vadim Yanitskiyee15ee22020-04-19 19:52:59 +0700222 16#4e => #{message_type => e_routing_err, mandatory => [message_class, source_name, destination_name], optional => [session_id, session_state]}
Andrey Velikiyb39df232019-06-14 21:08:00 +0300223}).
224
225-define(AUTH_TUPLE_MANDATORY, [rand, sres, kc]).
226-define(AUTH_TUPLE_OPTIONAL, [ik, ck, autn, res]).
227-define(PDP_INFO_MANDATORY, []).
228-define(PDP_INFO_OPTIONAL, [pdp_context_id, pdp_type, access_point_name, quality_of_service, pdp_charging]).
229
230-endif.