int imsg_composev_event(struct imsgev *iev, u_int16_t type, u_int32_t peerid, pid_t pid, int fd, const struct iovec *iov, int iovcnt) { int ret; if ((ret = imsg_composev(&iev->ibuf, type, peerid, pid, fd, iov, iovcnt)) == -1) return (ret); imsg_event_add(iev); return (ret); }
void m_composev(struct mproc *p, uint32_t type, uint32_t peerid, pid_t pid, int fd, const struct iovec *iov, int n) { size_t len; int i; imsg_composev(&p->imsgbuf, type, peerid, pid, fd, iov, n); len = 0; for (i = 0; i < n; i++) len += iov[i].iov_len; if (type != IMSG_STAT_DECREMENT && type != IMSG_STAT_INCREMENT) log_trace(TRACE_MPROC, "mproc: %s -> %s : %zu %s", proc_name(smtpd_process), proc_name(p->proc), len, imsg_to_str(type)); mproc_event_add(p); }
int snmp_element(const char *oid, enum snmp_type type, void *buf, int64_t val) { struct iovec iov[2]; int iovcnt = 2; u_int32_t d; u_int64_t l; struct snmp_imsg sm; DPRINTF("%s: oid %s type %d buf %p val %lld", __func__, oid, type, buf, val); bzero(&iov, sizeof(iov)); switch (type) { case SNMP_COUNTER32: case SNMP_GAUGE32: case SNMP_TIMETICKS: case SNMP_OPAQUE: case SNMP_UINTEGER32: case SNMP_INTEGER32: d = (u_int32_t)val; iov[1].iov_base = &d; iov[1].iov_len = sizeof(d); break; case SNMP_COUNTER64: l = (u_int64_t)val; iov[1].iov_base = &l; iov[1].iov_len = sizeof(l); break; case SNMP_NSAPADDR: case SNMP_BITSTRING: case SNMP_OCTETSTRING: case SNMP_IPADDR: case SNMP_OBJECT: iov[1].iov_base = buf; if (val == 0) iov[1].iov_len = strlen((char *)buf); else iov[1].iov_len = val; break; case SNMP_NULL: iovcnt--; break; } bzero(&sm, sizeof(sm)); if (strlcpy(sm.snmp_oid, oid, sizeof(sm.snmp_oid)) >= sizeof(sm.snmp_oid)) return (-1); sm.snmp_type = type; sm.snmp_len = iov[1].iov_len; iov[0].iov_base = &sm; iov[0].iov_len = sizeof(sm); if (imsg_composev(&iev_snmp->ibuf, IMSG_SNMP_ELEMENT, 0, 0, -1, iov, iovcnt) == -1) return (-1); imsg_event_add(iev_snmp); return (0); }