/* ----------------------------------------------------------------------- *
*
* repl_list.h - header file for replicated mount server selection
*
* Copyright 2004 Jeff Moyer <jmoyer@redaht.com> - All Rights Reserved
* Copyright 2004-2006 Ian Kent <raven@themaw.net> - All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
* USA; either version 2 of the License, or (at your option) any later
* version; incorporated herein by reference.
*
* ----------------------------------------------------------------------- */
#ifndef _REPLICATED_H
#define _REPLICATED_H
#define PROXIMITY_ERROR 0x0000
#define PROXIMITY_LOCAL 0x0001
#define PROXIMITY_SUBNET 0x0002
#define PROXIMITY_NET 0x0004
#define PROXIMITY_OTHER 0x0008
#define PROXIMITY_UNSUPPORTED 0x0010
#define NFS2_SUPPORTED 0x0010
#define NFS3_SUPPORTED 0x0020
#define NFS4_SUPPORTED 0x0040
#define NFS_VERS_DEFAULT (NFS3_SUPPORTED)
#define NFS_VERS_MASK (NFS2_SUPPORTED|NFS3_SUPPORTED)
#define NFS4_VERS_DEFAULT (NFS4_SUPPORTED)
#define NFS4_VERS_MASK (NFS4_SUPPORTED)
#define NFS2_REQUESTED NFS2_SUPPORTED
#define NFS3_REQUESTED NFS3_SUPPORTED
#define NFS4_REQUESTED NFS4_SUPPORTED
#define TCP_SUPPORTED 0x0001
#define UDP_SUPPORTED 0x0002
#define TCP_REQUESTED TCP_SUPPORTED
#define UDP_REQUESTED UDP_SUPPORTED
#define TCP6_REQUESTED 0x0100
#define UDP6_REQUESTED 0x0200
#define NFS_PROTO_DEFAULT (TCP_SUPPORTED|UDP_SUPPORTED)
#define NFS_PROTO_MASK (TCP_SUPPORTED|UDP_SUPPORTED)
#define NFS2_TCP_SUPPORTED NFS2_SUPPORTED
#define NFS3_TCP_SUPPORTED NFS3_SUPPORTED
#define NFS4_TCP_SUPPORTED NFS4_SUPPORTED
#define NFS2_UDP_SUPPORTED (NFS2_SUPPORTED << 8)
#define NFS3_UDP_SUPPORTED (NFS3_SUPPORTED << 8)
#define NFS4_UDP_SUPPORTED (NFS4_SUPPORTED << 8)
#define TCP_SELECTED_MASK 0x00FF
#define UDP_SELECTED_MASK 0xFF00
#define IS_ERR(supported) (0x8000 & supported)
#define ERR(supported) (IS_ERR(supported) ? (~supported + 1) : supported)
#define RPC_TIMEOUT 5
struct host {
char *name;
int ent_num;
struct sockaddr *addr;
size_t addr_len;
unsigned int rr;
char *path;
unsigned int version;
unsigned int options;
unsigned int proximity;
unsigned int weight;
unsigned long cost;
struct host *next;
};
void seed_random(void);
struct host *new_host(const char *, int, struct sockaddr *, size_t,
unsigned int, unsigned int, unsigned int);
void free_host_list(struct host **);
int parse_location(unsigned, struct host **, const char *, unsigned int);
int prune_host_list(unsigned, struct host **, unsigned int, int);
void dump_host_list(struct host *);
#endif