aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openbsc/include/openbsc/bsc_nat.h3
-rw-r--r--openbsc/include/openbsc/control_cmd.h1
-rw-r--r--openbsc/include/openbsc/control_if.h10
-rw-r--r--openbsc/include/openbsc/gsm_data.h3
-rw-r--r--openbsc/src/libctrl/control_if.c25
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_main.c7
-rw-r--r--openbsc/src/osmo-bsc_nat/bsc_nat.c6
7 files changed, 35 insertions, 20 deletions
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h
index df3841e6b..abf32fc91 100644
--- a/openbsc/include/openbsc/bsc_nat.h
+++ b/openbsc/include/openbsc/bsc_nat.h
@@ -314,6 +314,9 @@ struct bsc_nat {
/* statistics */
struct bsc_nat_statistics stats;
+
+ /* control interface */
+ struct ctrl_handle *ctrl;
};
struct bsc_nat_ussd_con {
diff --git a/openbsc/include/openbsc/control_cmd.h b/openbsc/include/openbsc/control_cmd.h
index 2a5391f5f..a3f74b48a 100644
--- a/openbsc/include/openbsc/control_cmd.h
+++ b/openbsc/include/openbsc/control_cmd.h
@@ -150,6 +150,5 @@ struct ctrl_cmd_element cmd_##cmdname = { \
}
struct gsm_network;
-int controlif_setup(struct gsm_network *gsmnet, uint16_t port);
#endif /* _CONTROL_CMD_H */
diff --git a/openbsc/include/openbsc/control_if.h b/openbsc/include/openbsc/control_if.h
index 96fbf6bff..6afc86d76 100644
--- a/openbsc/include/openbsc/control_if.h
+++ b/openbsc/include/openbsc/control_if.h
@@ -5,9 +5,17 @@
#include <openbsc/control_cmd.h>
#include <openbsc/gsm_data.h>
+struct ctrl_handle {
+ struct osmo_fd listen_fd;
+ struct gsm_network *gsmnet;
+
+ /* List of control connections */
+ struct llist_head ccon_list;
+};
+
int ctrl_cmd_send(struct osmo_wqueue *queue, struct ctrl_cmd *cmd);
int ctrl_cmd_handle(struct ctrl_cmd *cmd, void *data);
-int controlif_setup(struct gsm_network *gsmnet, uint16_t port);
+struct ctrl_handle *controlif_setup(struct gsm_network *gsmnet, uint16_t port);
#endif /* _CONTROL_IF_H */
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index 572f8f53b..dea411984 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -266,6 +266,9 @@ struct gsm_network {
/* subscriber related features */
int keep_subscr;
struct gsm_sms_queue *sms_queue;
+
+ /* control interface */
+ struct ctrl_handle *ctrl;
};
#define SMS_HDR_SIZE 128
diff --git a/openbsc/src/libctrl/control_if.c b/openbsc/src/libctrl/control_if.c
index 36fdc280b..e871a519c 100644
--- a/openbsc/src/libctrl/control_if.c
+++ b/openbsc/src/libctrl/control_if.c
@@ -39,6 +39,7 @@
#include <sys/types.h>
#include <openbsc/control_cmd.h>
+#include <openbsc/control_if.h>
#include <openbsc/debug.h>
#include <openbsc/gsm_data.h>
#include <openbsc/ipaccess.h>
@@ -62,14 +63,6 @@
#include <osmocom/abis/e1_input.h>
#include <osmocom/abis/ipa.h>
-struct ctrl_handle {
- struct osmo_fd listen_fd;
- struct gsm_network *gsmnet;
-
- /* List of control connections */
- struct llist_head ccon_list;
-};
-
vector ctrl_node_vec;
int ctrl_cmd_send(struct osmo_wqueue *queue, struct ctrl_cmd *cmd)
@@ -607,33 +600,37 @@ static int verify_counter(struct ctrl_cmd *cmd, const char *value, void *data)
return 0;
}
-int controlif_setup(struct gsm_network *gsmnet, uint16_t port)
+struct ctrl_handle *controlif_setup(struct gsm_network *gsmnet, uint16_t port)
{
int ret;
struct ctrl_handle *ctrl;
ctrl = talloc_zero(tall_bsc_ctx, struct ctrl_handle);
if (!ctrl)
- return -ENOMEM;
+ return NULL;
INIT_LLIST_HEAD(&ctrl->ccon_list);
ctrl->gsmnet = gsmnet;
ctrl_node_vec = vector_init(5);
- if (!ctrl_node_vec)
- return -ENOMEM;
+ if (!ctrl_node_vec) {
+ talloc_free(ctrl);
+ return NULL;
+ }
/* Listen for control connections */
ret = make_sock(&ctrl->listen_fd, IPPROTO_TCP, INADDR_LOOPBACK, port,
0, listen_fd_cb, ctrl);
if (ret < 0) {
talloc_free(ctrl);
- return ret;
+ vector_free(ctrl_node_vec);
+ ctrl_node_vec = NULL;
+ return NULL;
}
ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_rate_ctr);
ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_counter);
- return ret;
+ return ctrl;
}
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_main.c b/openbsc/src/osmo-bsc/osmo_bsc_main.c
index 63e1d8ea8..aa53eef07 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_main.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_main.c
@@ -19,7 +19,6 @@
*/
#include <openbsc/bss.h>
-#include <openbsc/control_cmd.h>
#include <openbsc/debug.h>
#include <openbsc/gsm_data.h>
#include <openbsc/osmo_bsc.h>
@@ -29,6 +28,9 @@
#include <openbsc/vty.h>
#include <openbsc/ipaccess.h>
+#include <openbsc/control_cmd.h>
+#include <openbsc/control_if.h>
+
#include <osmocom/core/application.h>
#include <osmocom/core/linuxlist.h>
#include <osmocom/core/talloc.h>
@@ -425,7 +427,8 @@ int main(int argc, char **argv)
}
bsc_api_init(bsc_gsmnet, osmo_bsc_api());
- controlif_setup(bsc_gsmnet, 4249);
+ bsc_gsmnet->ctrl = controlif_setup(bsc_gsmnet, 4249);
+
ctrl_cmd_install(CTRL_NODE_NET, &cmd_net_loc);
ctrl_cmd_install(CTRL_NODE_NET, &cmd_net_rf_lock);
ctrl_cmd_install(CTRL_NODE_TRX, &cmd_trx_rf_lock);
diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat.c b/openbsc/src/osmo-bsc_nat/bsc_nat.c
index 295535a19..b9d4639df 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_nat.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_nat.c
@@ -39,12 +39,14 @@
#include <openbsc/bsc_msc.h>
#include <openbsc/bsc_nat.h>
#include <openbsc/bsc_nat_sccp.h>
-#include <openbsc/control_cmd.h>
#include <openbsc/ipaccess.h>
#include <openbsc/abis_nm.h>
#include <openbsc/socket.h>
#include <openbsc/vty.h>
+#include <openbsc/control_cmd.h>
+#include <openbsc/control_if.h>
+
#include <osmocom/core/application.h>
#include <osmocom/core/talloc.h>
@@ -1760,7 +1762,7 @@ int main(int argc, char **argv)
exit(1);
}
- controlif_setup(NULL, 4250);
+ nat->ctrl = controlif_setup(NULL, 4250);
ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_fwd_cmd);
nat->msc_con->connection_loss = msc_connection_was_lost;