diff options
author | David Hankins <dhankins@isc.org> | 2006-04-27 17:26:42 +0000 |
---|---|---|
committer | David Hankins <dhankins@isc.org> | 2006-04-27 17:26:42 +0000 |
commit | a55ccdd0371568e01a6bbab7b99e427ab66e1aef (patch) | |
tree | 057d9ab6464115f011246b072b43ce1d04993e1c /includes/failover.h | |
parent | 91e17fc3aa6f6f96063b1eef7d877b779be5683c (diff) | |
download | isc-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.h | 216 |
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 |