Neels Hofmeyr | 17518fe | 2017-06-20 04:35:06 +0200 | [diff] [blame] | 1 | /*! \file control_if.h */ |
| 2 | |
Harald Welte | 5ddd435 | 2014-08-21 15:42:44 +0200 | [diff] [blame] | 3 | #pragma once |
Alexander Huemer | 4376bcc | 2011-09-06 00:09:48 +0200 | [diff] [blame] | 4 | |
| 5 | #include <osmocom/core/write_queue.h> |
Harald Welte | 1238cc6 | 2014-08-20 19:50:04 +0200 | [diff] [blame] | 6 | #include <osmocom/ctrl/control_cmd.h> |
| 7 | |
Harald Welte | 528134b | 2014-08-21 15:13:08 +0200 | [diff] [blame] | 8 | int ctrl_parse_get_num(vector vline, int i, long *num); |
| 9 | |
| 10 | typedef int (*ctrl_cmd_lookup)(void *data, vector vline, int *node_type, |
| 11 | void **node_data, int *i); |
Pau Espin Pedrol | 9584cd7 | 2021-01-05 18:36:17 +0100 | [diff] [blame] | 12 | typedef void (*ctrl_cmd_reply_cb)(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd, void *data); |
Holger Hans Peter Freyther | ea62a38 | 2014-03-23 16:25:16 +0100 | [diff] [blame] | 13 | |
Daniel Willmann | 782974b | 2011-07-22 17:55:42 +0200 | [diff] [blame] | 14 | struct ctrl_handle { |
| 15 | struct osmo_fd listen_fd; |
Harald Welte | c78e74e | 2014-08-21 14:34:32 +0200 | [diff] [blame] | 16 | void *data; |
Daniel Willmann | 782974b | 2011-07-22 17:55:42 +0200 | [diff] [blame] | 17 | |
Harald Welte | 528134b | 2014-08-21 15:13:08 +0200 | [diff] [blame] | 18 | ctrl_cmd_lookup lookup; |
Holger Hans Peter Freyther | ea62a38 | 2014-03-23 16:25:16 +0100 | [diff] [blame] | 19 | |
Daniel Willmann | 782974b | 2011-07-22 17:55:42 +0200 | [diff] [blame] | 20 | /* List of control connections */ |
| 21 | struct llist_head ccon_list; |
Pau Espin Pedrol | 9584cd7 | 2021-01-05 18:36:17 +0100 | [diff] [blame] | 22 | |
| 23 | /* User defined GET/SET REPLY handler. User can set cmd->defer to 1 in |
| 24 | order to own and keep the cmd pointer and free it after the function |
| 25 | returns. "data" param is the user data pointer supplied during |
| 26 | ctrl_handle allocation */ |
| 27 | ctrl_cmd_reply_cb reply_cb; |
Daniel Willmann | 782974b | 2011-07-22 17:55:42 +0200 | [diff] [blame] | 28 | }; |
| 29 | |
Holger Hans Peter Freyther | ea62a38 | 2014-03-23 16:25:16 +0100 | [diff] [blame] | 30 | |
Alexander Huemer | 4376bcc | 2011-09-06 00:09:48 +0200 | [diff] [blame] | 31 | int ctrl_cmd_send(struct osmo_wqueue *queue, struct ctrl_cmd *cmd); |
Max | bc067eb | 2016-08-04 11:07:08 +0200 | [diff] [blame] | 32 | int ctrl_cmd_send_trap(struct ctrl_handle *ctrl, const char *name, char *value); |
Harald Welte | 79c137c | 2017-04-16 19:08:49 +0200 | [diff] [blame] | 33 | struct ctrl_handle *ctrl_handle_alloc(void *ctx, void *data, ctrl_cmd_lookup lookup); |
Neels Hofmeyr | ea66852 | 2017-10-16 16:18:01 +0200 | [diff] [blame] | 34 | struct ctrl_handle *ctrl_handle_alloc2(void *ctx, void *data, |
| 35 | ctrl_cmd_lookup lookup, |
| 36 | unsigned int node_count); |
Harald Welte | ae2fcb2 | 2014-08-21 15:20:00 +0200 | [diff] [blame] | 37 | struct ctrl_handle *ctrl_interface_setup(void *data, uint16_t port, |
| 38 | ctrl_cmd_lookup lookup); |
Neels Hofmeyr | 4934309 | 2016-02-24 00:09:40 +0100 | [diff] [blame] | 39 | struct ctrl_handle *ctrl_interface_setup_dynip(void *data, |
| 40 | const char *bind_addr, |
| 41 | uint16_t port, |
| 42 | ctrl_cmd_lookup lookup); |
Neels Hofmeyr | ea66852 | 2017-10-16 16:18:01 +0200 | [diff] [blame] | 43 | struct ctrl_handle *ctrl_interface_setup_dynip2(void *data, |
| 44 | const char *bind_addr, |
| 45 | uint16_t port, |
| 46 | ctrl_cmd_lookup lookup, |
| 47 | unsigned int node_count); |
Max | fa9e05e | 2017-02-20 11:53:11 +0100 | [diff] [blame] | 48 | struct ctrl_connection *osmo_ctrl_conn_alloc(void *ctx, void *data); |
Harald Welte | 528134b | 2014-08-21 15:13:08 +0200 | [diff] [blame] | 49 | int ctrl_cmd_handle(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd, void *data); |
Harald Welte | f85861d | 2017-04-16 19:17:10 +0200 | [diff] [blame] | 50 | struct ctrl_cmd *ctrl_cmd_exec_from_string(struct ctrl_handle *ch, const char *cmdstr); |
Harald Welte | d6b1f85 | 2017-04-16 16:57:40 +0200 | [diff] [blame] | 51 | |
| 52 | int ctrl_lookup_register(ctrl_cmd_lookup lookup); |
Neels Hofmeyr | d53d216 | 2017-12-16 03:57:56 +0100 | [diff] [blame] | 53 | |
| 54 | int ctrl_handle_msg(struct ctrl_handle *ctrl, struct ctrl_connection *ccon, struct msgb *msg); |