1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
14 */
15
16 #ifndef _KRRP_SERVER_H
17 #define _KRRP_SERVER_H
18
19 #include <sys/ksocket.h>
20 #include <inet/ip.h>
21
22 #include <krrp_error.h>
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 #ifndef INET_ADDRSTRLEN
29 #define INET_ADDRSTRLEN 16
30 #endif
31
32 typedef enum {
33 KRRP_SRVS_RECONFIGURE = 1,
34 KRRP_SRVS_ACTIVE,
35 KRRP_SRVS_IN_ERROR,
36 } krrp_server_state_t;
37
38 typedef void (krrp_new_ks_cb_t)(ksocket_t);
39 typedef void (krrp_svr_error_cb_t)(krrp_error_t *);
40
41 typedef struct krrp_server_s {
42 krrp_server_state_t state;
43 kt_did_t t_did;
44 boolean_t running;
45 boolean_t without_event;
46 kmutex_t mtx;
47 kcondvar_t cv;
48 ksocket_t listening_ks;
49 char listening_addr[INET_ADDRSTRLEN];
50 int listening_port;
51 krrp_new_ks_cb_t *new_ks_cb;
52 krrp_svr_error_cb_t *on_error_cb;
53 krrp_error_t error;
54 } krrp_server_t;
55
56 void krrp_server_create(krrp_server_t **result_server,
57 krrp_new_ks_cb_t *new_ks_cb, krrp_svr_error_cb_t *on_error_cb);
58 void krrp_server_destroy(krrp_server_t *server);
59 int krrp_server_set_config(krrp_server_t *server, nvlist_t *params,
60 krrp_error_t *error);
61 int krrp_server_get_config(krrp_server_t *server, nvlist_t *result,
62 krrp_error_t *error);
63 boolean_t krrp_server_is_running(krrp_server_t *server);
64
65 #ifdef __cplusplus
66 }
67 #endif
68
69 #endif /* _KRRP_SERVER_H */