telemetry: introduce backward compatibility
[dpdk.git] / lib / librte_telemetry / rte_telemetry_internal.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Intel Corporation
3  */
4
5 #include <rte_log.h>
6 #include <rte_tailq.h>
7 #include <rte_metrics.h>
8 #include <rte_metrics_telemetry.h>
9
10 #ifndef _RTE_TELEMETRY_INTERNAL_H_
11 #define _RTE_TELEMETRY_INTERNAL_H_
12
13 /* function types for the functions coming from metrics library */
14 typedef int32_t (*metrics_tel_reg_all_ethdev_t)(int *metrics_register_done,
15                 int *reg_index_list);
16
17 typedef int32_t (*metrics_tel_encode_json_format_t)(
18                 struct telemetry_encode_param *ep, char **json_buffer);
19
20 typedef int32_t (*metrics_tel_get_port_stats_ids_t)(
21                 struct telemetry_encode_param *ep);
22
23 typedef int32_t (*metrics_tel_get_ports_stats_json_t)(
24                 struct telemetry_encode_param *ep,
25                 int *reg_index, char **json_buffer);
26
27 typedef int32_t (*metrics_tel_extract_data_t)(struct telemetry_encode_param *ep,
28                 json_t *data);
29
30 struct metrics_functions {
31         metrics_tel_reg_all_ethdev_t reg_all_ethdev;
32         metrics_tel_encode_json_format_t encode_json_format;
33         metrics_tel_get_port_stats_ids_t get_port_stats_ids;
34         metrics_tel_get_ports_stats_json_t get_ports_stats_json;
35         metrics_tel_extract_data_t extract_data;
36 };
37 extern const struct metrics_functions *metrics_fns;
38
39 /* API for use by metrics libraries to provide the functions to use */
40 __rte_experimental
41 void rte_telemetry_set_metrics_fns(const struct metrics_functions *fns);
42
43 /* Logging Macros */
44 extern int telemetry_log_level;
45
46 #define TELEMETRY_LOG(level, fmt, args...) \
47         rte_log(RTE_LOG_ ##level, telemetry_log_level, "%s(): "fmt "\n", \
48                 __func__, ##args)
49
50 #define TELEMETRY_LOG_ERR(fmt, args...) \
51         TELEMETRY_LOG(ERR, fmt, ## args)
52
53 #define TELEMETRY_LOG_WARN(fmt, args...) \
54         TELEMETRY_LOG(WARNING, fmt, ## args)
55
56 #define TELEMETRY_LOG_INFO(fmt, args...) \
57         TELEMETRY_LOG(INFO, fmt, ## args)
58
59 #define MAX_METRICS 256
60
61 typedef struct telemetry_client {
62         char *file_path;
63         int fd;
64         TAILQ_ENTRY(telemetry_client) client_list;
65 } telemetry_client;
66
67 typedef struct telemetry_impl {
68         int accept_fd;
69         int server_fd;
70         pthread_t thread_id;
71         int thread_status;
72         uint32_t socket_id;
73         int reg_index[RTE_MAX_ETHPORTS];
74         int metrics_register_done;
75         TAILQ_HEAD(, telemetry_client) client_list_head;
76         struct telemetry_client *request_client;
77         int register_fail_count;
78 } telemetry_impl;
79
80 enum rte_telemetry_parser_actions {
81         ACTION_GET = 0,
82         ACTION_DELETE = 2
83 };
84
85 int32_t
86 rte_telemetry_parse_client_message(struct telemetry_impl *telemetry, char *buf);
87
88 int32_t
89 rte_telemetry_send_error_response(struct telemetry_impl *telemetry,
90         int error_type);
91
92 int32_t
93 rte_telemetry_register_client(struct telemetry_impl *telemetry,
94         const char *client_path);
95
96 int32_t
97 rte_telemetry_unregister_client(struct telemetry_impl *telemetry,
98         const char *client_path);
99
100 int32_t
101 rte_telemetry_send_ports_stats_values(struct telemetry_encode_param *ep,
102         struct telemetry_impl *telemetry);
103
104 int32_t
105 rte_telemetry_socket_messaging_testing(int index, int socket);
106
107 int32_t
108 rte_telemetry_send_global_stats_values(struct telemetry_encode_param *ep,
109         struct telemetry_impl *telemetry);
110
111 int32_t
112 rte_telemetry_parser_test(struct telemetry_impl *telemetry);
113
114 #endif