Commit Diff


commit - 3a342b20f6170a49ef823429c0897bd118135716
commit + 141b9058ce43c28db842829304e8909a29d231bb
blob - 977151b0b6ef55525ee9f8ecb1844b6b937401c8
blob + a1c4eda7d85c92a94dfc891d2e39080a857d6c76
--- ca.c
+++ ca.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: ca.c,v 1.14 2015/10/10 00:16:23 benno Exp $	*/
+/*	$OpenBSD: ca.c,v 1.15 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2014 Reyk Floeter <reyk@openbsd.org>
@@ -217,7 +217,7 @@ ca_dispatch_relay(int fd, struct privsep_proc *p, stru
 		}
 
 		proc_composev_imsg(env->sc_ps, PROC_RELAY, cko.cko_proc,
-		    imsg->hdr.type, -1, iov, c);
+		    imsg->hdr.type, -1, -1, iov, c);
 
 		free(to);
 		RSA_free(rsa);
blob - 217dc89f02482c16799c80d8e69547790e93a370
blob + c9990e0add0d4740b72fdf96084681c18841881e
--- check_script.c
+++ check_script.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: check_script.c,v 1.18 2015/01/22 17:42:09 reyk Exp $	*/
+/*	$OpenBSD: check_script.c,v 1.19 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2007 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -52,8 +52,7 @@ check_script(struct relayd *env, struct host *host)
 		fatalx("invalid script path");
 	memcpy(&scr.timeout, &table->conf.timeout, sizeof(scr.timeout));
 
-	proc_compose_imsg(env->sc_ps, PROC_PARENT, 0, IMSG_SCRIPT,
-	    -1, &scr, sizeof(scr));
+	proc_compose(env->sc_ps, PROC_PARENT, IMSG_SCRIPT, &scr, sizeof(scr));
 }
 
 void
blob - 2992df0fc2413cf1b300d8a953307e5d7f73d545
blob + 32852cf182b9aba53a257deb1473cc040be26fb3
--- config.c
+++ config.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: config.c,v 1.25 2015/05/02 13:15:24 claudio Exp $	*/
+/*	$OpenBSD: config.c,v 1.26 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2011 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -220,8 +220,7 @@ config_setreset(struct relayd *env, u_int reset)
 		if ((reset & ps->ps_what[id]) == 0 ||
 		    id == privsep_process)
 			continue;
-		proc_compose_imsg(ps, id, -1, IMSG_CTL_RESET, -1,
-		    &reset, sizeof(reset));
+		proc_compose(ps, id, IMSG_CTL_RESET, &reset, sizeof(reset));
 	}
 
 	return (0);
@@ -279,8 +278,7 @@ config_getcfg(struct relayd *env, struct imsg *imsg)
 	}
 
 	if (privsep_process != PROC_PARENT)
-		proc_compose_imsg(env->sc_ps, PROC_PARENT, -1,
-		    IMSG_CFG_DONE, -1, NULL, 0);
+		proc_compose(env->sc_ps, PROC_PARENT, IMSG_CFG_DONE, NULL, 0);
 
 	return (0);
 }
@@ -313,10 +311,10 @@ config_settable(struct relayd *env, struct table *tb)
 			iov[c++].iov_len = strlen(tb->sendbuf);
 		}
 
-		proc_composev_imsg(ps, id, -1, IMSG_CFG_TABLE, -1, iov, c);
+		proc_composev(ps, id, IMSG_CFG_TABLE, iov, c);
 
 		TAILQ_FOREACH(host, &tb->hosts, entry) {
-			proc_compose_imsg(ps, id, -1, IMSG_CFG_HOST, -1,
+			proc_compose(ps, id, IMSG_CFG_HOST,
 			    &host->conf, sizeof(host->conf));
 		}
 	}
@@ -415,12 +413,12 @@ config_setrdr(struct relayd *env, struct rdr *rdr)
 		DPRINTF("%s: sending rdr %s to %s", __func__,
 		    rdr->conf.name, ps->ps_title[id]);
 
-		proc_compose_imsg(ps, id, -1, IMSG_CFG_RDR, -1,
+		proc_compose(ps, id, IMSG_CFG_RDR,
 		    &rdr->conf, sizeof(rdr->conf));
 
 		TAILQ_FOREACH(virt, &rdr->virts, entry) {
 			virt->rdrid = rdr->conf.id;
-			proc_compose_imsg(ps, id, -1, IMSG_CFG_VIRT, -1,
+			proc_compose(ps, id, IMSG_CFG_VIRT,
 			    virt, sizeof(*virt));
 		}
 	}
@@ -503,11 +501,11 @@ config_setrt(struct relayd *env, struct router *rt)
 		DPRINTF("%s: sending router %s to %s tbl %d", __func__,
 		    rt->rt_conf.name, ps->ps_title[id], rt->rt_conf.gwtable);
 
-		proc_compose_imsg(ps, id, -1, IMSG_CFG_ROUTER, -1,
+		proc_compose(ps, id, IMSG_CFG_ROUTER,
 		    &rt->rt_conf, sizeof(rt->rt_conf));
 
 		TAILQ_FOREACH(nr, &rt->rt_netroutes, nr_entry) {
-			proc_compose_imsg(ps, id, -1, IMSG_CFG_ROUTE, -1,
+			proc_compose(ps, id, IMSG_CFG_ROUTE,
 			    &nr->nr_conf, sizeof(nr->nr_conf));
 		}
 	}
@@ -608,7 +606,7 @@ config_setproto(struct relayd *env, struct protocol *p
 			iov[c++].iov_len = strlen(proto->style);
 		}
 
-		proc_composev_imsg(ps, id, -1, IMSG_CFG_PROTO, -1, iov, c);
+		proc_composev(ps, id, IMSG_CFG_PROTO, iov, c);
 	}
 
 	return (0);
@@ -659,8 +657,7 @@ config_setrule(struct relayd *env, struct protocol *pr
 					rule->rule_ctl.kvlen[i].value = -1;
 			}
 
-			proc_composev_imsg(ps, id, -1,
-			    IMSG_CFG_RULE, -1, iov, c);
+			proc_composev(ps, id, IMSG_CFG_RULE, iov, c);
 		}
 	}
 
@@ -837,11 +834,10 @@ config_setrelay(struct relayd *env, struct relay *rlay
 				if ((fd = dup(rlay->rl_s)) == -1)
 					return (-1);
 				proc_composev_imsg(ps, id, n,
-				    IMSG_CFG_RELAY, fd, iov, c);
+				    IMSG_CFG_RELAY, -1, fd, iov, c);
 			}
 		} else {
-			proc_composev_imsg(ps, id, -1, IMSG_CFG_RELAY, -1,
-			    iov, c);
+			proc_composev(ps, id, IMSG_CFG_RELAY, iov, c);
 		}
 
 		if ((what & CONFIG_TABLES) == 0)
@@ -858,8 +854,7 @@ config_setrelay(struct relayd *env, struct relay *rlay
 			iov[c].iov_base = &crt;
 			iov[c++].iov_len = sizeof(crt);
 
-			proc_composev_imsg(ps, id, -1,
-			    IMSG_CFG_RELAY_TABLE, -1, iov, c);
+			proc_composev(ps, id, IMSG_CFG_RELAY_TABLE, iov, c);
 		}
 	}
 
blob - 44ad48655bf40c7280a7f925ba74344ed99d1836
blob + bb0a40474e9e9ca46e8eb9f1a35bdd721986a35a
--- control.c
+++ control.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: control.c,v 1.50 2015/11/28 09:52:07 reyk Exp $	*/
+/*	$OpenBSD: control.c,v 1.51 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -357,8 +357,7 @@ control_dispatch_imsg(int fd, short event, void *arg)
 			proc_forward_imsg(env->sc_ps, &imsg, PROC_PARENT, -1);
 			break;
 		case IMSG_CTL_POLL:
-			proc_compose_imsg(env->sc_ps, PROC_HCE, -1,
-			    IMSG_CTL_POLL, -1, NULL, 0);
+			proc_compose(env->sc_ps, PROC_HCE, IMSG_CTL_POLL, NULL, 0);
 			imsg_compose_event(&c->iev, IMSG_CTL_OK,
 			    0, 0, -1, NULL, 0);
 			break;
blob - 0c520a27577aab8779f4d21abde7993ab8174f3c
blob + 78832dfadd553c9397ae8c326eee6c7f3ec291c7
--- hce.c
+++ hce.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: hce.c,v 1.70 2015/11/28 18:10:12 benno Exp $	*/
+/*	$OpenBSD: hce.c,v 1.71 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2006 Pierre-Yves Ritschard <pyr@openbsd.org>
@@ -133,7 +133,7 @@ hce_launch_checks(int fd, short event, void *arg)
 	/*
 	 * notify pfe checks are done and schedule next check
 	 */
-	proc_compose_imsg(env->sc_ps, PROC_PFE, -1, IMSG_SYNC, -1, NULL, 0);
+	proc_compose(env->sc_ps, PROC_PFE, IMSG_SYNC, NULL, 0);
 	TAILQ_FOREACH(table, env->sc_tables, entry) {
 		TAILQ_FOREACH(host, &table->hosts, entry) {
 			if ((host->flags & F_CHECK_DONE) == 0)
@@ -243,8 +243,7 @@ hce_notify_done(struct host *host, enum host_error he)
 	if (msg)
 		log_debug("%s: %s (%s)", __func__, host->conf.name, msg);
 
-	proc_compose_imsg(env->sc_ps, PROC_PFE, -1, IMSG_HOST_STATUS,
-	    -1, &st, sizeof(st));
+	proc_compose(env->sc_ps, PROC_PFE, IMSG_HOST_STATUS, &st, sizeof(st));
 	if (host->up != host->last_up)
 		logopt = RELAYD_OPT_LOGUPDATE;
 	else
blob - 5462ecf6099fe98e423ef6262764d389f81bbfb7
blob + 8f2c11943bc691092edae036e318d9fcaa4c4f17
--- pfe.c
+++ pfe.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: pfe.c,v 1.81 2015/11/29 01:20:33 benno Exp $	*/
+/*	$OpenBSD: pfe.c,v 1.82 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2006 Pierre-Yves Ritschard <pyr@openbsd.org>
@@ -130,8 +130,8 @@ pfe_dispatch_hce(int fd, struct privsep_proc *p, struc
 			break;
 
 		/* Forward to relay engine(s) */
-		proc_compose_imsg(env->sc_ps, PROC_RELAY, -1,
-		    IMSG_HOST_STATUS, -1, &st, sizeof(st));
+		proc_compose(env->sc_ps, PROC_RELAY,
+		    IMSG_HOST_STATUS, &st, sizeof(st));
 
 		if ((table = table_find(env, host->conf.tableid))
 		    == NULL)
@@ -244,7 +244,7 @@ pfe_dispatch_relay(int fd, struct privsep_proc *p, str
 		if (natlook(env, &cnl) != 0)
 			cnl.in = -1;
 		proc_compose_imsg(env->sc_ps, PROC_RELAY, cnl.proc,
-		    IMSG_NATLOOK, -1, &cnl, sizeof(cnl));
+		    IMSG_NATLOOK, -1, -1, &cnl, sizeof(cnl));
 		break;
 	case IMSG_STATISTICS:
 		IMSG_SIZE_CHECK(imsg, &crs);
@@ -421,7 +421,7 @@ show_sessions(struct ctl_conn *c)
 		 * Request all the running sessions from the process
 		 */
 		proc_compose_imsg(env->sc_ps, PROC_RELAY, proc,
-		    IMSG_CTL_SESSION, -1, &cid, sizeof(cid));
+		    IMSG_CTL_SESSION, -1, -1, &cid, sizeof(cid));
 		c->waiting++;
 	}
 }
@@ -509,11 +509,11 @@ disable_table(struct ctl_conn *c, struct ctl_id *id)
 	table->up = 0;
 	TAILQ_FOREACH(host, &table->hosts, entry)
 		host->up = HOST_UNKNOWN;
-	proc_compose_imsg(env->sc_ps, PROC_HCE, -1, IMSG_TABLE_DISABLE, -1,
+	proc_compose(env->sc_ps, PROC_HCE, IMSG_TABLE_DISABLE,
 	    &table->conf.id, sizeof(table->conf.id));
 
 	/* Forward to relay engine(s) */
-	proc_compose_imsg(env->sc_ps, PROC_RELAY, -1, IMSG_TABLE_DISABLE, -1,
+	proc_compose(env->sc_ps, PROC_RELAY, IMSG_TABLE_DISABLE,
 	    &table->conf.id, sizeof(table->conf.id));
 
 	log_debug("%s: table %d", __func__, table->conf.id);
@@ -545,11 +545,11 @@ enable_table(struct ctl_conn *c, struct ctl_id *id)
 	table->up = 0;
 	TAILQ_FOREACH(host, &table->hosts, entry)
 		host->up = HOST_UNKNOWN;
-	proc_compose_imsg(env->sc_ps, PROC_HCE, -1, IMSG_TABLE_ENABLE, -1,
+	proc_compose(env->sc_ps, PROC_HCE, IMSG_TABLE_ENABLE,
 	    &table->conf.id, sizeof(table->conf.id));
 
 	/* Forward to relay engine(s) */
-	proc_compose_imsg(env->sc_ps, PROC_RELAY, -1, IMSG_TABLE_ENABLE, -1,
+	proc_compose(env->sc_ps, PROC_RELAY, IMSG_TABLE_ENABLE,
 	    &table->conf.id, sizeof(table->conf.id));
 
 	log_debug("%s: table %d", __func__, table->conf.id);
@@ -590,11 +590,11 @@ disable_host(struct ctl_conn *c, struct ctl_id *id, st
 	host->check_cnt = 0;
 	host->up_cnt = 0;
 
-	proc_compose_imsg(env->sc_ps, PROC_HCE, -1, IMSG_HOST_DISABLE, -1,
+	proc_compose(env->sc_ps, PROC_HCE, IMSG_HOST_DISABLE,
 	    &host->conf.id, sizeof(host->conf.id));
 
 	/* Forward to relay engine(s) */
-	proc_compose_imsg(env->sc_ps, PROC_RELAY, -1, IMSG_HOST_DISABLE, -1,
+	proc_compose(env->sc_ps, PROC_RELAY, IMSG_HOST_DISABLE,
 	    &host->conf.id, sizeof(host->conf.id));
 	log_debug("%s: host %d", __func__, host->conf.id);
 
@@ -630,11 +630,11 @@ enable_host(struct ctl_conn *c, struct ctl_id *id, str
 	host->flags &= ~(F_DEL);
 	host->flags &= ~(F_ADD);
 
-	proc_compose_imsg(env->sc_ps, PROC_HCE, -1, IMSG_HOST_ENABLE, -1,
+	proc_compose(env->sc_ps, PROC_HCE, IMSG_HOST_ENABLE,
 	    &host->conf.id, sizeof (host->conf.id));
 
 	/* Forward to relay engine(s) */
-	proc_compose_imsg(env->sc_ps, PROC_RELAY, -1, IMSG_HOST_ENABLE, -1,
+	proc_compose(env->sc_ps, PROC_RELAY, IMSG_HOST_ENABLE,
 	    &host->conf.id, sizeof(host->conf.id));
 
 	log_debug("%s: host %d", __func__, host->conf.id);
@@ -749,7 +749,7 @@ pfe_sync(void)
 		    demote.level, table->conf.name, table->conf.demote_group);
 		(void)strlcpy(demote.group, table->conf.demote_group,
 		    sizeof(demote.group));
-		proc_compose_imsg(env->sc_ps, PROC_PARENT, -1, IMSG_DEMOTE, -1,
+		proc_compose(env->sc_ps, PROC_PARENT, IMSG_DEMOTE,
 		    &demote, sizeof(demote));
 	}
 }
blob - fa5336425d6401a86608cb63900fc85e50db52b8
blob + 731060e27469caa9326b564ea25235ea0b5d90ae
--- pfe_route.c
+++ pfe_route.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: pfe_route.c,v 1.9 2015/01/22 17:42:09 reyk Exp $	*/
+/*	$OpenBSD: pfe_route.c,v 1.10 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2009 - 2011 Reyk Floeter <reyk@openbsd.org>
@@ -97,8 +97,8 @@ sync_routes(struct relayd *env, struct router *rt)
 			memcpy(&crt.host, &host->conf, sizeof(host->conf));
 			memcpy(&crt.rt, &rt->rt_conf, sizeof(rt->rt_conf));
 
-			proc_compose_imsg(env->sc_ps, PROC_PARENT, -1,
-			    IMSG_RTMSG, -1, &crt, sizeof(crt));
+			proc_compose(env->sc_ps, PROC_PARENT,
+			    IMSG_RTMSG, &crt, sizeof(crt));
 		}
 	}
 }
blob - ab283e7615b049906b5fa761a8ad0f6dc2c23785
blob + 5d93bc1a041764bb20b72b0d09def3987439729d
--- proc.c
+++ proc.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: proc.c,v 1.24 2015/11/28 09:52:07 reyk Exp $	*/
+/*	$OpenBSD: proc.c,v 1.25 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2010 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -576,14 +576,14 @@ proc_range(struct privsep *ps, enum privsep_procid id,
 
 int
 proc_compose_imsg(struct privsep *ps, enum privsep_procid id, int n,
-    uint16_t type, int fd, void *data, uint16_t datalen)
+    uint16_t type, uint32_t peerid, int fd, void *data, uint16_t datalen)
 {
 	int	 m;
 
 	proc_range(ps, id, &n, &m);
 	for (; n < m; n++) {
 		if (imsg_compose_event(&ps->ps_ievs[id][n],
-		    type, -1, 0, fd, data, datalen) == -1)
+		    type, peerid, 0, fd, data, datalen) == -1)
 			return (-1);
 	}
 
@@ -591,26 +591,40 @@ proc_compose_imsg(struct privsep *ps, enum privsep_pro
 }
 
 int
+proc_compose(struct privsep *ps, enum privsep_procid id,
+    uint16_t type, void *data, uint16_t datalen)
+{
+	return (proc_compose_imsg(ps, id, -1, type, -1, -1, data, datalen));
+}
+
+int
 proc_composev_imsg(struct privsep *ps, enum privsep_procid id, int n,
-    uint16_t type, int fd, const struct iovec *iov, int iovcnt)
+    uint16_t type, uint32_t peerid, int fd, const struct iovec *iov, int iovcnt)
 {
 	int	 m;
 
 	proc_range(ps, id, &n, &m);
 	for (; n < m; n++)
 		if (imsg_composev_event(&ps->ps_ievs[id][n],
-		    type, -1, 0, fd, iov, iovcnt) == -1)
+		    type, peerid, 0, fd, iov, iovcnt) == -1)
 			return (-1);
 
 	return (0);
 }
 
 int
+proc_composev(struct privsep *ps, enum privsep_procid id,
+    uint16_t type, const struct iovec *iov, int iovcnt)
+{
+	return (proc_composev_imsg(ps, id, -1, type, -1, -1, iov, iovcnt));
+}
+
+int
 proc_forward_imsg(struct privsep *ps, struct imsg *imsg,
     enum privsep_procid id, int n)
 {
 	return (proc_compose_imsg(ps, id, n, imsg->hdr.type,
-	    imsg->fd, imsg->data, IMSG_DATA_SIZE(imsg)));
+	    imsg->hdr.peerid, imsg->fd, imsg->data, IMSG_DATA_SIZE(imsg)));
 }
 
 struct imsgbuf *
blob - 1bbc05b5c97a133efb5d49694beb9b233eb0e175
blob + a6ffe040ba5f68654461504da28dcedc55c545c7
--- relay.c
+++ relay.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: relay.c,v 1.199 2015/11/28 09:52:07 reyk Exp $	*/
+/*	$OpenBSD: relay.c,v 1.200 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2006 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -340,14 +340,13 @@ relay_init(struct privsep *ps, struct privsep_proc *p,
 void
 relay_session_publish(struct rsession *s)
 {
-	proc_compose_imsg(env->sc_ps, PROC_PFE, -1, IMSG_SESS_PUBLISH, -1,
-	    s, sizeof(*s));
+	proc_compose(env->sc_ps, PROC_PFE, IMSG_SESS_PUBLISH, s, sizeof(*s));
 }
 
 void
 relay_session_unpublish(struct rsession *s)
 {
-	proc_compose_imsg(env->sc_ps, PROC_PFE, -1, IMSG_SESS_UNPUBLISH, -1,
+	proc_compose(env->sc_ps, PROC_PFE, IMSG_SESS_UNPUBLISH,
 	    &s->se_id, sizeof(s->se_id));
 }
 
@@ -396,7 +395,7 @@ relay_statistics(int fd, short events, void *arg)
 
 		crs.id = rlay->rl_conf.id;
 		crs.proc = proc_id;
-		proc_compose_imsg(env->sc_ps, PROC_PFE, -1, IMSG_STATISTICS, -1,
+		proc_compose(env->sc_ps, PROC_PFE, IMSG_STATISTICS,
 		    &crs, sizeof(crs));
 
 		for (con = SPLAY_ROOT(&rlay->rl_sessions);
@@ -1153,7 +1152,7 @@ relay_accept(int fd, short event, void *arg)
 			return;
 		}
 
-		proc_compose_imsg(env->sc_ps, PROC_PFE, -1, IMSG_NATLOOK, -1,
+		proc_compose(env->sc_ps, PROC_PFE, IMSG_NATLOOK,
 		    cnl, sizeof(*cnl));
 
 		/* Schedule timeout */
@@ -1390,8 +1389,8 @@ relay_bindanyreq(struct rsession *con, in_port_t port,
 	bnd.bnd_port = port;
 	bnd.bnd_proto = proto;
 	bcopy(&con->se_in.ss, &bnd.bnd_ss, sizeof(bnd.bnd_ss));
-	proc_compose_imsg(env->sc_ps, PROC_PARENT, -1, IMSG_BINDANY,
-	    -1, &bnd, sizeof(bnd));
+	proc_compose(env->sc_ps, PROC_PARENT, IMSG_BINDANY,
+	    &bnd, sizeof(bnd));
 
 	/* Schedule timeout */
 	evtimer_set(&con->se_ev, relay_bindany, con);
@@ -1835,13 +1834,12 @@ relay_dispatch_pfe(int fd, struct privsep_proc *p, str
 			    &rlay->rl_sessions) {
 				memcpy(&se, con, sizeof(se));
 				se.se_cid = cid;
-				proc_compose_imsg(env->sc_ps, p->p_id, -1,
-				    IMSG_CTL_SESSION,
-				    -1, &se, sizeof(se));
+				proc_compose(env->sc_ps, p->p_id,
+				    IMSG_CTL_SESSION, &se, sizeof(se));
 			}
 		}
-		proc_compose_imsg(env->sc_ps, p->p_id, -1, IMSG_CTL_END,
-		    -1, &cid, sizeof(cid));
+		proc_compose(env->sc_ps, p->p_id, IMSG_CTL_END,
+		    &cid, sizeof(cid));
 		break;
 	default:
 		return (-1);
blob - 94d85d9670edc3ca4706e2988c9a2b3499664969
blob + e4167eb352c68a08197f83e7381e7e78bc9ad7e5
--- relay_udp.c
+++ relay_udp.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: relay_udp.c,v 1.40 2015/11/28 09:52:07 reyk Exp $	*/
+/*	$OpenBSD: relay_udp.c,v 1.41 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2007 - 2013 Reyk Floeter <reyk@openbsd.org>
@@ -303,8 +303,8 @@ relay_udp_server(int fd, short sig, void *arg)
 		cnl->proto = IPPROTO_UDP;
 		bcopy(&con->se_in.ss, &cnl->src, sizeof(cnl->src));
 		bcopy(&rlay->rl_conf.ss, &cnl->dst, sizeof(cnl->dst));
-		proc_compose_imsg(env->sc_ps, PROC_PFE, -1,
-		    IMSG_NATLOOK, -1, cnl, sizeof(*cnl));
+		proc_compose(env->sc_ps, PROC_PFE,
+		    IMSG_NATLOOK, cnl, sizeof(*cnl));
 
 		/* Schedule timeout */
 		evtimer_set(&con->se_ev, relay_natlook, con);
blob - 588edb14cd97265a69d005d1e9d7bdbb3a55a3a2
blob + 97186aeac8f496465ac6a609f8533a8774c67b4e
--- relayd.c
+++ relayd.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: relayd.c,v 1.148 2015/11/29 01:20:33 benno Exp $	*/
+/*	$OpenBSD: relayd.c,v 1.149 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2007 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -345,8 +345,8 @@ parent_configure(struct relayd *env)
 		} else
 			s = -1;
 
-		proc_compose_imsg(env->sc_ps, id, -1, IMSG_CFG_DONE, s,
-		    &cf, sizeof(cf));
+		proc_compose_imsg(env->sc_ps, id, -1, IMSG_CFG_DONE, -1,
+		    s, &cf, sizeof(cf));
 	}
 
 	ret = 0;
@@ -405,8 +405,7 @@ parent_configure_done(struct relayd *env)
 			if (id == privsep_process)
 				continue;
 
-			proc_compose_imsg(env->sc_ps, id, -1, IMSG_CTL_START,
-			    -1, NULL, 0);
+			proc_compose(env->sc_ps, id, IMSG_CTL_START, NULL, 0);
 		}
 	}
 }
@@ -489,8 +488,7 @@ parent_dispatch_hce(int fd, struct privsep_proc *p, st
 		IMSG_SIZE_CHECK(imsg, &scr);
 		bcopy(imsg->data, &scr, sizeof(scr));
 		scr.retval = script_exec(env, &scr);
-		proc_compose_imsg(ps, PROC_HCE, -1, IMSG_SCRIPT,
-		    -1, &scr, sizeof(scr));
+		proc_compose(ps, PROC_HCE, IMSG_SCRIPT, &scr, sizeof(scr));
 		break;
 	case IMSG_CFG_DONE:
 		parent_configure_done(env);
@@ -528,7 +526,7 @@ parent_dispatch_relay(int fd, struct privsep_proc *p, 
 		}
 		s = bindany(&bnd);
 		proc_compose_imsg(ps, PROC_RELAY, bnd.bnd_proc,
-		    IMSG_BINDANY, s, &bnd.bnd_id, sizeof(bnd.bnd_id));
+		    IMSG_BINDANY, -1, s, &bnd.bnd_id, sizeof(bnd.bnd_id));
 		break;
 	case IMSG_CFG_DONE:
 		parent_configure_done(env);
blob - 71b4995fec8e2280fea3dcc6ae233937e20b0b5c
blob + 6ff019ecd307bcfcf9254a578b0c60275180bc6c
--- relayd.h
+++ relayd.h
@@ -1,4 +1,4 @@
-/*	$OpenBSD: relayd.h,v 1.219 2015/11/29 01:20:33 benno Exp $	*/
+/*	$OpenBSD: relayd.h,v 1.220 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2006 - 2015 Reyk Floeter <reyk@openbsd.org>
@@ -1357,11 +1357,15 @@ pid_t	 proc_run(struct privsep *, struct privsep_proc 
 	    void (*)(struct privsep *, struct privsep_proc *, void *), void *);
 void	 proc_range(struct privsep *, enum privsep_procid, int *, int *);
 int	 proc_compose_imsg(struct privsep *, enum privsep_procid, int,
-	    u_int16_t, int, void *, u_int16_t);
+	    u_int16_t, u_int32_t, int, void *, u_int16_t);
+int	 proc_compose(struct privsep *, enum privsep_procid,
+	    uint16_t, void *, uint16_t);
 int	 proc_composev_imsg(struct privsep *, enum privsep_procid, int,
-	    u_int16_t, int, const struct iovec *, int);
+	    u_int16_t, u_int32_t, int, const struct iovec *, int);
 int	 proc_forward_imsg(struct privsep *, struct imsg *,
 	    enum privsep_procid, int);
+int	 proc_composev(struct privsep *, enum privsep_procid,
+	    uint16_t, const struct iovec *, int);
 struct imsgbuf *
 	 proc_ibuf(struct privsep *, enum privsep_procid, int);
 struct imsgev *
blob - e889b0a43b7b6f48d17070bbab932aa87eaa14c3
blob + 6c3d3a694588a559fcfb30c75e649ec9a3aa973f
--- snmp.c
+++ snmp.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: snmp.c,v 1.24 2015/11/28 09:52:07 reyk Exp $	*/
+/*	$OpenBSD: snmp.c,v 1.25 2015/12/02 13:41:27 reyk Exp $	*/
 
 /*
  * Copyright (c) 2008 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -134,8 +134,7 @@ snmp_init(struct relayd *env, enum privsep_procid id)
 
 	snmp_procid = id;
 
-	proc_compose_imsg(env->sc_ps, snmp_procid, -1,
-	    IMSG_SNMPSOCK, -1, NULL, 0);
+	proc_compose(env->sc_ps, snmp_procid, IMSG_SNMPSOCK, NULL, 0);
 }
 
 void
@@ -158,7 +157,7 @@ snmp_setsock(struct relayd *env, enum privsep_procid i
 		s = -1;
 	}
  done:
-	proc_compose_imsg(env->sc_ps, id, -1, IMSG_SNMPSOCK, s, NULL, 0);
+	proc_compose_imsg(env->sc_ps, id, -1, IMSG_SNMPSOCK, -1, s, NULL, 0);
 }
 
 int
@@ -243,8 +242,7 @@ snmp_sock(int fd, short event, void *arg)
 	env->sc_snmp = -1;
 	snmp_agentx = NULL;
  reopen:
-	proc_compose_imsg(env->sc_ps, snmp_procid, -1,
-	    IMSG_SNMPSOCK, -1, NULL, 0);
+	proc_compose(env->sc_ps, snmp_procid, IMSG_SNMPSOCK, NULL, 0);
 	return;
 }
 
@@ -272,8 +270,7 @@ snmp_agentx_process(struct agentx_handle *h, struct ag
 		snmp_agentx_free(snmp_agentx);
 		env->sc_snmp = -1;
 		snmp_agentx = NULL;
-		proc_compose_imsg(env->sc_ps, snmp_procid, -1,
-		    IMSG_SNMPSOCK, -1, NULL, 0);
+		proc_compose(env->sc_ps, snmp_procid, IMSG_SNMPSOCK, NULL, 0);
 		break;
 
 	case AGENTX_GET_BULK: