diff mbox series

Save sourcetype in bootloader environment

Message ID 20201222130716.13918-1-vincent.prince.external@saftbatteries.com
State Accepted
Headers show
Series Save sourcetype in bootloader environment | expand

Commit Message

Vincent Prince Dec. 22, 2020, 1:07 p.m. UTC
Signed-off-by: Vincent Prince <vincent.prince.external@saftbatteries.com>
---
 core/state.c              |  9 +++++++++
 core/stream_interface.c   |  1 +
 core/swupdate.c           |  1 +
 include/swupdate.h        |  1 +
 include/swupdate_status.h | 13 +++++++++++++
 5 files changed, 25 insertions(+)
diff mbox series

Patch

diff --git a/core/state.c b/core/state.c
index 8ddd760..8c1d2db 100644
--- a/core/state.c
+++ b/core/state.c
@@ -69,6 +69,15 @@  server_op_res_t save_state_string(char *key, update_state_t value)
 		SERVER_OK : SERVER_EERR;
 }
 
+server_op_res_t save_sourcetype_string(char *key, sourcetype value)
+{
+    CHECK_STATE_VAR(key);
+    if (value < SOURCE_UNKNOWN || value > SOURCE_LOCAL)
+        return -EINVAL;
+    return bootloader_env_set(key, get_sourcetype_string(value)) == 0 ?
+        SERVER_OK : SERVER_EERR;
+}
+
 server_op_res_t read_state(char *key, update_state_t *value)
 {
 	char *envval;
diff --git a/core/stream_interface.c b/core/stream_interface.c
index 6d32998..d514203 100644
--- a/core/stream_interface.c
+++ b/core/stream_interface.c
@@ -584,6 +584,7 @@  void *network_initializer(void *data)
 			 */
 			if (!software->globals.dry_run && software->bootloader_transaction_marker) {
 				save_state_string((char*)BOOTVAR_TRANSACTION, STATE_IN_PROGRESS);
+				save_sourcetype_string((char*)BOOTVAR_SOURCE_TYPE, req->source);
 			}
 
 			notify(RUN, RECOVERY_NO_ERROR, INFOLEVEL, "Installation in progress");
diff --git a/core/swupdate.c b/core/swupdate.c
index 9adafa8..27432d2 100644
--- a/core/swupdate.c
+++ b/core/swupdate.c
@@ -391,6 +391,7 @@  static int install_from_file(char *fname, int check)
 	 */
 	if (!swcfg.globals.dry_run && swcfg.bootloader_transaction_marker) {
 		save_state_string((char*)BOOTVAR_TRANSACTION, STATE_IN_PROGRESS);
+		save_sourcetype_string((char*)BOOTVAR_SOURCE_TYPE, SOURCE_LOCAL);
 	}
 
 	swcfg.globals.dry_run = swcfg.globals.default_dry_run;
diff --git a/include/swupdate.h b/include/swupdate.h
index a687927..b72bb42 100644
--- a/include/swupdate.h
+++ b/include/swupdate.h
@@ -16,6 +16,7 @@ 
 #include "swupdate_dict.h"
 
 #define BOOTVAR_TRANSACTION "recovery_status"
+#define BOOTVAR_SOURCE_TYPE "source_type"
 
 /*
  * swupdate uses SHA256 hashes
diff --git a/include/swupdate_status.h b/include/swupdate_status.h
index 8ac9af1..d85af6b 100644
--- a/include/swupdate_status.h
+++ b/include/swupdate_status.h
@@ -42,4 +42,17 @@  typedef enum {
 }   // extern "C"
 #endif
 
+static inline char* get_sourcetype_string(sourcetype srctype) {
+    switch (srctype) {
+        case SOURCE_UNKNOWN: return (char*)"unknown";
+        case SOURCE_WEBSERVER: return (char*)"webserver";
+        case SOURCE_SURICATTA: return (char*)"suricatta";
+        case SOURCE_DOWNLOADER: return (char*)"downloader";
+        case SOURCE_LOCAL: return (char*)"local";
+        default: break;
+    }
+    return (char*)"<nil>";
+}
+
+
 #endif