summaryrefslogtreecommitdiff
path: root/includes/failover.h
diff options
context:
space:
mode:
authorDavid Hankins <dhankins@isc.org>2006-04-27 17:26:42 +0000
committerDavid Hankins <dhankins@isc.org>2006-04-27 17:26:42 +0000
commita55ccdd0371568e01a6bbab7b99e427ab66e1aef (patch)
tree057d9ab6464115f011246b072b43ce1d04993e1c /includes/failover.h
parent91e17fc3aa6f6f96063b1eef7d877b779be5683c (diff)
downloadisc-dhcp-a55ccdd0371568e01a6bbab7b99e427ab66e1aef.tar.gz
- Support for 'reserved' (psuedo-static) and BOOTP leases via failover
was introduced. [ISC-Bugs #13672] - The failover implementation was updated to comply with revision 12 of the protocol draft. [ISC-Bugs #13672]
Diffstat (limited to 'includes/failover.h')
-rw-r--r--includes/failover.h216
1 files changed, 130 insertions, 86 deletions
diff --git a/includes/failover.h b/includes/failover.h
index f4ff7e9e..576d6bb2 100644
--- a/includes/failover.h
+++ b/includes/failover.h
@@ -51,81 +51,88 @@ typedef struct {
#define FM_OFFSET(x) (long)(&(((failover_message_t *)0) -> x))
-/* Failover message options: */
-#define FTO_BINDING_STATUS 1
-#define FTB_BINDING_STATUS 0x00000002
+/* All of the below definitions are mandated by draft-ietf-dhc-failover-12.
+ * The Sections referenced are Sections within that document of that
+ * version, and may be different in other documents of other versions.
+ */
+
+/* Failover message options from Section 12: */
+#define FTO_ADDRESSES_TRANSFERRED 1
+#define FTB_ADDRESSES_TRANSFERRED 0x00000002
#define FTO_ASSIGNED_IP_ADDRESS 2
#define FTB_ASSIGNED_IP_ADDRESS 0x00000004
-#define FTO_SERVER_ADDR 3
-#define FTB_SERVER_ADDR 0x00000008
-#define FTO_ADDRESSES_TRANSFERRED 4
-#define FTB_ADDRESSES_TRANSFERRED 0x00000010
-#define FTO_CLIENT_IDENTIFIER 5
-#define FTB_CLIENT_IDENTIFIER 0x00000020
-#define FTO_CHADDR 6
-#define FTB_CHADDR 0x00000040
-#define FTO_DDNS 7
-#define FTB_DDNS 0x00000080
-#define FTO_REJECT_REASON 8
-#define FTB_REJECT_REASON 0x00000100
-#define FTO_MESSAGE 9
-#define FTB_MESSAGE 0x00000200
-#define FTO_MCLT 10
-#define FTB_MCLT 0x00000400
-#define FTO_VENDOR_CLASS 11
-#define FTB_VENDOR_CLASS 0x00000800
+#define FTO_BINDING_STATUS 3
+#define FTB_BINDING_STATUS 0x00000008
+#define FTO_CLIENT_IDENTIFIER 4
+#define FTB_CLIENT_IDENTIFIER 0x00000010
+#define FTO_CHADDR 5
+#define FTB_CHADDR 0x00000020
+#define FTO_CLTT 6
+#define FTB_CLTT 0x00000040
+#define FTO_REPLY_OPTIONS 7
+#define FTB_REPLY_OPTIONS 0x00000080
+#define FTO_REQUEST_OPTIONS 8
+#define FTB_REQUEST_OPTIONS 0x00000100
+#define FTO_DDNS 9
+#define FTB_DDNS 0x00000200
+#define FTO_DELAYED_SERVICE 10
+#define FTB_DELAYED_SERVICE 0x00000400
+#define FTO_HBA 11
+#define FTB_HBA 0x00000800
+#define FTO_IP_FLAGS 12
+#define FTB_IP_FLAGS 0x00001000
#define FTO_LEASE_EXPIRY 13
#define FTB_LEASE_EXPIRY 0x00002000
-#define FTO_POTENTIAL_EXPIRY 14
-#define FTB_POTENTIAL_EXPIRY 0x00004000
-#define FTO_GRACE_EXPIRY 15
-#define FTB_GRACE_EXPIRY 0x00008000
-#define FTO_CLTT 16
-#define FTB_CLTT 0x00010000
-#define FTO_STOS 17
-#define FTB_STOS 0x00020000
-#define FTO_SERVER_STATE 18
-#define FTB_SERVER_STATE 0x00040000
-#define FTO_SERVER_FLAGS 19
-#define FTB_SERVER_FLAGS 0x00080000
-#define FTO_VENDOR_OPTIONS 20
-#define FTB_VENDOR_OPTIONS 0x00100000
-#define FTO_MAX_UNACKED 21
-#define FTB_MAX_UNACKED 0x00200000
-#define FTO_RECEIVE_TIMER 23
-#define FTB_RECEIVE_TIMER 0x00800000
-#define FTO_HBA 24
-#define FTB_HBA 0x01000000
-#define FTO_MESSAGE_DIGEST 25
-#define FTB_MESSAGE_DIGEST 0x02000000
-#define FTO_PROTOCOL_VERSION 26
-#define FTB_PROTOCOL_VERSION 0x04000000
+#define FTO_MAX_UNACKED 14
+#define FTB_MAX_UNACKED 0x00004000
+#define FTO_MCLT 15
+#define FTB_MCLT 0x00008000
+#define FTO_MESSAGE 16
+#define FTB_MESSAGE 0x00010000
+#define FTO_MESSAGE_DIGEST 17
+#define FTB_MESSAGE_DIGEST 0x00020000
+#define FTO_POTENTIAL_EXPIRY 18
+#define FTB_POTENTIAL_EXPIRY 0x00040000
+#define FTO_RECEIVE_TIMER 19
+#define FTB_RECEIVE_TIMER 0x00080000
+#define FTO_PROTOCOL_VERSION 20
+#define FTB_PROTOCOL_VERSION 0x00100000
+#define FTO_REJECT_REASON 21
+#define FTB_REJECT_REASON 0x00200000
+#define FTO_RELATIONSHIP_NAME 22
+#define FTB_RELATIONSHIP_NAME 0x00400000
+#define FTO_SERVER_FLAGS 23
+#define FTB_SERVER_FLAGS 0x00800000
+#define FTO_SERVER_STATE 24
+#define FTB_SERVER_STATE 0x01000000
+#define FTO_STOS 25
+#define FTB_STOS 0x02000000
+#define FTO_TLS_REPLY 26
+#define FTB_TLS_REPLY 0x04000000
#define FTO_TLS_REQUEST 27
#define FTB_TLS_REQUEST 0x08000000
-#define FTO_TLS_REPLY 28
-#define FTB_TLS_REPLY 0x10000000
-#define FTO_REQUEST_OPTIONS 29
-#define FTB_REQUEST_OPTIONS 0x20000000
-#define FTO_REPLY_OPTIONS 30
-#define FTB_REPLY_OPTIONS 0x40000000
-#define FTO_MAX FTO_REPLY_OPTIONS
-
-/* Failover protocol message types: */
+#define FTO_VENDOR_CLASS 28
+#define FTB_VENDOR_CLASS 0x10000000
+#define FTO_VENDOR_OPTIONS 29
+#define FTB_VENDOR_OPTIONS 0x20000000
+
+#define FTO_MAX FTO_VENDOR_OPTIONS
+
+/* Failover protocol message types from Section 6.1: */
#define FTM_POOLREQ 1
#define FTM_POOLRESP 2
#define FTM_BNDUPD 3
#define FTM_BNDACK 4
#define FTM_CONNECT 5
#define FTM_CONNECTACK 6
-#define FTM_UPDREQ 7
+#define FTM_UPDREQALL 7
#define FTM_UPDDONE 8
-#define FTM_UPDREQALL 9
+#define FTM_UPDREQ 9
#define FTM_STATE 10
#define FTM_CONTACT 11
#define FTM_DISCONNECT 12
-/* Reject reasons: */
-
+/* Reject reasons from Section 12.21: */
#define FTR_ILLEGAL_IP_ADDR 1
#define FTR_FATAL_CONFLICT 2
#define FTR_MISSING_BINDINFO 3
@@ -140,55 +147,83 @@ typedef struct {
#define FTR_DIGEST_UNSUPPORTED 12
#define FTR_DIGEST_UNCONFIGURED 13
#define FTR_VERSION_MISMATCH 14
-#define FTR_MISSING_BIND_INFO 15
-#define FTR_OUTDATED_BIND_INFO 16
-#define FTR_LESS_CRIT_BIND_INFO 17
-#define FTR_NO_TRAFFIC 18
-#define FTR_HBA_CONFLICT 19
+#define FTR_OUTDATED_BIND_INFO 15
+#define FTR_LESS_CRIT_BIND_INFO 16
+#define FTR_NO_TRAFFIC 17
+#define FTR_HBA_CONFLICT 18
+#define FTR_IP_NOT_RESERVED 19
+#define FTR_IP_DIGEST_FAILURE 20
+#define FTR_IP_MISSING_DIGEST 21
#define FTR_UNKNOWN 254
+/* Message size limitations defined in Section 6.1: */
+#define DHCP_FAILOVER_MIN_MESSAGE_SIZE 12
#define DHCP_FAILOVER_MAX_MESSAGE_SIZE 2048
-/* Failover server flags. */
-#define FTF_STARTUP 1
+/* Failover server flags from Section 12.23: */
+#define FTF_SERVER_STARTUP 1
+
+/* DDNS flags from Section 12.9. These are really their names. */
+#define FTF_DDNS_C 0x0001
+#define FTF_DDNS_A 0x0002
+#define FTF_DDNS_D 0x0004
+#define FTF_DDNS_P 0x0008
+
+/* FTO_IP_FLAGS contents from Section 12.12: */
+#define FTF_IP_FLAG_RESERVE 0x0001
+#define FTF_IP_FLAG_BOOTP 0x0002
+
+/* FTO_MESSAGE_DIGEST Type Codes from Section 12.17: */
+#define FTT_MESSAGE_DIGEST_HMAC_MD5 0x01
typedef struct failover_message {
int refcnt;
struct failover_message *next;
+ int options_present;
+
+ u_int32_t time;
+ u_int32_t xid;
u_int8_t type;
+ /* One-byte options. */
u_int8_t binding_status;
+ u_int8_t delayed_service;
u_int8_t protocol_version;
u_int8_t reject_reason;
u_int8_t server_flags;
u_int8_t server_state;
u_int8_t tls_reply;
u_int8_t tls_request;
- u_int32_t stos;
- u_int32_t time;
- u_int32_t xid;
+
+ /* Two-byte options. */
+ u_int16_t ip_flags;
+
+ /* Four-byte options. */
u_int32_t addresses_transferred;
u_int32_t assigned_addr;
- u_int32_t client_ltt;
+ u_int32_t cltt;
u_int32_t expiry;
- u_int32_t grace_expiry;
u_int32_t max_unacked;
u_int32_t mclt;
u_int32_t potential_expiry;
u_int32_t receive_timer;
- u_int32_t server_addr;
+ u_int32_t stos;
+
+ /* Arbitrary field options. */
failover_option_t chaddr;
failover_option_t client_identifier;
failover_option_t hba;
failover_option_t message;
+ failover_option_t message_digest;
+ failover_option_t relationship_name;
failover_option_t reply_options;
failover_option_t request_options;
- ddns_fqdn_t ddns;
failover_option_t vendor_class;
failover_option_t vendor_options;
- int options_present;
+ /* Special contents options. */
+ ddns_fqdn_t ddns;
} failover_message_t;
typedef struct {
@@ -218,20 +253,28 @@ typedef struct _dhcp_failover_listener {
} dhcp_failover_listener_t;
#endif /* FAILOVER_PROTOCOL */
-/* A failover peer. */
+/* A failover peer's running state. */
enum failover_state {
- unknown_state,
- partner_down,
- normal,
- communications_interrupted,
- resolution_interrupted,
- potential_conflict,
- recover,
- recover_done,
- shut_down,
- paused,
- startup,
- recover_wait
+ unknown_state = 0, /* XXX: Not a standard state. */
+ startup = 1,
+ normal = 2,
+ communications_interrupted = 3,
+ partner_down = 4,
+ potential_conflict = 5,
+ recover = 6,
+ paused = 7,
+ shut_down = 8,
+ recover_done = 9,
+ resolution_interrupted = 10,
+ conflict_done = 11,
+
+ /* Draft revision 12 of the failover protocol documents a RECOVER-WAIT
+ * state, but does not enumerate its value in the section 12.24
+ * table. ISC DHCP 3.0.x used value 254 even though the state was
+ * not documented at all. For the time being, we will continue to use
+ * this value.
+ */
+ recover_wait = 254
};
/* Service states are simplifications of failover states, particularly
@@ -309,6 +352,7 @@ typedef struct _dhcp_failover_state {
failover state object. */
int curUPD; /* If an UPDREQ* message is in motion,
this value indicates which one. */
+ u_int32_t updxid; /* XID of UPDREQ* message in action. */
} dhcp_failover_state_t;
#define DHCP_FAILOVER_VERSION 1