libosmoctrl
1.9.2
Osmocom CTRL library
|
Go to the source code of this file.
|
#define | CTRL_CMD_ERROR -1 |
|
#define | CTRL_CMD_HANDLED 0 |
|
#define | CTRL_CMD_REPLY 1 |
|
#define | CTRL_CMD_TRAP_ID "0" |
|
#define | ctrl_cmd_reply_printf(cmd, fmt, args ...) osmo_talloc_asprintf(cmd, cmd->reply, fmt, ## args) |
|
#define | CTRL_CMD_DEFINE_STRUCT(cmdname, cmdstr, verify_name) |
| Helper to generate static struct ctrl_cmd_element. More...
|
|
#define | CTRL_HELPER_GET_INT(cmdname, dtype, element) |
| Helper to generate static GET function for integer. More...
|
|
#define | CTRL_HELPER_SET_INT(cmdname, dtype, element) |
| Helper to generate static SET function for integer. More...
|
|
#define | CTRL_HELPER_VERIFY_RANGE(cmdname, min, max) |
| Helper to generate static VERIFY unction validating a numeric range. More...
|
|
#define | CTRL_CMD_DEFINE_RANGE(cmdname, cmdstr, dtype, element, min, max) |
| Helper to generate GET, SET, VERIFY + ctrl_cmd_element for integer. More...
|
|
#define | CTRL_HELPER_GET_STRING(cmdname, dtype, element) |
| Helper to generate static GET function for string. More...
|
|
#define | CTRL_HELPER_SET_STRING(cmdname, dtype, element) |
| Helper to generate static SET function for string. More...
|
|
#define | CTRL_CMD_DEFINE_STRING(cmdname, cmdstr, dtype, element) |
| Helper to generate GET, SET, VERIFY + ctrl_cmd_element for string. More...
|
|
#define | CTRL_CMD_DEFINE(cmdname, cmdstr) |
| Declare a read-write attribute. More...
|
|
#define | CTRL_CMD_DEFINE_RO(cmdname, cmdstr) |
| Define a read-only attribute. More...
|
|
#define | CTRL_CMD_DEFINE_WO(cmdname, cmdstr) |
| Define a write-only attribute. More...
|
|
#define | CTRL_CMD_DEFINE_WO_NOVRF(cmdname, cmdstr) |
| Define a write-only attribute without verify. More...
|
|
|
enum | ctrl_node_type {
CTRL_NODE_ROOT,
CTRL_NODE_BTS,
CTRL_NODE_TRX,
CTRL_NODE_TS,
CTRL_NODE_FSM,
CTRL_NODE_FSM_INST,
_LAST_CTRL_NODE
} |
| The class of node at which a ctrl command is registered to. More...
|
|
enum | ctrl_type {
CTRL_TYPE_UNKNOWN,
CTRL_TYPE_GET,
CTRL_TYPE_SET,
CTRL_TYPE_GET_REPLY,
CTRL_TYPE_SET_REPLY,
CTRL_TYPE_TRAP,
CTRL_TYPE_ERROR
} |
| Ctrl command types (GET, SET, ...) 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...
|
|
int | ctrl_cmd_exec (vector vline, struct ctrl_cmd *command, vector node, void *data) |
| Execute a given received command. More...
|
|
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...
|
|
int | ctrl_cmd_send (struct osmo_wqueue *queue, struct ctrl_cmd *cmd) |
| Encode a CTRL command and append it to the given write queue. More...
|
|
int | ctrl_cmd_send_to_all (struct ctrl_handle *ctrl, struct ctrl_cmd *cmd) |
| Send a CTRL command to all connections. 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 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_parse (void *ctx, struct msgb *msg) |
| 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 * | 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_create (void *ctx, enum ctrl_type) |
| Allocate a control command of given type. More...
|
|
struct ctrl_cmd * | ctrl_cmd_trap (struct ctrl_cmd *cmd) |
| Copy given cmd and convert copy to CTRL_TYPE_TRAP. More...
|
|
◆ CTRL_CMD_DEFINE
#define CTRL_CMD_DEFINE |
( |
|
cmdname, |
|
|
|
cmdstr |
|
) |
| |
Value:static int get_##cmdname(
struct ctrl_cmd *cmd,
void *
data); \
static
int set_##cmdname(
struct ctrl_cmd *cmd,
void *
data); \
static
int verify_##cmdname(
struct ctrl_cmd *cmd,
const char *value,
void *
data); \
CTRL_CMD_DEFINE_STRUCT(cmdname, cmdstr, verify_##cmdname)
Declare a read-write attribute.
Declares get, set, verify.
- Parameters
-
[in] | cmdname | symbol name of the command related functions/structures |
[in] | cmdstr | string name exposed on CTRL |
◆ CTRL_CMD_DEFINE_RANGE
#define CTRL_CMD_DEFINE_RANGE |
( |
|
cmdname, |
|
|
|
cmdstr, |
|
|
|
dtype, |
|
|
|
element, |
|
|
|
min, |
|
|
|
max |
|
) |
| |
Value:
CTRL_HELPER_SET_INT(cmdname, dtype, element) \
CTRL_HELPER_VERIFY_RANGE(cmdname, min, max) \
CTRL_CMD_DEFINE_STRUCT(cmdname, cmdstr, verify_##cmdname)
Helper to generate GET, SET, VERIFY + ctrl_cmd_element for integer.
- Parameters
-
[in] | cmdname | symbol name of the command related function |
[in] | cmdstr | string name exposed on CTRL |
[in] | dtype | name of outer struct of user data |
[in] | element | name of field within dtype |
[in] | min | minimum permitted integer value |
[in] | max | maximum permitted integer value |
◆ CTRL_CMD_DEFINE_RO
#define CTRL_CMD_DEFINE_RO |
( |
|
cmdname, |
|
|
|
cmdstr |
|
) |
| |
Value:static int get_##cmdname(
struct ctrl_cmd *cmd,
void *
data); \
static
int set_##cmdname(
struct ctrl_cmd *cmd,
void *
data) \
{ \
cmd->reply = "Read Only attribute"; \
} \
static
int verify_##cmdname(
struct ctrl_cmd *cmd,
const char *value,
void *
data) \
{ \
cmd->reply = "Read Only attribute"; \
return 1; \
} \
CTRL_CMD_DEFINE_STRUCT(cmdname, cmdstr, verify_##cmdname)
Define a read-only attribute.
Declares get, implements set+verify
- Parameters
-
[in] | cmdname | symbol name of the command related functions/structures |
[in] | cmdstr | string name exposed on CTRL |
◆ CTRL_CMD_DEFINE_STRING
#define CTRL_CMD_DEFINE_STRING |
( |
|
cmdname, |
|
|
|
cmdstr, |
|
|
|
dtype, |
|
|
|
element |
|
) |
| |
Value:
CTRL_HELPER_SET_STRING(cmdname, dtype, element) \
CTRL_CMD_DEFINE_STRUCT(cmdname, cmdstr, NULL)
Helper to generate GET, SET, VERIFY + ctrl_cmd_element for string.
- Parameters
-
[in] | cmdname | symbol name of the command related function |
[in] | cmdstr | string name exposed on CTRL |
[in] | dtype | name of outer struct of user data |
[in] | element | name of field within dtype |
◆ CTRL_CMD_DEFINE_STRUCT
#define CTRL_CMD_DEFINE_STRUCT |
( |
|
cmdname, |
|
|
|
cmdstr, |
|
|
|
verify_name |
|
) |
| |
Value:
.get = &get_##cmdname, \
.verify = verify_name, \
}
Helper to generate static struct ctrl_cmd_element.
- Parameters
-
[in] | cmdname | symbol name of the command related functions/structures |
[in] | cmdstr | string name exposed on CTRL |
[in] | verify_name | full symbol name of verification function |
◆ CTRL_CMD_DEFINE_WO
#define CTRL_CMD_DEFINE_WO |
( |
|
cmdname, |
|
|
|
cmdstr |
|
) |
| |
Value:static int set_##cmdname(
struct ctrl_cmd *cmd,
void *
data); \
static
int get_##cmdname(
struct ctrl_cmd *cmd,
void *
data) \
{ \
cmd->reply = "Write Only attribute"; \
} \
static
int verify_##cmdname(
struct ctrl_cmd *cmd,
const char *val,
void *
data); \
CTRL_CMD_DEFINE_STRUCT(cmdname, cmdstr, verify_##cmdname)
Define a write-only attribute.
Declares set+verify, implements read call-back
- Parameters
-
[in] | cmdname | symbol name of the command related functions/structures |
[in] | cmdstr | string name exposed on CTRL |
◆ CTRL_CMD_DEFINE_WO_NOVRF
#define CTRL_CMD_DEFINE_WO_NOVRF |
( |
|
cmdname, |
|
|
|
cmdstr |
|
) |
| |
Value:static int set_##cmdname(
struct ctrl_cmd *cmd,
void *
data); \
static
int get_##cmdname(
struct ctrl_cmd *cmd,
void *
data) \
{ \
cmd->reply = "Write Only attribute"; \
} \
static
int verify_##cmdname(
struct ctrl_cmd *cmd,
const char *val,
void *
data) \
{ \
return 0; \
} \
CTRL_CMD_DEFINE_STRUCT(cmdname, cmdstr, verify_##cmdname)
Define a write-only attribute without verify.
Declares set, implements read+verify
- Parameters
-
[in] | cmdname | symbol name of the command related functions/structures |
[in] | cmdstr | string name exposed on CTRL |
◆ CTRL_CMD_ERROR
#define CTRL_CMD_ERROR -1 |
◆ CTRL_CMD_HANDLED
#define CTRL_CMD_HANDLED 0 |
◆ CTRL_CMD_REPLY
◆ ctrl_cmd_reply_printf
#define ctrl_cmd_reply_printf |
( |
|
cmd, |
|
|
|
fmt, |
|
|
|
args ... |
|
) |
| osmo_talloc_asprintf(cmd, cmd->reply, fmt, ## args) |
◆ CTRL_CMD_TRAP_ID
#define CTRL_CMD_TRAP_ID "0" |
◆ CTRL_HELPER_GET_INT
#define CTRL_HELPER_GET_INT |
( |
|
cmdname, |
|
|
|
dtype, |
|
|
|
element |
|
) |
| |
Value:static int get_##cmdname(
struct ctrl_cmd *cmd,
void *_data) \
{ \
dtype *
node = cmd->node; \
cmd->reply = talloc_asprintf(cmd,
"%i",
node->element); \
if (!cmd->reply) { \
cmd->reply = "OOM"; \
} \
}
Helper to generate static GET function for integer.
- Parameters
-
[in] | cmdname | symbol name of the command related function |
[in] | dtype | name of outer struct of user data |
[in] | element | name of field within dtype |
◆ CTRL_HELPER_GET_STRING
#define CTRL_HELPER_GET_STRING |
( |
|
cmdname, |
|
|
|
dtype, |
|
|
|
element |
|
) |
| |
Value:static int get_##cmdname(
struct ctrl_cmd *cmd,
void *_data) \
{ \
dtype *
data = cmd->node; \
cmd->reply = talloc_asprintf(cmd,
"%s",
data->element); \
if (!cmd->reply) { \
cmd->reply = "OOM"; \
} \
}
Helper to generate static GET function for string.
- Parameters
-
[in] | cmdname | symbol name of the command related function |
[in] | dtype | name of outer struct of user data |
[in] | element | name of field within dtype |
◆ CTRL_HELPER_SET_INT
#define CTRL_HELPER_SET_INT |
( |
|
cmdname, |
|
|
|
dtype, |
|
|
|
element |
|
) |
| |
Value:static int set_##cmdname(
struct ctrl_cmd *cmd,
void *_data) \
{ \
dtype *
node = cmd->node; \
int tmp = atoi(cmd->value); \
node->element = tmp; \
return get_##cmdname(cmd, _data); \
}
Helper to generate static SET function for integer.
- Parameters
-
[in] | cmdname | symbol name of the command related function |
[in] | dtype | name of outer struct of user data |
[in] | element | name of field within dtype |
◆ CTRL_HELPER_SET_STRING
#define CTRL_HELPER_SET_STRING |
( |
|
cmdname, |
|
|
|
dtype, |
|
|
|
element |
|
) |
| |
Value:static int set_##cmdname(
struct ctrl_cmd *cmd,
void *_data) \
{ \
dtype *
data = cmd->node; \
osmo_talloc_replace_string(cmd->node, &
data->element, cmd->value); \
return get_##cmdname(cmd, _data); \
}
Helper to generate static SET function for string.
- Parameters
-
[in] | cmdname | symbol name of the command related function |
[in] | dtype | name of outer struct of user data |
[in] | element | name of field within dtype |
◆ CTRL_HELPER_VERIFY_RANGE
#define CTRL_HELPER_VERIFY_RANGE |
( |
|
cmdname, |
|
|
|
min, |
|
|
|
max |
|
) |
| |
Value:static int verify_##cmdname(
struct ctrl_cmd *cmd,
const char *value,
void *_data) \
{ \
int tmp = atoi(value); \
if ((tmp >= min)&&(tmp <= max)) { \
return 0; \
} \
cmd->reply = "Input not within the range"; \
return -1; \
}
Helper to generate static VERIFY unction validating a numeric range.
- Parameters
-
[in] | cmdname | symbol name of the command related function |
[in] | min | minimum permitted integer value |
[in] | max | maximum permitted integer value |
◆ ctrl_node_type
The class of node at which a ctrl command is registered to.
Enumerator |
---|
CTRL_NODE_ROOT | |
CTRL_NODE_BTS | |
CTRL_NODE_TRX | |
CTRL_NODE_TS | |
CTRL_NODE_FSM | |
CTRL_NODE_FSM_INST | |
_LAST_CTRL_NODE | |
◆ ctrl_type
Ctrl command types (GET, SET, ...)
Enumerator |
---|
CTRL_TYPE_UNKNOWN | |
CTRL_TYPE_GET | |
CTRL_TYPE_SET | |
CTRL_TYPE_GET_REPLY | |
CTRL_TYPE_SET_REPLY | |
CTRL_TYPE_TRAP | |
CTRL_TYPE_ERROR | |
◆ ctrl_cmd_cpy()
◆ ctrl_cmd_create()
Allocate a control command of given type.
- Parameters
-
[in] | ctx | talloc context from which to allocate |
[in] | type | command type to set after allocation |
- Returns
- callee-allocated ctrl_cmd. Caller must talloc_free() it.
References type, and ctrl_cmd::type.
Referenced by ctrl_cmd_send_trap().
◆ ctrl_cmd_def_is_zombie()
Determine if the given deferred control command is still alive or a zombie.
- Parameters
-
[in] | cd | deferred ctrl command state |
- Returns
- 0 is cd is still alive; 1 if it's a zombie
References ctrl_cmd_def::cmd, ctrl_cmd_def::list, and llist_del().
◆ ctrl_cmd_def_make()
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.
- Parameters
-
[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 |
- Returns
- callee-allocated ctrl_cmd_def
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().
◆ ctrl_cmd_def_send()
Send the response to a deferred ctrl command.
The command can only be a resply to a SET or a GET operation.
- Parameters
-
[in] | cd | deferred ctrl command state |
- Returns
- 0 if command sent successfully; negative on error
References ctrl_cmd::ccon, ctrl_cmd_def::cmd, ctrl_cmd_send(), CTRL_TYPE_ERROR, CTRL_TYPE_GET, CTRL_TYPE_GET_REPLY, CTRL_TYPE_SET, CTRL_TYPE_SET_REPLY, ctrl_cmd_def::list, llist_del(), ctrl_cmd::type, and ctrl_connection::write_queue.
◆ ctrl_cmd_exec()
Execute a given received command.
- Parameters
-
[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 |
- Returns
- CTRL_CMD_HANDLED or CTRL_CMD_REPLY; CTRL_CMD_ERROR on error
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().
◆ ctrl_cmd_install()
Install a given command definition at a given CTRL node.
- Parameters
-
[in] | node | CTRL node at which cmd is to be installed |
[in] | cmd | command definition to be installed |
- Returns
- 0 on success; negative on error
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().
◆ ctrl_cmd_make()
Encode a given CTRL command from its parsed form into a message buffer.
- Parameters
-
[in] | cmd | decoded/parsed form of to-be-encoded command |
- Returns
- callee-allocated message buffer containing the encoded cmd; NULL on error
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_send().
◆ ctrl_cmd_parse()
struct ctrl_cmd* ctrl_cmd_parse |
( |
void * |
ctx, |
|
|
struct msgb * |
msg |
|
) |
| |
Parse/Decode CTRL from Message buffers into command struct.
- Parameters
-
[in] | ctx | talloc context from which to allocate |
[in] | msg | message buffer containing command to be decoded |
- Returns
- callee-allocated decoded CTRL command; NULL on allocation or other failure The caller is responsible to talloc_free() the returned struct pointer.
References ctrl_cmd_parse2(), CTRL_TYPE_ERROR, msg, and res.
◆ ctrl_cmd_parse2()
struct ctrl_cmd* ctrl_cmd_parse2 |
( |
void * |
ctx, |
|
|
struct msgb * |
msg |
|
) |
| |
Parse/Decode CTRL from Message buffers into command struct.
- Parameters
-
[in] | ctx | talloc context from which to allocate |
[in] | msg | message buffer containing command to be decoded |
- Returns
- callee-allocated decoded CTRL command; NULL on allocation failure, ctrl->type == CTRL_TYPE_ERROR and an error message in ctrl->reply on any error. The caller is responsible to talloc_free() the returned struct pointer. If information of the origin of the ERROR cmd returned is required (received or local parsing failure), use ctrl_cmd_parse3 instead.
References ctrl_cmd_parse3(), and msg.
Referenced by ctrl_cmd_exec_from_string(), and ctrl_cmd_parse().
◆ ctrl_cmd_parse3()
struct ctrl_cmd* ctrl_cmd_parse3 |
( |
void * |
ctx, |
|
|
struct msgb * |
msg, |
|
|
bool * |
parse_failed |
|
) |
| |
Parse/Decode CTRL from Message buffers into command struct.
- Parameters
-
[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. |
- Returns
- callee-allocated decoded CTRL command; NULL on allocation failure, ctrl->type == CTRL_TYPE_ERROR and an error message in ctrl->reply on any error. The caller is responsible to talloc_free() the returned struct pointer.
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().
◆ ctrl_cmd_send()
Encode a CTRL command and append it to the given write queue.
- Parameters
-
[in,out] | queue | write queue to which encoded cmd shall be appended |
[in] | cmd | decoded command representation |
- Returns
- 0 in case of success; negative on error
Referenced by ctrl_cmd_def_send().
◆ ctrl_cmd_send_to_all()
◆ ctrl_cmd_trap()
◆ ctrl_type_vals
#define ctrl_cmd_reply_printf(cmd, fmt, args ...)
Definition: control_cmd.h:85
int ctrl_cmd_exec(vector vline, struct ctrl_cmd *command, vector node, void *data)
Execute a given received command.
Definition: control_cmd.c:94
int32_t osmo_stat_item_get_last(const struct osmo_stat_item *item)
vector ctrl_node_vec
Definition: control_if.c:68
struct ctrl_cmd * ctrl_cmd_parse2(void *ctx, struct msgb *msg)
Parse/Decode CTRL from Message buffers into command struct.
Definition: control_cmd.c:328
struct ctrl_handle * ctrl_interface_setup_dynip2(void *data, const char *bind_addr, uint16_t port, ctrl_cmd_lookup lookup, unsigned int node_count)
Setup CTRL interface on a given address.
Definition: control_if.c:991
static int control_write_cb(struct osmo_fd *bfd, struct msgb *msg)
Definition: control_if.c:473
int ctrl_cmd_send_to_all(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd)
Send a CTRL command to all connections.
Definition: control_if.c:101
const struct rate_ctr_desc * ctr_desc
char * reply
respnse message string
Definition: control_cmd.h:80
static struct msgb * msgb_alloc_headroom(uint16_t size, uint16_t headroom, const char *name)
struct ctrl_cmd * ctrl_cmd_parse(void *ctx, struct msgb *msg)
Parse/Decode CTRL from Message buffers into command struct.
Definition: control_cmd.c:301
int ctrl_cmd_exec(vector vline, struct ctrl_cmd *command, vector node, void *data)
Execute a given received command.
Definition: control_cmd.c:94
struct osmo_wqueue write_queue
The queue for sending data back.
Definition: control_cmd.h:49
int vector_set_index(vector v, unsigned int i, void *val)
struct msgb * ctrl_cmd_make(struct ctrl_cmd *cmd)
Encode a given CTRL command from its parsed form into a message buffer.
Definition: control_cmd.c:523
int ipa_ccm_send_pong(int fd)
struct ctrl_cmd * ctrl_cmd_trap(struct ctrl_cmd *cmd)
Copy given cmd and convert copy to CTRL_TYPE_TRAP.
Definition: control_if.c:165
static void control_close_conn(struct ctrl_connection *ccon)
Definition: control_if.c:178
#define CTRL_HELPER_GET_STRING(cmdname, dtype, element)
Helper to generate static GET function for string.
Definition: control_cmd.h:209
int ctrl_cmd_send(struct osmo_wqueue *queue, struct ctrl_cmd *cmd)
Encode a CTRL command and append it to the given write queue.
Definition: control_if.c:119
const char * get_value_string(const struct value_string *vs, uint32_t val)
const struct rate_ctr_group_desc * desc
char * variable
name of the variable
Definition: control_cmd.h:76
struct ctrl_cmd_struct strcmd
Definition: control_cmd.h:98
static size_t len(const char *str)
struct ctrl_cmd * ctrl_cmd_parse3(void *ctx, struct msgb *msg, bool *parse_failed)
Parse/Decode CTRL from Message buffers into command struct.
Definition: control_cmd.c:342
static int get_fsm_inst_state(struct ctrl_cmd *cmd, void *data)
Definition: fsm_ctrl_commands.c:80
static void create_cmd_struct(struct ctrl_cmd_struct *cmd, const char *name)
Definition: control_cmd.c:172
static int ctrl_init(unsigned int node_count)
Definition: control_if.c:888
Definition: control_cmd.h:88
static int get_stat_item(struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:732
const struct osmo_stat_item * osmo_stat_item_get_by_name(const struct osmo_stat_item_group *statg, const char *name)
static unsigned char * msgb_put(struct msgb *msgb, unsigned int len)
char * id
Definition: control_cmd.h:72
const struct value_string ctrl_type_vals[]
human-readable string names for ctrl_type
Definition: control_cmd.c:43
const char * ctrl_vty_get_bind_addr(void)
Definition: control_vty.c:46
int(* write_cb)(struct osmo_fd *fd, struct msgb *msg)
struct msgb * pending_msg
Buffer for partial input data.
Definition: control_cmd.h:52
ctrl_cmd_lookup lookup
Definition: control_if.c:73
int osmo_fd_register(struct osmo_fd *fd)
const char * osmo_escape_str(const char *str, int in_len)
struct llist_head children
int(* cb)(struct osmo_fd *fd, unsigned int what)
void cmd_free_strvec(vector v)
@ CTRL_NODE_ROOT
Definition: control_cmd.h:21
bool osmo_separated_identifiers_valid(const char *str, const char *sep_chars)
#define llist_for_each_entry_safe(pos, n, head, member)
void * vector_lookup(vector v, unsigned int i)
struct osmo_fsm_inst::@0 proc
int get_string_value(const struct value_string *vs, const char *str)
char * osmo_sock_get_name(const void *ctx, int fd)
static int msgb_tailroom(const struct msgb *msgb)
int ctrl_cmd_handle(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:209
ctrl_cmd_lookup lookup
Definition: control_if.h:18
void osmo_fd_unregister(struct osmo_fd *fd)
void(* closed_cb)(struct ctrl_connection *conn)
Callback if the connection was closed.
Definition: control_cmd.h:55
Definition: control_if.h:14
struct ctrl_cmd * ctrl_cmd_parse2(void *ctx, struct msgb *msg)
Parse/Decode CTRL from Message buffers into command struct.
Definition: control_cmd.c:328
static void add_word(struct ctrl_cmd_struct *cmd, const char *start, const char *end)
Definition: control_cmd.c:155
#define INIT_LLIST_HEAD(ptr)
size_t osmo_strlcpy(char *dst, const char *src, size_t siz)
static int ctrl_initialized
Definition: control_if.c:885
int osmo_fsm_ctrl_cmds_install(void)
Definition: fsm_ctrl_commands.c:168
const struct value_string ctrl_type_vals[]
human-readable string names for ctrl_type
Definition: control_cmd.c:43
struct ctrl_handle * ctrl_interface_setup(void *data, uint16_t port, ctrl_cmd_lookup lookup)
Definition: control_if.c:879
#define container_of(ptr, type, member)
struct msgb * ctrl_cmd_make(struct ctrl_cmd *cmd)
Encode a given CTRL command from its parsed form into a message buffer.
Definition: control_cmd.c:523
void * vector_lookup_ensure(vector v, unsigned int i)
#define CTRL_HELPER_GET_INT(cmdname, dtype, element)
Helper to generate static GET function for integer.
Definition: control_cmd.h:152
char * value
value of the specified CTRL variable
Definition: control_cmd.h:78
@ CTRL_TYPE_UNKNOWN
Definition: control_cmd.h:32
static void llist_del(struct llist_head *entry)
Definition: control_cmd.h:113
int ipa_ccm_send_id_ack(int fd)
static int get_counter(struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:823
int osmo_sock_init_ofd(struct osmo_fd *ofd, int family, int type, int proto, const char *host, uint16_t port, unsigned int flags)
static int get_fsm_inst_dump(struct ctrl_cmd *cmd, void *data)
Definition: fsm_ctrl_commands.c:130
void install_node(struct cmd_node *node, int(*func)(struct vty *))
const char * ctrl_vty_get_bind_addr(void)
Definition: control_vty.c:46
const struct rate_ctr * rate_ctr_get_by_name(const struct rate_ctr_group *ctrg, const char *name)
vector vector_init(unsigned int size)
static void * ctrl_vty_ctx
Definition: control_vty.c:27
int(* read_cb)(struct osmo_fd *fd)
void * data
Definition: control_if.h:16
void vector_free(vector v)
@ CTRL_NODE_FSM
Definition: control_cmd.h:25
@ CTRL_TYPE_SET
Definition: control_cmd.h:34
static int ctrl_bind_port
Definition: control_vty.c:30
static uint64_t get_rate_ctr_value(const struct rate_ctr *ctr, int intv, const char *grp)
Definition: control_if.c:577
struct osmo_fsm * osmo_fsm_find_by_name(const char *name)
ctrl_cmd_reply_cb reply_cb
Definition: control_if.h:27
int(* get)(struct ctrl_cmd *cmd, void *data)
call-back function implementing the GET operation
Definition: control_cmd.h:102
#define vector_slot(V, I)
void msgb_free(struct msgb *m)
struct rate_ctr_group * rate_ctr_get_group_by_name_idx(const char *name, const unsigned int idx)
static int set_counter(struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:866
#define CTRL_CMD_TRAP_ID
Definition: control_cmd.h:15
uint16_t ctrl_vty_get_bind_port(uint16_t default_port)
Definition: control_vty.c:53
int osmo_wqueue_enqueue(struct osmo_wqueue *queue, struct msgb *data)
struct osmo_fsm_inst * parent
int ipa_msg_recv_buffered(int fd, struct msgb **rmsg, struct msgb **tmp_msg)
void * data
Definition: control_cmd.h:116
int(* set)(struct ctrl_cmd *cmd, void *data)
call-back function implementing the SET operation
Definition: control_cmd.h:100
ctrl_type
Ctrl command types (GET, SET, ...)
Definition: control_cmd.h:31
int ctrl_vty_init(void *ctx)
Definition: control_vty.c:87
int ctrl_lookup_register(ctrl_cmd_lookup lookup)
Install a lookup helper function for control nodes This function is used by e.g.
Definition: control_if.c:1053
struct osmo_fd listen_fd
Definition: control_if.h:15
static int handle_control_read(struct osmo_fd *bfd)
Definition: control_if.c:342
static int config_write_ctrl(struct vty *vty)
Definition: control_vty.c:74
struct ctrl_cmd * cmd
Definition: control_cmd.h:115
static struct cmd_node ctrl_node
Definition: control_vty.c:58
int nr_commands
Definition: control_cmd.h:89
Definition: control_if.c:71
static bool id_str_valid(const char *str)
Definition: control_cmd.c:311
int ctrl_cmd_install(enum ctrl_node_type node, struct ctrl_cmd_element *cmd)
Install a given command definition at a given CTRL node.
Definition: control_cmd.c:209
#define CTRL_CMD_REPLY
Definition: control_cmd.h:14
Represents a single ctrl command after parsing.
Definition: control_cmd.h:67
struct rate_ctr * rate_ctr_group_get_ctr(struct rate_ctr_group *grp, unsigned int idx)
int ctrl_cmd_send_trap(struct ctrl_handle *ctrl, const char *name, char *value)
Send TRAP over given Control Interface.
Definition: control_if.c:147
void ipa_prepend_header(struct msgb *msg, int proto)
enum ctrl_type type
command type
Definition: control_cmd.h:71
if(vty->type==VTY_SHELL_SERV)
#define REPLY_CASE(TYPE, NAME)
Implementation of a given CTRL command.
Definition: control_cmd.h:95
void * node
node of the specified variable
Definition: control_cmd.h:74
int osmo_str_to_int64(int64_t *result, const char *str, int base, int64_t min_val, int64_t max_val)
void osmo_wqueue_init(struct osmo_wqueue *queue, int max_length)
int ctrl_cmd_def_send(struct ctrl_cmd_def *cd)
Send the response to a deferred ctrl command.
Definition: control_cmd.c:631
int ctrl_cmd_def_is_zombie(struct ctrl_cmd_def *cd)
Determine if the given deferred control command is still alive or a zombie.
Definition: control_cmd.c:614
static LLIST_HEAD(ctrl_lookup_helpers)
const char * group_name_prefix
CTRL_CMD_DEFINE_RO(stat_item, "stat_item *")
struct llist_head list
Definition: control_if.c:72
struct ctrl_handle * ctrl_handle_alloc(void *ctx, void *data, ctrl_cmd_lookup lookup)
Allocate a CTRL interface handle.
Definition: control_if.c:967
static int listen_fd_cb(struct osmo_fd *listen_bfd, unsigned int what)
Definition: control_if.c:525
#define llist_for_each_entry(pos, head, member)
struct osmo_stat_item_group * osmo_stat_item_get_group_by_name_idx(const char *name, const unsigned int idx)
struct ctrl_handle * ctrl_interface_setup_dynip(void *data, const char *bind_addr, uint16_t port, ctrl_cmd_lookup lookup)
Setup CTRL interface on a given address.
Definition: control_if.c:1026
static void llist_add(struct llist_head *_new, struct llist_head *head)
struct ctrl_connection * osmo_ctrl_conn_alloc(void *ctx, void *data)
Allocate CTRL connection.
Definition: control_if.c:505
struct osmo_counter * osmo_counter_get_by_name(const char *name)
struct ctrl_cmd * ctrl_cmd_exec_from_string(struct ctrl_handle *ch, const char *cmdstr)
Helper for "local execution" of a CTRL command from a string The function will parse + execute the gi...
Definition: control_if.c:1078
int(* ctrl_cmd_lookup)(void *data, vector vline, int *node_type, void **node_data, int *i)
Definition: control_if.h:10
struct ctrl_cmd * ctrl_cmd_create(void *ctx, enum ctrl_type type)
Allocate a control command of given type.
Definition: control_cmd.c:244
uint16_t ctrl_vty_get_bind_port(uint16_t default_port)
Definition: control_vty.c:53
struct llist_head ccon_list
Definition: control_if.h:21
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.
Definition: control_cmd.c:592
@ CTRL_TYPE_GET
Definition: control_cmd.h:33
const char * msgb_hexdump(const struct msgb *msg)
@ CTRL_TYPE_GET_REPLY
Definition: control_cmd.h:35
int(* verify)(struct ctrl_cmd *cmd, const char *value, void *data)
call-back function to validate a value; called before SET
Definition: control_cmd.h:104
int ctrl_handle_msg(struct ctrl_handle *ctrl, struct ctrl_connection *ccon, struct msgb *msg)
Handle a received CTRL command contained in a Message buffers.
Definition: control_if.c:383
static void llist_add_tail(struct llist_head *_new, struct llist_head *head)
int ctrl_lookup_register(ctrl_cmd_lookup lookup)
Install a lookup helper function for control nodes This function is used by e.g.
Definition: control_if.c:1053
struct llist_head def_cmds
Pending deferred command responses for this connection.
Definition: control_cmd.h:61
ctrl_node_type
The class of node at which a ctrl command is registered to.
Definition: control_cmd.h:20
char ** command
Definition: control_cmd.h:90
void install_lib_element(int ntype, struct cmd_element *cmd)
#define CTRL_CMD_ERROR
Definition: control_cmd.h:12
@ _LAST_CTRL_NODE
Definition: control_cmd.h:27
struct ctrl_connection * ccon
connection through which the command was received
Definition: control_cmd.h:69
int ctrl_cmd_install(enum ctrl_node_type node, struct ctrl_cmd_element *cmd)
Install a given command definition at a given CTRL node.
Definition: control_cmd.c:209
struct llist_head cmds
Pending commands for this connection.
Definition: control_cmd.h:58
Represents a single ctrl connection.
Definition: control_cmd.h:45
static unsigned char * msgb_pull(struct msgb *msgb, unsigned int len)
struct rate_ctr_per_intv intv[RATE_CTR_INTV_NUM]
@ CTRL_NODE_FSM_INST
Definition: control_cmd.h:26
void ipa_prepend_header_ext(struct msgb *msg, int proto)
static int ctrl_rate_ctr_group_handler(struct rate_ctr_group *ctrg, void *data)
Definition: control_if.c:608
static int set_rate_ctr(struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:715
struct osmo_fsm_inst * osmo_fsm_inst_find_by_name(const struct osmo_fsm *fsm, const char *name)
vector ctrl_node_vec
Definition: control_if.c:68
static int verify_rate_ctr(struct ctrl_cmd *cmd, const char *value, void *data)
Definition: control_if.c:722
int ctrl_cmd_send(struct osmo_wqueue *queue, struct ctrl_cmd *cmd)
Encode a CTRL command and append it to the given write queue.
Definition: control_if.c:119
const char * log_level_str(unsigned int lvl)
struct ctrl_cmd * ctrl_cmd_create(void *ctx, enum ctrl_type)
Allocate a control command of given type.
Definition: control_cmd.c:244
vector cmd_make_descvec(const char *string, const char *descstr)
#define LOGP(ss, level, fmt, args...)
struct msgb * msgb_alloc(uint16_t size, const char *name)
struct ctrl_cmd * ctrl_cmd_cpy(void *ctx, struct ctrl_cmd *cmd)
Perform a deepl copy of the given cmd, allocating memory from ctx.
Definition: control_cmd.c:260
enum osmo_sub_auth_type type
struct ctrl_cmd_def * defer
state representing deferred (async) response, if any
Definition: control_cmd.h:82
const char * osmo_fsm_state_name(const struct osmo_fsm *fsm, uint32_t state)
static int verify_counter(struct ctrl_cmd *cmd, const char *value, void *data)
Definition: control_if.c:874
static int get_rate_ctr(struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:623
static void msgb_put_u8(struct msgb *msgb, uint8_t word)
#define RATE_CTR_INTV_NUM
int rate_ctr_for_each_group(rate_ctr_group_handler_t handle_group, void *data)
DEFUN(cfg_ctrl_bind_addr, cfg_ctrl_bind_addr_cmd, "bind A.B.C.D [<0-65535>]", "Set bind address to listen for Control connections\n" "Local IP address (default 127.0.0.1)\n" "Local TCP port number\n")
Definition: control_vty.c:32
static int get_rate_ctr_group_idx(struct rate_ctr_group *ctrg, int intv, struct ctrl_cmd *cmd)
Definition: control_if.c:593
int osmo_timer_remaining(const struct osmo_timer_list *timer, const struct timeval *now, struct timeval *remaining)
#define CTRL_CMD_HANDLED
Definition: control_cmd.h:13
int ctrl_parse_get_num(vector vline, int i, long *num)
Parse ascii-encoded decimal number at vline[i].
Definition: control_if.c:82
static int fsm_ctrl_node_lookup(void *data, vector vline, int *node_type, void **node_data, int *i)
control interface lookup function for FSM's
Definition: fsm_ctrl_commands.c:24
static int get_fsm_inst_parent_name(struct ctrl_cmd *cmd, void *data)
Definition: fsm_ctrl_commands.c:94
CTRL_CMD_DEFINE(rate_ctr, "rate_ctr *")
static const char * ctrl_vty_bind_addr
Definition: control_vty.c:28
struct ctrl_handle * ctrl_handle_alloc2(void *ctx, void *data, ctrl_cmd_lookup lookup, unsigned int node_count)
Allocate a CTRL interface handle.
Definition: control_if.c:940
@ CTRL_TYPE_ERROR
Definition: control_cmd.h:38
CTRL_CMD_DEFINE_RO(fsm_inst_state, "state")
@ CTRL_TYPE_TRAP
Definition: control_cmd.h:37
struct osmo_stat_item_group * osmo_stat_item_get_group_by_name_idxname(const char *group_name, const char *idx_name)
int vector_set(vector v, void *val)
struct llist_head list
Definition: control_cmd.h:114
const char * name
textual name/id of the CTRL command
Definition: control_cmd.h:97
struct ctrl_handle * ctrl_interface_setup2(void *data, uint16_t default_port, ctrl_cmd_lookup lookup, unsigned int node_count)
Initializes CTRL interface using the configured bind addr/port.
Definition: control_if.c:1040
static int get_fsm_inst_timer(struct ctrl_cmd *cmd, void *data)
Definition: fsm_ctrl_commands.c:111
struct osmo_timer_list timer
vty_out(vty, "!%s", VTY_NEWLINE)
struct llist_head list_entry
Definition: control_cmd.h:46
struct osmo_fsm_inst * osmo_fsm_inst_find_by_id(const struct osmo_fsm *fsm, const char *id)
const struct osmo_fd * fd
@ CTRL_TYPE_SET_REPLY
Definition: control_cmd.h:36
struct ctrl_cmd * ctrl_cmd_parse3(void *ctx, struct msgb *msg, bool *parse_failed)
Parse/Decode CTRL from Message buffers into command struct.
Definition: control_cmd.c:342
static struct ctrl_cmd_element * ctrl_cmd_get_element_match(vector vline, vector node)
Definition: control_cmd.c:58
struct ctrl_cmd * ctrl_cmd_cpy(void *ctx, struct ctrl_cmd *cmd)
Perform a deepl copy of the given cmd, allocating memory from ctx.
Definition: control_cmd.c:260
int osmo_str_to_int(int *result, const char *str, int base, int min_val, int max_val)
void osmo_wqueue_clear(struct osmo_wqueue *queue)
vector cmd_make_strvec(const char *string)
int osmo_fsm_ctrl_cmds_install(void)
Definition: fsm_ctrl_commands.c:168