mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-06 12:00:17 +01:00
Merge remote-tracking branch 'origin/master' into libnl3
This commit is contained in:
commit
7addf3009a
25 changed files with 397 additions and 136 deletions
|
|
@ -4,7 +4,6 @@ bin_PROGRAMS = \
|
|||
INCLUDES = \
|
||||
-I${top_srcdir} \
|
||||
-I${top_srcdir}/include \
|
||||
-I${top_builddir}/marshallers \
|
||||
-I${top_srcdir}/libnm-util \
|
||||
-I${top_srcdir}/libnm-glib
|
||||
|
||||
|
|
@ -31,7 +30,6 @@ nmcli_CPPFLAGS = \
|
|||
nmcli_LDADD = \
|
||||
$(DBUS_LIBS) \
|
||||
$(GLIB_LIBS) \
|
||||
$(top_builddir)/marshallers/libmarshallers.la \
|
||||
$(top_builddir)/libnm-util/libnm-util.la \
|
||||
$(top_builddir)/libnm-glib/libnm-glib.la
|
||||
|
||||
|
|
|
|||
|
|
@ -697,6 +697,7 @@ initscript/Mandriva/networkmanager
|
|||
initscript/linexa/Makefile
|
||||
initscript/linexa/networkmanager
|
||||
introspection/Makefile
|
||||
introspection/all.xml
|
||||
man/Makefile
|
||||
man/NetworkManager.8
|
||||
man/NetworkManager.conf.5
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ XSLTPROC = xsltproc --xinclude --nonet
|
|||
XMLS = $(wildcard $(top_srcdir)/introspection/nm-*.xml)
|
||||
|
||||
OTHER_FILES= \
|
||||
$(top_srcdir)/introspection/all.xml \
|
||||
$(top_builddir)/introspection/all.xml \
|
||||
$(top_srcdir)/introspection/generic-types.xml \
|
||||
$(top_srcdir)/introspection/errors.xml \
|
||||
$(top_srcdir)/introspection/vpn-errors.xml \
|
||||
|
|
@ -37,7 +37,7 @@ OTHER_FILES= \
|
|||
GENERATED_FILES = spec.html settings-spec.xml
|
||||
|
||||
spec.html: $(XMLS) $(OTHER_FILES) html-build.stamp
|
||||
$(XSLTPROC) $(top_srcdir)/tools/doc-generator.xsl $(top_srcdir)/introspection/all.xml > $@
|
||||
$(XSLTPROC) $(top_srcdir)/tools/doc-generator.xsl $(top_builddir)/introspection/all.xml > $@
|
||||
mkdir -p $(builddir)/html/
|
||||
cp $@ $(builddir)/html/
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ EXTRA_DIST = \
|
|||
vpn.py \
|
||||
list-connections.py \
|
||||
show-bssids.py \
|
||||
disconnect-device.py
|
||||
disconnect-device.py \
|
||||
get-active-connections.py
|
||||
|
||||
|
||||
|
|
|
|||
56
examples/python/get-active-connection-uuids.py
Executable file
56
examples/python/get-active-connection-uuids.py
Executable file
|
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Copyright (C) 2010 Red Hat, Inc.
|
||||
#
|
||||
|
||||
import dbus, sys
|
||||
|
||||
# This example takes a device interface name as a parameter and tells
|
||||
# NetworkManager to disconnect that device, closing down any network
|
||||
# connection it may have
|
||||
|
||||
bus = dbus.SystemBus()
|
||||
|
||||
# Get a proxy for the base NetworkManager object
|
||||
m_proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager")
|
||||
manager = dbus.Interface(m_proxy, "org.freedesktop.NetworkManager")
|
||||
mgr_props = dbus.Interface(m_proxy, "org.freedesktop.DBus.Properties")
|
||||
|
||||
s_proxy = bus.get_object("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings")
|
||||
settings = dbus.Interface(s_proxy, "org.freedesktop.NetworkManager.Settings")
|
||||
|
||||
# Find the device the user wants to disconnect
|
||||
active = mgr_props.Get("org.freedesktop.NetworkManager", "ActiveConnections")
|
||||
for a in active:
|
||||
a_proxy = bus.get_object("org.freedesktop.NetworkManager", a)
|
||||
|
||||
# Get the UUID directly; apps could use this to perform certain operations
|
||||
# based on which network you're connected too
|
||||
a_props = dbus.Interface(a_proxy, "org.freedesktop.DBus.Properties")
|
||||
uuid = a_props.Get("org.freedesktop.NetworkManager.Connection.Active", "Uuid")
|
||||
|
||||
# Grab the connection object path so we can get all the connection's settings
|
||||
connection_path = a_props.Get("org.freedesktop.NetworkManager.Connection.Active", "Connection")
|
||||
c_proxy = bus.get_object("org.freedesktop.NetworkManager", connection_path)
|
||||
connection = dbus.Interface(c_proxy, "org.freedesktop.NetworkManager.Settings.Connection")
|
||||
settings = connection.GetSettings()
|
||||
print "%s (%s)" % (settings['connection']['id'], uuid)
|
||||
|
||||
if len(active) == 0:
|
||||
print "No active connections"
|
||||
|
||||
0
examples/python/list-connections.py
Normal file → Executable file
0
examples/python/list-connections.py
Normal file → Executable file
0
examples/python/show-bssids.py
Normal file → Executable file
0
examples/python/show-bssids.py
Normal file → Executable file
0
examples/python/vpn.py
Normal file → Executable file
0
examples/python/vpn.py
Normal file → Executable file
|
|
@ -1,5 +1,5 @@
|
|||
EXTRA_DIST = \
|
||||
all.xml \
|
||||
all.xml.in \
|
||||
generic-types.xml \
|
||||
errors.xml \
|
||||
vpn-errors.xml \
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
|
||||
<tp:title>NetworkManager D-Bus Interface Specification</tp:title>
|
||||
<tp:version>0.9</tp:version>
|
||||
<tp:version>@VERSION@</tp:version>
|
||||
|
||||
|
||||
<tp:copyright>Copyright (C) 2008 - 2011 Red Hat, Inc.</tp:copyright>
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
||||
<node name="/org/freedesktop/NetworkManager/AgentManager" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
||||
<interface name="org.freedesktop.NetworkManager.AgentManager">
|
||||
|
||||
<method name="Register">
|
||||
|
|
|
|||
|
|
@ -1,13 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<!--
|
||||
READ ME! READ ME! READ ME! READ ME! READ ME!
|
||||
|
||||
This file needs to be kept in sync with nm-manager-client.xml with the exception of
|
||||
the legacy methods at the end of this file.
|
||||
-->
|
||||
|
||||
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
||||
<node name="/org/freedesktop/NetworkManager" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
||||
<interface name="org.freedesktop.NetworkManager">
|
||||
<method name="GetDevices">
|
||||
<tp:docstring>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
||||
<node name="/org/freedesktop/NetworkManager/Settings" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
|
||||
<interface name="org.freedesktop.NetworkManager.Settings">
|
||||
<tp:docstring>
|
||||
The Settings interface allows clients to view and administrate the connections stored and used by NetworkManager.
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ nm_connection_error_get_type (void)
|
|||
ENUM_ENTRY (NM_CONNECTION_ERROR_UNKNOWN, "UnknownError"),
|
||||
ENUM_ENTRY (NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND, "ConnectionSettingNotFound"),
|
||||
ENUM_ENTRY (NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID, "ConnectionTypeInvalid"),
|
||||
ENUM_ENTRY (NM_CONNECTION_ERROR_SETTING_NOT_FOUND, "SettingNotFound"),
|
||||
{ 0, 0, 0 }
|
||||
};
|
||||
etype = g_enum_register_static ("NMConnectionError", values);
|
||||
|
|
@ -790,60 +791,76 @@ nm_connection_verify (NMConnection *connection, GError **error)
|
|||
* nm_connection_update_secrets:
|
||||
* @connection: the #NMConnection
|
||||
* @setting_name: the setting object name to which the secrets apply
|
||||
* @setting_secrets: (element-type utf8 GObject.Value): a #GHashTable mapping
|
||||
* @secrets: (element-type utf8 GObject.Value): a #GHashTable mapping
|
||||
* string:#GValue of setting property names and secrets of the given @setting_name
|
||||
* @error: location to store error, or %NULL
|
||||
*
|
||||
* Update the specified setting's secrets, given a hash table of secrets
|
||||
* intended for that setting (deserialized from D-Bus for example). Will also
|
||||
* extract the given setting's secrets hash if given a hash of hashes, as would
|
||||
* be returned from nm_connection_to_hash().
|
||||
* be returned from nm_connection_to_hash(). If @setting_name is %NULL, expects
|
||||
* a fully serialized #NMConnection as returned by nm_connection_to_hash() and
|
||||
* will update all secrets from all settings contained in @secrets.
|
||||
*
|
||||
* Returns: %TRUE if the secrets were successfully updated and the connection
|
||||
* is valid, %FALSE on failure or if the setting was never added to the connection
|
||||
* Returns: %TRUE if the secrets were successfully updated, %FALSE if the update
|
||||
* failed (tried to update secrets for a setting that doesn't exist, etc)
|
||||
**/
|
||||
gboolean
|
||||
nm_connection_update_secrets (NMConnection *connection,
|
||||
const char *setting_name,
|
||||
GHashTable *setting_secrets,
|
||||
GHashTable *secrets,
|
||||
GError **error)
|
||||
{
|
||||
NMSetting *setting;
|
||||
gboolean success;
|
||||
GHashTable *tmp;
|
||||
GType setting_type;
|
||||
|
||||
g_return_val_if_fail (connection != NULL, FALSE);
|
||||
g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
|
||||
g_return_val_if_fail (setting_name != NULL, FALSE);
|
||||
g_return_val_if_fail (setting_secrets != NULL, FALSE);
|
||||
g_return_val_if_fail (secrets != NULL, FALSE);
|
||||
if (error)
|
||||
g_return_val_if_fail (*error == NULL, FALSE);
|
||||
|
||||
setting_type = nm_connection_lookup_setting_type (setting_name);
|
||||
if (!setting_type) {
|
||||
g_set_error_literal (error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND,
|
||||
setting_name);
|
||||
return FALSE;
|
||||
if (setting_name) {
|
||||
/* Update just one setting */
|
||||
setting = nm_connection_get_setting_by_name (connection, setting_name);
|
||||
if (!setting) {
|
||||
g_set_error_literal (error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
|
||||
setting_name);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Check if this is a hash of hashes, ie a full deserialized connection,
|
||||
* not just a single hashed setting.
|
||||
*/
|
||||
tmp = g_hash_table_lookup (secrets, setting_name);
|
||||
success = nm_setting_update_secrets (setting, tmp ? tmp : secrets, error);
|
||||
} else {
|
||||
GHashTableIter iter;
|
||||
const char *name;
|
||||
|
||||
success = TRUE; /* Just in case 'secrets' has no elements */
|
||||
|
||||
/* Try as a serialized connection (GHashTable of GHashTables) */
|
||||
g_hash_table_iter_init (&iter, secrets);
|
||||
while (g_hash_table_iter_next (&iter, (gpointer) &name, (gpointer) &tmp)) {
|
||||
setting = nm_connection_get_setting_by_name (connection, name);
|
||||
if (!setting) {
|
||||
g_set_error_literal (error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_SETTING_NOT_FOUND,
|
||||
name);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Update the secrets for this setting */
|
||||
success = nm_setting_update_secrets (setting, tmp, error);
|
||||
if (success == FALSE)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
setting = nm_connection_get_setting (connection, setting_type);
|
||||
if (!setting) {
|
||||
g_set_error_literal (error,
|
||||
NM_CONNECTION_ERROR,
|
||||
NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND,
|
||||
setting_name);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Check if this is a hash of hashes, ie a full deserialized connection,
|
||||
* not just a single hashed setting.
|
||||
*/
|
||||
tmp = g_hash_table_lookup (setting_secrets, setting_name);
|
||||
|
||||
success = nm_setting_update_secrets (setting, tmp ? tmp : setting_secrets, error);
|
||||
if (success)
|
||||
g_signal_emit (connection, signals[SECRETS_UPDATED], 0, setting_name);
|
||||
return success;
|
||||
|
|
|
|||
|
|
@ -66,6 +66,8 @@ G_BEGIN_DECLS
|
|||
* 'connection' setting did not point to a valid connection base type; ie
|
||||
* it was not a hardware-related setting like #NMSettingWired or
|
||||
* #NMSettingWireless.
|
||||
* @NM_CONNECTION_ERROR_SETTING_NOT_FOUND: the #NMConnection object
|
||||
* did not contain the specified #NMSetting object
|
||||
*
|
||||
* Describes errors that may result from operations involving a #NMConnection.
|
||||
*
|
||||
|
|
@ -74,7 +76,8 @@ typedef enum
|
|||
{
|
||||
NM_CONNECTION_ERROR_UNKNOWN = 0,
|
||||
NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND,
|
||||
NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID
|
||||
NM_CONNECTION_ERROR_CONNECTION_TYPE_INVALID,
|
||||
NM_CONNECTION_ERROR_SETTING_NOT_FOUND
|
||||
} NMConnectionError;
|
||||
|
||||
#define NM_TYPE_CONNECTION_ERROR (nm_connection_error_get_type ())
|
||||
|
|
|
|||
|
|
@ -756,23 +756,27 @@ nm_setting_vpn_class_init (NMSettingVPNClass *setting_class)
|
|||
/**
|
||||
* NMSettinVPN:user-name:
|
||||
*
|
||||
* User name of the currently logged in user for connections provided by the
|
||||
* user settings service. This name is provided to the VPN plugin to use in
|
||||
* lieu of a custom username provided by that VPN plugins specific
|
||||
* configuration. The VPN plugin itself decides which user name to use.
|
||||
* If the VPN connection requires a user name for authentication, that name
|
||||
* should be provided here. If the connection is available to more than
|
||||
* one user, and the VPN requires each user to supply a different name, then
|
||||
* leave this property empty. If this property is empty, NetworkManager
|
||||
* will automatically supply the username of the user which requested the
|
||||
* VPN connection.
|
||||
**/
|
||||
g_object_class_install_property
|
||||
(object_class, PROP_USER_NAME,
|
||||
g_param_spec_string (NM_SETTING_VPN_USER_NAME,
|
||||
"User name",
|
||||
"User name of the currently logged in user for "
|
||||
"connections provided by the user settings service. "
|
||||
"This name is provided to the VPN plugin to use in "
|
||||
"lieu of a custom username provided by that VPN "
|
||||
"plugins specific configuration. The VPN plugin "
|
||||
"itself decides which user name to use.",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
|
||||
"User name",
|
||||
"If the VPN connection requires a user name for "
|
||||
"authentication, that name should be provided here. "
|
||||
"If the connection is available to more than one "
|
||||
"user, and the VPN requires each user to supply a "
|
||||
"different name, then leave this property empty. If "
|
||||
"this property is empty, NetworkManager will "
|
||||
"automatically supply the username of the user which "
|
||||
"requested the VPN connection.",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
|
||||
|
||||
/**
|
||||
* NMSettingVPN:data:
|
||||
|
|
|
|||
|
|
@ -591,7 +591,84 @@ test_update_secrets_wifi_bad_setting_name (void)
|
|||
"asdfasdfasdfasf",
|
||||
secrets,
|
||||
&error);
|
||||
g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_CONNECTION_SETTING_NOT_FOUND);
|
||||
g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND);
|
||||
g_assert (success == FALSE);
|
||||
|
||||
g_object_unref (connection);
|
||||
}
|
||||
|
||||
static void
|
||||
test_update_secrets_whole_connection (void)
|
||||
{
|
||||
NMConnection *connection;
|
||||
NMSettingWirelessSecurity *s_wsec;
|
||||
GHashTable *secrets, *wsec_hash;
|
||||
GError *error = NULL;
|
||||
gboolean success;
|
||||
const char *wepkey = "11111111111111111111111111";
|
||||
|
||||
connection = wifi_connection_new ();
|
||||
|
||||
/* Build up the secrets hash */
|
||||
secrets = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
|
||||
wsec_hash = g_hash_table_lookup (secrets, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
|
||||
g_assert (wsec_hash);
|
||||
g_hash_table_insert (wsec_hash, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, string_to_gvalue (wepkey));
|
||||
|
||||
success = nm_connection_update_secrets (connection, NULL, secrets, &error);
|
||||
g_assert_no_error (error);
|
||||
g_assert (success == TRUE);
|
||||
|
||||
s_wsec = nm_connection_get_setting_wireless_security (connection);
|
||||
g_assert (s_wsec);
|
||||
g_assert_cmpstr (nm_setting_wireless_security_get_wep_key (s_wsec, 0), ==, wepkey);
|
||||
|
||||
g_object_unref (connection);
|
||||
}
|
||||
|
||||
static void
|
||||
test_update_secrets_whole_connection_empty_hash (void)
|
||||
{
|
||||
NMConnection *connection;
|
||||
GHashTable *secrets;
|
||||
GError *error = NULL;
|
||||
gboolean success;
|
||||
|
||||
connection = wifi_connection_new ();
|
||||
secrets = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
success = nm_connection_update_secrets (connection, NULL, secrets, &error);
|
||||
g_assert_no_error (error);
|
||||
g_assert (success == TRUE);
|
||||
g_object_unref (connection);
|
||||
}
|
||||
|
||||
static void
|
||||
test_update_secrets_whole_connection_bad_setting (void)
|
||||
{
|
||||
NMConnection *connection;
|
||||
GHashTable *secrets, *wsec_hash;
|
||||
GError *error = NULL;
|
||||
gboolean success;
|
||||
const char *wepkey = "11111111111111111111111111";
|
||||
|
||||
connection = wifi_connection_new ();
|
||||
|
||||
/* Build up the secrets hash */
|
||||
secrets = nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL);
|
||||
wsec_hash = g_hash_table_lookup (secrets, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
|
||||
g_assert (wsec_hash);
|
||||
g_hash_table_insert (wsec_hash, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, string_to_gvalue (wepkey));
|
||||
|
||||
/* Steal the wsec setting hash so it's not deallocated, and stuff it back
|
||||
* in with a different name so we ensure libnm-util is returning the right
|
||||
* error when it finds an entry in the connection hash that doesn't match
|
||||
* any setting in the connection.
|
||||
*/
|
||||
g_hash_table_steal (secrets, NM_SETTING_WIRELESS_SECURITY_SETTING_NAME);
|
||||
g_hash_table_insert (secrets, "asdfasdfasdfasdf", wsec_hash);
|
||||
|
||||
success = nm_connection_update_secrets (connection, NULL, secrets, &error);
|
||||
g_assert_error (error, NM_CONNECTION_ERROR, NM_CONNECTION_ERROR_SETTING_NOT_FOUND);
|
||||
g_assert (success == FALSE);
|
||||
|
||||
g_object_unref (connection);
|
||||
|
|
@ -617,6 +694,10 @@ int main (int argc, char **argv)
|
|||
test_update_secrets_wifi_full_hash ();
|
||||
test_update_secrets_wifi_bad_setting_name ();
|
||||
|
||||
test_update_secrets_whole_connection ();
|
||||
test_update_secrets_whole_connection_empty_hash ();
|
||||
test_update_secrets_whole_connection_bad_setting ();
|
||||
|
||||
base = g_path_get_basename (argv[0]);
|
||||
fprintf (stdout, "%s: SUCCESS\n", base);
|
||||
g_free (base);
|
||||
|
|
|
|||
|
|
@ -1,14 +1,16 @@
|
|||
.\" NetworkManager(8) manual page
|
||||
.\"
|
||||
.\" Copyright (C) 2005 - 2010 Red Hat, Inc.
|
||||
.\" Copyright (C) 2005 - 2011 Red Hat, Inc.
|
||||
.\" Copyright (C) 2005 - 2009 Novell, Inc.
|
||||
.\" Copyright (C) 2005 Robert Love
|
||||
.\"
|
||||
.TH NETWORKMANAGER "8" "January 29, 2010"
|
||||
.TH NETWORKMANAGER "8" "2 August 2011"
|
||||
.SH NAME
|
||||
NetworkManager \- network management daemon
|
||||
.SH SYNOPSIS
|
||||
.B NetworkManager [\-\-version] [\-\-no\-daemon] [\-\-pid\-file=<filename>] [\-\-state\-file=<filename>] [\-\-config=<filename>] [\-\-plugins=<plugin1>,plugin2>,...] [\-\-log\-level=<level>] [\-\-log\-domains=<domain1>,<domain2>,...]
|
||||
.B NetworkManager [\-\-version] | [\-\-help]
|
||||
.PP
|
||||
.B NetworkManager [\-\-no\-daemon] [\-\-pid\-file=<filename>] [\-\-state\-file=<filename>] [\-\-config=<filename>] [\-\-plugins=<plugin1>,plugin2>,...] [\-\-log\-level=<level>] [\-\-log\-domains=<domain1>,<domain2>,...]
|
||||
.SH DESCRIPTION
|
||||
The \fINetworkManager\fP daemon attempts to make networking configuration and
|
||||
operation as painless and automatic as possible by managing the primary network
|
||||
|
|
@ -21,10 +23,22 @@ settings and operation.
|
|||
.P
|
||||
NetworkManager will execute scripts in the /etc/NetworkManager/dispatcher.d
|
||||
directory in alphabetical order in response to network events. Each script
|
||||
should be (a) a regular file, (b) owned by root, (c) not writable by group or
|
||||
other, (d) not set-uid, (e) and executable by the owner. Each script receives
|
||||
two arguments, the first being the interface name of the device just activated,
|
||||
and second an action.
|
||||
should be:
|
||||
.IP "(a)" 4
|
||||
a regular file
|
||||
.IP "(b)" 4
|
||||
owned by root
|
||||
.IP "(c)" 4
|
||||
not writable by group or other
|
||||
.IP "(d)" 4
|
||||
not set-uid
|
||||
.IP "(e)" 4
|
||||
and executable by the owner
|
||||
.PP
|
||||
Each script receives two arguments, the first being the interface name of the
|
||||
device just activated, and second an action.
|
||||
.PP
|
||||
Actions:
|
||||
.TP
|
||||
.I "up"
|
||||
The interface has been activated. The environment contains more information
|
||||
|
|
@ -64,6 +78,9 @@ The following options are supported:
|
|||
.I "\-\-version"
|
||||
Print the NetworkManager software version and exit.
|
||||
.TP
|
||||
.I "\-\-help"
|
||||
Print NetworkManager's available options and exit.
|
||||
.TP
|
||||
.I "\-\-no\-daemon"
|
||||
Do not daemonize. This is useful for debugging, and directs log output to the
|
||||
controlling terminal in addition to syslog.
|
||||
|
|
@ -113,5 +130,7 @@ When set to anything, causes NetworkManager to turn on PPP debugging in pppd,
|
|||
which logs all PPP and PPTP frames and client/server exchanges.
|
||||
.SH SEE ALSO
|
||||
.BR nm\-tool (1),
|
||||
.BR nm\-online (1),
|
||||
.BR nmcli (1),
|
||||
.BR NetworkManager.conf (5).
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
.\" NetworkManager.conf(5) manual page
|
||||
.\"
|
||||
.\" Copyright (C) 2010 Red Hat, Inc.
|
||||
.\" Copyright (C) 2010 - 2011 Red Hat, Inc.
|
||||
.\"
|
||||
.TH "NetworkManager.conf" "5" "23 November 2010" ""
|
||||
.TH "NetworkManager.conf" "5" "2 August 2011" ""
|
||||
.SH NAME
|
||||
NetworkManager.conf \- NetworkManager configuration file
|
||||
.SH SYNOPSIS
|
||||
|
|
@ -20,9 +20,6 @@ is a configuration file for NetworkManager. It is used to set up various
|
|||
aspects of NetworkManager's behavior. The location of
|
||||
the file may be changed through use of the "\-\-config=" argument for
|
||||
\fBNetworkManager\fP (8).
|
||||
|
||||
It is not necessary to restart NetworkManager when making changes, as the
|
||||
configuration file is watched for changes and reloaded automatically when necessary.
|
||||
.SH "FILE FORMAT"
|
||||
.P
|
||||
The configuration file format is so-called key file (sort of ini-style format).
|
||||
|
|
@ -163,12 +160,61 @@ warning messages.
|
|||
The following log domains are available: [NONE, HW, RFKILL, ETHER, WIFI, BT, MB,
|
||||
DHCP4, DHCP6, PPP, WIFI_SCAN, IP4, IP6, AUTOIP4, DNS, VPN, SHARING, SUPPLICANT,
|
||||
AGENTS, SETTINGS, SUSPEND, CORE, DEVICE, OLPC, WIMAX]. When "NONE" is given by
|
||||
itself, logging is disabled. MB = Mobile Broadband, AGENTS = secret agents
|
||||
operations and communication, SETTINGS = settings/config service operations,
|
||||
OLPC = OLPC Mesh device operations, CORE = core daemon operations, DEVICE =
|
||||
activation and general interface operations.
|
||||
itself, logging is disabled.
|
||||
.PP
|
||||
.RS
|
||||
HW = Hardware related operations
|
||||
.br
|
||||
RFKILL = RFKill subsystem operations
|
||||
.br
|
||||
ETHER = Ethernet device operations
|
||||
.br
|
||||
WIFI = Wi-Fi device operations
|
||||
.br
|
||||
BT = Bluetooth
|
||||
.br
|
||||
MB = Mobile Broadband
|
||||
.br
|
||||
DHCP4 = DHCP for IPv4
|
||||
.br
|
||||
DHCP6 = DHCP for IPv6
|
||||
.br
|
||||
PPP = Point-to-point protocol operations
|
||||
.br
|
||||
WIFI_SCAN = Wi-Fi scanning operations
|
||||
.br
|
||||
IP4 = Domain for IPv4 logging
|
||||
.br
|
||||
IP6 = Domain for IPv6 logging
|
||||
.br
|
||||
AUTOIP4 = AutoIP (avahi) operations
|
||||
.br
|
||||
DNS = Domain Name System related operations
|
||||
.br
|
||||
VPN = Virtual Private Network connections and operaions
|
||||
.br
|
||||
SHARING = Connection sharing
|
||||
.br
|
||||
SUPPLICANT = WPA supplicant related operations
|
||||
.br
|
||||
AGENTS = Secret agents operations and communication
|
||||
.br
|
||||
SETTINGS = Settings/config service operations
|
||||
.br
|
||||
SUSPEND = Suspend/resume
|
||||
.br
|
||||
CORE = Core daemon operations
|
||||
.br
|
||||
DEVICE = Activation and general interface operations
|
||||
.br
|
||||
OLPC = OLPC Mesh device operations
|
||||
.br
|
||||
WIMAX = Wimax device operations
|
||||
.br
|
||||
.SH "SEE ALSO"
|
||||
.BR http://live.gnome.org/NetworkManager/SystemSettings
|
||||
.sp
|
||||
.BR NetworkManager (8),
|
||||
.BR nm\-tool (1).
|
||||
.BR nmcli (1),
|
||||
.BR nm\-tool (1),
|
||||
.BR nm\-online (1).
|
||||
|
|
|
|||
|
|
@ -86,6 +86,17 @@ enum {
|
|||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
static void
|
||||
update_mm_enabled (NMModem *self, gboolean new_enabled)
|
||||
{
|
||||
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
|
||||
|
||||
if (priv->mm_enabled != new_enabled) {
|
||||
priv->mm_enabled = new_enabled;
|
||||
g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED);
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_modem_get_mm_enabled (NMModem *self)
|
||||
{
|
||||
|
|
@ -822,8 +833,7 @@ get_mm_enabled_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_d
|
|||
}
|
||||
|
||||
if (G_VALUE_HOLDS_BOOLEAN (&value)) {
|
||||
NM_MODEM_GET_PRIVATE (self)->mm_enabled = g_value_get_boolean (&value);
|
||||
g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED);
|
||||
update_mm_enabled (self, g_value_get_boolean (&value));
|
||||
} else
|
||||
nm_log_warn (LOGD_MB, "failed get modem enabled state: unexpected reply type");
|
||||
|
||||
|
|
@ -880,6 +890,9 @@ nm_modem_set_mm_enabled (NMModem *self, gboolean enabled)
|
|||
self, NULL,
|
||||
G_TYPE_BOOLEAN, enabled,
|
||||
G_TYPE_INVALID);
|
||||
/* If we are disabling the modem, stop saying that it's enabled. */
|
||||
if (!enabled)
|
||||
update_mm_enabled (self, enabled);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -898,8 +911,7 @@ modem_properties_changed (DBusGProxy *proxy,
|
|||
|
||||
value = g_hash_table_lookup (props, "Enabled");
|
||||
if (value && G_VALUE_HOLDS_BOOLEAN (value)) {
|
||||
priv->mm_enabled = g_value_get_boolean (value);
|
||||
g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED);
|
||||
update_mm_enabled (self, g_value_get_boolean (value));
|
||||
}
|
||||
|
||||
value = g_hash_table_lookup (props, "IpMethod");
|
||||
|
|
|
|||
|
|
@ -902,6 +902,9 @@ schedule_activate_check (NMPolicy *policy, NMDevice *device, guint delay_seconds
|
|||
if (state < NM_DEVICE_STATE_DISCONNECTED)
|
||||
return;
|
||||
|
||||
if (!nm_device_interface_get_enabled (NM_DEVICE_INTERFACE (device)))
|
||||
return;
|
||||
|
||||
if (!nm_device_autoconnect_allowed (device))
|
||||
return;
|
||||
|
||||
|
|
@ -1060,6 +1063,12 @@ nsps_changed (NMDeviceWimax *device, NMWimaxNsp *nsp, gpointer user_data)
|
|||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
modem_enabled_changed (NMDeviceModem *device, gpointer user_data)
|
||||
{
|
||||
schedule_activate_check ((NMPolicy *) (user_data), NM_DEVICE (device), 0);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
gulong id;
|
||||
NMDevice *device;
|
||||
|
|
@ -1094,6 +1103,8 @@ device_added (NMManager *manager, NMDevice *device, gpointer user_data)
|
|||
_connect_device_signal (policy, device, "nsp-added", nsps_changed);
|
||||
_connect_device_signal (policy, device, "nsp-removed", nsps_changed);
|
||||
#endif
|
||||
} else if (NM_IS_DEVICE_MODEM (device)) {
|
||||
_connect_device_signal (policy, device, NM_DEVICE_MODEM_ENABLE_CHANGED, modem_enabled_changed);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -382,25 +382,14 @@ nm_settings_connection_replace_settings (NMSettingsConnection *self,
|
|||
new_settings = nm_connection_to_hash (new, NM_SETTING_HASH_FLAG_ALL);
|
||||
g_assert (new_settings);
|
||||
if (nm_connection_replace_settings (NM_CONNECTION (self), new_settings, error)) {
|
||||
GHashTableIter iter;
|
||||
NMSetting *setting;
|
||||
const char *setting_name;
|
||||
GHashTable *setting_hash;
|
||||
|
||||
/* Copy the connection to keep its secrets around even if NM
|
||||
* calls nm_connection_clear_secrets().
|
||||
*/
|
||||
update_secrets_cache (self);
|
||||
|
||||
/* And add the transient secrets back */
|
||||
if (transient_secrets) {
|
||||
g_hash_table_iter_init (&iter, transient_secrets);
|
||||
while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting_hash)) {
|
||||
setting = nm_connection_get_setting_by_name (NM_CONNECTION (self), setting_name);
|
||||
if (setting)
|
||||
nm_setting_update_secrets (setting, setting_hash, NULL);
|
||||
}
|
||||
}
|
||||
if (transient_secrets)
|
||||
nm_connection_update_secrets (NM_CONNECTION (self), NULL, transient_secrets, NULL);
|
||||
|
||||
nm_settings_connection_recheck_visibility (self);
|
||||
success = TRUE;
|
||||
|
|
@ -1109,31 +1098,30 @@ con_update_cb (NMSettingsConnection *connection,
|
|||
}
|
||||
|
||||
static void
|
||||
only_agent_secrets_cb (NMSetting *setting,
|
||||
const char *key,
|
||||
const GValue *value,
|
||||
GParamFlags flags,
|
||||
gpointer user_data)
|
||||
secrets_filter_cb (NMSetting *setting,
|
||||
const char *key,
|
||||
const GValue *value,
|
||||
GParamFlags flags,
|
||||
gpointer user_data)
|
||||
{
|
||||
NMSettingSecretFlags filter_flags = GPOINTER_TO_UINT (user_data);
|
||||
NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
|
||||
const char *secret_name = NULL;
|
||||
GHashTableIter iter;
|
||||
|
||||
if (flags & NM_SETTING_PARAM_SECRET) {
|
||||
NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE;
|
||||
|
||||
/* Clear out system-owned or always-ask secrets */
|
||||
if (NM_IS_SETTING_VPN (setting) && !strcmp (key, NM_SETTING_VPN_SECRETS)) {
|
||||
GHashTableIter iter;
|
||||
const char *secret_name = NULL;
|
||||
|
||||
/* VPNs are special; need to handle each secret separately */
|
||||
g_hash_table_iter_init (&iter, (GHashTable *) g_value_get_boxed (value));
|
||||
while (g_hash_table_iter_next (&iter, (gpointer *) &secret_name, NULL)) {
|
||||
while (g_hash_table_iter_next (&iter, (gpointer) &secret_name, NULL)) {
|
||||
secret_flags = NM_SETTING_SECRET_FLAG_NONE;
|
||||
nm_setting_get_secret_flags (setting, secret_name, &secret_flags, NULL);
|
||||
if (secret_flags != NM_SETTING_SECRET_FLAG_AGENT_OWNED)
|
||||
if (!(secret_flags & filter_flags))
|
||||
nm_setting_vpn_remove_secret (NM_SETTING_VPN (setting), secret_name);
|
||||
}
|
||||
} else {
|
||||
nm_setting_get_secret_flags (setting, key, &secret_flags, NULL);
|
||||
if (secret_flags != NM_SETTING_SECRET_FLAG_AGENT_OWNED)
|
||||
if (!(secret_flags & filter_flags))
|
||||
g_object_set (G_OBJECT (setting), key, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
|
@ -1148,23 +1136,52 @@ update_auth_cb (NMSettingsConnection *self,
|
|||
{
|
||||
NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (self);
|
||||
NMConnection *new_settings = data;
|
||||
NMConnection *for_agent;
|
||||
NMConnection *for_agent, *dup;
|
||||
NMSettingSecretFlags filter_flags;
|
||||
GHashTable *hash;
|
||||
GError *local = NULL;
|
||||
|
||||
if (error)
|
||||
dbus_g_method_return_error (context, error);
|
||||
else {
|
||||
/* Cache the new secrets since they may get overwritten by the replace
|
||||
* when transient secrets are copied back.
|
||||
*/
|
||||
dup = nm_connection_duplicate (new_settings);
|
||||
|
||||
/* Update and commit our settings. */
|
||||
nm_settings_connection_replace_and_commit (self,
|
||||
new_settings,
|
||||
con_update_cb,
|
||||
context);
|
||||
|
||||
/* Copy new agent secrets back to the connection */
|
||||
filter_flags = NM_SETTING_SECRET_FLAG_AGENT_OWNED | NM_SETTING_SECRET_FLAG_NOT_SAVED;
|
||||
nm_connection_for_each_setting_value (dup,
|
||||
secrets_filter_cb,
|
||||
GUINT_TO_POINTER (filter_flags));
|
||||
hash = nm_connection_to_hash (dup, NM_SETTING_HASH_FLAG_ONLY_SECRETS);
|
||||
g_object_unref (dup);
|
||||
|
||||
if (hash) {
|
||||
if (!nm_connection_update_secrets (NM_CONNECTION (self), NULL, hash, &local)) {
|
||||
nm_log_warn (LOGD_SETTINGS, "Failed to update connection secrets: (%d) %s",
|
||||
local ? local->code : -1,
|
||||
local && local->message ? local->message : "(unknown)");
|
||||
g_clear_error (&local);
|
||||
}
|
||||
g_hash_table_destroy (hash);
|
||||
}
|
||||
|
||||
/* Dupe the connection and clear out non-agent-owned secrets so we can
|
||||
* send the agent-owned ones to agents to be saved. Only send them to
|
||||
* agents of the same UID as the Update() request sender.
|
||||
*/
|
||||
for_agent = nm_connection_duplicate (NM_CONNECTION (self));
|
||||
nm_connection_for_each_setting_value (for_agent, only_agent_secrets_cb, NULL);
|
||||
filter_flags = NM_SETTING_SECRET_FLAG_AGENT_OWNED;
|
||||
nm_connection_for_each_setting_value (for_agent,
|
||||
secrets_filter_cb,
|
||||
GUINT_TO_POINTER (filter_flags));
|
||||
nm_agent_manager_save_secrets (priv->agent_mgr, for_agent, TRUE, sender_uid);
|
||||
g_object_unref (for_agent);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Copyright (C) 2008 - 2010 Red Hat, Inc.
|
||||
* Copyright (C) 2008 - 2011 Red Hat, Inc.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
|
@ -181,7 +181,7 @@ nm_ifcfg_connection_get_unmanaged_spec (NMIfcfgConnection *self)
|
|||
static void
|
||||
commit_changes (NMSettingsConnection *connection,
|
||||
NMSettingsConnectionCommitFunc callback,
|
||||
gpointer user_data)
|
||||
gpointer user_data)
|
||||
{
|
||||
NMIfcfgConnectionPrivate *priv = NM_IFCFG_CONNECTION_GET_PRIVATE (connection);
|
||||
GError *error = NULL;
|
||||
|
|
@ -208,9 +208,12 @@ commit_changes (NMSettingsConnection *connection,
|
|||
NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS);
|
||||
g_object_unref (reread);
|
||||
|
||||
/* Don't bother writing anything out if nothing really changed */
|
||||
if (same == TRUE)
|
||||
/* Don't bother writing anything out if in-memory and on-disk data are the same */
|
||||
if (same) {
|
||||
/* But chain up to parent to handle success - emits updated signal */
|
||||
NM_SETTINGS_CONNECTION_CLASS (nm_ifcfg_connection_parent_class)->commit_changes (connection, callback, user_data);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (writer_update_connection (NM_CONNECTION (connection),
|
||||
|
|
@ -227,7 +230,7 @@ commit_changes (NMSettingsConnection *connection,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
static void
|
||||
do_delete (NMSettingsConnection *connection,
|
||||
NMSettingsConnectionDeleteFunc callback,
|
||||
gpointer user_data)
|
||||
|
|
|
|||
|
|
@ -269,20 +269,24 @@ connection_new_or_changed (SCPluginIfcfg *self,
|
|||
|
||||
/* Successfully read connection changes */
|
||||
|
||||
/* When the connections are the same, nothing is done */
|
||||
if (nm_connection_compare (NM_CONNECTION (existing),
|
||||
NM_CONNECTION (new),
|
||||
NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
|
||||
NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)) {
|
||||
old_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (existing));
|
||||
new_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (new));
|
||||
|
||||
/* When interface is unmanaged or the connections and unmanaged specs are the same
|
||||
* there's nothing to do */
|
||||
if ( (g_strcmp0 (old_unmanaged, new_unmanaged) == 0 && new_unmanaged != NULL)
|
||||
|| ( nm_connection_compare (NM_CONNECTION (existing),
|
||||
NM_CONNECTION (new),
|
||||
NM_SETTING_COMPARE_FLAG_IGNORE_AGENT_OWNED_SECRETS |
|
||||
NM_SETTING_COMPARE_FLAG_IGNORE_NOT_SAVED_SECRETS)
|
||||
&& g_strcmp0 (old_unmanaged, new_unmanaged) == 0)) {
|
||||
|
||||
g_object_unref (new);
|
||||
return;
|
||||
}
|
||||
|
||||
PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "updating %s", path);
|
||||
|
||||
old_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (existing));
|
||||
new_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (new));
|
||||
|
||||
if (new_unmanaged) {
|
||||
if (!old_unmanaged) {
|
||||
/* Unexport the connection by telling the settings service it's
|
||||
|
|
@ -290,6 +294,11 @@ connection_new_or_changed (SCPluginIfcfg *self,
|
|||
* unmanaged specs have changed.
|
||||
*/
|
||||
nm_settings_connection_signal_remove (NM_SETTINGS_CONNECTION (existing));
|
||||
/* Remove the path so that claim_connection() doesn't complain later when
|
||||
* interface gets managed and connection is re-added. */
|
||||
nm_connection_set_path (NM_CONNECTION (existing), NULL);
|
||||
|
||||
g_object_set (existing, NM_IFCFG_CONNECTION_UNMANAGED, new_unmanaged, NULL);
|
||||
g_signal_emit_by_name (self, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -39,9 +39,7 @@
|
|||
#include <nm-device-wifi.h>
|
||||
#include <nm-device-modem.h>
|
||||
#include <nm-device-bt.h>
|
||||
#if WITH_WIMAX
|
||||
#include <nm-device-wimax.h>
|
||||
#endif
|
||||
#include <nm-utils.h>
|
||||
#include <nm-setting-ip4-config.h>
|
||||
#include <nm-setting-ip6-config.h>
|
||||
|
|
@ -198,7 +196,6 @@ detail_access_point (gpointer data, gpointer user_data)
|
|||
g_free (tmp);
|
||||
}
|
||||
|
||||
#if WITH_WIMAX
|
||||
static const char *
|
||||
wimax_network_type_to_str (NMWimaxNspNetworkType type)
|
||||
{
|
||||
|
|
@ -238,7 +235,6 @@ detail_nsp (gpointer data, gpointer user_data)
|
|||
g_free (label);
|
||||
g_free (data_str);
|
||||
}
|
||||
#endif
|
||||
|
||||
static gchar *
|
||||
ip4_address_as_string (guint32 ip)
|
||||
|
|
@ -370,10 +366,8 @@ detail_device (gpointer data, gpointer user_data)
|
|||
print_string ("Type", "Mobile Broadband (unknown)");
|
||||
} else if (NM_IS_DEVICE_BT (device))
|
||||
print_string ("Type", "Bluetooth");
|
||||
#if WITH_WIMAX
|
||||
else if (NM_IS_DEVICE_WIMAX (device))
|
||||
print_string ("Type", "WiMAX");
|
||||
#endif
|
||||
|
||||
print_string ("Driver", nm_device_get_driver (device) ? nm_device_get_driver (device) : "(unknown)");
|
||||
|
||||
|
|
@ -390,10 +384,8 @@ detail_device (gpointer data, gpointer user_data)
|
|||
tmp = g_strdup (nm_device_ethernet_get_hw_address (NM_DEVICE_ETHERNET (device)));
|
||||
else if (NM_IS_DEVICE_WIFI (device))
|
||||
tmp = g_strdup (nm_device_wifi_get_hw_address (NM_DEVICE_WIFI (device)));
|
||||
#if WITH_WIMAX
|
||||
else if (NM_IS_DEVICE_WIMAX (device))
|
||||
tmp = g_strdup (nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device)));
|
||||
#endif
|
||||
|
||||
if (tmp) {
|
||||
print_string ("HW Address", tmp);
|
||||
|
|
@ -459,7 +451,6 @@ detail_device (gpointer data, gpointer user_data)
|
|||
print_string (" Carrier", "on");
|
||||
else
|
||||
print_string (" Carrier", "off");
|
||||
#if WITH_WIMAX
|
||||
} else if (NM_IS_DEVICE_WIMAX (device)) {
|
||||
NMDeviceWimax *wimax = NM_DEVICE_WIMAX (device);
|
||||
NMWimaxNsp *active_nsp = NULL;
|
||||
|
|
@ -520,7 +511,6 @@ detail_device (gpointer data, gpointer user_data)
|
|||
nsps = nm_device_wimax_get_nsps (NM_DEVICE_WIMAX (device));
|
||||
if (nsps && nsps->len)
|
||||
g_ptr_array_foreach ((GPtrArray *) nsps, detail_nsp, (gpointer) active_name);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* IP Setup info */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue