diff options
| author | Simon Rettberg | 2021-03-24 16:07:15 +0100 |
|---|---|---|
| committer | Simon Rettberg | 2021-03-24 16:07:15 +0100 |
| commit | c73bc9413da8bc964d82e0a58525c7280cc1a456 (patch) | |
| tree | c2ec982722fd79c413d97edefa089a6176ebef9b /src/kernel/dnbd3_main.h | |
| parent | [KERNEL] Set fake low RTT after manual server switch (diff) | |
| download | dnbd3-c73bc9413da8bc964d82e0a58525c7280cc1a456.tar.gz dnbd3-c73bc9413da8bc964d82e0a58525c7280cc1a456.tar.xz dnbd3-c73bc9413da8bc964d82e0a58525c7280cc1a456.zip | |
[KERNEL] Use sockaddr instead of dnbd3_host_t where possible
Convert dnbd3_host_t to struct sockaddr immediately when
adding alt servers, so we don't have to convert it every time
we establish a connection. Additionally we can now use %pISpc
in printf-like functions instead of having if/else constructs
whenever we want to print an address.
Diffstat (limited to 'src/kernel/dnbd3_main.h')
| -rw-r--r-- | src/kernel/dnbd3_main.h | 25 |
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); |
