diff --git a/utils/mctp-demux-daemon.c b/utils/mctp-demux-daemon.c
index c356769..f9893bb 100644
--- a/utils/mctp-demux-daemon.c
+++ b/utils/mctp-demux-daemon.c
@@ -54,24 +54,24 @@
 };
 
 struct client {
-	bool		active;
-	int		sock;
-	uint8_t		type;
+	bool active;
+	int sock;
+	uint8_t type;
 };
 
 struct ctx {
-	struct mctp	*mctp;
-	struct binding	*binding;
-	bool		verbose;
-	int		local_eid;
-	void		*buf;
-	size_t		buf_size;
+	struct mctp *mctp;
+	struct binding *binding;
+	bool verbose;
+	int local_eid;
+	void *buf;
+	size_t buf_size;
 
-	int		sock;
-	struct pollfd	*pollfds;
+	int sock;
+	struct pollfd *pollfds;
 
-	struct client	*clients;
-	int		n_clients;
+	struct client *clients;
+	int n_clients;
 
 	struct {
 		struct capture binding;
@@ -99,16 +99,16 @@
 		close(client->sock);
 
 		ctx->n_clients--;
-		memmove(&ctx->clients[i], &ctx->clients[i+1],
-				(ctx->n_clients - i) * sizeof(*ctx->clients));
+		memmove(&ctx->clients[i], &ctx->clients[i + 1],
+			(ctx->n_clients - i) * sizeof(*ctx->clients));
 		ctx->clients = realloc(ctx->clients,
-				ctx->n_clients * sizeof(*ctx->clients));
+				       ctx->n_clients * sizeof(*ctx->clients));
 	}
 }
 
-static void
-rx_message(uint8_t eid, bool tag_owner __unused, uint8_t msg_tag __unused,
-	   void *data, void *msg, size_t len)
+static void rx_message(uint8_t eid, bool tag_owner __unused,
+		       uint8_t msg_tag __unused, void *data, void *msg,
+		       size_t len)
 {
 	struct ctx *ctx = data;
 	struct iovec iov[2];
@@ -124,7 +124,7 @@
 
 	if (ctx->verbose)
 		fprintf(stderr, "MCTP message received: len %zd, type %d\n",
-				len, type);
+			len, type);
 
 	memset(&msghdr, 0, sizeof(msghdr));
 	msghdr.msg_iov = iov;
@@ -152,13 +152,12 @@
 
 	if (removed)
 		client_remove_inactive(ctx);
-
 }
 
 static int binding_null_init(struct mctp *mctp __unused,
-		struct binding *binding __unused,
-		mctp_eid_t eid __unused,
-		int n_params, char * const *params __unused)
+			     struct binding *binding __unused,
+			     mctp_eid_t eid __unused, int n_params,
+			     char *const *params __unused)
 {
 	if (n_params != 0) {
 		warnx("null binding doesn't accept parameters");
@@ -168,7 +167,8 @@
 }
 
 static int binding_serial_init(struct mctp *mctp, struct binding *binding,
-		mctp_eid_t eid, int n_params, char * const *params)
+			       mctp_eid_t eid, int n_params,
+			       char *const *params)
 {
 	struct mctp_binding_serial *serial;
 	const char *path;
@@ -207,8 +207,8 @@
 }
 
 static int binding_astlpc_init(struct mctp *mctp, struct binding *binding,
-		mctp_eid_t eid, int n_params,
-		char * const *params __attribute__((unused)))
+			       mctp_eid_t eid, int n_params,
+			       char *const *params __attribute__((unused)))
 {
 	struct mctp_binding_astlpc *astlpc;
 
@@ -249,26 +249,24 @@
 	return mctp_astlpc_poll(binding->data);
 }
 
-struct binding bindings[] = {
-	{
-		.name = "null",
-		.init = binding_null_init,
-	},
-	{
-		.name = "serial",
-		.init = binding_serial_init,
-		.destroy = NULL,
-		.init_pollfd = binding_serial_init_pollfd,
-		.process = binding_serial_process,
-	},
-	{
-		.name = "astlpc",
-		.init = binding_astlpc_init,
-		.destroy = binding_astlpc_destroy,
-		.init_pollfd = binding_astlpc_init_pollfd,
-		.process = binding_astlpc_process,
-	}
-};
+struct binding bindings[] = { {
+				      .name = "null",
+				      .init = binding_null_init,
+			      },
+			      {
+				      .name = "serial",
+				      .init = binding_serial_init,
+				      .destroy = NULL,
+				      .init_pollfd = binding_serial_init_pollfd,
+				      .process = binding_serial_process,
+			      },
+			      {
+				      .name = "astlpc",
+				      .init = binding_astlpc_init,
+				      .destroy = binding_astlpc_destroy,
+				      .init_pollfd = binding_astlpc_init_pollfd,
+				      .process = binding_astlpc_process,
+			      } };
 
 struct binding *binding_lookup(const char *name)
 {
@@ -301,7 +299,7 @@
 	}
 
 	rc = bind(ctx->sock, (struct sockaddr *)&addr,
-			sizeof(addr.sun_family) + namelen);
+		  sizeof(addr.sun_family) + namelen);
 	if (rc) {
 		warn("can't bind socket");
 		goto err_close;
@@ -330,10 +328,10 @@
 		return -1;
 
 	ctx->n_clients++;
-	ctx->clients = realloc(ctx->clients,
-			ctx->n_clients * sizeof(struct client));
+	ctx->clients =
+		realloc(ctx->clients, ctx->n_clients * sizeof(struct client));
 
-	client = &ctx->clients[ctx->n_clients-1];
+	client = &ctx->clients[ctx->n_clients - 1];
 	memset(client, 0, sizeof(*client));
 	client->active = true;
 	client->sock = fd;
@@ -361,7 +359,7 @@
 		}
 		if (ctx->verbose)
 			fprintf(stderr, "client[%d] registered for type %u\n",
-					idx, type);
+				idx, type);
 		client->type = type;
 		return 0;
 	}
@@ -407,11 +405,9 @@
 	eid = *(uint8_t *)ctx->buf;
 
 	if (ctx->verbose)
-		fprintf(stderr,
-			"client[%d] sent message: dest 0x%02x len %d\n",
+		fprintf(stderr, "client[%d] sent message: dest 0x%02x len %d\n",
 			idx, eid, rc - 1);
 
-
 	if (eid == ctx->local_eid)
 		rx_message(eid, MCTP_MESSAGE_TO_DST, 0, ctx, ctx->buf + 1,
 			   rc - 1);
@@ -425,8 +421,8 @@
 	return rc;
 }
 
-static int binding_init(struct ctx *ctx, const char *name,
-		int argc, char * const *argv)
+static int binding_init(struct ctx *ctx, const char *name, int argc,
+			char *const *argv)
 {
 	int rc;
 
@@ -436,8 +432,8 @@
 		return -1;
 	}
 
-	rc = ctx->binding->init(ctx->mctp, ctx->binding, ctx->local_eid,
-			argc, argv);
+	rc = ctx->binding->init(ctx->mctp, ctx->binding, ctx->local_eid, argc,
+				argv);
 	return rc;
 }
 
@@ -490,13 +486,13 @@
 			int i;
 
 			ctx->pollfds = realloc(ctx->pollfds,
-					(ctx->n_clients + FD_NR) *
-						sizeof(struct pollfd));
+					       (ctx->n_clients + FD_NR) *
+						       sizeof(struct pollfd));
 
 			for (i = 0; i < ctx->n_clients; i++) {
-				ctx->pollfds[FD_NR+i].fd =
+				ctx->pollfds[FD_NR + i].fd =
 					ctx->clients[i].sock;
-				ctx->pollfds[FD_NR+i].events = POLLIN;
+				ctx->pollfds[FD_NR + i].events = POLLIN;
 			}
 			clients_changed = false;
 		}
@@ -541,7 +537,7 @@
 		}
 
 		for (i = 0; i < ctx->n_clients; i++) {
-			if (!ctx->pollfds[FD_NR+i].revents)
+			if (!ctx->pollfds[FD_NR + i].revents)
 				continue;
 
 			rc = client_process_recv(ctx, i);
@@ -560,7 +556,6 @@
 			client_remove_inactive(ctx);
 	}
 
-
 	free(ctx->pollfds);
 
 	return rc;
@@ -586,7 +581,7 @@
 		fprintf(stderr, "  %s\n", bindings[i].name);
 }
 
-int main(int argc, char * const *argv)
+int main(int argc, char *const *argv)
 {
 	struct ctx *ctx, _ctx;
 	int rc;
@@ -667,7 +662,8 @@
 	if (ctx->pcap.binding.path) {
 		rc = capture_prepare(&ctx->pcap.binding);
 		if (rc == -1) {
-			fprintf(stderr, "Failed to initialise capture: %d\n", rc);
+			fprintf(stderr, "Failed to initialise capture: %d\n",
+				rc);
 			rc = EXIT_FAILURE;
 			goto cleanup_mctp;
 		}
@@ -679,13 +675,15 @@
 	if (ctx->pcap.socket.path) {
 		rc = capture_prepare(&ctx->pcap.socket);
 		if (rc == -1) {
-			fprintf(stderr, "Failed to initialise capture: %d\n", rc);
+			fprintf(stderr, "Failed to initialise capture: %d\n",
+				rc);
 			rc = EXIT_FAILURE;
 			goto cleanup_pcap_binding;
 		}
 	}
 
-	rc = binding_init(ctx, argv[optind], argc - optind - 1, argv + optind + 1);
+	rc = binding_init(ctx, argv[optind], argc - optind - 1,
+			  argv + optind + 1);
 	if (rc) {
 		fprintf(stderr, "Failed to initialise binding: %d\n", rc);
 		rc = EXIT_FAILURE;
@@ -720,5 +718,4 @@
 cleanup_mctp:
 
 	return rc;
-
 }
