summaryrefslogtreecommitdiffstats
path: root/src/kernel
diff options
context:
space:
mode:
authorSimon Rettberg2017-10-28 14:56:58 +0200
committerSimon Rettberg2017-10-28 14:56:58 +0200
commitc8c62246f84b5d9d4a496097f043696e2d9ba0bb (patch)
tree27a896f6677791ef8087fa44b1aab7cb2071d774 /src/kernel
parent[SERVER] Add function to parse x-www-form-urlencoded strings (diff)
downloaddnbd3-c8c62246f84b5d9d4a496097f043696e2d9ba0bb.tar.gz
dnbd3-c8c62246f84b5d9d4a496097f043696e2d9ba0bb.tar.xz
dnbd3-c8c62246f84b5d9d4a496097f043696e2d9ba0bb.zip
[*] Introduce constants for IPv4/6 in dnbd3_host_t
AF_INET luckily was "2" on all platforms checked, so no problems there with interoperation, but AF_INET6 is different between Linux, BSD, Windows and possibly others, so map back and forth between AF_INET/AF_INET6 and HOST_IP4/HOST_IP6 to fix this.
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/net.c24
-rw-r--r--src/kernel/sysfs.c8
2 files changed, 16 insertions, 16 deletions
diff --git a/src/kernel/net.c b/src/kernel/net.c
index b4c2331..f6de404 100644
--- a/src/kernel/net.c
+++ b/src/kernel/net.c
@@ -32,9 +32,9 @@
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0)
-#define dnbd3_sock_create(af,type,proto,sock) sock_create_kern(&init_net, af, type, proto, sock)
+#define dnbd3_sock_create(af,type,proto,sock) sock_create_kern(&init_net, (af) == HOST_IP4 ? AF_INET : AF_INET6, type, proto, sock)
#else
-#define dnbd3_sock_create(af,type,proto,sock) sock_create_kern(af, type, proto, sock)
+#define dnbd3_sock_create(af,type,proto,sock) sock_create_kern((af) == HOST_IP4 ? AF_INET : AF_INET6, type, proto, sock)
#endif
/**
@@ -44,7 +44,7 @@
*/
#if 1 // Change to 0 to disable debug messages
#define debug_print_va_host(_host, _fmt, ...) do { \
- if ((_host).type == AF_INET) \
+ if ((_host).type == HOST_IP4) \
printk("%s:%d " _fmt " (%s, %pI4:%d)\n", __FILE__, __LINE__, __VA_ARGS__, dev->disk->disk_name, (_host).addr, (int)ntohs((_host).port)); \
else \
printk("%s:%d " _fmt " (%s, [%pI6]:%d)\n", __FILE__, __LINE__, __VA_ARGS__, dev->disk->disk_name, (_host).addr, (int)ntohs((_host).port)); \
@@ -59,7 +59,7 @@
#define error_alt_va(_fmt, ...) debug_error_va_host(dev->alt_servers[i].host, _fmt, __VA_ARGS__)
#define debug_print_host(_host, txt) do { \
- if ((_host).type == AF_INET) \
+ if ((_host).type == HOST_IP4) \
printk("%s:%d " txt " (%s, %pI4:%d)\n", __FILE__, __LINE__, dev->disk->disk_name, (_host).addr, (int)ntohs((_host).port)); \
else \
printk("%s:%d " txt " (%s, [%pI6]:%d)\n", __FILE__, __LINE__, dev->disk->disk_name, (_host).addr, (int)ntohs((_host).port)); \
@@ -87,7 +87,7 @@
static inline int is_same_server(const dnbd3_server_t * const a, const dnbd3_server_t * const b)
{
return (a->host.type == b->host.type) && (a->host.port == b->host.port)
- && (0 == memcmp(a->host.addr, b->host.addr, (a->host.type == AF_INET ? 4 : 16)));
+ && (0 == memcmp(a->host.addr, b->host.addr, (a->host.type == HOST_IP4 ? 4 : 16)));
}
static inline dnbd3_server_t *get_existing_server(const dnbd3_server_entry_t * const newserver,
@@ -99,7 +99,7 @@ static inline dnbd3_server_t *get_existing_server(const dnbd3_server_entry_t * c
if ((newserver->host.type == dev->alt_servers[i].host.type)
&& (newserver->host.port == dev->alt_servers[i].host.port)
&& (0
- == memcmp(newserver->host.addr, dev->alt_servers[i].host.addr, (newserver->host.type == AF_INET ? 4 : 16))))
+ == memcmp(newserver->host.addr, dev->alt_servers[i].host.addr, (newserver->host.type == HOST_IP4 ? 4 : 16))))
{
return &dev->alt_servers[i];
break;
@@ -159,7 +159,7 @@ int dnbd3_net_connect(dnbd3_device_t *dev)
if (dev->sock)
error_dev("ERROR: Already connected.");
- if (dev->cur_server.host.type != AF_INET && dev->cur_server.host.type != AF_INET6)
+ if (dev->cur_server.host.type != HOST_IP4 && dev->cur_server.host.type != HOST_IP6)
error_dev_va("ERROR: Unknown address type %d", (int)dev->cur_server.host.type);
debug_dev("INFO: Connecting...");
@@ -182,7 +182,7 @@ int dnbd3_net_connect(dnbd3_device_t *dev)
kernel_setsockopt(dev->sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
kernel_setsockopt(dev->sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
dev->sock->sk->sk_allocation = GFP_NOIO;
- if (dev->cur_server.host.type == AF_INET)
+ if (dev->cur_server.host.type == HOST_IP4)
{
struct sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
@@ -479,7 +479,7 @@ int dnbd3_net_discover(void *data)
spin_lock_irqsave(&dev->blk_lock, irqflags);
for (i = 0; i < dev->new_servers_num; ++i)
{
- if (dev->new_servers[i].host.type != AF_INET && dev->new_servers[i].host.type != AF_INET6) // Invalid entry?
+ if (dev->new_servers[i].host.type != HOST_IP4 && dev->new_servers[i].host.type != HOST_IP6) // Invalid entry?
continue;
alt_server = get_existing_server(&dev->new_servers[i], dev);
if (alt_server != NULL ) // Server already known
@@ -487,7 +487,7 @@ int dnbd3_net_discover(void *data)
if (dev->new_servers[i].failures == 1)
{
// REMOVE request
- if (alt_server->host.type == AF_INET)
+ if (alt_server->host.type == HOST_IP4)
debug_dev_va("Removing alt server %pI4", alt_server->host.addr);
else
debug_dev_va("Removing alt server %pI6", alt_server->host.addr);
@@ -505,7 +505,7 @@ int dnbd3_net_discover(void *data)
continue;
// Add new server entry
alt_server->host = dev->new_servers[i].host;
- if (alt_server->host.type == AF_INET)
+ if (alt_server->host.type == HOST_IP4)
debug_dev_va("Adding alt server %pI4", alt_server->host.addr);
else
debug_dev_va("Adding alt server %pI6", alt_server->host.addr);
@@ -559,7 +559,7 @@ int dnbd3_net_discover(void *data)
kernel_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout));
kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout));
sock->sk->sk_allocation = GFP_NOIO;
- if (dev->alt_servers[i].host.type == AF_INET)
+ if (dev->alt_servers[i].host.type == HOST_IP4)
{
sin4.sin_family = AF_INET;
memcpy(&sin4.sin_addr, dev->alt_servers[i].host.addr, 4);
diff --git a/src/kernel/sysfs.c b/src/kernel/sysfs.c
index efe1cad..4406072 100644
--- a/src/kernel/sysfs.c
+++ b/src/kernel/sysfs.c
@@ -29,9 +29,9 @@
ssize_t show_cur_server_addr(char *buf, dnbd3_device_t *dev)
{
- if (dev->cur_server.host.type == AF_INET)
+ if (dev->cur_server.host.type == HOST_IP4)
return MIN(snprintf(buf, PAGE_SIZE, "%pI4,%d\n", dev->cur_server.host.addr, (int)ntohs(dev->cur_server.host.port)), PAGE_SIZE);
- else if (dev->cur_server.host.type == AF_INET6)
+ else if (dev->cur_server.host.type == HOST_IP6)
return MIN(snprintf(buf, PAGE_SIZE, "%pI6,%d\n", dev->cur_server.host.addr, (int)ntohs(dev->cur_server.host.port)), PAGE_SIZE);
*buf = '\0';
return 0;
@@ -57,14 +57,14 @@ ssize_t show_alt_servers(char *buf, dnbd3_device_t *dev)
int i, size = PAGE_SIZE, ret;
for (i = 0; i < NUMBER_SERVERS; ++i)
{
- if (dev->alt_servers[i].host.type == AF_INET)
+ if (dev->alt_servers[i].host.type == HOST_IP4)
ret = MIN(snprintf(buf, size, "%pI4,%d,%llu,%d\n",
dev->alt_servers[i].host.addr,
(int)ntohs(dev->alt_servers[i].host.port),
(unsigned long long)((dev->alt_servers[i].rtts[0] + dev->alt_servers[i].rtts[1] + dev->alt_servers[i].rtts[2] + dev->alt_servers[i].rtts[3]) / 4),
(int)dev->alt_servers[i].failures)
, size);
- else if (dev->alt_servers[i].host.type == AF_INET6)
+ else if (dev->alt_servers[i].host.type == HOST_IP6)
ret = MIN(snprintf(buf, size, "%pI6,%d,%llu,%d\n",
dev->alt_servers[i].host.addr,
(int)ntohs(dev->alt_servers[i].host.port),