blob: 98cd100f1ac406bcb0158daa0be046488411e6f7 [file] [log] [blame]
Neels Hofmeyr17518fe2017-06-20 04:35:06 +02001/*! \file control_if.h */
2
Harald Welte5ddd4352014-08-21 15:42:44 +02003#pragma once
Alexander Huemer4376bcc2011-09-06 00:09:48 +02004
5#include <osmocom/core/write_queue.h>
Harald Welte1238cc62014-08-20 19:50:04 +02006#include <osmocom/ctrl/control_cmd.h>
7
Harald Welte528134b2014-08-21 15:13:08 +02008int ctrl_parse_get_num(vector vline, int i, long *num);
9
10typedef int (*ctrl_cmd_lookup)(void *data, vector vline, int *node_type,
11 void **node_data, int *i);
Pau Espin Pedrol9584cd72021-01-05 18:36:17 +010012typedef void (*ctrl_cmd_reply_cb)(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd, void *data);
Holger Hans Peter Freytherea62a382014-03-23 16:25:16 +010013
Daniel Willmann782974b2011-07-22 17:55:42 +020014struct ctrl_handle {
15 struct osmo_fd listen_fd;
Harald Weltec78e74e2014-08-21 14:34:32 +020016 void *data;
Daniel Willmann782974b2011-07-22 17:55:42 +020017
Harald Welte528134b2014-08-21 15:13:08 +020018 ctrl_cmd_lookup lookup;
Holger Hans Peter Freytherea62a382014-03-23 16:25:16 +010019
Daniel Willmann782974b2011-07-22 17:55:42 +020020 /* List of control connections */
21 struct llist_head ccon_list;
Pau Espin Pedrol9584cd72021-01-05 18:36:17 +010022
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 Willmann782974b2011-07-22 17:55:42 +020028};
29
Holger Hans Peter Freytherea62a382014-03-23 16:25:16 +010030
Alexander Huemer4376bcc2011-09-06 00:09:48 +020031int ctrl_cmd_send(struct osmo_wqueue *queue, struct ctrl_cmd *cmd);
Maxbc067eb2016-08-04 11:07:08 +020032int ctrl_cmd_send_trap(struct ctrl_handle *ctrl, const char *name, char *value);
Harald Welte79c137c2017-04-16 19:08:49 +020033struct ctrl_handle *ctrl_handle_alloc(void *ctx, void *data, ctrl_cmd_lookup lookup);
Neels Hofmeyrea668522017-10-16 16:18:01 +020034struct ctrl_handle *ctrl_handle_alloc2(void *ctx, void *data,
35 ctrl_cmd_lookup lookup,
36 unsigned int node_count);
Harald Welteae2fcb22014-08-21 15:20:00 +020037struct ctrl_handle *ctrl_interface_setup(void *data, uint16_t port,
38 ctrl_cmd_lookup lookup);
Max3f79ce82022-12-03 17:59:19 +030039struct ctrl_handle *ctrl_interface_setup2(void *data, uint16_t default_port, ctrl_cmd_lookup lookup,
40 unsigned int node_count);
Neels Hofmeyr49343092016-02-24 00:09:40 +010041struct ctrl_handle *ctrl_interface_setup_dynip(void *data,
42 const char *bind_addr,
43 uint16_t port,
Max3f79ce82022-12-03 17:59:19 +030044 ctrl_cmd_lookup lookup) OSMO_DEPRECATED_OUTSIDE_LIBOSMOCORE;
Neels Hofmeyrea668522017-10-16 16:18:01 +020045struct ctrl_handle *ctrl_interface_setup_dynip2(void *data,
46 const char *bind_addr,
47 uint16_t port,
48 ctrl_cmd_lookup lookup,
Max3f79ce82022-12-03 17:59:19 +030049 unsigned int node_count) OSMO_DEPRECATED_OUTSIDE_LIBOSMOCORE;
Maxfa9e05e2017-02-20 11:53:11 +010050struct ctrl_connection *osmo_ctrl_conn_alloc(void *ctx, void *data);
Harald Welte528134b2014-08-21 15:13:08 +020051int ctrl_cmd_handle(struct ctrl_handle *ctrl, struct ctrl_cmd *cmd, void *data);
Harald Weltef85861d2017-04-16 19:17:10 +020052struct ctrl_cmd *ctrl_cmd_exec_from_string(struct ctrl_handle *ch, const char *cmdstr);
Harald Welted6b1f852017-04-16 16:57:40 +020053
54int ctrl_lookup_register(ctrl_cmd_lookup lookup);
Neels Hofmeyrd53d2162017-12-16 03:57:56 +010055int ctrl_handle_msg(struct ctrl_handle *ctrl, struct ctrl_connection *ccon, struct msgb *msg);