summaryrefslogtreecommitdiffstats
path: root/src/host/layer23/include/osmocom/bb/common/ms.h
blob: db6b276af237bbb024a30f8efc24bc63a09e6621 (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/* Mobile Station */
#pragma once

#include <osmocom/core/select.h>
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/core/write_queue.h>

/* FIXME no 'mobile' specific stuff should be here */
#include <osmocom/bb/mobile/settings.h>
#include <osmocom/gsm/lapdm.h>
#include <osmocom/bb/common/subscriber.h>
#include <osmocom/bb/common/support.h>
#include <osmocom/bb/common/sap_interface.h>
#include <osmocom/bb/common/sap_proto.h>
#include <osmocom/bb/mobile/gsm48_rr.h>
#include <osmocom/bb/common/sysinfo.h>
#include <osmocom/bb/mobile/gsm322.h>
#include <osmocom/bb/mobile/gsm48_mm.h>
#include <osmocom/bb/mobile/gsm48_cc.h>
#include <osmocom/bb/mobile/mncc_sock.h>
#include <osmocom/bb/common/sim.h>
#include <osmocom/bb/common/l1ctl.h>


struct osmosap_entity {
	struct osmo_fsm_inst *fi;
	uint16_t max_msg_size;

	/* Current state of remote SIM card */
	enum sap_card_status_type card_status;

	/* Optional SAP message call-back */
	sap_msg_cb_t sap_msg_cb;
	/* Optional response call-back */
	sap_rsp_cb_t sap_rsp_cb;
};

struct osmol1_entity {
	int (*l1_traffic_ind)(struct osmocom_ms *ms, struct msgb *msg);
};

struct osmomncc_entity {
	int (*mncc_recv)(struct osmocom_ms *ms, int msg_type, void *arg);
	struct mncc_sock_state *sock_state;
	uint32_t ref;
};

/* RX measurement statistics */
struct rx_meas_stat {
	uint32_t last_fn;

	/* cumulated values of current cell from SACCH dl */
	uint32_t frames;
	uint32_t snr;
	uint32_t berr;
	uint32_t rxlev;

	/* counters loss criterion */
	int16_t dsc, ds_fail;
	int16_t s, rl_fail;
};

enum {
	MS_SHUTDOWN_NONE = 0,
	MS_SHUTDOWN_IMSI_DETACH = 1,
	MS_SHUTDOWN_WAIT_RESET = 2,
	MS_SHUTDOWN_COMPL = 3,
};

struct osmocom_ms {
	struct llist_head entity;
	char *name;
	struct osmo_wqueue l2_wq, sap_wq;
	uint16_t test_arfcn;
	struct osmol1_entity l1_entity;

	bool started, deleting;
	uint8_t shutdown;
	struct gsm_support support;
	struct gsm_settings settings;
	struct gsm_subscriber subscr;
	struct gsm_sim sim;
	struct lapdm_channel lapdm_channel;
	struct osmosap_entity sap_entity;
	struct rx_meas_stat meas;
	struct gsm48_rrlayer rrlayer;
	struct gsm322_plmn plmn;
	struct gsm322_cellsel cellsel;
	struct gsm48_mmlayer mmlayer;
	struct gsm48_cclayer cclayer;
	struct osmomncc_entity mncc_entity;
	struct llist_head trans_list;

	/* Audio I/O */
	struct gapk_io_state *gapk_io;

	void *lua_state;
	int lua_cb_ref;
	char *lua_script;
};

struct osmocom_ms *osmocom_ms_alloc(void *ctx, const char *name);