*/
/** Hostname setting */
-struct setting hostname_setting __setting = {
+struct setting hostname_setting __setting ( SETTING_HOST ) = {
.name = "hostname",
.description = "Host name",
.tag = DHCP_HOST_NAME,
};
/** Filename setting */
-struct setting filename_setting __setting = {
+struct setting filename_setting __setting ( SETTING_BOOT ) = {
.name = "filename",
.description = "Boot filename",
.tag = DHCP_BOOTFILE_NAME,
};
/** Root path setting */
-struct setting root_path_setting __setting = {
+struct setting root_path_setting __setting ( SETTING_SANBOOT ) = {
.name = "root-path",
.description = "iSCSI root path",
.tag = DHCP_ROOT_PATH,
};
/** Username setting */
-struct setting username_setting __setting = {
+struct setting username_setting __setting ( SETTING_AUTH ) = {
.name = "username",
.description = "User name",
.tag = DHCP_EB_USERNAME,
};
/** Password setting */
-struct setting password_setting __setting = {
+struct setting password_setting __setting ( SETTING_AUTH ) = {
.name = "password",
.description = "Password",
.tag = DHCP_EB_PASSWORD,
};
/** Priority setting */
-struct setting priority_setting __setting = {
+struct setting priority_setting __setting ( SETTING_MISC ) = {
.name = "priority",
.description = "Priority of these settings",
.tag = DHCP_EB_PRIORITY,
/** 802.11 encryption key setting */
-extern struct setting net80211_key_setting __setting;
+extern struct setting net80211_key_setting __setting ( SETTING_NETDEV_EXTRA );
/**
#define SETTINGS __table ( struct setting, "settings" )
/** Declare a configuration setting */
-#define __setting __table_entry ( SETTINGS, 01 )
+#define __setting( setting_order ) __table_entry ( SETTINGS, setting_order )
+
+/** @defgroup setting_order Setting ordering
+ * @{
+ */
+
+#define SETTING_NETDEV 01 /**< Network device settings */
+#define SETTING_NETDEV_EXTRA 02 /**< Network device additional settings */
+#define SETTING_IPv4 03 /**< IPv4 settings */
+#define SETTING_IPv4_EXTRA 04 /**< IPv4 additional settings */
+#define SETTING_BOOT 05 /**< Generic boot settings */
+#define SETTING_BOOT_EXTRA 06 /**< Generic boot additional settings */
+#define SETTING_SANBOOT 07 /**< SAN boot settings */
+#define SETTING_SANBOOT_EXTRA 08 /**< SAN boot additional settings */
+#define SETTING_HOST 09 /**< Host identity settings */
+#define SETTING_HOST_EXTRA 10 /**< Host identity additional settings */
+#define SETTING_AUTH 11 /**< Authentication settings */
+#define SETTING_AUTH_EXTRA 12 /**< Authentication additional settings */
+#define SETTING_MISC 13 /**< Miscellaneous settings */
+
+/** @} */
/** Settings block operations */
struct settings_operations {
extern struct setting_type setting_type_hex __setting_type;
extern struct setting_type setting_type_uuid __setting_type;
-extern struct setting ip_setting __setting;
-extern struct setting netmask_setting __setting;
-extern struct setting gateway_setting __setting;
-extern struct setting dns_setting __setting;
-extern struct setting domain_setting __setting;
-extern struct setting hostname_setting __setting;
-extern struct setting filename_setting __setting;
-extern struct setting root_path_setting __setting;
-extern struct setting username_setting __setting;
-extern struct setting password_setting __setting;
-extern struct setting priority_setting __setting;
-extern struct setting uuid_setting __setting;
-extern struct setting next_server_setting __setting;
-extern struct setting mac_setting __setting;
-extern struct setting busid_setting __setting;
-extern struct setting user_class_setting __setting;
+extern struct setting ip_setting __setting ( SETTING_IPv4 );
+extern struct setting netmask_setting __setting ( SETTING_IPv4 );
+extern struct setting gateway_setting __setting ( SETTING_IPv4 );
+extern struct setting dns_setting __setting ( SETTING_IPv4_EXTRA );
+extern struct setting hostname_setting __setting ( SETTING_HOST );
+extern struct setting filename_setting __setting ( SETTING_BOOT );
+extern struct setting root_path_setting __setting ( SETTING_SANBOOT );
+extern struct setting username_setting __setting ( SETTING_AUTH );
+extern struct setting password_setting __setting ( SETTING_AUTH );
+extern struct setting priority_setting __setting ( SETTING_MISC );
+extern struct setting uuid_setting __setting ( SETTING_HOST );
+extern struct setting next_server_setting __setting ( SETTING_BOOT );
+extern struct setting mac_setting __setting ( SETTING_NETDEV );
+extern struct setting busid_setting __setting ( SETTING_NETDEV );
/**
* Initialise a settings block
};
/** UUID setting obtained via SMBIOS */
-struct setting uuid_setting __setting = {
+struct setting uuid_setting __setting ( SETTING_HOST ) = {
.name = "uuid",
.description = "UUID",
.tag = SMBIOS_RAW_TAG ( SMBIOS_TYPE_SYSTEM_INFORMATION,
};
/** Other SMBIOS named settings */
-struct setting smbios_named_settings[] __setting = {
+struct setting smbios_named_settings[] __setting ( SETTING_HOST_EXTRA ) = {
{
.name = "manufacturer",
.description = "Manufacturer",
* If this is blank, we scan for all networks and use the one with the
* greatest signal strength.
*/
-struct setting net80211_ssid_setting __setting = {
+struct setting net80211_ssid_setting __setting ( SETTING_NETDEV_EXTRA ) = {
.name = "ssid",
.description = "802.11 SSID (network name)",
.type = &setting_type_string,
* active scan (send probe packets). If this setting is nonzero, an
* active scan on the 2.4GHz band will be used to associate.
*/
-struct setting net80211_active_setting __setting = {
+struct setting net80211_active_setting __setting ( SETTING_NETDEV_EXTRA ) = {
.name = "active-scan",
.description = "Use an active scan during 802.11 association",
.type = &setting_type_int8,
* normal iPXE method for entering hex settings; an ASCII string of
* hex characters will not behave as expected.
*/
-struct setting net80211_key_setting __setting = {
+struct setting net80211_key_setting __setting ( SETTING_NETDEV_EXTRA ) = {
.name = "key",
.description = "Encryption key for protected 802.11 networks",
.type = &setting_type_string,
*/
/** IPv4 address setting */
-struct setting ip_setting __setting = {
+struct setting ip_setting __setting ( SETTING_IPv4 ) = {
.name = "ip",
.description = "IPv4 address",
.tag = DHCP_EB_YIADDR,
};
/** IPv4 subnet mask setting */
-struct setting netmask_setting __setting = {
+struct setting netmask_setting __setting ( SETTING_IPv4 ) = {
.name = "netmask",
.description = "IPv4 subnet mask",
.tag = DHCP_SUBNET_MASK,
};
/** Default gateway setting */
-struct setting gateway_setting __setting = {
+struct setting gateway_setting __setting ( SETTING_IPv4 ) = {
.name = "gateway",
.description = "Default gateway",
.tag = DHCP_ROUTERS,
*/
/** Network device named settings */
-struct setting mac_setting __setting = {
+struct setting mac_setting __setting ( SETTING_NETDEV ) = {
.name = "mac",
.description = "MAC address",
.type = &setting_type_hex,
.tag = NETDEV_SETTING_TAG_MAC,
};
-struct setting busid_setting __setting = {
+struct setting busid_setting __setting ( SETTING_NETDEV ) = {
.name = "busid",
.description = "Bus ID",
.type = &setting_type_hex,
};
/** iSCSI initiator IQN setting */
-struct setting initiator_iqn_setting __setting = {
+struct setting initiator_iqn_setting __setting ( SETTING_SANBOOT_EXTRA ) = {
.name = "initiator-iqn",
.description = "iSCSI initiator name",
.tag = DHCP_ISCSI_INITIATOR_IQN,
};
/** iSCSI reverse username setting */
-struct setting reverse_username_setting __setting = {
+struct setting reverse_username_setting __setting ( SETTING_AUTH_EXTRA ) = {
.name = "reverse-username",
.description = "Reverse user name",
.tag = DHCP_EB_REVERSE_USERNAME,
};
/** iSCSI reverse password setting */
-struct setting reverse_password_setting __setting = {
+struct setting reverse_password_setting __setting ( SETTING_AUTH_EXTRA ) = {
.name = "reverse-password",
.description = "Reverse password",
.tag = DHCP_EB_REVERSE_PASSWORD,
FEATURE_VERSION ( VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH );
/** DHCP server address setting */
-struct setting dhcp_server_setting __setting = {
+struct setting dhcp_server_setting __setting ( SETTING_MISC ) = {
.name = "dhcp-server",
.description = "DHCP server address",
.tag = DHCP_SERVER_IDENTIFIER,
};
/** DHCP user class setting */
-struct setting user_class_setting __setting = {
+struct setting user_class_setting __setting ( SETTING_HOST_EXTRA ) = {
.name = "user-class",
.description = "User class identifier",
.tag = DHCP_USER_CLASS_ID,
};
/** Use cached network settings */
-struct setting use_cached_setting __setting = {
+struct setting use_cached_setting __setting ( SETTING_MISC ) = {
.name = "use-cached",
.description = "Use cached network settings",
.tag = DHCP_EB_USE_CACHED,
*/
/** DNS server setting */
-struct setting dns_setting __setting = {
+struct setting dns_setting __setting ( SETTING_IPv4_EXTRA ) = {
.name = "dns",
.description = "DNS server",
.tag = DHCP_DNS_SERVERS,
};
/** Domain name setting */
-struct setting domain_setting __setting = {
+struct setting domain_setting __setting ( SETTING_IPv4_EXTRA ) = {
.name = "domain",
.description = "Local domain",
.tag = DHCP_DOMAIN_NAME,
*/
/** Syslog server setting */
-struct setting syslog_setting __setting = {
+struct setting syslog_setting __setting ( SETTING_MISC ) = {
.name = "syslog",
.description = "Syslog server",
.tag = DHCP_LOG_SERVERS,
*/
/** TFTP server setting */
-struct setting next_server_setting __setting = {
+struct setting next_server_setting __setting ( SETTING_BOOT ) = {
.name = "next-server",
.description = "TFTP server",
.tag = DHCP_EB_SIADDR,
}
/** The "keep-san" setting */
-struct setting keep_san_setting __setting = {
+struct setting keep_san_setting __setting ( SETTING_SANBOOT_EXTRA ) = {
.name = "keep-san",
.description = "Preserve SAN connection",
.tag = DHCP_EB_KEEP_SAN,
};
/** The "skip-san-boot" setting */
-struct setting skip_san_boot_setting __setting = {
+struct setting skip_san_boot_setting __setting ( SETTING_SANBOOT_EXTRA ) = {
.name = "skip-san-boot",
.description = "Do not boot the SAN drive after connecting",
.tag = DHCP_EB_SKIP_SAN_BOOT,