-/* $OpenBSD: rtkit.c,v 1.10 2022/12/03 13:42:23 kettenis Exp $ */
+/* $OpenBSD: rtkit.c,v 1.11 2022/12/06 23:18:54 kettenis Exp $ */
/*
* Copyright (c) 2021 Mark Kettenis <kettenis@openbsd.org>
*
#define RTKIT_EP_SYSLOG 2
#define RTKIT_EP_DEBUG 3
#define RTKIT_EP_IOREPORT 4
+#define RTKIT_EP_OSLOG 8
+#define RTKIT_EP_UNKNOWN 10
#define RTKIT_MGMT_TYPE(x) (((x) >> 52) & 0xff)
#define RTKIT_MGMT_TYPE_SHIFT 52
#define RTKIT_IOREPORT_UNKNOWN1 8
#define RTKIT_IOREPORT_UNKNOWN2 12
+#define RTKIT_OSLOG_TYPE(x) (((x) >> 56) & 0xff)
+#define RTKIT_OSLOG_TYPE_SHIFT 56
+#define RTKIT_OSLOG_INIT 1ULL
+#define RTKIT_OSLOG_ACK 3ULL
+
/* Versions we support. */
#define RTKIT_MINVER 11
#define RTKIT_MAXVER 12
case RTKIT_EP_SYSLOG:
case RTKIT_EP_DEBUG:
case RTKIT_EP_IOREPORT:
+ case RTKIT_EP_OSLOG:
error = rtkit_start(state, endpoint);
if (error)
return error;
break;
+ case RTKIT_EP_UNKNOWN:
+ break;
default:
printf("%s: skipping endpoint %d\n",
__func__, endpoint);
return 0;
}
+int
+rtkit_handle_oslog(struct rtkit_state *state, struct aplmbox_msg *msg)
+{
+ struct mbox_channel *mc = state->mc;
+ int error;
+
+ switch (RTKIT_OSLOG_TYPE(msg->data0)) {
+ case RTKIT_OSLOG_INIT:
+ error = rtkit_send(mc, RTKIT_EP_OSLOG,
+ 0, RTKIT_OSLOG_ACK << RTKIT_OSLOG_TYPE_SHIFT);
+ if (error)
+ return error;
+ break;
+ default:
+ printf("%s: unhandled oslog event 0x%016llx\n",
+ __func__, msg->data0);
+ return EIO;
+ }
+
+ return 0;
+}
+
int
rtkit_poll(struct rtkit_state *state)
{
if (error)
return error;
break;
+ case RTKIT_EP_OSLOG:
+ error = rtkit_handle_oslog(state, &msg);
+ if (error)
+ return error;
+ break;
default:
if (endpoint >= 32 && endpoint < 64 &&
state->callback[endpoint - 32]) {