director-host.h revision 1055d8038122c4f4190d37d98fdff6791d1306f8
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen#ifndef DIRECTOR_HOST_H
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen#define DIRECTOR_HOST_H
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen#include "network.h"
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenstruct director;
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenstruct director_host {
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen struct ip_addr ip;
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen unsigned int port;
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* name contains "ip:port" */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen char *name;
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* each command between directors contains an increasing sequence.
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen if director A gets conflicting information about director B, it can
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen trust the one that has the highest sequence. */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen unsigned int last_seq;
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
4fe3f07477bae6da3fb8d8fa9bab10ab82ada2bdTimo Sirainen /* Last time host was detected to be down/broken */
4fe3f07477bae6da3fb8d8fa9bab10ab82ada2bdTimo Sirainen time_t last_failed;
4fe3f07477bae6da3fb8d8fa9bab10ab82ada2bdTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen /* we are this director */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen unsigned int self:1;
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen};
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenstruct director_host *
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainendirector_host_add(struct director *dir, const struct ip_addr *ip,
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen unsigned int port);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenvoid director_host_free(struct director_host *host);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenstruct director_host *
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainendirector_host_get(struct director *dir, const struct ip_addr *ip,
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen unsigned int port);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenstruct director_host *
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainendirector_host_lookup(struct director *dir, const struct ip_addr *ip,
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen unsigned int port);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenstruct director_host *
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainendirector_host_lookup_ip(struct director *dir, const struct ip_addr *ip);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
1055d8038122c4f4190d37d98fdff6791d1306f8Timo Sirainen/* Returns 0 if b1 equals b2.
1055d8038122c4f4190d37d98fdff6791d1306f8Timo Sirainen -1 if b1 is closer to our left side than b2 or
1055d8038122c4f4190d37d98fdff6791d1306f8Timo Sirainen -1 if b2 is closer to our right side than b1
1055d8038122c4f4190d37d98fdff6791d1306f8Timo Sirainen 1 vice versa */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenint director_host_cmp_to_self(const struct director_host *b1,
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen const struct director_host *b2,
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen const struct director_host *self);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen/* Parse hosts list (e.g. "host1:port host2 host3:port") and them as
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen directors */
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenvoid director_host_add_from_string(struct director *dir, const char *hosts);
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen#endif