summaryrefslogtreecommitdiffstats
path: root/discover/discover-server.c
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-02-27 09:33:34 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-04-15 15:40:23 +0800
commit01ed80939b8ed440390729c524ad875047dbd406 (patch)
tree731e7e90050a0c0ea20493ccfde018083ccb93b3 /discover/discover-server.c
parentc25601a71b0951225691aa2edc389826f7f3836c (diff)
downloadtalos-petitboot-01ed80939b8ed440390729c524ad875047dbd406.tar.gz
talos-petitboot-01ed80939b8ed440390729c524ad875047dbd406.zip
discover: Allow discover server to receive boot messages
Currently, the petitboot socket is one way: messages are only sent from server to client. Beause we want the clients to trigger a boot, this change allows the server to receive messages on the petitboot socket. This is just a matter of adding a waiter to the client-specific socket, then handling incoming messages. At present we don't do anything with the messages, but we'll add a handler later. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/discover-server.c')
-rw-r--r--discover/discover-server.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/discover/discover-server.c b/discover/discover-server.c
index 21e15da..bafcb77 100644
--- a/discover/discover-server.c
+++ b/discover/discover-server.c
@@ -126,7 +126,26 @@ static int write_remove_message(struct discover_server *server,
return client_write_message(server, client, message);
}
-static int discover_server_process(void *arg)
+static int discover_server_process_message(void *arg)
+{
+ struct pb_protocol_message *message;
+ struct client *client = arg;
+
+ message = pb_protocol_read_message(client, client->fd);
+
+ if (!message)
+ return 0;
+
+ if (message->action != PB_PROTOCOL_ACTION_BOOT) {
+ pb_log("%s: invalid action %d\n", __func__, message->action);
+ return 0;
+ }
+
+ /* todo: process boot message */
+ return 0;
+}
+
+static int discover_server_process_connection(void *arg)
{
struct discover_server *server = arg;
struct client *client;
@@ -156,6 +175,9 @@ static int discover_server_process(void *arg)
write_add_message(server, client, device);
}
+ waiter_register(server->waitset, client->fd, WAIT_IN,
+ discover_server_process_message, client);
+
return 0;
}
@@ -222,7 +244,7 @@ struct discover_server *discover_server_init(struct waitset *waitset)
}
server->waiter = waiter_register(server->waitset, server->socket,
- WAIT_IN, discover_server_process, server);
+ WAIT_IN, discover_server_process_connection, server);
return server;
OpenPOWER on IntegriCloud