diff options
author | Lars Müller | 2008-03-01 19:30:38 +0100 |
---|---|---|
committer | Lars Müller | 2008-03-01 19:30:38 +0100 |
commit | 868fec1f8eca7c344fc9ac057b7418331299d9ce (patch) | |
tree | c07cdf11db710dc495c3c7a513cc0f8fd68d6626 /kernel/net.h | |
download | dnbd-868fec1f8eca7c344fc9ac057b7418331299d9ce.tar.gz dnbd-868fec1f8eca7c344fc9ac057b7418331299d9ce.tar.xz dnbd-868fec1f8eca7c344fc9ac057b7418331299d9ce.zip |
Import dnbd* from the former openslx-contrib repo as of revision 92.
openslx-contrib is currently read only and will get removed in some
days.
git-svn-id: http://svn.openslx.org/svn/openslx/contrib/dnbd/trunk@1592 95ad53e4-c205-0410-b2fa-d234c58c8868
Diffstat (limited to 'kernel/net.h')
-rw-r--r-- | kernel/net.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/kernel/net.h b/kernel/net.h new file mode 100644 index 0000000..cdd7996 --- /dev/null +++ b/kernel/net.h @@ -0,0 +1,73 @@ +#ifndef LINUX_DNBD_NET_H +#define LINUX_DNBD_NET_H 1 + +#include <linux/spinlock.h> +#include <asm/semaphore.h> +#include <linux/list.h> +#include <linux/param.h> +#include <linux/jiffies.h> + +#define SERVERS_MAX 8 +#define SERVER_STALLED -1 +#define SERVER_INACTIVE 0 +#define SERVER_ACTIVE 1 + +/* limits and other constants for SRTT calculations */ +#define TIMEOUT_MIN 1 +#define TIMEOUT_MAX HZ / 4 +#define TIMEOUT_STALLED 5 * HZ +#define TIMEOUT_SHIFT 2 + +/* beta is 99% (990/1000) */ +#define SRTT_BETA 990 +#define SRTT_BETA_BASE 1000 +#define SRTT_SHIFT 10 + +/* normalize weights to 255 as there is no float arithmetic in kernel */ +#define WEIGHT_NORMAL ((1<<8)-1) +#define WEIGHT_FACTOR (1<<20) + +#define dnbd_rx_update(servers, id) \ +if ((id > 0) && (id <= SERVERS_MAX)) servers.serverlist[id-1].last_rx = jiffies; + +#define dnbd_tx_update(servers, id) \ +if ((id > 0) && (id <= SERVERS_MAX)) servers.serverlist[id-1].last_tx = jiffies; + +/* characteristics of a server */ +struct dnbd_server { + int id; + int state; + int srtt; + int weight; + unsigned long last_rx; /* in jiffies */ + unsigned long last_tx; /* in jiffies */ +}; + +typedef struct dnbd_server dnbd_server_t; + +/* common server information and helper variables */ +struct dnbd_servers { + struct dnbd_server *serverlist; + struct dnbd_server *server; + spinlock_t lock; + struct semaphore sema; + int timeout_min; + int timeout_max; + int timeout_stalled; + int asrtt; + int count; +}; + +typedef struct dnbd_servers dnbd_servers_t; + +/* functions */ +int dnbd_set_serverid(dnbd_servers_t * servers, int id); +int dnbd_next_server(dnbd_servers_t * servers); +void dnbd_rem_servers(dnbd_servers_t * servers); +void dnbd_rtt_server(dnbd_servers_t * servers, int id, int rtt); +int dnbd_servers_init(dnbd_servers_t *servers); +void dnbd_servers_weight(dnbd_servers_t * servers); +int dnbd_show_servers(dnbd_servers_t * servers, void *buf, int size); +void dnbd_clean_servers(dnbd_servers_t * servers); + +#endif |