nat: Change the ctrl command path

The commands net.<netid>.bsc.<bscid>.* are now forwarded to the
appropriate osmo-bsc. <netid> for now is just 0. <bscid> is not the LAC
anymore (since that could be ambiguous), but instead the number as
configured in bsc-nat.cfg
This commit is contained in:
Daniel Willmann 2011-08-25 16:58:27 +02:00
parent b59f450314
commit c4cc3aab64
1 changed files with 12 additions and 13 deletions

View File

@ -1204,11 +1204,8 @@ static int handle_ctrlif_msg(struct bsc_connection *bsc, struct msgb *msg)
if (bsc->cfg && !llist_empty(&bsc->cfg->lac_list)) {
if (cmd->variable) {
struct bsc_lac_entry *bsc_lac;
bsc_lac = llist_entry(bsc->cfg->lac_list.next,
struct bsc_lac_entry, entry);
var = talloc_asprintf(cmd, "bsc.%i.%s", bsc_lac->lac,
cmd->variable);
var = talloc_asprintf(cmd, "net.0.bsc.%i.%s", bsc->cfg->nr,
cmd->variable);
if (!var) {
cmd->type = CTRL_TYPE_ERROR;
cmd->reply = "OOM";
@ -1601,17 +1598,19 @@ static int forward_to_bsc(struct ctrl_cmd *cmd)
struct ctrl_cmd *bsc_cmd = NULL;
struct bsc_connection *bsc;
struct bsc_cmd_list *pending;
unsigned int lac;
char *lac_str, *tmp, *saveptr;
unsigned int nr;
char *nr_str, *tmp, *saveptr;
/* Skip over the beginning (bsc.) */
tmp = strtok_r(cmd->variable, ".", &saveptr);
lac_str = strtok_r(NULL, ".", &saveptr);
if (!lac_str) {
tmp = strtok_r(NULL, ".", &saveptr);
tmp = strtok_r(NULL, ".", &saveptr);
nr_str = strtok_r(NULL, ".", &saveptr);
if (!nr_str) {
cmd->reply = "command incomplete";
goto err;
}
lac = atoi(lac_str);
nr = atoi(nr_str);
tmp = strtok_r(NULL, "\0", &saveptr);
if (!tmp) {
@ -1624,7 +1623,7 @@ static int forward_to_bsc(struct ctrl_cmd *cmd)
continue;
if (!bsc->authenticated)
continue;
if (bsc_config_handles_lac(bsc->cfg, lac)) {
if (bsc->cfg->nr == nr) {
/* Add pending command to list */
pending = talloc_zero(bsc, struct bsc_cmd_list);
if (!pending) {
@ -1677,7 +1676,7 @@ static int forward_to_bsc(struct ctrl_cmd *cmd)
}
}
/* We end up here if there's no bsc to handle our LAC */
cmd->reply = "no BSC with this LAC";
cmd->reply = "no BSC with this nr";
err:
ret = CTRL_CMD_ERROR;
done:
@ -1687,7 +1686,7 @@ done:
}
CTRL_CMD_DEFINE(fwd_cmd, "bsc *");
CTRL_CMD_DEFINE(fwd_cmd, "net 0 bsc *");
static int get_fwd_cmd(struct ctrl_cmd *cmd, void *data)
{
return forward_to_bsc(cmd);