osmo-bsc: Add VTY command show position
This commit is contained in:
parent
2a896070a7
commit
7d10983865
|
@ -521,6 +521,8 @@ enum bts_loc_fix {
|
|||
BTS_LOC_FIX_3D = 2,
|
||||
};
|
||||
|
||||
extern const struct value_string bts_loc_fix_names[];
|
||||
|
||||
struct bts_location {
|
||||
struct llist_head list;
|
||||
time_t tstamp;
|
||||
|
|
|
@ -95,6 +95,13 @@ static const struct value_string bts_neigh_mode_strs[] = {
|
|||
{ 0, NULL }
|
||||
};
|
||||
|
||||
const struct value_string bts_loc_fix_names[] = {
|
||||
{ BTS_LOC_FIX_INVALID, "invalid" },
|
||||
{ BTS_LOC_FIX_2D, "fix2d" },
|
||||
{ BTS_LOC_FIX_3D, "fix3d" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
struct cmd_node net_node = {
|
||||
GSMNET_NODE,
|
||||
"%s(config-net)# ",
|
||||
|
|
|
@ -212,13 +212,6 @@ static void generate_location_state_trap(struct gsm_bts *bts, struct bsc_msc_con
|
|||
talloc_free(cmd);
|
||||
}
|
||||
|
||||
static const struct value_string valid_names[] = {
|
||||
{ BTS_LOC_FIX_INVALID, "invalid" },
|
||||
{ BTS_LOC_FIX_2D, "fix2d" },
|
||||
{ BTS_LOC_FIX_3D, "fix3d" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
static int location_equal(struct bts_location *a, struct bts_location *b)
|
||||
{
|
||||
return ((a->tstamp == b->tstamp) && (a->valid == b->valid) && (a->lat == b->lat) &&
|
||||
|
@ -272,7 +265,7 @@ static int get_bts_loc(struct ctrl_cmd *cmd, void *data)
|
|||
}
|
||||
|
||||
cmd->reply = talloc_asprintf(cmd, "%lu,%s,%f,%f,%f", curloc->tstamp,
|
||||
get_value_string(valid_names, curloc->valid), curloc->lat, curloc->lon, curloc->height);
|
||||
get_value_string(bts_loc_fix_names, curloc->valid), curloc->lat, curloc->lon, curloc->height);
|
||||
if (!cmd->reply) {
|
||||
cmd->reply = "OOM";
|
||||
return CTRL_CMD_ERROR;
|
||||
|
@ -313,7 +306,7 @@ static int set_bts_loc(struct ctrl_cmd *cmd, void *data)
|
|||
height = strtok_r(NULL, "\0", &saveptr);
|
||||
|
||||
curloc->tstamp = atol(tstamp);
|
||||
curloc->valid = get_string_value(valid_names, valid);
|
||||
curloc->valid = get_string_value(bts_loc_fix_names, valid);
|
||||
curloc->lat = atof(lat);
|
||||
curloc->lon = atof(lon);
|
||||
curloc->height = atof(height);
|
||||
|
@ -361,7 +354,7 @@ static int verify_bts_loc(struct ctrl_cmd *cmd, const char *value, void *data)
|
|||
goto err;
|
||||
|
||||
tstamp = atol(tstampstr);
|
||||
valid = get_string_value(valid_names, validstr);
|
||||
valid = get_string_value(bts_loc_fix_names, validstr);
|
||||
lat = atof(latstr);
|
||||
lon = atof(lonstr);
|
||||
height = atof(heightstr);
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
|
||||
#include <osmocom/core/talloc.h>
|
||||
|
||||
#include <time.h>
|
||||
|
||||
|
||||
#define IPA_STR "IP.ACCESS specific\n"
|
||||
|
||||
|
@ -512,6 +514,45 @@ DEFUN(show_mscs,
|
|||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(show_pos,
|
||||
show_pos_cmd,
|
||||
"show position",
|
||||
SHOW_STR "Position information of the BTS\n")
|
||||
{
|
||||
struct gsm_bts *bts;
|
||||
struct bts_location *curloc;
|
||||
struct tm time;
|
||||
char timestr[50];
|
||||
|
||||
llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) {
|
||||
if (llist_empty(&bts->loc_list)) {
|
||||
vty_out(vty, "BTS Nr: %d position invalid%s", bts->nr,
|
||||
VTY_NEWLINE);
|
||||
continue;
|
||||
}
|
||||
curloc = llist_entry(bts->loc_list.next, struct bts_location, list);
|
||||
if (gmtime_r(&curloc->tstamp, &time) == NULL) {
|
||||
vty_out(vty, "Time conversion failed for BTS %d%s", bts->nr,
|
||||
VTY_NEWLINE);
|
||||
continue;
|
||||
}
|
||||
if (asctime_r(&time, timestr) == NULL) {
|
||||
vty_out(vty, "Time conversion failed for BTS %d%s", bts->nr,
|
||||
VTY_NEWLINE);
|
||||
continue;
|
||||
}
|
||||
/* Last character in asctime is \n */
|
||||
timestr[strlen(timestr)-1] = 0;
|
||||
|
||||
vty_out(vty, "BTS Nr: %d position: %s time: %s%s", bts->nr,
|
||||
get_value_string(bts_loc_fix_names, curloc->valid), timestr,
|
||||
VTY_NEWLINE);
|
||||
vty_out(vty, " lat: %f lon: %f height: %f%s", curloc->lat, curloc->lon,
|
||||
curloc->height, VTY_NEWLINE);
|
||||
}
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
int bsc_vty_init_extra(void)
|
||||
{
|
||||
install_element(CONFIG_NODE, &cfg_net_msc_cmd);
|
||||
|
@ -551,6 +592,7 @@ int bsc_vty_init_extra(void)
|
|||
|
||||
install_element_ve(&show_statistics_cmd);
|
||||
install_element_ve(&show_mscs_cmd);
|
||||
install_element_ve(&show_pos_cmd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue