]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[settings] Add "unixtime" builtin setting to expose the current time
authorMichael Brown <mcb30@ipxe.org>
Thu, 26 Jan 2017 11:39:25 +0000 (11:39 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 26 Jan 2017 12:26:54 +0000 (12:26 +0000)
Expose the current wall-clock time (in seconds since the Epoch), since
this is often useful in captured boot logs and can also be useful when
checking unexpected X.509 certificate validation failures.

Use a :uint32 setting to avoid Y2K38 rollover, thereby ensuring that
this will eventually be somebody else's problem.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/settings.c

index c306054d690e7f37ecb61fce090ed9f22c67c839..e60a882a7b7ce892396bae72177d83fab8d8433d 100644 (file)
@@ -31,6 +31,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 #include <byteswap.h>
 #include <errno.h>
 #include <assert.h>
+#include <time.h>
 #include <ipxe/in.h>
 #include <ipxe/ip.h>
 #include <ipxe/ipv6.h>
@@ -2552,6 +2553,38 @@ struct builtin_setting version_builtin_setting __builtin_setting = {
        .fetch = version_fetch,
 };
 
+/**
+ * Fetch current time setting
+ *
+ * @v data             Buffer to fill with setting data
+ * @v len              Length of buffer
+ * @ret len            Length of setting data, or negative error
+ */
+static int unixtime_fetch ( void *data, size_t len ) {
+       uint32_t content;
+
+       /* Return current time */
+       content = htonl ( time(NULL) );
+       if ( len > sizeof ( content ) )
+               len = sizeof ( content );
+       memcpy ( data, &content, len );
+       return sizeof ( content );
+}
+
+/** Current time setting */
+const struct setting unixtime_setting __setting ( SETTING_MISC, unixtime ) = {
+       .name = "unixtime",
+       .description = "Seconds since the Epoch",
+       .type = &setting_type_uint32,
+       .scope = &builtin_scope,
+};
+
+/** Current time built-in setting */
+struct builtin_setting unixtime_builtin_setting __builtin_setting = {
+       .setting = &unixtime_setting,
+       .fetch = unixtime_fetch,
+};
+
 /**
  * Fetch built-in setting
  *