aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/include/openbsc/osmo_bsc_rf.h
blob: 19ccd080db579557ab0a811b751f23f44ef65af4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#ifndef OSMO_BSC_RF
#define OSMO_BSC_RF

#include <openbsc/gsm_data.h>
#include <osmocom/core/write_queue.h>
#include <osmocom/core/timer.h>

enum osmo_bsc_rf_opstate {
	OSMO_BSC_RF_OPSTATE_INOPERATIONAL,
	OSMO_BSC_RF_OPSTATE_OPERATIONAL,
};

enum osmo_bsc_rf_adminstate {
	OSMO_BSC_RF_ADMINSTATE_UNLOCKED,
	OSMO_BSC_RF_ADMINSTATE_LOCKED,
};

enum osmo_bsc_rf_policy {
	OSMO_BSC_RF_POLICY_OFF,
	OSMO_BSC_RF_POLICY_ON,
	OSMO_BSC_RF_POLICY_GRACE,
	OSMO_BSC_RF_POLICY_UNKNOWN,
};


struct gsm_network;

struct osmo_bsc_rf {
	/* the value of signal.h */
	int policy;
	struct osmo_fd listen;
	struct gsm_network *gsm_network;

	const char *last_state_command;

	char *last_rf_lock_ctrl_command;

	/* delay the command */
	char last_request;
	struct osmo_timer_list delay_cmd;

	/* verify that RF is up as it should be */
	struct osmo_timer_list rf_check;

	/* some handling for the automatic grace switch */
	struct osmo_timer_list grace_timeout;

	/* auto RF switch-off due lack of MSC connection */
	struct osmo_timer_list auto_off_timer;
};

struct osmo_bsc_rf_conn {
	struct osmo_wqueue queue;
	struct osmo_bsc_rf *rf;
};

const char *osmo_bsc_rf_get_opstate_name(enum osmo_bsc_rf_opstate opstate);
const char *osmo_bsc_rf_get_adminstate_name(enum osmo_bsc_rf_adminstate adminstate);
const char *osmo_bsc_rf_get_policy_name(enum osmo_bsc_rf_policy policy);
enum osmo_bsc_rf_opstate osmo_bsc_rf_get_opstate_by_bts(struct gsm_bts *bts);
enum osmo_bsc_rf_adminstate osmo_bsc_rf_get_adminstate_by_bts(struct gsm_bts *bts);
enum osmo_bsc_rf_policy osmo_bsc_rf_get_policy_by_bts(struct gsm_bts *bts);
struct osmo_bsc_rf *osmo_bsc_rf_create(const char *path, struct gsm_network *net);
void osmo_bsc_rf_schedule_lock(struct osmo_bsc_rf *rf, char cmd);

#endif