blob: 49e8510aa289f2d6edf63621e8fe45b8074a3a33 [file] [log] [blame]
Harald Welte9a311ec2011-02-12 12:33:06 +01001#ifndef OPENBSC_ABIS_OM2K_H
2#define OPENBSC_ABIS_OM2K_H
3/* Ericsson RBS 2xxx GSM O&M (OM2000) messages on the A-bis interface
4 * implemented based on protocol trace analysis, no formal documentation */
5
6/* (C) 2010-2011 by Harald Welte <laforge@gnumonks.org>
7 *
8 * All Rights Reserved
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU Affero General Public License as published by
12 * the Free Software Foundation; either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Affero General Public License for more details.
19 *
20 * You should have received a copy of the GNU Affero General Public License
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 *
23 */
24
Harald Weltea0ce3492011-03-05 14:13:14 +010025enum abis_om2k_mo_cls {
26 OM2K_MO_CLS_TRXC = 0x01,
27 OM2K_MO_CLS_TS = 0x03,
28 OM2K_MO_CLS_TF = 0x04,
29 OM2K_MO_CLS_IS = 0x05,
30 OM2K_MO_CLS_CON = 0x06,
31 OM2K_MO_CLS_DP = 0x07,
Harald Welte2fa97632020-01-29 09:19:45 +010032 OM2K_MO_CLS_MCTR = 0x08,
Harald Weltea0ce3492011-03-05 14:13:14 +010033 OM2K_MO_CLS_CF = 0x0a,
34 OM2K_MO_CLS_TX = 0x0b,
35 OM2K_MO_CLS_RX = 0x0c,
36};
37
Harald Welte1484d882011-03-06 22:12:24 +010038enum om2k_mo_state {
39 OM2K_MO_S_RESET = 0,
40 OM2K_MO_S_STARTED,
41 OM2K_MO_S_ENABLED,
42 OM2K_MO_S_DISABLED,
43};
44
Harald Welted529db62011-03-06 21:49:21 +010045/* on-wire format for IS conn group */
Harald Welte8bcb1a02011-02-12 20:23:40 +010046struct om2k_is_conn_grp {
47 uint16_t icp1;
48 uint16_t icp2;
49 uint8_t cont_idx;
50} __attribute__ ((packed));
51
Harald Welted529db62011-03-06 21:49:21 +010052/* internal data formant for IS conn group */
53struct is_conn_group {
54 struct llist_head list;
55 uint16_t icp1;
56 uint16_t icp2;
57 uint8_t ci;
58};
59
Harald Welteeae68292016-11-11 19:41:59 +010060/* on-wire format for CON Path */
61struct om2k_con_path {
62 uint16_t ccp;
63 uint8_t ci;
64 uint8_t tag;
65 uint8_t tei;
66} __attribute__ ((packed));
67
68/* internal data format for CON group */
69struct con_group {
70 /* links list of CON groups in BTS */
71 struct llist_head list;
72 struct gsm_bts *bts;
73 /* CON Group ID */
74 uint8_t cg;
75 /* list of CON paths in this group */
76 struct llist_head paths;
77};
78
79/* internal data format for CON path */
80struct con_path {
81 /* links with con_group.paths */
82 struct llist_head list;
83 /* CON Connection Point */
84 uint16_t ccp;
85 /* Contiguity Index */
86 uint8_t ci;
87 /* Tag */
88 uint8_t tag;
89 /* TEI */
90 uint8_t tei;
91};
92
Harald Welte1484d882011-03-06 22:12:24 +010093extern const struct abis_om2k_mo om2k_mo_cf;
94extern const struct abis_om2k_mo om2k_mo_is;
95extern const struct abis_om2k_mo om2k_mo_con;
96extern const struct abis_om2k_mo om2k_mo_tf;
97
Harald Weltee1d5eca2011-02-12 14:42:59 +010098extern const struct value_string om2k_mo_class_short_vals[];
99
Harald Welte9a311ec2011-02-12 12:33:06 +0100100int abis_om2k_rcvmsg(struct msgb *msg);
101
Harald Welte73541072011-02-12 13:44:14 +0100102extern const struct abis_om2k_mo om2k_mo_cf;
103
Harald Welte6fec79d2011-02-12 14:57:17 +0100104int abis_om2k_tx_reset_cmd(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
105int abis_om2k_tx_start_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
106int abis_om2k_tx_status_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
107int abis_om2k_tx_connect_cmd(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
108int abis_om2k_tx_disconnect_cmd(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
Harald Welte0741ffe2011-02-12 18:48:53 +0100109int abis_om2k_tx_enable_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
110int abis_om2k_tx_disable_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
Harald Welte8024d8f2011-02-12 15:07:30 +0100111int abis_om2k_tx_test_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
Harald Welte6fec79d2011-02-12 14:57:17 +0100112int abis_om2k_tx_op_info(struct gsm_bts *bts, const struct abis_om2k_mo *mo,
113 uint8_t operational);
root45799782016-10-15 21:24:57 +0200114int abis_om2k_tx_cap_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
Harald Welted529db62011-03-06 21:49:21 +0100115int abis_om2k_tx_is_conf_req(struct gsm_bts *bts);
Harald Weltef9cf9612011-03-05 14:36:47 +0100116int abis_om2k_tx_tf_conf_req(struct gsm_bts *bts);
Harald Weltea0ce3492011-03-05 14:13:14 +0100117int abis_om2k_tx_rx_conf_req(struct gsm_bts_trx *trx);
118int abis_om2k_tx_tx_conf_req(struct gsm_bts_trx *trx);
119int abis_om2k_tx_ts_conf_req(struct gsm_bts_trx_ts *ts);
Harald Weltee1d5eca2011-02-12 14:42:59 +0100120
Harald Welte591e1d72016-07-09 22:20:57 +0200121struct osmo_fsm_inst *om2k_bts_fsm_start(struct gsm_bts *bts);
122void abis_om2k_bts_init(struct gsm_bts *bts);
123void abis_om2k_trx_init(struct gsm_bts_trx *trx);
124
Harald Weltee1d5eca2011-02-12 14:42:59 +0100125int abis_om2k_vty_init(void);
Harald Welte73541072011-02-12 13:44:14 +0100126
Harald Welte59eee422011-02-14 16:17:49 +0100127struct vty;
128void abis_om2k_config_write_bts(struct vty *vty, struct gsm_bts *bts);
129
Harald Welte9a311ec2011-02-12 12:33:06 +0100130#endif /* OPENBCS_ABIS_OM2K_H */