control_cmd.h File Reference
`#include <osmocom/core/msgb.h>`
`#include <osmocom/core/talloc.h>`
`#include <osmocom/core/write_queue.h>`
`#include <osmocom/core/logging.h>`
`#include <osmocom/core/utils.h>`
`#include <osmocom/vty/vector.h>`

Go to the source code of this file.

## Data Structures

struct | ctrl_connection
| Represents a single ctrl connection. More...
struct | ctrl_cmd
| Represents a single ctrl command after parsing. More...
struct | ctrl_cmd_struct
struct | ctrl_cmd_element
| Implementation of a given CTRL command. More...
struct | ctrl_cmd_map
struct | ctrl_cmd_def

## Macros

#define | CTRL_CMD_ERROR -1
#define | CTRL_CMD_HANDLED 0
#define | CTRL_CMD_REPLY 1
#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...

## Enumerations

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...

## Functions

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 msgb into command struct. More...
struct ctrl_cmd * | ctrl_cmd_parse2 (void *ctx, struct msgb *msg)
| Parse/Decode CTRL from msgb into command struct. More...
struct ctrl_cmd * | ctrl_cmd_parse (void *ctx, struct msgb *msg)
| Parse/Decode CTRL from msgb 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...

## Variables

const struct value_string | ctrl_type_vals []
| human-readable string names for ctrl_type More...

## Macro Definition Documentation

## 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_GET_INT(cmdname, dtype, element) \
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"; \
return CTRL_CMD_ERROR; \
} \
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_GET_STRING(cmdname, dtype, element) \
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
  [in] | min | minimum permitted integer value
  [in] | max | maximum permitted integer value

## CTRL_CMD_DEFINE_STRUCT

#define CTRL_CMD_DEFINE_STRUCT | ( |  | cmdname,
|  |  | cmdstr,
|  |  | verify_name
| ) |  |

Value:
static struct ctrl_cmd_element cmd_##cmdname = { \
.name = cmdstr, \
.get = &get_##cmdname, \
.set = &set_##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"; \
return CTRL_CMD_ERROR; \
} \
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"; \
return CTRL_CMD_ERROR; \
} \
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

#define CTRL_CMD_REPLY 1

## ctrl_cmd_reply_printf

#define ctrl_cmd_reply_printf | ( |  | cmd,
|  |  | fmt,
|  |  | args ...
| ) |  | osmo_talloc_asprintf(cmd, cmd->reply, fmt, ## args)

## 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"; \
return CTRL_CMD_ERROR; \
} \
return CTRL_CMD_REPLY; \
}

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"; \
return CTRL_CMD_ERROR; \
} \
return CTRL_CMD_REPLY; \
}

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

## Enumeration Type Documentation

## ctrl_node_type

enum 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

enum 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 |

## Function Documentation

## ctrl_cmd_cpy()

struct ctrl_cmd* ctrl_cmd_cpy | ( | void * | ctx,
|  | struct ctrl_cmd * | cmd
| ) |  |

Perform a deepl copy of the given cmd, allocating memory from ctx.

Parameters

  [in] | ctx | talloc context from which to allocate
  | [in | cmd CTRL command to be copied

Returns
  deep copy of cmd on success; NULL on error

References ctrl_cmd::id, ctrl_cmd::reply, ctrl_cmd::type, ctrl_cmd::value, and ctrl_cmd::variable.

Referenced by ctrl_cmd_trap().

## ctrl_cmd_create()

struct ctrl_cmd* ctrl_cmd_create | ( | void * | ctx,
|  | enum ctrl_type | type
| ) |  |

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 ctrl_cmd::type.

Referenced by ctrl_cmd_send_trap().

## ctrl_cmd_def_is_zombie()

int ctrl_cmd_def_is_zombie | ( | struct ctrl_cmd_def * | cd | ) |

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, and ctrl_cmd_def::list.

## 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, ctrl_cmd_def::data, ctrl_connection::def_cmds, ctrl_cmd::defer, and ctrl_cmd_def::list.

## ctrl_cmd_def_send()

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.

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, ctrl_cmd::type, and ctrl_connection::write_queue.

## ctrl_cmd_exec()

int ctrl_cmd_exec | ( | vector | vline,
|  | struct ctrl_cmd * | command,
|  | vector | node,
|  | void * | data
| ) |  |

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, ctrl_cmd_element::get, 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()

int ctrl_cmd_install | ( | enum ctrl_node_type | node,
|  | struct ctrl_cmd_element * | cmd
| ) |  |

Install a given command definition at a given CTRL node.

Parameters

  [in] | node | CTRL node at whihc 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, ctrl_cmd_element::name, and ctrl_cmd_element::strcmd.

Referenced by ctrl_init(), and osmo_fsm_ctrl_cmds_install().

## ctrl_cmd_make()

struct msgb* ctrl_cmd_make | ( | struct ctrl_cmd * | cmd | ) |

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, ctrl_cmd::id, ctrl_cmd::reply, 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 msgb 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, and ctrl_cmd::type.

## ctrl_cmd_parse2()

struct ctrl_cmd* ctrl_cmd_parse2 | ( | void * | ctx,
|  | struct msgb * | msg
| ) |  |

Parse/Decode CTRL from msgb 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().

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 msgb 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, ctrl_cmd::id, id_str_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()

int ctrl_cmd_send | ( | struct osmo_wqueue * | queue,
|  | struct ctrl_cmd * | cmd
| ) |  |

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()

int ctrl_cmd_send_to_all | ( | struct ctrl_handle * | ctrl,
|  | struct ctrl_cmd * | cmd
| ) |  |

Send a CTRL command to all connections.

Parameters

  [in] | ctrl | global control handle
  [in] | cmd | command to send to all connections in \ctrl

Returns
  number of times the command has been sent

References ctrl_cmd::ccon, ctrl_handle::ccon_list, ctrl_cmd_send(), ctrl_connection::list_entry, and ctrl_connection::write_queue.

Referenced by ctrl_cmd_send_trap().

## ctrl_cmd_trap()

struct ctrl_cmd* ctrl_cmd_trap | ( | struct ctrl_cmd * | cmd | ) |

Copy given cmd and convert copy to CTRL_TYPE_TRAP.

Parameters

  [in] | cmd | command to be copied

Returns
  pointer to newly-allocated copy of type TRAP. Allocated as sibling of cmd

References ctrl_cmd::ccon, ctrl_cmd_cpy(), CTRL_TYPE_TRAP, and ctrl_cmd::type.

## Variable Documentation

## ctrl_type_vals

const struct value_string ctrl_type_vals[]

human-readable string names for ctrl_type

Referenced by ctrl_cmd_handle(), ctrl_cmd_make(), and ctrl_cmd_parse3().

ctrl_cmd_reply_printf
#define ctrl_cmd_reply_printf(cmd, fmt, args ...)
Definition: control_cmd.h:84
ctrl_cmd_exec
int ctrl_cmd_exec(vector vline, struct ctrl_cmd *command, vector node, void *data)
Execute a given received command.
Definition: control_cmd.c:98
ctrl_node_vec
vector ctrl_node_vec
Definition: control_if.c:69
ctrl_cmd_parse2
struct ctrl_cmd * ctrl_cmd_parse2(void *ctx, struct msgb *msg)
Parse/Decode CTRL from msgb into command struct.
Definition: control_cmd.c:322
ctrl_interface_setup_dynip2
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:864
control_write_cb
static int control_write_cb(struct osmo_fd *bfd, struct msgb *msg)
Definition: control_if.c:450
ctrl_cmd_send_to_all
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:106
ctrl_cmd::reply
char * reply
respnse message string
Definition: control_cmd.h:79
ctrl_cmd_parse
struct ctrl_cmd * ctrl_cmd_parse(void *ctx, struct msgb *msg)
Parse/Decode CTRL from msgb into command struct.
Definition: control_cmd.c:295
ctrl_cmd_exec
int ctrl_cmd_exec(vector vline, struct ctrl_cmd *command, vector node, void *data)
Execute a given received command.
Definition: control_cmd.c:98
ctrl_connection::write_queue
struct osmo_wqueue write_queue
The queue for sending data back.
Definition: control_cmd.h:48
ctrl_cmd_make
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:517
ctrl_cmd_trap
struct ctrl_cmd * ctrl_cmd_trap(struct ctrl_cmd *cmd)
Copy given cmd and convert copy to CTRL_TYPE_TRAP.
Definition: control_if.c:170
control_close_conn
static void control_close_conn(struct ctrl_connection *ccon)
Definition: control_if.c:183
CTRL_HELPER_GET_STRING
#define CTRL_HELPER_GET_STRING(cmdname, dtype, element)
Helper to generate static GET function for string.
Definition: control_cmd.h:208
ctrl_cmd_send
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:124
ctrl_cmd::variable
char * variable
name of the variable
Definition: control_cmd.h:75
ctrl_cmd_element::strcmd
struct ctrl_cmd_struct strcmd
Definition: control_cmd.h:97
ctrl_cmd_parse3
struct ctrl_cmd * ctrl_cmd_parse3(void *ctx, struct msgb *msg, bool *parse_failed)
Parse/Decode CTRL from msgb into command struct.
Definition: control_cmd.c:336
get_fsm_inst_state
static int get_fsm_inst_state(struct ctrl_cmd *cmd, void *data)
Definition: fsm_ctrl_commands.c:80
create_cmd_struct
static void create_cmd_struct(struct ctrl_cmd_struct *cmd, const char *name)
Definition: control_cmd.c:176
ctrl_init
static int ctrl_init(unsigned int node_count)
Definition: control_if.c:764
ctrl_cmd_struct
Definition: control_cmd.h:87
ctrl_cmd::id
char * id
Definition: control_cmd.h:71
ctrl_type_vals
const struct value_string ctrl_type_vals[]
human-readable string names for ctrl_type
Definition: control_cmd.c:47
ctrl_connection::pending_msg
struct msgb * pending_msg
Buffer for partial input data.
Definition: control_cmd.h:51
lookup_helper::lookup
ctrl_cmd_lookup lookup
Definition: control_if.c:74
control_vty.h
CTRL_NODE_ROOT
@ CTRL_NODE_ROOT
Definition: control_cmd.h:20
ctrl_cmd_handle
int ctrl_cmd_handle(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:214
ctrl_handle::lookup
ctrl_cmd_lookup lookup
Definition: control_if.h:17
ctrl_connection::closed_cb
void(* closed_cb)(struct ctrl_connection *conn)
Callback if the connection was closed.
Definition: control_cmd.h:54
ctrl_handle
Definition: control_if.h:13
ctrl_cmd_parse2
struct ctrl_cmd * ctrl_cmd_parse2(void *ctx, struct msgb *msg)
Parse/Decode CTRL from msgb into command struct.
Definition: control_cmd.c:322
add_word
static void add_word(struct ctrl_cmd_struct *cmd, const char *start, const char *end)
Definition: control_cmd.c:159
ctrl_initialized
static int ctrl_initialized
Definition: control_if.c:761
get_rate_ctr_group_idx
static int get_rate_ctr_group_idx(const struct rate_ctr_group *ctrg, int intv, struct ctrl_cmd *cmd)
Definition: control_if.c:563
osmo_fsm_ctrl_cmds_install
int osmo_fsm_ctrl_cmds_install(void)
Definition: fsm_ctrl_commands.c:168
ctrl_type_vals
const struct value_string ctrl_type_vals[]
human-readable string names for ctrl_type
Definition: control_cmd.c:47
ctrl_interface_setup
struct ctrl_handle * ctrl_interface_setup(void *data, uint16_t port, ctrl_cmd_lookup lookup)
Definition: control_if.c:755
ctrl_cmd_make
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:517
CTRL_HELPER_GET_INT
#define CTRL_HELPER_GET_INT(cmdname, dtype, element)
Helper to generate static GET function for integer.
Definition: control_cmd.h:151
ctrl_cmd::value
char * value
value of the specified CTRL variable
Definition: control_cmd.h:77
CTRL_TYPE_UNKNOWN
@ CTRL_TYPE_UNKNOWN
Definition: control_cmd.h:31
ctrl_cmd_def
Definition: control_cmd.h:112
get_counter
static int get_counter(struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:699
get_fsm_inst_dump
static int get_fsm_inst_dump(struct ctrl_cmd *cmd, void *data)
Definition: fsm_ctrl_commands.c:130
ctrl_vty_get_bind_addr
const char * ctrl_vty_get_bind_addr(void)
Definition: control_vty.c:46
ctrl_vty_ctx
static void * ctrl_vty_ctx
Definition: control_vty.c:31
ctrl_handle::data
void * data
Definition: control_if.h:15
CTRL_NODE_FSM
@ CTRL_NODE_FSM
Definition: control_cmd.h:24
CTRL_TYPE_SET
@ CTRL_TYPE_SET
Definition: control_cmd.h:33
get_rate_ctr_value
static uint64_t get_rate_ctr_value(const struct rate_ctr *ctr, int intv, const char *grp)
Definition: control_if.c:547
ctrl_cmd_element::get
int(* get)(struct ctrl_cmd *cmd, void *data)
call-back function implementing the GET operation
Definition: control_cmd.h:101
set_counter
static int set_counter(struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:742
ctrl_cmd_def::data
void * data
Definition: control_cmd.h:115
ctrl_cmd_element::set
int(* set)(struct ctrl_cmd *cmd, void *data)
call-back function implementing the SET operation
Definition: control_cmd.h:99
ctrl_type
ctrl_type
Ctrl command types (GET, SET, ...)
Definition: control_cmd.h:30
ctrl_vty_init
int ctrl_vty_init(void *ctx)
Definition: control_vty.c:82
ctrl_lookup_register
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:914
ctrl_handle::listen_fd
struct osmo_fd listen_fd
Definition: control_if.h:14
handle_control_read
static int handle_control_read(struct osmo_fd *bfd)
Definition: control_if.c:343
control_if.h
config_write_ctrl
static int config_write_ctrl(struct vty *vty)
Definition: control_vty.c:69
ctrl_cmd_def::cmd
struct ctrl_cmd * cmd
Definition: control_cmd.h:114
ctrl_node
static struct cmd_node ctrl_node
Definition: control_vty.c:53
ctrl_cmd_struct::nr_commands
int nr_commands
Definition: control_cmd.h:88
lookup_helper
Definition: control_if.c:72
id_str_valid
static bool id_str_valid(const char *str)
Definition: control_cmd.c:305
ctrl_cmd_install
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:213
CTRL_CMD_REPLY
#define CTRL_CMD_REPLY
Definition: control_cmd.h:14
ctrl_cmd
Represents a single ctrl command after parsing.
Definition: control_cmd.h:66
ctrl_cmd_send_trap
int ctrl_cmd_send_trap(struct ctrl_handle *ctrl, const char *name, char *value)
Send TRAP over given Control Interface.
Definition: control_if.c:152
ctrl_cmd::type
enum ctrl_type type
command type
Definition: control_cmd.h:70
REPLY_CASE
#define REPLY_CASE(TYPE, NAME)
ctrl_cmd_element
Implementation of a given CTRL command.
Definition: control_cmd.h:94
ctrl_cmd::node
void * node
node of the specified variable
Definition: control_cmd.h:73
ctrl_cmd_def_send
int ctrl_cmd_def_send(struct ctrl_cmd_def *cd)
Send the response to a deferred ctrl command.
Definition: control_cmd.c:656
ctrl_cmd_def_is_zombie
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:639
LLIST_HEAD
static LLIST_HEAD(ctrl_lookup_helpers)
lookup_helper::list
struct llist_head list
Definition: control_if.c:73
ctrl_handle_alloc
struct ctrl_handle * ctrl_handle_alloc(void *ctx, void *data, ctrl_cmd_lookup lookup)
Allocate a CTRL interface handle.
Definition: control_if.c:840
listen_fd_cb
static int listen_fd_cb(struct osmo_fd *listen_bfd, unsigned int what)
Definition: control_if.c:495
ctrl_interface_setup_dynip
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:899
osmo_ctrl_conn_alloc
struct ctrl_connection * osmo_ctrl_conn_alloc(void *ctx, void *data)
Allocate CTRL connection.
Definition: control_if.c:476
ctrl_cmd_exec_from_string
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:939
DEFUN
DEFUN(cfg_ctrl_bind_addr, cfg_ctrl_bind_addr_cmd, "bind A.B.C.D", "Set bind address to listen for Control connections\n" "Local IP address (default 127.0.0.1)\n")
Definition: control_vty.c:34
ctrl_cmd_lookup
int(* ctrl_cmd_lookup)(void *data, vector vline, int *node_type, void **node_data, int *i)
Definition: control_if.h:10
ctrl_cmd_create
struct ctrl_cmd * ctrl_cmd_create(void *ctx, enum ctrl_type type)
Allocate a control command of given type.
Definition: control_cmd.c:238
control_cmd.h
ctrl_handle::ccon_list
struct llist_head ccon_list
Definition: control_if.h:20
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.
Definition: control_cmd.c:617
CTRL_TYPE_GET
@ CTRL_TYPE_GET
Definition: control_cmd.h:32
CTRL_TYPE_GET_REPLY
@ CTRL_TYPE_GET_REPLY
Definition: control_cmd.h:34
ctrl_cmd_element::verify
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:103
ctrl_handle_msg
int ctrl_handle_msg(struct ctrl_handle *ctrl, struct ctrl_connection *ccon, struct msgb *msg)
Handle a received CTRL command contained in a msgb.
Definition: control_if.c:384
ctrl_lookup_register
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:914
ctrl_connection::def_cmds
struct llist_head def_cmds
Pending deferred command responses for this connection.
Definition: control_cmd.h:60
ctrl_node_type
ctrl_node_type
The class of node at which a ctrl command is registered to.
Definition: control_cmd.h:19
ctrl_cmd_struct::command
char ** command
Definition: control_cmd.h:89
CTRL_CMD_ERROR
#define CTRL_CMD_ERROR
Definition: control_cmd.h:12
_LAST_CTRL_NODE
@ _LAST_CTRL_NODE
Definition: control_cmd.h:26
ctrl_cmd::ccon
struct ctrl_connection * ccon
connection through which the command was received
Definition: control_cmd.h:68
ctrl_cmd_install
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:213
ctrl_connection::cmds
struct llist_head cmds
Pending commands for this connection.
Definition: control_cmd.h:57
ctrl_connection
Represents a single ctrl connection.
Definition: control_cmd.h:44
CTRL_NODE_FSM_INST
@ CTRL_NODE_FSM_INST
Definition: control_cmd.h:25
ctrl_rate_ctr_group_handler
static int ctrl_rate_ctr_group_handler(struct rate_ctr_group *ctrg, void *data)
Definition: control_if.c:578
set_rate_ctr
static int set_rate_ctr(struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:685
ctrl_node_vec
vector ctrl_node_vec
Definition: control_if.c:69
verify_rate_ctr
static int verify_rate_ctr(struct ctrl_cmd *cmd, const char *value, void *data)
Definition: control_if.c:692
ctrl_cmd_send
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:124
ctrl_cmd_create
struct ctrl_cmd * ctrl_cmd_create(void *ctx, enum ctrl_type)
Allocate a control command of given type.
Definition: control_cmd.c:238
cmd_make_descvec
vector cmd_make_descvec(const char *string, const char *descstr)
ctrl_cmd_cpy
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:254
ctrl_cmd::defer
struct ctrl_cmd_def * defer
state representing deferred (async) response, if any
Definition: control_cmd.h:81
verify_counter
static int verify_counter(struct ctrl_cmd *cmd, const char *value, void *data)
Definition: control_if.c:750
get_rate_ctr
static int get_rate_ctr(struct ctrl_cmd *cmd, void *data)
Definition: control_if.c:593
CTRL_CMD_HANDLED
#define CTRL_CMD_HANDLED
Definition: control_cmd.h:13
ctrl_parse_get_num
int ctrl_parse_get_num(vector vline, int i, long *num)
Parse ascii-encoded decimal number at vline[i].
Definition: control_if.c:83
fsm_ctrl_node_lookup
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
get_fsm_inst_parent_name
static int get_fsm_inst_parent_name(struct ctrl_cmd *cmd, void *data)
Definition: fsm_ctrl_commands.c:94
CTRL_CMD_DEFINE
CTRL_CMD_DEFINE(rate_ctr, "rate_ctr *")
ctrl_vty_bind_addr
static const char * ctrl_vty_bind_addr
Definition: control_vty.c:32
ctrl_handle_alloc2
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:813
CTRL_TYPE_ERROR
@ CTRL_TYPE_ERROR
Definition: control_cmd.h:37
CTRL_CMD_DEFINE_RO
CTRL_CMD_DEFINE_RO(fsm_inst_state, "state")
CTRL_TYPE_TRAP
@ CTRL_TYPE_TRAP
Definition: control_cmd.h:36
ctrl_cmd_def::list
struct llist_head list
Definition: control_cmd.h:113
ctrl_cmd_element::name
const char * name
textual name/id of the CTRL command
Definition: control_cmd.h:96
get_fsm_inst_timer
static int get_fsm_inst_timer(struct ctrl_cmd *cmd, void *data)
Definition: fsm_ctrl_commands.c:111
ctrl_connection::list_entry
struct llist_head list_entry
Definition: control_cmd.h:45
CTRL_TYPE_SET_REPLY
@ CTRL_TYPE_SET_REPLY
Definition: control_cmd.h:35
ctrl_cmd_parse3
struct ctrl_cmd * ctrl_cmd_parse3(void *ctx, struct msgb *msg, bool *parse_failed)
Parse/Decode CTRL from msgb into command struct.
Definition: control_cmd.c:336
ctrl_cmd_get_element_match
static struct ctrl_cmd_element * ctrl_cmd_get_element_match(vector vline, vector node)
Definition: control_cmd.c:62
ctrl_cmd_cpy
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:254
osmo_fsm_ctrl_cmds_install
int osmo_fsm_ctrl_cmds_install(void)
Definition: fsm_ctrl_commands.c:168