1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * MGMTD Frontend Client Library api interfaces
4 * Copyright (C) 2021 Vmware, Inc.
5 * Pushpasis Sarkar <spushpasis@vmware.com>
8 #ifndef _FRR_MGMTD_FE_CLIENT_H_
9 #define _FRR_MGMTD_FE_CLIENT_H_
17 #include "mgmtd/mgmt_defines.h"
19 /***************************************************************
21 ***************************************************************/
24 * The server port MGMTD daemon is listening for Backend Client
28 #define MGMTD_FE_CLIENT_ERROR_STRING_MAX_LEN 32
30 #define MGMTD_FE_DEFAULT_CONN_RETRY_INTVL_SEC 5
32 #define MGMTD_FE_MSG_PROC_DELAY_USEC 10
33 #define MGMTD_FE_MAX_NUM_MSG_PROC 500
35 #define MGMTD_FE_MSG_WRITE_DELAY_MSEC 1
36 #define MGMTD_FE_MAX_NUM_MSG_WRITE 100
38 #define GMGD_FE_MAX_NUM_REQ_ITEMS 64
40 #define MGMTD_FE_MSG_MAX_LEN 9000
42 #define MGMTD_SOCKET_FE_SEND_BUF_SIZE 65535
43 #define MGMTD_SOCKET_FE_RECV_BUF_SIZE MGMTD_SOCKET_FE_SEND_BUF_SIZE
45 /***************************************************************
47 ***************************************************************/
49 #define MGMTD_SESSION_ID_NONE 0
51 #define MGMTD_CLIENT_ID_NONE 0
53 #define MGMTD_DS_NONE MGMTD__DATASTORE_ID__DS_NONE
54 #define MGMTD_DS_RUNNING MGMTD__DATASTORE_ID__RUNNING_DS
55 #define MGMTD_DS_CANDIDATE MGMTD__DATASTORE_ID__CANDIDATE_DS
56 #define MGMTD_DS_OPERATIONAL MGMTD__DATASTORE_ID__OPERATIONAL_DS
57 #define MGMTD_DS_MAX_ID MGMTD_DS_OPERATIONAL + 1
60 * All the client specific information this library needs to
61 * initialize itself, setup connection with MGMTD FrontEnd interface
62 * and carry on all required procedures appropriately.
64 * FrontEnd clients need to initialise a instance of this structure
65 * with appropriate data and pass it while calling the API
66 * to initialize the library (See mgmt_fe_client_lib_init for
69 struct mgmt_fe_client_params
{
70 char name
[MGMTD_CLIENT_NAME_MAX_LEN
];
72 unsigned long conn_retry_intvl_sec
;
74 void (*client_connect_notify
)(uintptr_t lib_hndl
,
78 void (*client_session_notify
)(uintptr_t lib_hndl
,
81 bool create
, bool success
,
83 uintptr_t user_session_ctx
);
85 void (*lock_ds_notify
)(uintptr_t lib_hndl
, uintptr_t user_data
,
86 uint64_t client_id
, uintptr_t session_id
,
87 uintptr_t user_session_ctx
, uint64_t req_id
,
88 bool lock_ds
, bool success
,
89 Mgmtd__DatastoreId ds_id
, char *errmsg_if_any
);
91 void (*set_config_notify
)(uintptr_t lib_hndl
, uintptr_t user_data
,
92 uint64_t client_id
, uintptr_t session_id
,
93 uintptr_t user_session_ctx
, uint64_t req_id
,
94 bool success
, Mgmtd__DatastoreId ds_id
,
97 void (*commit_config_notify
)(
98 uintptr_t lib_hndl
, uintptr_t user_data
, uint64_t client_id
,
99 uintptr_t session_id
, uintptr_t user_session_ctx
,
100 uint64_t req_id
, bool success
, Mgmtd__DatastoreId src_ds_id
,
101 Mgmtd__DatastoreId dst_ds_id
, bool validate_only
,
102 char *errmsg_if_any
);
104 enum mgmt_result (*get_data_notify
)(
105 uintptr_t lib_hndl
, uintptr_t user_data
, uint64_t client_id
,
106 uintptr_t session_id
, uintptr_t user_session_ctx
,
107 uint64_t req_id
, bool success
, Mgmtd__DatastoreId ds_id
,
108 Mgmtd__YangData
**yang_data
, size_t num_data
, int next_key
,
109 char *errmsg_if_any
);
111 enum mgmt_result (*data_notify
)(
112 uint64_t client_id
, uint64_t session_id
, uintptr_t user_data
,
113 uint64_t req_id
, Mgmtd__DatastoreId ds_id
,
114 Mgmtd__YangData
**yang_data
, size_t num_data
);
117 extern struct debug mgmt_dbg_fe_client
;
119 #define MGMTD_FE_CLIENT_DBG(fmt, ...) \
120 DEBUGD(&mgmt_dbg_fe_client, "FE-CLIENT: %s:" fmt, __func__, \
122 #define MGMTD_FE_CLIENT_ERR(fmt, ...) \
123 zlog_err("FE-CLIENT: %s: ERROR: " fmt, __func__, ##__VA_ARGS__)
124 #define MGMTD_DBG_FE_CLIENT_CHECK() \
125 DEBUG_MODE_CHECK(&mgmt_dbg_fe_client, DEBUG_MODE_ALL)
128 /***************************************************************
130 ***************************************************************/
133 * Initialize library and try connecting with MGMTD FrontEnd interface.
136 * Frontend client parameters.
142 * Frontend client lib handler (nothing but address of mgmt_fe_client_ctx)
144 extern uintptr_t mgmt_fe_client_lib_init(struct mgmt_fe_client_params
*params
,
145 struct event_loop
*master_thread
);
148 * Initialize library vty (adds debug support).
150 * This call should be added to your component when enabling other vty code to
151 * enable mgmtd client debugs. When adding, one needs to also add a their
152 * component in `xref2vtysh.py` as well.
154 extern void mgmt_fe_client_lib_vty_init(void);
157 * Print enabled debugging commands.
159 extern void mgmt_debug_fe_client_show_debug(struct vty
*vty
);
162 * Create a new Session for a Frontend Client connection.
165 * Client library handler.
168 * Unique identifier of client.
174 * MGMTD_SUCCESS on success, MGMTD_* otherwise.
176 extern enum mgmt_result
mgmt_fe_create_client_session(uintptr_t lib_hndl
,
181 * Delete an existing Session for a Frontend Client connection.
184 * Client library handler.
187 * Unique identifier of client.
190 * MGMTD_SUCCESS on success, MGMTD_* otherwise.
192 extern enum mgmt_result
mgmt_fe_destroy_client_session(uintptr_t lib_hndl
,
196 * Send UN/LOCK_DS_REQ to MGMTD for a specific Datastore DS.
199 * Client library handler.
208 * Datastore ID (Running/Candidate/Oper/Startup)
211 * TRUE for lock request, FALSE for unlock request.
214 * MGMTD_SUCCESS on success, MGMTD_* otherwise.
216 extern enum mgmt_result
mgmt_fe_lock_ds(uintptr_t lib_hndl
, uint64_t session_id
,
218 Mgmtd__DatastoreId ds_id
, bool lock_ds
);
221 * Send SET_CONFIG_REQ to MGMTD for one or more config data(s).
224 * Client library handler.
233 * Datastore ID (Running/Candidate/Oper/Startup)
236 * Details regarding the SET_CONFIG_REQ.
239 * Number of config requests.
242 * TRUE for implicit commit, FALSE otherwise.
245 * Destination Datastore ID where data needs to be set.
248 * MGMTD_SUCCESS on success, MGMTD_* otherwise.
250 extern enum mgmt_result
251 mgmt_fe_set_config_data(uintptr_t lib_hndl
, uint64_t session_id
,
252 uint64_t req_id
, Mgmtd__DatastoreId ds_id
,
253 Mgmtd__YangCfgDataReq
**config_req
, int num_req
,
254 bool implicit_commit
, Mgmtd__DatastoreId dst_ds_id
);
257 * Send SET_COMMMIT_REQ to MGMTD for one or more config data(s).
260 * Client library handler.
269 * Source datastore ID from where data needs to be committed from.
272 * Destination datastore ID where data needs to be committed to.
275 * TRUE if data needs to be validated only, FALSE otherwise.
278 * TRUE if need to restore Src DS back to Dest DS, FALSE otherwise.
281 * MGMTD_SUCCESS on success, MGMTD_* otherwise.
283 extern enum mgmt_result
284 mgmt_fe_commit_config_data(uintptr_t lib_hndl
, uint64_t session_id
,
285 uint64_t req_id
, Mgmtd__DatastoreId src_ds_id
,
286 Mgmtd__DatastoreId dst_ds_id
, bool validate_only
,
290 * Send GET_CONFIG_REQ to MGMTD for one or more config data item(s).
293 * Client library handler.
302 * Datastore ID (Running/Candidate)
305 * Get config requested.
308 * Number of get config requests.
311 * MGMTD_SUCCESS on success, MGMTD_* otherwise.
313 extern enum mgmt_result
314 mgmt_fe_get_config_data(uintptr_t lib_hndl
, uint64_t session_id
,
315 uint64_t req_id
, Mgmtd__DatastoreId ds_id
,
316 Mgmtd__YangGetDataReq
**data_req
, int num_reqs
);
319 * Send GET_DATA_REQ to MGMTD for one or more data item(s).
321 * Similar to get config request but supports getting data
322 * from operational ds aka backend clients directly.
324 extern enum mgmt_result
mgmt_fe_get_data(uintptr_t lib_hndl
,
325 uint64_t session_id
, uint64_t req_id
,
326 Mgmtd__DatastoreId ds_id
,
327 Mgmtd__YangGetDataReq
**data_req
,
331 * Send NOTIFY_REGISTER_REQ to MGMTD daemon.
334 * Client library handler.
346 * TRUE if registering, FALSE otherwise.
349 * Details of the YANG notification data.
352 * Number of data requests.
355 * MGMTD_SUCCESS on success, MGMTD_* otherwise.
357 extern enum mgmt_result
358 mgmt_fe_register_yang_notify(uintptr_t lib_hndl
, uint64_t session_id
,
359 uint64_t req_id
, Mgmtd__DatastoreId ds_id
,
360 bool register_req
, Mgmtd__YangDataXPath
**data_req
,
364 * Destroy library and cleanup everything.
366 extern void mgmt_fe_client_lib_destroy(void);
369 * Get count of open sessions.
371 extern uint
mgmt_fe_client_session_count(uintptr_t lib_hndl
);
377 #endif /* _FRR_MGMTD_FE_CLIENT_H_ */