From 589fc0179e92c6df51d7a4b648774ea48616097c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 5 Apr 2017 16:20:22 -0500 Subject: [PATCH] ppp: allow disabling IPv4 too https://bugzilla.redhat.com/show_bug.cgi?id=1439360 (cherry picked from commit a12b3f06cb1e38f788d52e605f25a16347ec8695) --- src/ppp/nm-ppp-manager.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/ppp/nm-ppp-manager.c b/src/ppp/nm-ppp-manager.c index f83b3e30e9..c7836a8f14 100644 --- a/src/ppp/nm-ppp-manager.c +++ b/src/ppp/nm-ppp-manager.c @@ -716,6 +716,7 @@ create_pppd_cmd_line (NMPPPManager *self, NMSettingAdsl *adsl, const char *ppp_name, guint baud_override, + gboolean ip4_enabled, gboolean ip6_enabled, GError **err) { @@ -730,6 +731,14 @@ create_pppd_cmd_line (NMPPPManager *self, if (!pppd_binary) return NULL; + if (!ip4_enabled && !ip6_enabled) { + g_set_error_literal (err, + NM_MANAGER_ERROR, + NM_MANAGER_ERROR_FAILED, + "Neither IPv4 or IPv6 allowed."); + return NULL; + } + /* Create pppd command line */ cmd = nm_cmd_line_new (); nm_cmd_line_add_string (cmd, pppd_binary); @@ -740,11 +749,15 @@ create_pppd_cmd_line (NMPPPManager *self, /* NM handles setting the default route */ nm_cmd_line_add_string (cmd, "nodefaultroute"); + if (!ip4_enabled) + nm_cmd_line_add_string (cmd, "noip"); + if (ip6_enabled) { /* Allow IPv6 to be configured by IPV6CP */ nm_cmd_line_add_string (cmd, "ipv6"); nm_cmd_line_add_string (cmd, ","); - } + } else + nm_cmd_line_add_string (cmd, "noipv6"); ppp_debug = !!getenv ("NM_PPP_DEBUG"); if (nm_logging_enabled (LOGL_DEBUG, LOGD_PPP)) @@ -922,8 +935,9 @@ _ppp_manager_start (NMPPPManager *manager, NMCmdLine *ppp_cmd; char *cmd_str; struct stat st; - const char *ip6_method; + const char *ip6_method, *ip4_method; gboolean ip6_enabled = FALSE; + gboolean ip4_enabled = FALSE; g_return_val_if_fail (NM_IS_PPP_MANAGER (manager), FALSE); g_return_val_if_fail (NM_IS_ACT_REQUEST (req), FALSE); @@ -968,10 +982,21 @@ _ppp_manager_start (NMPPPManager *manager, adsl_setting = (NMSettingAdsl *) nm_connection_get_setting (connection, NM_TYPE_SETTING_ADSL); + /* Figure out what address methods should be enabled */ + ip4_method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG); + ip4_enabled = g_strcmp0 (ip4_method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0; ip6_method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP6_CONFIG); ip6_enabled = g_strcmp0 (ip6_method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0; - ppp_cmd = create_pppd_cmd_line (manager, s_ppp, pppoe_setting, adsl_setting, ppp_name, baud_override, ip6_enabled, err); + ppp_cmd = create_pppd_cmd_line (manager, + s_ppp, + pppoe_setting, + adsl_setting, + ppp_name, + baud_override, + ip4_enabled, + ip6_enabled, + err); if (!ppp_cmd) goto out;