summaryrefslogtreecommitdiffstats
path: root/src/kernel/dnbd3_main.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/dnbd3_main.h')
-rw-r--r--src/kernel/dnbd3_main.h25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/kernel/dnbd3_main.h b/src/kernel/dnbd3_main.h
index a69d588..42b9f58 100644
--- a/src/kernel/dnbd3_main.h
+++ b/src/kernel/dnbd3_main.h
@@ -37,11 +37,11 @@
extern int major;
typedef struct {
- dnbd3_host_t host;
- unsigned long rtts[4]; // Last four round trip time measurements in µs
+ unsigned long rtts[4]; // Last four round trip time measurements in µs
uint16_t protocol_version; // dnbd3 protocol version of this server
- uint8_t failures; // How many times the server was unreachable
-} dnbd3_server_t;
+ uint8_t failures; // How many times the server was unreachable
+ struct sockaddr_storage host; // Address of server
+} dnbd3_alt_server_t;
typedef struct {
// block
@@ -57,10 +57,13 @@ typedef struct {
struct mutex alt_servers_lock;
char *imgname;
struct socket *sock;
- dnbd3_server_t cur_server;
- unsigned long cur_rtt;
+ struct {
+ unsigned long rtt;
+ struct sockaddr_storage host;
+ uint16_t protocol_version;
+ } cur_server;
serialized_buffer_t payload_buffer;
- dnbd3_server_t alt_servers[NUMBER_SERVERS]; // array of alt servers, protected by altservers_lock
+ dnbd3_alt_server_t alt_servers[NUMBER_SERVERS]; // array of alt servers, protected by alt_servers_lock
uint8_t discover, panic, update_available, panic_count;
atomic_t connection_lock;
uint8_t use_server_provided_alts;
@@ -84,9 +87,13 @@ typedef struct {
extern inline struct device *dnbd3_device_to_dev(dnbd3_device_t *dev);
-extern inline int is_same_server(const dnbd3_server_t *const a, const dnbd3_server_t *const b);
+extern inline int is_same_server(const struct sockaddr_storage *const x, const struct sockaddr_storage *const y);
-extern dnbd3_server_t *get_existing_server(const dnbd3_host_t *const newserver, dnbd3_device_t *const dev);
+extern int dnbd3_host_to_sockaddr(const dnbd3_host_t *host, struct sockaddr_storage *dest);
+
+extern dnbd3_alt_server_t *get_existing_alt_from_host(const dnbd3_host_t *const host, dnbd3_device_t *const dev);
+
+extern dnbd3_alt_server_t *get_existing_alt_from_addr(const struct sockaddr_storage *const addr, dnbd3_device_t *const dev);
extern int dnbd3_add_server(dnbd3_device_t *dev, dnbd3_host_t *host);