Introduce logical updating request operation on the gsm_lchan
We are going to have logical operations like Phone Call, SMS,
Paging, Updating Request on a logical channel and for each of
these operations we might need to store state. For now pointers
in gsm_lchan look like the best way of doing this and we start
by introducing an operation for the location updating request.
The new flow of things are:
- We get the location updating request and update/create
the subscriber and maybe send the identity requests to
the mobile station
- We start the updating timer, if it times out we will
reject the mobile station.
- Once we get the Identity Responses we have asked for
and the reject timer did not fire yet we might accept
the user.
diff --git a/include/openbsc/gsm_data.h b/include/openbsc/gsm_data.h
index 986f331..30e8b46 100644
--- a/include/openbsc/gsm_data.h
+++ b/include/openbsc/gsm_data.h
@@ -82,6 +82,19 @@
GSM_CHREQ_REASON_OTHER,
};
+/*
+ * LOCATION UPDATING REQUEST state
+ *
+ * Our current operation is:
+ * - Get imei/tmsi
+ * - Accept/Reject according to global policy
+ */
+struct gsm_loc_updating_operation {
+ struct timer_list updating_timer;
+ int waiting_for_imsi : 1;
+ int waiting_for_imei : 1;
+};
+
struct gsm_lchan {
/* The TS that we're part of */
struct gsm_bts_trx_ts *ts;
@@ -94,7 +107,6 @@
/* Timer started to release the channel */
struct timer_list release_timer;
- struct timer_list updating_timer;
/* local end of a call, if any */
struct gsm_call call;
@@ -102,9 +114,13 @@
/* temporary user data, to be removed... and merged into gsm_call */
void *user_data;
+ /*
+ * Operations that have a state and might be pending
+ */
+ struct gsm_loc_updating_operation *loc_operation;
+
/* use count. how many users use this channel */
unsigned int use_count;
- unsigned int pending_update_request : 1;
};
#define BTS_TRX_F_ACTIVATED 0x0001