$NetBSD: patch-ab,v 1.3 2013/05/23 15:46:11 christos Exp $

--- arpd.c.orig	2003-02-08 23:20:40.000000000 -0500
+++ arpd.c	2013-05-23 11:43:08.000000000 -0400
@@ -33,7 +33,7 @@
 #define ARPD_MAX_ACTIVE		600
 #define ARPD_MAX_INACTIVE	300
 
-#define PIDFILE			"/var/run/arpd.pid"
+#define PIDFILE			"/var/run/honeyd-arpd.pid"
 
 struct arp_req {
 	struct addr		pa;
@@ -65,7 +65,6 @@
 static arp_t			*arpd_arp;
 static eth_t			*arpd_eth;
 static struct intf_entry	 arpd_ifent;
-static int			 arpd_sig;
 
 static void
 usage(void)
@@ -265,7 +264,7 @@
 	    spa->addr_ip, tha->addr_eth, tpa->addr_ip);
 	
 	if (op == ARP_OP_REQUEST) {
-		syslog(LOG_DEBUG, __FUNCTION__ ": who-has %s tell %s",
+		syslog(LOG_DEBUG, "%s: who-has %s tell %s", __FUNCTION__,
 		    addr_ntoa(tpa), addr_ntoa(spa));
 	} else if (op == ARP_OP_REPLY) {
 		syslog(LOG_INFO, "arp reply %s is-at %s",
@@ -282,7 +281,7 @@
 	int error;
 
 	if (addr_cmp(addr, &arpd_ifent.intf_addr) == 0) {
-		syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
+		syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
 		    addr_ntoa(addr), addr_ntoa(&arpd_ifent.intf_link_addr));
 		return (0);
 	}
@@ -291,10 +290,10 @@
 	error = arp_get(arpd_arp, &arpent);
 	
 	if (error == -1) {
-		syslog(LOG_DEBUG, __FUNCTION__ ": no entry for %s",
+		syslog(LOG_DEBUG, "%s: no entry for %s", __FUNCTION__,
 		    addr_ntoa(addr));
 	} else {
-		syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
+		syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
 		    addr_ntoa(addr), addr_ntoa(&arpent.arp_ha));
 	}
 	return (error);
@@ -423,7 +422,7 @@
 		if ((req = SPLAY_FIND(tree, &arpd_reqs, &tmp)) != NULL) {
 			addr_pack(&src.arp_ha, ADDR_TYPE_ETH, ETH_ADDR_BITS,
 			    ethip->ar_sha, ETH_ADDR_LEN);
-			syslog(LOG_DEBUG, __FUNCTION__ ": %s at %s",
+			syslog(LOG_DEBUG, "%s: %s at %s", __FUNCTION__,
 			    addr_ntoa(&req->pa), addr_ntoa(&src.arp_ha));
 			
 			/* This address is claimed */
@@ -442,22 +441,23 @@
 		syslog(LOG_ERR, "pcap_dispatch: %s", pcap_geterr(arpd_pcap));
 }
  
-void
-terminate_handler(int sig)
-{
-	extern int event_gotsig;
-
-	event_gotsig = 1;
-	arpd_sig = sig;
-}
+static void 
+arpd_signal(evutil_socket_t fd, short what, void *arg)
 
-int
-arpd_signal(void)
 {
+	int arpd_sig;
+	recv(fd, &arpd_sig, sizeof(arpd_sig), 0);
 	syslog(LOG_INFO, "exiting on signal %d", arpd_sig);
 	arpd_exit(0);
-	/* NOTREACHED */
-	return (-1);
+}
+
+static void
+addsignal(int sig) {
+	struct event sig_ev;
+	int got;
+
+	evsignal_set(&sig_ev, sig, arpd_signal, &got);
+	evsignal_add(&sig_ev, NULL);
 }
 
 int
@@ -516,16 +516,9 @@
 	event_add(&recv_ev, NULL);
 	
 	/* Setup signal handler */
-	if (signal(SIGINT, terminate_handler) == SIG_ERR) {
-		perror("signal");
-		return (-1);
-	}
-	if (signal(SIGTERM, terminate_handler) == SIG_ERR) {
-		perror("signal");
-		return (-1);
-	}
-	event_sigcb = arpd_signal;
-	
+	addsignal(SIGINT);
+	addsignal(SIGTERM);
+
 	event_dispatch();
 
 	return (0);
