blob: a81ebd7102cdf1ef027e7faca6873b7fc3640add [file] [log] [blame]
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +08001#ifndef OSMO_BSC_RF
2#define OSMO_BSC_RF
3
Neels Hofmeyr90843962017-09-04 15:04:35 +02004#include <osmocom/msc/gsm_data.h>
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +01005#include <osmocom/core/write_queue.h>
6#include <osmocom/core/timer.h>
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +08007
Daniel Willmann65924a52011-08-19 19:38:31 +02008enum osmo_bsc_rf_opstate {
9 OSMO_BSC_RF_OPSTATE_INOPERATIONAL,
10 OSMO_BSC_RF_OPSTATE_OPERATIONAL,
11};
12
13enum osmo_bsc_rf_adminstate {
14 OSMO_BSC_RF_ADMINSTATE_UNLOCKED,
15 OSMO_BSC_RF_ADMINSTATE_LOCKED,
16};
17
18enum osmo_bsc_rf_policy {
19 OSMO_BSC_RF_POLICY_OFF,
20 OSMO_BSC_RF_POLICY_ON,
21 OSMO_BSC_RF_POLICY_GRACE,
22 OSMO_BSC_RF_POLICY_UNKNOWN,
23};
24
25
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080026struct gsm_network;
27
28struct osmo_bsc_rf {
Holger Hans Peter Freyther7a1591b2010-09-16 00:10:18 +080029 /* the value of signal.h */
30 int policy;
Pablo Neira Ayuso4db92992011-05-06 12:11:23 +020031 struct osmo_fd listen;
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080032 struct gsm_network *gsm_network;
Holger Hans Peter Freyther70c232f2010-11-22 19:09:38 +010033
Holger Hans Peter Freyther37ac4202011-02-24 14:19:14 +010034 const char *last_state_command;
35
Jacob Erlbeck779a7282013-09-11 10:46:57 +020036 char *last_rf_lock_ctrl_command;
37
Holger Hans Peter Freyther11762452011-02-14 23:41:42 +010038 /* delay the command */
39 char last_request;
Pablo Neira Ayusobf540cb2011-05-06 12:11:06 +020040 struct osmo_timer_list delay_cmd;
Holger Hans Peter Freyther11762452011-02-14 23:41:42 +010041
Holger Hans Peter Freyther00c805f2011-02-24 14:40:11 +010042 /* verify that RF is up as it should be */
Pablo Neira Ayusobf540cb2011-05-06 12:11:06 +020043 struct osmo_timer_list rf_check;
Holger Hans Peter Freyther00c805f2011-02-24 14:40:11 +010044
Holger Hans Peter Freyther70c232f2010-11-22 19:09:38 +010045 /* some handling for the automatic grace switch */
Pablo Neira Ayusobf540cb2011-05-06 12:11:06 +020046 struct osmo_timer_list grace_timeout;
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +020047
48 /* auto RF switch-off due lack of MSC connection */
49 struct osmo_timer_list auto_off_timer;
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080050};
51
52struct osmo_bsc_rf_conn {
Pablo Neira Ayusoe1273b12011-05-06 12:09:47 +020053 struct osmo_wqueue queue;
Holger Hans Peter Freyther7a1591b2010-09-16 00:10:18 +080054 struct osmo_bsc_rf *rf;
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080055};
56
Daniel Willmann65924a52011-08-19 19:38:31 +020057const char *osmo_bsc_rf_get_opstate_name(enum osmo_bsc_rf_opstate opstate);
58const char *osmo_bsc_rf_get_adminstate_name(enum osmo_bsc_rf_adminstate adminstate);
59const char *osmo_bsc_rf_get_policy_name(enum osmo_bsc_rf_policy policy);
60enum osmo_bsc_rf_opstate osmo_bsc_rf_get_opstate_by_bts(struct gsm_bts *bts);
61enum osmo_bsc_rf_adminstate osmo_bsc_rf_get_adminstate_by_bts(struct gsm_bts *bts);
62enum osmo_bsc_rf_policy osmo_bsc_rf_get_policy_by_bts(struct gsm_bts *bts);
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080063struct osmo_bsc_rf *osmo_bsc_rf_create(const char *path, struct gsm_network *net);
Holger Hans Peter Freyther7b6ea562011-08-16 14:29:53 +020064void osmo_bsc_rf_schedule_lock(struct osmo_bsc_rf *rf, char cmd);
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080065
66#endif