|
| 1 | +/* |
| 2 | + * Copyright (c) 2020 6WIND S.A. |
| 3 | + * SPDX-License-Identifier: BSD-3-Clause |
| 4 | + */ |
| 5 | + |
| 6 | +typedef enum sr_error_e { |
| 7 | + SR_ERR_OK, |
| 8 | + SR_ERR_INVAL_ARG, |
| 9 | + SR_ERR_LY, |
| 10 | + SR_ERR_SYS, |
| 11 | + SR_ERR_NOMEM, |
| 12 | + SR_ERR_NOT_FOUND, |
| 13 | + SR_ERR_EXISTS, |
| 14 | + SR_ERR_INTERNAL, |
| 15 | + SR_ERR_UNSUPPORTED, |
| 16 | + SR_ERR_VALIDATION_FAILED, |
| 17 | + SR_ERR_OPERATION_FAILED, |
| 18 | + SR_ERR_UNAUTHORIZED, |
| 19 | + SR_ERR_LOCKED, |
| 20 | + SR_ERR_TIME_OUT, |
| 21 | + SR_ERR_CALLBACK_FAILED, |
| 22 | + SR_ERR_CALLBACK_SHELVE, |
| 23 | + ... |
| 24 | +} sr_error_t; |
| 25 | + |
| 26 | +const char *sr_strerror(int); |
| 27 | + |
| 28 | +typedef enum { |
| 29 | + SR_LL_NONE, |
| 30 | + SR_LL_ERR, |
| 31 | + SR_LL_WRN, |
| 32 | + SR_LL_INF, |
| 33 | + SR_LL_DBG, |
| 34 | + ... |
| 35 | +} sr_log_level_t; |
| 36 | + |
| 37 | +extern "Python" void srpy_log_cb(sr_log_level_t, const char *); |
| 38 | +void sr_log_set_cb(void (*)(sr_log_level_t, const char *)); |
| 39 | + |
| 40 | +typedef struct sr_conn_ctx_s sr_conn_ctx_t; |
| 41 | +typedef struct sr_session_ctx_s sr_session_ctx_t; |
| 42 | +typedef enum sr_conn_flag_e { |
| 43 | + SR_CONN_CACHE_RUNNING, |
| 44 | + SR_CONN_NO_SCHED_CHANGES, |
| 45 | + SR_CONN_ERR_ON_SCHED_FAIL, |
| 46 | + ... |
| 47 | +} sr_conn_flag_t; |
| 48 | +typedef uint32_t sr_conn_options_t; |
| 49 | +typedef enum sr_datastore_e { |
| 50 | + SR_DS_STARTUP, |
| 51 | + SR_DS_RUNNING, |
| 52 | + SR_DS_CANDIDATE, |
| 53 | + SR_DS_OPERATIONAL, |
| 54 | + ... |
| 55 | +} sr_datastore_t; |
| 56 | +typedef struct sr_error_info_msg_s { |
| 57 | + char *message; |
| 58 | + char *xpath; |
| 59 | +} sr_error_info_msg_t; |
| 60 | +typedef struct sr_error_info_s { |
| 61 | + sr_error_t err_code; |
| 62 | + sr_error_info_msg_t *err; |
| 63 | + size_t err_count; |
| 64 | +} sr_error_info_t; |
| 65 | + |
| 66 | +/* forward declarations from libyang */ |
| 67 | +struct ly_ctx; |
| 68 | +struct lyd_node; |
| 69 | + |
| 70 | +int sr_connect(const sr_conn_options_t, sr_conn_ctx_t **); |
| 71 | +int sr_disconnect(sr_conn_ctx_t *); |
| 72 | +const struct ly_ctx *sr_get_context(sr_conn_ctx_t *); |
| 73 | +int sr_install_module(sr_conn_ctx_t *, const char *, const char *, const char **, int); |
| 74 | +int sr_remove_module(sr_conn_ctx_t *, const char *); |
| 75 | +int sr_update_module(sr_conn_ctx_t *, const char *, const char *); |
| 76 | +int sr_enable_module_feature(sr_conn_ctx_t *, const char *, const char *); |
| 77 | +int sr_disable_module_feature(sr_conn_ctx_t *, const char *, const char *); |
| 78 | + |
| 79 | +int sr_session_start(sr_conn_ctx_t *, const sr_datastore_t, sr_session_ctx_t **); |
| 80 | +int sr_session_stop(sr_session_ctx_t *); |
| 81 | +int sr_session_switch_ds(sr_session_ctx_t *, sr_datastore_t); |
| 82 | +sr_datastore_t sr_session_get_ds(sr_session_ctx_t *); |
| 83 | +sr_conn_ctx_t *sr_session_get_connection(sr_session_ctx_t *); |
| 84 | +int sr_get_error(sr_session_ctx_t *, const sr_error_info_t **); |
| 85 | +int sr_set_error(sr_session_ctx_t *, const char *, const char *, ...); |
| 86 | + |
| 87 | +typedef enum sr_type_e { |
| 88 | + SR_UNKNOWN_T, |
| 89 | + SR_LIST_T, |
| 90 | + SR_CONTAINER_T, |
| 91 | + SR_CONTAINER_PRESENCE_T, |
| 92 | + SR_LEAF_EMPTY_T, |
| 93 | + SR_BINARY_T, |
| 94 | + SR_BITS_T, |
| 95 | + SR_BOOL_T, |
| 96 | + SR_DECIMAL64_T, |
| 97 | + SR_ENUM_T, |
| 98 | + SR_IDENTITYREF_T, |
| 99 | + SR_INSTANCEID_T, |
| 100 | + SR_INT8_T, |
| 101 | + SR_INT16_T, |
| 102 | + SR_INT32_T, |
| 103 | + SR_INT64_T, |
| 104 | + SR_STRING_T, |
| 105 | + SR_UINT8_T, |
| 106 | + SR_UINT16_T, |
| 107 | + SR_UINT32_T, |
| 108 | + SR_UINT64_T, |
| 109 | + SR_ANYXML_T, |
| 110 | + SR_ANYDATA_T, |
| 111 | + ... |
| 112 | +} sr_type_t; |
| 113 | +typedef union sr_data_u { |
| 114 | + char *binary_val; |
| 115 | + char *bits_val; |
| 116 | + bool bool_val; |
| 117 | + double decimal64_val; |
| 118 | + char *enum_val; |
| 119 | + char *identityref_val; |
| 120 | + char *instanceid_val; |
| 121 | + int8_t int8_val; |
| 122 | + int16_t int16_val; |
| 123 | + int32_t int32_val; |
| 124 | + int64_t int64_val; |
| 125 | + char *string_val; |
| 126 | + uint8_t uint8_val; |
| 127 | + uint16_t uint16_val; |
| 128 | + uint32_t uint32_val; |
| 129 | + uint64_t uint64_val; |
| 130 | + char *anyxml_val; |
| 131 | + char *anydata_val; |
| 132 | + ...; |
| 133 | +} sr_data_t; |
| 134 | +typedef struct sr_val_s { |
| 135 | + char *xpath; |
| 136 | + sr_type_t type; |
| 137 | + sr_data_t data; |
| 138 | + ...; |
| 139 | +} sr_val_t; |
| 140 | +typedef enum sr_edit_flag_e { |
| 141 | + SR_EDIT_NON_RECURSIVE, |
| 142 | + SR_EDIT_STRICT, |
| 143 | + SR_EDIT_ISOLATE, |
| 144 | + ... |
| 145 | +} sr_edit_flag_t; |
| 146 | +typedef uint32_t sr_edit_options_t; |
| 147 | +typedef enum sr_get_oper_flag_e { |
| 148 | + SR_OPER_NO_STATE, |
| 149 | + SR_OPER_NO_CONFIG, |
| 150 | + SR_OPER_NO_SUBS, |
| 151 | + SR_OPER_NO_STORED, |
| 152 | + ... |
| 153 | +} sr_get_oper_flag_t; |
| 154 | +typedef uint32_t sr_get_oper_options_t; |
| 155 | + |
| 156 | +void sr_free_val(sr_val_t *); |
| 157 | +void sr_free_values(sr_val_t *, size_t); |
| 158 | + |
| 159 | +int sr_get_item(sr_session_ctx_t *, const char *, uint32_t, sr_val_t **); |
| 160 | +int sr_get_items(sr_session_ctx_t *, const char *, uint32_t, |
| 161 | + const sr_get_oper_options_t, sr_val_t **, size_t *); |
| 162 | +int sr_get_data(sr_session_ctx_t *, const char *, uint32_t, uint32_t, |
| 163 | + const sr_get_oper_options_t, struct lyd_node **); |
| 164 | +int sr_rpc_send_tree( |
| 165 | + sr_session_ctx_t *, struct lyd_node *, uint32_t, struct lyd_node **); |
| 166 | + |
| 167 | +int sr_set_item_str(sr_session_ctx_t *, const char *, const char *, const char *, const sr_edit_options_t); |
| 168 | +int sr_delete_item(sr_session_ctx_t *, const char *, const sr_edit_options_t); |
| 169 | +int sr_edit_batch(sr_session_ctx_t *, const struct lyd_node *, const char *); |
| 170 | +int sr_replace_config(sr_session_ctx_t *, const char *, struct lyd_node *, uint32_t, int); |
| 171 | +int sr_validate(sr_session_ctx_t *, const char *, uint32_t); |
| 172 | +int sr_apply_changes(sr_session_ctx_t *, uint32_t, int); |
| 173 | +int sr_discard_changes(sr_session_ctx_t *); |
| 174 | + |
| 175 | +typedef enum sr_subscr_flag_e { |
| 176 | + SR_SUBSCR_CTX_REUSE, |
| 177 | + SR_SUBSCR_NO_THREAD, |
| 178 | + SR_SUBSCR_PASSIVE, |
| 179 | + SR_SUBSCR_DONE_ONLY, |
| 180 | + SR_SUBSCR_ENABLED, |
| 181 | + SR_SUBSCR_UPDATE, |
| 182 | + SR_SUBSCR_UNLOCKED, |
| 183 | + ... |
| 184 | +} sr_subscr_flag_t; |
| 185 | + |
| 186 | +typedef struct sr_subscription_ctx_s sr_subscription_ctx_t; |
| 187 | +typedef uint32_t sr_subscr_options_t; |
| 188 | + |
| 189 | +int sr_get_event_pipe(sr_subscription_ctx_t *, int *); |
| 190 | +typedef int... time_t; |
| 191 | +int sr_process_events(sr_subscription_ctx_t *, sr_session_ctx_t *, time_t *); |
| 192 | +int sr_unsubscribe(sr_subscription_ctx_t *); |
| 193 | + |
| 194 | +typedef enum sr_event_e { |
| 195 | + SR_EV_UPDATE, |
| 196 | + SR_EV_CHANGE, |
| 197 | + SR_EV_DONE, |
| 198 | + SR_EV_ABORT, |
| 199 | + SR_EV_ENABLED, |
| 200 | + SR_EV_RPC, |
| 201 | + ... |
| 202 | +} sr_event_t; |
| 203 | +typedef enum sr_change_oper_e { |
| 204 | + SR_OP_CREATED, |
| 205 | + SR_OP_MODIFIED, |
| 206 | + SR_OP_DELETED, |
| 207 | + SR_OP_MOVED, |
| 208 | + ... |
| 209 | +} sr_change_oper_t; |
| 210 | +typedef struct sr_change_iter_s sr_change_iter_t; |
| 211 | +int sr_get_changes_iter(sr_session_ctx_t *, const char *, sr_change_iter_t **); |
| 212 | +int sr_get_change_next( |
| 213 | + sr_session_ctx_t *, sr_change_iter_t *, sr_change_oper_t *, |
| 214 | + sr_val_t **, sr_val_t **); |
| 215 | +int sr_get_change_tree_next( |
| 216 | + sr_session_ctx_t *, sr_change_iter_t *, sr_change_oper_t *, |
| 217 | + const struct lyd_node **, const char **prev_val, |
| 218 | + const char **prev_list, bool *prev_dflt); |
| 219 | +void sr_free_change_iter(sr_change_iter_t *); |
| 220 | + |
| 221 | + |
| 222 | +extern "Python" int srpy_module_change_cb( |
| 223 | + sr_session_ctx_t *, const char *module, const char *xpath, |
| 224 | + sr_event_t, uint32_t req_id, void *priv); |
| 225 | +int sr_module_change_subscribe( |
| 226 | + sr_session_ctx_t *, const char *module, const char *xpath, |
| 227 | + int (*)(sr_session_ctx_t *, const char *, const char *, sr_event_t, uint32_t, void *), |
| 228 | + void *priv, uint32_t priority, sr_subscr_options_t, sr_subscription_ctx_t **); |
| 229 | + |
| 230 | +extern "Python" int srpy_rpc_tree_cb( |
| 231 | + sr_session_ctx_t *, const char *, const struct lyd_node *input, |
| 232 | + sr_event_t, uint32_t req_id, struct lyd_node *output, void *priv); |
| 233 | +int sr_rpc_subscribe_tree( |
| 234 | + sr_session_ctx_t *, const char *xpath, |
| 235 | + int (*)(sr_session_ctx_t *, const char *, const struct lyd_node *, sr_event_t, uint32_t, struct lyd_node *, void *), |
| 236 | + void *priv, uint32_t priority, sr_subscr_options_t, sr_subscription_ctx_t **); |
| 237 | + |
| 238 | +extern "Python" int srpy_oper_data_cb( |
| 239 | + sr_session_ctx_t *, const char *module, const char *xpath, |
| 240 | + const char *req_xpath, uint32_t req_id, struct lyd_node **, void *priv); |
| 241 | +int sr_oper_get_items_subscribe( |
| 242 | + sr_session_ctx_t *, const char *module, const char *xpath, |
| 243 | + int (*)(sr_session_ctx_t *, const char *, const char *, const char *, uint32_t, struct lyd_node **, void *), |
| 244 | + void *priv, sr_subscr_options_t, sr_subscription_ctx_t **); |
0 commit comments