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 */