1*d10ef319Skrw /* $OpenBSD: sync.h,v 1.5 2016/10/04 22:47:51 krw Exp $ */ 25f515bebSbeck 35f515bebSbeck /* 45f515bebSbeck * Copyright (c) 2008, Bob Beck <beck@openbsd.org> 55f515bebSbeck * Copyright (c) 2006, 2007 Reyk Floeter <reyk@openbsd.org> 65f515bebSbeck * 75f515bebSbeck * Permission to use, copy, modify, and distribute this software for any 85f515bebSbeck * purpose with or without fee is hereby granted, provided that the above 95f515bebSbeck * copyright notice and this permission notice appear in all copies. 105f515bebSbeck * 115f515bebSbeck * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 125f515bebSbeck * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 135f515bebSbeck * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 145f515bebSbeck * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 155f515bebSbeck * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 165f515bebSbeck * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 175f515bebSbeck * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 185f515bebSbeck */ 195f515bebSbeck 205f515bebSbeck #ifndef _DHCPD_SYNC 215f515bebSbeck #define _DHCPD_SYNC 225f515bebSbeck 235f515bebSbeck /* 245f515bebSbeck * dhcpd(8) synchronisation protocol. 255f515bebSbeck * 265f515bebSbeck * This protocol has been designed for realtime synchronisation between 275f515bebSbeck * multiple machines running dhcpd(8), running the same config. 285f515bebSbeck * It is a simple Type-Length-Value based protocol, it allows easy 295f515bebSbeck * extension with future subtypes and bulk transfers by sending multiple 305f515bebSbeck * entries at once. The unencrypted messages will be authenticated using 315f515bebSbeck * HMAC-SHA1. 325f515bebSbeck * 335f515bebSbeck */ 345f515bebSbeck 355f515bebSbeck #define DHCP_SYNC_VERSION 1 365f515bebSbeck #define DHCP_SYNC_MCASTADDR "224.0.1.240" /* XXX choose valid address */ 375f515bebSbeck #define DHCP_SYNC_MCASTTTL IP_DEFAULT_MULTICAST_TTL 385f515bebSbeck #define DHCP_SYNC_HMAC_LEN 20 /* SHA1 */ 395f515bebSbeck #define DHCP_SYNC_MAXSIZE 1408 405f515bebSbeck #define DHCP_SYNC_KEY "/var/db/dhcpd.key" 415f515bebSbeck 423aa44215Sderaadt #define DHCP_ALIGNBYTES (15) 433aa44215Sderaadt #define DHCP_ALIGN(p) (((u_int)(p) + DHCP_ALIGNBYTES) &~ DHCP_ALIGNBYTES) 443aa44215Sderaadt 455f515bebSbeck struct dhcp_synchdr { 465f515bebSbeck u_int8_t sh_version; 475f515bebSbeck u_int8_t sh_af; 485f515bebSbeck u_int16_t sh_length; 495f515bebSbeck u_int32_t sh_counter; 505f515bebSbeck u_int8_t sh_hmac[DHCP_SYNC_HMAC_LEN]; 513aa44215Sderaadt u_int8_t sh_pad[4]; 525f515bebSbeck } __packed; 535f515bebSbeck 545f515bebSbeck struct dhcp_synctlv_hdr { 555f515bebSbeck u_int16_t st_type; 565f515bebSbeck u_int16_t st_length; 575f515bebSbeck } __packed; 585f515bebSbeck 595f515bebSbeck struct dhcp_synctlv_lease { 60aa92cf00Skrw u_int16_t lv_type; 61aa92cf00Skrw u_int16_t lv_length; 62aa92cf00Skrw u_int32_t lv_starts, lv_ends, lv_timestamp; 63aa92cf00Skrw struct iaddr lv_ip_addr; 64aa92cf00Skrw struct hardware lv_hardware_addr; 655f515bebSbeck } __packed; 665f515bebSbeck 675f515bebSbeck #define DHCP_SYNC_END 0x0000 685f515bebSbeck #define DHCP_SYNC_LEASE 0x0001 695f515bebSbeck 707eab935eSbeck extern int syncfd; 715f515bebSbeck extern int sync_init(const char *, const char *, u_short); 725f515bebSbeck extern int sync_addhost(const char *, u_short); 735f515bebSbeck extern void sync_recv(void); 745f515bebSbeck extern void sync_lease(struct lease *); 755f515bebSbeck #endif /* _DHCPD_SYNC */ 76