blob: 19dd7fabcf70fb5e50f79a949c17d9a7acc3d1cb [file] [log] [blame]
Neels Hofmeyr1971b672020-01-23 04:40:51 +01001
2#include <osmocom/hlr/proxy_mm.h>
3#include <osmocom/core/utils.h>
4#include <osmocom/core/fsm.h>
5#include <osmocom/core/tdef.h>
6
7enum proxy_to_home_fsm_state {
8 PROXY_TO_HOME_ST_WAIT_HOME_HLR_RESOLVED,
9 PROXY_TO_HOME_ST_WAIT_UPDATE_LOCATION_RESULT,
10 PROXY_TO_HOME_ST_WAIT_SEND_AUTH_INFO_RESULT,
11 PROXY_TO_HOME_ST_IDLE,
12 PROXY_TO_HOME_ST_CLEAR,
13};
14
15static const struct value_string proxy_to_home_fsm_event_names[] = {
16 OSMO_VALUE_STRING(PROXY_TO_HOME_EV_HOME_HLR_RESOLVED),
17 OSMO_VALUE_STRING(PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ),
18 OSMO_VALUE_STRING(PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT),
19 OSMO_VALUE_STRING(PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT),
20 OSMO_VALUE_STRING(PROXY_TO_HOME_EV_CHECK_TUPLES),
21 OSMO_VALUE_STRING(PROXY_TO_HOME_EV_CONFIRM_LU),
22 {}
23};
24
25static struct osmo_fsm proxy_to_home_fsm;
26
27struct osmo_tdef proxy_to_home_tdefs[] = {
28// FIXME
29 { .T=-1, .default_val=5, .desc="proxy_to_home wait_home_hlr_resolved timeout" },
30 { .T=-2, .default_val=5, .desc="proxy_to_home wait_update_location_result timeout" },
31 { .T=-3, .default_val=5, .desc="proxy_to_home wait_send_auth_info_result timeout" },
32 { .T=-4, .default_val=5, .desc="proxy_to_home idle timeout" },
33 { .T=-5, .default_val=5, .desc="proxy_to_home clear timeout" },
34 {}
35};
36
37#if 0
38static const struct osmo_tdef_state_timeout proxy_to_home_fsm_timeouts[32] = {
39// FIXME
40 [PROXY_TO_HOME_ST_WAIT_HOME_HLR_RESOLVED] = { .T=-1 },
41 [PROXY_TO_HOME_ST_WAIT_UPDATE_LOCATION_RESULT] = { .T=-2 },
42 [PROXY_TO_HOME_ST_WAIT_SEND_AUTH_INFO_RESULT] = { .T=-3 },
43 [PROXY_TO_HOME_ST_IDLE] = { .T=-4 },
44 [PROXY_TO_HOME_ST_CLEAR] = { .T=-5 },
45};
46#endif
47
48#define proxy_to_home_fsm_state_chg(state) \
49 osmo_tdef_fsm_inst_state_chg(fi, state, \
50 proxy_to_home_fsm_timeouts, \
51 proxy_to_home_tdefs, \
52 5)
53
54void proxy_to_home_wait_home_hlr_resolved_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
55{
56 //struct proxy_mm *proxy_mm = fi->priv;
57 // FIXME
58}
59
60static void proxy_to_home_wait_home_hlr_resolved_action(struct osmo_fsm_inst *fi, uint32_t event, void *data)
61{
62 //struct proxy_mm *proxy_mm = fi->priv;
63
64 switch (event) {
65
66 case PROXY_TO_HOME_EV_HOME_HLR_RESOLVED:
67 // FIXME
68 break;
69
70 case PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ:
71 // FIXME
72 break;
73
74 case PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT:
75 // FIXME
76 break;
77
78 case PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT:
79 // FIXME
80 break;
81
82 case PROXY_TO_HOME_EV_CHECK_TUPLES:
83 // FIXME
84 break;
85
86 case PROXY_TO_HOME_EV_CONFIRM_LU:
87 // FIXME
88 break;
89
90 default:
91 OSMO_ASSERT(false);
92 }
93}
94
95static int proxy_to_home_wait_home_hlr_resolved_timeout(struct osmo_fsm_inst *fi)
96{
97 /* Return 1 to terminate FSM instance, 0 to keep running */
98 return 1;
99}
100
101void proxy_to_home_wait_update_location_result_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
102{
103 //struct proxy_mm *proxy_mm = fi->priv;
104 // FIXME
105}
106
107static void proxy_to_home_wait_update_location_result_action(struct osmo_fsm_inst *fi, uint32_t event, void *data)
108{
109 //struct proxy_mm *proxy_mm = fi->priv;
110
111 switch (event) {
112
113 case PROXY_TO_HOME_EV_HOME_HLR_RESOLVED:
114 // FIXME
115 break;
116
117 case PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ:
118 // FIXME
119 break;
120
121 case PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT:
122 // FIXME
123 break;
124
125 case PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT:
126 // FIXME
127 break;
128
129 case PROXY_TO_HOME_EV_CHECK_TUPLES:
130 // FIXME
131 break;
132
133 case PROXY_TO_HOME_EV_CONFIRM_LU:
134 // FIXME
135 break;
136
137 default:
138 OSMO_ASSERT(false);
139 }
140}
141
142static int proxy_to_home_wait_update_location_result_timeout(struct osmo_fsm_inst *fi)
143{
144 /* Return 1 to terminate FSM instance, 0 to keep running */
145 return 1;
146}
147
148void proxy_to_home_wait_send_auth_info_result_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
149{
150 //struct proxy_mm *proxy_mm = fi->priv;
151 // FIXME
152}
153
154static void proxy_to_home_wait_send_auth_info_result_action(struct osmo_fsm_inst *fi, uint32_t event, void *data)
155{
156 //struct proxy_mm *proxy_mm = fi->priv;
157
158 switch (event) {
159
160 case PROXY_TO_HOME_EV_HOME_HLR_RESOLVED:
161 // FIXME
162 break;
163
164 case PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ:
165 // FIXME
166 break;
167
168 case PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT:
169 // FIXME
170 break;
171
172 case PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT:
173 // FIXME
174 break;
175
176 case PROXY_TO_HOME_EV_CHECK_TUPLES:
177 // FIXME
178 break;
179
180 case PROXY_TO_HOME_EV_CONFIRM_LU:
181 // FIXME
182 break;
183
184 default:
185 OSMO_ASSERT(false);
186 }
187}
188
189static int proxy_to_home_wait_send_auth_info_result_timeout(struct osmo_fsm_inst *fi)
190{
191 /* Return 1 to terminate FSM instance, 0 to keep running */
192 return 1;
193}
194
195void proxy_to_home_idle_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
196{
197 //struct proxy_mm *proxy_mm = fi->priv;
198 // FIXME
199}
200
201static void proxy_to_home_idle_action(struct osmo_fsm_inst *fi, uint32_t event, void *data)
202{
203 //struct proxy_mm *proxy_mm = fi->priv;
204
205 switch (event) {
206
207 case PROXY_TO_HOME_EV_HOME_HLR_RESOLVED:
208 // FIXME
209 break;
210
211 case PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ:
212 // FIXME
213 break;
214
215 case PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT:
216 // FIXME
217 break;
218
219 case PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT:
220 // FIXME
221 break;
222
223 case PROXY_TO_HOME_EV_CHECK_TUPLES:
224 // FIXME
225 break;
226
227 case PROXY_TO_HOME_EV_CONFIRM_LU:
228 // FIXME
229 break;
230
231 default:
232 OSMO_ASSERT(false);
233 }
234}
235
236static int proxy_to_home_idle_timeout(struct osmo_fsm_inst *fi)
237{
238 /* Return 1 to terminate FSM instance, 0 to keep running */
239 return 1;
240}
241
242void proxy_to_home_clear_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
243{
244 //struct proxy_mm *proxy_mm = fi->priv;
245 // FIXME
246}
247
248static void proxy_to_home_clear_action(struct osmo_fsm_inst *fi, uint32_t event, void *data)
249{
250 //struct proxy_mm *proxy_mm = fi->priv;
251
252 switch (event) {
253
254 case PROXY_TO_HOME_EV_HOME_HLR_RESOLVED:
255 // FIXME
256 break;
257
258 case PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ:
259 // FIXME
260 break;
261
262 case PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT:
263 // FIXME
264 break;
265
266 case PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT:
267 // FIXME
268 break;
269
270 case PROXY_TO_HOME_EV_CHECK_TUPLES:
271 // FIXME
272 break;
273
274 case PROXY_TO_HOME_EV_CONFIRM_LU:
275 // FIXME
276 break;
277
278 default:
279 OSMO_ASSERT(false);
280 }
281}
282
283static int proxy_to_home_clear_timeout(struct osmo_fsm_inst *fi)
284{
285 /* Return 1 to terminate FSM instance, 0 to keep running */
286 return 1;
287}
288
289#define S(x) (1 << (x))
290
291static const struct osmo_fsm_state proxy_to_home_fsm_states[] = {
292 [PROXY_TO_HOME_ST_WAIT_HOME_HLR_RESOLVED] = {
293 .name = "wait_home_hlr_resolved",
294 .in_event_mask = 0
295 | S(PROXY_TO_HOME_EV_HOME_HLR_RESOLVED)
296 | S(PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ)
297 | S(PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT)
298 | S(PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT)
299 | S(PROXY_TO_HOME_EV_CHECK_TUPLES)
300 | S(PROXY_TO_HOME_EV_CONFIRM_LU)
301 ,
302 .out_state_mask = 0
303 | S(PROXY_TO_HOME_ST_WAIT_HOME_HLR_RESOLVED)
304 | S(PROXY_TO_HOME_ST_WAIT_UPDATE_LOCATION_RESULT)
305 | S(PROXY_TO_HOME_ST_WAIT_SEND_AUTH_INFO_RESULT)
306 | S(PROXY_TO_HOME_ST_IDLE)
307 | S(PROXY_TO_HOME_ST_CLEAR)
308 ,
309 .onenter = proxy_to_home_wait_home_hlr_resolved_onenter,
310 .action = proxy_to_home_wait_home_hlr_resolved_action,
311 },
312 [PROXY_TO_HOME_ST_WAIT_UPDATE_LOCATION_RESULT] = {
313 .name = "wait_update_location_result",
314 .in_event_mask = 0
315 | S(PROXY_TO_HOME_EV_HOME_HLR_RESOLVED)
316 | S(PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ)
317 | S(PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT)
318 | S(PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT)
319 | S(PROXY_TO_HOME_EV_CHECK_TUPLES)
320 | S(PROXY_TO_HOME_EV_CONFIRM_LU)
321 ,
322 .out_state_mask = 0
323 | S(PROXY_TO_HOME_ST_WAIT_HOME_HLR_RESOLVED)
324 | S(PROXY_TO_HOME_ST_WAIT_UPDATE_LOCATION_RESULT)
325 | S(PROXY_TO_HOME_ST_WAIT_SEND_AUTH_INFO_RESULT)
326 | S(PROXY_TO_HOME_ST_IDLE)
327 | S(PROXY_TO_HOME_ST_CLEAR)
328 ,
329 .onenter = proxy_to_home_wait_update_location_result_onenter,
330 .action = proxy_to_home_wait_update_location_result_action,
331 },
332 [PROXY_TO_HOME_ST_WAIT_SEND_AUTH_INFO_RESULT] = {
333 .name = "wait_send_auth_info_result",
334 .in_event_mask = 0
335 | S(PROXY_TO_HOME_EV_HOME_HLR_RESOLVED)
336 | S(PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ)
337 | S(PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT)
338 | S(PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT)
339 | S(PROXY_TO_HOME_EV_CHECK_TUPLES)
340 | S(PROXY_TO_HOME_EV_CONFIRM_LU)
341 ,
342 .out_state_mask = 0
343 | S(PROXY_TO_HOME_ST_WAIT_HOME_HLR_RESOLVED)
344 | S(PROXY_TO_HOME_ST_WAIT_UPDATE_LOCATION_RESULT)
345 | S(PROXY_TO_HOME_ST_WAIT_SEND_AUTH_INFO_RESULT)
346 | S(PROXY_TO_HOME_ST_IDLE)
347 | S(PROXY_TO_HOME_ST_CLEAR)
348 ,
349 .onenter = proxy_to_home_wait_send_auth_info_result_onenter,
350 .action = proxy_to_home_wait_send_auth_info_result_action,
351 },
352 [PROXY_TO_HOME_ST_IDLE] = {
353 .name = "idle",
354 .in_event_mask = 0
355 | S(PROXY_TO_HOME_EV_HOME_HLR_RESOLVED)
356 | S(PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ)
357 | S(PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT)
358 | S(PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT)
359 | S(PROXY_TO_HOME_EV_CHECK_TUPLES)
360 | S(PROXY_TO_HOME_EV_CONFIRM_LU)
361 ,
362 .out_state_mask = 0
363 | S(PROXY_TO_HOME_ST_WAIT_HOME_HLR_RESOLVED)
364 | S(PROXY_TO_HOME_ST_WAIT_UPDATE_LOCATION_RESULT)
365 | S(PROXY_TO_HOME_ST_WAIT_SEND_AUTH_INFO_RESULT)
366 | S(PROXY_TO_HOME_ST_IDLE)
367 | S(PROXY_TO_HOME_ST_CLEAR)
368 ,
369 .onenter = proxy_to_home_idle_onenter,
370 .action = proxy_to_home_idle_action,
371 },
372 [PROXY_TO_HOME_ST_CLEAR] = {
373 .name = "clear",
374 .in_event_mask = 0
375 | S(PROXY_TO_HOME_EV_HOME_HLR_RESOLVED)
376 | S(PROXY_TO_HOME_EV_RX_INSERT_SUBSCRIBER_DATA_REQ)
377 | S(PROXY_TO_HOME_EV_RX_UPDATE_LOCATION_RESULT)
378 | S(PROXY_TO_HOME_EV_RX_SEND_AUTH_INFO_RESULT)
379 | S(PROXY_TO_HOME_EV_CHECK_TUPLES)
380 | S(PROXY_TO_HOME_EV_CONFIRM_LU)
381 ,
382 .out_state_mask = 0
383 | S(PROXY_TO_HOME_ST_WAIT_HOME_HLR_RESOLVED)
384 | S(PROXY_TO_HOME_ST_WAIT_UPDATE_LOCATION_RESULT)
385 | S(PROXY_TO_HOME_ST_WAIT_SEND_AUTH_INFO_RESULT)
386 | S(PROXY_TO_HOME_ST_IDLE)
387 | S(PROXY_TO_HOME_ST_CLEAR)
388 ,
389 .onenter = proxy_to_home_clear_onenter,
390 .action = proxy_to_home_clear_action,
391 },
392};
393
394static int proxy_to_home_fsm_timer_cb(struct osmo_fsm_inst *fi)
395{
396 //struct proxy_mm *proxy_mm = fi->priv;
397 switch (fi->state) {
398
399 case PROXY_TO_HOME_ST_WAIT_HOME_HLR_RESOLVED:
400 return proxy_to_home_wait_home_hlr_resolved_timeout(fi);
401
402 case PROXY_TO_HOME_ST_WAIT_UPDATE_LOCATION_RESULT:
403 return proxy_to_home_wait_update_location_result_timeout(fi);
404
405 case PROXY_TO_HOME_ST_WAIT_SEND_AUTH_INFO_RESULT:
406 return proxy_to_home_wait_send_auth_info_result_timeout(fi);
407
408 case PROXY_TO_HOME_ST_IDLE:
409 return proxy_to_home_idle_timeout(fi);
410
411 case PROXY_TO_HOME_ST_CLEAR:
412 return proxy_to_home_clear_timeout(fi);
413
414 default:
415 /* Return 1 to terminate FSM instance, 0 to keep running */
416 return 1;
417 }
418}
419
420void proxy_to_home_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause)
421{
422 //struct proxy_mm *proxy_mm = fi->priv;
423 // FIXME
424}
425
426static struct osmo_fsm proxy_to_home_fsm = {
427 .name = "proxy_to_home",
428 .states = proxy_to_home_fsm_states,
429 .num_states = ARRAY_SIZE(proxy_to_home_fsm_states),
430 .log_subsys = DLGLOBAL, // FIXME
431 .event_names = proxy_to_home_fsm_event_names,
432 .timer_cb = proxy_to_home_fsm_timer_cb,
433 .cleanup = proxy_to_home_fsm_cleanup,
434};
435
436static __attribute__((constructor)) void proxy_to_home_fsm_register(void)
437{
438 OSMO_ASSERT(osmo_fsm_register(&proxy_to_home_fsm) == 0);
439}