blob: f48c1a17016dd7c2b5a9e2a63b6827772da117de [file] [log] [blame]
Harald Welted41b7c72019-06-13 09:41:58 +02001#pragma once
2#include <osmocom/bsc/gsm_data.h>
3
4#include <osmocom/core/msgb.h>
Neels Hofmeyr641f7f02020-08-26 16:11:28 +02005#include <osmocom/core/sockaddr_str.h>
Harald Welted41b7c72019-06-13 09:41:58 +02006#include <osmocom/netif/stream.h>
7#include <osmocom/gsm/cbsp.h>
8
9struct bsc_cbc_link;
10
11/* smscb.c */
12void bts_smscb_del(struct bts_smscb_message *smscb, struct bts_smscb_chan_state *cstate,
13 const char *reason);
14const char *bts_smscb_msg2str(const struct bts_smscb_message *smscb);
15struct bts_smscb_chan_state *bts_get_smscb_chan(struct gsm_bts *bts, bool extended);
16int cbsp_rx_decoded(struct bsc_cbc_link *cbc, const struct osmo_cbsp_decoded *dec);
17int cbsp_tx_restart(struct bsc_cbc_link *cbc, bool is_emerg);
18const char *bts_smscb_chan_state_name(const struct bts_smscb_chan_state *cstate);
19unsigned int bts_smscb_chan_load_percent(const struct bts_smscb_chan_state *cstate);
20unsigned int bts_smscb_chan_page_count(const struct bts_smscb_chan_state *cstate);
21void smscb_vty_init(void);
22
23/* cbch_scheduler.c */
24int bts_smscb_gen_sched_arr(struct bts_smscb_chan_state *cstate, struct bts_smscb_page ***arr_out);
25struct bts_smscb_page *bts_smscb_pull_page(struct bts_smscb_chan_state *cstate);
26void bts_smscb_page_done(struct bts_smscb_chan_state *cstate, struct bts_smscb_page *page);
27int bts_smscb_rx_cbch_load_ind(struct gsm_bts *bts, bool cbch_extended, bool is_overflow,
28 uint8_t slot_count);
29void bts_cbch_timer_schedule(struct gsm_bts *bts);
30
Neels Hofmeyr641f7f02020-08-26 16:11:28 +020031enum bsc_cbc_link_mode {
32 BSC_CBC_LINK_MODE_DISABLED = 0,
33 BSC_CBC_LINK_MODE_SERVER,
34 BSC_CBC_LINK_MODE_CLIENT,
35};
36
37extern const struct value_string bsc_cbc_link_mode_names[];
38static inline const char *bsc_cbc_link_mode_name(enum bsc_cbc_link_mode val)
39{ return get_value_string(bsc_cbc_link_mode_names, val); }
40
41extern const struct osmo_sockaddr_str bsc_cbc_default_server_local_addr;
42
Harald Welted41b7c72019-06-13 09:41:58 +020043/* cbsp_link.c */
44struct bsc_cbc_link {
45 struct gsm_network *net;
Neels Hofmeyr641f7f02020-08-26 16:11:28 +020046 enum bsc_cbc_link_mode mode;
Harald Welted41b7c72019-06-13 09:41:58 +020047 /* for handling inbound TCP connections */
48 struct {
Neels Hofmeyr641f7f02020-08-26 16:11:28 +020049 struct osmo_sockaddr_str local_addr;
Harald Welted41b7c72019-06-13 09:41:58 +020050 struct osmo_stream_srv *srv;
51 struct osmo_stream_srv_link *link;
52 char *sock_name;
53 struct msgb *msg;
54 } server;
55 /* for handling outbound TCP connections */
56 struct {
Neels Hofmeyr641f7f02020-08-26 16:11:28 +020057 struct osmo_sockaddr_str remote_addr;
Neels Hofmeyrd41247d2020-08-27 18:44:54 +020058 struct osmo_sockaddr_str local_addr;
Harald Welted41b7c72019-06-13 09:41:58 +020059 struct osmo_stream_cli *cli;
60 char *sock_name;
61 struct msgb *msg;
62 } client;
63};
64void cbc_vty_init(void);
65int bsc_cbc_link_restart(void);
66int cbsp_tx_decoded(struct bsc_cbc_link *cbc, struct osmo_cbsp_decoded *decoded);