summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2013-03-06 17:08:05 +0800
committerJeremy Kerr <jk@ozlabs.org>2013-04-15 15:42:27 +0800
commitceefe00bf8c1498dfc2118d2b3666f67f91bb956 (patch)
tree698eda969d88563e4851fc3a96a99b0d3d9936ce /lib
parenta2f7b111a2073a4afaf75499ac4c2732b71ea801 (diff)
downloadtalos-petitboot-ceefe00bf8c1498dfc2118d2b3666f67f91bb956.tar.gz
talos-petitboot-ceefe00bf8c1498dfc2118d2b3666f67f91bb956.zip
discover: parse boot message from incoming ACTION_BOOT messages
Add a function in the protocol code to deserialise a boot message, and use it to extract a boot_command in the discover server. Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/pb-protocol/pb-protocol.c31
-rw-r--r--lib/pb-protocol/pb-protocol.h3
2 files changed, 34 insertions, 0 deletions
diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c
index 4e0af87..31637c6 100644
--- a/lib/pb-protocol/pb-protocol.c
+++ b/lib/pb-protocol/pb-protocol.c
@@ -404,3 +404,34 @@ out_err:
talloc_free(dev);
return NULL;
}
+
+struct boot_command *pb_protocol_deserialise_boot_command(void *ctx,
+ const struct pb_protocol_message *message)
+{
+ struct boot_command *cmd;
+ const char *pos;
+ unsigned int len;
+
+ len = message->payload_len;
+ pos = message->payload;
+
+ cmd = talloc(ctx, struct boot_command);
+
+ if (read_string(cmd, &pos, &len, &cmd->option_id))
+ goto out_err;
+
+ if (read_string(cmd, &pos, &len, &cmd->boot_image_file))
+ goto out_err;
+
+ if (read_string(cmd, &pos, &len, &cmd->initrd_file))
+ goto out_err;
+
+ if (read_string(cmd, &pos, &len, &cmd->boot_args))
+ goto out_err;
+
+ return cmd;
+
+out_err:
+ talloc_free(cmd);
+ return NULL;
+}
diff --git a/lib/pb-protocol/pb-protocol.h b/lib/pb-protocol/pb-protocol.h
index 2ec264c..6068f05 100644
--- a/lib/pb-protocol/pb-protocol.h
+++ b/lib/pb-protocol/pb-protocol.h
@@ -50,4 +50,7 @@ struct pb_protocol_message *pb_protocol_read_message(void *ctx, int fd);
struct device *pb_protocol_deserialise_device(void *ctx,
const struct pb_protocol_message *message);
+struct boot_command *pb_protocol_deserialise_boot_command(void *ctx,
+ const struct pb_protocol_message *message);
+
#endif /* _PB_PROTOCOL_H */
OpenPOWER on IntegriCloud