diff options
author | Francesco Giudici <fgiudici@redhat.com> | 2017-03-23 18:23:10 +0100 |
---|---|---|
committer | Francesco Giudici <fgiudici@redhat.com> | 2017-04-05 11:49:08 +0200 |
commit | ed7abdb016766463cb72aaafedbf8742ea702fe2 (patch) | |
tree | e719facdb0a468c7250a9a863b4c0b47443abed2 | |
parent | 3d4d1bedda59bca23799db4d7a437c4a3a0c4be7 (diff) | |
download | NetworkManager-fg/hostname_dhcp-sticky.tar.gz |
policy: add new hostname-mode "dhcp-sticky"fg/hostname_dhcp-sticky
Retrieve the transient hostname from DHCP only, as it already does
the "dhcp" hostname-mode, but avoid resetting the hostname when the DHCP
connection is deactivated.
Related: https://bugzilla.redhat.com/show_bug.cgi?id=1405275
-rw-r--r-- | man/NetworkManager.conf.xml | 4 | ||||
-rw-r--r-- | src/nm-policy.c | 5 | ||||
-rw-r--r-- | src/nm-policy.h | 8 |
3 files changed, 15 insertions, 2 deletions
diff --git a/man/NetworkManager.conf.xml b/man/NetworkManager.conf.xml index 1230347d83..1e27bb06c7 100644 --- a/man/NetworkManager.conf.xml +++ b/man/NetworkManager.conf.xml @@ -299,6 +299,10 @@ no-auto-default=* the hostname is reset to the last hostname set outside NetworkManager or 'localhost' if none valid is there. </para> + <para><literal>dhcp-sticky</literal>: NetworkManager will behave the same as + in <literal>dhcp</literal> mode, but will never reset the hostname also if the + related DHCP connection is deactivated. + </para> <para><literal>none</literal>: NetworkManager will not manage the transient hostname and will never set it. </para> diff --git a/src/nm-policy.c b/src/nm-policy.c index 80f9caedfa..6f420461d0 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -698,6 +698,9 @@ update_system_hostname (NMPolicy *self, NMDevice *best4, NMDevice *best6, const if (external_hostname) return; + if (priv->hostname_mode == NM_POLICY_HOSTNAME_MODE_DHCP_STICKY) + return; + if (priv->hostname_mode == NM_POLICY_HOSTNAME_MODE_DHCP) { /* In dhcp hostname-mode, the hostname is updated only if it comes from * a DHCP host-name option: if last set was from a host-name option and @@ -2297,6 +2300,8 @@ nm_policy_init (NMPolicy *self) priv->hostname_mode = NM_POLICY_HOSTNAME_MODE_NONE; else if (nm_streq0 (hostname_mode, "dhcp")) priv->hostname_mode = NM_POLICY_HOSTNAME_MODE_DHCP; + else if (nm_streq0 (hostname_mode, "dhcp-sticky")) + priv->hostname_mode = NM_POLICY_HOSTNAME_MODE_DHCP_STICKY; else /* default - full mode */ priv->hostname_mode = NM_POLICY_HOSTNAME_MODE_FULL; diff --git a/src/nm-policy.h b/src/nm-policy.h index 2c96e6d090..8572355618 100644 --- a/src/nm-policy.h +++ b/src/nm-policy.h @@ -50,8 +50,11 @@ NMDevice *nm_policy_get_activating_ip6_device (NMPolicy *policy); /** * NMPolicyHostnameMode * @NM_POLICY_HOSTNAME_MODE_NONE: never update the transient hostname. - * @NM_POLICY_HOSTNAME_MODE_DHCP: only hostname from DHCP hostname - * options are eligible to be set as transient hostname. + * @NM_POLICY_HOSTNAME_MODE_DHCP: only hostname from DHCP host-name + * option is eligible to be set as transient hostname + * @NM_POLICY_HOSTNAME_MODE_DHCP_STICKY: like NM_POLICY_HOSTNAME_MODE_DHCP + * but the hostname will not be reset if the DHCP connection which provided + * the host-name option becomes inactive * @NM_POLICY_HOSTNAME_MODE_FULL: NM will try to update the hostname looking * to current static hostname, DHCP options, reverse IP lookup and externally * set hostnames. @@ -61,6 +64,7 @@ NMDevice *nm_policy_get_activating_ip6_device (NMPolicy *policy); typedef enum { NM_POLICY_HOSTNAME_MODE_NONE, NM_POLICY_HOSTNAME_MODE_DHCP, + NM_POLICY_HOSTNAME_MODE_DHCP_STICKY, NM_POLICY_HOSTNAME_MODE_FULL, } NMPolicyHostnameMode; |