diff --git a/src/osmo_ms_driver/event_server.py b/src/osmo_ms_driver/event_server.py
new file mode 100644
index 0000000..6b0232b
--- /dev/null
+++ b/src/osmo_ms_driver/event_server.py
@@ -0,0 +1,33 @@
+
+from osmo_gsm_tester import log
+from functools import partial
+
+import time
+
+
+class EventServer(log.Origin):
+    """
+    Listen for AF_UNIX/SOCK_DGRAM messages from test apps and
+    forward them.
+    """
+    def __init__(self, name, path):
+        super().__init__(log.C_RUN, name)
+        self._path = path
+        self._handlers = []
+
+    def register(self, cb):
+        self._handlers.append(cb)
+
+    def server_path(self):
+        return self._path
+
+    def listen(self, loop):
+        self._server = loop.create_unix_server(self.read_cb, self._path)
+
+    def read_cb(self, obj, mask):
+        # addresss doesn't give us the remote but currently we don't
+        # need it.
+        (data, address) = self._server.recvfrom(4096)
+        now = time.clock_gettime(time.CLOCK_MONOTONIC)
+        for handler in self._handlers:
+            handler(data, now)
