Index: dhcpd.c =================================================================== RCS file: /cvs/src/usr.sbin/dhcpd/dhcpd.c,v diff -u -p -r1.60 dhcpd.c --- dhcpd.c 21 Aug 2024 09:19:55 -0000 1.60 +++ dhcpd.c 20 May 2025 04:40:59 -0000 @@ -204,8 +204,7 @@ main(int argc, char *argv[]) fatal("setrtable"); if (syncsend || syncrecv) { - syncfd = sync_init(sync_iface, sync_baddr, sync_port); - if (syncfd == -1) + if (sync_init(sync_iface, sync_baddr, sync_port) == -1) err(1, "sync init"); } Index: dispatch.c =================================================================== RCS file: /cvs/src/usr.sbin/dhcpd/dispatch.c,v diff -u -p -r1.45 dispatch.c --- dispatch.c 2 Sep 2023 10:18:45 -0000 1.45 +++ dispatch.c 20 May 2025 04:40:59 -0000 @@ -67,8 +67,6 @@ #include "log.h" #include "sync.h" -extern int syncfd; - struct interface_info *interfaces; struct protocol *protocols; struct dhcpd_timeout *timeouts; @@ -309,8 +307,6 @@ dispatch(void) for (nfds = 0, l = protocols; l; l = l->next) nfds++; - if (syncfd != -1) - nfds++; if (nfds > nfds_max) { fds = reallocarray(fds, nfds, sizeof(struct pollfd)); if (fds == NULL) @@ -363,12 +359,6 @@ another: if (i == 0) fatalx("No live interfaces to poll on - exiting."); - if (syncfd != -1) { - /* add syncer */ - fds[i].fd = syncfd; - fds[i].events = POLLIN; - } - /* Wait for a packet or a timeout... */ switch (poll(fds, nfds, to_msec)) { case -1: @@ -392,8 +382,6 @@ another: } ++i; } - if ((syncfd != -1) && (fds[i].revents & (POLLIN | POLLHUP))) - sync_recv(); interfaces_invalidated = 0; } } Index: sync.c =================================================================== RCS file: /cvs/src/usr.sbin/dhcpd/sync.c,v diff -u -p -r1.25 sync.c --- sync.c 24 Aug 2024 08:35:24 -0000 1.25 +++ sync.c 20 May 2025 04:40:59 -0000 @@ -61,6 +61,7 @@ struct sync_host { }; LIST_HEAD(synchosts, sync_host) sync_hosts = LIST_HEAD_INITIALIZER(sync_hosts); +void sync_recv(struct protocol *); void sync_send(struct iovec *, int); int @@ -223,6 +224,8 @@ sync_init(const char *iface, const char sendmcast ? "" : "receive ", ttl, inet_ntoa(sync_out.sin_addr), port); + add_protocol("sync", syncfd, sync_recv, NULL); + return (syncfd); fail: @@ -231,7 +234,7 @@ sync_init(const char *iface, const char } void -sync_recv(void) +sync_recv(struct protocol *protocol) { struct dhcp_synchdr *hdr; struct sockaddr_in addr; Index: sync.h =================================================================== RCS file: /cvs/src/usr.sbin/dhcpd/sync.h,v diff -u -p -r1.5 sync.h --- sync.h 4 Oct 2016 22:47:51 -0000 1.5 +++ sync.h 20 May 2025 04:40:59 -0000 @@ -67,9 +67,7 @@ struct dhcp_synctlv_lease { #define DHCP_SYNC_END 0x0000 #define DHCP_SYNC_LEASE 0x0001 -extern int syncfd; extern int sync_init(const char *, const char *, u_short); extern int sync_addhost(const char *, u_short); -extern void sync_recv(void); extern void sync_lease(struct lease *); #endif /* _DHCPD_SYNC */ Index: udpsock.c =================================================================== RCS file: /cvs/src/usr.sbin/dhcpd/udpsock.c,v diff -u -p -r1.11 udpsock.c --- udpsock.c 28 Jun 2019 13:32:47 -0000 1.11 +++ udpsock.c 20 May 2025 04:40:59 -0000 @@ -74,7 +74,7 @@ udpsock_startup(struct in_addr bindaddr) if (bind(sock, (struct sockaddr *)&sin4, sizeof(sin4)) != 0) fatal("bind failed for udp"); - add_protocol("udp", sock, udpsock_handler, (void *)(intptr_t)udpsock); + add_protocol("udp", sock, udpsock_handler, &udpsock); log_info("Listening on %s:%d/udp.", inet_ntoa(sin4.sin_addr), ntohs(server_port));