/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2020 Red Hat, Inc. */ #include "libnm-core/nm-default-libnm-core.h" #include "nm-setting-hostname.h" #include "nm-setting-private.h" #include "nm-utils-private.h" /** * SECTION:nm-setting-hostname * @short_description: Contains properties related to the hostname * @include: nm-setting-hostname.h **/ /*****************************************************************************/ NM_GOBJECT_PROPERTIES_DEFINE(NMSettingHostname, PROP_PRIORITY, PROP_FROM_DHCP, PROP_FROM_DNS_LOOKUP, PROP_ONLY_FROM_DEFAULT, ); /** * NMSettingHostname: * * Hostname settings * * Since: 1.30 */ struct _NMSettingHostname { NMSetting parent; int priority; NMTernary from_dhcp; NMTernary from_dns_lookup; NMTernary only_from_default; }; struct _NMSettingHostnameClass { NMSettingClass parent; }; G_DEFINE_TYPE(NMSettingHostname, nm_setting_hostname, NM_TYPE_SETTING) /** * nm_setting_hostname_get_priority: * @setting: the #NMSettingHostname * * Returns the value contained in the #NMSettingHostname:priority * property. * * Returns: the 'priority' property value * * Since: 1.30 **/ int nm_setting_hostname_get_priority(NMSettingHostname *setting) { g_return_val_if_fail(NM_IS_SETTING_HOSTNAME(setting), 0); return setting->priority; } /** * nm_setting_hostname_get_from_dhcp: * @setting: the #NMSettingHostname * * Returns the value contained in the #NMSettingHostname:from-dhcp * property. * * Returns: the 'from-dhcp' property value * * Since: 1.30 **/ NMTernary nm_setting_hostname_get_from_dhcp(NMSettingHostname *setting) { g_return_val_if_fail(NM_IS_SETTING_HOSTNAME(setting), NM_TERNARY_DEFAULT); return setting->from_dhcp; } /** * nm_setting_hostname_get_from_dns_lookup: * @setting: the #NMSettingHostname * * Returns the value contained in the #NMSettingHostname:from-dns-lookup * property. * * Returns: the 'from-dns-lookup' property value * * Since: 1.30 **/ NMTernary nm_setting_hostname_get_from_dns_lookup(NMSettingHostname *setting) { g_return_val_if_fail(NM_IS_SETTING_HOSTNAME(setting), NM_TERNARY_DEFAULT); return setting->from_dns_lookup; } /** * nm_setting_hostname_get_only_from_default: * @setting: the #NMSettingHostname * * Returns the value contained in the #NMSettingHostname:only-from-default * property. * * Returns: the 'only-from-default' property value * * Since: 1.30 **/ NMTernary nm_setting_hostname_get_only_from_default(NMSettingHostname *setting) { g_return_val_if_fail(NM_IS_SETTING_HOSTNAME(setting), NM_TERNARY_DEFAULT); return setting->only_from_default; } /*****************************************************************************/ static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { NMSettingHostname *self = NM_SETTING_HOSTNAME(object); switch (prop_id) { case PROP_PRIORITY: g_value_set_int(value, self->priority); break; case PROP_FROM_DHCP: g_value_set_enum(value, self->from_dhcp); break; case PROP_FROM_DNS_LOOKUP: g_value_set_enum(value, self->from_dns_lookup); break; case PROP_ONLY_FROM_DEFAULT: g_value_set_enum(value, self->only_from_default); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { NMSettingHostname *self = NM_SETTING_HOSTNAME(object); switch (prop_id) { case PROP_PRIORITY: self->priority = g_value_get_int(value); break; case PROP_FROM_DHCP: self->from_dhcp = g_value_get_enum(value); break; case PROP_FROM_DNS_LOOKUP: self->from_dns_lookup = g_value_get_enum(value); break; case PROP_ONLY_FROM_DEFAULT: self->only_from_default = g_value_get_enum(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } /*****************************************************************************/ static void nm_setting_hostname_init(NMSettingHostname *setting) { setting->from_dhcp = NM_TERNARY_DEFAULT; setting->from_dns_lookup = NM_TERNARY_DEFAULT; setting->only_from_default = NM_TERNARY_DEFAULT; } /** * nm_setting_hostname_new: * * Creates a new #NMSettingHostname object with default values. * * Returns: (transfer full): the new empty #NMSettingHostname object * * Since: 1.30 **/ NMSetting * nm_setting_hostname_new(void) { return g_object_new(NM_TYPE_SETTING_HOSTNAME, NULL); } static void nm_setting_hostname_class_init(NMSettingHostnameClass *klass) { GObjectClass * object_class = G_OBJECT_CLASS(klass); NMSettingClass *setting_class = NM_SETTING_CLASS(klass); object_class->get_property = get_property; object_class->set_property = set_property; /** * NMSettingHostname:priority * * The relative priority of this connection to determine the * system hostname. A lower numerical value is better (higher * priority). A connection with higher priority is considered * before connections with lower priority. * * If the value is zero, it can be overridden by a global value * from NetworkManager configuration. If the property doesn't have * a value in the global configuration, the value is assumed to be * 100. * * Negative values have the special effect of excluding other * connections with a greater numerical priority value; so in * presence of at least one negative priority, only connections * with the lowest priority value will be used to determine the * hostname. * * Since: 1.30 **/ /* ---ifcfg-rh--- * property: priority * variable: HOSTNAME_PRIORITY(+) * default: missing variable means global value or 100 * description: hostname priority * example: HOSTNAME_PRIORITY=50 * ---end--- */ obj_properties[PROP_PRIORITY] = g_param_spec_int(NM_SETTING_HOSTNAME_PRIORITY, "", "", G_MININT32, G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** * NMSettingHostname:from-dhcp * * Whether the system hostname can be determined from DHCP on * this connection. * * When set to %NM_TERNARY_DEFAULT, the value from global configuration * is used. If the property doesn't have a value in the global * configuration, NetworkManager assumes the value to be %NM_TERNARY_TRUE. * * Since: 1.30 **/ /* ---ifcfg-rh--- * property: from-dhcp * variable: HOSTNAME_FROM_DHCP(+) * default: missing variable means global default or 1 * description: whether the system hostname can be determined from DHCP * example: HOSTNAME_FROM_DHCP=0,1 * ---end--- */ obj_properties[PROP_FROM_DHCP] = g_param_spec_enum( NM_SETTING_HOSTNAME_FROM_DHCP, "", "", NM_TYPE_TERNARY, NM_TERNARY_DEFAULT, NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** * NMSettingHostname:from-dns-lookup * * Whether the system hostname can be determined from reverse * DNS lookup of addresses on this device. * * When set to %NM_TERNARY_DEFAULT, the value from global configuration * is used. If the property doesn't have a value in the global * configuration, NetworkManager assumes the value to be %NM_TERNARY_TRUE. * * Since: 1.30 **/ /* ---ifcfg-rh--- * property: from-dhcp * variable: HOSTNAME_FROM_DNS_LOOKUP(+) * default: missing variable means global default or 1 * description: whether the system hostname can be determined from reverse * DNS lookup * example: HOSTNAME_FROM_DNS_LOOKUP=0,1 * ---end--- */ obj_properties[PROP_FROM_DNS_LOOKUP] = g_param_spec_enum( NM_SETTING_HOSTNAME_FROM_DNS_LOOKUP, "", "", NM_TYPE_TERNARY, NM_TERNARY_DEFAULT, NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** * NMSettingHostname:only-from-default * * If set to %NM_TERNARY_TRUE, NetworkManager attempts to get * the hostname via DHCPv4/DHCPv6 or reverse DNS lookup on this * device only when the device has the default route for the given * address family (IPv4/IPv6). * * If set to %NM_TERNARY_FALSE, the hostname can be set from this * device even if it doesn't have the default route. * * When set to %NM_TERNARY_DEFAULT, the value from global configuration * is used. If the property doesn't have a value in the global * configuration, NetworkManager assumes the value to be %NM_TERNARY_FALSE. * * Since: 1.30 **/ /* ---ifcfg-rh--- * property: only-best-device * variable: HOSTNAME_ONLY_FROM_DEFAULT(+) * default: missing variable means global default or 1 * description: whether the hostname can be determined only from * devices with the default route * example: HOSTNAME_ONLY_FROM_DEFAULT=0,1 * ---end--- */ obj_properties[PROP_ONLY_FROM_DEFAULT] = g_param_spec_enum( NM_SETTING_HOSTNAME_ONLY_FROM_DEFAULT, "", "", NM_TYPE_TERNARY, NM_TERNARY_DEFAULT, NM_SETTING_PARAM_FUZZY_IGNORE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); _nm_setting_class_commit(setting_class, NM_META_SETTING_TYPE_HOSTNAME); }