xref: /openbsd-src/usr.sbin/dhcpd/sync.h (revision d10ef3191a1074a31c3be9095a67f06a9abfadf2)
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