108 void *sq_rdata; /* Read data pointer */
109 size_t sq_rsize; /* Read data size */
110 void *sq_wdata; /* Write data pointer */
111 size_t sq_wsize; /* Write data size */
112 hrtime_t sq_acttime; /* Last I/O activity time */
113 };
114
115 typedef enum svp_conn_state {
116 SVP_CS_ERROR = 0x00,
117 SVP_CS_INITIAL = 0x01,
118 SVP_CS_CONNECTING = 0x02,
119 SVP_CS_BACKOFF = 0x03,
120 SVP_CS_ACTIVE = 0x04,
121 SVP_CS_WINDDOWN = 0x05
122 } svp_conn_state_t;
123
124 typedef enum svp_conn_error {
125 SVP_CE_NONE = 0x00,
126 SVP_CE_ASSOCIATE = 0x01,
127 SVP_CE_NOPOLLOUT = 0x02,
128 SVP_CE_SOCKET = 0x03
129 } svp_conn_error_t;
130
131 typedef enum svp_conn_flags {
132 SVP_CF_ADDED = 0x01,
133 SVP_CF_DEGRADED = 0x02,
134 SVP_CF_REAP = 0x04,
135 SVP_CF_TEARDOWN = 0x08,
136 SVP_CF_UFLAG = 0x0c,
137 SVP_CF_USER = 0x10
138 } svp_conn_flags_t;
139
140 typedef struct svp_conn_out {
141 svp_query_t *sco_query;
142 size_t sco_offset;
143 } svp_conn_out_t;
144
145 typedef struct svp_conn_in {
146 svp_query_t *sci_query;
147 svp_req_t sci_req;
148 size_t sci_offset;
149 } svp_conn_in_t;
150
151 struct svp_conn {
152 svp_remote_t *sc_remote; /* RO */
153 struct in6_addr sc_addr; /* RO */
154 list_node_t sc_rlist; /* svp_remote_t`sr_lock */
155 mutex_t sc_lock;
156 svp_event_t sc_event;
157 svp_timer_t sc_btimer;
158 svp_timer_t sc_qtimer;
159 int sc_socket;
160 uint_t sc_gen;
161 uint_t sc_nbackoff;
162 svp_conn_flags_t sc_flags;
163 svp_conn_state_t sc_cstate;
164 svp_conn_error_t sc_error;
165 int sc_errno;
166 list_t sc_queries;
167 svp_conn_out_t sc_output;
168 svp_conn_in_t sc_input;
169 };
170
171 typedef enum svp_remote_state {
172 SVP_RS_LOOKUP_SCHEDULED = 0x01, /* On the DNS Queue */
173 SVP_RS_LOOKUP_INPROGRESS = 0x02, /* Doing a DNS lookup */
174 SVP_RS_LOOKUP_VALID = 0x04 /* addrinfo valid */
175 } svp_remote_state_t;
176
177 /*
178 * These series of bit-based flags should be ordered such that the most severe
179 * is first. We only can set one message that user land can see, so if more than
180 * one is set we want to make sure that one is there.
181 */
182 typedef enum svp_degrade_state {
183 SVP_RD_DNS_FAIL = 0x01, /* DNS Resolution Failure */
184 SVP_RD_REMOTE_FAIL = 0x02, /* cannot reach any remote peers */
185 SVP_RD_ALL = 0x03 /* Only suitable for restore */
186 } svp_degrade_state_t;
187
188 typedef enum svp_shootdown_flags {
|
108 void *sq_rdata; /* Read data pointer */
109 size_t sq_rsize; /* Read data size */
110 void *sq_wdata; /* Write data pointer */
111 size_t sq_wsize; /* Write data size */
112 hrtime_t sq_acttime; /* Last I/O activity time */
113 };
114
115 typedef enum svp_conn_state {
116 SVP_CS_ERROR = 0x00,
117 SVP_CS_INITIAL = 0x01,
118 SVP_CS_CONNECTING = 0x02,
119 SVP_CS_BACKOFF = 0x03,
120 SVP_CS_ACTIVE = 0x04,
121 SVP_CS_WINDDOWN = 0x05
122 } svp_conn_state_t;
123
124 typedef enum svp_conn_error {
125 SVP_CE_NONE = 0x00,
126 SVP_CE_ASSOCIATE = 0x01,
127 SVP_CE_NOPOLLOUT = 0x02,
128 SVP_CE_SOCKET = 0x03,
129 SVP_CE_VERSION_PONG = 0x04
130 } svp_conn_error_t;
131
132 typedef enum svp_conn_flags {
133 SVP_CF_ADDED = 0x01,
134 SVP_CF_DEGRADED = 0x02,
135 SVP_CF_REAP = 0x04,
136 SVP_CF_TEARDOWN = 0x08,
137 SVP_CF_UFLAG = 0x0c,
138 SVP_CF_USER = 0x10
139 } svp_conn_flags_t;
140
141 typedef struct svp_conn_out {
142 svp_query_t *sco_query;
143 size_t sco_offset;
144 } svp_conn_out_t;
145
146 typedef struct svp_conn_in {
147 svp_query_t *sci_query;
148 svp_req_t sci_req;
149 size_t sci_offset;
150 } svp_conn_in_t;
151
152 struct svp_conn {
153 svp_remote_t *sc_remote; /* RO */
154 struct in6_addr sc_addr; /* RO */
155 list_node_t sc_rlist; /* svp_remote_t`sr_lock */
156 mutex_t sc_lock;
157 svp_event_t sc_event;
158 svp_timer_t sc_btimer;
159 svp_timer_t sc_qtimer;
160 int sc_socket;
161 uint_t sc_gen;
162 uint_t sc_nbackoff;
163 svp_conn_flags_t sc_flags;
164 svp_conn_state_t sc_cstate;
165 svp_conn_error_t sc_error;
166 int sc_errno;
167 list_t sc_queries;
168 svp_conn_out_t sc_output;
169 svp_conn_in_t sc_input;
170 uint_t sc_version;
171 };
172
173 typedef enum svp_remote_state {
174 SVP_RS_LOOKUP_SCHEDULED = 0x01, /* On the DNS Queue */
175 SVP_RS_LOOKUP_INPROGRESS = 0x02, /* Doing a DNS lookup */
176 SVP_RS_LOOKUP_VALID = 0x04 /* addrinfo valid */
177 } svp_remote_state_t;
178
179 /*
180 * These series of bit-based flags should be ordered such that the most severe
181 * is first. We only can set one message that user land can see, so if more than
182 * one is set we want to make sure that one is there.
183 */
184 typedef enum svp_degrade_state {
185 SVP_RD_DNS_FAIL = 0x01, /* DNS Resolution Failure */
186 SVP_RD_REMOTE_FAIL = 0x02, /* cannot reach any remote peers */
187 SVP_RD_ALL = 0x03 /* Only suitable for restore */
188 } svp_degrade_state_t;
189
190 typedef enum svp_shootdown_flags {
|