discover: Add safe mode
[petitboot] / lib / types / types.h
index 90b23c37a77446d0cda4b531869c6dee31eed343..0333a02d9aa385b4eb121574813d85e862120bfd 100644 (file)
@@ -1,10 +1,21 @@
 #ifndef _TYPES_H
 #define _TYPES_H
 
+#include <stdbool.h>
+#include <stdint.h>
 #include <list/list.h>
 
+enum device_type {
+       DEVICE_TYPE_NETWORK,
+       DEVICE_TYPE_DISK,
+       DEVICE_TYPE_OPTICAL,
+       DEVICE_TYPE_ANY,
+       DEVICE_TYPE_UNKNOWN,
+};
+
 struct device {
        char            *id;
+       enum device_type type;
        char            *name;
        char            *description;
        char            *icon_file;
@@ -23,7 +34,9 @@ struct boot_option {
        char            *icon_file;
        char            *boot_image_file;
        char            *initrd_file;
+       char            *dtb_file;
        char            *boot_args;
+       bool            is_default;
 
        struct list_item        list;
 
@@ -34,6 +47,7 @@ struct boot_command {
        char *option_id;
        char *boot_image_file;
        char *initrd_file;
+       char *dtb_file;
        char *boot_args;
 };
 
@@ -47,4 +61,71 @@ struct boot_status {
        int     progress;
 };
 
+struct interface_info {
+       unsigned int    hwaddr_size;
+       uint8_t         *hwaddr;
+       char            *name;
+       bool            link;
+};
+
+struct blockdev_info {
+       char            *name;
+       char            *uuid;
+       char            *mountpoint;
+};
+
+struct system_info {
+       char                    *type;
+       char                    *identifier;
+       struct interface_info   **interfaces;
+       unsigned int            n_interfaces;
+       struct blockdev_info    **blockdevs;
+       unsigned int            n_blockdevs;
+};
+
+#define HWADDR_SIZE    6
+
+struct interface_config {
+       uint8_t hwaddr[HWADDR_SIZE];
+       bool    ignore;
+       enum {
+               CONFIG_METHOD_DHCP,
+               CONFIG_METHOD_STATIC,
+       } method;
+       union {
+               struct {
+               } dhcp_config;
+               struct {
+                       char *address;
+                       char *gateway;
+               } static_config;
+       };
+};
+
+struct network_config {
+       struct interface_config **interfaces;
+       unsigned int            n_interfaces;
+       const char              **dns_servers;
+       unsigned int            n_dns_servers;
+};
+
+struct boot_priority {
+       /* Boot options with higher priority values will take precedence over
+        * lower values. Negative priorities signify "don't boot this by
+        * default".
+        */
+       int                     priority;
+       enum device_type        type;
+};
+
+struct config {
+       bool                    autoboot_enabled;
+       unsigned int            autoboot_timeout_sec;
+       bool                    safe_mode;
+       struct network_config   network;
+       struct boot_priority    *boot_priorities;
+       unsigned int            n_boot_priorities;
+       char                    *boot_device;
+};
+
 #endif /* _TYPES_H */