29 #if defined (FAILOVER_PROTOCOL) 30 struct failover_option_info {
33 enum { FT_UINT8, FT_IPADDR, FT_UINT32, FT_BYTES, FT_TEXT_OR_BYTES,
34 FT_DDNS, FT_DDNS1, FT_UINT16, FT_TEXT,
35 FT_UNDEF, FT_DIGEST } type;
47 #ifndef DEFAULT_MAX_BALANCE_TIME 48 # define DEFAULT_MAX_BALANCE_TIME 3600 51 #ifndef DEFAULT_MIN_BALANCE_TIME 52 # define DEFAULT_MIN_BALANCE_TIME 60 55 #ifndef DEFAULT_MAX_LEASE_MISBALANCE 56 # define DEFAULT_MAX_LEASE_MISBALANCE 15 59 #ifndef DEFAULT_MAX_LEASE_OWNERSHIP 60 # define DEFAULT_MAX_LEASE_OWNERSHIP 10 63 #ifndef DEFAULT_MAX_FLYING_UPDATES 64 # define DEFAULT_MAX_FLYING_UPDATES 100 67 #ifndef DEFAULT_MAX_RESPONSE_DELAY 68 # define DEFAULT_MAX_RESPONSE_DELAY 20 77 #ifndef DEFAULT_FAILOVER_PORT 78 # define DEFAULT_FAILOVER_PORT 647 81 #define FM_OFFSET(x) (long)(&(((failover_message_t *)0) -> x)) 89 #define FTO_ADDRESSES_TRANSFERRED 1 90 #define FTB_ADDRESSES_TRANSFERRED 0x00000002 91 #define FTO_ASSIGNED_IP_ADDRESS 2 92 #define FTB_ASSIGNED_IP_ADDRESS 0x00000004 93 #define FTO_BINDING_STATUS 3 94 #define FTB_BINDING_STATUS 0x00000008 95 #define FTO_CLIENT_IDENTIFIER 4 96 #define FTB_CLIENT_IDENTIFIER 0x00000010 98 #define FTB_CHADDR 0x00000020 100 #define FTB_CLTT 0x00000040 101 #define FTO_REPLY_OPTIONS 7 102 #define FTB_REPLY_OPTIONS 0x00000080 103 #define FTO_REQUEST_OPTIONS 8 104 #define FTB_REQUEST_OPTIONS 0x00000100 106 #define FTB_DDNS 0x00000200 107 #define FTO_DELAYED_SERVICE 10 108 #define FTB_DELAYED_SERVICE 0x00000400 110 #define FTB_HBA 0x00000800 111 #define FTO_IP_FLAGS 12 112 #define FTB_IP_FLAGS 0x00001000 113 #define FTO_LEASE_EXPIRY 13 114 #define FTB_LEASE_EXPIRY 0x00002000 115 #define FTO_MAX_UNACKED 14 116 #define FTB_MAX_UNACKED 0x00004000 118 #define FTB_MCLT 0x00008000 119 #define FTO_MESSAGE 16 120 #define FTB_MESSAGE 0x00010000 121 #define FTO_MESSAGE_DIGEST 17 122 #define FTB_MESSAGE_DIGEST 0x00020000 123 #define FTO_POTENTIAL_EXPIRY 18 124 #define FTB_POTENTIAL_EXPIRY 0x00040000 125 #define FTO_RECEIVE_TIMER 19 126 #define FTB_RECEIVE_TIMER 0x00080000 127 #define FTO_PROTOCOL_VERSION 20 128 #define FTB_PROTOCOL_VERSION 0x00100000 129 #define FTO_REJECT_REASON 21 130 #define FTB_REJECT_REASON 0x00200000 131 #define FTO_RELATIONSHIP_NAME 22 132 #define FTB_RELATIONSHIP_NAME 0x00400000 133 #define FTO_SERVER_FLAGS 23 134 #define FTB_SERVER_FLAGS 0x00800000 135 #define FTO_SERVER_STATE 24 136 #define FTB_SERVER_STATE 0x01000000 138 #define FTB_STOS 0x02000000 139 #define FTO_TLS_REPLY 26 140 #define FTB_TLS_REPLY 0x04000000 141 #define FTO_TLS_REQUEST 27 142 #define FTB_TLS_REQUEST 0x08000000 143 #define FTO_VENDOR_CLASS 28 144 #define FTB_VENDOR_CLASS 0x10000000 145 #define FTO_VENDOR_OPTIONS 29 146 #define FTB_VENDOR_OPTIONS 0x20000000 148 #define FTO_MAX FTO_VENDOR_OPTIONS 151 #define FTM_POOLREQ 1 152 #define FTM_POOLRESP 2 155 #define FTM_CONNECT 5 156 #define FTM_CONNECTACK 6 157 #define FTM_UPDREQALL 7 158 #define FTM_UPDDONE 8 161 #define FTM_CONTACT 11 162 #define FTM_DISCONNECT 12 164 #define FTM_MAX FTM_DISCONNECT 167 #define FTR_ILLEGAL_IP_ADDR 1 168 #define FTR_FATAL_CONFLICT 2 169 #define FTR_MISSING_BINDINFO 3 170 #define FTR_TIMEMISMATCH 4 171 #define FTR_INVALID_MCLT 5 172 #define FTR_MISC_REJECT 6 173 #define FTR_DUP_CONNECTION 7 174 #define FTR_INVALID_PARTNER 8 175 #define FTR_TLS_UNSUPPORTED 9 176 #define FTR_TLS_UNCONFIGURED 10 177 #define FTR_TLS_REQUIRED 11 178 #define FTR_DIGEST_UNSUPPORTED 12 179 #define FTR_DIGEST_UNCONFIGURED 13 180 #define FTR_VERSION_MISMATCH 14 181 #define FTR_OUTDATED_BIND_INFO 15 182 #define FTR_LESS_CRIT_BIND_INFO 16 183 #define FTR_NO_TRAFFIC 17 184 #define FTR_HBA_CONFLICT 18 185 #define FTR_IP_NOT_RESERVED 19 186 #define FTR_IP_DIGEST_FAILURE 20 187 #define FTR_IP_MISSING_DIGEST 21 188 #define FTR_UNKNOWN 254 191 #define DHCP_FAILOVER_MIN_MESSAGE_SIZE 12 192 #define DHCP_FAILOVER_MAX_MESSAGE_SIZE 2048 195 #define FTF_SERVER_STARTUP 1 198 #define FTF_DDNS_C 0x0001 199 #define FTF_DDNS_A 0x0002 200 #define FTF_DDNS_D 0x0004 201 #define FTF_DDNS_P 0x0008 204 #define FTF_IP_FLAG_RESERVE 0x0001 205 #define FTF_IP_FLAG_BOOTP 0x0002 208 #define FTT_MESSAGE_DIGEST_HMAC_MD5 0x01 210 typedef struct failover_message {
212 struct failover_message *next;
221 u_int8_t binding_status;
222 u_int8_t delayed_service;
223 u_int8_t protocol_version;
224 u_int8_t reject_reason;
225 u_int8_t server_flags;
226 u_int8_t server_state;
228 u_int8_t tls_request;
234 u_int32_t addresses_transferred;
235 u_int32_t assigned_addr;
238 u_int32_t max_unacked;
240 u_int32_t potential_expiry;
241 u_int32_t receive_timer;
245 failover_option_t chaddr;
246 failover_option_t client_identifier;
247 failover_option_t hba;
248 failover_option_t message;
249 failover_option_t message_digest;
250 failover_option_t relationship_name;
251 failover_option_t reply_options;
252 failover_option_t request_options;
253 failover_option_t vendor_class;
254 failover_option_t vendor_options;
258 } failover_message_t;
265 enum dhcp_flink_state {
267 dhcp_flink_message_length_wait,
268 dhcp_flink_message_wait,
269 dhcp_flink_disconnected,
272 failover_message_t *imsg;
273 struct _dhcp_failover_state *state_object;
276 u_int8_t imsg_payoff;
278 } dhcp_failover_link_t;
280 typedef struct _dhcp_failover_listener {
282 struct _dhcp_failover_listener *next;
324 #if defined (FAILOVER_PROTOCOL) 325 typedef struct _dhcp_failover_config {
328 u_int32_t max_flying_updates;
331 u_int32_t max_response_delay;
332 } dhcp_failover_config_t;
334 typedef struct _dhcp_failover_state {
336 struct _dhcp_failover_state *next;
338 dhcp_failover_config_t me;
339 dhcp_failover_config_t partner;
345 int load_balance_max_secs;
347 u_int32_t max_lease_misbalance, max_lease_ownership;
348 u_int32_t max_balance, min_balance;
349 TIME last_balance, sched_balance;
351 u_int32_t auto_partner_down;
358 dhcp_failover_link_t *link_to_peer;
365 TIME last_packet_sent;
366 TIME last_timestamp_received;
369 struct lease *update_queue_head;
371 struct lease *update_queue_tail;
373 struct lease *ack_queue_head;
375 struct lease *ack_queue_tail;
377 struct lease *send_update_done;
379 int cur_unacked_updates;
384 failover_message_t *toack_queue_head;
385 failover_message_t *toack_queue_tail;
393 } dhcp_failover_state_t;
395 extern int check_secs_byte_order;
397 #define DHCP_FAILOVER_VERSION 1
#define OMAPI_OBJECT_PREAMBLE
struct iaddr server_identifier