mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-06-19 05:28:33 +02:00
dhcp: save root-path in the state file
On networked boot we need to somehow communicate this to the early boot machinery. Sadly, no DBus there and we're running in configure-and-quit mode. Abusing the state file for this sounds almost reasonable and is reasonably straightforward thing to do.
This commit is contained in:
parent
e07b13ca02
commit
55d24ba94e
7 changed files with 57 additions and 6 deletions
|
|
@ -464,6 +464,7 @@ typedef struct _NMDevicePrivate {
|
|||
gulong state_sigid;
|
||||
NMDhcp4Config * config;
|
||||
char * pac_url;
|
||||
char * root_path;
|
||||
bool was_active;
|
||||
guint grace_id;
|
||||
} dhcp4;
|
||||
|
|
@ -6953,6 +6954,7 @@ dhcp4_cleanup (NMDevice *self, CleanupType cleanup_type, gboolean release)
|
|||
|
||||
nm_clear_g_source (&priv->dhcp4.grace_id);
|
||||
g_clear_pointer (&priv->dhcp4.pac_url, g_free);
|
||||
g_clear_pointer (&priv->dhcp4.root_path, g_free);
|
||||
|
||||
if (priv->dhcp4.client) {
|
||||
/* Stop any ongoing DHCP transaction on this device */
|
||||
|
|
@ -7326,6 +7328,9 @@ dhcp4_state_changed (NMDhcpClient *client,
|
|||
priv->dhcp4.pac_url = g_strdup (g_hash_table_lookup (options, "wpad"));
|
||||
nm_device_set_proxy_config (self, priv->dhcp4.pac_url);
|
||||
|
||||
g_free (priv->dhcp4.root_path);
|
||||
priv->dhcp4.root_path = g_strdup (g_hash_table_lookup (options, "root_path"));
|
||||
|
||||
nm_dhcp4_config_set_options (priv->dhcp4.config, options);
|
||||
_notify (self, PROP_DHCP4_CONFIG);
|
||||
|
||||
|
|
|
|||
|
|
@ -444,6 +444,7 @@ nm_dhcp_dhclient_create_config (const char *interface,
|
|||
add_request (reqs, "static-routes");
|
||||
add_request (reqs, "wpad");
|
||||
add_request (reqs, "ntp-servers");
|
||||
add_request (reqs, "root-path");
|
||||
} else {
|
||||
add_hostname6 (new_contents, hostname);
|
||||
add_request (reqs, "dhcp6.name-servers");
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ static const ReqOption dhcp4_requests[] = {
|
|||
{ SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE, REQPREFIX "rfc3442_classless_static_routes", TRUE },
|
||||
{ SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE, REQPREFIX "ms_classless_static_routes", TRUE },
|
||||
{ SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY, REQPREFIX "wpad", TRUE },
|
||||
{ SD_DHCP_OPTION_ROOT_PATH, REQPREFIX "root_path", TRUE },
|
||||
|
||||
/* Internal values */
|
||||
{ SD_DHCP_OPTION_IP_ADDRESS_LEASE_TIME, REQPREFIX "expiry", FALSE },
|
||||
|
|
@ -432,6 +433,13 @@ lease_to_ip4_config (NMDedupMultiIndex *multi_idx,
|
|||
add_option (options, dhcp4_requests, SD_DHCP_OPTION_NTP_SERVER, str->str);
|
||||
}
|
||||
|
||||
/* Root path */
|
||||
r = sd_dhcp_lease_get_root_path (lease, &s);
|
||||
if (r >= 0) {
|
||||
LOG_LEASE (LOGD_DHCP4, "root path '%s'", s);
|
||||
add_option (options, dhcp4_requests, SD_DHCP_OPTION_ROOT_PATH, s);
|
||||
}
|
||||
|
||||
r = sd_dhcp_lease_get_vendor_specific (lease, &data, &data_len);
|
||||
if (r >= 0)
|
||||
metered = !!memmem (data, data_len, "ANDROID_METERED", NM_STRLEN ("ANDROID_METERED"));
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@ static const char *orig_missing_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -132,6 +133,7 @@ static const char *override_client_id_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -161,6 +163,7 @@ static const char *quote_client_id_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -190,6 +193,7 @@ static const char *quote_client_id_expected_2 = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -219,6 +223,7 @@ static const char *hex_zero_client_id_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -248,6 +253,7 @@ static const char *ascii_client_id_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -277,6 +283,7 @@ static const char *hex_single_client_id_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -310,6 +317,7 @@ static const char *existing_hex_client_id_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -347,6 +355,7 @@ static const char *existing_escaped_client_id_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -385,6 +394,7 @@ static const char *existing_ascii_client_id_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -419,7 +429,8 @@ static const char *fqdn_expected = \
|
|||
"also request ms-classless-static-routes;\n"
|
||||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n\n";
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n\n";
|
||||
|
||||
static void
|
||||
test_fqdn (void)
|
||||
|
|
@ -455,6 +466,7 @@ static const char *fqdn_options_override_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n"
|
||||
"# FQDN options from /path/to/dhclient.conf\n"
|
||||
"send fqdn.encoded off;\n"
|
||||
|
|
@ -492,6 +504,7 @@ static const char *override_hostname_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -580,6 +593,7 @@ static const char *existing_alsoreq_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -618,6 +632,7 @@ static const char *existing_req_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -657,6 +672,7 @@ static const char *existing_multiline_alsoreq_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -890,6 +906,7 @@ static const char *interface1_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -935,6 +952,7 @@ static const char *interface2_expected = \
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
static void
|
||||
|
|
@ -1030,6 +1048,7 @@ test_structured (void)
|
|||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request ntp-servers;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
new_client_id = g_bytes_new (bytes, sizeof (bytes) - 1);
|
||||
|
|
@ -1085,6 +1104,7 @@ test_config_req_intf (void)
|
|||
"also request ms-classless-static-routes;\n"
|
||||
"also request static-routes;\n"
|
||||
"also request wpad;\n"
|
||||
"also request root-path;\n"
|
||||
"\n";
|
||||
|
||||
test_config (orig, expected,
|
||||
|
|
|
|||
|
|
@ -1931,6 +1931,7 @@ _nm_config_state_set (NMConfig *self,
|
|||
#define DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_NM_OWNED "nm-owned"
|
||||
#define DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_ROUTE_METRIC_DEFAULT_ASPIRED "route-metric-default-aspired"
|
||||
#define DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_ROUTE_METRIC_DEFAULT_EFFECTIVE "route-metric-default-effective"
|
||||
#define DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_ROOT_PATH "root-path"
|
||||
|
||||
NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_device_state_managed_type_to_str, NMConfigDeviceStateManagedType,
|
||||
NM_UTILS_LOOKUP_DEFAULT_NM_ASSERT ("unknown"),
|
||||
|
|
@ -2128,7 +2129,8 @@ nm_config_device_state_write (int ifindex,
|
|||
const char *connection_uuid,
|
||||
int nm_owned,
|
||||
guint32 route_metric_default_aspired,
|
||||
guint32 route_metric_default_effective)
|
||||
guint32 route_metric_default_effective,
|
||||
const char *root_path)
|
||||
{
|
||||
char path[NM_STRLEN (NM_CONFIG_DEVICE_STATE_DIR) + 60];
|
||||
GError *local = NULL;
|
||||
|
|
@ -2182,19 +2184,26 @@ nm_config_device_state_write (int ifindex,
|
|||
route_metric_default_aspired);
|
||||
}
|
||||
}
|
||||
if (root_path) {
|
||||
g_key_file_set_string (kf,
|
||||
DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE,
|
||||
DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_ROOT_PATH,
|
||||
root_path);
|
||||
}
|
||||
|
||||
if (!g_key_file_save_to_file (kf, path, &local)) {
|
||||
_LOGW ("device-state: write #%d (%s) failed: %s", ifindex, path, local->message);
|
||||
g_error_free (local);
|
||||
return FALSE;
|
||||
}
|
||||
_LOGT ("device-state: write #%d (%s); managed=%s%s%s%s%s%s%s, route-metric-default=%"G_GUINT32_FORMAT"-%"G_GUINT32_FORMAT"",
|
||||
_LOGT ("device-state: write #%d (%s); managed=%s%s%s%s%s%s%s, route-metric-default=%"G_GUINT32_FORMAT"-%"G_GUINT32_FORMAT"%s%s%s",
|
||||
ifindex, path,
|
||||
_device_state_managed_type_to_str (managed),
|
||||
NM_PRINT_FMT_QUOTED (connection_uuid, ", connection-uuid=", connection_uuid, "", ""),
|
||||
NM_PRINT_FMT_QUOTED (perm_hw_addr_fake, ", perm-hw-addr-fake=", perm_hw_addr_fake, "", ""),
|
||||
route_metric_default_aspired,
|
||||
route_metric_default_effective);
|
||||
route_metric_default_effective,
|
||||
NM_PRINT_FMT_QUOTED (root_path, ", root-path=", root_path, "", ""));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -236,7 +236,8 @@ gboolean nm_config_device_state_write (int ifindex,
|
|||
const char *connection_uuid,
|
||||
int nm_owned,
|
||||
guint32 route_metric_default_aspired,
|
||||
guint32 route_metric_default_effective);
|
||||
guint32 route_metric_default_effective,
|
||||
const char *root_path);
|
||||
|
||||
void nm_config_device_state_prune_unseen (GHashTable *seen_ifindexes);
|
||||
|
||||
|
|
|
|||
|
|
@ -6101,6 +6101,8 @@ nm_manager_write_device_state (NMManager *self, NMDevice *device)
|
|||
guint32 route_metric_default_aspired;
|
||||
guint32 route_metric_default_effective;
|
||||
int nm_owned;
|
||||
NMDhcp4Config *dhcp4_config;
|
||||
const char *root_path = NULL;
|
||||
|
||||
ifindex = nm_device_get_ip_ifindex (device);
|
||||
if (ifindex <= 0)
|
||||
|
|
@ -6135,13 +6137,18 @@ nm_manager_write_device_state (NMManager *self, NMDevice *device)
|
|||
route_metric_default_effective = _device_route_metric_get (self, ifindex, NM_DEVICE_TYPE_UNKNOWN,
|
||||
TRUE, &route_metric_default_aspired);
|
||||
|
||||
dhcp4_config = nm_device_get_dhcp4_config (device);
|
||||
if (dhcp4_config)
|
||||
root_path = nm_dhcp4_config_get_option (dhcp4_config, "root_path");
|
||||
|
||||
return nm_config_device_state_write (ifindex,
|
||||
managed_type,
|
||||
perm_hw_addr_fake,
|
||||
uuid,
|
||||
nm_owned,
|
||||
route_metric_default_aspired,
|
||||
route_metric_default_effective);
|
||||
route_metric_default_effective,
|
||||
root_path);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue