libosmoctrl 1.11.0.30-c17053
Osmocom CTRL library
|
SNMP-like status interface. More...
#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <osmocom/ctrl/control_cmd.h>
#include <osmocom/ctrl/control_if.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/talloc.h>
#include <osmocom/core/utils.h>
#include <osmocom/vty/command.h>
#include <osmocom/vty/vector.h>
Macros | |
#define | REPLY_CASE(TYPE, NAME) |
Functions | |
vector | cmd_make_descvec (const char *string, const char *descstr) |
static struct ctrl_cmd_element * | ctrl_cmd_get_element_match (vector vline, vector node) |
int | ctrl_cmd_exec (vector vline, struct ctrl_cmd *command, vector node, void *data) |
Execute a given received command. More... | |
static void | add_word (struct ctrl_cmd_struct *cmd, const char *start, const char *end) |
static void | create_cmd_struct (struct ctrl_cmd_struct *cmd, const char *name) |
int | ctrl_cmd_install (enum ctrl_node_type node, struct ctrl_cmd_element *cmd) |
Install a given command definition at a given CTRL node. More... | |
struct ctrl_cmd * | ctrl_cmd_create (void *ctx, enum ctrl_type type) |
Allocate a control command of given type. More... | |
struct ctrl_cmd * | ctrl_cmd_cpy (void *ctx, struct ctrl_cmd *cmd) |
Perform a deepl copy of the given cmd, allocating memory from ctx. More... | |
struct ctrl_cmd * | ctrl_cmd_parse (void *ctx, struct msgb *msg) |
Parse/Decode CTRL from Message buffers into command struct. More... | |
static bool | id_str_valid (const char *str) |
struct ctrl_cmd * | ctrl_cmd_parse2 (void *ctx, struct msgb *msg) |
Parse/Decode CTRL from Message buffers into command struct. More... | |
struct ctrl_cmd * | ctrl_cmd_parse3 (void *ctx, struct msgb *msg, bool *parse_failed) |
Parse/Decode CTRL from Message buffers into command struct. More... | |
struct msgb * | ctrl_cmd_make (struct ctrl_cmd *cmd) |
Encode a given CTRL command from its parsed form into a message buffer. More... | |
struct ctrl_cmd_def * | ctrl_cmd_def_make (const void *ctx, struct ctrl_cmd *cmd, void *data, unsigned int secs) |
Build a deferred control command state and keep it the per-connection list of deferred commands. More... | |
int | ctrl_cmd_def_is_zombie (struct ctrl_cmd_def *cd) |
Determine if the given deferred control command is still alive or a zombie. More... | |
int | ctrl_cmd_def_send (struct ctrl_cmd_def *cd) |
Send the response to a deferred ctrl command. More... | |
Variables | |
vector | ctrl_node_vec |
const struct value_string | ctrl_type_vals [] |
human-readable string names for ctrl_type More... | |
SNMP-like status interface.
#define REPLY_CASE | ( | TYPE, | |
NAME | |||
) |
|
static |
References ctrl_cmd_struct::command, ctrl_cmd_struct::nr_commands, start, and tall_vty_vec_ctx.
Referenced by create_cmd_struct().
vector cmd_make_descvec | ( | const char * | string, |
const char * | descstr | ||
) |
|
static |
References add_word(), ctrl_cmd_struct::command, DLCTRL, LOGL_ERROR, LOGP, name, and ctrl_cmd_struct::nr_commands.
Referenced by ctrl_cmd_install().
Perform a deepl copy of the given cmd, allocating memory from ctx.
[in] | ctx | talloc context from which to allocate |
[in | cmd CTRL command to be copied |
References ctrl_cmd::id, ctrl_cmd::reply, ctrl_cmd::type, ctrl_cmd::value, and ctrl_cmd::variable.
Referenced by ctrl_cmd_trap().
Allocate a control command of given type.
[in] | ctx | talloc context from which to allocate |
[in] | type | command type to set after allocation |
References type, and ctrl_cmd::type.
Referenced by ctrl_cmd_send_trap().
int ctrl_cmd_def_is_zombie | ( | struct ctrl_cmd_def * | cd | ) |
Determine if the given deferred control command is still alive or a zombie.
[in] | cd | deferred ctrl command state |
References ctrl_cmd_def::cmd, ctrl_cmd_def::list, and llist_del().
struct ctrl_cmd_def * ctrl_cmd_def_make | ( | const void * | ctx, |
struct ctrl_cmd * | cmd, | ||
void * | data, | ||
unsigned int | secs | ||
) |
Build a deferred control command state and keep it the per-connection list of deferred commands.
This function is typically called by a ctrl command handler that wishes to defer returning a response. The reutnred state can later be used to check if the deferred command is still alive, and to respond to the specific command. This only works to defer the response to GET and SET.
[in] | ctx | talloc context from whihc to allocate the ctrl_cmd_def |
[in] | cmd | the control command whose response is deferred |
[in] | data | opaque, user-defined pointer |
[in] | secs | number of seconds until the command times out |
References ctrl_cmd::ccon, ctrl_cmd_def::cmd, data, ctrl_cmd_def::data, ctrl_connection::def_cmds, ctrl_cmd::defer, ctrl_cmd_def::list, and llist_add().
int ctrl_cmd_def_send | ( | struct ctrl_cmd_def * | cd | ) |
Send the response to a deferred ctrl command.
The command can only be a resply to a SET or a GET operation.
[in] | cd | deferred ctrl command state |
References ctrl_cmd::ccon, ctrl_cmd_def::cmd, ctrl_cmd_send2(), CTRL_TYPE_ERROR, CTRL_TYPE_GET, CTRL_TYPE_GET_REPLY, CTRL_TYPE_SET, CTRL_TYPE_SET_REPLY, ctrl_cmd_def::list, llist_del(), and ctrl_cmd::type.
Execute a given received command.
[in] | vline | vector representing the available/registered commands |
[in,out] | command | parsed received command to be executed |
[in] | node | CTRL interface node |
[in] | data | opaque data passed to verify(), get() and set() call-backs |
References CTRL_CMD_ERROR, ctrl_cmd_get_element_match(), CTRL_CMD_REPLY, CTRL_TYPE_ERROR, CTRL_TYPE_GET, CTRL_TYPE_GET_REPLY, CTRL_TYPE_SET, CTRL_TYPE_SET_REPLY, data, ctrl_cmd_element::get, node, ctrl_cmd::reply, ctrl_cmd_element::set, ctrl_cmd::type, ctrl_cmd::value, and ctrl_cmd_element::verify.
Referenced by ctrl_cmd_handle().
|
static |
References ctrl_cmd_struct::command, node, ctrl_cmd_struct::nr_commands, ctrl_cmd_element::strcmd, vector_active, and vector_slot.
Referenced by ctrl_cmd_exec().
int ctrl_cmd_install | ( | enum ctrl_node_type | node, |
struct ctrl_cmd_element * | cmd | ||
) |
Install a given command definition at a given CTRL node.
[in] | node | CTRL node at which cmd is to be installed |
[in] | cmd | command definition to be installed |
References create_cmd_struct(), ctrl_node_vec, DLCTRL, LOGL_ERROR, LOGP, ctrl_cmd_element::name, node, ctrl_cmd_element::strcmd, vector_init(), vector_lookup_ensure(), vector_set(), and vector_set_index().
Referenced by ctrl_init(), and osmo_fsm_ctrl_cmds_install().
Encode a given CTRL command from its parsed form into a message buffer.
[in] | cmd | decoded/parsed form of to-be-encoded command |
References CTRL_TYPE_ERROR, CTRL_TYPE_GET, CTRL_TYPE_GET_REPLY, CTRL_TYPE_SET, CTRL_TYPE_SET_REPLY, CTRL_TYPE_TRAP, ctrl_type_vals, DLCTRL, get_value_string(), ctrl_cmd::id, len(), LOGL_ERROR, LOGL_NOTICE, LOGP, msg, msgb_alloc_headroom(), msgb_put(), ctrl_cmd::reply, type, ctrl_cmd::type, ctrl_cmd::value, and ctrl_cmd::variable.
Referenced by ctrl_cmd_send2().
Parse/Decode CTRL from Message buffers into command struct.
[in] | ctx | talloc context from which to allocate |
[in] | msg | message buffer containing command to be decoded |
References ctrl_cmd_parse2(), CTRL_TYPE_ERROR, msg, and res.
Parse/Decode CTRL from Message buffers into command struct.
[in] | ctx | talloc context from which to allocate |
[in] | msg | message buffer containing command to be decoded |
References ctrl_cmd_parse3(), and msg.
Referenced by ctrl_cmd_exec_from_string(), and ctrl_cmd_parse().
Parse/Decode CTRL from Message buffers into command struct.
[in] | ctx | talloc context from which to allocate |
[in] | msg | message buffer containing command to be decoded |
[out] | parse_failed | Whether returned ERROR cmd was generatd locally (due to parse failure) or was received. |
References CTRL_TYPE_ERROR, CTRL_TYPE_GET, CTRL_TYPE_GET_REPLY, CTRL_TYPE_SET, CTRL_TYPE_SET_REPLY, CTRL_TYPE_TRAP, CTRL_TYPE_UNKNOWN, ctrl_type_vals, DLCTRL, get_string_value(), get_value_string(), ctrl_cmd::id, id_str_valid(), LOGL_DEBUG, LOGL_ERROR, LOGL_NOTICE, LOGP, msg, msgb_put_u8(), OSMO_ASSERT, osmo_escape_str(), osmo_separated_identifiers_valid(), ctrl_cmd::reply, REPLY_CASE, ctrl_cmd::type, ctrl_cmd::value, and ctrl_cmd::variable.
Referenced by ctrl_cmd_parse2(), and ctrl_handle_msg().
|
static |
Referenced by ctrl_cmd_parse3().
|
extern |
Referenced by ctrl_cmd_handle(), ctrl_cmd_install(), and ctrl_init().
const struct value_string ctrl_type_vals[] |
human-readable string names for ctrl_type
Referenced by ctrl_cmd_handle(), ctrl_cmd_make(), ctrl_cmd_parse3(), and ctrl_handle_msg().