Revert "ip6: remove standalone DHCP method since DHCPv6 can't provide gateways" (rh #612445)

This reverts commit a729d2f649.

Turns out this is a valid IP config method that some sites use.
This commit is contained in:
Dan Williams 2010-07-27 21:43:42 -07:00
parent af2be00b8c
commit bebf8d48b0
5 changed files with 56 additions and 35 deletions

View file

@ -471,7 +471,8 @@ verify (NMSetting *setting, GSList *all_settings, GError **error)
NM_SETTING_IP6_CONFIG_ADDRESSES);
return FALSE;
}
} else if (!strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)) {
} else if ( !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
|| !strcmp (priv->method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
/* nothing to do */
} else {
g_set_error (error,
@ -612,30 +613,34 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
* NMSettingIP6Config:method:
*
* IPv6 configuration method. If 'auto' is specified then the appropriate
* automatic method (DHCP, PPP, router advertisement, etc) is used for the
* interface and most other properties can be left unset. If 'link-local'
* is specified, then an IPv6 link-local address will be assigned to the
* interface. If 'manual' is specified, static IP addressing is used and
* at least one IP address must be given in the 'addresses' property. If
* 'ignored' is specified, IPv6 configuration is not done. This property
* must be set. NOTE: the 'shared' method are not yet supported.
* automatic method (DHCP, PPP, advertisement, etc) is used for the
* interface and most other properties can be left unset. To force the use
* of DHCP only, specify 'dhcp'; this method is only valid for ethernet-
* based hardware. If 'link-local' is specified, then an IPv6 link-local
* address will be assigned to the interface. If 'manual' is specified,
* static IP addressing is used and at least one IP address must be given
* in the 'addresses' property. If 'ignored' is specified, IPv6
* configuration is not done. This property must be set. NOTE: the 'shared'
* method are not yet supported.
**/
g_object_class_install_property
(object_class, PROP_METHOD,
g_param_spec_string (NM_SETTING_IP6_CONFIG_METHOD,
"Method",
"IPv6 configuration method. If 'auto' is specified "
"then the appropriate automatic method (DHCP, PPP, "
"router advertisement, etc) is used for the "
"interface and most other properties can be left "
"unset. If 'link-local' is specified, then an "
"IPv6 link-local address will be assigned to the "
"interface. If 'manual' is specified, static IP "
"addressing is used and at least one IP address "
"must be given in the 'addresses' property. If "
"'ignored' is specified, IPv6 configuration is not "
"done. This property must be set. NOTE: the "
"'shared' method are not yet supported.",
"then the appropriate automatic method (PPP, router "
"advertisement, etc) is used for the device and "
"most other properties can be left unset. To force "
"the use of DHCP only, specify 'dhcp'; this method "
"is only valid for ethernet-based hardware. If "
"'link-local' is specified, then an IPv6 link-local "
"address will be assigned to the interface. If "
"'manual' is specified, static IP addressing is "
"used and at least one IP address must be given in "
" the 'addresses' property. If 'ignored' is "
"specified, IPv6 configuration is not done. This "
"property must be set. NOTE: the 'shared' method"
"is not yet supported.",
NULL,
G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
@ -761,26 +766,26 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
/**
* NMSettingIP6Config:ignore-auto-routes:
*
* When the method is set to 'auto' and this property is set to TRUE,
* automatically configured routes are ignored and only routes specified
* in #NMSettingIP6Config:routes, if any, are used.
* When the method is set to 'auto' or 'dhcp' and this property is set to
* TRUE, automatically configured routes are ignored and only routes
* specified in #NMSettingIP6Config:routes, if any, are used.
**/
g_object_class_install_property
(object_class, PROP_IGNORE_AUTO_ROUTES,
g_param_spec_boolean (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES,
"Ignore automatic routes",
"When the method is set to 'auto' and this property "
"is set to TRUE, automatically configured routes are "
"ignored and only routes specified in the 'routes' "
"property, if any, are used.",
"When the method is set to 'auto' or 'dhcp' and this "
"property is set to TRUE, automatically configured "
"routes are ignored and only routes specified in the "
"'routes' property, if any, are used.",
FALSE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));
/**
* NMSettingIP6Config:ignore-auto-dns:
*
* When the method is set to 'auto' and this property is set to TRUE,
* automatically configured nameservers and search domains are ignored
* When the method is set to 'auto' or 'dhcp' and this property is set to
* TRUE, automatically configured nameservers and search domains are ignored
* and only nameservers and search domains specified in
* #NMSettingIP6Config:dns and #NMSettingIP6Config:dns-search, if any, are
* used.
@ -789,11 +794,11 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class)
(object_class, PROP_IGNORE_AUTO_DNS,
g_param_spec_boolean (NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS,
"Ignore DHCPv6/RDNSS DNS",
"When the method is set to 'auto' and this property "
"is set to TRUE, automatically configured nameservers "
"and search domains are ignored and only nameservers "
"and search domains specified in 'dns' and 'dns-search' "
"properties, if any, are used.",
"When the method is set to 'auto' or 'dhcp' and this "
"property is set to TRUE, automatically configured "
"nameservers and search domains are ignored and only "
"nameservers and search domains specified in the 'dns' "
"and 'dns-search' properties, if any, are used.",
FALSE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE));

View file

@ -66,6 +66,7 @@ GQuark nm_setting_ip6_config_error_quark (void);
#define NM_SETTING_IP6_CONFIG_METHOD_IGNORE "ignore"
#define NM_SETTING_IP6_CONFIG_METHOD_AUTO "auto"
#define NM_SETTING_IP6_CONFIG_METHOD_DHCP "dhcp"
#define NM_SETTING_IP6_CONFIG_METHOD_LINK_LOCAL "link-local"
#define NM_SETTING_IP6_CONFIG_METHOD_MANUAL "manual"
#define NM_SETTING_IP6_CONFIG_METHOD_SHARED "shared"

View file

@ -1656,6 +1656,13 @@ real_act_stage3_ip6_config_start (NMDevice *self, NMDeviceStateReason *reason)
}
nm_ip6_manager_begin_addrconf (priv->ip6_manager, nm_device_get_ip_ifindex (self));
ret = NM_ACT_STAGE_RETURN_POSTPONE;
} else if (ip6_method_matches (connection, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
/* Router advertisements shouldn't be used in pure DHCP mode */
if (priv->ip6_accept_ra_path)
nm_utils_do_sysctl (priv->ip6_accept_ra_path, "0\n");
priv->dhcp6_mode = IP6_DHCP_OPT_MANAGED;
ret = dhcp6_start (self, connection, priv->dhcp6_mode, reason);
} else if (ip6_method_matches (connection, NM_SETTING_IP6_CONFIG_METHOD_IGNORE)) {
/* reset the saved RA value when ipv6 is ignored */
if (priv->ip6_accept_ra_path) {
@ -2109,7 +2116,8 @@ real_act_stage4_get_ip6_config (NMDevice *self,
*reason = NM_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE;
goto out;
}
}
} else if (ip6_method_matches (connection, NM_SETTING_IP6_CONFIG_METHOD_DHCP))
g_assert (priv->dhcp6_client); /* sanity check */
/* Autoconf might have triggered DHCPv6 too */
if (priv->dhcp6_client) {

View file

@ -1389,7 +1389,7 @@ make_ip6_setting (shvarFile *ifcfg,
char *value = NULL;
char *str_value;
char *route6_path = NULL;
gboolean bool_value, ipv6forwarding, ipv6_autoconf;
gboolean bool_value, ipv6forwarding, ipv6_autoconf, dhcp6 = FALSE;
char *method = NM_SETTING_IP6_CONFIG_METHOD_MANUAL;
guint32 i;
shvarFile *network_ifcfg;
@ -1466,9 +1466,12 @@ make_ip6_setting (shvarFile *ifcfg,
/* Find out method property */
ipv6forwarding = svTrueValue (ifcfg, "IPV6FORWARDING", FALSE);
ipv6_autoconf = svTrueValue (ifcfg, "IPV6_AUTOCONF", !ipv6forwarding);
dhcp6 = svTrueValue (ifcfg, "DHCPV6C", FALSE);
if (ipv6_autoconf)
method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
else if (dhcp6)
method = NM_SETTING_IP6_CONFIG_METHOD_DHCP;
else {
/* IPV6_AUTOCONF=no and no IPv6 address -> method 'link-local' */
str_value = svGetValue (ifcfg, "IPV6ADDR", FALSE);

View file

@ -1307,6 +1307,10 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
svSetValue (ifcfg, "IPV6_AUTOCONF", "yes", FALSE);
svSetValue (ifcfg, "DHCPV6C", NULL, FALSE);
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);
svSetValue (ifcfg, "DHCPV6C", "yes", FALSE);
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
svSetValue (ifcfg, "IPV6INIT", "yes", FALSE);
svSetValue (ifcfg, "IPV6_AUTOCONF", "no", FALSE);