aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/openbsc/gsm_04_08.h8
-rw-r--r--include/openbsc/gsm_data.h17
-rw-r--r--include/openbsc/paging.h3
3 files changed, 26 insertions, 2 deletions
diff --git a/include/openbsc/gsm_04_08.h b/include/openbsc/gsm_04_08.h
index 5fa92faff..edff7691f 100644
--- a/include/openbsc/gsm_04_08.h
+++ b/include/openbsc/gsm_04_08.h
@@ -480,6 +480,7 @@ enum gsm48_reject_value {
struct msgb;
struct gsm_bts;
+struct gsm_subscriber;
/* config options controlling the behaviour of the lower leves */
void gsm0408_allow_everyone(int allow);
@@ -488,7 +489,7 @@ void gsm0408_set_reject_cause(int cause);
int gsm0408_rcvmsg(struct msgb *msg);
void gsm0408_generate_lai(struct gsm48_loc_area_id *lai48, u_int16_t mcc,
u_int16_t mnc, u_int16_t lac);
-int gsm48_cc_tx_setup(struct gsm_lchan *lchan);
+int gsm48_cc_tx_setup(struct gsm_lchan *lchan, struct gsm_subscriber *calling);
enum gsm_chan_t get_ctype_by_chreq(struct gsm_bts *bts, u_int8_t ra);
enum gsm_chreq_reason_t get_reason_by_chreq(struct gsm_bts *bts, u_int8_t ra);
@@ -499,4 +500,9 @@ int generate_mid_from_tmsi(u_int8_t *buf, u_int32_t tmsi);
int gsm48_send_rr_release(struct gsm_lchan *lchan);
+/* convert a ASCII phone number to call-control BCD */
+int encode_bcd_number(u_int8_t *bcd_lv, u_int8_t max_len,
+ u_int8_t type, const char *input);
+u_int8_t decode_bcd_number(char *output, int output_len, const u_int8_t *bcd_lv);
+
#endif
diff --git a/include/openbsc/gsm_data.h b/include/openbsc/gsm_data.h
index 2048abc1f..25da17112 100644
--- a/include/openbsc/gsm_data.h
+++ b/include/openbsc/gsm_data.h
@@ -17,6 +17,12 @@
enum gsm_hooks {
GSM_HOOK_NM_SWLOAD,
+ GSM_HOOK_RR_PAGING,
+};
+
+enum gsm_paging_event {
+ GSM_PAGING_SUCCEEDED,
+ GSM_PAGING_EXPIRED,
};
struct msgb;
@@ -63,6 +69,8 @@ struct gsm_call {
/* the 'local' subscriber */
struct gsm_subscriber *subscr;
+ /* the 'remote' subscriber */
+ struct gsm_subscriber *called_subscr;
};
@@ -212,13 +220,22 @@ enum gsm_bts_type {
* A pending paging request
*/
struct gsm_paging_request {
+ /* list_head for list of all paging requests */
struct llist_head entry;
+ /* the subscriber which we're paging. Later gsm_paging_request
+ * should probably become a part of the gsm_subscriber struct? */
struct gsm_subscriber *subscr;
+ /* back-pointer to the BTS on which we are paging */
struct gsm_bts *bts;
+ /* what kind of channel type do we ask the MS to establish */
int chan_type;
/* Timer 3113: how long do we try to page? */
struct timer_list T3113;
+
+ /* callback to be called in case paging completes */
+ gsm_cbfn *cbfn;
+ void *cbfn_param;
};
#define T3113_VALUE 60, 0
diff --git a/include/openbsc/paging.h b/include/openbsc/paging.h
index 0e5a0d447..8fdae02c6 100644
--- a/include/openbsc/paging.h
+++ b/include/openbsc/paging.h
@@ -33,7 +33,8 @@
void paging_init(struct gsm_bts *bts);
/* schedule paging request */
-void paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscr, int type);
+void paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscr,
+ int type, gsm_cbfn *cbfn, void *data);
/* stop paging requests */
void paging_request_stop(struct gsm_bts *bts, struct gsm_subscriber *subscr);