ctrl: Improve error handling if controlif setup fails

This commit is contained in:
Daniel Willmann 2011-08-05 12:22:35 +02:00 committed by Holger Hans Peter Freyther
parent 5ff06af6f5
commit 5e95f45af0
6 changed files with 53 additions and 19 deletions

View File

@ -41,6 +41,6 @@ int bsc_scan_msc_msg(struct gsm_subscriber_connection *conn, struct msgb *msg);
int bsc_handle_udt(struct gsm_network *net, struct bsc_msc_connection *conn, struct msgb *msg, unsigned int length);
int bsc_handle_dt1(struct osmo_bsc_sccp_con *conn, struct msgb *msg, unsigned int len);
void bsc_ctrl_cmds_install();
int bsc_ctrl_cmds_install();
#endif

View File

@ -642,23 +642,27 @@ struct ctrl_handle *controlif_setup(struct gsm_network *gsmnet, uint16_t port)
ctrl->gsmnet = gsmnet;
ctrl_node_vec = vector_init(5);
if (!ctrl_node_vec) {
talloc_free(ctrl);
return NULL;
}
if (!ctrl_node_vec)
goto err;
/* 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);
vector_free(ctrl_node_vec);
ctrl_node_vec = NULL;
return NULL;
}
if (ret < 0)
goto err_vec;
ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_rate_ctr);
ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_counter);
ret = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_rate_ctr);
if (ret)
goto err_vec;
ret = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_counter);
if (ret)
goto err_vec;
return ctrl;
err_vec:
vector_free(ctrl_node_vec);
ctrl_node_vec = NULL;
err:
talloc_free(ctrl);
return NULL;
}

View File

@ -304,9 +304,17 @@ static int verify_net_rf_lock(struct ctrl_cmd *cmd, const char *value, void *dat
return 0;
}
void bsc_ctrl_cmds_install()
int bsc_ctrl_cmds_install()
{
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);
int rc;
rc = ctrl_cmd_install(CTRL_NODE_NET, &cmd_net_loc);
if (rc)
goto end;
rc = ctrl_cmd_install(CTRL_NODE_NET, &cmd_net_rf_lock);
if (rc)
goto end;
rc = ctrl_cmd_install(CTRL_NODE_TRX, &cmd_trx_rf_lock);
end:
return rc;
}

View File

@ -213,8 +213,16 @@ int main(int argc, char **argv)
bsc_api_init(bsc_gsmnet, osmo_bsc_api());
bsc_gsmnet->ctrl = controlif_setup(bsc_gsmnet, 4249);
if (!bsc_gsmnet) {
fprintf(stderr, "Failed to init the control interface. Exiting.\n");
exit(1);
}
bsc_ctrl_cmds_install();
rc = bsc_ctrl_cmds_install();
if (rc < 0) {
fprintf(stderr, "Failed to install control commands. Exiting.\n");
exit(1);
}
data = bsc_gsmnet->bsc_data;
if (rf_ctrl)

View File

@ -1770,7 +1770,16 @@ int main(int argc, char **argv)
}
nat->ctrl = controlif_setup(NULL, 4250);
ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_fwd_cmd);
if (!nat->ctrl) {
fprintf(stderr, "Failed to initialize the control interface. Exiting.\n");
exit(1);
}
rc = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_fwd_cmd);
if (rc) {
fprintf(stderr, "Failed to install the control command. Exiting.\n");
exit(1);
}
nat->msc_con->connection_loss = msc_connection_was_lost;
nat->msc_con->connected = msc_connection_connected;

View File

@ -269,6 +269,11 @@ int main(int argc, char **argv)
bsc_api_init(bsc_gsmnet, msc_bsc_api());
bsc_gsmnet->ctrl = controlif_setup(bsc_gsmnet, 4249);
if (!bsc_gsmnet->ctrl) {
printf("Failed to initialize control interface. Exiting.\n");
return -1;
}
/* seed the PRNG */
srand(time(NULL));