CNDP  22.08.0
uds.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2021-2022 Intel Corporation
3  */
4 
11 #ifndef _UDS_H_
12 #define _UDS_H_
13 
14 #include <stdint.h>
15 #include <sys/socket.h>
16 #include <sys/un.h> // for sockaddr_un
17 
18 #include "cne_common.h" // for CNDP_API
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #define UDS_MAX_CMD_LEN 56
25 #define UDS_MAX_GRP_NAME_LEN 32
26 
27 typedef struct uds_group {
28  char name[UDS_MAX_GRP_NAME_LEN];
29  void *priv;
30 } uds_group_t;
31 
35 #define UDS_NO_OUTPUT -2
36 
37 struct uds_client;
38 
39 typedef struct uds_client uds_client_t;
40 typedef struct uds_client {
41  char *buffer;
42  const char *cmd;
43  const char *params;
44  const char *params2;
45  int buf_len;
46  int used;
47  int s;
48  struct uds_info *info;
49  struct cmsghdr *cmsg;
50  const struct uds_group *group;
51  int socket_client;
52 } uds_client_t;
53 
54 typedef struct uds_info {
55  volatile int running;
56  int sock;
57  struct sockaddr_un sun;
58  void *priv;
59  int xsk_uds_state;
60  int xsk_map_fd;
61 } uds_info_t;
62 
63 enum {
64  UDS_START = 0,
74 };
75 
76 #define UDS_CONNECT_MSG "/connect"
77 #define UDS_HOST_OK_MSG "/host_ok"
78 #define UDS_HOST_NAK_MSG "/host_nak"
79 #define UDS_XSK_MAP_FD_MSG "/xsk_map_fd"
80 #define UDS_XSK_SOCKET_MSG "/xsk_socket"
81 #define UDS_FD_ACK_MSG "/fd_ack"
82 #define UDS_FD_NAK_MSG "/fd_nak"
83 #define UDS_FIN_MSG "/fin"
84 #define UDS_FIN_ACK_MSG "/fin_ack"
85 #define UDS_CFG_BUSY_POLL_MSG "/config_busy_poll"
86 #define UDS_CFG_BUSY_POLL_ACK "/config_busy_poll_ack"
87 #define UDS_CFG_BUSY_POLL_NAK "/config_busy_poll_nak"
88 
94 typedef int (*uds_cb)(uds_client_t *client, const char *cmd, const char *params);
95 
108 CNDP_API int uds_register(const uds_group_t *grp, const char *cmd, uds_cb fn);
109 
124 CNDP_API uds_info_t *uds_create(const char *runtime_dir, const char *uds_name, const char **err_str,
125  void *priv);
126 
133 CNDP_API uds_info_t *uds_get_default(void *priv);
134 
148 CNDP_API const uds_group_t *uds_create_group(const uds_info_t *info, const char *group, void *priv);
149 
158 CNDP_API int uds_destroy_group(const uds_group_t *group);
159 
171 CNDP_API const uds_group_t *uds_get_group_by_name(const uds_info_t *info, const char *name);
172 
185 CNDP_API uds_info_t *uds_connect(const char *uds_name, const char **err_str, void *priv);
186 
193 CNDP_API void uds_destroy(uds_info_t *info);
194 
207 CNDP_API int uds_append(uds_client_t *client, const char *format, ...);
208 
217 CNDP_API const char *uds_cmd(uds_client_t *client);
218 
227 CNDP_API const char *uds_params(uds_client_t *client);
228 
229 #ifdef __cplusplus
230 }
231 #endif
232 
233 #endif /* _UDS_H_ */
CNDP_API uds_info_t * uds_create(const char *runtime_dir, const char *uds_name, const char **err_str, void *priv)
CNDP_API const char * uds_cmd(uds_client_t *client)
struct uds_group uds_group_t
CNDP_API uds_info_t * uds_get_default(void *priv)
CNDP_API const char * uds_params(uds_client_t *client)
CNDP_API int uds_register(const uds_group_t *grp, const char *cmd, uds_cb fn)
CNDP_API const uds_group_t * uds_get_group_by_name(const uds_info_t *info, const char *name)
CNDP_API const uds_group_t * uds_create_group(const uds_info_t *info, const char *group, void *priv)
CNDP_API void uds_destroy(uds_info_t *info)
@ UDS_BUSY_POLL_NAK
Definition: uds.h:73
@ UDS_FIN
Definition: uds.h:69
@ UDS_FD_NAK
Definition: uds.h:68
@ UDS_HOST_NAK
Definition: uds.h:70
@ UDS_BUSY_POLL_ACK
Definition: uds.h:72
@ UDS_HOST_ERR
Definition: uds.h:71
@ UDS_HOST_OK
Definition: uds.h:66
@ UDS_START
Definition: uds.h:64
@ UDS_CONNECTED
Definition: uds.h:65
@ UDS_GOT_FD
Definition: uds.h:67
CNDP_API int uds_append(uds_client_t *client, const char *format,...)
CNDP_API int uds_destroy_group(const uds_group_t *group)
int(* uds_cb)(uds_client_t *client, const char *cmd, const char *params)
Definition: uds.h:94
CNDP_API uds_info_t * uds_connect(const char *uds_name, const char **err_str, void *priv)