From f60117b41d5433be1b4a96d82cd11d0c3dce9b63 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Mon, 23 Apr 2018 18:00:21 +0200 Subject: New upstream version 1.11.3 --- libnm/NetworkManager.h | 2 + libnm/fake-typelib/NMClient.gir | 9 + libnm/fake-typelib/NetworkManager.gir | 10 + libnm/fake-typelib/meson.build | 30 + libnm/fake-typelib/typelibs.gresource.xml | 7 + libnm/generate-plugin-docs.pl | 20 +- libnm/generate-setting-docs.py | 5 + libnm/libnm.ver | 30 + libnm/meson.build | 259 ++++ libnm/nm-access-point.c | 2 +- libnm/nm-active-connection.c | 4 +- libnm/nm-autoptr.h | 85 ++ libnm/nm-checkpoint.c | 219 +++ libnm/nm-checkpoint.h | 53 + libnm/nm-client.c | 421 +++++- libnm/nm-client.h | 52 + libnm/nm-dbus-helpers.h | 4 + libnm/nm-device-bond.c | 4 +- libnm/nm-device-bridge.c | 4 +- libnm/nm-device-ip-tunnel.c | 36 + libnm/nm-device-ip-tunnel.h | 4 + libnm/nm-device-team.c | 4 +- libnm/nm-device-wifi.c | 4 +- libnm/nm-device-wimax.c | 4 +- libnm/nm-device.c | 290 ++-- libnm/nm-dhcp-config.c | 6 +- libnm/nm-dhcp4-config.h | 11 +- libnm/nm-dhcp6-config.h | 11 +- libnm/nm-dns-manager.h | 11 +- libnm/nm-enum-types.c.template | 76 + libnm/nm-enum-types.h.template | 22 + libnm/nm-ip-config.c | 2 +- libnm/nm-ip4-config.h | 11 +- libnm/nm-ip6-config.h | 11 +- libnm/nm-libnm-utils.c | 591 +++++++- libnm/nm-libnm-utils.h | 9 +- libnm/nm-manager.c | 429 +++++- libnm/nm-manager.h | 52 +- libnm/nm-object-private.h | 4 + libnm/nm-object.c | 9 +- libnm/nm-property-docs.xml | 33 +- libnm/nm-remote-connection-private.h | 4 + libnm/nm-remote-connection.c | 39 +- libnm/nm-remote-connection.h | 8 +- libnm/nm-remote-settings.h | 12 +- libnm/nm-secret-agent-old.c | 14 +- libnm/nm-settings-docs.xml | 33 +- libnm/nm-settings-ifcfg-rh-docs.xml | 9 +- libnm/nm-types.h | 1 + libnm/nm-vpn-editor.h | 2 +- libnm/nm-vpn-plugin-old.c | 133 +- libnm/nm-vpn-service-plugin.c | 201 +-- libnm/nm-vpn-service-plugin.h | 3 + libnm/tests/meson.build | 42 + libnm/tests/test-general.c | 2142 ++++++++++++++++++++++++++++- libnm/tests/test-secret-agent.c | 3 +- 56 files changed, 4890 insertions(+), 606 deletions(-) create mode 100644 libnm/fake-typelib/NMClient.gir create mode 100644 libnm/fake-typelib/NetworkManager.gir create mode 100644 libnm/fake-typelib/meson.build create mode 100644 libnm/fake-typelib/typelibs.gresource.xml create mode 100644 libnm/meson.build create mode 100644 libnm/nm-autoptr.h create mode 100644 libnm/nm-checkpoint.c create mode 100644 libnm/nm-checkpoint.h create mode 100644 libnm/nm-enum-types.c.template create mode 100644 libnm/nm-enum-types.h.template create mode 100644 libnm/tests/meson.build (limited to 'libnm') diff --git a/libnm/NetworkManager.h b/libnm/NetworkManager.h index 2bdd2ed9..e04911c6 100644 --- a/libnm/NetworkManager.h +++ b/libnm/NetworkManager.h @@ -108,6 +108,8 @@ #include "nm-vpn-service-plugin.h" #include "nm-wimax-nsp.h" +#include "nm-autoptr.h" + #undef __NETWORKMANAGER_H_INSIDE__ #endif /* __NETWORKMANAGER_H__ */ diff --git a/libnm/fake-typelib/NMClient.gir b/libnm/fake-typelib/NMClient.gir new file mode 100644 index 00000000..3002f8d6 --- /dev/null +++ b/libnm/fake-typelib/NMClient.gir @@ -0,0 +1,9 @@ + + + + + diff --git a/libnm/fake-typelib/NetworkManager.gir b/libnm/fake-typelib/NetworkManager.gir new file mode 100644 index 00000000..d15d29af --- /dev/null +++ b/libnm/fake-typelib/NetworkManager.gir @@ -0,0 +1,10 @@ + + + + + + diff --git a/libnm/fake-typelib/meson.build b/libnm/fake-typelib/meson.build new file mode 100644 index 00000000..c0a779a2 --- /dev/null +++ b/libnm/fake-typelib/meson.build @@ -0,0 +1,30 @@ +g_ir_compiler = find_program('g-ir-compiler') + +girs = [ + 'NetworkManager', + 'NMClient' +] + +resource_data = [] + +foreach gir: girs + gir_typelib = gir + '.typelib' + + resource_data += custom_target( + gir_typelib, + input: gir + '.gir', + output: gir_typelib, + command: [g_ir_compiler, '@INPUT@', '-o', '@OUTPUT@'] + ) +endforeach + +resource = 'typelibs' + +sources += gnome.compile_resources( + resource, + resource + '.gresource.xml', + source_dir: '.', + dependencies: resource_data, + extra_args: '--manual-register', + export: true +) diff --git a/libnm/fake-typelib/typelibs.gresource.xml b/libnm/fake-typelib/typelibs.gresource.xml new file mode 100644 index 00000000..9a71d975 --- /dev/null +++ b/libnm/fake-typelib/typelibs.gresource.xml @@ -0,0 +1,7 @@ + + + + NetworkManager.typelib + NMClient.typelib + + diff --git a/libnm/generate-plugin-docs.pl b/libnm/generate-plugin-docs.pl index 24912a03..e4963b7c 100755 --- a/libnm/generate-plugin-docs.pl +++ b/libnm/generate-plugin-docs.pl @@ -46,25 +46,14 @@ use v5.10; # global variables my @keywords = ("property", "variable", "format", "values", "default", "example", "description"); -my @source_files; my @data; my $fo; -(scalar @ARGV == 3) or die "Usage: $0 \n"; -my ($plugin, $srcdir, $output) = @ARGV; +(scalar @ARGV >= 3) or die "Usage: $0 \n"; +my ($plugin, $output, (@source_files)) = @ARGV; my $start_tag = "---$plugin---\\s*\$"; my $end_tag = '---end---'; -# get source files to scan for documentation comments (nm-setting-.c) -my $file = "$srcdir/Makefile.am"; -open my $fh, '<', $file or die "Can't open $file: $!"; -while (my $line = <$fh>) { - if ($line =~ /^\t*(libnm-core\/nm-setting-[^.]*\.c)( \\)?$/g) { - push @source_files, $1; - } -} -close $fh; - # open output file open $fo, '>', $output or die "Can't open $output: $!"; @@ -73,11 +62,10 @@ write_header(); # write generated documenation for each setting foreach my $c_file (@source_files) { - my $path = "$srcdir/$c_file"; - my $setting_name = get_setting_name($path); + my $setting_name = get_setting_name($c_file); if ($setting_name) { write_item(""); - scan_doc_comments($path, $start_tag, $end_tag); + scan_doc_comments($c_file, $start_tag, $end_tag); write_item(""); } } diff --git a/libnm/generate-setting-docs.py b/libnm/generate-setting-docs.py index f888ff22..22552615 100755 --- a/libnm/generate-setting-docs.py +++ b/libnm/generate-setting-docs.py @@ -183,6 +183,7 @@ def usage(): exit() parser = argparse.ArgumentParser() +parser.add_argument('-l', '--lib-path', metavar='PATH', action='append', help='path to scan for shared libraries') parser.add_argument('-g', '--gir', metavar='FILE', help='NM-1.0.gir file') parser.add_argument('-x', '--overrides', metavar='FILE', help='documentation overrides file') parser.add_argument('-o', '--output', metavar='FILE', help='output file') @@ -191,6 +192,10 @@ args = parser.parse_args() if args.gir is None or args.output is None: usage() +if args.lib_path: + for lib in args.lib_path: + GIRepository.Repository.prepend_library_path(lib) + girxml = ET.parse(args.gir).getroot() outfile = open(args.output, mode='w') diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 7646a931..564cdb39 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -1331,3 +1331,33 @@ global: nm_utils_tc_tfilter_from_str; nm_utils_tc_tfilter_to_str; } libnm_1_10_0; + +libnm_1_12_0 { +global: + nm_checkpoint_create_flags_get_type; + nm_checkpoint_get_created; + nm_checkpoint_get_devices; + nm_checkpoint_get_rollback_timeout; + nm_checkpoint_get_type; + nm_client_checkpoint_adjust_rollback_timeout; + nm_client_checkpoint_adjust_rollback_timeout_finish; + nm_client_checkpoint_create; + nm_client_checkpoint_create_finish; + nm_client_checkpoint_destroy; + nm_client_checkpoint_destroy_finish; + nm_client_checkpoint_rollback; + nm_client_checkpoint_rollback_finish; + nm_client_get_checkpoints; + nm_device_ip_tunnel_get_flags; + nm_ip_tunnel_flags_get_type; + nm_remote_connection_get_flags; + nm_setting_connection_get_mdns; + nm_setting_connection_mdns_get_type; + nm_setting_ip_tunnel_get_flags; + nm_setting_vpn_get_data_keys; + nm_setting_vpn_get_secret_keys; + nm_setting_wireless_security_get_fils; + nm_setting_wireless_security_fils_get_type; + nm_settings_connection_flags_get_type; + nm_vpn_service_plugin_shutdown; +} libnm_1_10_0; diff --git a/libnm/meson.build b/libnm/meson.build new file mode 100644 index 00000000..4e985b0a --- /dev/null +++ b/libnm/meson.build @@ -0,0 +1,259 @@ +libnm_inc = include_directories('.') + +sources = files('nm-libnm-utils.c') + +deps = [ + libnmdbus_dep, + shared_dep +] + +cflags = [ + '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), + '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM', + '-DNMRUNDIR="@0@"'.format(nm_pkgrundir) +] + +if have_fake_typelibs + deps += gir_dep + subdir('fake-typelib') +endif + +libnm_utils = static_library( + 'nm-utils', + sources: sources, + include_directories: libnm_core_inc, + dependencies: deps, + c_args: cflags +) + +libnm_headers = files( + 'NetworkManager.h', + 'nm-access-point.h', + 'nm-active-connection.h', + 'nm-checkpoint.h', + 'nm-client.h', + 'nm-device-adsl.h', + 'nm-device-bond.h', + 'nm-device-bridge.h', + 'nm-device-bt.h', + 'nm-device-dummy.h', + 'nm-device-ethernet.h', + 'nm-device-generic.h', + 'nm-device.h', + 'nm-device-infiniband.h', + 'nm-device-ip-tunnel.h', + 'nm-device-macsec.h', + 'nm-device-macvlan.h', + 'nm-device-modem.h', + 'nm-device-olpc-mesh.h', + 'nm-device-ovs-interface.h', + 'nm-device-ovs-port.h', + 'nm-device-ovs-bridge.h', + 'nm-device-ppp.h', + 'nm-device-team.h', + 'nm-device-tun.h', + 'nm-device-vlan.h', + 'nm-device-vxlan.h', + 'nm-device-wifi.h', + 'nm-device-wimax.h', + 'nm-dhcp-config.h', + 'nm-ip-config.h', + 'nm-object.h', + 'nm-remote-connection.h', + 'nm-secret-agent-old.h', + 'nm-types.h', + 'nm-vpn-connection.h', + 'nm-vpn-editor.h', + 'nm-vpn-plugin-old.h', + 'nm-vpn-service-plugin.h', + 'nm-wimax-nsp.h' +) + +install_headers( + libnm_core_headers + libnm_headers + [version_header], + subdir: libnm_name +) + +enum_headers = libnm_headers + [version_header] +enum_types = 'nm-enum-types' + +libnm_enum = gnome.mkenums( + enum_types, + sources: enum_headers, + identifier_prefix: nm_id_prefix, + c_template: enum_types + '.c.template', + h_template: enum_types + '.h.template', + install_header: true, + install_dir: libnm_pkgincludedir +) + +libnm_sources = files( + 'nm-access-point.c', + 'nm-active-connection.c', + 'nm-checkpoint.c', + 'nm-client.c', + 'nm-dbus-helpers.c', + 'nm-device-adsl.c', + 'nm-device-bond.c', + 'nm-device-bridge.c', + 'nm-device-bt.c', + 'nm-device.c', + 'nm-device-dummy.c', + 'nm-device-ethernet.c', + 'nm-device-generic.c', + 'nm-device-infiniband.c', + 'nm-device-ip-tunnel.c', + 'nm-device-macsec.c', + 'nm-device-macvlan.c', + 'nm-device-modem.c', + 'nm-device-olpc-mesh.c', + 'nm-device-ovs-interface.c', + 'nm-device-ovs-port.c', + 'nm-device-ovs-bridge.c', + 'nm-device-ppp.c', + 'nm-device-team.c', + 'nm-device-tun.c', + 'nm-device-vlan.c', + 'nm-device-vxlan.c', + 'nm-device-wifi.c', + 'nm-device-wimax.c', + 'nm-dhcp-config.c', + 'nm-dhcp4-config.c', + 'nm-dhcp6-config.c', + 'nm-dns-manager.c', + 'nm-ip-config.c', + 'nm-ip4-config.c', + 'nm-ip6-config.c', + 'nm-manager.c', + 'nm-object.c', + 'nm-remote-connection.c', + 'nm-remote-settings.c', + 'nm-secret-agent-old.c', + 'nm-vpn-connection.c', + 'nm-vpn-plugin-old.c', + 'nm-vpn-editor.c', + 'nm-vpn-service-plugin.c', + 'nm-wimax-nsp.c' +) + +deps = [ + dl_dep, + libudev_dep, + shared_dep, + uuid_dep +] + +linker_script = join_paths(meson.current_source_dir(), 'libnm.ver') + + +libnm = shared_library( + 'nm', + sources: libnm_sources + libnm_enum, + version: libnm_version, + include_directories: libnm_core_inc, + dependencies: deps, + c_args: cflags, + link_with: libnm_utils, + link_whole: libnm_core, + link_args: [ + '-Wl,--version-script,@0@'.format(linker_script), + ], + link_depends: linker_script, + install: true +) + +libnm_dep = declare_dependency( + sources: libnm_enum[1], + include_directories: libnm_inc, + link_with: libnm +) + +pkg.generate( + libraries: libnm, + version: nm_version, + name: libnm_name, + description: 'Convenience library for clients of NetworkManager', + filebase: libnm_name, + subdirs: libnm_name, + requires: 'gio-2.0', + variables: [ + 'exec_prefix=${prefix}', + 'vpnservicedir=' + join_paths(nm_pkglibdir, 'VPN') + ] +) + +run_target( + 'check-local-exports-' + libnm_name, + command: [check_exports, libnm.full_path(), linker_script], + depends: libnm +) + +if enable_introspection + gir_sources = libnm_core_enum + libnm_core_headers + libnm_core_sources + libnm_enum + libnm_headers + libnm_sources + [version_header] + + libnm_gir = gnome.generate_gir( + libnm, + sources: gir_sources, + nsversion: nm_gir_version, + namespace: 'NM', + identifier_prefix: nm_id_prefix, + symbol_prefix: nm_id_prefix.to_lower(), + export_packages: libnm_name, + includes: 'Gio-2.0', + extra_args: cflags, + header: 'NetworkManager.h', + install: true + ) + + generate_plugin_docs = join_paths(meson.current_source_dir(), 'generate-plugin-docs.pl') + + name = 'nm-settings-keyfile-docs.xml' + nm_settings_keyfile_docs = custom_target( + name, + input: libnm_core_settings_sources, + output: name, + command: [perl, generate_plugin_docs, 'keyfile', '@OUTPUT@', '@INPUT@'] + ) + + name = 'nm-settings-docs-overrides.xml' + nm_settings_docs_overrides = custom_target( + name, + input: libnm_core_settings_sources, + output: name, + command: [perl, generate_plugin_docs, 'dbus', '@OUTPUT@', '@INPUT@'] + ) + + if enable_ifcfg_rh + name = 'nm-settings-ifcfg-rh-docs.xml' + nm_settings_ifcfg_rh_docs = custom_target( + name, + input: libnm_core_settings_sources, + output: name, + command: [perl, generate_plugin_docs, 'ifcfg-rh', '@OUTPUT@', '@INPUT@'] + ) + endif + + generate_setting_docs = join_paths(meson.current_source_dir(), 'generate-setting-docs.py') + + name = 'nm-property-docs.xml' + nm_property_docs = custom_target( + name, + input: libnm_gir[0], + output: name, + command: [generate_setting_docs, '--lib-path', meson.current_build_dir(), '--gir', '@INPUT@', '--output', '@OUTPUT@'], + depends: libnm + ) + + name = 'nm-settings-docs.xml' + nm_settings_docs = custom_target( + name, + input: libnm_gir[0], + output: name, + command: [generate_setting_docs, '--lib-path', meson.current_build_dir(), '--gir', '@INPUT@', '--overrides', nm_settings_docs_overrides, '--output', '@OUTPUT@'], + depends: libnm + ) +endif + +if enable_tests + subdir('tests') +endif diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c index ed0135ba..2e6244c6 100644 --- a/libnm/nm-access-point.c +++ b/libnm/nm-access-point.c @@ -588,7 +588,7 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - + /** * NMAccessPoint:mode: * diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c index a0ea8a25..6560fb8e 100644 --- a/libnm/nm-active-connection.c +++ b/libnm/nm-active-connection.c @@ -661,11 +661,9 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class) G_PARAM_STATIC_STRINGS)); /** - * NMActiveConnection:devices: + * NMActiveConnection:devices: (type GPtrArray(NMDevice)) * * The devices of the active connection. - * - * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_DEVICES, diff --git a/libnm/nm-autoptr.h b/libnm/nm-autoptr.h new file mode 100644 index 00000000..6b2fd015 --- /dev/null +++ b/libnm/nm-autoptr.h @@ -0,0 +1,85 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + * Copyright 2018 Red Hat, Inc. + */ + +#ifndef __NM_AUTOPTR_H__ +#define __NM_AUTOPTR_H__ + +/* + * Note that you might use this header with older versions of libnm + * that do not yet ship this header. In that case, copy the header + * into your source tree. + */ + +#include +#include + +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMClient, g_object_unref) + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMConnection, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSetting, g_object_unref) + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSetting8021x, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingAdsl, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingBluetooth, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingBond, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingBridge, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingBridgePort, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingCdma, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingConnection, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingDcb, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingDummy, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingGeneric, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingGsm, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingInfiniband, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingIP4Config, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingIP6Config, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingIPConfig, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingIPTunnel, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingMacsec, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingMacvlan, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOlpcMesh, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOvsBridge, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOvsInterface, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOvsPatch, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOvsPort, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingPpp, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingPppoe, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingProxy, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingSerial, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingTCConfig, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingTeam, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingTeamPort, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingTun, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingUser, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingVlan, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingVpn, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingVxlan, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingWimax, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingWired, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingWireless, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingWirelessSecurity, g_object_unref) + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMVpnPluginInfo, g_object_unref) + +#endif + +#endif /* __NM_AUTOPTR_H__ */ diff --git a/libnm/nm-checkpoint.c b/libnm/nm-checkpoint.c new file mode 100644 index 00000000..890e2f85 --- /dev/null +++ b/libnm/nm-checkpoint.c @@ -0,0 +1,219 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * . + * + * Copyright 2017 Red Hat, Inc. + */ + +#include "nm-default.h" + +#include "nm-checkpoint.h" +#include "nm-core-internal.h" +#include "nm-dbus-interface.h" +#include "nm-device.h" +#include "nm-object-private.h" + +typedef struct { + GPtrArray *devices; + gint64 created; + guint32 rollback_timeout; +} NMCheckpointPrivate; + +struct _NMCheckpoint { + NMObject parent; + NMCheckpointPrivate _priv; +}; + +struct _NMCheckpointClass { + NMObjectClass parent; +}; + +G_DEFINE_TYPE (NMCheckpoint, nm_checkpoint, NM_TYPE_OBJECT) + +#define NM_CHECKPOINT_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMCheckpoint, NM_IS_CHECKPOINT) + +enum { + PROP_0, + PROP_DEVICES, + PROP_CREATED, + PROP_ROLLBACK_TIMEOUT, + + LAST_PROP +}; + +/** + * nm_checkpoint_get_devices: + * @checkpoint: a #NMCheckpoint + * + * The devices that are part of this checkpoint. + * + * Returns: (element-type NMDevice): the devices list. + * + * Since: 1.12 + **/ +const GPtrArray * +nm_checkpoint_get_devices (NMCheckpoint *checkpoint) +{ + g_return_val_if_fail (NM_IS_CHECKPOINT (checkpoint), NULL); + + return NM_CHECKPOINT_GET_PRIVATE (checkpoint)->devices; +} + +/** + * nm_checkpoint_get_created: + * @checkpoint: a #NMCheckpoint + * + * Gets the timestamp (in CLOCK_BOOTTIME milliseconds) + * of checkpoint creation. + * + * Returns: the timestamp of checkpoint creation. + * + * Since: 1.12 + **/ +gint64 +nm_checkpoint_get_created (NMCheckpoint *checkpoint) +{ + g_return_val_if_fail (NM_IS_CHECKPOINT (checkpoint), 0); + + return NM_CHECKPOINT_GET_PRIVATE (checkpoint)->created; +} + +/** + * nm_checkpoint_get_rollback_timeout: + * @checkpoint: a #NMCheckpoint + * + * Gets the the timeout in seconds for automatic rollback. + * + * Returns: the rollback timeout. + * + * Since: 1.12 + **/ +guint32 +nm_checkpoint_get_rollback_timeout (NMCheckpoint *checkpoint) +{ + g_return_val_if_fail (NM_IS_CHECKPOINT (checkpoint), 0); + + return NM_CHECKPOINT_GET_PRIVATE (checkpoint)->rollback_timeout; +} + +/*****************************************************************************/ + +static void +nm_checkpoint_init (NMCheckpoint *checkpoint) +{ +} + +static void +finalize (GObject *object) +{ + NMCheckpointPrivate *priv = NM_CHECKPOINT_GET_PRIVATE (NM_CHECKPOINT (object)); + + g_ptr_array_unref (priv->devices); + + G_OBJECT_CLASS (nm_checkpoint_parent_class)->finalize (object); +} + +static void +get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + NMCheckpoint *checkpoint = NM_CHECKPOINT (object); + NMCheckpointPrivate *priv = NM_CHECKPOINT_GET_PRIVATE (checkpoint); + + switch (prop_id) { + case PROP_DEVICES: + g_value_take_boxed (value, _nm_utils_copy_object_array (priv->devices)); + break; + case PROP_CREATED: + g_value_set_int64 (value, priv->created); + break; + case PROP_ROLLBACK_TIMEOUT: + g_value_set_uint (value, priv->rollback_timeout); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +init_dbus (NMObject *object) +{ + NMCheckpointPrivate *priv = NM_CHECKPOINT_GET_PRIVATE (NM_CHECKPOINT (object)); + const NMPropertiesInfo property_info[] = { + { NM_CHECKPOINT_DEVICES, &priv->devices, NULL, NM_TYPE_DEVICE }, + { NM_CHECKPOINT_CREATED, &priv->created }, + { NM_CHECKPOINT_ROLLBACK_TIMEOUT, &priv->rollback_timeout }, + { NULL }, + }; + + NM_OBJECT_CLASS (nm_checkpoint_parent_class)->init_dbus (object); + + _nm_object_register_properties (object, + NM_DBUS_INTERFACE_CHECKPOINT, + property_info); +} + + +static void +nm_checkpoint_class_init (NMCheckpointClass *checkpoint_class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (checkpoint_class); + NMObjectClass *nm_object_class = NM_OBJECT_CLASS (checkpoint_class); + + object_class->get_property = get_property; + object_class->finalize = finalize; + + nm_object_class->init_dbus = init_dbus; + + /** + * NMCheckpoint:devices: (type GPtrArray(NMDevice)) + * + * The devices that are part of this checkpoint. + * + * Since: 1.12 + **/ + g_object_class_install_property + (object_class, PROP_DEVICES, + g_param_spec_boxed (NM_CHECKPOINT_DEVICES, "", "", + G_TYPE_PTR_ARRAY, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); + + /** + * NMCheckpoint:created: + * + * The timestamp (in CLOCK_BOOTTIME milliseconds) of checkpoint creation. + * + * Since: 1.12 + **/ + g_object_class_install_property + (object_class, PROP_CREATED, + g_param_spec_int64 (NM_CHECKPOINT_CREATED, "", "", + G_MININT64, G_MAXINT64, 0, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); + + /** + * NMCheckpoint:rollback-timeout: + * + * Timeout in seconds for automatic rollback, or zero. + * + * Since: 1.12 + **/ + g_object_class_install_property + (object_class, PROP_ROLLBACK_TIMEOUT, + g_param_spec_uint (NM_CHECKPOINT_ROLLBACK_TIMEOUT, "", "", + 0, G_MAXUINT32, 0, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); +} diff --git a/libnm/nm-checkpoint.h b/libnm/nm-checkpoint.h new file mode 100644 index 00000000..a0c9d722 --- /dev/null +++ b/libnm/nm-checkpoint.h @@ -0,0 +1,53 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program. If not, see + * . + * + * Copyright 2017 Red Hat, Inc. + */ + +#ifndef __NM_CHECKPOINT_H__ +#define __NM_CHECKPOINT_H__ + +#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION) +#error "Only can be included directly." +#endif + +#include "nm-object.h" + +G_BEGIN_DECLS + +#define NM_TYPE_CHECKPOINT (nm_checkpoint_get_type ()) +#define NM_CHECKPOINT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CHECKPOINT, NMCheckpoint)) +#define NM_CHECKPOINT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CHECKPOINT, NMCheckpointClass)) +#define NM_IS_CHECKPOINT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CHECKPOINT)) +#define NM_IS_CHECKPOINT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CHECKPOINT)) +#define NM_CHECKPOINT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CHECKPOINT, NMCheckpointClass)) + +#define NM_CHECKPOINT_DEVICES "devices" +#define NM_CHECKPOINT_CREATED "created" +#define NM_CHECKPOINT_ROLLBACK_TIMEOUT "rollback-timeout" + +/** + * NMCheckpoint: + */ +typedef struct _NMCheckpointClass NMCheckpointClass; + +GType nm_checkpoint_get_type (void); + +NM_AVAILABLE_IN_1_12 +const GPtrArray *nm_checkpoint_get_devices (NMCheckpoint *checkpoint); +NM_AVAILABLE_IN_1_12 +gint64 nm_checkpoint_get_created (NMCheckpoint *checkpoint); +NM_AVAILABLE_IN_1_12 +guint32 nm_checkpoint_get_rollback_timeout (NMCheckpoint *checkpoint); + +G_END_DECLS + +#endif /* __NM_CHECKPOINT_H__ */ diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 4653b272..a31a0845 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -50,6 +50,7 @@ #include "nm-access-point.h" #include "nm-active-connection.h" +#include "nm-checkpoint.h" #include "nm-device-adsl.h" #include "nm-device-bond.h" #include "nm-device-bridge.h" @@ -139,6 +140,7 @@ enum { PROP_DNS_MODE, PROP_DNS_RC_MANAGER, PROP_DNS_CONFIGURATION, + PROP_CHECKPOINTS, LAST_PROP }; @@ -2076,6 +2078,385 @@ dns_notify (GObject *object, } } +static void +checkpoint_create_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + GSimpleAsyncResult *simple = user_data; + NMCheckpoint *checkpoint; + GError *error = NULL; + + checkpoint = nm_manager_checkpoint_create_finish (NM_MANAGER (object), result, &error); + if (checkpoint) + g_simple_async_result_set_op_res_gpointer (simple, checkpoint, g_object_unref); + else + g_simple_async_result_take_error (simple, error); + + g_simple_async_result_complete (simple); + g_object_unref (simple); +} + +/** + * nm_client_get_checkpoints: + * @client: a #NMClient + * + * Gets all the active checkpoints. + * + * Returns: (transfer none) (element-type NMCheckpoint): a #GPtrArray + * containing all the #NMCheckpoint. The returned array is owned by the + * #NMClient object and should not be modified. + * + * Since: 1.12 + **/ +const GPtrArray * +nm_client_get_checkpoints (NMClient *client) +{ + g_return_val_if_fail (NM_IS_CLIENT (client), NULL); + + if (!nm_client_get_nm_running (client)) + return ∅ + + return nm_manager_get_checkpoints (NM_CLIENT_GET_PRIVATE (client)->manager); +} + +/** + * nm_client_checkpoint_create: + * @client: the %NMClient + * @devices: (element-type NMDevice): a list of devices for which a + * checkpoint should be created. + * @rollback_timeout: the rollback timeout in seconds + * @flags: creation flags + * @cancellable: a #GCancellable, or %NULL + * @callback: (scope async): callback to be called when the add operation completes + * @user_data: (closure): caller-specific data passed to @callback + * + * Creates a checkpoint of the current networking configuration + * for given interfaces. An empty @devices argument means all + * devices. If @rollback_timeout is not zero, a rollback is + * automatically performed after the given timeout. + * + * Since: 1.12 + **/ +void +nm_client_checkpoint_create (NMClient *client, + const GPtrArray *devices, + guint32 rollback_timeout, + NMCheckpointCreateFlags flags, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *simple; + GError *error = NULL; + + g_return_if_fail (NM_IS_CLIENT (client)); + + if (!_nm_client_check_nm_running (client, &error)) { + g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error); + return; + } + + simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data, + nm_client_checkpoint_create); + if (cancellable) + g_simple_async_result_set_check_cancellable (simple, cancellable); + nm_manager_checkpoint_create (NM_CLIENT_GET_PRIVATE (client)->manager, + devices, rollback_timeout, flags, + cancellable, checkpoint_create_cb, simple); +} + +/** + * nm_client_checkpoint_create_finish: + * @client: the #NMClient + * @result: the result passed to the #GAsyncReadyCallback + * @error: location for a #GError, or %NULL + * + * Gets the result of a call to nm_client_checkpoint_create(). + * + * Returns: (transfer full): the new #NMCheckpoint on success, %NULL on + * failure, in which case @error will be set. + * + * Since: 1.12 + **/ +NMCheckpoint * +nm_client_checkpoint_create_finish (NMClient *client, + GAsyncResult *result, + GError **error) +{ + GSimpleAsyncResult *simple; + + g_return_val_if_fail (NM_IS_CLIENT (client), NULL); + g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL); + + simple = G_SIMPLE_ASYNC_RESULT (result); + if (g_simple_async_result_propagate_error (simple, error)) + return NULL; + else + return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple)); +} + +static void +checkpoint_destroy_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + GSimpleAsyncResult *simple = user_data; + GError *error = NULL; + + if (nm_manager_checkpoint_destroy_finish (NM_MANAGER (object), result, &error)) + g_simple_async_result_set_op_res_gboolean (simple, TRUE); + else + g_simple_async_result_take_error (simple, error); + + g_simple_async_result_complete (simple); + g_object_unref (simple); +} + +/** + * nm_client_checkpoint_destroy: + * @client: the %NMClient + * @checkpoint_path: the D-Bus path for the checkpoint + * @cancellable: a #GCancellable, or %NULL + * @callback: (scope async): callback to be called when the add operation completes + * @user_data: (closure): caller-specific data passed to @callback + * + * Destroys an existing checkpoint without performing a rollback. + * + * Since: 1.12 + **/ +void +nm_client_checkpoint_destroy (NMClient *client, + const char *checkpoint_path, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *simple; + GError *error = NULL; + + g_return_if_fail (NM_IS_CLIENT (client)); + g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); + + if (!_nm_client_check_nm_running (client, &error)) { + g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error); + return; + } + + simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data, + nm_client_checkpoint_destroy); + if (cancellable) + g_simple_async_result_set_check_cancellable (simple, cancellable); + nm_manager_checkpoint_destroy (NM_CLIENT_GET_PRIVATE (client)->manager, + checkpoint_path, + cancellable, checkpoint_destroy_cb, simple); +} + +/** + * nm_client_checkpoint_destroy_finish: + * @client: an #NMClient + * @result: the result passed to the #GAsyncReadyCallback + * @error: location for a #GError, or %NULL + * + * Gets the result of a call to nm_client_checkpoint_destroy(). + * + * Returns: %TRUE on success or %FALSE on failure, in which case + * @error will be set. + * + * Since: 1.12 + **/ +gboolean +nm_client_checkpoint_destroy_finish (NMClient *client, + GAsyncResult *result, + GError **error) +{ + GSimpleAsyncResult *simple; + + g_return_val_if_fail (NM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE); + + simple = G_SIMPLE_ASYNC_RESULT (result); + if (g_simple_async_result_propagate_error (simple, error)) + return FALSE; + else + return g_simple_async_result_get_op_res_gboolean (simple); +} + +static void +checkpoint_rollback_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + GSimpleAsyncResult *simple = user_data; + GHashTable *hash; + GError *error = NULL; + + hash = nm_manager_checkpoint_rollback_finish (NM_MANAGER (object), result, &error); + if (hash) + g_simple_async_result_set_op_res_gpointer (simple, hash, (GDestroyNotify) g_hash_table_unref); + else + g_simple_async_result_take_error (simple, error); + + g_simple_async_result_complete (simple); + g_object_unref (simple); +} + +/** + * nm_client_checkpoint_rollback: + * @client: the %NMClient + * @checkpoint_path: the D-Bus path to the checkpoint + * @cancellable: a #GCancellable, or %NULL + * @callback: (scope async): callback to be called when the add operation completes + * @user_data: (closure): caller-specific data passed to @callback + * + * Performs the rollback of a checkpoint before the timeout is reached. + * + * Since: 1.12 + **/ +void +nm_client_checkpoint_rollback (NMClient *client, + const char *checkpoint_path, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *simple; + GError *error = NULL; + + g_return_if_fail (NM_IS_CLIENT (client)); + g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); + + if (!_nm_client_check_nm_running (client, &error)) { + g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error); + return; + } + + simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data, + nm_client_checkpoint_rollback); + if (cancellable) + g_simple_async_result_set_check_cancellable (simple, cancellable); + nm_manager_checkpoint_rollback (NM_CLIENT_GET_PRIVATE (client)->manager, + checkpoint_path, + cancellable, checkpoint_rollback_cb, simple); +} + +/** + * nm_client_checkpoint_rollback_finish: + * @client: an #NMClient + * @result: the result passed to the #GAsyncReadyCallback + * @error: location for a #GError, or %NULL + * + * Gets the result of a call to nm_client_checkpoint_rollback(). + * + * Returns: (transfer full) (element-type utf8 guint32): an hash table of + * devices and results. Devices are represented by their original + * D-Bus path; each result is a #NMRollbackResult. + * + * Since: 1.12 + **/ +GHashTable * +nm_client_checkpoint_rollback_finish (NMClient *client, + GAsyncResult *result, + GError **error) +{ + GSimpleAsyncResult *simple; + GHashTable *hash; + + g_return_val_if_fail (NM_IS_CLIENT (client), NULL); + g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL); + + simple = G_SIMPLE_ASYNC_RESULT (result); + if (g_simple_async_result_propagate_error (simple, error)) + return NULL; + else { + hash = g_simple_async_result_get_op_res_gpointer (simple); + return g_hash_table_ref (hash); + } +} + +static void +checkpoint_adjust_rollback_timeout_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + gs_unref_object GSimpleAsyncResult *simple = user_data; + GError *error = NULL; + + if (nm_manager_checkpoint_adjust_rollback_timeout_finish (NM_MANAGER (object), result, &error)) + g_simple_async_result_set_op_res_gboolean (simple, TRUE); + else + g_simple_async_result_take_error (simple, error); + + g_simple_async_result_complete (simple); +} + +/** + * nm_client_checkpoint_adjust_rollback_timeout: + * @client: the %NMClient + * @checkpoint_path: a D-Bus path to a checkpoint + * @add_timeout: the timeout in seconds counting from now. + * Set to zero, to disable the timeout. + * @cancellable: a #GCancellable, or %NULL + * @callback: (scope async): callback to be called when the add operation completes + * @user_data: (closure): caller-specific data passed to @callback + * + * Resets the timeout for the checkpoint with path @checkpoint_path + * to @timeout_add. + * + * Since: 1.12 + **/ +void +nm_client_checkpoint_adjust_rollback_timeout (NMClient *client, + const char *checkpoint_path, + guint32 add_timeout, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *simple; + GError *error = NULL; + + g_return_if_fail (NM_IS_CLIENT (client)); + g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); + + if (!_nm_client_check_nm_running (client, &error)) { + g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error); + return; + } + + simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data, + nm_client_checkpoint_rollback); + if (cancellable) + g_simple_async_result_set_check_cancellable (simple, cancellable); + nm_manager_checkpoint_adjust_rollback_timeout (NM_CLIENT_GET_PRIVATE (client)->manager, + checkpoint_path, add_timeout, + cancellable, checkpoint_adjust_rollback_timeout_cb, simple); +} + +/** + * nm_client_checkpoint_adjust_rollback_timeout_finish: + * @client: an #NMClient + * @result: the result passed to the #GAsyncReadyCallback + * @error: location for a #GError, or %NULL + * + * Gets the result of a call to nm_client_checkpoint_adjust_rollback_timeout(). + * + * Returns: %TRUE on success or %FALSE on failure. + * + * Since: 1.12 + **/ +gboolean +nm_client_checkpoint_adjust_rollback_timeout_finish (NMClient *client, + GAsyncResult *result, + GError **error) +{ + g_return_val_if_fail (NM_IS_CLIENT (client), FALSE); + g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE); + + return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), + error); +} + /****************************************************************/ /* Object Initialization */ /****************************************************************/ @@ -2206,6 +2587,8 @@ obj_nm_for_gdbus_object (NMClient *self, GDBusObject *object, GDBusObjectManager type = NM_TYPE_VPN_CONNECTION; else if (strcmp (ifname, NM_DBUS_INTERFACE_WIMAX_NSP) == 0) type = NM_TYPE_WIMAX_NSP; + else if (strcmp (ifname, NM_DBUS_INTERFACE_CHECKPOINT) == 0) + type = NM_TYPE_CHECKPOINT; if (type != G_TYPE_INVALID) break; @@ -2783,6 +3166,12 @@ get_property (GObject *object, guint prop_id, case PROP_ALL_DEVICES: g_value_take_boxed (value, _nm_utils_copy_object_array (nm_client_get_all_devices (self))); break; + case PROP_CHECKPOINTS: + if (priv->manager) + g_object_get_property (G_OBJECT (priv->manager), pspec->name, value); + else + g_value_take_boxed (value, g_ptr_array_new ()); + break; /* Settings properties. */ case PROP_CONNECTIONS: @@ -2976,11 +3365,9 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:active-connections: + * NMClient:active-connections: (type GPtrArray(NMActiveConnection)) * * The active connections. - * - * Element-type: NMActiveConnection **/ g_object_class_install_property (object_class, PROP_ACTIVE_CONNECTIONS, @@ -3057,11 +3444,9 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:devices: + * NMClient:devices: (type GPtrArray(NMDevice)) * * List of real network devices. Does not include placeholder devices. - * - * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_DEVICES, @@ -3071,11 +3456,9 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:all-devices: + * NMClient:all-devices: (type GPtrArray(NMDevice)) * * List of both real devices and device placeholders. - * - * Element-type: NMDevice * Since: 1.2 **/ g_object_class_install_property @@ -3086,14 +3469,12 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:connections: + * NMClient:connections: (type GPtrArray(NMRemoteConnection)) * * The list of configured connections that are available to the user. (Note * that this differs from the underlying D-Bus property, which may also * contain the object paths of connections that the user does not have * permission to read the details of.) - * - * Element-type: NMRemoteConnection */ g_object_class_install_property (object_class, PROP_CONNECTIONS, @@ -3170,7 +3551,7 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:dns-configuration: + * NMClient:dns-configuration: (type GPtrArray(GVariant)) * * The current DNS configuration represented as an array of * dictionaries. Each dictionary has the "nameservers", @@ -3189,6 +3570,20 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + /** + * NMClient:checkpoints: (type GPtrArray(NMCheckpoint)) + * + * The list of active checkpoints. + * + * Since: 1.12 + */ + g_object_class_install_property + (object_class, PROP_CHECKPOINTS, + g_param_spec_boxed (NM_MANAGER_CHECKPOINTS, "", "", + G_TYPE_PTR_ARRAY, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); + /* signals */ /** diff --git a/libnm/nm-client.h b/libnm/nm-client.h index 3b37b55a..6f4a86c9 100644 --- a/libnm/nm-client.h +++ b/libnm/nm-client.h @@ -403,6 +403,58 @@ const char *nm_client_get_dns_rc_manager (NMClient *client); NM_AVAILABLE_IN_1_6 const GPtrArray *nm_client_get_dns_configuration (NMClient *client); + +NM_AVAILABLE_IN_1_12 +const GPtrArray *nm_client_get_checkpoints (NMClient *client); + +NM_AVAILABLE_IN_1_12 +void nm_client_checkpoint_create (NMClient *client, + const GPtrArray *devices, + guint32 rollback_timeout, + NMCheckpointCreateFlags flags, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +NM_AVAILABLE_IN_1_12 +NMCheckpoint *nm_client_checkpoint_create_finish (NMClient *client, + GAsyncResult *result, + GError **error); + +NM_AVAILABLE_IN_1_12 +void nm_client_checkpoint_destroy (NMClient *client, + const char *checkpoint_path, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +NM_AVAILABLE_IN_1_12 +gboolean nm_client_checkpoint_destroy_finish (NMClient *client, + GAsyncResult *result, + GError **error); + +NM_AVAILABLE_IN_1_12 +void nm_client_checkpoint_rollback (NMClient *client, + const char *checkpoint_path, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +NM_AVAILABLE_IN_1_12 +GHashTable *nm_client_checkpoint_rollback_finish (NMClient *client, + GAsyncResult *result, + GError **error); + +NM_AVAILABLE_IN_1_12 +void nm_client_checkpoint_adjust_rollback_timeout (NMClient *client, + const char *checkpoint_path, + guint32 add_timeout, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); + +NM_AVAILABLE_IN_1_12 +gboolean nm_client_checkpoint_adjust_rollback_timeout_finish (NMClient *client, + GAsyncResult *result, + GError **error); + G_END_DECLS #endif /* __NM_CLIENT_H__ */ diff --git a/libnm/nm-dbus-helpers.h b/libnm/nm-dbus-helpers.h index 1847da1d..0f2cabe8 100644 --- a/libnm/nm-dbus-helpers.h +++ b/libnm/nm-dbus-helpers.h @@ -21,6 +21,10 @@ #ifndef __NM_DBUS_HELPERS_PRIVATE_H__ #define __NM_DBUS_HELPERS_PRIVATE_H__ +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif + #include "nm-dbus-compat.h" GBusType _nm_dbus_bus_type (void); diff --git a/libnm/nm-device-bond.c b/libnm/nm-device-bond.c index 96334840..9c43598f 100644 --- a/libnm/nm-device-bond.c +++ b/libnm/nm-device-bond.c @@ -248,11 +248,9 @@ nm_device_bond_class_init (NMDeviceBondClass *bond_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceBond:slaves: + * NMDeviceBond:slaves: (type GPtrArray(NMDevice)) * * The devices slaved to the bond device. - * - * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_SLAVES, diff --git a/libnm/nm-device-bridge.c b/libnm/nm-device-bridge.c index 27f362b2..76934daa 100644 --- a/libnm/nm-device-bridge.c +++ b/libnm/nm-device-bridge.c @@ -253,11 +253,9 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *bridge_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceBridge:slaves: + * NMDeviceBridge:slaves: (type GPtrArray(NMDevice)) * * The devices slaved to the bridge device. - * - * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_SLAVES, diff --git a/libnm/nm-device-ip-tunnel.c b/libnm/nm-device-ip-tunnel.c index e0dfc0f4..2f7efe9d 100644 --- a/libnm/nm-device-ip-tunnel.c +++ b/libnm/nm-device-ip-tunnel.c @@ -46,6 +46,7 @@ typedef struct { char *output_key; guint8 encap_limit; guint32 flow_label; + guint32 flags; } NMDeviceIPTunnelPrivate; enum { @@ -61,6 +62,7 @@ enum { PROP_OUTPUT_KEY, PROP_ENCAPSULATION_LIMIT, PROP_FLOW_LABEL, + PROP_FLAGS, LAST_PROP }; @@ -242,6 +244,22 @@ nm_device_ip_tunnel_get_flow_label (NMDeviceIPTunnel *device) return NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->flow_label; } +/** + * nm_device_ip_tunnel_get_flags: + * @device: a #NMDeviceIPTunnel + * + * Returns: the tunnel flags + * + * Since: 1.12 + **/ +NMIPTunnelFlags +nm_device_ip_tunnel_get_flags (NMDeviceIPTunnel *device) +{ + g_return_val_if_fail (NM_IS_DEVICE_IP_TUNNEL (device), NM_IP_TUNNEL_FLAG_NONE); + + return NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->flags; +} + static gboolean connection_compatible (NMDevice *device, NMConnection *connection, GError **error) { @@ -286,6 +304,7 @@ init_dbus (NMObject *object) { NM_DEVICE_IP_TUNNEL_OUTPUT_KEY, &priv->output_key }, { NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT, &priv->encap_limit }, { NM_DEVICE_IP_TUNNEL_FLOW_LABEL, &priv->flow_label }, + { NM_DEVICE_IP_TUNNEL_FLAGS, &priv->flags }, { NULL }, }; @@ -352,6 +371,9 @@ get_property (GObject *object, case PROP_FLOW_LABEL: g_value_set_uint (value, nm_device_ip_tunnel_get_flow_label (device)); break; + case PROP_FLAGS: + g_value_set_uint (value, nm_device_ip_tunnel_get_flags (device)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -536,4 +558,18 @@ nm_device_ip_tunnel_class_init (NMDeviceIPTunnelClass *bond_class) 0, (1 << 20) - 1, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + /** + * NMDeviceIPTunnel:flags: + * + * Tunnel flags. + * + * Since: 1.12 + **/ + g_object_class_install_property + (object_class, PROP_FLAGS, + g_param_spec_uint (NM_DEVICE_IP_TUNNEL_FLAGS, "", "", + 0, G_MAXUINT32, 0, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); } diff --git a/libnm/nm-device-ip-tunnel.h b/libnm/nm-device-ip-tunnel.h index 6d748d96..92a83edc 100644 --- a/libnm/nm-device-ip-tunnel.h +++ b/libnm/nm-device-ip-tunnel.h @@ -26,6 +26,7 @@ #endif #include "nm-device.h" +#include "nm-setting-ip-tunnel.h" G_BEGIN_DECLS @@ -47,6 +48,7 @@ G_BEGIN_DECLS #define NM_DEVICE_IP_TUNNEL_OUTPUT_KEY "output-key" #define NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT "encapsulation-limit" #define NM_DEVICE_IP_TUNNEL_FLOW_LABEL "flow-label" +#define NM_DEVICE_IP_TUNNEL_FLAGS "flags" /** * NMDeviceIPTunnel: @@ -87,6 +89,8 @@ NM_AVAILABLE_IN_1_2 guint8 nm_device_ip_tunnel_get_encapsulation_limit (NMDeviceIPTunnel *device); NM_AVAILABLE_IN_1_2 guint nm_device_ip_tunnel_get_flow_label (NMDeviceIPTunnel *device); +NM_AVAILABLE_IN_1_12 +NMIPTunnelFlags nm_device_ip_tunnel_get_flags (NMDeviceIPTunnel *device); G_END_DECLS diff --git a/libnm/nm-device-team.c b/libnm/nm-device-team.c index 0b62b864..101e3160 100644 --- a/libnm/nm-device-team.c +++ b/libnm/nm-device-team.c @@ -274,11 +274,9 @@ nm_device_team_class_init (NMDeviceTeamClass *team_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceTeam:slaves: + * NMDeviceTeam:slaves: (type GPtrArray(NMDevice)) * * The devices enslaved to the team device. - * - * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_SLAVES, diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c index e4ea94e9..1f2118fa 100644 --- a/libnm/nm-device-wifi.c +++ b/libnm/nm-device-wifi.c @@ -887,11 +887,9 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceWifi:access-points: + * NMDeviceWifi:access-points: (type GPtrArray(NMAccessPoint)) * * List of all Wi-Fi access points the device can see. - * - * Element-type: NMAccessPoint **/ g_object_class_install_property (object_class, PROP_ACCESS_POINTS, diff --git a/libnm/nm-device-wimax.c b/libnm/nm-device-wimax.c index fd0a2dc5..7134024f 100644 --- a/libnm/nm-device-wimax.c +++ b/libnm/nm-device-wimax.c @@ -650,11 +650,9 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceWimax:nsps: + * NMDeviceWimax:nsps: (type GPtrArray(NMWimaxNsp)) * * List of all WiMAX Network Service Providers the device can see. - * - * Element-type: NMWimaxNsp **/ g_object_class_install_property (object_class, PROP_NSPS, diff --git a/libnm/nm-device.c b/libnm/nm-device.c index ffdfca9c..9bb8f391 100644 --- a/libnm/nm-device.c +++ b/libnm/nm-device.c @@ -735,11 +735,9 @@ nm_device_class_init (NMDeviceClass *device_class) G_PARAM_STATIC_STRINGS)); /** - * NMDevice:available-connections: + * NMDevice:available-connections: (type GPtrArray(NMRemoteConnection)) * * The available connections of the device - * - * Element-type: NMRemoteConnection **/ g_object_class_install_property (object_class, PROP_AVAILABLE_CONNECTIONS, @@ -1297,6 +1295,136 @@ nm_device_get_available_connections (NMDevice *device) return NM_DEVICE_GET_PRIVATE (device)->available_connections; } +static const char * +get_type_name (NMDevice *device) +{ + switch (nm_device_get_device_type (device)) { + case NM_DEVICE_TYPE_ETHERNET: + return _("Ethernet"); + case NM_DEVICE_TYPE_WIFI: + return _("Wi-Fi"); + case NM_DEVICE_TYPE_BT: + return _("Bluetooth"); + case NM_DEVICE_TYPE_OLPC_MESH: + return _("OLPC Mesh"); + case NM_DEVICE_TYPE_OVS_INTERFACE: + return _("OpenVSwitch Interface"); + case NM_DEVICE_TYPE_OVS_PORT: + return _("OpenVSwitch Port"); + case NM_DEVICE_TYPE_OVS_BRIDGE: + return _("OpenVSwitch Bridge"); + case NM_DEVICE_TYPE_WIMAX: + return _("WiMAX"); + case NM_DEVICE_TYPE_MODEM: + return _("Mobile Broadband"); + case NM_DEVICE_TYPE_INFINIBAND: + return _("InfiniBand"); + case NM_DEVICE_TYPE_BOND: + return _("Bond"); + case NM_DEVICE_TYPE_TEAM: + return _("Team"); + case NM_DEVICE_TYPE_BRIDGE: + return _("Bridge"); + case NM_DEVICE_TYPE_VLAN: + return _("VLAN"); + case NM_DEVICE_TYPE_ADSL: + return _("ADSL"); + case NM_DEVICE_TYPE_MACVLAN: + return _("MACVLAN"); + case NM_DEVICE_TYPE_VXLAN: + return _("VXLAN"); + case NM_DEVICE_TYPE_IP_TUNNEL: + return _("IPTunnel"); + case NM_DEVICE_TYPE_TUN: + return _("Tun"); + case NM_DEVICE_TYPE_VETH: + return _("Veth"); + case NM_DEVICE_TYPE_MACSEC: + return _("MACsec"); + case NM_DEVICE_TYPE_DUMMY: + return _("Dummy"); + case NM_DEVICE_TYPE_PPP: + return _("PPP"); + case NM_DEVICE_TYPE_GENERIC: + case NM_DEVICE_TYPE_UNUSED1: + case NM_DEVICE_TYPE_UNUSED2: + case NM_DEVICE_TYPE_UNKNOWN: + break; + } + return _("Unknown"); +} + +static char * +get_device_type_name_with_iface (NMDevice *device) +{ + const char *type_name = get_type_name (device); + + switch (nm_device_get_device_type (device)) { + case NM_DEVICE_TYPE_BOND: + case NM_DEVICE_TYPE_TEAM: + case NM_DEVICE_TYPE_BRIDGE: + case NM_DEVICE_TYPE_VLAN: + return g_strdup_printf ("%s (%s)", type_name, nm_device_get_iface (device)); + default: + return g_strdup (type_name); + } +} + +static char * +get_device_generic_type_name_with_iface (NMDevice *device) +{ + switch (nm_device_get_device_type (device)) { + case NM_DEVICE_TYPE_ETHERNET: + case NM_DEVICE_TYPE_INFINIBAND: + return g_strdup (_("Wired")); + default: + return get_device_type_name_with_iface (device); + } +} + +static const char * +get_bus_name (NMDevice *device) +{ + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device); + struct udev_device *udevice; + const char *ifname, *bus; + + if (priv->bus_name) + goto out; + + if (!priv->udev) + return NULL; + + ifname = nm_device_get_iface (device); + if (!ifname) + return NULL; + + udevice = udev_device_new_from_subsystem_sysname (priv->udev, "net", ifname); + if (!udevice) { + udevice = udev_device_new_from_subsystem_sysname (priv->udev, "tty", ifname); + if (!udevice) + return NULL; + } + bus = udev_device_get_property_value (udevice, "ID_BUS"); + if (!g_strcmp0 (bus, "pci")) + priv->bus_name = g_strdup (_("PCI")); + else if (!g_strcmp0 (bus, "usb")) + priv->bus_name = g_strdup (_("USB")); + else { + /* Use "" instead of NULL so we can tell later that we've + * already tried. + */ + priv->bus_name = g_strdup (""); + } + udev_device_unref (udevice); + +out: + if (*priv->bus_name) + return priv->bus_name; + else + return NULL; +} + void _nm_device_set_udev (NMDevice *device, struct udev *udev) { @@ -1350,15 +1478,14 @@ _get_udev_property (NMDevice *device, } udev_device_unref (udev_device); - /* Prefer the encoded value which comes directly from the device - * over the hwdata database value. - */ - if (enc_value) { - g_free (db_value); - return enc_value; + /* Prefer the hwdata database value over what comes directly + * from the device. */ + if (db_value) { + g_free (enc_value); + return db_value; } - return db_value; + return enc_value; } static char * @@ -1443,7 +1570,7 @@ ensure_description (NMDevice *device) GParamSpec *name_prop; gs_free char *short_product = NULL; - priv->short_vendor = nm_str_realloc (nm_utils_fixup_desc_string (nm_device_get_vendor (device))); + priv->short_vendor = nm_str_realloc (nm_utils_fixup_vendor_string (nm_device_get_vendor (device))); /* Grab device's preferred name, if any */ name_prop = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (device)), "name"); @@ -1454,12 +1581,15 @@ ensure_description (NMDevice *device) g_clear_pointer (&priv->description, g_free); } - if ( !priv->short_vendor - || !(short_product = nm_utils_fixup_desc_string (nm_device_get_product (device)))) { + if (!priv->short_vendor) { priv->description = g_strdup (nm_device_get_iface (device) ?: ""); return; } + short_product = nm_utils_fixup_product_string (nm_device_get_product (device)); + if (short_product == NULL) + short_product = g_strdup (get_type_name (device)); + /* Another quick hack; if all of the fixed up vendor string * is found in product, ignore the vendor. */ @@ -1513,136 +1643,6 @@ nm_device_get_description (NMDevice *device) return priv->description; } -static const char * -get_type_name (NMDevice *device) -{ - switch (nm_device_get_device_type (device)) { - case NM_DEVICE_TYPE_ETHERNET: - return _("Ethernet"); - case NM_DEVICE_TYPE_WIFI: - return _("Wi-Fi"); - case NM_DEVICE_TYPE_BT: - return _("Bluetooth"); - case NM_DEVICE_TYPE_OLPC_MESH: - return _("OLPC Mesh"); - case NM_DEVICE_TYPE_OVS_INTERFACE: - return _("OpenVSwitch Interface"); - case NM_DEVICE_TYPE_OVS_PORT: - return _("OpenVSwitch Port"); - case NM_DEVICE_TYPE_OVS_BRIDGE: - return _("OpenVSwitch Bridge"); - case NM_DEVICE_TYPE_WIMAX: - return _("WiMAX"); - case NM_DEVICE_TYPE_MODEM: - return _("Mobile Broadband"); - case NM_DEVICE_TYPE_INFINIBAND: - return _("InfiniBand"); - case NM_DEVICE_TYPE_BOND: - return _("Bond"); - case NM_DEVICE_TYPE_TEAM: - return _("Team"); - case NM_DEVICE_TYPE_BRIDGE: - return _("Bridge"); - case NM_DEVICE_TYPE_VLAN: - return _("VLAN"); - case NM_DEVICE_TYPE_ADSL: - return _("ADSL"); - case NM_DEVICE_TYPE_MACVLAN: - return _("MACVLAN"); - case NM_DEVICE_TYPE_VXLAN: - return _("VXLAN"); - case NM_DEVICE_TYPE_IP_TUNNEL: - return _("IPTunnel"); - case NM_DEVICE_TYPE_TUN: - return _("Tun"); - case NM_DEVICE_TYPE_VETH: - return _("Veth"); - case NM_DEVICE_TYPE_MACSEC: - return _("MACsec"); - case NM_DEVICE_TYPE_DUMMY: - return _("Dummy"); - case NM_DEVICE_TYPE_PPP: - return _("PPP"); - case NM_DEVICE_TYPE_GENERIC: - case NM_DEVICE_TYPE_UNUSED1: - case NM_DEVICE_TYPE_UNUSED2: - case NM_DEVICE_TYPE_UNKNOWN: - break; - } - return _("Unknown"); -} - -static char * -get_device_type_name_with_iface (NMDevice *device) -{ - const char *type_name = get_type_name (device); - - switch (nm_device_get_device_type (device)) { - case NM_DEVICE_TYPE_BOND: - case NM_DEVICE_TYPE_TEAM: - case NM_DEVICE_TYPE_BRIDGE: - case NM_DEVICE_TYPE_VLAN: - return g_strdup_printf ("%s (%s)", type_name, nm_device_get_iface (device)); - default: - return g_strdup (type_name); - } -} - -static char * -get_device_generic_type_name_with_iface (NMDevice *device) -{ - switch (nm_device_get_device_type (device)) { - case NM_DEVICE_TYPE_ETHERNET: - case NM_DEVICE_TYPE_INFINIBAND: - return g_strdup (_("Wired")); - default: - return get_device_type_name_with_iface (device); - } -} - -static const char * -get_bus_name (NMDevice *device) -{ - NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device); - struct udev_device *udevice; - const char *ifname, *bus; - - if (priv->bus_name) - goto out; - - if (!priv->udev) - return NULL; - - ifname = nm_device_get_iface (device); - if (!ifname) - return NULL; - - udevice = udev_device_new_from_subsystem_sysname (priv->udev, "net", ifname); - if (!udevice) { - udevice = udev_device_new_from_subsystem_sysname (priv->udev, "tty", ifname); - if (!udevice) - return NULL; - } - bus = udev_device_get_property_value (udevice, "ID_BUS"); - if (!g_strcmp0 (bus, "pci")) - priv->bus_name = g_strdup (_("PCI")); - else if (!g_strcmp0 (bus, "usb")) - priv->bus_name = g_strdup (_("USB")); - else { - /* Use "" instead of NULL so we can tell later that we've - * already tried. - */ - priv->bus_name = g_strdup (""); - } - udev_device_unref (udevice); - -out: - if (*priv->bus_name) - return priv->bus_name; - else - return NULL; -} - static gboolean find_duplicates (char **names, gboolean *duplicates, @@ -1716,7 +1716,7 @@ nm_device_disambiguate_names (NMDevice **devices, g_free (names[i]); name = get_device_type_name_with_iface (devices[i]); - /* Translators: the first %s is a bus name (eg, "USB") or + /* TRANSLATORS: the first %s is a bus name (eg, "USB") or * product name, the second is a device type (eg, * "Ethernet"). You can change this to something like * "%2$s (%1$s)" if there's no grammatical way to combine @@ -2578,7 +2578,7 @@ nm_lldp_neighbor_new (void) neigh = g_new0 (NMLldpNeighbor, 1); neigh->refcount = 1; - neigh->attrs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, + neigh->attrs = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, (GDestroyNotify) g_variant_unref); return neigh; diff --git a/libnm/nm-dhcp-config.c b/libnm/nm-dhcp-config.c index 3161e296..3f835670 100644 --- a/libnm/nm-dhcp-config.c +++ b/libnm/nm-dhcp-config.c @@ -51,7 +51,7 @@ nm_dhcp_config_init (NMDhcpConfig *config) { NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (config); - priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + priv->options = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_free); } static gboolean @@ -154,11 +154,9 @@ nm_dhcp_config_class_init (NMDhcpConfigClass *config_class) G_PARAM_STATIC_STRINGS)); /** - * NMDhcpConfig:options: + * NMDhcpConfig:options: (type GHashTable(utf8,utf8)): * * The #GHashTable containing options of the configuration. - * - * Type: GLib.HashTable(utf8,utf8) **/ g_object_class_install_property (object_class, PROP_OPTIONS, diff --git a/libnm/nm-dhcp4-config.h b/libnm/nm-dhcp4-config.h index 2cbbdc9e..6669aa0e 100644 --- a/libnm/nm-dhcp4-config.h +++ b/libnm/nm-dhcp4-config.h @@ -21,9 +21,11 @@ #ifndef __NM_DHCP4_CONFIG_H__ #define __NM_DHCP4_CONFIG_H__ -#include "nm-dhcp-config.h" +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif -G_BEGIN_DECLS +#include "nm-dhcp-config.h" #define NM_TYPE_DHCP4_CONFIG (nm_dhcp4_config_get_type ()) #define NM_DHCP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP4_CONFIG, NMDhcp4Config)) @@ -40,13 +42,8 @@ typedef struct { typedef struct { NMDhcpConfigClass parent; - - /*< private >*/ - gpointer padding[4]; } NMDhcp4ConfigClass; GType nm_dhcp4_config_get_type (void); -G_END_DECLS - #endif /* __NM_DHCP4_CONFIG_H__ */ diff --git a/libnm/nm-dhcp6-config.h b/libnm/nm-dhcp6-config.h index 2d6568e1..3c18f5ec 100644 --- a/libnm/nm-dhcp6-config.h +++ b/libnm/nm-dhcp6-config.h @@ -21,9 +21,11 @@ #ifndef __NM_DHCP6_CONFIG_H__ #define __NM_DHCP6_CONFIG_H__ -#include "nm-dhcp-config.h" +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif -G_BEGIN_DECLS +#include "nm-dhcp-config.h" #define NM_TYPE_DHCP6_CONFIG (nm_dhcp6_config_get_type ()) #define NM_DHCP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP6_CONFIG, NMDhcp6Config)) @@ -40,13 +42,8 @@ typedef struct { typedef struct { NMDhcpConfigClass parent; - - /*< private >*/ - gpointer padding[4]; } NMDhcp6ConfigClass; GType nm_dhcp6_config_get_type (void); -G_END_DECLS - #endif /* __NM_DHCP6_CONFIG_H__ */ diff --git a/libnm/nm-dns-manager.h b/libnm/nm-dns-manager.h index 63989451..b72aea7d 100644 --- a/libnm/nm-dns-manager.h +++ b/libnm/nm-dns-manager.h @@ -21,11 +21,13 @@ #ifndef __NM_DNS_MANAGER_H__ #define __NM_DNS_MANAGER_H__ +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif + #include "nm-object.h" #include "nm-client.h" -G_BEGIN_DECLS - #define NM_TYPE_DNS_MANAGER (nm_dns_manager_get_type ()) #define NM_DNS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DNS_MANAGER, NMDnsManager)) #define NM_DNS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DNS_MANAGER, NMDnsManagerClass)) @@ -49,13 +51,8 @@ struct _NMDnsManager { struct _NMDnsManagerClass { NMObjectClass parent; - - /*< private >*/ - gpointer padding[8]; }; -G_END_DECLS - GType nm_dns_manager_get_type (void); const char *nm_dns_manager_get_mode (NMDnsManager *manager); diff --git a/libnm/nm-enum-types.c.template b/libnm/nm-enum-types.c.template new file mode 100644 index 00000000..5abd5c79 --- /dev/null +++ b/libnm/nm-enum-types.c.template @@ -0,0 +1,76 @@ +/*** BEGIN file-header ***/ +#include "config.h" + +#include "nm-enum-types.h" +#include "nm-default.h" + +#include "nm-version-macros.h" +#include "NetworkManager.h" +#include "nm-access-point.h" +#include "nm-active-connection.h" +#include "nm-checkpoint.h" +#include "nm-client.h" +#include "nm-device-adsl.h" +#include "nm-device-bond.h" +#include "nm-device-bridge.h" +#include "nm-device-bt.h" +#include "nm-device-dummy.h" +#include "nm-device-ethernet.h" +#include "nm-device-generic.h" +#include "nm-device-infiniband.h" +#include "nm-device-ip-tunnel.h" +#include "nm-device-macsec.h" +#include "nm-device-macvlan.h" +#include "nm-device-modem.h" +#include "nm-device-olpc-mesh.h" +#include "nm-device-ovs-interface.h" +#include "nm-device-ovs-port.h" +#include "nm-device-ovs-bridge.h" +#include "nm-device-ppp.h" +#include "nm-device-team.h" +#include "nm-device-tun.h" +#include "nm-device-vlan.h" +#include "nm-device-vxlan.h" +#include "nm-device-wifi.h" +#include "nm-device-wimax.h" +#include "nm-device.h" +#include "nm-dhcp-config.h" +#include "nm-ip-config.h" +#include "nm-object.h" +#include "nm-remote-connection.h" +#include "nm-types.h" +#include "nm-vpn-connection.h" +#include "nm-vpn-editor.h" +#include "nm-wimax-nsp.h" +#include "nm-secret-agent-old.h" +#include "nm-vpn-plugin-old.h" +#include "nm-vpn-service-plugin.h" +/*** END file-header ***/ + +/*** BEGIN value-header ***/ +GType +@enum_name@_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + + if (g_once_init_enter (&g_define_type_id__volatile)) + { + static const G@Type@Value values[] = { +/*** END value-header ***/ + +/*** BEGIN value-production ***/ + { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, +/*** END value-production ***/ + +/*** BEGIN value-tail ***/ + { 0, NULL, NULL } + }; + GType g_define_type_id = + g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + + return g_define_type_id__volatile; +} + +/*** END value-tail ***/ diff --git a/libnm/nm-enum-types.h.template b/libnm/nm-enum-types.h.template new file mode 100644 index 00000000..bd9ce40b --- /dev/null +++ b/libnm/nm-enum-types.h.template @@ -0,0 +1,22 @@ +/*** BEGIN file-header ***/ +#ifndef __NM_ENUM_TYPES_H__ +#define __NM_ENUM_TYPES_H__ + +#include +#include + +G_BEGIN_DECLS + +/*** END file-header ***/ + +/*** BEGIN enumeration-production ***/ +GType @enum_name@_get_type (void) G_GNUC_CONST; +#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ()) + +/*** END enumeration-production ***/ + +/*** BEGIN file-tail ***/ +G_END_DECLS + +#endif /* __NM_ENUM_TYPES_H__ */ +/*** END file-tail ***/ diff --git a/libnm/nm-ip-config.c b/libnm/nm-ip-config.c index 74db9994..ca99b1d4 100644 --- a/libnm/nm-ip-config.c +++ b/libnm/nm-ip-config.c @@ -304,7 +304,7 @@ nm_ip_config_class_init (NMIPConfigClass *config_class) G_PARAM_STATIC_STRINGS)); /** - * NMIPConfig:routes: + * NMIPConfig:routes: (type GPtrArray(NMIPRoute)) * * A #GPtrArray containing the routes (#NMIPRoute) of the configuration. **/ diff --git a/libnm/nm-ip4-config.h b/libnm/nm-ip4-config.h index d99b2113..266e0bc5 100644 --- a/libnm/nm-ip4-config.h +++ b/libnm/nm-ip4-config.h @@ -22,9 +22,11 @@ #ifndef __NM_IP4_CONFIG_H__ #define __NM_IP4_CONFIG_H__ -#include "nm-ip-config.h" +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif -G_BEGIN_DECLS +#include "nm-ip-config.h" #define NM_TYPE_IP4_CONFIG (nm_ip4_config_get_type ()) #define NM_IP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IP4_CONFIG, NMIP4Config)) @@ -42,13 +44,8 @@ typedef struct { typedef struct { NMIPConfigClass parent; - - /*< private >*/ - gpointer padding[4]; } NMIP4ConfigClass; GType nm_ip4_config_get_type (void); -G_END_DECLS - #endif /* __NM_IP4_CONFIG_H__ */ diff --git a/libnm/nm-ip6-config.h b/libnm/nm-ip6-config.h index 12e723b2..1d21adb4 100644 --- a/libnm/nm-ip6-config.h +++ b/libnm/nm-ip6-config.h @@ -22,9 +22,11 @@ #ifndef __NM_IP6_CONFIG_H__ #define __NM_IP6_CONFIG_H__ -#include "nm-ip-config.h" +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif -G_BEGIN_DECLS +#include "nm-ip-config.h" #define NM_TYPE_IP6_CONFIG (nm_ip6_config_get_type ()) #define NM_IP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IP6_CONFIG, NMIP6Config)) @@ -42,13 +44,8 @@ typedef struct { typedef struct { NMIPConfigClass parent; - - /*< private >*/ - gpointer padding[4]; } NMIP6ConfigClass; GType nm_ip6_config_get_type (void); -G_END_DECLS - #endif /* __NM_IP6_CONFIG_H__ */ diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c index fbbfe2c5..36219065 100644 --- a/libnm/nm-libnm-utils.c +++ b/libnm/nm-libnm-utils.c @@ -16,7 +16,7 @@ * Boston, MA 02110-1301 USA. * * Copyright 2007 - 2008 Novell, Inc. - * Copyright 2007 - 2017 Red Hat, Inc. + * Copyright 2007 - 2018 Red Hat, Inc. */ #include "nm-default.h" @@ -25,52 +25,14 @@ /*****************************************************************************/ -char * -nm_utils_fixup_desc_string (const char *desc) +static char * +_fixup_string (const char *desc, + const char *const *ignored_phrases, + const char *const *ignored_words, + gboolean square_brackets_sensible) { - static const char *const IGNORED_PHRASES[] = { - "Multiprotocol MAC/baseband processor", - "Wireless LAN Controller", - "Wireless LAN Adapter", - "Wireless Adapter", - "Network Connection", - "Wireless Cardbus Adapter", - "Wireless CardBus Adapter", - "54 Mbps Wireless PC Card", - "Wireless PC Card", - "Wireless PC", - "PC Card with XJACK(r) Antenna", - "Wireless cardbus", - "Wireless LAN PC Card", - "Technology Group Ltd.", - "Communication S.p.A.", - "Business Mobile Networks BV", - "Mobile Broadband Minicard Composite Device", - "Mobile Communications AB", - "(PC-Suite Mode)", - }; - static const char *const IGNORED_WORDS[] = { - "Semiconductor", - "Components", - "Corporation", - "Communications", - "Company", - "Corp.", - "Corp", - "Co.", - "Inc.", - "Inc", - "Incorporated", - "Ltd.", - "Limited.", - "Intel?", - "chipset", - "adapter", - "[hex]", - "NDIS", - "Module", - }; char *desc_full; + gboolean in_paren = FALSE; char *p, *q; int i; @@ -88,18 +50,23 @@ nm_utils_fixup_desc_string (const char *desc) p = q + 1; } - /* replace '_', ',', and ASCII controll characters with space. */ + /* replace '_', ',', ASCII control characters and parentheses, with space. */ for (p = desc_full; p[0]; p++) { + if (*p == '(') + in_paren = TRUE; if ( NM_IN_SET (*p, '_', ',') - || *p < ' ') + || *p < ' ' + || in_paren) *p = ' '; + if (*p == ')') + in_paren = FALSE; } /* Attempt to shorten ID by ignoring certain phrases */ - for (i = 0; i < G_N_ELEMENTS (IGNORED_PHRASES); i++) { - p = strstr (desc_full, IGNORED_PHRASES[i]); + for (i = 0; ignored_phrases[i]; i++) { + p = strstr (desc_full, ignored_phrases[i]); if (p) { - const char *eow = &p[strlen (IGNORED_PHRASES[i])]; + const char *eow = &p[strlen (ignored_phrases[i])]; /* require that the phrase is delimited by space, or * at the beginning or end of the description. */ @@ -112,7 +79,7 @@ nm_utils_fixup_desc_string (const char *desc) /* Attempt to shorten ID by ignoring certain individual words. * - word-split the description at spaces * - coalesce multiple spaces - * - skip over IGNORED_WORDS */ + * - skip over ignored_words */ p = desc_full; q = desc_full; for (;;) { @@ -131,9 +98,7 @@ nm_utils_fixup_desc_string (const char *desc) if (eow) *eow = '\0'; - if (nm_utils_strv_find_first ((char **) IGNORED_WORDS, - G_N_ELEMENTS (IGNORED_WORDS), - p) >= 0) + if (nm_utils_strv_find_first ((char **) ignored_words, -1, p) >= 0) goto next; l = strlen (p); @@ -152,11 +117,529 @@ next: *q++ = '\0'; + p = strchr (desc_full, '['); + if (p == desc_full) { + /* All we're left with is in square brackets. + * Always prefer that to a blank string.*/ + square_brackets_sensible = TRUE; + } + if (square_brackets_sensible) { + /* If there's a [] that survived the substitution, then the string + * is a short form that is generally preferrable. */ + q = strchr (desc_full, ']'); + if (p && q > p) { + p++; + memmove (desc_full, p, q - p); + desc_full[q - p] = '\0'; + } + } else { + /* [] sometimes contains the preferred human-readable name, but + * mostly it's utterly useless. Sigh. Drop it. */ + if (p) { + if (p > desc_full && p[-1] == ' ') + p--; + *p = '\0'; + } + } + if (!desc_full[0]) { g_free (desc_full); return NULL; } + return desc_full; +} + +char * +nm_utils_fixup_vendor_string (const char *desc) +{ + static const char *const IGNORED_PHRASES[] = { + "Access Systems", + "Business Mobile Networks BV", + "Communications & Multimedia", + "Company of Japan", + "Computer Co.", + "Computer Corp.", + "Computer Corporation", + "Computer Inc.", + "Computer, Inc.", + "Information and Communication Products", + "Macao Commercial Offshore", + "Mobile Phones", + "(M) Son", + "Multimedia Internet Technology", + "Technology Group Ltd.", + "Wireless Networks", + "Wireless Solutions", + NULL, + }; + static const char *const IGNORED_WORDS[] = { + "AB", + "AG", + "A/S", + "ASA", + "B.V.", + "Chips", + "Co.", + "Co", + "Communications", + "Components", + "Computers", + "Computertechnik", + "corp.", + "Corp.", + "Corp", + "Corporation", + "Design", + "Electronics", + "Enterprise", + "Enterprises", + "Europe", + "GmbH", + "Hardware", + "[hex]", + "Holdings", + "Inc.", + "Inc", + "INC.", + "Incorporated", + "Instruments", + "International", + "Intl.", + "Labs", + "Limited.", + "Limited", + "Ltd.", + "Ltd", + "Microelectronics", + "Microsystems", + "MSM", + "Multimedia", + "Networks", + "Norway", + "Optical", + "PCS", + "Semiconductor", + "Systems", + "Systemtechnik", + "Techcenter", + "Technik", + "Technologies", + "Technology", + "TECHNOLOGY", + "Telephonics", + "USA", + "WCDMA", + NULL, + }; + char *desc_full; + char *p; + + desc_full = _fixup_string (desc, IGNORED_PHRASES, IGNORED_WORDS, TRUE); + if (!desc_full) + return NULL; + + /* Chop off everything after a slash. */ + for (p = desc_full; *p; p++) { + if ((p[0] == ' ' && p[1] == '/') || p[0] == '/') { + p[0] = '\0'; + break; + } + } + + nm_assert (g_utf8_validate (desc_full, -1, NULL)); + + return desc_full; +} + +char * +nm_utils_fixup_product_string (const char *desc) +{ + static const char *const IGNORED_PHRASES[] = { + "100/10 MBit", + "10/100 Mbps", + "1.0 GbE", + "10 GbE", + "10 Gigabit", + "10 Mbps", + "1/10 Gigabit", + "150 Mbps", + "2.5 GbE", + "54 Mbps", + "Attached Port", + "+ BT", + "\"CDC Subset\"", + "CE Media Processor", + "Controller Area Network", + "Converged Network", + "DEC-Tulip compatible", + "Dish Adapter", + "Double 108 Mbps", + "Dual Band", + "Dual Port", + "Embedded UTP", + "Ethernet Connection", + "Ethernet Pro 100", + "Express Module", + "Fabric Adapter", + "Fast Ethernet", + "for 10GBASE-T" , + "for 10GbE backplane" , + "for 10GbE QSFP+" , + "for 10GbE SFP+" , + "for 1GbE", + "for 20GbE backplane" , + "for 25GbE backplane" , + "for 25GbE SFP28" , + "for 40GbE backplane" , + "for 40GbE QSFP+" , + "G Adapter", + "Gigabit Desktop Network", + "Gigabit Ethernet", + "Gigabit or", + "Host Interface", + "Host Virtual Interface", + "IEEE 802.11a/b/g", + "IEEE 802.11g", + "IEEE 802.11G", + "IEEE 802.11n", + "MAC + PHY", + "Mini Card", + "Mini Wireless", + "multicore SoC", + "Multi Function", + "N Draft 11n Wireless", + "Network Connection", + "Network Everywhere", + "N Wireless", + "N+ Wireless", + "OCT To Fast Ethernet Converter", + "PC Card", + "PCI Express", + "Platform Controller Hub", + "Plus Bluetooth", + "Quad Gigabit", + "rev 1", + "rev 17", + "rev 2", + "rev A", + "rev B", + "rev F", + "TO Ethernet", + "Turbo Wireless Adapter", + "Unified Wire", + "USB 1.1", + "USB 2.0", + "Virtual media for", + "WiFi Link", + "+ WiMAX", + "WiMAX/WiFi Link", + "Wireless G", + "Wireless G+", + "Wireless Lan", + "Wireless Mini adapter", + "Wireless Mini Adapter", + "Wireless N", + "with 1000-BASE-T interface", + "with CX4 copper interface", + "with Range Amplifier", + "with SR-XFP optical interface", + "w/ Upgradable Antenna", + NULL, + }; + static const char *const IGNORED_WORDS[] = { + "1000BaseSX", + "1000BASE-T", + "1000Base-ZX", + "100/10M", + "100baseFx", + "100Base-MII", + "100Base-T", + "100BaseT4", + "100Base-TX", + "100BaseTX", + "100GbE", + "100Mbps", + "100MBps", + "10/100", + "10/100/1000", + "10/100/1000Base-T", + "10/100/1000BASE-T", + "10/100BaseT", + "10/100baseTX", + "10/100BaseTX", + "10/100/BNC", + "10/100M", + "10/20-Gigabit", + "10/25/40/50GbE", + "10/40G", + "10base-FL", + "10BaseT", + "10BASE-T", + "10G", + "10Gb", + "10Gb/25Gb", + "10Gb/25Gb/40Gb/50Gb", + "10Gbase-T", + "10GBase-T", + "10GBASE-T", + "10GbE", + "10Gbps", + "10-Giga", + "10-Gigabit", + "10mbps", + "10Mbps", + "1/10GbE", + "1/10-Gigabit", + "11b/g/n", + "11g", + "150Mbps", + "16Gbps/10Gbps", + "1GbE", + "1x2:2", + "20GbE", + "25Gb", + "25GbE", + "2-Port", + "2x3:3", + "3G", + "3G/4G", + "3x3:3", + "40GbE", + "4G", + "54g", + "54M", + "54Mbps", + "56k", + "5G", + "802.11", + "802.11a/b/g", + "802.11abg", + "802.11a/b/g/n", + "802.11abgn", + "802.11ac", + "802.11ad", + "802.11a/g", + "802.11b", + "802.11b/g", + "802.11bg", + "802.11b/g/n", + "802.11bgn", + "802.11b/g/n-draft", + "802.11g", + "802.11n", + "802.11N", + "802.11n/b/g", + "802.11ng", + "802AIN", + "802UIG-1", + "adapter", + "Adapter", + "adaptor", + "ADSL", + "Basic", + "CAN-Bus", + "card", + "Card", + "Cardbus", + "CardBus", + "CDMA", + "CNA", + "Composite", + "controller", + "Controller", + "Copper", + "DB", + "Desktop", + "device", + "Device", + "dongle", + "driver", + "Dual-band", + "Dual-Protocol", + "EISA", + "Enhanced", + "ethernet.", + "ethernet", + "Ethernet", + "Ethernet/RNDIS", + "ExpressModule", + "family", + "Family", + "Fast/Gigabit", + "Fiber", + "gigabit", + "Gigabit", + "G-NIC", + "Hi-Gain", + "Hi-Speed", + "HSDPA", + "HSUPA", + "integrated", + "Integrated", + "interface", + "LAN", + "LAN+Winmodem", + "Laptop", + "LTE", + "LTE/UMTS/GSM", + "MAC", + "Micro", + "Mini-Card", + "Mini-USB", + "misprogrammed", + "modem", + "Modem", + "Modem/Networkcard", + "Module", + "Multimode", + "Multithreaded", + "Name:", + "net", + "network", + "Network", + "n/g/b", + "NIC", + "Notebook", + "OEM", + "PCI", + "PCI64", + "PCIe", + "PCI-E", + "PCI-Express", + "PCI-X", + "PCMCIA", + "PDA", + "PnP", + "RDMA", + "RJ-45", + "Series", + "Server", + "SoC", + "Switch", + "Technologies", + "TOE", + "USB", + "USB2.0", + "USB/Ethernet", + "UTP", + "UTP/Coax", + "v1", + "v1.1", + "v2", + "V2.0", + "v3", + "v4", + "wifi", + "Wi-Fi", + "WiFi", + "wireless", + "Wireless", + "Wireless-150N", + "Wireless-300N", + "Wireless-G", + "Wireless-N", + "WLAN", + NULL, + }; + char *desc_full; + char *p; + + desc_full = _fixup_string (desc, IGNORED_PHRASES, IGNORED_WORDS, FALSE); + if (!desc_full) + return NULL; + + /* Chop off everything after a '-'. */ + for (p = desc_full; *p; p++) { + if (p[0] == ' ' && p[1] == '-' && p[2] == ' ') { + p[0] = '\0'; + break; + } + } + nm_assert (g_utf8_validate (desc_full, -1, NULL)); + return desc_full; } + +#if WITH_FAKE_TYPELIBS + +/* + * Here we register empty "NMClient" and "NetworkManager" GIR modules as soon + * as we are loaded (if gnome-introspection is being used). This prevents the + * real modules from being loaded because they would in turn load libnm-glib + * and abort() and crash. + * + * For the high level languages that utilize GIR the crash is highly inconvenient + * while the inability to resolve any methods and attributes is potentially + * recoverable. + */ + +#include + +GResource *typelibs_get_resource (void); +void typelibs_register_resource (void); + +static void __attribute__((constructor)) +_nm_libnm_utils_init (void) +{ + GITypelib *typelib; + GBytes *data; + const char *namespace; + GModule *self; + GITypelib *(*_g_typelib_new_from_const_memory) (const guint8 *memory, + gsize len, + GError **error) = NULL; + const char *(*_g_irepository_load_typelib) (GIRepository *repository, + GITypelib *typelib, + GIRepositoryLoadFlags flags, + GError **error) = NULL; + const char *names[] = { "/org/freedesktop/libnm/fake-typelib/NetworkManager.typelib", + "/org/freedesktop/libnm/fake-typelib/NMClient.typelib" }; + int i; + + self = g_module_open (NULL, 0); + if (!self) + return; + g_module_symbol (self, "g_typelib_new_from_const_memory", + (gpointer *) &_g_typelib_new_from_const_memory); + if (_g_typelib_new_from_const_memory) { + g_module_symbol (self, "g_irepository_load_typelib", + (gpointer *) &_g_irepository_load_typelib); + } + g_module_close (self); + + if (!_g_typelib_new_from_const_memory || !_g_irepository_load_typelib) + return; + + typelibs_register_resource (); + + for (i = 0; i < 2; i++) { + gs_free_error GError *error = NULL; + + data = g_resource_lookup_data (typelibs_get_resource (), + names[i], + G_RESOURCE_LOOKUP_FLAGS_NONE, + &error); + if (!data) { + g_warning ("Fake typelib %s could not be loaded: %s", names[i], error->message); + return; + } + + typelib = _g_typelib_new_from_const_memory (g_bytes_get_data (data, NULL), + g_bytes_get_size (data), + &error); + if (!typelib) { + g_warning ("Could not create fake typelib instance %s: %s", names[i], error->message); + return; + } + + namespace = _g_irepository_load_typelib (NULL, typelib, 0, &error); + if (!namespace) { + g_warning ("Could not load fake typelib %s: %s", names[i], error->message); + return; + } + } +} + +#endif /* WITH_FAKE_TYPELIBS */ diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h index 4a5a361c..9b48b0a7 100644 --- a/libnm/nm-libnm-utils.h +++ b/libnm/nm-libnm-utils.h @@ -15,12 +15,17 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright 2017 Red Hat, Inc. + * Copyright 2017, 2018 Red Hat, Inc. */ #ifndef __NM_LIBNM_UTILS_H__ #define __NM_LIBNM_UTILS_H__ -char *nm_utils_fixup_desc_string (const char *desc); +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif + +char *nm_utils_fixup_vendor_string (const char *desc); +char *nm_utils_fixup_product_string (const char *desc); #endif /* __NM_LIBNM_UTILS_H__ */ diff --git a/libnm/nm-manager.c b/libnm/nm-manager.c index 5eeed668..2b9e0d96 100644 --- a/libnm/nm-manager.c +++ b/libnm/nm-manager.c @@ -26,6 +26,7 @@ #include #include "nm-utils.h" +#include "nm-checkpoint.h" #include "nm-common-macros.h" #include "nm-device-ethernet.h" #include "nm-device-wifi.h" @@ -34,7 +35,7 @@ #include "nm-active-connection.h" #include "nm-vpn-connection.h" #include "nm-dbus-helpers.h" -#include "nm-utils/c-list.h" +#include "c-list/src/c-list.h" #include "introspection/org.freedesktop.NetworkManager.h" @@ -61,6 +62,8 @@ typedef struct { GPtrArray *devices; GPtrArray *all_devices; GPtrArray *active_connections; + GPtrArray *checkpoints; + GSList *added_checkpoints; NMConnectivityState connectivity; NMActiveConnection *primary_connection; NMActiveConnection *activating_connection; @@ -107,6 +110,7 @@ enum { PROP_PRIMARY_CONNECTION, PROP_ACTIVATING_CONNECTION, PROP_DEVICES, + PROP_CHECKPOINTS, PROP_METERED, PROP_ALL_DEVICES, @@ -120,6 +124,8 @@ enum { ANY_DEVICE_REMOVED, ACTIVE_CONNECTION_ADDED, ACTIVE_CONNECTION_REMOVED, + CHECKPOINT_ADDED, + CHECKPOINT_REMOVED, PERMISSION_CHANGED, LAST_SIGNAL @@ -129,6 +135,53 @@ static guint signals[LAST_SIGNAL] = { 0 }; /*****************************************************************************/ +typedef struct { + NMManager *manager; + GSimpleAsyncResult *simple; + char *path; +} CheckpointInfo; + +static CheckpointInfo * +find_checkpoint_info (NMManager *manager, const char *path) +{ + NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); + CheckpointInfo *info; + GSList *iter; + + for (iter = priv->added_checkpoints; iter; iter = g_slist_next (iter)) { + info = iter->data; + if (nm_streq0 (path, info->path)) + return info; + } + + return NULL; +} + +static void +checkpoint_info_complete (NMManager *self, + CheckpointInfo *info, + NMCheckpoint *checkpoint, + GError *error) +{ + NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); + + g_return_if_fail (info); + + if (checkpoint) { + g_simple_async_result_set_op_res_gpointer (info->simple, + g_object_ref (checkpoint), + g_object_unref); + } else + g_simple_async_result_set_from_error (info->simple, error); + g_simple_async_result_complete (info->simple); + + g_object_unref (info->simple); + priv->added_checkpoints = g_slist_remove (priv->added_checkpoints, info); + + g_free (info->path); + g_slice_free (CheckpointInfo, info); +} + static void nm_manager_init (NMManager *manager) { @@ -139,7 +192,7 @@ nm_manager_init (NMManager *manager) priv->state = NM_STATE_UNKNOWN; priv->connectivity = NM_CONNECTIVITY_UNKNOWN; - priv->permissions = g_hash_table_new (g_direct_hash, g_direct_equal); + priv->permissions = g_hash_table_new (nm_direct_hash, NULL); priv->devices = g_ptr_array_new (); priv->all_devices = g_ptr_array_new (); priv->active_connections = g_ptr_array_new (); @@ -189,6 +242,7 @@ init_dbus (NMObject *object) { NM_MANAGER_PRIMARY_CONNECTION, &priv->primary_connection, NULL, NM_TYPE_ACTIVE_CONNECTION }, { NM_MANAGER_ACTIVATING_CONNECTION, &priv->activating_connection, NULL, NM_TYPE_ACTIVE_CONNECTION }, { NM_MANAGER_DEVICES, &priv->devices, NULL, NM_TYPE_DEVICE, "device" }, + { NM_MANAGER_CHECKPOINTS, &priv->checkpoints, NULL, NM_TYPE_CHECKPOINT, "checkpoint" }, { NM_MANAGER_METERED, &priv->metered }, { NM_MANAGER_ALL_DEVICES, &priv->all_devices, NULL, NM_TYPE_DEVICE, "any-device" }, { NULL }, @@ -206,6 +260,23 @@ init_dbus (NMObject *object) G_CALLBACK (manager_recheck_permissions), object, 0); } +static void +object_creation_failed (NMObject *object, const char *failed_path) +{ + NMManager *self = NM_MANAGER (object); + CheckpointInfo *info; + GError *add_error; + + info = find_checkpoint_info (self, failed_path); + if (info) { + add_error = g_error_new_literal (NM_CLIENT_ERROR, + NM_CLIENT_ERROR_OBJECT_CREATION_FAILED, + _("Checkpoint was removed before it was initialized")); + checkpoint_info_complete (self, info, NULL, add_error); + g_error_free (add_error); + } +} + static NMClientPermission nm_permission_to_client (const char *nm) { @@ -719,8 +790,7 @@ NMDevice * nm_manager_get_device_by_path (NMManager *manager, const char *object_path) { const GPtrArray *devices; - int i; - NMDevice *device = NULL; + guint i; g_return_val_if_fail (NM_IS_MANAGER (manager), NULL); g_return_val_if_fail (object_path, NULL); @@ -729,12 +799,25 @@ nm_manager_get_device_by_path (NMManager *manager, const char *object_path) for (i = 0; i < devices->len; i++) { NMDevice *candidate = g_ptr_array_index (devices, i); if (!strcmp (nm_object_get_path (NM_OBJECT (candidate)), object_path)) { - device = candidate; - break; + return candidate; } } + return NULL; +} - return device; +static NMCheckpoint * +get_checkpoint_by_path (NMManager *manager, const char *object_path) +{ + NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); + NMCheckpoint *candidate; + guint i; + + for (i = 0; i < priv->checkpoints->len; i++) { + candidate = priv->checkpoints->pdata[i]; + if (nm_streq (nm_object_get_path (NM_OBJECT (candidate)), object_path)) + return candidate; + } + return NULL; } NMDevice * @@ -1115,6 +1198,16 @@ active_connection_removed (NMManager *self, NMActiveConnection *ac) recheck_pending_activations (self); } +static void +checkpoint_added (NMManager *manager, NMCheckpoint *checkpoint) +{ + CheckpointInfo *info; + + info = find_checkpoint_info (manager, nm_object_get_path (NM_OBJECT (checkpoint))); + if (info) + checkpoint_info_complete (manager, info, checkpoint, NULL); +} + gboolean nm_manager_deactivate_connection (NMManager *manager, NMActiveConnection *active, @@ -1216,6 +1309,300 @@ free_active_connections (NMManager *manager) /*****************************************************************************/ +static const char ** +get_device_paths (const GPtrArray *devices) +{ + const char **array; + guint i; + + array = g_new (const char *, devices->len + 1); + for (i = 0; i < devices->len; i++) + array[i] = nm_object_get_path (NM_OBJECT (devices->pdata[i])); + + array[i] = NULL; + + return array; +} + +const GPtrArray * +nm_manager_get_checkpoints (NMManager *manager) +{ + g_return_val_if_fail (NM_IS_MANAGER (manager), NULL); + + return NM_MANAGER_GET_PRIVATE (manager)->checkpoints; +} + +static void +checkpoint_created_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + CheckpointInfo *info = user_data; + NMManager *self = info->manager; + gs_free_error GError *error = NULL; + NMCheckpoint *checkpoint; + + nmdbus_manager_call_checkpoint_create_finish (NMDBUS_MANAGER (object), + &info->path, result, &error); + if (error) { + g_dbus_error_strip_remote_error (error); + checkpoint_info_complete (self, info, NULL, error); + return; + } + + checkpoint = get_checkpoint_by_path (self, info->path); + if (!checkpoint) { + /* this is really problematic. The async request returned, but + * we don't yet have a visible (fully initialized) NMCheckpoint instance + * to return. Wait longer for it to appear. However, it's ugly. */ + return; + } + + checkpoint_info_complete (self, info, checkpoint, NULL); +} + +void +nm_manager_checkpoint_create (NMManager *manager, + const GPtrArray *devices, + guint32 rollback_timeout, + NMCheckpointCreateFlags flags, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); + gs_free const char **paths = NULL; + CheckpointInfo *info; + + g_return_if_fail (NM_IS_MANAGER (manager)); + + info = g_slice_new0 (CheckpointInfo); + info->manager = manager; + info->simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data, + nm_manager_checkpoint_create); + if (cancellable) + g_simple_async_result_set_check_cancellable (info->simple, cancellable); + paths = get_device_paths (devices); + nmdbus_manager_call_checkpoint_create (NM_MANAGER_GET_PRIVATE (manager)->proxy, + paths, + rollback_timeout, + flags, + cancellable, + checkpoint_created_cb, + info); + priv->added_checkpoints = g_slist_append (priv->added_checkpoints, info); +} + +NMCheckpoint * +nm_manager_checkpoint_create_finish (NMManager *manager, + GAsyncResult *result, + GError **error) +{ + GSimpleAsyncResult *simple; + + g_return_val_if_fail (NM_IS_MANAGER (manager), NULL); + g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL); + + simple = G_SIMPLE_ASYNC_RESULT (result); + if (g_simple_async_result_propagate_error (simple, error)) + return NULL; + else + return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple)); +} + +static void +checkpoint_destroy_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + GSimpleAsyncResult *simple = user_data; + GError *error = NULL; + + if (nmdbus_manager_call_checkpoint_destroy_finish (NMDBUS_MANAGER (object), + result, &error)) + g_simple_async_result_set_op_res_gboolean (simple, TRUE); + else { + g_dbus_error_strip_remote_error (error); + g_simple_async_result_take_error (simple, error); + } + g_simple_async_result_complete (simple); + g_object_unref (simple); +} + +void +nm_manager_checkpoint_destroy (NMManager *manager, + const char *checkpoint_path, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *simple; + + g_return_if_fail (NM_IS_MANAGER (manager)); + g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); + + simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data, + nm_manager_checkpoint_destroy); + if (cancellable) + g_simple_async_result_set_check_cancellable (simple, cancellable); + + nmdbus_manager_call_checkpoint_destroy (NM_MANAGER_GET_PRIVATE (manager)->proxy, + checkpoint_path, + cancellable, + checkpoint_destroy_cb, simple); +} + +gboolean +nm_manager_checkpoint_destroy_finish (NMManager *manager, + GAsyncResult *result, + GError **error) +{ + GSimpleAsyncResult *simple; + + g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), + nm_manager_checkpoint_destroy), + FALSE); + + simple = G_SIMPLE_ASYNC_RESULT (result); + if (g_simple_async_result_propagate_error (simple, error)) + return FALSE; + else + return g_simple_async_result_get_op_res_gboolean (simple); +} + +static void +checkpoint_rollback_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + GSimpleAsyncResult *simple = user_data; + GError *error = NULL; + GVariant *variant = NULL; + GVariantIter iter; + GHashTable *hash; + const char *path; + guint r; + + if (nmdbus_manager_call_checkpoint_rollback_finish (NMDBUS_MANAGER (object), + &variant, + result, + &error)) { + hash = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, NULL); + g_variant_iter_init (&iter, variant); + while (g_variant_iter_next (&iter, "{&su}", &path, &r)) + g_hash_table_insert (hash, g_strdup (path), GUINT_TO_POINTER (r)); + g_simple_async_result_set_op_res_gpointer (simple, hash, (GDestroyNotify) g_hash_table_unref); + } else { + g_dbus_error_strip_remote_error (error); + g_simple_async_result_take_error (simple, error); + } + g_simple_async_result_complete (simple); + g_object_unref (simple); +} + +void +nm_manager_checkpoint_rollback (NMManager *manager, + const char *checkpoint_path, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *simple; + + g_return_if_fail (NM_IS_MANAGER (manager)); + g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); + + simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data, + nm_manager_checkpoint_rollback); + if (cancellable) + g_simple_async_result_set_check_cancellable (simple, cancellable); + + nmdbus_manager_call_checkpoint_rollback (NM_MANAGER_GET_PRIVATE (manager)->proxy, + checkpoint_path, + cancellable, + checkpoint_rollback_cb, simple); +} + +GHashTable * +nm_manager_checkpoint_rollback_finish (NMManager *manager, + GAsyncResult *result, + GError **error) +{ + GSimpleAsyncResult *simple; + + g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), + nm_manager_checkpoint_rollback), + NULL); + + simple = G_SIMPLE_ASYNC_RESULT (result); + if (g_simple_async_result_propagate_error (simple, error)) + return NULL; + else + return g_simple_async_result_get_op_res_gpointer (simple); +} + +static void +checkpoint_adjust_rollback_timeout_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + gs_unref_object GSimpleAsyncResult *simple = user_data; + GError *error = NULL; + + if (nmdbus_manager_call_checkpoint_adjust_rollback_timeout_finish (NMDBUS_MANAGER (object), + result, + &error)) + g_simple_async_result_set_op_res_gboolean (simple, TRUE); + else { + g_dbus_error_strip_remote_error (error); + g_simple_async_result_take_error (simple, error); + } + g_simple_async_result_complete (simple); +} + +void +nm_manager_checkpoint_adjust_rollback_timeout (NMManager *manager, + const char *checkpoint_path, + guint32 add_timeout, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GSimpleAsyncResult *simple; + + g_return_if_fail (NM_IS_MANAGER (manager)); + g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); + + simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data, + nm_manager_checkpoint_adjust_rollback_timeout); + if (cancellable) + g_simple_async_result_set_check_cancellable (simple, cancellable); + + nmdbus_manager_call_checkpoint_adjust_rollback_timeout (NM_MANAGER_GET_PRIVATE (manager)->proxy, + checkpoint_path, + add_timeout, + cancellable, + checkpoint_adjust_rollback_timeout_cb, + simple); +} + +gboolean +nm_manager_checkpoint_adjust_rollback_timeout_finish (NMManager *manager, + GAsyncResult *result, + GError **error) +{ + GSimpleAsyncResult *simple; + + g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), + nm_manager_checkpoint_adjust_rollback_timeout), + FALSE); + + simple = G_SIMPLE_ASYNC_RESULT (result); + return !g_simple_async_result_propagate_error (simple, error); +} + +/*****************************************************************************/ + static void constructed (GObject *object) { @@ -1482,6 +1869,9 @@ get_property (GObject *object, case PROP_DEVICES: g_value_take_boxed (value, _nm_utils_copy_object_array (nm_manager_get_devices (self))); break; + case PROP_CHECKPOINTS: + g_value_take_boxed (value, _nm_utils_copy_object_array (nm_manager_get_checkpoints (self))); + break; case PROP_METERED: g_value_set_uint (value, priv->metered); break; @@ -1510,11 +1900,13 @@ nm_manager_class_init (NMManagerClass *manager_class) object_class->finalize = finalize; nm_object_class->init_dbus = init_dbus; + nm_object_class->object_creation_failed = object_creation_failed; manager_class->device_added = device_added; manager_class->device_removed = device_removed; manager_class->active_connection_added = active_connection_added; manager_class->active_connection_removed = active_connection_removed; + manager_class->checkpoint_added = checkpoint_added; /* properties */ @@ -1622,6 +2014,12 @@ nm_manager_class_init (NMManagerClass *manager_class) G_TYPE_PTR_ARRAY, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property + (object_class, PROP_CHECKPOINTS, + g_param_spec_boxed (NM_MANAGER_CHECKPOINTS, "", "", + G_TYPE_PTR_ARRAY, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); /** * NMManager:metered: * @@ -1693,6 +2091,23 @@ nm_manager_class_init (NMManagerClass *manager_class) NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_OBJECT); + signals[CHECKPOINT_ADDED] = + g_signal_new ("checkpoint-added", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (NMManagerClass, checkpoint_added), + NULL, NULL, NULL, + G_TYPE_NONE, 1, + G_TYPE_OBJECT); + signals[CHECKPOINT_REMOVED] = + g_signal_new ("checkpoint-removed", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (NMManagerClass, checkpoint_removed), + NULL, NULL, NULL, + G_TYPE_NONE, 1, + G_TYPE_OBJECT); + signals[PERMISSION_CHANGED] = g_signal_new ("permission-changed", G_OBJECT_CLASS_TYPE (object_class), diff --git a/libnm/nm-manager.h b/libnm/nm-manager.h index 209a99a0..0a278aee 100644 --- a/libnm/nm-manager.h +++ b/libnm/nm-manager.h @@ -22,11 +22,13 @@ #ifndef __NM_MANAGER_H__ #define __NM_MANAGER_H__ +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif + #include "nm-object.h" #include "nm-client.h" -G_BEGIN_DECLS - #define NM_TYPE_MANAGER (nm_manager_get_type ()) #define NM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MANAGER, NMManager)) #define NM_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_MANAGER, NMManagerClass)) @@ -51,6 +53,7 @@ G_BEGIN_DECLS #define NM_MANAGER_PRIMARY_CONNECTION "primary-connection" #define NM_MANAGER_ACTIVATING_CONNECTION "activating-connection" #define NM_MANAGER_DEVICES "devices" +#define NM_MANAGER_CHECKPOINTS "checkpoints" #define NM_MANAGER_METERED "metered" #define NM_MANAGER_ALL_DEVICES "all-devices" @@ -69,11 +72,11 @@ typedef struct { void (*device_removed) (NMManager *manager, NMDevice *device); void (*active_connection_added) (NMManager *manager, NMActiveConnection *ac); void (*active_connection_removed) (NMManager *manager, NMActiveConnection *ac); + void (*checkpoint_added) (NMManager *manager, NMCheckpoint *checkpoint); + void (*checkpoint_removed) (NMManager *manager, NMCheckpoint *checkpoint); void (*permission_changed) (NMManager *manager, NMClientPermission permission, NMClientPermissionResult result); - - /* nm-manager.h is internal API. We can add more slots without breaking ABI. */ } NMManagerClass; GType nm_manager_get_type (void); @@ -99,13 +102,10 @@ gboolean nm_manager_wimax_get_enabled (NMManager *manager); void nm_manager_wimax_set_enabled (NMManager *manager, gboolean enabled); gboolean nm_manager_wimax_hardware_get_enabled (NMManager *manager); -NM_AVAILABLE_IN_1_10 gboolean nm_manager_connectivity_check_get_available (NMManager *manager); -NM_AVAILABLE_IN_1_10 gboolean nm_manager_connectivity_check_get_enabled (NMManager *manager); -NM_AVAILABLE_IN_1_10 void nm_manager_connectivity_check_set_enabled (NMManager *manager, gboolean enabled); @@ -137,7 +137,6 @@ NMConnectivityState nm_manager_check_connectivity_finish (NMManager *manager, /* Devices */ const GPtrArray *nm_manager_get_devices (NMManager *manager); -NM_AVAILABLE_IN_1_2 const GPtrArray *nm_manager_get_all_devices(NMManager *manager); NMDevice *nm_manager_get_device_by_path (NMManager *manager, const char *object_path); NMDevice *nm_manager_get_device_by_iface (NMManager *manager, const char *iface); @@ -184,6 +183,41 @@ gboolean nm_manager_deactivate_connection_finish (NMManager *manager, GAsyncResult *result, GError **error); -G_END_DECLS +const GPtrArray *nm_manager_get_checkpoints (NMManager *manager); +void nm_manager_checkpoint_create (NMManager *manager, + const GPtrArray *devices, + guint32 rollback_timeout, + NMCheckpointCreateFlags flags, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +NMCheckpoint *nm_manager_checkpoint_create_finish (NMManager *manager, + GAsyncResult *result, + GError **error); +void nm_manager_checkpoint_destroy (NMManager *manager, + const char *checkpoint_path, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean nm_manager_checkpoint_destroy_finish (NMManager *manager, + GAsyncResult *result, + GError **error); +void nm_manager_checkpoint_rollback (NMManager *manager, + const char *checkpoint_path, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +GHashTable *nm_manager_checkpoint_rollback_finish (NMManager *manager, + GAsyncResult *result, + GError **error); +void nm_manager_checkpoint_adjust_rollback_timeout (NMManager *manager, + const char *checkpoint_path, + guint32 add_timeout, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +gboolean nm_manager_checkpoint_adjust_rollback_timeout_finish (NMManager *manager, + GAsyncResult *result, + GError **error); #endif /* __NM_MANAGER_H__ */ diff --git a/libnm/nm-object-private.h b/libnm/nm-object-private.h index 8c2f3a9c..1f6d54d3 100644 --- a/libnm/nm-object-private.h +++ b/libnm/nm-object-private.h @@ -21,6 +21,10 @@ #ifndef __NM_OBJECT_PRIVATE_H__ #define __NM_OBJECT_PRIVATE_H__ +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif + #include "nm-object.h" typedef gboolean (*PropertyMarshalFunc) (NMObject *, GParamSpec *, GVariant *, gpointer); diff --git a/libnm/nm-object.c b/libnm/nm-object.c index 82e519e6..605da492 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -33,7 +33,7 @@ #include "nm-dbus-helpers.h" #include "nm-client.h" #include "nm-core-internal.h" -#include "nm-utils/c-list.h" +#include "c-list/src/c-list.h" static gboolean debug = FALSE; #define dbgmsg(f,...) if (G_UNLIKELY (debug)) { g_message (f, ## __VA_ARGS__ ); } @@ -608,8 +608,9 @@ handle_object_property (NMObject *self, const char *property_name, GVariant *val object = g_dbus_object_manager_get_object (priv->object_manager, path); if (!object) { /* This is a server bug -- a dangling object path for an object - * that does not exist. */ - /* XXX: We've ignored this before and the server hits the condition + * that does not exist. + * + * NOTE: We've ignored this before and the server hits the condition * more often that it should. Given we're able to recover from * ther error, let's lower the severity of the log message to * avoid unnecessarily bothering the user. This can be removed @@ -955,7 +956,7 @@ _nm_object_register_properties (NMObject *object, G_CALLBACK (properties_changed), object); g_ptr_array_add (priv->proxies, proxy); - instance = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + instance = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_free); priv->property_tables = g_slist_prepend (priv->property_tables, instance); for (tmp = (NMPropertiesInfo *) info; tmp->name; tmp++) { diff --git a/libnm/nm-property-docs.xml b/libnm/nm-property-docs.xml index 6c6491a0..029477d9 100644 --- a/libnm/nm-property-docs.xml +++ b/libnm/nm-property-docs.xml @@ -5,22 +5,23 @@ - + - + + - + @@ -97,7 +98,7 @@ - + @@ -127,14 +128,14 @@ - - + + - + - - - + + + @@ -168,8 +169,8 @@ - - + + @@ -177,7 +178,7 @@ - + @@ -192,14 +193,14 @@ - + - + @@ -215,6 +216,7 @@ + @@ -446,6 +448,7 @@ + diff --git a/libnm/nm-remote-connection-private.h b/libnm/nm-remote-connection-private.h index e3f35428..5ff282f4 100644 --- a/libnm/nm-remote-connection-private.h +++ b/libnm/nm-remote-connection-private.h @@ -21,6 +21,10 @@ #ifndef __NM_REMOTE_CONNECTION_PRIVATE_H__ #define __NM_REMOTE_CONNECTION_PRIVATE_H__ +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif + #define NM_REMOTE_CONNECTION_INIT_RESULT "init-result" typedef enum { diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index 80bf179d..bd60c413 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -50,6 +50,7 @@ G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, NM_TYPE_OBJEC enum { PROP_0, PROP_UNSAVED, + PROP_FLAGS, PROP_VISIBLE, LAST_PROP @@ -59,6 +60,7 @@ typedef struct { NMDBusSettingsConnection *proxy; gboolean unsaved; + guint32 flags; gboolean visible; } NMRemoteConnectionPrivate; @@ -101,7 +103,7 @@ update2_cb (GObject *proxy, GAsyncResult *result, gpointer user_data) * * Asynchronously calls the Update2() D-Bus method. * - * Since: 1.10.2 + * Since: 1.12 **/ void nm_remote_connection_update2 (NMRemoteConnection *connection, @@ -651,6 +653,22 @@ nm_remote_connection_get_unsaved (NMRemoteConnection *connection) return NM_REMOTE_CONNECTION_GET_PRIVATE (connection)->unsaved; } +/** + * nm_remote_connection_get_flags: + * @connection: the #NMRemoteConnection + * + * Returns: the flags of the connection of type #NMSettingsConnectionFlags. + * + * Since: 1.12 + **/ +NMSettingsConnectionFlags +nm_remote_connection_get_flags (NMRemoteConnection *connection) +{ + g_return_val_if_fail (NM_IS_REMOTE_CONNECTION (connection), FALSE); + + return (NMSettingsConnectionFlags) NM_REMOTE_CONNECTION_GET_PRIVATE (connection)->flags; +} + /** * nm_remote_connection_get_visible: * @connection: the #NMRemoteConnection @@ -741,6 +759,7 @@ init_dbus (NMObject *object) NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object); const NMPropertiesInfo property_info[] = { { NM_REMOTE_CONNECTION_UNSAVED, &priv->unsaved }, + { NM_REMOTE_CONNECTION_FLAGS, &priv->flags }, { NULL }, }; @@ -871,6 +890,9 @@ get_property (GObject *object, guint prop_id, case PROP_UNSAVED: g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->unsaved); break; + case PROP_FLAGS: + g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->flags); + break; case PROP_VISIBLE: g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->visible); break; @@ -928,6 +950,21 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + /** + * NMRemoteConnection:flags: + * + * The flags of the connection as unsigned integer. The values + * correspond to the #NMSettingsConnectionFlags enum. + * + * Since: 1.12 + **/ + g_object_class_install_property + (object_class, PROP_FLAGS, + g_param_spec_uint (NM_REMOTE_CONNECTION_FLAGS, "", "", + 0, G_MAXUINT32, 0, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); + /** * NMRemoteConnection:visible: * diff --git a/libnm/nm-remote-connection.h b/libnm/nm-remote-connection.h index 9fdcae89..a729f904 100644 --- a/libnm/nm-remote-connection.h +++ b/libnm/nm-remote-connection.h @@ -42,6 +42,7 @@ G_BEGIN_DECLS #define NM_REMOTE_CONNECTION_DBUS_CONNECTION "dbus-connection" #define NM_REMOTE_CONNECTION_PATH "path" #define NM_REMOTE_CONNECTION_UNSAVED "unsaved" +#define NM_REMOTE_CONNECTION_FLAGS "flags" #define NM_REMOTE_CONNECTION_VISIBLE "visible" /** @@ -60,7 +61,7 @@ typedef struct { GType nm_remote_connection_get_type (void); -NM_AVAILABLE_IN_1_10_2 +NM_AVAILABLE_IN_1_12 void nm_remote_connection_update2 (NMRemoteConnection *connection, GVariant *settings, NMSettingsUpdate2Flags flags, @@ -68,7 +69,7 @@ void nm_remote_connection_update2 (NMRemoteConnection *connection, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); -NM_AVAILABLE_IN_1_10_2 +NM_AVAILABLE_IN_1_12 GVariant *nm_remote_connection_update2_finish (NMRemoteConnection *connection, GAsyncResult *result, GError **error); @@ -123,6 +124,9 @@ GVariant *nm_remote_connection_get_secrets_finish (NMRemoteConnection *connectio gboolean nm_remote_connection_get_unsaved (NMRemoteConnection *connection); +NM_AVAILABLE_IN_1_12 +NMSettingsConnectionFlags nm_remote_connection_get_flags (NMRemoteConnection *connection); + gboolean nm_remote_connection_get_visible (NMRemoteConnection *connection); G_END_DECLS diff --git a/libnm/nm-remote-settings.h b/libnm/nm-remote-settings.h index 06d3ac0a..ee0e0f22 100644 --- a/libnm/nm-remote-settings.h +++ b/libnm/nm-remote-settings.h @@ -22,9 +22,11 @@ #ifndef __NM_REMOTE_SETTINGS_H__ #define __NM_REMOTE_SETTINGS_H__ -#include "nm-object.h" +#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) +#error Cannot use this header. +#endif -G_BEGIN_DECLS +#include "nm-object.h" #define NM_TYPE_REMOTE_SETTINGS (nm_remote_settings_get_type ()) #define NM_REMOTE_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettings)) @@ -53,14 +55,10 @@ struct _NMRemoteSettings { struct _NMRemoteSettingsClass { NMObjectClass parent; - /* Signals */ void (*connection_added) (NMRemoteSettings *settings, NMRemoteConnection *connection); void (*connection_removed) (NMRemoteSettings *settings, NMRemoteConnection *connection); - - /*< private >*/ - gpointer padding[8]; }; GType nm_remote_settings_get_type (void); @@ -125,6 +123,4 @@ gboolean nm_remote_settings_save_hostname_finish (NMRemoteSettings *settings, GAsyncResult *result, GError **error); -G_END_DECLS - #endif /* __NM_REMOTE_SETTINGS_H__ */ diff --git a/libnm/nm-secret-agent-old.c b/libnm/nm-secret-agent-old.c index d5f6f174..74914512 100644 --- a/libnm/nm-secret-agent-old.c +++ b/libnm/nm-secret-agent-old.c @@ -603,12 +603,10 @@ reg_request_cb (GObject *proxy, { GSimpleAsyncResult *simple = user_data; NMSecretAgentOld *self; - NMSecretAgentOldPrivate *priv; GError *error = NULL; self = NM_SECRET_AGENT_OLD (g_async_result_get_source_object (G_ASYNC_RESULT (simple))); g_object_unref (self); /* drop extra ref added by get_source_object() */ - priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self); if (!nmdbus_agent_manager_call_register_finish (NMDBUS_AGENT_MANAGER (proxy), result, &error)) g_dbus_error_strip_remote_error (error); @@ -884,7 +882,7 @@ nm_secret_agent_old_get_registered (NMSecretAgentOld *self) /*****************************************************************************/ /** - * nm_secret_agent_old_get_secrets: + * nm_secret_agent_old_get_secrets: (virtual get_secrets): * @self: a #NMSecretAgentOld * @connection: the #NMConnection for which we're asked secrets * @setting_name: the name of the secret setting @@ -898,8 +896,6 @@ nm_secret_agent_old_get_registered (NMSecretAgentOld *self) * agent should use when performing the request, for example returning only * existing secrets without user interaction, or requesting entirely new * secrets from the user. - * - * Virtual: get_secrets */ void nm_secret_agent_old_get_secrets (NMSecretAgentOld *self, @@ -930,7 +926,7 @@ nm_secret_agent_old_get_secrets (NMSecretAgentOld *self, } /** - * nm_secret_agent_old_save_secrets: + * nm_secret_agent_old_save_secrets: (virtual save_secrets): * @self: a #NMSecretAgentOld * @connection: a #NMConnection * @callback: (scope async): a callback, to be invoked when the operation is done @@ -938,8 +934,6 @@ nm_secret_agent_old_get_secrets (NMSecretAgentOld *self, * * Asynchronously ensures that all secrets inside @connection are stored to * disk. - * - * Virtual: save_secrets */ void nm_secret_agent_old_save_secrets (NMSecretAgentOld *self, @@ -959,7 +953,7 @@ nm_secret_agent_old_save_secrets (NMSecretAgentOld *self, } /** - * nm_secret_agent_old_delete_secrets: + * nm_secret_agent_old_delete_secrets: (virtual delete_secrets): * @self: a #NMSecretAgentOld * @connection: a #NMConnection * @callback: (scope async): a callback, to be invoked when the operation is done @@ -967,8 +961,6 @@ nm_secret_agent_old_save_secrets (NMSecretAgentOld *self, * * Asynchronously asks the agent to delete all saved secrets belonging to * @connection. - * - * Virtual: delete_secrets */ void nm_secret_agent_old_delete_secrets (NMSecretAgentOld *self, diff --git a/libnm/nm-settings-docs.xml b/libnm/nm-settings-docs.xml index 57553f8b..4a505594 100644 --- a/libnm/nm-settings-docs.xml +++ b/libnm/nm-settings-docs.xml @@ -5,22 +5,23 @@ - + - + + - + @@ -99,7 +100,7 @@ - + @@ -129,14 +130,14 @@ - - + + - + - - - + + + @@ -171,8 +172,8 @@ - - + + @@ -180,7 +181,7 @@ - + @@ -197,14 +198,14 @@ - + - + @@ -221,6 +222,7 @@ + @@ -457,6 +459,7 @@ + diff --git a/libnm/nm-settings-ifcfg-rh-docs.xml b/libnm/nm-settings-ifcfg-rh-docs.xml index 4fa11864..03d935ea 100644 --- a/libnm/nm-settings-ifcfg-rh-docs.xml +++ b/libnm/nm-settings-ifcfg-rh-docs.xml @@ -109,6 +109,7 @@ pinging the gateway and waiting for the specified timeout (in seconds)."/> + @@ -178,10 +179,11 @@ If set to -1, a default metric based on the device type is used."/> - - + @@ -333,6 +335,7 @@ for WEP passphrases. KEY_TYPE specifies the key type and can be either + diff --git a/libnm/nm-types.h b/libnm/nm-types.h index 4310120f..dff8cb90 100644 --- a/libnm/nm-types.h +++ b/libnm/nm-types.h @@ -28,6 +28,7 @@ typedef struct _NMAccessPoint NMAccessPoint; typedef struct _NMActiveConnection NMActiveConnection; +typedef struct _NMCheckpoint NMCheckpoint; typedef struct _NMClient NMClient; typedef struct _NMDevice NMDevice; typedef struct _NMDeviceAdsl NMDeviceAdsl; diff --git a/libnm/nm-vpn-editor.h b/libnm/nm-vpn-editor.h index 26e48662..1b09c813 100644 --- a/libnm/nm-vpn-editor.h +++ b/libnm/nm-vpn-editor.h @@ -83,4 +83,4 @@ gboolean nm_vpn_editor_update_connection (NMVpnEditor *editor, G_END_DECLS -#endif /* __NM_VPN_EDITOR_H__ */ +#endif /* __NM_VPN_EDITOR_H__ */ diff --git a/libnm/nm-vpn-plugin-old.c b/libnm/nm-vpn-plugin-old.c index 2b5922b9..c5fc615e 100644 --- a/libnm/nm-vpn-plugin-old.c +++ b/libnm/nm-vpn-plugin-old.c @@ -33,6 +33,7 @@ #include "nm-dbus-helpers.h" #include "nm-core-internal.h" #include "nm-simple-connection.h" +#include "nm-vpn-service-plugin.h" #include "introspection/org.freedesktop.NetworkManager.VPN.Plugin.h" @@ -683,20 +684,6 @@ nm_vpn_plugin_old_secrets_required (NMVpnPluginOld *plugin, /*****************************************************************************/ -#define DATA_KEY_TAG "DATA_KEY=" -#define DATA_VAL_TAG "DATA_VAL=" -#define SECRET_KEY_TAG "SECRET_KEY=" -#define SECRET_VAL_TAG "SECRET_VAL=" - -static void -free_secret (gpointer data) -{ - char *secret = data; - - memset (secret, 0, strlen (secret)); - g_free (secret); -} - /** * nm_vpn_plugin_old_read_vpn_details: * @fd: file descriptor to read from, usually stdin (0) @@ -717,87 +704,7 @@ nm_vpn_plugin_old_read_vpn_details (int fd, GHashTable **out_data, GHashTable **out_secrets) { - GHashTable *data, *secrets; - gboolean success = FALSE; - char *key = NULL, *val = NULL; - GString *line; - gchar c; - - if (out_data) - g_return_val_if_fail (*out_data == NULL, FALSE); - if (out_secrets) - g_return_val_if_fail (*out_secrets == NULL, FALSE); - - data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - secrets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_secret); - - line = g_string_new (NULL); - - /* Read stdin for data and secret items until we get a DONE */ - while (1) { - ssize_t nr; - GHashTable *hash = NULL; - - errno = 0; - nr = read (fd, &c, 1); - if (nr == -1) { - if (errno == EAGAIN) { - g_usleep (100); - continue; - } - break; - } - - if (c != '\n') { - g_string_append_c (line, c); - continue; - } - - /* Check for the finish marker */ - if (strcmp (line->str, "DONE") == 0) - break; - - /* Otherwise it's a data/secret item */ - if (strncmp (line->str, DATA_KEY_TAG, strlen (DATA_KEY_TAG)) == 0) { - hash = data; - key = g_strdup (line->str + strlen (DATA_KEY_TAG)); - } else if (strncmp (line->str, DATA_VAL_TAG, strlen (DATA_VAL_TAG)) == 0) { - hash = data; - val = g_strdup (line->str + strlen (DATA_VAL_TAG)); - } else if (strncmp (line->str, SECRET_KEY_TAG, strlen (SECRET_KEY_TAG)) == 0) { - hash = secrets; - key = g_strdup (line->str + strlen (SECRET_KEY_TAG)); - } else if (strncmp (line->str, SECRET_VAL_TAG, strlen (SECRET_VAL_TAG)) == 0) { - hash = secrets; - val = g_strdup (line->str + strlen (SECRET_VAL_TAG)); - } - g_string_truncate (line, 0); - - if (key && val && hash) { - g_hash_table_insert (hash, key, val); - key = NULL; - val = NULL; - success = TRUE; /* Got at least one value */ - } - } - - if (success) { - if (out_data) - *out_data = data; - else - g_hash_table_destroy (data); - - if (out_secrets) - *out_secrets = secrets; - else - g_hash_table_destroy (secrets); - } else { - g_hash_table_destroy (data); - g_hash_table_destroy (secrets); - } - - g_string_free (line, TRUE); - return success; + return nm_vpn_service_plugin_read_vpn_details (fd, out_data, out_secrets); } /** @@ -820,31 +727,7 @@ nm_vpn_plugin_old_get_secret_flags (GHashTable *data, const char *secret_name, NMSettingSecretFlags *out_flags) { - char *flag_name; - const char *val; - unsigned long tmp; - gboolean success = FALSE; - - g_return_val_if_fail (data != NULL, FALSE); - g_return_val_if_fail (secret_name != NULL, FALSE); - g_return_val_if_fail (out_flags != NULL, FALSE); - g_return_val_if_fail (*out_flags == NM_SETTING_SECRET_FLAG_NONE, FALSE); - - flag_name = g_strdup_printf ("%s-flags", secret_name); - - /* Try new flags value first */ - val = g_hash_table_lookup (data, flag_name); - if (val) { - errno = 0; - tmp = strtoul (val, NULL, 10); - if (errno == 0 && tmp <= NM_SETTING_SECRET_FLAGS_ALL) { - *out_flags = (NMSettingSecretFlags) tmp; - success = TRUE; - } - } - - g_free (flag_name); - return success; + return nm_vpn_service_plugin_get_secret_flags (data, secret_name, out_flags); } /*****************************************************************************/ @@ -904,10 +787,18 @@ impl_vpn_plugin_old_set_failure (NMVpnPluginOld *plugin, /*****************************************************************************/ +static void +_emit_quit (gpointer data, gpointer user_data) +{ + NMVpnPluginOld *plugin = data; + + nm_vpn_plugin_old_emit_quit (plugin); +} + static void sigterm_handler (int signum) { - g_slist_foreach (active_plugins, (GFunc) nm_vpn_plugin_old_emit_quit, NULL); + g_slist_foreach (active_plugins, _emit_quit, NULL); } static void diff --git a/libnm/nm-vpn-service-plugin.c b/libnm/nm-vpn-service-plugin.c index 0a785396..901ffa98 100644 --- a/libnm/nm-vpn-service-plugin.c +++ b/libnm/nm-vpn-service-plugin.c @@ -151,7 +151,8 @@ nm_vpn_service_plugin_set_state (NMVpnServicePlugin *plugin, if (priv->state != state) { priv->state = state; g_signal_emit (plugin, signals[STATE_CHANGED], 0, state); - nmdbus_vpn_plugin_emit_state_changed (priv->dbus_vpn_service_plugin, state); + if (priv->dbus_vpn_service_plugin) + nmdbus_vpn_plugin_emit_state_changed (priv->dbus_vpn_service_plugin, state); } } @@ -166,7 +167,8 @@ nm_vpn_service_plugin_set_login_banner (NMVpnServicePlugin *plugin, priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); g_signal_emit (plugin, signals[LOGIN_BANNER], 0, banner); - nmdbus_vpn_plugin_emit_login_banner (priv->dbus_vpn_service_plugin, banner); + if (priv->dbus_vpn_service_plugin) + nmdbus_vpn_plugin_emit_login_banner (priv->dbus_vpn_service_plugin, banner); } static void @@ -176,7 +178,8 @@ _emit_failure (NMVpnServicePlugin *plugin, NMVpnServicePluginPrivate *priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); g_signal_emit (plugin, signals[FAILURE], 0, reason); - nmdbus_vpn_plugin_emit_failure (priv->dbus_vpn_service_plugin, reason); + if (priv->dbus_vpn_service_plugin) + nmdbus_vpn_plugin_emit_failure (priv->dbus_vpn_service_plugin, reason); } void @@ -192,13 +195,11 @@ nm_vpn_service_plugin_failure (NMVpnServicePlugin *plugin, gboolean nm_vpn_service_plugin_disconnect (NMVpnServicePlugin *plugin, GError **err) { - NMVpnServicePluginPrivate *priv; gboolean ret = FALSE; NMVpnServiceState state; g_return_val_if_fail (NM_IS_VPN_SERVICE_PLUGIN (plugin), FALSE); - priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); state = nm_vpn_service_plugin_get_state (plugin); switch (state) { case NM_VPN_SERVICE_STATE_STOPPING: @@ -243,6 +244,51 @@ nm_vpn_service_plugin_emit_quit (NMVpnServicePlugin *plugin) g_signal_emit (plugin, signals[QUIT], 0); } +/** + * nm_vpn_service_plugin_shutdown: + * @plugin: the #NMVpnServicePlugin instance + * + * Shutdown the @plugin and disconnect from D-Bus. After this, + * the plugin instance is dead and should no longer be used. + * It ensures to get no more requests from D-Bus. In principle, + * you don't need to shutdown the plugin, disposing the instance + * has the same effect. However, this gives a way to deactivate + * the plugin before giving up the last reference. + * + * Since: 1.12 + */ +void +nm_vpn_service_plugin_shutdown (NMVpnServicePlugin *plugin) +{ + NMVpnServicePluginPrivate *priv; + NMVpnServiceState state; + GError *error = NULL; + + g_return_if_fail (NM_IS_VPN_SERVICE_PLUGIN (plugin)); + + priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); + + nm_clear_g_source (&priv->fail_stop_id); + nm_clear_g_source (&priv->quit_timer); + nm_clear_g_source (&priv->connect_timer); + + state = nm_vpn_service_plugin_get_state (plugin); + if (state == NM_VPN_SERVICE_STATE_STARTED || + state == NM_VPN_SERVICE_STATE_STARTING) { + nm_vpn_service_plugin_disconnect (plugin, &error); + + if (error) { + g_warning ("Error disconnecting VPN connection: %s", error->message); + g_error_free (error); + } + } + + if (priv->dbus_vpn_service_plugin) { + g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (priv->dbus_vpn_service_plugin)); + g_clear_object (&priv->dbus_vpn_service_plugin); + } +} + static gboolean connect_timer_expired (gpointer data) { @@ -338,7 +384,8 @@ nm_vpn_service_plugin_set_config (NMVpnServicePlugin *plugin, G_VARIANT_TYPE ("u")); g_signal_emit (plugin, signals[CONFIG], 0, config); - nmdbus_vpn_plugin_emit_config (priv->dbus_vpn_service_plugin, config); + if (priv->dbus_vpn_service_plugin) + nmdbus_vpn_plugin_emit_config (priv->dbus_vpn_service_plugin, config); } void @@ -389,7 +436,8 @@ nm_vpn_service_plugin_set_ip4_config (NMVpnServicePlugin *plugin, combined_config = g_variant_builder_end (&builder); g_variant_ref_sink (combined_config); g_signal_emit (plugin, signals[IP4_CONFIG], 0, combined_config); - nmdbus_vpn_plugin_emit_ip4_config (priv->dbus_vpn_service_plugin, combined_config); + if (priv->dbus_vpn_service_plugin) + nmdbus_vpn_plugin_emit_ip4_config (priv->dbus_vpn_service_plugin, combined_config); g_variant_unref (combined_config); if ( priv->has_ip4 == priv->got_ip4 @@ -410,7 +458,8 @@ nm_vpn_service_plugin_set_ip6_config (NMVpnServicePlugin *plugin, priv->got_ip6 = TRUE; g_signal_emit (plugin, signals[IP6_CONFIG], 0, ip6_config); - nmdbus_vpn_plugin_emit_ip6_config (priv->dbus_vpn_service_plugin, ip6_config); + if (priv->dbus_vpn_service_plugin) + nmdbus_vpn_plugin_emit_ip6_config (priv->dbus_vpn_service_plugin, ip6_config); g_variant_unref (ip6_config); @@ -700,7 +749,8 @@ nm_vpn_service_plugin_secrets_required (NMVpnServicePlugin *plugin, nm_clear_g_source (&priv->connect_timer); g_signal_emit (plugin, signals[SECRETS_REQUIRED], 0, message, hints); - nmdbus_vpn_plugin_emit_secrets_required (priv->dbus_vpn_service_plugin, message, hints); + if (priv->dbus_vpn_service_plugin) + nmdbus_vpn_plugin_emit_secrets_required (priv->dbus_vpn_service_plugin, message, hints); } /*****************************************************************************/ @@ -710,15 +760,6 @@ nm_vpn_service_plugin_secrets_required (NMVpnServicePlugin *plugin, #define SECRET_KEY_TAG "SECRET_KEY=" #define SECRET_VAL_TAG "SECRET_VAL=" -static void -free_secret (gpointer data) -{ - char *secret = data; - - memset (secret, 0, strlen (secret)); - g_free (secret); -} - /** * nm_vpn_service_plugin_read_vpn_details: * @fd: file descriptor to read from, usually stdin (0) @@ -739,10 +780,11 @@ nm_vpn_service_plugin_read_vpn_details (int fd, GHashTable **out_data, GHashTable **out_secrets) { - GHashTable *data, *secrets; + gs_unref_hashtable GHashTable *data = NULL; + gs_unref_hashtable GHashTable *secrets = NULL; gboolean success = FALSE; char *key = NULL, *val = NULL; - GString *line; + nm_auto_free_gstring GString *line = NULL; gchar c; if (out_data) @@ -750,8 +792,8 @@ nm_vpn_service_plugin_read_vpn_details (int fd, if (out_secrets) g_return_val_if_fail (*out_secrets == NULL, FALSE); - data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - secrets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_secret); + data = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_free); + secrets = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, (GDestroyNotify) nm_free_secret); line = g_string_new (NULL); @@ -804,21 +846,9 @@ nm_vpn_service_plugin_read_vpn_details (int fd, } if (success) { - if (out_data) - *out_data = data; - else - g_hash_table_destroy (data); - - if (out_secrets) - *out_secrets = secrets; - else - g_hash_table_destroy (secrets); - } else { - g_hash_table_destroy (data); - g_hash_table_destroy (secrets); + NM_SET_OUT (out_data, g_steal_pointer (&data)); + NM_SET_OUT (out_secrets, g_steal_pointer (&secrets)); } - - g_string_free (line, TRUE); return success; } @@ -842,31 +872,29 @@ nm_vpn_service_plugin_get_secret_flags (GHashTable *data, const char *secret_name, NMSettingSecretFlags *out_flags) { - char *flag_name; - const char *val; - unsigned long tmp; - gboolean success = FALSE; + gs_free char *flag_name_free = NULL; + const char *s; + gint64 t1; + NMSettingSecretFlags t0; - g_return_val_if_fail (data != NULL, FALSE); - g_return_val_if_fail (secret_name != NULL, FALSE); - g_return_val_if_fail (out_flags != NULL, FALSE); - g_return_val_if_fail (*out_flags == NM_SETTING_SECRET_FLAG_NONE, FALSE); + g_return_val_if_fail (data, FALSE); + g_return_val_if_fail (out_flags && *out_flags == NM_SETTING_SECRET_FLAG_NONE, FALSE); + if (!secret_name || !*secret_name) + g_return_val_if_reached (FALSE); - flag_name = g_strdup_printf ("%s-flags", secret_name); - /* Try new flags value first */ - val = g_hash_table_lookup (data, flag_name); - if (val) { - errno = 0; - tmp = strtoul (val, NULL, 10); - if (errno == 0 && tmp <= NM_SETTING_SECRET_FLAGS_ALL) { - *out_flags = (NMSettingSecretFlags) tmp; - success = TRUE; - } - } - - g_free (flag_name); - return success; + s = g_hash_table_lookup (data, + nm_construct_name_a ("%s-flags", secret_name, &flag_name_free)); + if (!s) + return FALSE; + t1 = _nm_utils_ascii_str_to_int64 (s, 10, 0, G_MAXINT64, -1); + if (t1 == -1) + return FALSE; + t0 = (NMSettingSecretFlags) t1; + if ((gint64) t0 != t1) + return FALSE; + NM_SET_OUT (out_flags, t0); + return TRUE; } /*****************************************************************************/ @@ -926,10 +954,18 @@ impl_vpn_service_plugin_set_failure (NMVpnServicePlugin *plugin, /*****************************************************************************/ +static void +_emit_quit (gpointer data, gpointer user_data) +{ + NMVpnServicePlugin *plugin = data; + + nm_vpn_service_plugin_emit_quit (plugin); +} + static void sigterm_handler (int signum) { - g_slist_foreach (active_plugins, (GFunc) nm_vpn_service_plugin_emit_quit, NULL); + g_slist_foreach (active_plugins, _emit_quit, NULL); } static void @@ -969,10 +1005,9 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) { NMVpnServicePlugin *plugin = NM_VPN_SERVICE_PLUGIN (initable); NMVpnServicePluginPrivate *priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); - GDBusConnection *connection = NULL; - GDBusProxy *proxy; + gs_unref_object GDBusConnection *connection = NULL; + gs_unref_object GDBusProxy *proxy = NULL; GVariant *ret; - gboolean success = FALSE; if (!priv->dbus_service_name) { g_set_error_literal (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, @@ -993,7 +1028,7 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) DBUS_INTERFACE_DBUS, cancellable, error); if (!proxy) - goto out; + return FALSE; priv->dbus_vpn_service_plugin = nmdbus_vpn_plugin_skeleton_new (); @@ -1014,7 +1049,7 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) connection, NM_VPN_DBUS_PLUGIN_PATH, error)) - goto out; + return FALSE; nm_vpn_service_plugin_set_connection (plugin, connection); nm_vpn_service_plugin_set_state (plugin, NM_VPN_SERVICE_STATE_INIT); @@ -1024,20 +1059,14 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) g_variant_new ("(su)", priv->dbus_service_name, 0), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); - g_object_unref (proxy); if (!ret) { if (error && *error) g_dbus_error_strip_remote_error (*error); - goto out; + return FALSE; } g_variant_unref (ret); - success = TRUE; - - out: - g_clear_object (&connection); - - return success; + return TRUE; } static void @@ -1057,7 +1086,7 @@ set_property (GObject *object, guint prop_id, break; case PROP_STATE: nm_vpn_service_plugin_set_state (NM_VPN_SERVICE_PLUGIN (object), - (NMVpnServiceState) g_value_get_enum (value)); + (NMVpnServiceState) g_value_get_enum (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1090,31 +1119,7 @@ get_property (GObject *object, guint prop_id, static void dispose (GObject *object) { - NMVpnServicePlugin *plugin = NM_VPN_SERVICE_PLUGIN (object); - NMVpnServicePluginPrivate *priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); - NMVpnServiceState state; - GError *err = NULL; - - nm_clear_g_source (&priv->fail_stop_id); - nm_clear_g_source (&priv->quit_timer); - nm_clear_g_source (&priv->connect_timer); - - state = nm_vpn_service_plugin_get_state (plugin); - - if (state == NM_VPN_SERVICE_STATE_STARTED || - state == NM_VPN_SERVICE_STATE_STARTING) - nm_vpn_service_plugin_disconnect (plugin, &err); - - if (err) { - g_warning ("Error disconnecting VPN connection: %s", err->message); - g_error_free (err); - } - - if (priv->dbus_vpn_service_plugin) { - g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (priv->dbus_vpn_service_plugin)); - g_clear_object (&priv->dbus_vpn_service_plugin); - } - + nm_vpn_service_plugin_shutdown (NM_VPN_SERVICE_PLUGIN (object)); G_OBJECT_CLASS (nm_vpn_service_plugin_parent_class)->dispose (object); } diff --git a/libnm/nm-vpn-service-plugin.h b/libnm/nm-vpn-service-plugin.h index 329345ea..71e031b0 100644 --- a/libnm/nm-vpn-service-plugin.h +++ b/libnm/nm-vpn-service-plugin.h @@ -150,6 +150,9 @@ NM_AVAILABLE_IN_1_2 gboolean nm_vpn_service_plugin_disconnect (NMVpnServicePlugin *plugin, GError **err); +NM_AVAILABLE_IN_1_12 +void nm_vpn_service_plugin_shutdown (NMVpnServicePlugin *plugin); + /* Utility functions */ NM_AVAILABLE_IN_1_2 diff --git a/libnm/tests/meson.build b/libnm/tests/meson.build new file mode 100644 index 00000000..c47814b3 --- /dev/null +++ b/libnm/tests/meson.build @@ -0,0 +1,42 @@ +test_units = [ + ['test-general', shared_utils, [libnm_utils]], + ['test-nm-client', shared_test_utils, []], + ['test-remote-settings-client', shared_test_utils, []], + ['test-secret-agent', shared_test_utils, []] +] + +deps = [ + libnm_dep, + nm_core_dep +] + +cflags = [ + '-DNETWORKMANAGER_COMPILATION_TEST', + '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM', + '-DTEST_NM_SERVICE="@0@"'.format(join_paths(meson.source_root(), 'tools', 'test-networkmanager-service.py')) +] + +foreach test_unit: test_units + exe = executable( + 'libnm-' + test_unit[0], + [test_unit[0] + '.c'] + test_unit[1], + dependencies: deps, + c_args: cflags, + link_with: test_unit[2] + ) + + test( + 'libnm/' + test_unit[0], + test_script, + args: test_args + [exe.full_path()] + ) +endforeach + +# just test, that we can build "nm-vpn-plugin-utils.c" +libnm_vpn_plugin_utils_test = static_library( + 'nm-vpn-plugin-utils-test', + sources: shared_vpn_plugin_utils + [libnm_enum[1]], + include_directories: libnm_inc, + dependencies: nm_core_dep, + c_args: cflags +) diff --git a/libnm/tests/test-general.c b/libnm/tests/test-general.c index 7e0b7bb7..5959a4e6 100644 --- a/libnm/tests/test-general.c +++ b/libnm/tests/test-general.c @@ -26,33 +26,2134 @@ /*****************************************************************************/ +typedef struct { + const char *desc; + const char *expected; + int line; +} TestFixupData; + static void -do_test_fixup_desc_string (const char *desc, const char *expected) +_test_fixup_string (const TestFixupData *data, + guint n_data, + char *(*func) (const char *)) { - gs_free char *result = NULL; + guint i; + + g_assert (data); + g_assert (n_data > 0); + g_assert (func); + + for (i = 0; i < n_data; i++, data++) { + gs_free char *value = func (data->desc); - result = nm_utils_fixup_desc_string (desc); - g_assert_cmpstr (result, ==, expected); + if (!nm_streq0 (value, data->expected)) { + g_error ("Error comparing value: %s:%i: expected %s%s%s for %s%s%s, but got %s%s%s", + __FILE__, data->line, + NM_PRINT_FMT_QUOTE_STRING (data->expected), + NM_PRINT_FMT_QUOTE_STRING (data->desc), + NM_PRINT_FMT_QUOTE_STRING (value)); + } + } } -#define do_test_fixup_desc_string_same(desc) (do_test_fixup_desc_string (""desc"", ""desc"")) +#define T_DATA(_desc, _expected) \ + { \ + .desc = _desc, \ + .expected = _expected, \ + .line = __LINE__, \ + } static void -test_fixup_desc_string (void) +test_fixup_vendor_string (void) { - do_test_fixup_desc_string (NULL, NULL); - do_test_fixup_desc_string ("", NULL); - do_test_fixup_desc_string_same ("a"); - do_test_fixup_desc_string_same ("a b"); - do_test_fixup_desc_string ("a b ", "a b"); - do_test_fixup_desc_string (" a bbc ", "a bbc"); - do_test_fixup_desc_string (" a \xcc bbc ", "a bbc"); - do_test_fixup_desc_string (" a\xcc bbc ", "a bbc"); - do_test_fixup_desc_string (" a\xcc""bbc Wireless PC", "a bbc"); - do_test_fixup_desc_string (" a\xcc""bbc Wireless PC ", "a bbc"); - do_test_fixup_desc_string (" a\xcc""bbcWireless PC ", "a bbcWireless PC"); - do_test_fixup_desc_string (" a\xcc""bbc Wireless PCx", "a bbc Wireless PCx"); - do_test_fixup_desc_string (" a\xcc""bbc Inc Wireless PC ", "a bbc"); + static const TestFixupData data[] = { + T_DATA ("3Com", "3Com"), + T_DATA ("3Com Corp.", "3Com"), + T_DATA ("3Com Corporation", "3Com"), + T_DATA ("Abocom Systems Inc", "Abocom"), + T_DATA ("AboCom Systems Inc", "AboCom"), + T_DATA ("Accton Technology Corp.", "Accton"), + T_DATA ("Accton Technology Corporation", "Accton"), + T_DATA ("Acer Communications & Multimedia", "Acer"), + T_DATA ("Actiontec Electronics, Inc. [hex]", "Actiontec"), + T_DATA ("Adaptec", "Adaptec"), + T_DATA ("Addtron Technology Co, Inc.", "Addtron"), + T_DATA ("ADMtek", "ADMtek"), + T_DATA ("ADMtek, Inc.", "ADMtek"), + T_DATA ("ADS Technologies, Inc.", "ADS"), + T_DATA ("Advanced Micro Devices, Inc. [AMD]", "AMD"), + T_DATA ("Advance Multimedia Internet Technology Inc. (AMIT)", "Advance"), + T_DATA ("AEI", "AEI"), + T_DATA ("Airprime, Incorporated", "Airprime"), + T_DATA ("AirTies Wireless Networks", "AirTies"), + T_DATA ("AirVast", "AirVast"), + T_DATA ("Alcatel Telecom", "Alcatel Telecom"), + T_DATA ("ALi Corp.", "ALi"), + T_DATA ("Allied Telesis", "Allied Telesis"), + T_DATA ("Allied Telesyn International", "Allied Telesyn"), + T_DATA ("Alteon Networks Inc.", "Alteon"), + T_DATA ("Altima (nee Broadcom)", "Altima"), + T_DATA ("A-Max Technology Macao Commercial Offshore Co. Ltd.", "A-Max"), + T_DATA ("Amigo Technology Inc.", "Amigo"), + T_DATA ("AMIT Technology, Inc.", "AMIT"), + T_DATA ("Anchor Chips, Inc.", "Anchor"), + T_DATA ("AnyDATA Corporation", "AnyDATA"), + T_DATA ("Apple Inc.", "Apple"), + T_DATA ("Apple, Inc.", "Apple"), + T_DATA ("ARC International", "ARC"), + T_DATA ("ASIX Electronics Corp.", "ASIX"), + T_DATA ("Asix Electronics Corporation", "Asix"), + T_DATA ("Askey Computer Corp. [hex]", "Askey"), + T_DATA ("ASUSTek Computer, Inc.", "ASUSTek Computer"), + T_DATA ("ASUSTek Computer, Inc. (wrong ID)", "ASUSTek Computer"), + T_DATA ("ATEN International Co., Ltd", "ATEN"), + T_DATA ("Atheros Communications", "Atheros"), + T_DATA ("Atheros Communications, Inc.", "Atheros"), + T_DATA ("AVM GmbH", "AVM"), + T_DATA ("AzureWave", "AzureWave"), + T_DATA ("Belkin", "Belkin"), + T_DATA ("Belkin Components", "Belkin"), + T_DATA ("Billionton Systems, Inc.", "Billionton"), + T_DATA ("Broadcom Corp.", "Broadcom"), + T_DATA ("Broadcom Limited", "Broadcom"), + T_DATA ("Brocade Communications Systems, Inc.", "Brocade"), + T_DATA ("BUFFALO INC. (formerly MelCo., Inc.)", "BUFFALO"), + T_DATA ("CACE Technologies Inc.", "CACE"), + T_DATA ("Cadence Design Systems, Inc.", "Cadence"), + T_DATA ("Chelsio Communications Inc", "Chelsio"), + T_DATA ("Chicony Electronics Co., Ltd", "Chicony"), + T_DATA ("Chu Yuen Enterprise Co., Ltd", "Chu Yuen"), + T_DATA ("Cisco Systems Inc", "Cisco"), + T_DATA ("Cisco Systems, Inc.", "Cisco"), + T_DATA ("CMOTECH Co., Ltd.", "CMOTECH"), + T_DATA ("CNet Technology Inc.", "CNet"), + T_DATA ("CNet Technology Inc", "CNet"), + T_DATA ("Comneon", "Comneon"), + T_DATA ("Compaq Computer Corp.", "Compaq"), + T_DATA ("Compaq Computer Corporation", "Compaq"), + T_DATA ("Compex", "Compex"), + T_DATA ("Computer Access Technology Corp.", "Computer Access"), + T_DATA ("Conexant Systems, Inc.", "Conexant"), + T_DATA ("Conexant Systems (Rockwell), Inc.", "Conexant"), + T_DATA ("Corega K.K.", "Corega K.K."), + T_DATA ("Curitel Communications, Inc.", "Curitel"), + T_DATA ("CyberTAN Technology", "CyberTAN"), + T_DATA ("Cypress Semiconductor Corp.", "Cypress"), + T_DATA ("Davicom Semiconductor, Inc.", "Davicom"), + T_DATA ("Dell Computer Corp.", "Dell"), + T_DATA ("DELTA Electronics, Inc", "DELTA"), + T_DATA ("Digital Equipment Corporation", "Digital Equipment"), + T_DATA ("D-Link Corp.", "D-Link"), + T_DATA ("D-Link System", "D-Link System"), + T_DATA ("D-Link System Inc", "D-Link System"), + T_DATA ("DrayTek Corp.", "DrayTek"), + T_DATA ("d'TV", "d'TV"), + T_DATA ("DVICO", "DVICO"), + T_DATA ("Edimax Computer Co.", "Edimax"), + T_DATA ("Edimax Technology Co., Ltd", "Edimax"), + T_DATA ("Efar Microsystems", "Efar"), + T_DATA ("Efficient Networks, Inc.", "Efficient"), + T_DATA ("ELCON Systemtechnik", "ELCON"), + T_DATA ("Elecom Co., Ltd", "Elecom"), + T_DATA ("ELSA AG", "ELSA"), + T_DATA ("Emulex Corporation", "Emulex"), + T_DATA ("Encore Electronics Inc.", "Encore"), + T_DATA ("EndPoints, Inc.", "EndPoints"), + T_DATA ("Entrega [hex]", "Entrega"), + T_DATA ("Ericsson Business Mobile Networks BV", "Ericsson"), + T_DATA ("eTEK Labs", "eTEK"), + T_DATA ("Exar Corp.", "Exar"), + T_DATA ("Fiberline", "Fiberline"), + T_DATA ("Fujitsu Limited.", "Fujitsu"), + T_DATA ("Fujitsu Siemens Computers", "Fujitsu Siemens"), + T_DATA ("Gateway, Inc.", "Gateway"), + T_DATA ("Gemtek", "Gemtek"), + T_DATA ("Genesys Logic, Inc.", "Genesys Logic"), + T_DATA ("Global Sun Technology", "Global Sun"), + T_DATA ("Global Sun Technology, Inc.", "Global Sun"), + T_DATA ("GlobeSpan, Inc.", "GlobeSpan"), + T_DATA ("Gmate, Inc.", "Gmate"), + T_DATA ("Good Way Technology", "Good Way"), + T_DATA ("Guillemot Corp.", "Guillemot"), + T_DATA ("Hangzhou Silan Microelectronics Co., Ltd.", "Hangzhou Silan"), + T_DATA ("Hawking Technologies", "Hawking"), + T_DATA ("Hewlett-Packard", "Hewlett-Packard"), + T_DATA ("Hirose Electric", "Hirose Electric"), + T_DATA ("Holtek Microelectronics Inc", "Holtek"), + T_DATA ("Huawei-3Com", "Huawei-3Com"), + T_DATA ("Huawei Technologies Co., Ltd.", "Huawei"), + T_DATA ("ICS Advent", "ICS Advent"), + T_DATA ("IMC Networks", "IMC"), + T_DATA ("Intel Corp.", "Intel"), + T_DATA ("Intel Corporation", "Intel"), + T_DATA ("Intellon Corp.", "Intellon"), + T_DATA ("InterBiometrics", "InterBiometrics"), + T_DATA ("Intersil Corp.", "Intersil"), + T_DATA ("Intersil Corporation", "Intersil"), + T_DATA ("I-O Data Device, Inc.", "I-O Data Device"), + T_DATA ("Jaton Corp.", "Jaton"), + T_DATA ("JMicron Technology Corp.", "JMicron"), + T_DATA ("Kawasaki LSI", "Kawasaki LSI"), + T_DATA ("KC Technology, Inc.", "KC"), + T_DATA ("Kingston Technology", "Kingston"), + T_DATA ("KTI", "KTI"), + T_DATA ("Kvaser AB", "Kvaser"), + T_DATA ("LapLink, Inc.", "LapLink"), + T_DATA ("Lenovo", "Lenovo"), + T_DATA ("LevelOne", "LevelOne"), + T_DATA ("LG Electronics, Inc.", "LG"), + T_DATA ("LG Electronics USA, Inc.", "LG"), + T_DATA ("Linksys, Inc.", "Linksys"), + T_DATA ("Linksys (?)", "Linksys"), + T_DATA ("Linksys", "Linksys"), + T_DATA ("Lite-On Communications Inc", "Lite-On"), + T_DATA ("Lite-On Technology Corp.", "Lite-On"), + T_DATA ("Logitec Corp.", "Logitec"), + T_DATA ("Logitech, Inc.", "Logitech"), + T_DATA ("LSI Corporation", "LSI"), + T_DATA ("LSI Logic / Symbios Logic", "LSI Logic"), + T_DATA ("Macronix, Inc. [MXIC]", "MXIC"), + T_DATA ("Marvell Semiconductor, Inc.", "Marvell"), + T_DATA ("Marvell Technology Group Ltd.", "Marvell"), + T_DATA ("MediaTek Inc.", "MediaTek"), + T_DATA ("Mellanox Technologies", "Mellanox"), + T_DATA ("Memorex", "Memorex"), + T_DATA ("Micrel-Kendin", "Micrel-Kendin"), + T_DATA ("Microchip Technology, Inc.", "Microchip"), + T_DATA ("Microcomputer Systems (M) Son", "Microcomputer"), + T_DATA ("Microsoft Corp.", "Microsoft"), + T_DATA ("Microsoft Corporation", "Microsoft"), + T_DATA ("Micro-Star International Co., Ltd. [MSI]", "MSI"), + T_DATA ("Micro Star International", "Micro Star"), + T_DATA ("Mobility", "Mobility"), + T_DATA ("MosChip Semiconductor", "MosChip"), + T_DATA ("Motorola PCS", "Motorola"), + T_DATA ("MYRICOM Inc.", "MYRICOM"), + T_DATA ("MYSON Technology Inc", "MYSON"), + T_DATA ("National Instruments Corp.", "National"), + T_DATA ("National Semiconductor Corporation", "National"), + T_DATA ("NEC Corp.", "NEC"), + T_DATA ("Netchip Technology, Inc.", "Netchip"), + T_DATA ("Netgear, Inc", "Netgear"), + T_DATA ("NetGear, Inc.", "NetGear"), + T_DATA ("Netgear", "Netgear"), + T_DATA ("Netopia, Inc.", "Netopia"), + T_DATA ("Netronome Systems, Inc.", "Netronome"), + T_DATA ("NetVin", "NetVin"), + T_DATA ("NetXen Incorporated", "NetXen"), + T_DATA ("Nordic Semiconductor ASA", "Nordic"), + T_DATA ("Northern Telecom", "Northern Telecom"), + T_DATA ("NovaTech", "NovaTech"), + T_DATA ("Novatel Wireless", "Novatel Wireless"), + T_DATA ("NVIDIA Corp.", "NVIDIA"), + T_DATA ("NVIDIA Corporation", "NVIDIA"), + T_DATA ("Olicom", "Olicom"), + T_DATA ("Olivetti Techcenter", "Olivetti"), + T_DATA ("Olympus Optical Co., Ltd", "Olympus"), + T_DATA ("OMEGA TECHNOLOGY", "OMEGA"), + T_DATA ("Omnidirectional Control Technology, Inc.", "Omnidirectional Control"), + T_DATA ("OpenMoko, Inc.", "OpenMoko"), + T_DATA ("Option", "Option"), + T_DATA ("OQO", "OQO"), + T_DATA ("Oracle/SUN", "Oracle"), + T_DATA ("Ovislink Corp.", "Ovislink"), + T_DATA ("Packet Engines Inc.", "Packet Engines"), + T_DATA ("Panasonic (Matsushita)", "Panasonic"), + T_DATA ("PEAK System", "PEAK System"), + T_DATA ("PEAK-System Technik GmbH", "PEAK-System"), + T_DATA ("PEGATRON CORPORATION", "PEGATRON CORPORATION"), + T_DATA ("Peppercon AG", "Peppercon"), + T_DATA ("Peracom Networks, Inc.", "Peracom"), + T_DATA ("Philips (or NXP)", "Philips"), + T_DATA ("Planex Communications, Inc", "Planex"), + T_DATA ("Planex Communications", "Planex"), + T_DATA ("Planex", "Planex"), + T_DATA ("PLANEX", "PLANEX"), + T_DATA ("Portsmith", "Portsmith"), + T_DATA ("Prolific Technology, Inc.", "Prolific"), + T_DATA ("Qcom", "Qcom"), + T_DATA ("Qi Hardware", "Qi"), + T_DATA ("QinHeng Electronics", "QinHeng"), + T_DATA ("QLogic Corp.", "QLogic"), + T_DATA ("Qualcomm Atheros Communications", "Qualcomm Atheros"), + T_DATA ("Qualcomm Atheros", "Qualcomm Atheros"), + T_DATA ("Qualcomm, Inc.", "Qualcomm"), + T_DATA ("Qualcomm / Option", "Qualcomm"), + T_DATA ("Quanta Computer, Inc.", "Quanta Computer"), + T_DATA ("Quanta Microsystems, Inc.", "Quanta"), + T_DATA ("Quantenna Communications, Inc.", "Quantenna"), + T_DATA ("RadioShack Corp. (Tandy)", "RadioShack"), + T_DATA ("Ralink corp.", "Ralink"), + T_DATA ("Ralink Technology, Corp.", "Ralink"), + T_DATA ("RDC Semiconductor, Inc.", "RDC"), + T_DATA ("Realtek Semiconductor Co., Ltd.", "Realtek"), + T_DATA ("Realtek Semiconductor Corp.", "Realtek"), + T_DATA ("Red Hat, Inc.", "Red Hat"), + T_DATA ("SafeNet (wrong ID)", "SafeNet"), + T_DATA ("Sagem", "Sagem"), + T_DATA ("Samsung Electronics Co., Ltd", "Samsung"), + T_DATA ("Sega Enterprises Ltd", "Sega"), + T_DATA ("Senao", "Senao"), + T_DATA ("Shark Multimedia", "Shark"), + T_DATA ("Sharp Corp.", "Sharp"), + T_DATA ("Siemens Information and Communication Products", "Siemens"), + T_DATA ("Sierra Wireless, Inc.", "Sierra Wireless"), + T_DATA ("Silicom", "Silicom"), + T_DATA ("Silicon Graphics Intl. Corp.", "Silicon Graphics"), + T_DATA ("Silicon Integrated Systems [SiS]", "SiS"), + T_DATA ("Sitecom Europe B.V.", "Sitecom"), + T_DATA ("Sitecom", "Sitecom"), + T_DATA ("smartBridges, Inc.", "smartBridges"), + T_DATA ("SohoWare", "SohoWare"), + T_DATA ("Solarflare Communications", "Solarflare"), + T_DATA ("Sony Corp.", "Sony"), + T_DATA ("SpeedStream", "SpeedStream"), + T_DATA ("Sphairon Access Systems GmbH", "Sphairon"), + T_DATA ("Standard Microsystems Corp [SMC]", "SMC"), + T_DATA ("Standard Microsystems Corp.", "Standard"), + T_DATA ("STMicroelectronics", "STMicroelectronics"), + T_DATA ("Sundance Technology Inc / IC Plus Corp", "Sundance"), + T_DATA ("Surecom Technology Corp.", "Surecom"), + T_DATA ("Surecom Technology", "Surecom"), + T_DATA ("Sweex", "Sweex"), + T_DATA ("SysKonnect", "SysKonnect"), + T_DATA ("T & A Mobile Phones", "T & A"), + T_DATA ("TDK Semiconductor Corp.", "TDK"), + T_DATA ("Tehuti Networks Ltd.", "Tehuti"), + T_DATA ("Tekram Technology Co., Ltd", "Tekram"), + T_DATA ("Telit Wireless Solutions", "Telit"), + T_DATA ("Texas Instruments, Inc.", "Texas"), + T_DATA ("Thales Norway A/S", "Thales"), + T_DATA ("TMT Technology, Inc.", "TMT"), + T_DATA ("Toshiba Corp.", "Toshiba"), + T_DATA ("TRENDnet", "TRENDnet"), + T_DATA ("Trident Microsystems", "Trident"), + T_DATA ("Trust International B.V.", "Trust"), + T_DATA ("TTTech Computertechnik AG (Wrong ID)", "TTTech"), + T_DATA ("TwinMOS", "TwinMOS"), + T_DATA ("U-Blox AG", "U-Blox"), + T_DATA ("ULi Electronics Inc.", "ULi"), + T_DATA ("U.S. Robotics", "U.S. Robotics"), + T_DATA ("Vaillant", "Vaillant"), + T_DATA ("VIA Technologies, Inc.", "VIA"), + T_DATA ("Victor Company of Japan, Ltd", "Victor"), + T_DATA ("VMware", "VMware"), + T_DATA ("VTech Holdings, Ltd", "VTech"), + T_DATA ("Wavecom", "Wavecom"), + T_DATA ("Westell", "Westell"), + T_DATA ("Western Digital Technologies, Inc.", "Western Digital"), + T_DATA ("Wilocity Ltd.", "Wilocity"), + T_DATA ("Winbond Electronics Corp", "Winbond"), + T_DATA ("Winbond", "Winbond"), + T_DATA ("Wistron NeWeb", "Wistron NeWeb"), + T_DATA ("Xircom", "Xircom"), + T_DATA ("Z-Com", "Z-Com"), + T_DATA ("Zinwell", "Zinwell"), + T_DATA ("Zoom Telephonics, Inc.", "Zoom"), + T_DATA ("ZTE WCDMA Technologies MSM", "ZTE"), + T_DATA ("ZyDAS", "ZyDAS"), + T_DATA ("ZyXEL Communications Corp.", "ZyXEL"), + }; + + _test_fixup_string (data, G_N_ELEMENTS (data), nm_utils_fixup_vendor_string); +} + +static void +test_fixup_product_string (void) +{ + static const TestFixupData data[] = { + T_DATA ("10/100BaseTX [RTL81xx]", "RTL81xx"), + T_DATA ("10/100 Ethernet", NULL), + T_DATA ("10/100 Ethernet [pegasus]", "pegasus"), + T_DATA ("10/100 USB Ethernet", NULL), + T_DATA ("10/100 USB NIC", NULL), + T_DATA ("1010/1020/1007/1741 10Gbps CNA", "1010/1020/1007/1741"), + T_DATA ("1012 PCMCIA 10/100 Ethernet Card [RTL81xx]", "1012"), + T_DATA ("101 Ethernet [klsi]", "101"), + T_DATA ("10GbE Converged Network Adapter (TCP/IP Networking)", NULL), + T_DATA ("10GbE Ethernet Adapter", NULL), + T_DATA ("10 Gigabit BR KX4 Dual Port Network Connection", "BR KX4"), + T_DATA ("10-Giga TOE SmartNIC 2-Port", "SmartNIC"), + T_DATA ("10-Giga TOE SmartNIC", "SmartNIC"), + T_DATA ("10Mbps Ethernet [klsi]", "klsi"), + T_DATA ("1860 16Gbps/10Gbps Fabric Adapter", "1860"), + T_DATA ("190 Ethernet Adapter", "190"), + T_DATA ("191 Gigabit Ethernet Adapter", "191"), + T_DATA ("21145 Fast Ethernet", "21145"), + T_DATA ("21x4x DEC-Tulip compatible 10/100 Ethernet", "21x4x"), + T_DATA ("21x4x DEC-Tulip compatible Fast Ethernet", "21x4x"), + T_DATA ("2202 Ethernet [klsi]", "2202"), + T_DATA ("2202 Ethernet [pegasus]", "2202"), + T_DATA ("3C19250 Ethernet [klsi]", "3C19250"), + T_DATA ("3c450 HomePNA [Tornado]", "3c450 HomePNA"), + T_DATA ("3C460B 10/100 Ethernet Adapter", "3C460B"), + T_DATA ("3c555 Laptop Hurricane", "3c555 Hurricane"), + T_DATA ("3c556B CardBus [Tornado]", "3c556B"), + T_DATA ("3c556 Hurricane CardBus [Cyclone]", "3c556 Hurricane"), + T_DATA ("3c575 Megahertz 10/100 LAN CardBus [Boomerang]", "3c575 Megahertz"), + T_DATA ("3c590 10BaseT [Vortex]", "3c590"), + T_DATA ("3c592 EISA 10mbps Demon/Vortex", "3c592 Demon/Vortex"), + T_DATA ("3c595 100Base-MII [Vortex]", "3c595"), + T_DATA ("3c595 100BaseT4 [Vortex]", "3c595"), + T_DATA ("3c595 100BaseTX [Vortex]", "3c595"), + T_DATA ("3c595 Megahertz 10/100 LAN CardBus [Boomerang]", "3c595 Megahertz"), + T_DATA ("3c597 EISA Fast Demon/Vortex", "3c597 Fast Demon/Vortex"), + T_DATA ("3c900 10BaseT [Boomerang]", "3c900"), + T_DATA ("3c900 10Mbps Combo [Boomerang]", "3c900 Combo"), + T_DATA ("3c900B-Combo Etherlink XL [Cyclone]", "3c900B-Combo Etherlink XL"), + T_DATA ("3c900B-FL 10base-FL [Cyclone]", "3c900B-FL"), + T_DATA ("3c900B-TPC Etherlink XL [Cyclone]", "3c900B-TPC Etherlink XL"), + T_DATA ("3c900B-TPO Etherlink XL [Cyclone]", "3c900B-TPO Etherlink XL"), + T_DATA ("3c905 100BaseT4 [Boomerang]", "3c905"), + T_DATA ("3c905 100BaseTX [Boomerang]", "3c905"), + T_DATA ("3c905B 100BaseTX [Cyclone]", "3c905B"), + T_DATA ("3c905B Deluxe Etherlink 10/100/BNC [Cyclone]", "3c905B Deluxe Etherlink"), + T_DATA ("3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone]", "3c905B-FX Fast Etherlink XL FX"), + T_DATA ("3c905B-T4 Fast EtherLink XL [Cyclone]", "3c905B-T4 Fast EtherLink XL"), + T_DATA ("3C905B-TX Fast Etherlink XL PCI", "3C905B-TX Fast Etherlink XL"), + T_DATA ("3c905C-TX/TX-M [Tornado]", "3c905C-TX/TX-M"), + T_DATA ("3C920B-EMB Integrated Fast Ethernet Controller [Tornado]", "3C920B-EMB"), + T_DATA ("3C920B-EMB-WNM Integrated Fast Ethernet Controller", "3C920B-EMB-WNM"), + T_DATA ("3c940 10/100/1000Base-T [Marvell]", "3c940"), + T_DATA ("3c940B 10/100/1000Base-T", "3c940B"), + T_DATA ("3c980-C 10/100baseTX NIC [Python-T]", "3c980-C"), + T_DATA ("3c980-TX Fast Etherlink XL Server Adapter [Cyclone]", "3c980-TX Fast Etherlink XL"), + T_DATA ("3c982-TXM 10/100baseTX Dual Port A [Hydra]", "3c982-TXM A"), + T_DATA ("3c982-TXM 10/100baseTX Dual Port B [Hydra]", "3c982-TXM B"), + T_DATA ("3c985 1000BaseSX (SX/TX)", "3c985"), + T_DATA ("3C990B-TX-M/3C990BSVR [Typhoon2]", "3C990B-TX-M/3C990BSVR"), + T_DATA ("3C990SVR [Typhoon Server]", "3C990SVR"), + T_DATA ("3C990-TX [Typhoon]", "3C990-TX"), + T_DATA ("3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone]", "3cCFE575BT Megahertz"), + T_DATA ("3cCFE575CT CardBus [Cyclone]", "3cCFE575CT"), + T_DATA ("3cCFE656 CardBus [Cyclone]", "3cCFE656"), + T_DATA ("3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone]", "3cCFEM656B"), + T_DATA ("3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller", "3Com 3C920B-EMB-WNM"), + T_DATA ("3Com 3CRUSBN275 802.11abgn Wireless Adapter [Atheros AR9170]", "3Com 3CRUSBN275"), + T_DATA ("3com 3CRWE154G72 [Office Connect Wireless LAN Adapter]", "3com 3CRWE154G72"), + T_DATA ("3CR990-FX-95/97/95 [Typhon Fiber]", "3CR990-FX-95/97/95"), + T_DATA ("3CR990SVR95 [Typhoon Server 56-bit]", "3CR990SVR95"), + T_DATA ("3CR990SVR97 [Typhoon Server 168-bit]", "3CR990SVR97"), + T_DATA ("3CR990-TX-95 [Typhoon 56-bit]", "3CR990-TX-95"), + T_DATA ("3CR990-TX-97 [Typhoon 168-bit]", "3CR990-TX-97"), + T_DATA ("3CRPAG175 Wireless PC Card", "3CRPAG175"), + T_DATA ("3CRUSB10075 802.11bg [ZyDAS ZD1211]", "3CRUSB10075"), + T_DATA ("3CRWE254G72 802.11g Adapter", "3CRWE254G72"), + T_DATA ("3CSOHO100B-TX 910-A01 [tulip]", "3CSOHO100B-TX 910-A01"), + T_DATA ("3cSOHO100-TX Hurricane", "3cSOHO100-TX Hurricane"), + T_DATA ("3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado]", "3cXFEM656C"), + T_DATA ("4410a Wireless-G Adapter [Intersil ISL3887]", "4410a"), + T_DATA ("4DWave DX", "4DWave DX"), + T_DATA ("4G LTE adapter", NULL), + T_DATA ("54g USB Network Adapter", NULL), + T_DATA ("570x 10/100 Integrated Controller", "570x"), + T_DATA ("79c970 [PCnet32 LANCE]", "79c970"), + T_DATA ("79c978 [HomePNA]", "79c978"), + T_DATA ("80003ES2LAN Gigabit Ethernet Controller (Copper)", "80003ES2LAN"), + T_DATA ("80003ES2LAN Gigabit Ethernet Controller (Serdes)", "80003ES2LAN"), + T_DATA ("802.11a/b/g/n USB Wireless LAN Card", NULL), + T_DATA ("802.11 Adapter", NULL), + T_DATA ("802.11bgn 1T1R Mini Card Wireless Adapter", "1T1R"), + T_DATA ("802.11bg", NULL), + T_DATA ("802.11b/g/n USB Wireless LAN Card", NULL), + T_DATA ("802.11b/g/n USB Wireless Network Adapter", NULL), + T_DATA ("802.11b/g/n Wireless Network Adapter", NULL), + T_DATA ("802.11b/g Turbo Wireless Adapter", NULL), + T_DATA ("802.11b/g Wireless Network Adapter", NULL), + T_DATA ("802.11g Wireless Adapter [Intersil ISL3886]", "Intersil ISL3886"), + T_DATA ("802.11n adapter", NULL), + T_DATA ("802.11n/b/g Mini Wireless LAN USB2.0 Adapter", NULL), + T_DATA ("802.11n/b/g Wireless LAN USB2.0 Adapter", NULL), + T_DATA ("802.11 n/g/b Wireless LAN Adapter", NULL), + T_DATA ("802.11 n/g/b Wireless LAN USB Adapter", NULL), + T_DATA ("802.11 n/g/b Wireless LAN USB Mini-Card", NULL), + T_DATA ("802.11n Network Adapter", NULL), + T_DATA ("802.11n Network Adapter (wrong ID - swapped vendor and device)", NULL), + T_DATA ("802.11n USB Wireless Card", NULL), + T_DATA ("802.11n Wireless Adapter", NULL), + T_DATA ("802.11n Wireless LAN Card", NULL), + T_DATA ("802.11n Wireless USB Card", NULL), + T_DATA ("802AIN Wireless N Network Adapter [Atheros AR9170+AR9101]", "Atheros AR9170+AR9101"), + T_DATA ("802UIG-1 802.11g Wireless Mini Adapter [Intersil ISL3887]", "Intersil ISL3887"), + T_DATA ("82540EM Gigabit Ethernet Controller", "82540EM"), + T_DATA ("82540EM Gigabit Ethernet Controller (LOM)", "82540EM"), + T_DATA ("82540EP Gigabit Ethernet Controller", "82540EP"), + T_DATA ("82540EP Gigabit Ethernet Controller (Mobile)", "82540EP"), + T_DATA ("82541EI Gigabit Ethernet Controller", "82541EI"), + T_DATA ("82541ER Gigabit Ethernet Controller", "82541ER"), + T_DATA ("82541GI Gigabit Ethernet Controller", "82541GI"), + T_DATA ("82541PI Gigabit Ethernet Controller", "82541PI"), + T_DATA ("82542 Gigabit Ethernet Controller (Fiber)", "82542"), + T_DATA ("82543GC Gigabit Ethernet Controller (Copper)", "82543GC"), + T_DATA ("82543GC Gigabit Ethernet Controller (Fiber)", "82543GC"), + T_DATA ("82544EI Gigabit Ethernet Controller (Copper)", "82544EI"), + T_DATA ("82544EI Gigabit Ethernet Controller (Fiber)", "82544EI"), + T_DATA ("82544GC Gigabit Ethernet Controller (Copper)", "82544GC"), + T_DATA ("82544GC Gigabit Ethernet Controller (LOM)", "82544GC"), + T_DATA ("82545EM Gigabit Ethernet Controller (Copper)", "82545EM"), + T_DATA ("82545EM Gigabit Ethernet Controller (Fiber)", "82545EM"), + T_DATA ("82545GM Gigabit Ethernet Controller", "82545GM"), + T_DATA ("82546EB Gigabit Ethernet Controller", "82546EB"), + T_DATA ("82546EB Gigabit Ethernet Controller (Copper)", "82546EB"), + T_DATA ("82546EB Gigabit Ethernet Controller (Fiber)", "82546EB"), + T_DATA ("82546GB Gigabit Ethernet Controller", "82546GB"), + T_DATA ("82546GB Gigabit Ethernet Controller (Copper)", "82546GB"), + T_DATA ("82547EI Gigabit Ethernet Controller", "82547EI"), + T_DATA ("82547EI Gigabit Ethernet Controller (Mobile)", "82547EI"), + T_DATA ("82547GI Gigabit Ethernet Controller", "82547GI"), + T_DATA ("82551QM Ethernet Controller", "82551QM"), + T_DATA ("82552 10/100 Network Connection", "82552"), + T_DATA ("82557/8/9/0/1 Ethernet Pro 100", "82557/8/9/0/1"), + T_DATA ("82559 Ethernet Controller", "82559"), + T_DATA ("82559 InBusiness 10/100", "82559 InBusiness"), + T_DATA ("8255xER/82551IT Fast Ethernet Controller", "8255xER/82551IT"), + T_DATA ("82562 EM/EX/GX - PRO/100 VM Ethernet Controller", "82562 EM/EX/GX"), + T_DATA ("82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller", "82562 EM/EX/GX"), + T_DATA ("82562EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile", "82562EM/EX/GX"), + T_DATA ("82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller", "82562ET/EZ/GT/GZ"), + T_DATA ("82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller", "82562ET/EZ/GT/GZ"), + T_DATA ("82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile", "82562ET/EZ/GT/GZ"), + T_DATA ("82562EZ 10/100 Ethernet Controller", "82562EZ"), + T_DATA ("82562G 10/100 Network Connection", "82562G"), + T_DATA ("82562G-2 10/100 Network Connection", "82562G-2"), + T_DATA ("82562G - PRO/100 VE Ethernet Controller Mobile", "82562G"), + T_DATA ("82562G - PRO/100 VE (LOM) Ethernet Controller", "82562G"), + T_DATA ("82562GT 10/100 Network Connection", "82562GT"), + T_DATA ("82562GT-2 10/100 Network Connection", "82562GT-2"), + T_DATA ("82562V 10/100 Network Connection", "82562V"), + T_DATA ("82562V-2 10/100 Network Connection", "82562V-2"), + T_DATA ("82566DC-2 Gigabit Network Connection", "82566DC-2"), + T_DATA ("82566DC Gigabit Network Connection", "82566DC"), + T_DATA ("82566DM-2 Gigabit Network Connection", "82566DM-2"), + T_DATA ("82566DM Gigabit Network Connection", "82566DM"), + T_DATA ("82566MC Gigabit Network Connection", "82566MC"), + T_DATA ("82566MM Gigabit Network Connection", "82566MM"), + T_DATA ("82567LF-2 Gigabit Network Connection", "82567LF-2"), + T_DATA ("82567LF-3 Gigabit Network Connection", "82567LF-3"), + T_DATA ("82567LF Gigabit Network Connection", "82567LF"), + T_DATA ("82567LM-2 Gigabit Network Connection", "82567LM-2"), + T_DATA ("82567LM-3 Gigabit Network Connection", "82567LM-3"), + T_DATA ("82567LM-4 Gigabit Network Connection", "82567LM-4"), + T_DATA ("82567LM Gigabit Network Connection", "82567LM"), + T_DATA ("82567V-2 Gigabit Network Connection", "82567V-2"), + T_DATA ("82567V-3 Gigabit Network Connection", "82567V-3"), + T_DATA ("82567V-4 Gigabit Network Connection", "82567V-4"), + T_DATA ("82567V Gigabit Network Connection", "82567V"), + T_DATA ("82571EB Dual Port Gigabit Mezzanine Adapter", "82571EB Mezzanine"), + T_DATA ("82571EB Gigabit Ethernet Controller", "82571EB"), + T_DATA ("82571EB Gigabit Ethernet Controller (Copper)", "82571EB"), + T_DATA ("82571EB Gigabit Ethernet Controller (Fiber)", "82571EB"), + T_DATA ("82571EB Quad Port Gigabit Mezzanine Adapter", "82571EB Quad Port Mezzanine"), + T_DATA ("82571PT Gigabit PT Quad Port Server ExpressModule", "82571PT PT Quad Port"), + T_DATA ("82572EI Gigabit Ethernet Controller", "82572EI"), + T_DATA ("82572EI Gigabit Ethernet Controller (Copper)", "82572EI"), + T_DATA ("82572EI Gigabit Ethernet Controller (Fiber)", "82572EI"), + T_DATA ("82573E Gigabit Ethernet Controller (Copper)", "82573E"), + T_DATA ("82573L Gigabit Ethernet Controller", "82573L"), + T_DATA ("82573V Gigabit Ethernet Controller (Copper)", "82573V"), + T_DATA ("82574L Gigabit Network Connection", "82574L"), + T_DATA ("82575EB Gigabit Backplane Connection", "82575EB Backplane Connection"), + T_DATA ("82575EB Gigabit Network Connection", "82575EB"), + T_DATA ("82575GB Gigabit Network Connection", "82575GB"), + T_DATA ("82576 Gigabit Backplane Connection", "82576 Backplane Connection"), + T_DATA ("82576 Gigabit Network Connection", "82576"), + T_DATA ("82576NS Gigabit Network Connection", "82576NS"), + T_DATA ("82576NS SerDes Gigabit Network Connection", "82576NS SerDes"), + T_DATA ("82576 Virtual Function", "82576 Virtual Function"), + T_DATA ("82577LC Gigabit Network Connection", "82577LC"), + T_DATA ("82577LM Gigabit Network Connection", "82577LM"), + T_DATA ("82578DC Gigabit Network Connection", "82578DC"), + T_DATA ("82578DM Gigabit Network Connection", "82578DM"), + T_DATA ("82579LM Gigabit Network Connection (Lewisville)", "82579LM"), + T_DATA ("82579V Gigabit Network Connection", "82579V"), + T_DATA ("82580 Gigabit Backplane Connection", "82580 Backplane Connection"), + T_DATA ("82580 Gigabit Fiber Network Connection", "82580"), + T_DATA ("82580 Gigabit Network Connection", "82580"), + T_DATA ("82580 Gigabit SFP Connection", "82580 SFP Connection"), + T_DATA ("82583V Gigabit Network Connection", "82583V"), + T_DATA ("82597EX 10GbE Ethernet Controller", "82597EX"), + T_DATA ("82598 10GbE PCI-Express Ethernet Controller", "82598"), + T_DATA ("82598EB 10-Gigabit AF Dual Port Network Connection", "82598EB AF"), + T_DATA ("82598EB 10-Gigabit AF Network Connection", "82598EB AF"), + T_DATA ("82598EB 10-Gigabit AT2 Server Adapter", "82598EB AT2"), + T_DATA ("82598EB 10-Gigabit AT CX4 Network Connection", "82598EB AT CX4"), + T_DATA ("82598EB 10-Gigabit AT Network Connection", "82598EB AT"), + T_DATA ("82598EB 10-Gigabit Dual Port Network Connection", "82598EB"), + T_DATA ("82598EB Gigabit BX Network Connection", "82598EB BX"), + T_DATA ("82599 10 Gigabit Dual Port Backplane Connection", "82599 Backplane Connection"), + T_DATA ("82599 10 Gigabit Dual Port Backplane Connection with FCoE", "82599 Backplane Connection with FCoE"), + T_DATA ("82599 10 Gigabit Dual Port Network Connection", "82599"), + T_DATA ("82599 10 Gigabit Dual Port Network Connection with FCoE", "82599 with FCoE"), + T_DATA ("82599 10 Gigabit Network Connection", "82599"), + T_DATA ("82599 10 Gigabit TN Network Connection", "82599 TN"), + T_DATA ("82599ES 10 Gigabit Network Connection", "82599ES"), + T_DATA ("82599ES 10-Gigabit SFI/SFP+ Network Connection", "82599ES SFI/SFP+"), + T_DATA ("82599 Ethernet Controller Virtual Function", "82599 Virtual Function"), + T_DATA ("82599 Virtual Function", "82599 Virtual Function"), + T_DATA ("82801BA/BAM/CA/CAM Ethernet Controller", "82801BA/BAM/CA/CAM"), + T_DATA ("82801CAM (ICH3) PRO/100 VE Ethernet Controller", "82801CAM"), + T_DATA ("82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller", "82801CAM"), + T_DATA ("82801CAM (ICH3) PRO/100 VM Ethernet Controller", "82801CAM"), + T_DATA ("82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller", "82801CAM"), + T_DATA ("82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller", "82801CAM"), + T_DATA ("82801DB PRO/100 VE (CNR) Ethernet Controller", "82801DB PRO/100 VE"), + T_DATA ("82801DB PRO/100 VE (LOM) Ethernet Controller", "82801DB PRO/100 VE"), + T_DATA ("82801DB PRO/100 VE (MOB) Ethernet Controller", "82801DB PRO/100 VE"), + T_DATA ("82801DB PRO/100 VM (CNR) Ethernet Controller", "82801DB PRO/100 VM"), + T_DATA ("82801DB PRO/100 VM (LOM) Ethernet Controller", "82801DB PRO/100 VM"), + T_DATA ("82801DB PRO/100 VM (MOB) Ethernet Controller", "82801DB PRO/100 VM"), + T_DATA ("82801EB/ER (ICH5/ICH5R) integrated LAN Controller", "82801EB/ER"), + T_DATA ("82801E Ethernet Controller 0", "82801E 0"), + T_DATA ("82801E Ethernet Controller 1", "82801E 1"), + T_DATA ("83c170 EPIC/100 Fast Ethernet Adapter", "83c170 EPIC/100"), + T_DATA ("83c175 EPIC/100 Fast Ethernet Adapter", "83c175 EPIC/100"), + T_DATA ("83C885 NT50 DigitalScape Fast Ethernet", "83C885 NT50 DigitalScape"), + T_DATA ("88E8001 Gigabit Ethernet Controller", "88E8001"), + T_DATA ("88E8021 PCI-X IPMI Gigabit Ethernet Controller", "88E8021 IPMI"), + T_DATA ("88E8022 PCI-X IPMI Gigabit Ethernet Controller", "88E8022 IPMI"), + T_DATA ("88E8035 PCI-E Fast Ethernet Controller", "88E8035"), + T_DATA ("88E8036 PCI-E Fast Ethernet Controller", "88E8036"), + T_DATA ("88E8038 PCI-E Fast Ethernet Controller", "88E8038"), + T_DATA ("88E8039 PCI-E Fast Ethernet Controller", "88E8039"), + T_DATA ("88E8040 PCI-E Fast Ethernet Controller", "88E8040"), + T_DATA ("88E8040T PCI-E Fast Ethernet Controller", "88E8040T"), + T_DATA ("88E8042 PCI-E Fast Ethernet Controller", "88E8042"), + T_DATA ("88E8048 PCI-E Fast Ethernet Controller", "88E8048"), + T_DATA ("88E8050 PCI-E ASF Gigabit Ethernet Controller", "88E8050 ASF"), + T_DATA ("88E8052 PCI-E ASF Gigabit Ethernet Controller", "88E8052 ASF"), + T_DATA ("88E8053 PCI-E Gigabit Ethernet Controller", "88E8053"), + T_DATA ("88E8055 PCI-E Gigabit Ethernet Controller", "88E8055"), + T_DATA ("88E8056 PCI-E Gigabit Ethernet Controller", "88E8056"), + T_DATA ("88E8057 PCI-E Gigabit Ethernet Controller", "88E8057"), + T_DATA ("88E8058 PCI-E Gigabit Ethernet Controller", "88E8058"), + T_DATA ("88E8061 PCI-E IPMI Gigabit Ethernet Controller", "88E8061 IPMI"), + T_DATA ("88E8062 PCI-E IPMI Gigabit Ethernet Controller", "88E8062 IPMI"), + T_DATA ("88E8070 based Ethernet Controller", "88E8070 based"), + T_DATA ("88E8071 PCI-E Gigabit Ethernet Controller", "88E8071"), + T_DATA ("88E8072 PCI-E Gigabit Ethernet Controller", "88E8072"), + T_DATA ("88E8075 PCI-E Gigabit Ethernet Controller", "88E8075"), + T_DATA ("88EC032 Ethernet Controller", "88EC032"), + T_DATA ("88EC033 PCI-E Fast Ethernet Controller", "88EC033"), + T_DATA ("88EC034 Ethernet Controller", "88EC034"), + T_DATA ("88EC036 PCI-E Gigabit Ethernet Controller", "88EC036"), + T_DATA ("88EC042 Ethernet Controller", "88EC042"), + T_DATA ("88W8363 [TopDog] 802.11n Wireless", "88W8363"), + T_DATA ("88W8366 [TopDog] 802.11n Wireless", "88W8366"), + T_DATA ("88W8388 802.11a/b/g WLAN", "88W8388"), + T_DATA ("88W8687 [TopDog] 802.11b/g Wireless", "88W8687"), + T_DATA ("88W8764 [Avastar] 802.11n Wireless", "88W8764"), + T_DATA ("88W8897 [AVASTAR] 802.11ac Wireless", "88W8897"), + T_DATA ("A90-211WG-01 802.11g Adapter [Intersil ISL3887]", "A90-211WG-01"), + T_DATA ("A9T wireless 802.11bg", "A9T"), + T_DATA ("AboCom Systems Inc [WN2001 Prolink Wireless-N Nano Adapter]", "AboCom Systems Inc"), + T_DATA ("AC1000 Gigabit Ethernet", "AC1000"), + T_DATA ("AC1001 Gigabit Ethernet", "AC1001"), + T_DATA ("AC1003 Gigabit Ethernet", "AC1003"), + T_DATA ("AC9100 Gigabit Ethernet", "AC9100"), + T_DATA ("AceNIC Gigabit Ethernet", "AceNIC"), + T_DATA ("AceNIC Gigabit Ethernet (Copper)", "AceNIC"), + T_DATA ("Acer Gobi 2000 Wireless Modem", "Acer Gobi 2000"), + T_DATA ("Acer Gobi Wireless Modem", "Acer Gobi"), + T_DATA ("ADM8511 Pegasus II Ethernet", "ADM8511 Pegasus II"), + T_DATA ("ADMtek ADM8515 NIC", "ADMtek ADM8515"), + T_DATA ("ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter", "ADMtek Centaur-C"), + T_DATA ("ADSL Modem", NULL), + T_DATA ("AE1000 v1 802.11n [Ralink RT3572]", "AE1000"), + T_DATA ("AE1200 802.11bgn Wireless Adapter [Broadcom BCM43235]", "AE1200"), + T_DATA ("AE3000 802.11abgn (3x3) Wireless Adapter [Ralink RT3573]", "AE3000"), + T_DATA ("AG-225H 802.11bg", "AG-225H"), + T_DATA ("Air2210 54 Mbps Wireless Adapter", "Air2210"), + T_DATA ("Air2310 150 Mbps Wireless Adapter", "Air2310"), + T_DATA ("Airlink101 AWLL6070 802.11bgn Wireless Adapter [Ralink RT2770]", "Airlink101 AWLL6070"), + T_DATA ("Airlink101 AWLL6080 802.11bgn Wireless Adapter [Ralink RT2870]", "Airlink101 AWLL6080"), + T_DATA ("AirLive WL-1600USB 802.11g Adapter [Realtek RTL8187L]", "AirLive WL-1600USB"), + T_DATA ("AirLive WN-200USB wireless 11b/g/n dongle", "AirLive WN-200USB"), + T_DATA ("AirLive WN-360USB adapter", "AirLive WN-360USB"), + T_DATA ("AirLive X.USB 802.11abgn [Atheros AR9170+AR9104]", "AirLive X.USB"), + T_DATA ("AirPcap NX [Atheros AR9001U-(2)NG]", "AirPcap NX"), + T_DATA ("AirPlus G DWL-G120 Wireless Adapter(rev.C) [Intersil ISL3887]", "AirPlus G DWL-G120"), + T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.A1) [Intersil ISL3880]", "AirPlus G DWL-G122"), + T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.A2) [Intersil ISL3887]", "AirPlus G DWL-G122"), + T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.B1) [Ralink RT2571]", "AirPlus G DWL-G122"), + T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.C1) [Ralink RT2571W]", "AirPlus G DWL-G122"), + T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.E1) [Ralink RT2070]", "AirPlus G DWL-G122"), + T_DATA ("Alcatel One Touch L100V / Telekom Speedstick LTE II", "Alcatel One Touch L100V / Telekom Speedstick II"), + T_DATA ("Allnet ALL0283 [AR5523]", "Allnet ALL0283"), + T_DATA ("Allnet ALL0283 [AR5523](no firmware)", "Allnet ALL0283"), + T_DATA ("Allnet ALL0298 v2 802.11bg", "Allnet ALL0298"), + T_DATA ("AM10 v1 802.11n [Ralink RT3072]", "AM10"), + T_DATA ("AMD-8111 Ethernet", "AMD-8111"), + T_DATA ("AN2720 USB-USB Bridge", "AN2720 USB-USB Bridge"), + T_DATA ("AN8513 Ethernet", "AN8513"), + T_DATA ("AN8515 Ethernet", "AN8515"), + T_DATA ("AN986A Ethernet", "AN986A"), + T_DATA ("AN986 Pegasus Ethernet", "AN986 Pegasus"), + T_DATA ("ANA620xx/ANA69011A", "ANA620xx/ANA69011A"), + T_DATA ("AN-WF500 802.11abgn + BT Wireless Adapter [Broadcom BCM43242]", "AN-WF500"), + T_DATA ("Aolynk WUB320g", "Aolynk WUB320g"), + T_DATA ("AR2413/AR2414 Wireless Network Adapter [AR5005G(S) 802.11bg]", "AR2413/AR2414"), + T_DATA ("AR2417 Wireless Network Adapter [AR5007G 802.11bg]", "AR2417"), + T_DATA ("AR2425 Wireless Network Adapter [AR5007EG 802.11bg]", "AR2425"), + T_DATA ("AR2427 802.11bg Wireless Network Adapter (PCI-Express)", "AR2427"), + T_DATA ("AR242x / AR542x Wireless Network Adapter (PCI-Express)", "AR242x / AR542x"), + T_DATA ("AR5210 Wireless Network Adapter [AR5000 802.11a]", "AR5210"), + T_DATA ("AR5211 Wireless Network Adapter [AR5001A 802.11a]", "AR5211"), + T_DATA ("AR5211 Wireless Network Adapter [AR5001X 802.11ab]", "AR5211"), + T_DATA ("AR5212/5213/2414 Wireless Network Adapter", "AR5212/5213/2414"), + T_DATA ("AR5212 802.11abg NIC (3CRDAG675)", "AR5212"), + T_DATA ("AR5212 802.11abg NIC", "AR5212"), + T_DATA ("AR5413/AR5414 Wireless Network Adapter [AR5006X(S) 802.11abg]", "AR5413/AR5414"), + T_DATA ("AR5416 Wireless Network Adapter [AR5008 802.11(a)bgn]", "AR5416"), + T_DATA ("AR5418 Wireless Network Adapter [AR5008E 802.11(a)bgn] (PCI-Express)", "AR5418"), + T_DATA ("AR5523", "AR5523"), + T_DATA ("AR5523 driver (no firmware)", "AR5523"), + T_DATA ("AR5523 (no firmware)", "AR5523"), + T_DATA ("AR7010 (no firmware)", "AR7010"), + T_DATA ("AR8121/AR8113/AR8114 Gigabit or Fast Ethernet", "AR8121/AR8113/AR8114"), + T_DATA ("AR8131 Gigabit Ethernet", "AR8131"), + T_DATA ("AR8132 Fast Ethernet", "AR8132"), + T_DATA ("AR8151 v1.0 Gigabit Ethernet", "AR8151 v1.0"), + T_DATA ("AR8151 v2.0 Gigabit Ethernet", "AR8151 v2.0"), + T_DATA ("AR8152 v1.1 Fast Ethernet", "AR8152"), + T_DATA ("AR8152 v2.0 Fast Ethernet", "AR8152 v2.0"), + T_DATA ("AR8161 Gigabit Ethernet", "AR8161"), + T_DATA ("AR8162 Fast Ethernet", "AR8162"), + T_DATA ("AR9160 Wireless Network Adapter [AR9001 802.11(a)bgn]", "AR9160"), + T_DATA ("AR9170 802.11n", "AR9170"), + T_DATA ("AR9170+AR9104 802.11abgn Wireless Adapter", "AR9170+AR9104"), + T_DATA ("AR9227 Wireless Network Adapter", "AR9227"), + T_DATA ("AR922X Wireless Network Adapter", "AR922X"), + T_DATA ("AR922X Wireless Network Adapter (Compex WLM200NX / Wistron DNMA-92)", "AR922X"), + T_DATA ("AR9271 802.11n", "AR9271"), + T_DATA ("AR9285 Wireless Network Adapter (PCI-Express)", "AR9285"), + T_DATA ("AR9285 Wireless Network Adapter (PCI-Express) (AW-NB037H 802.11bgn Wireless Half-size Mini PCIe Card [AR9002WB-1NGCD])", "AR9285"), + T_DATA ("AR9287 Wireless Network Adapter (PCI-Express)", "AR9287"), + T_DATA ("AR928X Wireless Network Adapter (PCI-Express)", "AR928X"), + T_DATA ("AR928X Wireless Network Adapter (PCI-Express) (EM306 802.11bgn Wireless Half-size Mini PCIe Card [AR9283])", "AR928X"), + T_DATA ("AR928X Wireless Network Adapter (PCI-Express) (T77H047.31 802.11bgn Wireless Half-size Mini PCIe Card [AR9283])", "AR928X"), + T_DATA ("AR93xx Wireless Network Adapter", "AR93xx"), + T_DATA ("AR93xx Wireless Network Adapter (Killer Wireless-N 1102 Half-size Mini PCIe Card [AR9382])", "AR93xx"), + T_DATA ("AR93xx Wireless Network Adapter (Killer Wireless-N 1103 Half-size Mini PCIe Card [AR9380])", "AR93xx"), + T_DATA ("AR9462 Wireless Network Adapter", "AR9462"), + T_DATA ("AR9462 Wireless Network Adapter (Wireless 1601 802.11abgn Adapter)", "AR9462"), + T_DATA ("AR9462 Wireless Network Adapter (Wireless 1802 802.11abgn Adapter)", "AR9462"), + T_DATA ("AR9485 Wireless Network Adapter", "AR9485"), + T_DATA ("AR9485 Wireless Network Adapter (AR9485WB-EG 802.11b/g/n mini-PCIe card on a series 3 laptop)", "AR9485"), + T_DATA ("AR9485 Wireless Network Adapter (AW-NE186H)", "AR9485"), + T_DATA ("AR958x 802.11abgn Wireless Network Adapter", "AR958x"), + T_DATA ("Arcadyan 802.11N Wireless Adapter", "Arcadyan"), + T_DATA ("Arcadyan WN4501 802.11b/g", "Arcadyan WN4501"), + T_DATA ("Arcadyan WN7512 802.11n", "Arcadyan WN7512"), + T_DATA ("Asus Gobi 2000 Wireless Modem", "Asus Gobi 2000"), + T_DATA ("Aterm PA-WL54GU", "Aterm PA-WL54GU"), + T_DATA ("Aterm WL300NU-AG", "Aterm WL300NU-AG"), + T_DATA ("Aterm WL300NU-G", "Aterm WL300NU-G"), + T_DATA ("Attansic L1 Gigabit Ethernet", "Attansic L1"), + T_DATA ("Attansic L2c Gigabit Ethernet", "Attansic L2c"), + T_DATA ("Attansic L2 Fast Ethernet", "Attansic L2"), + T_DATA ("AT-USB100", "AT-USB100"), + T_DATA ("AX88141 Fast Ethernet Controller", "AX88141"), + T_DATA ("AX88178", "AX88178"), + T_DATA ("AX88179 Gigabit Ethernet", "AX88179"), + T_DATA ("AX88179 Gigabit Ethernet [Sitecom]", "AX88179"), + T_DATA ("AX88179 Gigabit Ethernet [ThinkPad OneLink GigaLAN]", "AX88179"), + T_DATA ("AX88772A Fast Ethernet", "AX88772A"), + T_DATA ("AX88772", "AX88772"), + T_DATA ("AX88772B", "AX88772B"), + T_DATA ("AX88772B Fast Ethernet Controller", "AX88772B"), + T_DATA ("B404-BT Unified Wire Ethernet Controller", "B404-BT"), + T_DATA ("B404-BT Unified Wire Ethernet Controller [VF]", "B404-BT"), + T_DATA ("B420-SR Unified Wire Ethernet Controller", "B420-SR"), + T_DATA ("B420-SR Unified Wire Ethernet Controller [VF]", "B420-SR"), + T_DATA ("B504-BT Unified Wire Ethernet Controller", "B504-BT"), + T_DATA ("B504-BT Unified Wire Ethernet Controller [VF]", "B504-BT"), + T_DATA ("B520-SR Unified Wire Ethernet Controller", "B520-SR"), + T_DATA ("B520-SR Unified Wire Ethernet Controller [VF]", "B520-SR"), + T_DATA ("BCM43142 802.11b/g/n", "BCM43142"), + T_DATA ("BCM43143 802.11bgn (1x1) Wireless Adapter", "BCM43143"), + T_DATA ("BCM43143 WLAN card", "BCM43143"), + T_DATA ("BCM43236 802.11abgn Wireless Adapter", "BCM43236"), + T_DATA ("BCM43241 WLAN card", "BCM43241"), + T_DATA ("BCM43242 802.11abgn Wireless Adapter", "BCM43242"), + T_DATA ("BCM4329 WLAN card", "BCM4329"), + T_DATA ("BCM4330 WLAN card", "BCM4330"), + T_DATA ("BCM43340 WLAN card", "BCM43340"), + T_DATA ("BCM43341 WLAN card", "BCM43341"), + T_DATA ("BCM4334 WLAN card", "BCM4334"), + T_DATA ("BCM4335/BCM4339 WLAN card", "BCM4335/BCM4339"), + T_DATA ("BCM43362 WLAN card", "BCM43362"), + T_DATA ("BCM4350 802.11ac Wireless Network Adapter", "BCM4350"), + T_DATA ("BCM4354 WLAN card", "BCM4354"), + T_DATA ("BCM43567 802.11ac Wireless Network Adapter", "BCM43567"), + T_DATA ("BCM4356 802.11ac Wireless Network Adapter", "BCM4356"), + T_DATA ("BCM43570 802.11ac Wireless Network Adapter", "BCM43570"), + T_DATA ("BCM4358 802.11ac Wireless LAN SoC", "BCM4358"), + T_DATA ("BCM43602 802.11ac Wireless LAN SoC", "BCM43602"), + T_DATA ("BCM4401 100Base-T", "BCM4401"), + T_DATA ("BCM4401-B0 100Base-TX", "BCM4401-B0"), + T_DATA ("BCM4402 Integrated 10/100BaseT", "BCM4402"), + T_DATA ("BCM57301 NetXtreme-C 10Gb Ethernet Controller", "BCM57301 NetXtreme-C"), + T_DATA ("BCM57302 NetXtreme-C 10Gb/25Gb Ethernet Controller", "BCM57302 NetXtreme-C"), + T_DATA ("BCM57304 NetXtreme-C 10Gb/25Gb/40Gb/50Gb Ethernet Controller", "BCM57304 NetXtreme-C"), + T_DATA ("BCM57311 NetXtreme-C 10Gb RDMA Ethernet Controller", "BCM57311 NetXtreme-C"), + T_DATA ("BCM57312 NetXtreme-C 10Gb/25Gb RDMA Ethernet Controller", "BCM57312 NetXtreme-C"), + T_DATA ("BCM57314 NetXtreme-C 10Gb/25Gb/40Gb/50Gb RDMA Ethernet Controller", "BCM57314 NetXtreme-C"), + T_DATA ("BCM57402 NetXtreme-E 10Gb Ethernet Controller", "BCM57402 NetXtreme-E"), + T_DATA ("BCM57402 NetXtreme-E Ethernet Partition", "BCM57402 NetXtreme-E Partition"), + T_DATA ("BCM57404 NetXtreme-E 10Gb/25Gb Ethernet Controller", "BCM57404 NetXtreme-E"), + T_DATA ("BCM57404 NetXtreme-E Ethernet Partition", "BCM57404 NetXtreme-E Partition"), + T_DATA ("BCM57406 NetXtreme-E 10GBASE-T Ethernet Controller", "BCM57406 NetXtreme-E"), + T_DATA ("BCM57406 NetXtreme-E Ethernet Partition", "BCM57406 NetXtreme-E Partition"), + T_DATA ("BCM57407 NetXtreme-E 10GBase-T Ethernet Controller", "BCM57407 NetXtreme-E"), + T_DATA ("BCM57407 NetXtreme-E 25Gb Ethernet Controller", "BCM57407 NetXtreme-E"), + T_DATA ("BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller", "BCM57412 NetXtreme-E"), + T_DATA ("BCM57412 NetXtreme-E Ethernet Partition", "BCM57412 NetXtreme-E Partition"), + T_DATA ("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller", "BCM57414 NetXtreme-E"), + T_DATA ("BCM57414 NetXtreme-E Ethernet Partition", "BCM57414 NetXtreme-E Partition"), + T_DATA ("BCM57414 NetXtreme-E RDMA Partition", "BCM57414 NetXtreme-E Partition"), + T_DATA ("BCM57416 NetXtreme-E 10GBase-T RDMA Ethernet Controller", "BCM57416 NetXtreme-E"), + T_DATA ("BCM57416 NetXtreme-E 10Gb RDMA Ethernet Controller", "BCM57416 NetXtreme-E"), + T_DATA ("BCM57416 NetXtreme-E Ethernet Partition", "BCM57416 NetXtreme-E Partition"), + T_DATA ("BCM57416 NetXtreme-E RDMA Partition", "BCM57416 NetXtreme-E Partition"), + T_DATA ("BCM57417 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller", "BCM57417 NetXtreme-E"), + T_DATA ("BCM57417 NetXtreme-E 10GBASE-T RDMA Ethernet Controller", "BCM57417 NetXtreme-E"), + T_DATA ("BCM57417 NetXtreme-E Ethernet Partition", "BCM57417 NetXtreme-E Partition"), + T_DATA ("BCM57840 NetXtreme II 10/20-Gigabit Ethernet", "BCM57840 NetXtreme II"), + T_DATA ("BCM57840 NetXtreme II 10 Gigabit Ethernet", "BCM57840 NetXtreme II"), + T_DATA ("BCM57840 NetXtreme II Ethernet Multi Function", "BCM57840 NetXtreme II"), + T_DATA ("Belkin F5D5005 Gigabit Desktop Network PCI Card", "Belkin F5D5005"), + T_DATA ("ben-wpan, AT86RF230-based", "ben-wpan AT86RF230-based"), + T_DATA ("BladeCenter-H 10-Gigabit Ethernet High Speed Daughter Card", "BladeCenter-H High Speed Daughter"), + T_DATA ("BladeEngine2 10Gb Gen2 PCIe Network Adapter", "BladeEngine2 Gen2"), + T_DATA ("BladeEngine3 10Gb Gen2 PCIe Network Adapter", "BladeEngine3 Gen2"), + T_DATA ("BLOB boot loader firmware", "BLOB boot loader firmware"), + T_DATA ("Broadcom NetXtreme BCM5701 Gigabit Ethernet", "Broadcom NetXtreme BCM5701"), + T_DATA ("BWIFI-USB54AR 802.11bg", "BWIFI-USB54AR"), + T_DATA ("Cardbus Ethernet 10/100", NULL), + T_DATA ("Cassini 10/100/1000", "Cassini"), + T_DATA ("CE Media Processor Gigabit Ethernet Controller", NULL), + T_DATA ("Centrino Advanced-N 6200", "Centrino Advanced-N 6200"), + T_DATA ("Centrino Advanced-N 6205 [Taylor Peak]", "Centrino Advanced-N 6205"), + T_DATA ("Centrino Advanced-N 6230 [Rainbow Peak]", "Centrino Advanced-N 6230"), + T_DATA ("Centrino Advanced-N 6235", "Centrino Advanced-N 6235"), + T_DATA ("Centrino Advanced-N + WiMAX 6250 [Kilmer Peak]", "Centrino Advanced-N 6250"), + T_DATA ("Centrino Ultimate-N 6300", "Centrino Ultimate-N 6300"), + T_DATA ("Centrino Wireless-N 1000 [Condor Peak]", "Centrino 1000"), + T_DATA ("Centrino Wireless-N 100", "Centrino 100"), + T_DATA ("Centrino Wireless-N 1030 [Rainbow Peak]", "Centrino 1030"), + T_DATA ("Centrino Wireless-N 105", "Centrino 105"), + T_DATA ("Centrino Wireless-N 130", "Centrino 130"), + T_DATA ("Centrino Wireless-N 135", "Centrino 135"), + T_DATA ("Centrino Wireless-N 2200", "Centrino 2200"), + T_DATA ("Centrino Wireless-N 2230", "Centrino 2230"), + T_DATA ("Centrino Wireless-N + WiMAX 6150", "Centrino 6150"), + T_DATA ("CG-WLUSB10 Corega Wireless USB Adapter", "CG-WLUSB10 Corega"), + T_DATA ("CG-WLUSB2GNL", "CG-WLUSB2GNL"), + T_DATA ("CG-WLUSB2GNR Corega Wireless USB Adapter", "CG-WLUSB2GNR Corega"), + T_DATA ("CG-WLUSB2GO", "CG-WLUSB2GO"), + T_DATA ("CG-WLUSB2GPX [Ralink RT2571W]", "CG-WLUSB2GPX"), + T_DATA ("CG-WLUSB2GT 802.11g Wireless Adapter [Intersil ISL3880]", "CG-WLUSB2GT"), + T_DATA ("CG-WLUSB2GTST 802.11g Wireless Adapter [Intersil ISL3887]", "CG-WLUSB2GTST"), + T_DATA ("CG-WLUSB300AGN", "CG-WLUSB300AGN"), + T_DATA ("CG-WLUSB300GNM", "CG-WLUSB300GNM"), + T_DATA ("CG-WLUSB300GNS", "CG-WLUSB300GNS"), + T_DATA ("CK804 Ethernet Controller", "CK804"), + T_DATA ("CK8S Ethernet Controller", "CK8S"), + T_DATA ("cLOM8214 1/10GbE Controller", "cLOM8214"), + T_DATA ("CMOTECH CDMA Technologies modem", "CMOTECH"), + T_DATA ("Cohiba 802.11g Wireless Mini adapter [Intersil ISL3887]", "Cohiba"), + T_DATA ("Conceptronic C300RU v1 802.11bgn Wireless Adapter [Ralink RT2870]", "Conceptronic C300RU"), + T_DATA ("Conceptronic C300RU v2 802.11bgn Wireless Adapter [Ralink RT2770]", "Conceptronic C300RU"), + T_DATA ("Conceptronic C54RU v2 802.11bg Wireless Adapter [Ralink RT2571]", "Conceptronic C54RU"), + T_DATA ("Conceptronic C54RU v3 802.11bg Wireless Adapter [Ralink RT2571W]", "Conceptronic C54RU"), + T_DATA ("Connect2Air E-5400 802.11g Wireless Adapter", "Connect2Air E-5400"), + T_DATA ("Connect2Air E-5400 D1700 802.11g Wireless Adapter [Intersil ISL3887]", "Connect2Air E-5400 D1700"), + T_DATA ("CPWUE001 USB/Ethernet Adapter", "CPWUE001"), + T_DATA ("CWD-854 rev F", "CWD-854"), + T_DATA ("CWD-854 [RT2573]", "CWD-854"), + T_DATA ("CWD-854 Wireless 802.11g 54Mbps Network Adapter [RTL8187]", "CWD-854"), + T_DATA ("DECchip 21040 [Tulip]", "DECchip 21040"), + T_DATA ("DECchip 21041 [Tulip Pass 3]", "DECchip 21041"), + T_DATA ("DECchip 21140 [FasterNet]", "DECchip 21140"), + T_DATA ("DECchip 21142/43", "DECchip 21142/43"), + T_DATA ("DFE-680TXD CardBus PC Card", "DFE-680TXD"), + T_DATA ("DFE-690TXD CardBus PC Card", "DFE-690TXD"), + T_DATA ("DGE-528T Gigabit Ethernet Adapter", "DGE-528T"), + T_DATA ("DGE-528T Gigabit Ethernet Adapter (DGE-560T PCI Express (x1) Gigabit Ethernet Adapter)", "DGE-528T"), + T_DATA ("DGE-530T Gigabit Ethernet Adapter (rev 11)", "DGE-530T"), + T_DATA ("DGE-530T Gigabit Ethernet Adapter (rev.C1) [Realtek RTL8169]", "DGE-530T"), + T_DATA ("DGE-550SX PCI-X Gigabit Ethernet Adapter", "DGE-550SX"), + T_DATA ("DGE-550T Gigabit Ethernet Adapter V.B1", "DGE-550T V.B1"), + T_DATA ("DGE-560SX PCI Express Gigabit Ethernet Adapter", "DGE-560SX"), + T_DATA ("DGE-560T PCI Express Gigabit Ethernet Adapter", "DGE-560T"), + T_DATA ("DH8900CC Series Gigabit Backplane Network Connection", "DH8900CC Backplane"), + T_DATA ("DH8900CC Series Gigabit Fiber Network Connection", "DH8900CC"), + T_DATA ("DH8900CC Series Gigabit Network Connection", "DH8900CC"), + T_DATA ("DH8900CC Series Gigabit SFP Network Connection", "DH8900CC SFP"), + T_DATA ("Direct Connect", "Direct Connect"), + T_DATA ("DL10050 Sundance Ethernet (DFE-550TX/FX)", "DL10050 Sundance"), + T_DATA ("DL10050 Sundance Ethernet (DFE-580TX)", "DL10050 Sundance"), + T_DATA ("DL10050 Sundance Ethernet", "DL10050 Sundance"), + T_DATA ("DL2000-based Gigabit Ethernet", "DL2000-based"), + T_DATA ("DM9000E Fast Ethernet Adapter", "DM9000E"), + T_DATA ("DM9601 Fast Ethernet Adapter", "DM9601"), + T_DATA ("DP83065 [Saturn] 10/100/1000 Ethernet Controller", "DP83065"), + T_DATA ("DP83815 (MacPhyter) Ethernet Controller (Aculab E1/T1 PMXc cPCI carrier card)", "DP83815"), + T_DATA ("DP83815 (MacPhyter) Ethernet Controller", "DP83815"), + T_DATA ("DP83820 10/100/1000 Ethernet Controller", "DP83820"), + T_DATA ("DrayTek Vigor N61 802.11bgn Wireless Adapter [Ralink RT2870]", "DrayTek Vigor N61"), + T_DATA ("DRP-32TXD Cardbus PC Card", "DRP-32TXD"), + T_DATA ("DSB-650 10Mbps Ethernet [klsi]", "DSB-650"), + T_DATA ("DSB-650C Ethernet [klsi]", "DSB-650C"), + T_DATA ("DSB-650 Ethernet [pegasus]", "DSB-650"), + T_DATA ("DSB-650TX Ethernet [pegasus]", "DSB-650TX"), + T_DATA ("DSB-650TX-PNA Ethernet [pegasus]", "DSB-650TX-PNA"), + T_DATA ("Dual Band Wireless-AC 3165 Plus Bluetooth", "Wireless-AC 3165"), + T_DATA ("DUB-E100 Fast Ethernet Adapter(rev.A) [ASIX AX88172]", "DUB-E100"), + T_DATA ("DUB-E100 Fast Ethernet Adapter(rev.B1) [ASIX AX88772]", "DUB-E100"), + T_DATA ("DUB-E100 Fast Ethernet Adapter(rev.C1) [ASIX AX88772]", "DUB-E100"), + T_DATA ("DU-E100 Ethernet [pegasus]", "DU-E100"), + T_DATA ("DU-E10 Ethernet [klsi]", "DU-E10"), + T_DATA ("DU-E10 Ethernet [pegasus]", "DU-E10"), + T_DATA ("DWA-110 Wireless G Adapter(rev.A1) [Ralink RT2571W]", "DWA-110"), + T_DATA ("DWA-110 Wireless G Adapter(rev.B) [Ralink RT2870]", "DWA-110"), + T_DATA ("DWA-111 802.11bg Wireless Adapter [Ralink RT2571W]", "DWA-111"), + T_DATA ("DWA-121 802.11n Wireless N 150 Pico Adapter [Realtek RTL8188CUS]", "DWA-121 150 Pico"), + T_DATA ("DWA-123 Wireless N 150 Adapter(rev.A1) [Ralink RT3370]", "DWA-123 150"), + T_DATA ("DWA-125 Wireless N 150 Adapter(rev.A1) [Ralink RT3070]", "DWA-125 150"), + T_DATA ("DWA-125 Wireless N 150 Adapter(rev.A2) [Ralink RT3070]", "DWA-125 150"), + T_DATA ("DWA-125 Wireless N 150 Adapter(rev.A3) [Ralink RT5370]", "DWA-125 150"), + T_DATA ("DWA-126 802.11n Wireless Adapter [Atheros AR9271]", "DWA-126"), + T_DATA ("DWA-127 Wireless N 150 High-Gain Adapter(rev.A1) [Ralink RT3070]", "DWA-127 150 High-Gain"), + T_DATA ("DWA-130 802.11n Wireless N Adapter(rev.B) [Ralink RT2870]", "DWA-130"), + T_DATA ("DWA-130 802.11n Wireless N Adapter(rev.D) [Atheros AR9170+AR9102]", "DWA-130"), + T_DATA ("DWA-133 802.11n Wireless N Adapter [Realtek RTL8192CU]", "DWA-133"), + T_DATA ("DWA-135 802.11n Wireless N Adapter(rev.A1) [Realtek RTL8192CU]", "DWA-135"), + T_DATA ("DWA-140 RangeBooster N Adapter(rev.B1) [Ralink RT2870]", "DWA-140 RangeBooster N"), + T_DATA ("DWA-140 RangeBooster N Adapter(rev.B2) [Ralink RT3072]", "DWA-140 RangeBooster N"), + T_DATA ("DWA-140 RangeBooster N Adapter(rev.B3) [Ralink RT2870]", "DWA-140 RangeBooster N"), + T_DATA ("DWA-140 RangeBooster N Adapter(rev.B3) [Ralink RT5372]", "DWA-140 RangeBooster N"), + T_DATA ("DWA-160 802.11abgn Xtreme N Dual Band Adapter(rev.A1) [Atheros AR9170+AR9104]", "DWA-160 Xtreme N"), + T_DATA ("DWA-160 802.11abgn Xtreme N Dual Band Adapter(rev.A2) [Atheros AR9170+AR9104]", "DWA-160 Xtreme N"), + T_DATA ("DWA-160 802.11abgn Xtreme N Dual Band Adapter(rev.B2) [Ralink RT5572]", "DWA-160 Xtreme N"), + T_DATA ("DWA-160 Xtreme N Dual Band USB Adapter(rev.B) [Ralink RT2870]", "DWA-160 Xtreme N"), + T_DATA ("DWL-510 / DWL-610 802.11b [Realtek RTL8180L]", "DWL-510 / DWL-610"), + T_DATA ("DWL-AG122 [Atheros AR5523]", "DWL-AG122"), + T_DATA ("DWL-AG122 (no firmware) [Atheros AR5523]", "DWL-AG122"), + T_DATA ("DWL-AG132 [Atheros AR5523]", "DWL-AG132"), + T_DATA ("DWL-AG132 (no firmware) [Atheros AR5523]", "DWL-AG132"), + T_DATA ("DWL-G120 Spinnaker 802.11g [Intersil ISL3886]", "DWL-G120 Spinnaker"), + T_DATA ("DWL-G132 [Atheros AR5523]", "DWL-G132"), + T_DATA ("DWL-G132 (no firmware) [Atheros AR5523]", "DWL-G132"), + T_DATA ("DY-WL10 802.11abgn Adapter [Broadcom BCM4323]", "DY-WL10"), + T_DATA ("E180v", "E180v"), + T_DATA ("E45 Ethernet [klsi]", "E45"), + T_DATA ("E815", "E815"), + T_DATA ("EA101 10 Mbps 10BASE-T Ethernet [Kawasaki LSI KL5KLUSB101B]", "EA101"), + T_DATA ("EasiDock Ethernet", "EasiDock"), + T_DATA ("EH103 Wireless G Adapter", "EH103"), + T_DATA ("Eminent EM4045 [Broadcom 4320 USB]", "Eminent EM4045"), + T_DATA ("EN-1216 Ethernet Adapter", "EN-1216"), + T_DATA ("EN-1217 Ethernet Adapter", "EN-1217"), + T_DATA ("Enet2 Ethernet [klsi]", "Enet2"), + T_DATA ("Enet Ethernet [klsi]", "Enet"), + T_DATA ("EnGenius 802.11n Wireless USB Adapter", "EnGenius"), + T_DATA ("ENUWI-N3 [802.11n Wireless N150 Adapter]", "ENUWI-N3"), + T_DATA ("EP-1427X-2 Ethernet Adapter [Acer]", "EP-1427X-2"), + T_DATA ("EP-9001-g 802.11g 54M WLAN Adapter", "EP-9001-g"), + T_DATA ("ET-131x PCI-E Ethernet Controller", "ET-131x"), + T_DATA ("ET32P2", "ET32P2"), + T_DATA ("ETG-US2", "ETG-US2"), + T_DATA ("Ethernet 100/10 MBit", NULL), + T_DATA ("Ethernet 10G 2P X520 Adapter", "2P X520"), + T_DATA ("Ethernet Adapter [A1277]", "A1277"), + T_DATA ("Ethernet Adapter", NULL), + T_DATA ("Ethernet adapter [U2L 100P-Y1]", "U2L 100P-Y1"), + T_DATA ("Ethernet Adaptive Virtual Function", "Adaptive Virtual Function"), + T_DATA ("Ethernet Connection (2) I218-LM", NULL), + T_DATA ("Ethernet Connection (2) I218-V", NULL), + T_DATA ("Ethernet Connection (2) I219-LM", NULL), + T_DATA ("Ethernet Connection (2) I219-V", NULL), + T_DATA ("Ethernet Connection (3) I218-LM", NULL), + T_DATA ("Ethernet Connection (3) I218-V", NULL), + T_DATA ("Ethernet Connection (3) I219-LM", NULL), + T_DATA ("Ethernet Connection (4) I219-LM", NULL), + T_DATA ("Ethernet Connection (4) I219-V", NULL), + T_DATA ("Ethernet Connection (5) I219-LM", NULL), + T_DATA ("Ethernet Connection (5) I219-V", NULL), + T_DATA ("Ethernet Connection (6) I219-LM", NULL), + T_DATA ("Ethernet Connection (6) I219-V", NULL), + T_DATA ("Ethernet Connection (7) I219-LM", NULL), + T_DATA ("Ethernet Connection (7) I219-V", NULL), + T_DATA ("Ethernet Connection (8) I219-LM", NULL), + T_DATA ("Ethernet Connection (8) I219-V", NULL), + T_DATA ("Ethernet Connection (9) I219-LM", NULL), + T_DATA ("Ethernet Connection (9) I219-V", NULL), + T_DATA ("Ethernet Connection I217-LM", "I217-LM"), + T_DATA ("Ethernet Connection I217-V", "I217-V"), + T_DATA ("Ethernet Connection I218-LM", "I218-LM"), + T_DATA ("Ethernet Connection I218-V", "I218-V"), + T_DATA ("Ethernet Connection I219-LM", "I219-LM"), + T_DATA ("Ethernet Connection I219-V", "I219-V"), + T_DATA ("Ethernet Connection I354 1.0 GbE Backplane", "I354 Backplane"), + T_DATA ("Ethernet Connection I354 2.5 GbE Backplane", "I354 Backplane"), + T_DATA ("Ethernet Connection I354", "I354"), + T_DATA ("Ethernet Connection X552 1000BASE-T", "X552"), + T_DATA ("Ethernet Connection X552 10 GbE Backplane", "X552 Backplane"), + T_DATA ("Ethernet Connection X552 10 GbE SFP+", "X552 SFP+"), + T_DATA ("Ethernet Connection X552 Backplane", "X552 Backplane"), + T_DATA ("Ethernet Connection X552 Virtual Function", "X552 Virtual Function"), + T_DATA ("Ethernet Connection X552/X557-AT 10GBASE-T", "X552/X557-AT"), + T_DATA ("Ethernet Connection X553 10 GbE SFP+", "X553 SFP+"), + T_DATA ("Ethernet Connection X553 1GbE", "X553"), + T_DATA ("Ethernet Connection X553 Backplane", "X553 Backplane"), + T_DATA ("Ethernet Connection X553/X557-AT 10GBASE-T", "X553/X557-AT"), + T_DATA ("Ethernet Connection X722 for 10GBASE-T", "X722"), + T_DATA ("Ethernet Connection X722 for 10GbE backplane", "X722"), + T_DATA ("Ethernet Connection X722 for 10GbE QSFP+", "X722"), + T_DATA ("Ethernet Connection X722 for 10GbE SFP+", "X722"), + T_DATA ("Ethernet Connection X722 for 1GbE", "X722"), + T_DATA ("Ethernet Controller 10-Gigabit X540-AT2", "X540-AT2"), + T_DATA ("Ethernet Controller 10G X550T", "X550T"), + T_DATA ("Ethernet Controller X540", "X540"), + T_DATA ("Ethernet Controller X710 for 10GBASE-T", "X710"), + T_DATA ("Ethernet Controller X710 for 10GbE backplane", "X710"), + T_DATA ("Ethernet Controller X710 for 10GbE QSFP+", "X710"), + T_DATA ("Ethernet Controller X710 for 10GbE SFP+", "X710"), + T_DATA ("Ethernet Controller X710/X557-AT 10GBASE-T", "X710/X557-AT"), + T_DATA ("Ethernet Controller XL710 for 20GbE backplane", "XL710"), + T_DATA ("Ethernet Controller XL710 for 40GbE backplane", "XL710"), + T_DATA ("Ethernet Controller XL710 for 40GbE QSFP+", "XL710"), + T_DATA ("Ethernet Controller XXV710 for 25GbE backplane", "XXV710"), + T_DATA ("Ethernet Controller XXV710 for 25GbE SFP28", "XXV710"), + T_DATA ("Ethernet Converged Network Adapter X520-Q1", "X520-Q1"), + T_DATA ("Ethernet Express Module X520-P2", "X520-P2"), + T_DATA ("Ethernet HN210E", "HN210E"), + T_DATA ("Ethernet", NULL), + T_DATA ("Ethernet Server Adapter X520-4", "X520-4"), + T_DATA ("Ethernet Switch FM10000 Host Interface", "FM10000"), + T_DATA ("Ethernet Switch FM10000 Host Virtual Interface", "FM10000"), + T_DATA ("Ethernet X520 10GbE Dual Port KX4 Mezz", "X520 KX4 Mezz"), + T_DATA ("Ether USB-T Ethernet [klsi]", "Ether USB-T"), + T_DATA ("ET/TX Ethernet [pegasus]", "ET/TX"), + T_DATA ("ET/TX-S Ethernet [pegasus2]", "ET/TX-S"), + T_DATA ("EUB-3701 EXT 802.11g Wireless Adapter [Ralink RT2571W]", "EUB-3701 EXT"), + T_DATA ("EUB600v1 802.11abgn Wireless Adapter [Ralink RT3572]", "EUB600v1"), + T_DATA ("EUB9706 802.11n Wireless Adapter [Ralink RT3072]", "EUB9706"), + T_DATA ("EUB9801 802.11abgn Wireless Adapter [Ralink RT3572]", "EUB9801"), + T_DATA ("EW-7711UTn nLite Wireless Adapter [Ralink RT2870]", "EW-7711UTn nLite"), + T_DATA ("EW-7717UN 802.11n Wireless Adapter [Ralink RT2870]", "EW-7717UN"), + T_DATA ("EW-7718UN 802.11n Wireless Adapter [Ralink RT2870]", "EW-7718UN"), + T_DATA ("EW-7722UTn 802.11n Wireless Adapter [Ralink RT307x]", "EW-7722UTn"), + T_DATA ("EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]", "EW-7811Un"), + T_DATA ("Expedite E362", "Expedite E362"), + T_DATA ("Express Ethernet", "Express"), + T_DATA ("EZ Connect USB Ethernet", "EZ Connect"), + T_DATA ("F5D5050 100Mbps Ethernet", "F5D5050"), + T_DATA ("F5D5055 Gigabit Network Adapter [AX88xxx]", "F5D5055"), + T_DATA ("F5D6001 Wireless PCI Card [Realtek RTL8180]", "F5D6001"), + T_DATA ("F5D6020 v3000 Wireless PCMCIA Card [Realtek RTL8180]", "F5D6020 v3000"), + T_DATA ("F5D7000 v7000 Wireless G Desktop Card [Realtek RTL8185]", "F5D7000 v7000"), + T_DATA ("F5D7010 v7000 Wireless G Notebook Card [Realtek RTL8185]", "F5D7010 v7000"), + T_DATA ("F5D7050 Wireless G Adapter v1000/v2000 [Intersil ISL3887]", "F5D7050 v1000/v2000"), + T_DATA ("F5D7050 Wireless G Adapter v3000 [Ralink RT2571W]", "F5D7050 v3000"), + T_DATA ("F5D7050 Wireless G Adapter v4000 [Zydas ZD1211B]", "F5D7050 v4000"), + T_DATA ("F5D7050 Wireless G Adapter v5000 [Realtek RTL8187B]", "F5D7050 v5000"), + T_DATA ("F5D7051 802.11g Adapter v1000 [Broadcom 4320 USB]", "F5D7051 v1000"), + T_DATA ("F5D8053 N Wireless Adapter v3000 [Ralink RT2870]", "F5D8053 v3000"), + T_DATA ("F5D8053 N Wireless USB Adapter v1000/v4000 [Ralink RT2870]", "F5D8053 v1000/v4000"), + T_DATA ("F5D8053 N Wireless USB Adapter v3000 [Ralink RT2870]", "F5D8053 v3000"), + T_DATA ("F5D8055 N+ Wireless Adapter v1000 [Ralink RT2870]", "F5D8055 v1000"), + T_DATA ("F5D8055 N+ Wireless Adapter v2000 [Ralink RT3072]", "F5D8055 v2000"), + T_DATA ("F5D9050 Wireless G+ MIMO Network Adapter v3000 [Ralink RT2573]", "F5D9050 MIMO v3000"), + T_DATA ("F5D9050 Wireless G+ MIMO Network Adapter v4000 [Ralink RT2573]", "F5D9050 MIMO v4000"), + T_DATA ("F5U258 Host to Host cable", "F5U258 Host to Host cable"), + T_DATA ("F6D4050 N150 Enhanced Wireless Network Adapter v1000 [Ralink RT3070]", "F6D4050 N150 v1000"), + T_DATA ("F6D4050 N150 Enhanced Wireless Network Adapter v2000 [Ralink RT3070]", "F6D4050 N150 v2000"), + T_DATA ("F7D1101 v2 Basic Wireless Adapter [Ralink RT3370]", "F7D1101"), + T_DATA ("F7D1102 N150/Surf Micro Wireless Adapter v1000 [Realtek RTL8188CUS]", "F7D1102 N150/Surf v1000"), + T_DATA ("F7D2102 802.11n N300 Micro Wireless Adapter v3000 [Realtek RTL8192CU]", "F7D2102 N300 v3000"), + T_DATA ("F9L1004 802.11n Surf N300 XR Wireless Adapter [Realtek RTL8192CU]", "F9L1004 Surf N300 XR"), + T_DATA ("F9L1103 N750 DB 802.11abgn 2x3:3 [Ralink RT3573]", "F9L1103 N750"), + T_DATA ("FA101 Fast Ethernet USB 1.1", "FA101"), + T_DATA ("FA120 Fast Ethernet USB 2.0 [Asix AX88172 / AX8817x]", "FA120"), + T_DATA ("Farallon PN9000SX Gigabit Ethernet", "Farallon PN9000SX"), + T_DATA ("Farallon PN9100-T Gigabit Ethernet", "Farallon PN9100-T"), + T_DATA ("Fast Ethernet", NULL), + T_DATA ("FastLinQ QL41000 Series 10/25/40/50GbE Controller", "FastLinQ QL41000"), + T_DATA ("FastLinQ QL41000 Series Gigabit Ethernet Controller (SR-IOV VF)", "FastLinQ QL41000"), + T_DATA ("FastLinQ QL45000 Series 100GbE Controller", "FastLinQ QL45000"), + T_DATA ("FastLinQ QL45000 Series 25GbE Controller", "FastLinQ QL45000"), + T_DATA ("FastLinQ QL45000 Series 40GbE Controller", "FastLinQ QL45000"), + T_DATA ("FastLinQ QL45000 Series Gigabit Ethernet Controller (SR-IOV VF)", "FastLinQ QL45000"), + T_DATA ("FEther USB2-TX", "FEther USB2-TX"), + T_DATA ("FEther USB-TXC", "FEther USB-TXC"), + T_DATA ("FEther USB-TX Ethernet [pegasus]", "FEther USB-TX"), + T_DATA ("FEther USB-TXS", "FEther USB-TXS"), + T_DATA ("FNW-3602-TX CardBus Fast Ethernet", "FNW-3602-TX"), + T_DATA ("FNW-3603-TX CardBus Fast Ethernet", "FNW-3603-TX"), + T_DATA ("FPC-0106TX misprogrammed [RTL81xx]", "FPC-0106TX"), + T_DATA ("Fritz!WLAN N 2.4 [Atheros AR9001U]", "Fritz!WLAN N 2.4"), + T_DATA ("Fritz!WLAN N [Atheros AR9001U]", "Fritz!WLAN N"), + T_DATA ("Fritz!WLAN N v2 [Atheros AR9271]", "Fritz!WLAN N"), + T_DATA ("FRITZ WLAN N v2 [RT5572/rt2870.bin]", "FRITZ N"), + T_DATA ("G-200 v2 802.11bg", "G-200"), + T_DATA ("G-210H 802.11g Wireless Adapter", "G-210H"), + T_DATA ("G-220 v2 802.11bg", "G-220"), + T_DATA ("G240 802.11bg", "G240"), + T_DATA ("GA620 Gigabit Ethernet", "GA620"), + T_DATA ("GA630 Gigabit Ethernet", "GA630"), + T_DATA ("GEM 10/100/1000 Ethernet [ge]", "GEM"), + T_DATA ("Gigabit Ethernet Adapter", NULL), + T_DATA ("Gigabit Network Adapter", NULL), + T_DATA ("GigaCard Network Adapter", "GigaCard"), + T_DATA ("Gigaset USB Adapter 300", "Gigaset 300"), + T_DATA ("GL620USB-A GeneLink USB-USB Bridge", "GL620USB-A GeneLink USB-USB Bridge"), + T_DATA ("GlobeTrotter Express 7.2 v2", "GlobeTrotter Express 7.2"), + T_DATA ("Globetrotter GI0505 [iCON 505]", "Globetrotter GI0505"), + T_DATA ("Globetrotter HSDPA Modem", "Globetrotter"), + T_DATA ("Globetrotter HSUPA Modem (aka icon 451)", "Globetrotter"), + T_DATA ("Globetrotter HSUPA Modem (aka iCON HSUPA E)", "Globetrotter"), + T_DATA ("Globetrotter HSUPA Modem (icon 411 aka \"Vodafone K3760\")", "Globetrotter"), + T_DATA ("Globetrotter MO40x 3G Modem (GTM 382)", "Globetrotter MO40x"), + T_DATA ("GN-54G", "GN-54G"), + T_DATA ("GN-BR402W", "GN-BR402W"), + T_DATA ("GNIC-II PCI Gigabit Ethernet [Hamachi]", "GNIC-II"), + T_DATA ("GN-WB01GS", "GN-WB01GS"), + T_DATA ("GN-WB30N 802.11n WLAN Card", "GN-WB30N"), + T_DATA ("GN-WB31N 802.11n USB WLAN Card", "GN-WB31N"), + T_DATA ("GN-WB32L 802.11n USB WLAN Card", "GN-WB32L"), + T_DATA ("GN-WBKG", "GN-WBKG"), + T_DATA ("GN-WI05GS", "GN-WI05GS"), + T_DATA ("Gobi 2000", "Gobi 2000"), + T_DATA ("Gobi 2000 Wireless Modem", "Gobi 2000"), + T_DATA ("Gobi 3000 HSPA+ Modem", "Gobi 3000 HSPA+"), + T_DATA ("Gobi 9x15 Multimode 3G/4G LTE Modem (IP passthrough mode)", "Gobi 9x15"), + T_DATA ("Gobi 9x15 Multimode 3G/4G LTE Modem (NAT mode)", "Gobi 9x15"), + T_DATA ("Gobi Wireless Modem", "Gobi"), + T_DATA ("Goldpfeil P-LAN", "Goldpfeil P-LAN"), + T_DATA ("GT-B3730 Composite LTE device (Commercial)", "GT-B3730"), + T_DATA ("GU-1000T", "GU-1000T"), + T_DATA ("GWUS300 802.11n", "GWUS300"), + T_DATA ("GW-US300MiniS", "GW-US300MiniS"), + T_DATA ("GW-US300MiniW 802.11bgn Wireless Adapter", "GW-US300MiniW"), + T_DATA ("GW-US54GXS 802.11bg", "GW-US54GXS"), + T_DATA ("GW-US54GZ", "GW-US54GZ"), + T_DATA ("GW-US54HP", "GW-US54HP"), + T_DATA ("GW-US54Mini2", "GW-US54Mini2"), + T_DATA ("GW-US54Mini 802.11bg", "GW-US54Mini"), + T_DATA ("GW-US54ZGL 802.11bg", "GW-US54ZGL"), + T_DATA ("GWUSB2E", "GWUSB2E"), + T_DATA ("GW-USEco300 802.11bgn Wireless Adapter [Realtek RTL8192CU]", "GW-USEco300"), + T_DATA ("GW-USMicro300", "GW-USMicro300"), + T_DATA ("GW-USMini2N 802.11n Wireless Adapter [Ralink RT2870]", "GW-USMini2N"), + T_DATA ("GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]", "GW-USNano2"), + T_DATA ("GW-USValue-EZ 802.11n Wireless Adapter [Realtek RTL8188CUS]", "GW-USValue-EZ"), + T_DATA ("Happy Meal 10/100 Ethernet [hme]", "Happy Meal"), + T_DATA ("Harmony 900/1100 Remote", "Harmony 900/1100 Remote"), + T_DATA ("HAWNU1 Hi-Gain Wireless-150N Network Adapter with Range Amplifier [Ralink RT3070]", "HAWNU1"), + T_DATA ("HCF 56k Modem", "HCF"), + T_DATA ("Hercules HWNUp-150 802.11n Wireless N Pico [Realtek RTL8188CUS]", "Hercules HWNUp-150 Pico"), + T_DATA ("HNE-300 (RealTek RTL8139c) [iPaq Networking]", "HNE-300"), + T_DATA ("HomeConnect 3C460", "HomeConnect 3C460"), + T_DATA ("@Home Networks Ethernet [klsi]", "@Home Networks"), + T_DATA ("HU200TS Wireless Adapter", "HU200TS"), + T_DATA ("HWDN1 Hi-Gain Wireless-300N Dish Adapter [Ralink RT2870]", "HWDN1"), + T_DATA ("HWDN2 Hi-Gain Wireless-150N Dish Adapter [Ralink RT2770]", "HWDN2"), + T_DATA ("HWGUSB2-54-LB", "HWGUSB2-54-LB"), + T_DATA ("HWGUSB2-54V2-AP", "HWGUSB2-54V2-AP"), + T_DATA ("HWGUSB2-54 WLAN", "HWGUSB2-54"), + T_DATA ("HWU54DM", "HWU54DM"), + T_DATA ("HWUN1 Hi-Gain Wireless-300N Adapter w/ Upgradable Antenna [Ralink RT2870]", "HWUN1"), + T_DATA ("HWUN2 Hi-Gain Wireless-150N Adapter w/ Upgradable Antenna [Ralink RT2770]", "HWUN2"), + T_DATA ("HWUN3 Hi-Gain Wireless-N Adapter [Ralink RT3070]", "HWUN3"), + T_DATA ("I210 Gigabit Backplane Connection", "I210 Backplane Connection"), + T_DATA ("I210 Gigabit Fiber Network Connection", "I210"), + T_DATA ("I210 Gigabit Network Connection", "I210"), + T_DATA ("I211 Gigabit Network Connection", "I211"), + T_DATA ("I350 Ethernet Controller Virtual Function", "I350 Virtual Function"), + T_DATA ("I350 Gigabit Backplane Connection", "I350 Backplane Connection"), + T_DATA ("I350 Gigabit Connection", "I350 Connection"), + T_DATA ("I350 Gigabit Fiber Network Connection", "I350"), + T_DATA ("I350 Gigabit Network Connection", "I350"), + T_DATA ("IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY", "IC Plus IP100A"), + T_DATA ("IEEE 802.11g Wireless Network Adapter", NULL), + T_DATA ("IFU-WLM2 USB Wireless LAN Module (Wireless Mode)", "IFU-WLM2"), + T_DATA ("Integrated NetFlex-3/P", "NetFlex-3/P"), + T_DATA ("Intrepid2 GMAC (Sun GEM)", "Intrepid2 GMAC"), + T_DATA ("IOGear GWU513 v2 802.11bg Wireless Adapter [Intersil ISL3887]", "IOGear GWU513"), + T_DATA ("IP1000 Family Gigabit Ethernet", "IP1000"), + T_DATA ("iPad 2 (3G; 64GB)", "iPad 2"), + T_DATA ("iPad 3 (3G, 16 GB)", "iPad 3"), + T_DATA ("iPad 4/Mini1", "iPad 4/Mini1"), + T_DATA ("iPad", "iPad"), + T_DATA ("iPAQ Networking 10/100 Ethernet [pegasus2]", "iPAQ Networking"), + T_DATA ("iPhone 3G", "iPhone"), + T_DATA ("iPhone 3GS", "iPhone 3GS"), + T_DATA ("iPhone 4(CDMA)", "iPhone 4"), + T_DATA ("iPhone 4", "iPhone 4"), + T_DATA ("iPhone 4S", "iPhone 4S"), + T_DATA ("iPhone5/5C/5S/6", "iPhone5/5C/5S/6"), + T_DATA ("iPhone", "iPhone"), + T_DATA ("iRex Technologies Gobi 2000 Wireless Modem", "iRex Gobi 2000"), + T_DATA ("ISL3877 [Prism Indigo]", "ISL3877"), + T_DATA ("ISL3886IK", "ISL3886IK"), + T_DATA ("ISL3886 [Prism Javelin/Prism Xbow]", "ISL3886"), + T_DATA ("ISL3890 [Prism GT/Prism Duette]/ISL3886 [Prism Javelin/Prism Xbow]", "ISL3890"), + T_DATA ("ISP4022-based Ethernet NIC", "ISP4022-based"), + T_DATA ("ISP4032-based Ethernet IPv6 NIC", "ISP4032-based IPv6"), + T_DATA ("ISP8324 1/10GbE Converged Network Controller", "ISP8324"), + T_DATA ("ISP8324 1/10GbE Converged Network Controller (NIC VF)", "ISP8324"), + T_DATA ("ISY Wireless Micro Adapter IWL 2000 [RTL8188CUS]", "ISY IWL 2000"), + T_DATA ("JMC250 PCI Express Gigabit Ethernet Controller", "JMC250"), + T_DATA ("JMC260 PCI Express Fast Ethernet Controller", "JMC260"), + T_DATA ("K2 GMAC (Sun GEM)", "K2 GMAC"), + T_DATA ("K3565-Z HSDPA", "K3565-Z"), + T_DATA ("K3570-Z", "K3570-Z"), + T_DATA ("K3571-Z", "K3571-Z"), + T_DATA ("K4505-Z", "K4505-Z"), + T_DATA ("K5006-Z vodafone LTE/UMTS/GSM Modem/Networkcard", "K5006-Z vodafone"), + T_DATA ("KC2190 USB Host-to-Host cable", "KC2190 Host-to-Host cable"), + T_DATA ("Keebox W150NU 802.11bgn Wireless Adapter [Ralink RT3070]", "Keebox W150NU"), + T_DATA ("Killer E220x Gigabit Ethernet Controller", "Killer E220x"), + T_DATA ("Killer E2400 Gigabit Ethernet Controller", "Killer E2400"), + T_DATA ("KL5KUSB101B Ethernet [klsi]", "KL5KUSB101B"), + T_DATA ("KNU101TX 100baseTX Ethernet", "KNU101TX 100baseTX"), + T_DATA ("KSZ8842-PMQL 2-Port Ethernet Switch", "KSZ8842-PMQL"), + T_DATA ("KwikLink Host-Host Connector", "KwikLink Host-Host Connector"), + T_DATA ("LAN7500 Ethernet 10/100/1000 Adapter", "LAN7500"), + T_DATA ("LAN9420/LAN9420i", "LAN9420/LAN9420i"), + T_DATA ("LAN9512/LAN9514 Ethernet 10/100 Adapter (SAL10)", "LAN9512/LAN9514"), + T_DATA ("Laneed 100Mbps Ethernet LD-USB/TX [pegasus]", "Laneed LD-USB/TX"), + T_DATA ("LAN-GTJ/U2A", "LAN-GTJ/U2A"), + T_DATA ("LAN-W150N/U2 Wireless LAN Adapter", "LAN-W150N/U2"), + T_DATA ("LAN-W150/U2M Wireless LAN Adapter", "LAN-W150/U2M"), + T_DATA ("LAN-W300AN/U2 Wireless LAN Adapter", "LAN-W300AN/U2"), + T_DATA ("LAN-W300N/U2 Wireless LAN Adapter", "LAN-W300N/U2"), + T_DATA ("LAN-WN12/U2 Wireless LAN Adapter", "LAN-WN12/U2"), + T_DATA ("LAN-WN22/U2 Wireless LAN Adapter", "LAN-WN22/U2"), + T_DATA ("LapLink Gold USB-USB Bridge [net1080]", "LapLink Gold USB-USB Bridge"), + T_DATA ("LD-USB20", "LD-USB20"), + T_DATA ("LD-USBL/TX", "LD-USBL/TX"), + T_DATA ("LD-USB/TX", "LD-USB/TX"), + T_DATA ("LE920", "LE920"), + T_DATA ("Leaf Light HS", "Leaf Light HS"), + T_DATA ("Leaf SemiPro HS", "Leaf SemiPro HS"), + T_DATA ("LevelOne WUA-0605 N_Max Wireless USB Adapter", "LevelOne WUA-0605 N Max"), + T_DATA ("LevelOne WUA-0615 N_Max Wireless USB Adapter", "LevelOne WUA-0615 N Max"), + T_DATA ("Libertas", "Libertas"), + T_DATA ("Linksys WUSB54GP v1 OEM 802.11g Adapter [Intersil ISL3886]", "Linksys WUSB54GP"), + T_DATA ("Linksys WUSB54G v1 OEM 802.11g Adapter [Intersil ISL3886]", "Linksys WUSB54G"), + T_DATA ("Linux-USB \"CDC Subset\" Device, or Itsy (experimental)", "Linux-USB or Itsy"), + T_DATA ("Linux-USB Ethernet/RNDIS Gadget", "Linux-USB Gadget"), + T_DATA ("LN-028 Network USB 2.0 Adapter", "LN-028"), + T_DATA ("LN-031 10/100/1000 Ethernet Adapter", "LN-031"), + T_DATA ("LNE100TX [Linksys EtherFast 10/100]", "LNE100TX"), + T_DATA ("LNE100TX", "LNE100TX"), + T_DATA ("lt4112 Gobi 4G Module Network Device", "lt4112 Gobi"), + T_DATA ("LTE4G O2 ZTE MF821D LTE/UMTS/GSM Modem/Networkcard", "LTE4G O2 ZTE MF821D"), + T_DATA ("LTE Storage Driver [CMC2xx]", "Storage Driver"), + T_DATA ("LUA2-TX Ethernet", "LUA2-TX"), + T_DATA ("LUA-KTX Ethernet", "LUA-KTX"), + T_DATA ("LUA-TX Ethernet", "LUA-TX"), + T_DATA ("LUA-TX Ethernet [pegasus]", "LUA-TX"), + T_DATA ("LUA-U2-GT 10/100/1000 Ethernet Adapter", "LUA-U2-GT"), + T_DATA ("LUA-U2-KTX Ethernet", "LUA-U2-KTX"), + T_DATA ("LW153 802.11n Adapter [ralink rt3070]", "LW153"), + T_DATA ("LW313 802.11n Adapter [ralink rt2770 + rt2720]", "LW313"), + T_DATA ("M-202 802.11bg", "M-202"), + T_DATA ("M5261 Ethernet Controller", "M5261"), + T_DATA ("M5632 Host-to-Host Link", "M5632 Host-to-Host Link"), + T_DATA ("Marvell 88W8388 802.11a/b/g WLAN", "Marvell 88W8388"), + T_DATA ("MC8700 Modem", "MC8700"), + T_DATA ("MCP04 Ethernet Controller", "MCP04"), + T_DATA ("MCP2A Ethernet Controller", "MCP2A"), + T_DATA ("MCP51 Ethernet Controller", "MCP51"), + T_DATA ("MCP55 Ethernet", "MCP55"), + T_DATA ("MCP61 Ethernet", "MCP61"), + T_DATA ("MCP65 Ethernet", "MCP65"), + T_DATA ("MCP67 Ethernet", "MCP67"), + T_DATA ("MCP73 Ethernet", "MCP73"), + T_DATA ("MCP77 Ethernet", "MCP77"), + T_DATA ("MCP79 Ethernet", "MCP79"), + T_DATA ("MCP89 Ethernet", "MCP89"), + T_DATA ("MCS7730 10/100 Mbps Ethernet adapter", "MCS7730"), + T_DATA ("MCS7830 10/100 Mbps Ethernet adapter", "MCS7830"), + T_DATA ("MCS7832 10/100 Mbps Ethernet adapter", "MCS7832"), + T_DATA ("Metronic 495257 wifi 802.11ng", "Metronic 495257"), + T_DATA ("MF110/MF627/MF636", "MF110/MF627/MF636"), + T_DATA ("MF632/ONDA ET502HS/MT505UP", "MF632/ONDA ET502HS/MT505UP"), + T_DATA ("MF820 4G LTE", "MF820"), + T_DATA ("Micolink USB2Ethernet [pegasus]", "Micolink USB2Ethernet"), + T_DATA ("MicroLink dLAN", "MicroLink dLAN"), + T_DATA ("MN-120 (ADMtek Centaur-C based)", "MN-120"), + T_DATA ("MN-130 (ADMtek Centaur-P based)", "MN-130"), + T_DATA ("MN-710 802.11g Wireless Adapter [Intersil ISL3886]", "MN-710"), + T_DATA ("model 01 Ethernet interface", "model 01"), + T_DATA ("model 01+ Ethernet", "model 01+"), + T_DATA ("Motorola 802.11n 5G USB Wireless Adapter", "Motorola"), + T_DATA ("Motorola 802.11n Dualband USB Wireless Adapter", "Motorola Dualband"), + T_DATA ("MP-PRX1 Ethernet", "MP-PRX1"), + T_DATA ("MS-3870 802.11bgn Wireless Module [Ralink RT3070]", "MS-3870"), + T_DATA ("MS-3871 802.11bgn Wireless Module [Ralink RT8070]", "MS-3871"), + T_DATA ("MSI-6861 802.11g WiFi adapter", "MSI-6861"), + T_DATA ("MT25400 Family [ConnectX-2 Virtual Function]", "MT25400"), + T_DATA ("MT25408 [ConnectX EN 10GigE 10GBaseT, PCIe 2.0 2.5GT/s]", "MT25408"), + T_DATA ("MT25408 [ConnectX EN 10GigE 10GBaseT, PCIe Gen2 5GT/s]", "MT25408"), + T_DATA ("MT25408 [ConnectX VPI - IB SDR / 10GigE]", "MT25408"), + T_DATA ("MT25418 [ConnectX VPI PCIe 2.0 2.5GT/s - IB DDR / 10GigE]", "MT25418"), + T_DATA ("MT25448 [ConnectX EN 10GigE, PCIe 2.0 2.5GT/s]", "MT25448"), + T_DATA ("MT26418 [ConnectX VPI PCIe 2.0 5GT/s - IB DDR / 10GigE]", "MT26418"), + T_DATA ("MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE]", "MT26428"), + T_DATA ("MT26438 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE Virtualization+]", "MT26438"), + T_DATA ("MT26448 [ConnectX EN 10GigE, PCIe 2.0 5GT/s]", "MT26448"), + T_DATA ("MT26468 [ConnectX EN 10GigE, PCIe 2.0 5GT/s Virtualization+]", "MT26468"), + T_DATA ("MT26478 [ConnectX EN 40GigE, PCIe 2.0 5GT/s]", "MT26478"), + T_DATA ("MT27500 Family [ConnectX-3]", "MT27500"), + T_DATA ("MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]", "MT27500/MT27520"), + T_DATA ("MT27510 Family", "MT27510"), + T_DATA ("MT27511 Family", "MT27511"), + T_DATA ("MT27520 Family [ConnectX-3 Pro]", "MT27520"), + T_DATA ("MT27530 Family", "MT27530"), + T_DATA ("MT27531 Family", "MT27531"), + T_DATA ("MT27540 Family", "MT27540"), + T_DATA ("MT27541 Family", "MT27541"), + T_DATA ("MT27550 Family", "MT27550"), + T_DATA ("MT27551 Family", "MT27551"), + T_DATA ("MT27560 Family", "MT27560"), + T_DATA ("MT27561 Family", "MT27561"), + T_DATA ("MT27600 [Connect-IB]", "MT27600"), + T_DATA ("MT27600 Family [Connect-IB Virtual Function]", "MT27600"), + T_DATA ("MT27700 Family [ConnectX-4]", "MT27700"), + T_DATA ("MT27700 Family [ConnectX-4 Virtual Function]", "MT27700"), + T_DATA ("MT27710 Family [ConnectX-4 Lx]", "MT27710"), + T_DATA ("MT27710 Family [ConnectX-4 Lx Virtual Function]", "MT27710"), + T_DATA ("MT27800 Family [ConnectX-5]", "MT27800"), + T_DATA ("MT27800 Family [ConnectX-5 Virtual Function]", "MT27800"), + T_DATA ("MT28800 Family [ConnectX-5 Ex]", "MT28800"), + T_DATA ("MT28800 Family [ConnectX-5 Ex Virtual Function]", "MT28800"), + T_DATA ("MT28908 Family [ConnectX-6]", "MT28908"), + T_DATA ("MT28908 Family [ConnectX-6 Virtual Function]", "MT28908"), + T_DATA ("MT416842 BlueField integrated ConnectX-5 network controller", "MT416842 BlueField ConnectX-5"), + T_DATA ("MT416842 BlueField multicore SoC family VF", "MT416842 BlueField VF"), + T_DATA ("MT51136", "MT51136"), + T_DATA ("MT52100", "MT52100"), + T_DATA ("MT53236", "MT53236"), + T_DATA ("MT7601U Wireless Adapter", "MT7601U"), + T_DATA ("MTD-8xx 100/10M Ethernet PCI Adapter", "MTD-8xx"), + T_DATA ("Multithreaded 10-Gigabit Ethernet Network Controller", NULL), + T_DATA ("MX98713", "MX98713"), + T_DATA ("MX987x5", "MX987x5"), + T_DATA ("Myri-10G Dual-Protocol NIC", "Myri-10G"), + T_DATA ("N10 Nano 802.11n Network Adapter [Realtek RTL8192CU]", "N10 Nano"), + T_DATA ("N220 802.11bgn Wireless Adapter", "N220"), + T_DATA ("N320-G2-CR 10GbE Dual Port Adapter", "N320-G2-CR"), + T_DATA ("N5HBZ0000055 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]", "N5HBZ0000055"), + T_DATA ("Name: Voyager 1055 Laptop 802.11g Adapter [Broadcom 4320]", "Voyager 1055"), + T_DATA ("NC100 Network Everywhere Fast Ethernet 10/100", "NC100"), + T_DATA ("NE-34", "NE-34"), + T_DATA ("NET1080 USB-USB Bridge", "NET1080 USB-USB Bridge"), + T_DATA ("Netelligent 10/100 TX Embedded UTP", "Netelligent TX"), + T_DATA ("Netelligent 10/100 TX PCI UTP", "Netelligent TX"), + T_DATA ("Netelligent 10/100 TX UTP", "Netelligent TX"), + T_DATA ("Netelligent 10 T/2 PCI UTP/Coax", "Netelligent 10 T/2"), + T_DATA ("Netelligent 10 T PCI UTP", "Netelligent 10 T"), + T_DATA ("Netelligent Dual 10/100 TX PCI UTP", "Netelligent Dual TX"), + T_DATA ("Netelligent Integrated 10/100 TX UTP", "Netelligent TX"), + T_DATA ("NetFlex-3/P ThunderLAN 1.0", "NetFlex-3/P ThunderLAN 1.0"), + T_DATA ("NetFlex-3/P ThunderLAN 2.3", "NetFlex-3/P ThunderLAN 2.3"), + T_DATA ("NetLink BCM57780 Gigabit Ethernet PCIe", "NetLink BCM57780"), + T_DATA ("NetLink BCM57781 Gigabit Ethernet PCIe", "NetLink BCM57781"), + T_DATA ("NetLink BCM57785 Gigabit Ethernet PCIe", "NetLink BCM57785"), + T_DATA ("NetLink BCM57788 Gigabit Ethernet PCIe", "NetLink BCM57788"), + T_DATA ("NetLink BCM57790 Gigabit Ethernet PCIe", "NetLink BCM57790"), + T_DATA ("NetLink BCM57791 Gigabit Ethernet PCIe", "NetLink BCM57791"), + T_DATA ("NetLink BCM57795 Gigabit Ethernet PCIe", "NetLink BCM57795"), + T_DATA ("NetLink BCM5781 Gigabit Ethernet PCI Express", "NetLink BCM5781"), + T_DATA ("NetLink BCM5784M Gigabit Ethernet PCIe", "NetLink BCM5784M"), + T_DATA ("NetLink BCM5785 Fast Ethernet", "NetLink BCM5785"), + T_DATA ("NetLink BCM5785 Gigabit Ethernet", "NetLink BCM5785"), + T_DATA ("NetLink BCM5786 Gigabit Ethernet PCI Express", "NetLink BCM5786"), + T_DATA ("NetLink BCM5787F Fast Ethernet PCI Express", "NetLink BCM5787F"), + T_DATA ("NetLink BCM5787 Gigabit Ethernet PCI Express", "NetLink BCM5787"), + T_DATA ("NetLink BCM5787M Gigabit Ethernet PCI Express", "NetLink BCM5787M"), + T_DATA ("NetLink BCM5789 Gigabit Ethernet PCI Express", "NetLink BCM5789"), + T_DATA ("NetLink BCM5906 Fast Ethernet PCI Express", "NetLink BCM5906"), + T_DATA ("NetLink BCM5906M Fast Ethernet PCI Express", "NetLink BCM5906M"), + T_DATA ("NetMate2 Ethernet", "NetMate2"), + T_DATA ("NetMate Ethernet", "NetMate"), + T_DATA ("NetXen Dual Port 10GbE Multifunction Adapter for c-Class", "NetXen Multifunction for c-Class"), + T_DATA ("NetXtreme 5714S Gigabit Ethernet", "NetXtreme 5714S"), + T_DATA ("NetXtreme BCM5700 Gigabit Ethernet", "NetXtreme BCM5700"), + T_DATA ("NetXtreme BCM5701 Gigabit Ethernet", "NetXtreme BCM5701"), + T_DATA ("NetXtreme BCM5702A3 Gigabit Ethernet", "NetXtreme BCM5702A3"), + T_DATA ("NetXtreme BCM5702FE Gigabit Ethernet", "NetXtreme BCM5702FE"), + T_DATA ("NetXtreme BCM5702 Gigabit Ethernet", "NetXtreme BCM5702"), + T_DATA ("NetXtreme BCM5702X Gigabit Ethernet", "NetXtreme BCM5702X"), + T_DATA ("NetXtreme BCM5703 Gigabit Ethernet", "NetXtreme BCM5703"), + T_DATA ("NetXtreme BCM5703X Gigabit Ethernet", "NetXtreme BCM5703X"), + T_DATA ("NetXtreme BCM5704 Gigabit Ethernet", "NetXtreme BCM5704"), + T_DATA ("NetXtreme BCM5704S_2 Gigabit Ethernet", "NetXtreme BCM5704S 2"), + T_DATA ("NetXtreme BCM5704S Gigabit Ethernet", "NetXtreme BCM5704S"), + T_DATA ("NetXtreme BCM5705_2 Gigabit Ethernet", "NetXtreme BCM5705 2"), + T_DATA ("NetXtreme BCM5705 Gigabit Ethernet", "NetXtreme BCM5705"), + T_DATA ("NetXtreme BCM5705M_2 Gigabit Ethernet", "NetXtreme BCM5705M 2"), + T_DATA ("NetXtreme BCM5705M Gigabit Ethernet", "NetXtreme BCM5705M"), + T_DATA ("NetXtreme BCM5714 Gigabit Ethernet", "NetXtreme BCM5714"), + T_DATA ("NetXtreme BCM5715 Gigabit Ethernet", "NetXtreme BCM5715"), + T_DATA ("NetXtreme BCM5715S Gigabit Ethernet", "NetXtreme BCM5715S"), + T_DATA ("NetXtreme BCM5717 Gigabit Ethernet PCIe", "NetXtreme BCM5717"), + T_DATA ("NetXtreme BCM5718 Gigabit Ethernet PCIe", "NetXtreme BCM5718"), + T_DATA ("NetXtreme BCM5719 Gigabit Ethernet PCIe", "NetXtreme BCM5719"), + T_DATA ("NetXtreme BCM5720 Gigabit Ethernet PCIe", "NetXtreme BCM5720"), + T_DATA ("NetXtreme BCM5721 Gigabit Ethernet PCI Express", "NetXtreme BCM5721"), + T_DATA ("NetXtreme BCM5722 Gigabit Ethernet PCI Express", "NetXtreme BCM5722"), + T_DATA ("NetXtreme BCM5723 Gigabit Ethernet PCIe", "NetXtreme BCM5723"), + T_DATA ("NetXtreme BCM5725 Gigabit Ethernet PCIe", "NetXtreme BCM5725"), + T_DATA ("NetXtreme BCM5727 Gigabit Ethernet PCIe", "NetXtreme BCM5727"), + T_DATA ("NetXtreme BCM5751F Fast Ethernet PCI Express", "NetXtreme BCM5751F"), + T_DATA ("NetXtreme BCM5751 Gigabit Ethernet PCI Express", "NetXtreme BCM5751"), + T_DATA ("NetXtreme BCM5751M Gigabit Ethernet PCI Express", "NetXtreme BCM5751M"), + T_DATA ("NetXtreme BCM5752 Gigabit Ethernet PCI Express", "NetXtreme BCM5752"), + T_DATA ("NetXtreme BCM5752M Gigabit Ethernet PCI Express", "NetXtreme BCM5752M"), + T_DATA ("NetXtreme BCM5753F Fast Ethernet PCI Express", "NetXtreme BCM5753F"), + T_DATA ("NetXtreme BCM5753 Gigabit Ethernet PCI Express", "NetXtreme BCM5753"), + T_DATA ("NetXtreme BCM5753M Gigabit Ethernet PCI Express", "NetXtreme BCM5753M"), + T_DATA ("NetXtreme BCM5754 Gigabit Ethernet PCI Express", "NetXtreme BCM5754"), + T_DATA ("NetXtreme BCM5754M Gigabit Ethernet PCI Express", "NetXtreme BCM5754M"), + T_DATA ("NetXtreme BCM5755 Gigabit Ethernet PCI Express", "NetXtreme BCM5755"), + T_DATA ("NetXtreme BCM5755M Gigabit Ethernet PCI Express", "NetXtreme BCM5755M"), + T_DATA ("NetXtreme BCM5756ME Gigabit Ethernet PCI Express", "NetXtreme BCM5756ME"), + T_DATA ("NetXtreme BCM5761 10/100/1000BASE-T Ethernet", "NetXtreme BCM5761"), + T_DATA ("NetXtreme BCM5761e Gigabit Ethernet PCIe", "NetXtreme BCM5761e"), + T_DATA ("NetXtreme BCM5761 Gigabit Ethernet PCIe", "NetXtreme BCM5761"), + T_DATA ("NetXtreme BCM5762 Gigabit Ethernet PCIe", "NetXtreme BCM5762"), + T_DATA ("NetXtreme BCM5764M Gigabit Ethernet PCIe", "NetXtreme BCM5764M"), + T_DATA ("NetXtreme BCM57760 Gigabit Ethernet PCIe", "NetXtreme BCM57760"), + T_DATA ("NetXtreme BCM57761 Gigabit Ethernet PCIe", "NetXtreme BCM57761"), + T_DATA ("NetXtreme BCM57762 Gigabit Ethernet PCIe", "NetXtreme BCM57762"), + T_DATA ("NetXtreme BCM57764 Gigabit Ethernet PCIe", "NetXtreme BCM57764"), + T_DATA ("NetXtreme BCM57765 Gigabit Ethernet PCIe", "NetXtreme BCM57765"), + T_DATA ("NetXtreme BCM57766 Gigabit Ethernet PCIe", "NetXtreme BCM57766"), + T_DATA ("NetXtreme BCM57767 Gigabit Ethernet PCIe", "NetXtreme BCM57767"), + T_DATA ("NetXtreme BCM57782 Gigabit Ethernet PCIe", "NetXtreme BCM57782"), + T_DATA ("NetXtreme BCM57786 Gigabit Ethernet PCIe", "NetXtreme BCM57786"), + T_DATA ("NetXtreme BCM57787 Gigabit Ethernet PCIe", "NetXtreme BCM57787"), + T_DATA ("NetXtreme BCM5780 Gigabit Ethernet", "NetXtreme BCM5780"), + T_DATA ("NetXtreme BCM5780S Gigabit Ethernet", "NetXtreme BCM5780S"), + T_DATA ("NetXtreme BCM5782 Gigabit Ethernet", "NetXtreme BCM5782"), + T_DATA ("NetXtreme BCM5788 Gigabit Ethernet", "NetXtreme BCM5788"), + T_DATA ("NetXtreme BCM5901 100Base-TX", "NetXtreme BCM5901"), + T_DATA ("NetXtreme-C Ethernet Virtual Function", "NetXtreme-C Virtual Function"), + T_DATA ("NetXtreme-C RDMA Virtual Function", "NetXtreme-C Virtual Function"), + T_DATA ("NetXtreme-E Ethernet Virtual Function", "NetXtreme-E Virtual Function"), + T_DATA ("NetXtreme-E RDMA Virtual Function", "NetXtreme-E Virtual Function"), + T_DATA ("NetXtreme II BCM5706 Gigabit Ethernet (NC370i Multifunction Gigabit Server Adapter)", "NetXtreme II BCM5706"), + T_DATA ("NetXtreme II BCM5706 Gigabit Ethernet (NC370T MultifuNCtion Gigabit Server Adapter)", "NetXtreme II BCM5706"), + T_DATA ("NetXtreme II BCM5706 Gigabit Ethernet", "NetXtreme II BCM5706"), + T_DATA ("NetXtreme II BCM5706S Gigabit Ethernet (NC370F MultifuNCtion Gigabit Server Adapter)", "NetXtreme II BCM5706S"), + T_DATA ("NetXtreme II BCM5706S Gigabit Ethernet", "NetXtreme II BCM5706S"), + T_DATA ("NetXtreme II BCM5708 Gigabit Ethernet", "NetXtreme II BCM5708"), + T_DATA ("NetXtreme II BCM5708S Gigabit Ethernet", "NetXtreme II BCM5708S"), + T_DATA ("NetXtreme II BCM5709 Gigabit Ethernet", "NetXtreme II BCM5709"), + T_DATA ("NetXtreme II BCM5709S Gigabit Ethernet", "NetXtreme II BCM5709S"), + T_DATA ("NetXtreme II BCM5716 Gigabit Ethernet", "NetXtreme II BCM5716"), + T_DATA ("NetXtreme II BCM5716S Gigabit Ethernet", "NetXtreme II BCM5716S"), + T_DATA ("NetXtreme II BCM57710 10-Gigabit PCIe [Everest]", "NetXtreme II BCM57710"), + T_DATA ("NetXtreme II BCM57711 10-Gigabit PCIe", "NetXtreme II BCM57711"), + T_DATA ("NetXtreme II BCM57711E 10-Gigabit PCIe", "NetXtreme II BCM57711E"), + T_DATA ("NetXtreme II BCM57712 10 Gigabit Ethernet Multi Function", "NetXtreme II BCM57712"), + T_DATA ("NetXtreme II BCM57712 10 Gigabit Ethernet", "NetXtreme II BCM57712"), + T_DATA ("NetXtreme II BCM57712 10 Gigabit Ethernet Virtual Function", "NetXtreme II BCM57712 Virtual Function"), + T_DATA ("NetXtreme II BCM57800 1/10 Gigabit Ethernet Multi Function", "NetXtreme II BCM57800"), + T_DATA ("NetXtreme II BCM57800 1/10 Gigabit Ethernet", "NetXtreme II BCM57800"), + T_DATA ("NetXtreme II BCM57800 1/10 Gigabit Ethernet Virtual Function", "NetXtreme II BCM57800 Virtual Function"), + T_DATA ("NetXtreme II BCM57810 10 Gigabit Ethernet Multi Function", "NetXtreme II BCM57810"), + T_DATA ("NetXtreme II BCM57810 10 Gigabit Ethernet", "NetXtreme II BCM57810"), + T_DATA ("NetXtreme II BCM57810 10 Gigabit Ethernet Virtual Function", "NetXtreme II BCM57810 Virtual Function"), + T_DATA ("NetXtreme II BCM57811 10 Gigabit Ethernet Multi Function", "NetXtreme II BCM57811"), + T_DATA ("NetXtreme II BCM57811 10-Gigabit Ethernet", "NetXtreme II BCM57811"), + T_DATA ("NetXtreme II BCM57811 10-Gigabit Ethernet Virtual Function", "NetXtreme II BCM57811 Virtual Function"), + T_DATA ("NetXtreme II BCM57840 10/20 Gigabit Ethernet Multi Function", "NetXtreme II BCM57840 10/20"), + T_DATA ("NetXtreme II BCM57840 10/20 Gigabit Ethernet", "NetXtreme II BCM57840 10/20"), + T_DATA ("NetXtreme II BCM57840 10/20 Gigabit Ethernet Virtual Function", "NetXtreme II BCM57840 10/20 Virtual Function"), + T_DATA ("nForce2 Ethernet Controller", "nForce2"), + T_DATA ("nForce3 Ethernet", "nForce3"), + T_DATA ("nForce Ethernet Controller", "nForce"), + T_DATA ("Nintendo Wi-Fi", "Nintendo"), + T_DATA ("NM10/ICH7 Family LAN Controller", "NM10/ICH7"), + T_DATA ("NovaTech NV-902W", "NovaTech NV-902W"), + T_DATA ("NUB100 Ethernet [pegasus]", "NUB100"), + T_DATA ("NUB-350 802.11g Wireless Adapter [Intersil ISL3887]", "NUB-350"), + T_DATA ("NUB-8301 802.11bg", "NUB-8301"), + T_DATA ("NV5000SC", "NV5000SC"), + T_DATA ("NW-3100 802.11b/g 54Mbps Wireless Network Adapter [zd1211]", "NW-3100"), + T_DATA ("NWD2105 802.11bgn Wireless Adapter [Ralink RT3070]", "NWD2105"), + T_DATA ("NWD-210N 802.11b/g/n-draft wireless adapter", "NWD-210N"), + T_DATA ("NWD211AN 802.11abgn Wireless Adapter [Ralink RT2870]", "NWD211AN"), + T_DATA ("NWD2205 802.11n Wireless N Adapter [Realtek RTL8192CU]", "NWD2205"), + T_DATA ("NWD-270N Wireless N-lite USB Adapter", "NWD-270N N-lite"), + T_DATA ("NWD271N 802.11n Wireless Adapter [Atheros AR9001U-(2)NG]", "NWD271N"), + T_DATA ("NX3031 Multifunction 1/10-Gigabit Server Adapter", "NX3031 Multifunction"), + T_DATA ("NXB-10GCX4 10-Gigabit Ethernet PCIe Adapter with CX4 copper interface", "NXB-10GCX4"), + T_DATA ("NXB-10GXSR 10-Gigabit Ethernet PCIe Adapter with SR-XFP optical interface", "NXB-10GXSR"), + T_DATA ("NXB-4GCU Quad Gigabit Ethernet PCIe Adapter with 1000-BASE-T interface", "NXB-4GCU Quad"), + T_DATA ("OC-2183/2185", "OC-2183/2185"), + T_DATA ("OC-2325", "OC-2325"), + T_DATA ("OC-2326", "OC-2326"), + T_DATA ("OCT To Fast Ethernet Converter", "OCT To Converter"), + T_DATA ("Olicard 100", "Olicard 100"), + T_DATA ("OneConnect 10Gb NIC (be3)", "OneConnect"), + T_DATA ("OneConnect NIC (Lancer)", "OneConnect"), + T_DATA ("OneConnect NIC (Skyhawk)", "OneConnect"), + T_DATA ("OneConnect NIC (Skyhawk-VF)", "OneConnect"), + T_DATA ("OneConnect OCe10100/OCe10102 Series 10 GbE", "OneConnect OCe10100/OCe10102"), + T_DATA ("On Networks N300MA 802.11bgn [Realtek RTL8192CU]", "On Networks N300MA"), + T_DATA ("Ovation MC551", "Ovation MC551"), + T_DATA ("PCAN-PCI CAN-Bus controller", "PCAN-PCI"), + T_DATA ("PCAN Pro", "PCAN Pro"), + T_DATA ("PCAN-USB", "PCAN-USB"), + T_DATA ("PCI NE2K Ethernet", "NE2K"), + T_DATA ("PCI Rocker Ethernet switch device", "Rocker switch"), + T_DATA ("PL2301 USB-USB Bridge", "PL2301 USB-USB Bridge"), + T_DATA ("PL2302 USB-USB Bridge", "PL2302 USB-USB Bridge"), + T_DATA ("PL25A1 Host-Host Bridge", "PL25A1 Host-Host Bridge"), + T_DATA ("Platform Controller Hub EG20T Controller Area Network (CAN) Controller", "EG20T"), + T_DATA ("PN672TX 10/100 Ethernet", "PN672TX"), + T_DATA ("Pocket Ethernet [klsi]", "Pocket"), + T_DATA ("Prism GT 802.11b/g Adapter", "Prism GT"), + T_DATA ("PRO/100 VE Network Connection", "PRO/100 VE"), + T_DATA ("PRO/100 VM Network Connection", "PRO/100 VM"), + T_DATA ("PRO/Wireless 2200BG [Calexico2] Network Connection", "PRO/Wireless 2200BG"), + T_DATA ("PRO/Wireless 2915ABG [Calexico2] Network Connection", "PRO/Wireless 2915ABG"), + T_DATA ("PRO/Wireless 3945ABG [Golan] Network Connection", "PRO/Wireless 3945ABG"), + T_DATA ("PRO/Wireless 4965 AG or AGN [Kedron] Network Connection", "PRO/Wireless 4965 AG or AGN"), + T_DATA ("PRO/Wireless 5100 AGN [Shiloh] Network Connection", "PRO/Wireless 5100 AGN"), + T_DATA ("PRO/Wireless 5350 AGN [Echo Peak] Network Connection", "PRO/Wireless 5350 AGN"), + T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter (Dell Latitude D800)", "PRO/Wireless 2100 3B Mini"), + T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter (MIM2000/Centrino)", "PRO/Wireless 2100 3B Mini"), + T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter", "PRO/Wireless 2100 3B Mini"), + T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter (Samsung X10/P30 integrated WLAN)", "PRO/Wireless 2100 3B Mini"), + T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter (Toshiba Satellite M10)", "PRO/Wireless 2100 3B Mini"), + T_DATA ("Psion Gold Port Ethernet", "Psion Gold Port"), + T_DATA ("PTA01 Wireless Adapter", "PTA01"), + T_DATA ("QCA6164 802.11ac Wireless Network Adapter", "QCA6164"), + T_DATA ("QCA6174 802.11ac Wireless Network Adapter", "QCA6174"), + T_DATA ("QCA8171 Gigabit Ethernet", "QCA8171"), + T_DATA ("QCA8172 Fast Ethernet", "QCA8172"), + T_DATA ("QCA9377 802.11ac Wireless Network Adapter", "QCA9377"), + T_DATA ("QCA9565 / AR9565 Wireless Network Adapter", "QCA9565 / AR9565"), + T_DATA ("QCA986x/988x 802.11ac Wireless Network Adapter", "QCA986x/988x"), + T_DATA ("QCA9887 802.11ac Wireless Network Adapter", "QCA9887"), + T_DATA ("QCA9980/9990 802.11ac Wireless Network Adapter", "QCA9980/9990"), + T_DATA ("Qualcomm HSUSB Device", "Qualcomm HSUSB"), + T_DATA ("Quectel UC20", "Quectel UC20"), + T_DATA ("QuickWLAN 802.11bg", "QuickWLAN"), + T_DATA ("R6040 MAC Controller", "R6040"), + T_DATA ("Ralink RT2770/2720 802.11b/g/n Wireless LAN Mini-USB Device", "Ralink RT2770/2720"), + T_DATA ("Ralink RT3070 802.11b/g/n Wireless Lan USB Device", "Ralink RT3070"), + T_DATA ("ReadyLink 2000", "ReadyLink 2000"), + T_DATA ("Realtek RTL8187 Wireless 802.11g 54Mbps Network Adapter", "Realtek RTL8187"), + T_DATA ("RIO 10/100 Ethernet [eri]", "RIO"), + T_DATA ("RL100-ATX 10/100", "RL100-ATX"), + T_DATA ("RL100TX Fast Ethernet", "RL100TX"), + T_DATA ("ROL/F-100 Fast Ethernet Adapter with ROL", "ROL/F-100 with ROL"), + T_DATA ("RT2070 Wireless Adapter", "RT2070"), + T_DATA ("RT2500USB Wireless Adapter", "RT2500USB"), + T_DATA ("RT2500 Wireless 802.11bg", "RT2500"), + T_DATA ("RT2501/RT2573 Wireless Adapter", "RT2501/RT2573"), + T_DATA ("RT2501USB Wireless Adapter", "RT2501USB"), + T_DATA ("RT2561/RT61 802.11g PCI", "RT2561/RT61"), + T_DATA ("RT2561/RT61 rev B 802.11g", "RT2561/RT61"), + T_DATA ("RT2570", "RT2570"), + T_DATA ("RT2570 Wireless Adapter", "RT2570"), + T_DATA ("RT2573", "RT2573"), + T_DATA ("RT2600 802.11 MIMO", "RT2600 MIMO"), + T_DATA ("RT2601/RT2671 Wireless Adapter", "RT2601/RT2671"), + T_DATA ("RT2760 Wireless 802.11n 1T/2R", "RT2760 1T/2R"), + T_DATA ("RT2770 Wireless Adapter", "RT2770"), + T_DATA ("RT2790 Wireless 802.11n 1T/2R PCIe", "RT2790 1T/2R"), + T_DATA ("RT2800 802.11n PCI", "RT2800"), + T_DATA ("RT2870/RT3070 Wireless Adapter", "RT2870/RT3070"), + T_DATA ("RT2870 Wireless Adapter", "RT2870"), + T_DATA ("RT2890 Wireless 802.11n PCIe", "RT2890"), + T_DATA ("RT3060 Wireless 802.11n 1T/1R", "RT3060 1T/1R"), + T_DATA ("RT3062 Wireless 802.11n 2T/2R", "RT3062 2T/2R"), + T_DATA ("RT3071 Wireless Adapter", "RT3071"), + T_DATA ("RT3072 Wireless Adapter", "RT3072"), + T_DATA ("RT3090 Wireless 802.11n 1T/1R PCIe", "RT3090 1T/1R"), + T_DATA ("RT3091 Wireless 802.11n 1T/2R PCIe", "RT3091 1T/2R"), + T_DATA ("RT3092 Wireless 802.11n 2T/2R PCIe", "RT3092 2T/2R"), + T_DATA ("RT3290 Wireless 802.11n 1T/1R PCIe", "RT3290 1T/1R"), + T_DATA ("RT3370 Wireless Adapter", "RT3370"), + T_DATA ("RT3572 Wireless Adapter", "RT3572"), + T_DATA ("RT3573 Wireless Adapter", "RT3573"), + T_DATA ("RT3592 PCIe Wireless Network Adapter", "RT3592"), + T_DATA ("RT3592 Wireless 802.11abgn 2T/2R PCIe", "RT3592 2T/2R"), + T_DATA ("RT5360 Wireless 802.11n 1T/1R", "RT5360 1T/1R"), + T_DATA ("RT5362 PCI 802.11n Wireless Network Adapter", "RT5362"), + T_DATA ("RT5370 Wireless Adapter", "RT5370"), + T_DATA ("RT5372 Wireless Adapter", "RT5372"), + T_DATA ("RT5390 [802.11 b/g/n 1T1R G-band PCI Express Single Chip]", "RT5390"), + T_DATA ("RT5390R 802.11bgn PCIe Wireless Network Adapter", "RT5390R"), + T_DATA ("RT5390 Wireless 802.11n 1T/1R PCIe", "RT5390 1T/1R"), + T_DATA ("RT5392 PCIe Wireless Network Adapter", "RT5392"), + T_DATA ("RT5572 Wireless Adapter", "RT5572"), + T_DATA ("RT8139 (B/C) Cardbus Fast Ethernet Adapter", "RT8139"), + T_DATA ("RTL-8029(AS)", "RTL-8029"), + T_DATA ("RTL-8100/8101L/8139 PCI Fast Ethernet Adapter", "RTL-8100/8101L/8139"), + T_DATA ("RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller", "RTL8101/2/6E"), + T_DATA ("RTL-8110SC/8169SC Gigabit Ethernet", "RTL-8110SC/8169SC"), + T_DATA ("RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "RTL8111/8168/8411"), + T_DATA ("RTL-8129", "RTL-8129"), + T_DATA ("RTL8139D [Realtek] PCI 10/100BaseTX ethernet adaptor", "RTL8139D"), + T_DATA ("RTL8139 Ethernet", "RTL8139"), + T_DATA ("RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter", "RTL8139"), + T_DATA ("RTL8150 Fast Ethernet Adapter", "RTL8150"), + T_DATA ("RTL8151", "RTL8151"), + T_DATA ("RTL8152 Fast Ethernet Adapter", "RTL8152"), + T_DATA ("RTL8153 Gigabit Ethernet Adapter", "RTL8153"), + T_DATA ("RTL8169 PCI Gigabit Ethernet Controller", "RTL8169"), + T_DATA ("RTL8180L 802.11b MAC", "RTL8180L"), + T_DATA ("RTL-8185 IEEE 802.11a/b/g Wireless LAN Controller", "RTL-8185"), + T_DATA ("RTL8187B Wireless 802.11g 54Mbps Network Adapter", "RTL8187B"), + T_DATA ("RTL8187B Wireless Adapter", "RTL8187B"), + T_DATA ("RTL8187SE Wireless LAN Controller", "RTL8187SE"), + T_DATA ("RTL8187 Wireless Adapter", "RTL8187"), + T_DATA ("RTL8188CE 802.11b/g/n WiFi Adapter", "RTL8188CE"), + T_DATA ("RTL8188CUS 802.11n WLAN Adapter", "RTL8188CUS"), + T_DATA ("RTL8188EE Wireless Network Adapter", "RTL8188EE"), + T_DATA ("RTL8188RU 802.11n WLAN Adapter", "RTL8188RU"), + T_DATA ("RTL8191CE PCIe Wireless Network Adapter", "RTL8191CE"), + T_DATA ("RTL8191SEvA Wireless LAN Controller", "RTL8191SEvA"), + T_DATA ("RTL8191SEvB Wireless LAN Controller", "RTL8191SEvB"), + T_DATA ("RTL8192CE PCIe Wireless Network Adapter", "RTL8192CE"), + T_DATA ("RTL8192CU 802.11n WLAN Adapter", "RTL8192CU"), + T_DATA ("RTL8192DE Wireless LAN Controller", "RTL8192DE"), + T_DATA ("RTL8192EE PCIe Wireless Network Adapter", "RTL8192EE"), + T_DATA ("RTL8192E/RTL8192SE Wireless LAN Controller", "RTL8192E/RTL8192SE"), + T_DATA ("RTL8192EU 802.11b/g/n WLAN Adapter", "RTL8192EU"), + T_DATA ("RTL8192SE Wireless LAN Controller", "RTL8192SE"), + T_DATA ("RTL81xx Fast Ethernet", "RTL81xx"), + T_DATA ("RTL81xx RealTek Ethernet", "RTL81xx RealTek"), + T_DATA ("RTL8723AE PCIe Wireless Network Adapter", "RTL8723AE"), + T_DATA ("RTL8723AU 802.11n WLAN Adapter", "RTL8723AU"), + T_DATA ("RTL8723BE PCIe Wireless Network Adapter", "RTL8723BE"), + T_DATA ("RTL8812AE 802.11ac PCIe Wireless Network Adapter", "RTL8812AE"), + T_DATA ("RTL8821AE 802.11ac PCIe Wireless Network Adapter", "RTL8821AE"), + T_DATA ("S310-CR 10GbE Single Port Adapter", "S310-CR Single Port"), + T_DATA ("S320-LP-CR 10GbE Dual Port Adapter", "S320-LP-CR"), + T_DATA ("Samsung Gobi 2000 Wireless Modem", "Samsung Gobi 2000"), + T_DATA ("SC92031 PCI Fast Ethernet Adapter", "SC92031"), + T_DATA ("SD8688 WLAN", "SD8688"), + T_DATA ("SD8786 WLAN", "SD8786"), + T_DATA ("SD8787 WLAN", "SD8787"), + T_DATA ("SD8797 WLAN", "SD8797"), + T_DATA ("SD8897 WLAN", "SD8897"), + T_DATA ("SFC4000 rev A net [Solarstorm]", "SFC4000"), + T_DATA ("SFC4000 rev B [Solarstorm]", "SFC4000"), + T_DATA ("SFC9020 10G Ethernet Controller", "SFC9020"), + T_DATA ("SFC9120 10G Ethernet Controller", "SFC9120"), + T_DATA ("SFC9120 10G Ethernet Controller (Virtual Function)", "SFC9120"), + T_DATA ("SFC9140 10/40G Ethernet Controller", "SFC9140"), + T_DATA ("SFC9140 10/40G Ethernet Controller (Virtual Function)", "SFC9140"), + T_DATA ("SFC9220 10/40G Ethernet Controller", "SFC9220"), + T_DATA ("SFC9220 10/40G Ethernet Controller (Virtual Function)", "SFC9220"), + T_DATA ("SFL9021 10GBASE-T Ethernet Controller", "SFL9021"), + T_DATA ("Shasta (Sun GEM)", "Shasta"), + T_DATA ("Siemens S30853-S1016-R107 802.11g Wireless Adapter [Intersil ISL3886]", "Siemens S30853-S1016-R107"), + T_DATA ("Siemens S30853-S1031-R351 802.11g Wireless Adapter [Atheros AR5523]", "Siemens S30853-S1031-R351"), + T_DATA ("Siemens S30853-S1038-R351 802.11g Wireless Adapter [Atheros AR5523]", "Siemens S30853-S1038-R351"), + T_DATA ("Siemens S30863-S1016-R107-2 802.11g Wireless Adapter [Intersil ISL3887]", "Siemens S30863-S1016-R107-2"), + T_DATA ("Siemens SpeedStream 100MBps Ethernet", "Siemens SpeedStream"), + T_DATA ("Sierra Wireless Gobi 3000 Modem device (MC8355)", "Sierra Gobi 3000"), + T_DATA ("SIMCom SIM5218 modem", "SIMCom SIM5218"), + T_DATA ("SiS7016 PCI Fast Ethernet Adapter", "SiS7016"), + T_DATA ("SiS900 PCI Fast Ethernet", "SiS900"), + T_DATA ("SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter, PCI64, Fiber ZX/SC", "SK-9871 ZX/SC"), + T_DATA ("SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link)", "SK-9872"), + T_DATA ("SK-9Dxx Gigabit Ethernet Adapter", "SK-9Dxx"), + T_DATA ("SK-9E21D 10/100/1000Base-T Adapter, Copper RJ-45", "SK-9E21D"), + T_DATA ("SK-9E21M 10/100/1000Base-T Adapter", "SK-9E21M"), + T_DATA ("SK-9Mxx Gigabit Ethernet Adapter", "SK-9Mxx"), + T_DATA ("SK-9S21 10/100/1000Base-T Server Adapter, PCI-X, Copper RJ-45", "SK-9S21"), + T_DATA ("smartNIC 2 PnP Ethernet", "smartNIC 2"), + T_DATA ("smartNIC Ethernet [catc]", "smartNIC"), + T_DATA ("SMC2-1211TX", "SMC2-1211TX"), + T_DATA ("SMC2862W-G v1 EZ Connect 802.11g Adapter [Intersil ISL3886]", "SMC2862W-G EZ Connect"), + T_DATA ("SMC2862W-G v2 EZ Connect 802.11g Adapter [Intersil ISL3887]", "SMC2862W-G EZ Connect"), + T_DATA ("SMC2862W-G v3 EZ Connect 802.11g Adapter [Intersil ISL3887]", "SMC2862W-G EZ Connect"), + T_DATA ("SMC SMCWUSB-N 802.11bgn 2x2:2 Wireless Adapter [Ralink RT2870]", "SMC SMCWUSB-N 2x2:2"), + T_DATA ("SMCWUSB-G 802.11bg", "SMCWUSB-G"), + T_DATA ("SMCWUSBS-N2 EZ Connect N Wireless Adapter [Ralink RT2870]", "SMCWUSBS-N2 EZ Connect"), + T_DATA ("SMCWUSBS-N3 EZ Connect N Wireless Adapter [Ralink RT3070]", "SMCWUSBS-N3 EZ Connect"), + T_DATA ("SMCWUSBS-N EZ Connect N Draft 11n Wireless Adapter [Ralink RT2870]", "SMCWUSBS-N EZ Connect"), + T_DATA ("SMCWUSBT-G (no firmware)", "SMCWUSBT-G"), + T_DATA ("SMCWUSBT-G", "SMCWUSBT-G"), + T_DATA ("SMSC9512/9514 Fast Ethernet Adapter", "SMSC9512/9514"), + T_DATA ("SNU5600 802.11bg", "SNU5600"), + T_DATA ("SoftGate 802.11 Adapter", "SoftGate"), + T_DATA ("Sony 10Mbps Ethernet [pegasus]", "Sony"), + T_DATA ("Sony Gobi 2000 Wireless Modem", "Sony Gobi 2000"), + T_DATA ("Sony UWA-BR100 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]", "Sony UWA-BR100"), + T_DATA ("SparkLAN WL-682 802.11bg Wireless Adapter [Intersil ISL3887]", "SparkLAN WL-682"), + T_DATA ("Speedport W 102 Stick IEEE 802.11n USB 2.0 Adapter", "Speedport W 102 Stick"), + T_DATA ("SpeedStream 10/100 Ethernet [pegasus]", "SpeedStream"), + T_DATA ("SpeedTouch 120g 802.11g Wireless Adapter [Intersil ISL3886]", "SpeedTouch 120g"), + T_DATA ("SpeedTouch 121g Wireless Dongle", "SpeedTouch 121g Dongle"), + T_DATA ("Sphairon Homelink 1202 802.11n Wireless Adapter [Atheros AR9170]", "Sphairon Homelink 1202"), + T_DATA ("ST201 Sundance Ethernet", "ST201 Sundance"), + T_DATA ("ST268", "ST268"), + T_DATA ("SURECOM EP-320X-S 100/10M Ethernet PCI Adapter", "SURECOM EP-320X-S"), + T_DATA ("T210 Protocol Engine", "T210 Protocol Engine"), + T_DATA ("T302 1GbE Dual Port Adapter", "T302"), + T_DATA ("T310 10GbE Single Port Adapter", "T310 Single Port"), + T_DATA ("T320 10GbE Dual Port Adapter", "T320"), + T_DATA ("T404-BT Unified Wire Ethernet Controller", "T404-BT"), + T_DATA ("T404-BT Unified Wire Ethernet Controller [VF]", "T404-BT"), + T_DATA ("T420-4082 Unified Wire Ethernet Controller", "T420-4082"), + T_DATA ("T420-4082 Unified Wire Ethernet Controller [VF]", "T420-4082"), + T_DATA ("T420-4085 SFP+ Unified Wire Ethernet Controller", "T420-4085 SFP+"), + T_DATA ("T420-4085 SFP+ Unified Wire Ethernet Controller [VF]", "T420-4085 SFP+"), + T_DATA ("T420-BCH Unified Wire Ethernet Controller", "T420-BCH"), + T_DATA ("T420-BCH Unified Wire Ethernet Controller [VF]", "T420-BCH"), + T_DATA ("T420-BT Unified Wire Ethernet Controller", "T420-BT"), + T_DATA ("T420-BT Unified Wire Ethernet Controller [VF]", "T420-BT"), + T_DATA ("T420-CR Unified Wire Ethernet Controller", "T420-CR"), + T_DATA ("T420-CR Unified Wire Ethernet Controller [VF]", "T420-CR"), + T_DATA ("T420-CX Unified Wire Ethernet Controller", "T420-CX"), + T_DATA ("T420-CX Unified Wire Ethernet Controller [VF]", "T420-CX"), + T_DATA ("T420-SO Unified Wire Ethernet Controller", "T420-SO"), + T_DATA ("T420-SO Unified Wire Ethernet Controller [VF]", "T420-SO"), + T_DATA ("T420X-4083 Unified Wire Ethernet Controller", "T420X-4083"), + T_DATA ("T420X-4083 Unified Wire Ethernet Controller [VF]", "T420X-4083"), + T_DATA ("T422-CR Unified Wire Ethernet Controller", "T422-CR"), + T_DATA ("T422-CR Unified Wire Ethernet Controller [VF]", "T422-CR"), + T_DATA ("T440-4084 Unified Wire Ethernet Controller", "T440-4084"), + T_DATA ("T440-4084 Unified Wire Ethernet Controller [VF]", "T440-4084"), + T_DATA ("T440-4086 10Gbase-T Unified Wire Ethernet Controller", "T440-4086"), + T_DATA ("T440-4086 10Gbase-T Unified Wire Ethernet Controller [VF]", "T440-4086"), + T_DATA ("T440-4088 Unified Wire Ethernet Controller", "T440-4088"), + T_DATA ("T440-4088 Unified Wire Ethernet Controller [VF]", "T440-4088"), + T_DATA ("T440-BCH Unified Wire Ethernet Controller", "T440-BCH"), + T_DATA ("T440-BCH Unified Wire Ethernet Controller [VF]", "T440-BCH"), + T_DATA ("T440-CH Unified Wire Ethernet Controller", "T440-CH"), + T_DATA ("T440-CH Unified Wire Ethernet Controller [VF]", "T440-CH"), + T_DATA ("T440-CR Unified Wire Ethernet Controller", "T440-CR"), + T_DATA ("T440-CR Unified Wire Ethernet Controller [VF]", "T440-CR"), + T_DATA ("T440F-4081 T440-FCoE Unified Wire Ethernet Controller", "T440F-4081 T440-FCoE"), + T_DATA ("T440F-4081 T440-FCoE Unified Wire Ethernet Controller [VF]", "T440F-4081 T440-FCoE"), + T_DATA ("T440-LP-CR Unified Wire Ethernet Controller", "T440-LP-CR"), + T_DATA ("T440-LP-CR Unified Wire Ethernet Controller [VF]", "T440-LP-CR"), + T_DATA ("T440T-4087 Unified Wire Ethernet Controller", "T440T-4087"), + T_DATA ("T440T-4087 Unified Wire Ethernet Controller [VF]", "T440T-4087"), + T_DATA ("T480-4080 T480 Unified Wire Ethernet Controller", "T480-4080 T480"), + T_DATA ("T480-4080 T480 Unified Wire Ethernet Controller [VF]", "T480-4080 T480"), + T_DATA ("T480 Unified Wire Ethernet Controller", "T480"), + T_DATA ("T480 Unified Wire Ethernet Controller [VF]", "T480"), + T_DATA ("T502-BT Unified Wire Ethernet Controller", "T502-BT"), + T_DATA ("T502-BT Unified Wire Ethernet Controller [VF]", "T502-BT"), + T_DATA ("T504-5082 Unified Wire Ethernet Controller", "T504-5082"), + T_DATA ("T504-5082 Unified Wire Ethernet Controller [VF]", "T504-5082"), + T_DATA ("T504-BT Unified Wire Ethernet Controller", "T504-BT"), + T_DATA ("T504-BT Unified Wire Ethernet Controller [VF]", "T504-BT"), + T_DATA ("T520-5089 Unified Wire Ethernet Controller", "T520-5089"), + T_DATA ("T520-5089 Unified Wire Ethernet Controller [VF]", "T520-5089"), + T_DATA ("T520-5092 Unified Wire Ethernet Controller", "T520-5092"), + T_DATA ("T520-5092 Unified Wire Ethernet Controller [VF]", "T520-5092"), + T_DATA ("T520-5097 Unified Wire Ethernet Controller", "T520-5097"), + T_DATA ("T520-5097 Unified Wire Ethernet Controller [VF]", "T520-5097"), + T_DATA ("T520-509A Unified Wire Ethernet Controller", "T520-509A"), + T_DATA ("T520-509A Unified Wire Ethernet Controller [VF]", "T520-509A"), + T_DATA ("T520-509C Unified Wire Ethernet Controller", "T520-509C"), + T_DATA ("T520-509C Unified Wire Ethernet Controller [VF]", "T520-509C"), + T_DATA ("T520-509E Unified Wire Ethernet Controller", "T520-509E"), + T_DATA ("T520-509E Unified Wire Ethernet Controller [VF]", "T520-509E"), + T_DATA ("T520-BCH Unified Wire Ethernet Controller", "T520-BCH"), + T_DATA ("T520-BCH Unified Wire Ethernet Controller [VF]", "T520-BCH"), + T_DATA ("T520-BT Unified Wire Ethernet Controller", "T520-BT"), + T_DATA ("T520-BT Unified Wire Ethernet Controller [VF]", "T520-BT"), + T_DATA ("T520-CR Unified Wire Ethernet Controller", "T520-CR"), + T_DATA ("T520-CR Unified Wire Ethernet Controller [VF]", "T520-CR"), + T_DATA ("T520-CX Unified Wire Ethernet Controller", "T520-CX"), + T_DATA ("T520-CX Unified Wire Ethernet Controller [VF]", "T520-CX"), + T_DATA ("T520-LL-CR Unified Wire Ethernet Controller", "T520-LL-CR"), + T_DATA ("T520-LL-CR Unified Wire Ethernet Controller [VF]", "T520-LL-CR"), + T_DATA ("T520-OCP-SO Unified Wire Ethernet Controller", "T520-OCP-SO"), + T_DATA ("T520-OCP-SO Unified Wire Ethernet Controller [VF]", "T520-OCP-SO"), + T_DATA ("T520-SO Unified Wire Ethernet Controller", "T520-SO"), + T_DATA ("T520-SO Unified Wire Ethernet Controller [VF]", "T520-SO"), + T_DATA ("T522-5091 Unified Wire Ethernet Controller", "T522-5091"), + T_DATA ("T522-5091 Unified Wire Ethernet Controller [VF]", "T522-5091"), + T_DATA ("T522-CR Unified Wire Ethernet Controller", "T522-CR"), + T_DATA ("T522-CR Unified Wire Ethernet Controller [VF]", "T522-CR"), + T_DATA ("T540-5080 Unified Wire Ethernet Controller", "T540-5080"), + T_DATA ("T540-5080 Unified Wire Ethernet Controller [VF]", "T540-5080"), + T_DATA ("T540-5081 Unified Wire Ethernet Controller", "T540-5081"), + T_DATA ("T540-5081 Unified Wire Ethernet Controller [VF]", "T540-5081"), + T_DATA ("T540-5083 Unified Wire Ethernet Controller", "T540-5083"), + T_DATA ("T540-5083 Unified Wire Ethernet Controller [VF]", "T540-5083"), + T_DATA ("T540-5084 Unified Wire Ethernet Controller", "T540-5084"), + T_DATA ("T540-5084 Unified Wire Ethernet Controller [VF]", "T540-5084"), + T_DATA ("T540-5090 Unified Wire Ethernet Controller", "T540-5090"), + T_DATA ("T540-5090 Unified Wire Ethernet Controller [VF]", "T540-5090"), + T_DATA ("T540-5094 Unified Wire Ethernet Controller", "T540-5094"), + T_DATA ("T540-5094 Unified Wire Ethernet Controller [VF]", "T540-5094"), + T_DATA ("T540-5095 Unified Wire Ethernet Controller", "T540-5095"), + T_DATA ("T540-5095 Unified Wire Ethernet Controller [VF]", "T540-5095"), + T_DATA ("T540-509B Unified Wire Ethernet Controller", "T540-509B"), + T_DATA ("T540-509B Unified Wire Ethernet Controller [VF]", "T540-509B"), + T_DATA ("T540-509D Unified Wire Ethernet Controller", "T540-509D"), + T_DATA ("T540-509D Unified Wire Ethernet Controller [VF]", "T540-509D"), + T_DATA ("T540-509F Unified Wire Ethernet Controller", "T540-509F"), + T_DATA ("T540-509F Unified Wire Ethernet Controller [VF]", "T540-509F"), + T_DATA ("T540-50A0 Unified Wire Ethernet Controller", "T540-50A0"), + T_DATA ("T540-50A0 Unified Wire Ethernet Controller [VF]", "T540-50A0"), + T_DATA ("T540-50A1 Unified Wire Ethernet Controller", "T540-50A1"), + T_DATA ("T540-50A1 Unified Wire Ethernet Controller [VF]", "T540-50A1"), + T_DATA ("T540-BCH Unified Wire Ethernet Controller", "T540-BCH"), + T_DATA ("T540-BCH Unified Wire Ethernet Controller [VF]", "T540-BCH"), + T_DATA ("T540-BT Unified Wire Ethernet Controller", "T540-BT"), + T_DATA ("T540-BT Unified Wire Ethernet Controller [VF]", "T540-BT"), + T_DATA ("T540-CH Unified Wire Ethernet Controller", "T540-CH"), + T_DATA ("T540-CH Unified Wire Ethernet Controller [VF]", "T540-CH"), + T_DATA ("T540-CR Unified Wire Ethernet Controller", "T540-CR"), + T_DATA ("T540-CR Unified Wire Ethernet Controller [VF]", "T540-CR"), + T_DATA ("T540-LP-CR Unified Wire Ethernet Controller", "T540-LP-CR"), + T_DATA ("T540-LP-CR Unified Wire Ethernet Controller [VF]", "T540-LP-CR"), + T_DATA ("T560-CR Unified Wire Ethernet Controller", "T560-CR"), + T_DATA ("T560-CR Unified Wire Ethernet Controller [VF]", "T560-CR"), + T_DATA ("T570-5088 Unified Wire Ethernet Controller", "T570-5088"), + T_DATA ("T570-5088 Unified Wire Ethernet Controller [VF]", "T570-5088"), + T_DATA ("T580-5085 Unified Wire Ethernet Controller", "T580-5085"), + T_DATA ("T580-5085 Unified Wire Ethernet Controller [VF]", "T580-5085"), + T_DATA ("T580-5086 Unified Wire Ethernet Controller", "T580-5086"), + T_DATA ("T580-5086 Unified Wire Ethernet Controller [VF]", "T580-5086"), + T_DATA ("T580-5087 Unified Wire Ethernet Controller", "T580-5087"), + T_DATA ("T580-5087 Unified Wire Ethernet Controller [VF]", "T580-5087"), + T_DATA ("T580-5093 Unified Wire Ethernet Controller", "T580-5093"), + T_DATA ("T580-5093 Unified Wire Ethernet Controller [VF]", "T580-5093"), + T_DATA ("T580-5096 Unified Wire Ethernet Controller", "T580-5096"), + T_DATA ("T580-5096 Unified Wire Ethernet Controller [VF]", "T580-5096"), + T_DATA ("T580-5098 Unified Wire Ethernet Controller", "T580-5098"), + T_DATA ("T580-5098 Unified Wire Ethernet Controller [VF]", "T580-5098"), + T_DATA ("T580-5099 Unified Wire Ethernet Controller", "T580-5099"), + T_DATA ("T580-5099 Unified Wire Ethernet Controller [VF]", "T580-5099"), + T_DATA ("T580-50A2 Unified Wire Ethernet Controller", "T580-50A2"), + T_DATA ("T580-50A2 Unified Wire Ethernet Controller [VF]", "T580-50A2"), + T_DATA ("T580-CHR Unified Wire Ethernet Controller", "T580-CHR"), + T_DATA ("T580-CHR Unified Wire Ethernet Controller [VF]", "T580-CHR"), + T_DATA ("T580-CR Unified Wire Ethernet Controller", "T580-CR"), + T_DATA ("T580-CR Unified Wire Ethernet Controller [VF]", "T580-CR"), + T_DATA ("T580-LP-CR Unified Wire Ethernet Controller", "T580-LP-CR"), + T_DATA ("T580-LP-CR Unified Wire Ethernet Controller [VF]", "T580-LP-CR"), + T_DATA ("T580-OCP-SO Unified Wire Ethernet Controller", "T580-OCP-SO"), + T_DATA ("T580-OCP-SO Unified Wire Ethernet Controller [VF]", "T580-OCP-SO"), + T_DATA ("T580-SO-CR Unified Wire Ethernet Controller", "T580-SO-CR"), + T_DATA ("T580-SO-CR Unified Wire Ethernet Controller [VF]", "T580-SO-CR"), + T_DATA ("T61100-OCP-SO Unified Wire Ethernet Controller", "T61100-OCP-SO"), + T_DATA ("T61100-OCP-SO Unified Wire Ethernet Controller [VF]", "T61100-OCP-SO"), + T_DATA ("T6201-BT Unified Wire Ethernet Controller", "T6201-BT"), + T_DATA ("T6201-BT Unified Wire Ethernet Controller [VF]", "T6201-BT"), + T_DATA ("T62100-6081 Unified Wire Ethernet Controller", "T62100-6081"), + T_DATA ("T62100-6081 Unified Wire Ethernet Controller [VF]", "T62100-6081"), + T_DATA ("T62100-6083 Unified Wire Ethernet Controller", "T62100-6083"), + T_DATA ("T62100-6083 Unified Wire Ethernet Controller [VF]", "T62100-6083"), + T_DATA ("T62100-CR Unified Wire Ethernet Controller", "T62100-CR"), + T_DATA ("T62100-CR Unified Wire Ethernet Controller [VF]", "T62100-CR"), + T_DATA ("T62100-LP-CR Unified Wire Ethernet Controller", "T62100-LP-CR"), + T_DATA ("T62100-LP-CR Unified Wire Ethernet Controller [VF]", "T62100-LP-CR"), + T_DATA ("T62100-OCP-SO Unified Wire Ethernet Controller", "T62100-OCP-SO"), + T_DATA ("T62100-OCP-SO Unified Wire Ethernet Controller [VF]", "T62100-OCP-SO"), + T_DATA ("T62100-SO-CR Unified Wire Ethernet Controller", "T62100-SO-CR"), + T_DATA ("T62100-SO-CR Unified Wire Ethernet Controller [VF]", "T62100-SO-CR"), + T_DATA ("T6210-BT Unified Wire Ethernet Controller", "T6210-BT"), + T_DATA ("T6210-BT Unified Wire Ethernet Controller [VF]", "T6210-BT"), + T_DATA ("T6225-6080 Unified Wire Ethernet Controller", "T6225-6080"), + T_DATA ("T6225-6080 Unified Wire Ethernet Controller [VF]", "T6225-6080"), + T_DATA ("T6225-6082 Unified Wire Ethernet Controller", "T6225-6082"), + T_DATA ("T6225-6082 Unified Wire Ethernet Controller [VF]", "T6225-6082"), + T_DATA ("T6225-CR Unified Wire Ethernet Controller", "T6225-CR"), + T_DATA ("T6225-CR Unified Wire Ethernet Controller [VF]", "T6225-CR"), + T_DATA ("T6225-LL-CR Unified Wire Ethernet Controller", "T6225-LL-CR"), + T_DATA ("T6225-LL-CR Unified Wire Ethernet Controller [VF]", "T6225-LL-CR"), + T_DATA ("T6225-OCP-SO Unified Wire Ethernet Controller", "T6225-OCP-SO"), + T_DATA ("T6225-OCP-SO Unified Wire Ethernet Controller [VF]", "T6225-OCP-SO"), + T_DATA ("T6225-SO-CR Unified Wire Ethernet Controller", "T6225-SO-CR"), + T_DATA ("T6225-SO-CR Unified Wire Ethernet Controller [VF]", "T6225-SO-CR"), + T_DATA ("T64100-6084 Unified Wire Ethernet Controller", "T64100-6084"), + T_DATA ("T64100-6084 Unified Wire Ethernet Controller [VF]", "T64100-6084"), + T_DATA ("T6425-CR Unified Wire Ethernet Controller", "T6425-CR"), + T_DATA ("T6425-CR Unified Wire Ethernet Controller [VF]", "T6425-CR"), + T_DATA ("T6425-SO-CR Unified Wire Ethernet Controller", "T6425-SO-CR"), + T_DATA ("T6425-SO-CR Unified Wire Ethernet Controller [VF]", "T6425-SO-CR"), + T_DATA ("TalkTalk SNU5630NS/05 802.11bg", "TalkTalk SNU5630NS/05"), + T_DATA ("TC902x Gigabit Ethernet", "TC902x"), + T_DATA ("T-Com Sinus 154 data II [Intersil ISL3887]", "T-Com Sinus 154 data II"), + T_DATA ("TEW-429UB 802.11bg", "TEW-429UB"), + T_DATA ("TEW-429UB C1 802.11bg", "TEW-429UB C1"), + T_DATA ("TEW-444UB EU (no firmware)", "TEW-444UB EU"), + T_DATA ("TEW-444UB EU [TRENDnet]", "TEW-444UB EU"), + T_DATA ("TEW-509UB A1 802.11abg Wireless Adapter [ZyDAS ZD1211]", "TEW-509UB A1"), + T_DATA ("TEW-645UB 802.11bgn 1x2:2 Wireless Adapter [Ralink RT2770]", "TEW-645UB"), + T_DATA ("TEW-648UBM 802.11n 150Mbps Micro Wireless N Adapter [Realtek RTL8188CUS]", "TEW-648UBM"), + T_DATA ("TG54USB 802.11bg", "TG54USB"), + T_DATA ("Thomson TG121N [Atheros AR9001U-(2)NG]", "Thomson TG121N"), + T_DATA ("Top Global Gobi 2000 Wireless Modem", "Top Global Gobi 2000"), + T_DATA ("TP-Link TL-WN322G v3 / TL-WN422G v2 802.11g [Atheros AR9271]", "TP-Link TL-WN322G / TL-WN422G"), + T_DATA ("TP-Link TL-WN821N v2 / TL-WN822N v1 802.11n [Atheros AR9170]", "TP-Link TL-WN821N / TL-WN822N"), + T_DATA ("TP-Link TL-WN821N v3 / TL-WN822N v2 802.11n [Atheros AR7010+AR9287]", "TP-Link TL-WN821N / TL-WN822N"), + T_DATA ("TrueMobile 1300 802.11g Wireless Adapter [Intersil ISL3880]", "TrueMobile 1300"), + T_DATA ("T-Sinus 154data", "T-Sinus 154data"), + T_DATA ("TTP-Monitoring Card V2.0", "TTP-Monitoring"), + T_DATA ("Turbolink UB801RE Wireless 802.11g 54Mbps Network Adapter [RTL8187]", "Turbolink UB801RE"), + T_DATA ("Turbolink UB801R WLAN Adapter", "Turbolink UB801R"), + T_DATA ("U2E", "U2E"), + T_DATA ("U5 802.11g Adapter", "U5"), + T_DATA ("UB81 802.11bgn", "UB81"), + T_DATA ("UB82 802.11abgn", "UB82"), + T_DATA ("Ubiquiti WiFiStation 802.11n [Atheros AR9271]", "Ubiquiti WiFiStation"), + T_DATA ("Ubiquiti WiFiStationEXT 802.11n [Atheros AR9271]", "Ubiquiti WiFiStationEXT"), + T_DATA ("UBS-10BT Ethernet [klsi]", "UBS-10BT"), + T_DATA ("UBS-10BT Ethernet", "UBS-10BT"), + T_DATA ("UC-110T 100Mbps Ethernet [pegasus]", "UC-110T"), + T_DATA ("UC-210T Ethernet", "UC-210T"), + T_DATA ("UF100 Ethernet [pegasus2]", "UF100"), + T_DATA ("UF200 Ethernet", "UF200"), + T_DATA ("ULi 1689,1573 integrated ethernet.", "ULi 1689 1573"), + T_DATA ("Ultimate N WiFi Link 5300", "Ultimate N 5300"), + T_DATA ("un2400 Gobi Wireless Modem", "un2400 Gobi"), + T_DATA ("UniNorth 2 GMAC (Sun GEM)", "UniNorth 2 GMAC"), + T_DATA ("UniNorth GMAC (Sun GEM)", "UniNorth GMAC"), + T_DATA ("UniNorth/Pangea GMAC (Sun GEM)", "UniNorth/Pangea GMAC"), + T_DATA ("UR054g 802.11g Wireless Adapter [Intersil ISL3887]", "UR054g"), + T_DATA ("UR055G 802.11bg", "UR055G"), + T_DATA ("USB1000 Gigabit Notebook Adapter", "USB1000"), + T_DATA ("USB-100N Ethernet [pegasus]", "USB-100N"), + T_DATA ("USB100TX Ethernet [pegasus]", "USB100TX"), + T_DATA ("USB100TX HomePNA Ethernet [pegasus]", "USB100TX HomePNA"), + T_DATA ("USB10TX Ethernet [pegasus]", "USB10TX"), + T_DATA ("USB10TX", "USB10TX"), + T_DATA ("USB 1.1 10/100M Fast Ethernet Adapter", NULL), + T_DATA ("USB200M 100baseTX Adapter", "USB200M 100baseTX"), + T_DATA ("USB200M 10/100 Ethernet Adapter", "USB200M"), + T_DATA ("USB 2.0 Ethernet", NULL), + T_DATA ("USB2AR Ethernet", "USB2AR"), + T_DATA ("USBcan II", "USBcan II"), + T_DATA ("USBE-100 Ethernet [pegasus2]", "USBE-100"), + T_DATA ("USBEL-100 Ethernet [pegasus]", "USBEL-100"), + T_DATA ("USB Ethernet [pegasus]", "pegasus"), + T_DATA ("USB ETT", "ETT"), + T_DATA ("USBLAN", "USBLAN"), + T_DATA ("USBLP-100 HomePNA Ethernet [pegasus]", "USBLP-100 HomePNA"), + T_DATA ("USB-N10 v2 802.11b/g/n Wireless Adapter [MediaTek MT7601U]", "USB-N10"), + T_DATA ("USB-N11 802.11n Network Adapter [Ralink RT2870]", "USB-N11"), + T_DATA ("USB-N13 802.11n Network Adapter (rev. A1) [Ralink RT3072]", "USB-N13"), + T_DATA ("USB-N13 802.11n Network Adapter (rev. B1) [Realtek RTL8192CU]", "USB-N13"), + T_DATA ("USB-N14 802.11b/g/n (2x2) Wireless Adapter [Ralink RT5372]", "USB-N14"), + T_DATA ("USB-N53 802.11abgn Network Adapter [Ralink RT3572]", "USB-N53"), + T_DATA ("USB TO Ethernet", NULL), + T_DATA ("USR5420 802.11g Adapter [Broadcom 4320 USB]", "USR5420"), + T_DATA ("USR5423 802.11bg Wireless Adapter [ZyDAS ZD1211B]", "USR5423"), + T_DATA ("USR997902 10/100/1000 Mbps PCI Network Card", "USR997902 Mbps"), + T_DATA ("VIC Ethernet NIC Dynamic", "VIC Dynamic"), + T_DATA ("VIC Ethernet NIC", "VIC"), + T_DATA ("VIC SR-IOV VF", "VIC SR-IOV VF"), + T_DATA ("Vigor530 IEEE 802.11G Adapter (ISL3880+NET2280)", "Vigor530"), + T_DATA ("Virtual media for 802.11bg", NULL), + T_DATA ("VMXNET3 Ethernet Controller", "VMXNET3"), + T_DATA ("VT6102/VT6103 [Rhine-II]", "VT6102/VT6103"), + T_DATA ("VT6105M [Rhine-III]", "VT6105M"), + T_DATA ("VT6105/VT6106S [Rhine-III]", "VT6105/VT6106S"), + T_DATA ("VT6120/VT6121/VT6122 Gigabit Ethernet Adapter", "VT6120/VT6121/VT6122"), + T_DATA ("VT82C926 [Amazon]", "VT82C926"), + T_DATA ("VT86C100A [Rhine]", "VT86C100A"), + T_DATA ("W89C840", "W89C840"), + T_DATA ("W89C940F", "W89C940F"), + T_DATA ("W89C940 misprogrammed [ne2k]", "W89C940"), + T_DATA ("W89C940", "W89C940"), + T_DATA ("WG111T (no firmware)", "WG111T"), + T_DATA ("WG111T", "WG111T"), + T_DATA ("WG111U Double 108 Mbps Wireless [Atheros AR5004X / AR5005UX]", "WG111U"), + T_DATA ("WG111U (no firmware) Double 108 Mbps Wireless [Atheros AR5004X / AR5005UX]", "WG111U"), + T_DATA ("WG111(v1) 54 Mbps Wireless [Intersil ISL3886]", "WG111"), + T_DATA ("WG111(v1) rev 2 54 Mbps Wireless [Intersil ISL3887]", "WG111"), + T_DATA ("WG111v2 54 Mbps Wireless [RealTek RTL8187L]", "WG111v2"), + T_DATA ("WG111v3 54 Mbps Wireless [realtek RTL8187B]", "WG111v3"), + T_DATA ("WG121(v1) 54 Mbps Wireless [Intersil ISL3886]", "WG121"), + T_DATA ("WG121(v2) 54 Mbps Wireless [Intersil ISL3886]", "WG121"), + T_DATA ("WGU-210 802.11g Adapter [Intersil ISL3886]", "WGU-210"), + T_DATA ("WHG-AGDN/US Wireless LAN Adapter", "WHG-AGDN/US"), + T_DATA ("Wi-Fi 11g adapter", NULL), + T_DATA ("WiFi Link 5100", "5100"), + T_DATA ("Wil6200 802.11ad Wireless Network Adapter", "Wil6200"), + T_DATA ("WiMAX/WiFi Link 5150", "5150"), + T_DATA ("Wireless 11n USB Adapter", "11n"), + T_DATA ("Wireless 1450 Dual-band (802.11a/b/g) Adapter [Intersil ISL3887]", "1450"), + T_DATA ("Wireless 3160", "3160"), + T_DATA ("Wireless 3165", "3165"), + T_DATA ("Wireless 7260", "7260"), + T_DATA ("Wireless 7265", "7265"), + T_DATA ("Wireless 802.11g 54Mbps Network Adapter [RTL8187]", "RTL8187"), + T_DATA ("Wireless 8260", "8260"), + T_DATA ("Wireless 8265 / 8275", "8265 / 8275"), + T_DATA ("Wireless Adapter 11g", NULL), + T_DATA ("Wireless LAN USB Mini-Card", NULL), + T_DATA ("Wireless MAXg Adapter [Broadcom 4320]", "MAXg"), + T_DATA ("Wireless Network Adapter", NULL), + T_DATA ("Wireless-N Network Adapter [Ralink RT2870]", "Ralink RT2870"), + T_DATA ("Wireless PCI Adapter RT2400 / RT2460", "RT2400 / RT2460"), + T_DATA ("WIS09ABGN LinkStick Wireless LAN Adapter", "WIS09ABGN LinkStick"), + T_DATA ("WL-113 rev 1 Wireless Network USB Adapter", "WL-113"), + T_DATA ("WL-113 rev 2 Wireless Network USB Adapter", "WL-113"), + T_DATA ("WL-117 Hi-Speed USB Adapter", "WL-117"), + T_DATA ("WL1271", "WL1271"), + T_DATA ("WL-159g 802.11bg [ZyDAS ZD1211B+AL2230]", "WL-159g"), + T_DATA ("WL-167G v1 802.11g Adapter [Ralink RT2571]", "WL-167G"), + T_DATA ("WL-167G v2 802.11g Adapter [Ralink RT2571W]", "WL-167G"), + T_DATA ("WL-168 Wireless Network Adapter 54g", "WL-168"), + T_DATA ("WL169gE 802.11g Adapter [Broadcom 4320 USB]", "WL169gE"), + T_DATA ("WL-172 Wireless Network USB Adapter 54g Turbo", "WL-172 Turbo"), + T_DATA ("WL-182 Wireless-N Network USB Card", "WL-182"), + T_DATA ("WL-188 Wireless Network 300N USB Adapter", "WL-188 300N"), + T_DATA ("WL-301 Wireless Network 300N USB Adapter", "WL-301 300N"), + T_DATA ("WL-302 Wireless Network 300N USB dongle", "WL-302 300N"), + T_DATA ("WL-315 Wireless-N USB Adapter", "WL-315"), + T_DATA ("WL-321 Wireless USB Gaming Adapter 300N", "WL-321 Gaming 300N"), + T_DATA ("WL-323 Wireless-N USB Adapter", "WL-323"), + T_DATA ("WL-324 Wireless USB Adapter 300N", "WL-324 300N"), + T_DATA ("WL-329 Wireless Dualband USB adapter 300N", "WL-329 Dualband 300N"), + T_DATA ("WL-343 Wireless USB Adapter 150N X1", "WL-343 150N X1"), + T_DATA ("WL-344 Wireless Adapter 300N X2 [Ralink RT3071]", "WL-344 300N X2"), + T_DATA ("WL-345 Wireless USB adapter 300N X3", "WL-345 300N X3"), + T_DATA ("WL-349v1 Wireless Adapter 150N 002 [Ralink RT3070]", "WL-349v1 150N 002"), + T_DATA ("WL-349v4 Wireless Micro Adapter 150N X1 [Ralink RT3370]", "WL-349v4 150N X1"), + T_DATA ("WL-352v1 Wireless USB Adapter 300N 002", "WL-352v1 300N 002"), + T_DATA ("WL-358v1 Wireless Micro USB Adapter 300N X3 002", "WL-358v1 300N X3 002"), + T_DATA ("WL-430U 802.11bg", "WL-430U"), + T_DATA ("WL532U 802.11g Adapter", "WL532U"), + T_DATA ("WL-603 Wireless Adapter", "WL-603"), + T_DATA ("WL-608 Wireless USB Adapter 54g", "WL-608"), + T_DATA ("WLA3310 Wireless Adapter [Intersil ISL3887]", "WLA3310"), + T_DATA ("WLA-4000 802.11bgn [Ralink RT3072]", "WLA-4000"), + T_DATA ("WLA-5000 802.11abgn [Ralink RT3572]", "WLA-5000"), + T_DATA ("WLA-5100", "WLA-5100"), + T_DATA ("WLI2-USB2-G54 Wireless LAN Adapter", "WLI2-USB2-G54"), + T_DATA ("WLI-U2-G54HP", "WLI-U2-G54HP"), + T_DATA ("WLI-U2-KG125S 802.11g Adapter [Broadcom 4320 USB]", "WLI-U2-KG125S"), + T_DATA ("WLI-U2-KG54-AI WLAN", "WLI-U2-KG54-AI"), + T_DATA ("WLI-U2-KG54-BB", "WLI-U2-KG54-BB"), + T_DATA ("WLI-U2-KG54L 802.11bg [ZyDAS ZD1211B]", "WLI-U2-KG54L"), + T_DATA ("WLI-U2-KG54 WLAN", "WLI-U2-KG54"), + T_DATA ("WLI-U2-KG54-YB WLAN", "WLI-U2-KG54-YB"), + T_DATA ("WLI-U2-SG54HP", "WLI-U2-SG54HP"), + T_DATA ("WLI-UC-AG300N Wireless LAN Adapter", "WLI-UC-AG300N"), + T_DATA ("WLI-UC-G300HP Wireless LAN Adapter", "WLI-UC-G300HP"), + T_DATA ("WLI-UC-G300N Wireless LAN Adapter [Ralink RT2870]", "WLI-UC-G300N"), + T_DATA ("WLI-UC-G301N Wireless LAN Adapter [Ralink RT3072]", "WLI-UC-G301N"), + T_DATA ("WLI-UC-G450 Wireless LAN Adapter", "WLI-UC-G450"), + T_DATA ("WLI-UC-GNHP Wireless LAN Adapter", "WLI-UC-GNHP"), + T_DATA ("WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]", "WLI-UC-GNM2"), + T_DATA ("WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]", "WLI-UC-GNM"), + T_DATA ("WLI-UC-GN Wireless LAN Adapter [Ralink RT3070]", "WLI-UC-GN"), + T_DATA ("WLI-USB-G54 802.11g Adapter [Broadcom 4320 USB]", "WLI-USB-G54"), + T_DATA ("WLM-10U1 802.11abgn Wireless Adapter [Ralink RT3572]", "WLM-10U1"), + T_DATA ("WLM-20U2/GN-1080 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]", "WLM-20U2/GN-1080"), + T_DATA ("WLP-UC-AG300 Wireless LAN Adapter", "WLP-UC-AG300"), + T_DATA ("WM168g 802.11bg Wireless Adapter [Intersil ISL3886]", "WM168g"), + T_DATA ("WN111(v2) RangeMax Next Wireless [Atheros AR9170+AR9101]", "WN111"), + T_DATA ("WNA1000M 802.11bgn [Realtek RTL8188CUS]", "WNA1000M"), + T_DATA ("WNA1000Mv2 802.11bgn [Realtek RTL8188CUS?]", "WNA1000Mv2"), + T_DATA ("WNA1000 Wireless-N 150 [Atheros AR9170+AR9101]", "WNA1000 150"), + T_DATA ("WNA1100 Wireless-N 150 [Atheros AR9271]", "WNA1100 150"), + T_DATA ("WNA3100M(v1) Wireless-N 300 [Realtek RTL8192CU]", "WNA3100M"), + T_DATA ("WNDA3100v1 802.11abgn [Atheros AR9170+AR9104]", "WNDA3100v1"), + T_DATA ("WNDA3200 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]", "WNDA3200"), + T_DATA ("WNDA4100 802.11abgn 3x3:3 [Ralink RT3573]", "WNDA4100"), + T_DATA ("WN-G150U Wireless LAN Adapter", "WN-G150U"), + T_DATA ("WN-G300U Wireless LAN Adapter", "WN-G300U"), + T_DATA ("WNGDNUS2 802.11n", "WNGDNUS2"), + T_DATA ("WN-GDN/US3 Wireless LAN Adapter", "WN-GDN/US3"), + T_DATA ("WPN111 802.11g Wireless Adapter [Atheros AR5523]", "WPN111"), + T_DATA ("WPN111 (no firmware)", "WPN111"), + T_DATA ("WPN111 RangeMax(TM) Wireless USB 2.0 Adapter", "WPN111 RangeMax"), + T_DATA ("WUA-1340", "WUA-1340"), + T_DATA ("WUA-2340 RangeBooster G Adapter(rev.A) [Atheros AR5523]", "WUA-2340 RangeBooster"), + T_DATA ("WUA-2340 RangeBooster G Adapter(rev.A) (no firmware) [Atheros AR5523]", "WUA-2340 RangeBooster"), + T_DATA ("WUA-2340 RangeBooster G Adapter(rev.B) [Ralink RT2070]", "WUA-2340 RangeBooster"), + T_DATA ("WUBR-177G [Ralink RT2571W]", "WUBR-177G"), + T_DATA ("WUBR-208N 802.11abgn Wireless Adapter [Ralink RT2870]", "WUBR-208N"), + T_DATA ("WUG2690 802.11bg Wireless Module [ZyDAS ZD1211+AL2230]", "WUG2690"), + T_DATA ("WUG2700", "WUG2700"), + T_DATA ("WUS-201 802.11bg", "WUS-201"), + T_DATA ("WUSB100 v1 RangePlus Wireless Network Adapter [Ralink RT2870]", "WUSB100 RangePlus"), + T_DATA ("WUSB100 v2 RangePlus Wireless Network Adapter [Ralink RT3070]", "WUSB100 RangePlus"), + T_DATA ("WUSB200 802.11g Adapter [Ralink RT2671]", "WUSB200"), + T_DATA ("WUSB54AG 802.11a/g Adapter [Intersil ISL3887]", "WUSB54AG"), + T_DATA ("WUSB54GC v1 802.11g Adapter [Ralink RT73]", "WUSB54GC"), + T_DATA ("WUSB54GC v2 802.11g Adapter [Realtek RTL8187B]", "WUSB54GC"), + T_DATA ("WUSB54GC v3 802.11g Adapter [Ralink RT2070L]", "WUSB54GC"), + T_DATA ("WUSB54GP v1 802.11g Adapter [Intersil ISL3886]", "WUSB54GP"), + T_DATA ("WUSB54GP v4.0 802.11g Adapter [Ralink RT2500USB]", "WUSB54GP v4.0"), + T_DATA ("WUSB54GR", "WUSB54GR"), + T_DATA ("WUSB54GSC v1 802.11g Adapter [Broadcom 4320 USB]", "WUSB54GSC"), + T_DATA ("WUSB54GS v1 802.11g Adapter [Broadcom 4320 USB]", "WUSB54GS"), + T_DATA ("WUSB54GS v2 802.11g Adapter [Broadcom 4320 USB]", "WUSB54GS"), + T_DATA ("WUSB54G v1 802.11g Adapter [Intersil ISL3886]", "WUSB54G"), + T_DATA ("WUSB54G v2 802.11g Adapter [Intersil ISL3887]", "WUSB54G"), + T_DATA ("WUSB54G v4 802.11g Adapter [Ralink RT2500USB]", "WUSB54G"), + T_DATA ("WUSB600N v1 Dual-Band Wireless-N Network Adapter [Ralink RT2870]", "WUSB600N Dual-Band"), + T_DATA ("WUSB600N v2 Dual-Band Wireless-N Network Adapter [Ralink RT3572]", "WUSB600N Dual-Band"), + T_DATA ("WUSBF54G 802.11bg", "WUSBF54G"), + T_DATA ("WUSBF54G v1.1 802.11bg", "WUSBF54G"), + T_DATA ("X3100 Series 10 Gigabit Ethernet PCIe", "X3100"), + T_DATA ("X540 Ethernet Controller Virtual Function", "X540 Virtual Function"), + T_DATA ("X540 Virtual Function", "X540 Virtual Function"), + T_DATA ("X550 Virtual Function", "X550 Virtual Function"), + T_DATA ("X552 Virtual Function", "X552 Virtual Function"), + T_DATA ("X553 Virtual Function", "X553 Virtual Function"), + T_DATA ("X722 Virtual Function", "X722 Virtual Function"), + T_DATA ("Xframe 10-Gigabit Ethernet PCI-X", "Xframe"), + T_DATA ("Xframe II 10-Gigabit Ethernet PCI-X 2.0", "Xframe II 2.0"), + T_DATA ("XG-300 802.11b Adapter", "XG-300"), + T_DATA ("XG-703A 802.11g Wireless Adapter [Intersil ISL3887]", "XG-703A"), + T_DATA ("XG-705A 802.11g Wireless Adapter [Intersil ISL3887]", "XG-705A"), + T_DATA ("XG-760A 802.11bg", "XG-760A"), + T_DATA ("XG-76NA 802.11bg", "XG-76NA"), + T_DATA ("XG Mgmt", "XG Mgmt"), + T_DATA ("Xircom PGUNET USB-USB Bridge", "Xircom PGUNET USB-USB Bridge"), + T_DATA ("XL710/X710 Virtual Function", "XL710/X710 Virtual Function"), + T_DATA ("XX1", "XX1"), + T_DATA ("XX2", "XX2"), + T_DATA ("XX4", "XX4"), + T_DATA ("XX5", "XX5"), + T_DATA ("XX6", "XX6"), + T_DATA ("XX7", "XX7"), + T_DATA ("XX9", "XX9"), + T_DATA ("Yellowfin G-NIC gigabit ethernet", "Yellowfin"), + T_DATA ("YP3X00 PDA", "YP3X00"), + T_DATA ("Yukon Optima 88E8059 [PCIe Gigabit Ethernet Controller with AVB]", "Yukon Optima 88E8059"), + T_DATA ("Zaurus A-300", "Zaurus A-300"), + T_DATA ("Zaurus C-700 PDA", "Zaurus C-700"), + T_DATA ("Zaurus C-750/C-760/C-860/SL-C3000 PDA", "Zaurus C-750/C-760/C-860/SL-C3000"), + T_DATA ("Zaurus C-860 PDA", "Zaurus C-860"), + T_DATA ("Zaurus SL-5000D/SL-5500 PDA", "Zaurus SL-5000D/SL-5500"), + T_DATA ("Zaurus SL-6000", "Zaurus SL-6000"), + T_DATA ("Zaurus SL-B500/SL-5600 PDA", "Zaurus SL-B500/SL-5600"), + T_DATA ("ZD1211 802.11b/g Wireless Adapter", "ZD1211"), + T_DATA ("ZD1211 802.11g", "ZD1211"), + T_DATA ("ZD1211B 802.11g", "ZD1211B"), + T_DATA ("ZD1211B", "ZD1211B"), + T_DATA ("ZD1221 802.11n", "ZD1221"), + T_DATA ("Zoom 4410 Wireless-G [Intersil ISL3887]", "Zoom 4410"), + T_DATA ("ZT6688 Fast Ethernet Adapter", "ZT6688"), + T_DATA ("ZyAIR AG-225H v2 802.11bg", "ZyAIR AG-225H"), + T_DATA ("ZyAIR G-202 802.11bg", "ZyAIR G-202"), + T_DATA ("ZyAIR G-220 802.11bg", "ZyAIR G-220"), + T_DATA ("ZyAIR G-220F 802.11bg", "ZyAIR G-220F"), + }; + + _test_fixup_string (data, G_N_ELEMENTS (data), nm_utils_fixup_product_string); } /*****************************************************************************/ @@ -63,7 +2164,8 @@ int main (int argc, char **argv) { nmtst_init (&argc, &argv, TRUE); - g_test_add_func ("/libnm/general/fixup_desc_string", test_fixup_desc_string); + g_test_add_func ("/libnm/general/fixup_product_string", test_fixup_product_string); + g_test_add_func ("/libnm/general/fixup_vendor_string", test_fixup_vendor_string); return g_test_run (); } diff --git a/libnm/tests/test-secret-agent.c b/libnm/tests/test-secret-agent.c index 77f972f5..25752e9a 100644 --- a/libnm/tests/test-secret-agent.c +++ b/libnm/tests/test-secret-agent.c @@ -349,10 +349,9 @@ connection_activated_none_cb (GObject *c, gpointer user_data) { TestSecretAgentData *sadata = user_data; - NMActiveConnection *ac; gs_free_error GError *error = NULL; - ac = nm_client_activate_connection_finish (sadata->client, result, &error); + nm_client_activate_connection_finish (sadata->client, result, &error); g_assert_error (error, NM_AGENT_MANAGER_ERROR, NM_AGENT_MANAGER_ERROR_NO_SECRETS); g_main_loop_quit (sadata->loop); -- cgit 1.3.0-6-gf8a5 From ee9c73a923909e23a649407be77e25235d769e25 Mon Sep 17 00:00:00 2001 From: Michael Biebl Date: Fri, 11 May 2018 22:08:45 +0200 Subject: New upstream version 1.10.8 --- libnm/NetworkManager.h | 2 - libnm/fake-typelib/NMClient.gir | 9 - libnm/fake-typelib/NetworkManager.gir | 10 - libnm/fake-typelib/meson.build | 30 - libnm/fake-typelib/typelibs.gresource.xml | 7 - libnm/generate-plugin-docs.pl | 20 +- libnm/generate-setting-docs.py | 5 - libnm/libnm.ver | 30 - libnm/meson.build | 259 ---- libnm/nm-access-point.c | 2 +- libnm/nm-active-connection.c | 4 +- libnm/nm-autoptr.h | 85 -- libnm/nm-checkpoint.c | 219 --- libnm/nm-checkpoint.h | 53 - libnm/nm-client.c | 421 +----- libnm/nm-client.h | 52 - libnm/nm-dbus-helpers.h | 4 - libnm/nm-device-bond.c | 4 +- libnm/nm-device-bridge.c | 4 +- libnm/nm-device-ip-tunnel.c | 36 - libnm/nm-device-ip-tunnel.h | 4 - libnm/nm-device-team.c | 4 +- libnm/nm-device-wifi.c | 4 +- libnm/nm-device-wimax.c | 4 +- libnm/nm-device.c | 290 ++-- libnm/nm-dhcp-config.c | 6 +- libnm/nm-dhcp4-config.h | 11 +- libnm/nm-dhcp6-config.h | 11 +- libnm/nm-dns-manager.h | 11 +- libnm/nm-enum-types.c.template | 76 - libnm/nm-enum-types.h.template | 22 - libnm/nm-ip-config.c | 2 +- libnm/nm-ip4-config.h | 11 +- libnm/nm-ip6-config.h | 11 +- libnm/nm-libnm-utils.c | 591 +------- libnm/nm-libnm-utils.h | 9 +- libnm/nm-manager.c | 429 +----- libnm/nm-manager.h | 52 +- libnm/nm-object-private.h | 4 - libnm/nm-object.c | 9 +- libnm/nm-property-docs.xml | 33 +- libnm/nm-remote-connection-private.h | 4 - libnm/nm-remote-connection.c | 39 +- libnm/nm-remote-connection.h | 8 +- libnm/nm-remote-settings.h | 12 +- libnm/nm-secret-agent-old.c | 14 +- libnm/nm-settings-docs.xml | 33 +- libnm/nm-settings-ifcfg-rh-docs.xml | 9 +- libnm/nm-types.h | 1 - libnm/nm-vpn-editor.h | 2 +- libnm/nm-vpn-plugin-old.c | 123 +- libnm/nm-vpn-service-plugin.c | 191 +-- libnm/nm-vpn-service-plugin.h | 3 - libnm/tests/meson.build | 42 - libnm/tests/test-general.c | 2142 +---------------------------- libnm/tests/test-secret-agent.c | 3 +- 56 files changed, 604 insertions(+), 4872 deletions(-) delete mode 100644 libnm/fake-typelib/NMClient.gir delete mode 100644 libnm/fake-typelib/NetworkManager.gir delete mode 100644 libnm/fake-typelib/meson.build delete mode 100644 libnm/fake-typelib/typelibs.gresource.xml delete mode 100644 libnm/meson.build delete mode 100644 libnm/nm-autoptr.h delete mode 100644 libnm/nm-checkpoint.c delete mode 100644 libnm/nm-checkpoint.h delete mode 100644 libnm/nm-enum-types.c.template delete mode 100644 libnm/nm-enum-types.h.template delete mode 100644 libnm/tests/meson.build (limited to 'libnm') diff --git a/libnm/NetworkManager.h b/libnm/NetworkManager.h index e04911c6..2bdd2ed9 100644 --- a/libnm/NetworkManager.h +++ b/libnm/NetworkManager.h @@ -108,8 +108,6 @@ #include "nm-vpn-service-plugin.h" #include "nm-wimax-nsp.h" -#include "nm-autoptr.h" - #undef __NETWORKMANAGER_H_INSIDE__ #endif /* __NETWORKMANAGER_H__ */ diff --git a/libnm/fake-typelib/NMClient.gir b/libnm/fake-typelib/NMClient.gir deleted file mode 100644 index 3002f8d6..00000000 --- a/libnm/fake-typelib/NMClient.gir +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/libnm/fake-typelib/NetworkManager.gir b/libnm/fake-typelib/NetworkManager.gir deleted file mode 100644 index d15d29af..00000000 --- a/libnm/fake-typelib/NetworkManager.gir +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/libnm/fake-typelib/meson.build b/libnm/fake-typelib/meson.build deleted file mode 100644 index c0a779a2..00000000 --- a/libnm/fake-typelib/meson.build +++ /dev/null @@ -1,30 +0,0 @@ -g_ir_compiler = find_program('g-ir-compiler') - -girs = [ - 'NetworkManager', - 'NMClient' -] - -resource_data = [] - -foreach gir: girs - gir_typelib = gir + '.typelib' - - resource_data += custom_target( - gir_typelib, - input: gir + '.gir', - output: gir_typelib, - command: [g_ir_compiler, '@INPUT@', '-o', '@OUTPUT@'] - ) -endforeach - -resource = 'typelibs' - -sources += gnome.compile_resources( - resource, - resource + '.gresource.xml', - source_dir: '.', - dependencies: resource_data, - extra_args: '--manual-register', - export: true -) diff --git a/libnm/fake-typelib/typelibs.gresource.xml b/libnm/fake-typelib/typelibs.gresource.xml deleted file mode 100644 index 9a71d975..00000000 --- a/libnm/fake-typelib/typelibs.gresource.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - NetworkManager.typelib - NMClient.typelib - - diff --git a/libnm/generate-plugin-docs.pl b/libnm/generate-plugin-docs.pl index e4963b7c..24912a03 100755 --- a/libnm/generate-plugin-docs.pl +++ b/libnm/generate-plugin-docs.pl @@ -46,14 +46,25 @@ use v5.10; # global variables my @keywords = ("property", "variable", "format", "values", "default", "example", "description"); +my @source_files; my @data; my $fo; -(scalar @ARGV >= 3) or die "Usage: $0 \n"; -my ($plugin, $output, (@source_files)) = @ARGV; +(scalar @ARGV == 3) or die "Usage: $0 \n"; +my ($plugin, $srcdir, $output) = @ARGV; my $start_tag = "---$plugin---\\s*\$"; my $end_tag = '---end---'; +# get source files to scan for documentation comments (nm-setting-.c) +my $file = "$srcdir/Makefile.am"; +open my $fh, '<', $file or die "Can't open $file: $!"; +while (my $line = <$fh>) { + if ($line =~ /^\t*(libnm-core\/nm-setting-[^.]*\.c)( \\)?$/g) { + push @source_files, $1; + } +} +close $fh; + # open output file open $fo, '>', $output or die "Can't open $output: $!"; @@ -62,10 +73,11 @@ write_header(); # write generated documenation for each setting foreach my $c_file (@source_files) { - my $setting_name = get_setting_name($c_file); + my $path = "$srcdir/$c_file"; + my $setting_name = get_setting_name($path); if ($setting_name) { write_item(""); - scan_doc_comments($c_file, $start_tag, $end_tag); + scan_doc_comments($path, $start_tag, $end_tag); write_item(""); } } diff --git a/libnm/generate-setting-docs.py b/libnm/generate-setting-docs.py index 22552615..f888ff22 100755 --- a/libnm/generate-setting-docs.py +++ b/libnm/generate-setting-docs.py @@ -183,7 +183,6 @@ def usage(): exit() parser = argparse.ArgumentParser() -parser.add_argument('-l', '--lib-path', metavar='PATH', action='append', help='path to scan for shared libraries') parser.add_argument('-g', '--gir', metavar='FILE', help='NM-1.0.gir file') parser.add_argument('-x', '--overrides', metavar='FILE', help='documentation overrides file') parser.add_argument('-o', '--output', metavar='FILE', help='output file') @@ -192,10 +191,6 @@ args = parser.parse_args() if args.gir is None or args.output is None: usage() -if args.lib_path: - for lib in args.lib_path: - GIRepository.Repository.prepend_library_path(lib) - girxml = ET.parse(args.gir).getroot() outfile = open(args.output, mode='w') diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 564cdb39..7646a931 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -1331,33 +1331,3 @@ global: nm_utils_tc_tfilter_from_str; nm_utils_tc_tfilter_to_str; } libnm_1_10_0; - -libnm_1_12_0 { -global: - nm_checkpoint_create_flags_get_type; - nm_checkpoint_get_created; - nm_checkpoint_get_devices; - nm_checkpoint_get_rollback_timeout; - nm_checkpoint_get_type; - nm_client_checkpoint_adjust_rollback_timeout; - nm_client_checkpoint_adjust_rollback_timeout_finish; - nm_client_checkpoint_create; - nm_client_checkpoint_create_finish; - nm_client_checkpoint_destroy; - nm_client_checkpoint_destroy_finish; - nm_client_checkpoint_rollback; - nm_client_checkpoint_rollback_finish; - nm_client_get_checkpoints; - nm_device_ip_tunnel_get_flags; - nm_ip_tunnel_flags_get_type; - nm_remote_connection_get_flags; - nm_setting_connection_get_mdns; - nm_setting_connection_mdns_get_type; - nm_setting_ip_tunnel_get_flags; - nm_setting_vpn_get_data_keys; - nm_setting_vpn_get_secret_keys; - nm_setting_wireless_security_get_fils; - nm_setting_wireless_security_fils_get_type; - nm_settings_connection_flags_get_type; - nm_vpn_service_plugin_shutdown; -} libnm_1_10_0; diff --git a/libnm/meson.build b/libnm/meson.build deleted file mode 100644 index 4e985b0a..00000000 --- a/libnm/meson.build +++ /dev/null @@ -1,259 +0,0 @@ -libnm_inc = include_directories('.') - -sources = files('nm-libnm-utils.c') - -deps = [ - libnmdbus_dep, - shared_dep -] - -cflags = [ - '-DG_LOG_DOMAIN="@0@"'.format(libnm_name), - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM', - '-DNMRUNDIR="@0@"'.format(nm_pkgrundir) -] - -if have_fake_typelibs - deps += gir_dep - subdir('fake-typelib') -endif - -libnm_utils = static_library( - 'nm-utils', - sources: sources, - include_directories: libnm_core_inc, - dependencies: deps, - c_args: cflags -) - -libnm_headers = files( - 'NetworkManager.h', - 'nm-access-point.h', - 'nm-active-connection.h', - 'nm-checkpoint.h', - 'nm-client.h', - 'nm-device-adsl.h', - 'nm-device-bond.h', - 'nm-device-bridge.h', - 'nm-device-bt.h', - 'nm-device-dummy.h', - 'nm-device-ethernet.h', - 'nm-device-generic.h', - 'nm-device.h', - 'nm-device-infiniband.h', - 'nm-device-ip-tunnel.h', - 'nm-device-macsec.h', - 'nm-device-macvlan.h', - 'nm-device-modem.h', - 'nm-device-olpc-mesh.h', - 'nm-device-ovs-interface.h', - 'nm-device-ovs-port.h', - 'nm-device-ovs-bridge.h', - 'nm-device-ppp.h', - 'nm-device-team.h', - 'nm-device-tun.h', - 'nm-device-vlan.h', - 'nm-device-vxlan.h', - 'nm-device-wifi.h', - 'nm-device-wimax.h', - 'nm-dhcp-config.h', - 'nm-ip-config.h', - 'nm-object.h', - 'nm-remote-connection.h', - 'nm-secret-agent-old.h', - 'nm-types.h', - 'nm-vpn-connection.h', - 'nm-vpn-editor.h', - 'nm-vpn-plugin-old.h', - 'nm-vpn-service-plugin.h', - 'nm-wimax-nsp.h' -) - -install_headers( - libnm_core_headers + libnm_headers + [version_header], - subdir: libnm_name -) - -enum_headers = libnm_headers + [version_header] -enum_types = 'nm-enum-types' - -libnm_enum = gnome.mkenums( - enum_types, - sources: enum_headers, - identifier_prefix: nm_id_prefix, - c_template: enum_types + '.c.template', - h_template: enum_types + '.h.template', - install_header: true, - install_dir: libnm_pkgincludedir -) - -libnm_sources = files( - 'nm-access-point.c', - 'nm-active-connection.c', - 'nm-checkpoint.c', - 'nm-client.c', - 'nm-dbus-helpers.c', - 'nm-device-adsl.c', - 'nm-device-bond.c', - 'nm-device-bridge.c', - 'nm-device-bt.c', - 'nm-device.c', - 'nm-device-dummy.c', - 'nm-device-ethernet.c', - 'nm-device-generic.c', - 'nm-device-infiniband.c', - 'nm-device-ip-tunnel.c', - 'nm-device-macsec.c', - 'nm-device-macvlan.c', - 'nm-device-modem.c', - 'nm-device-olpc-mesh.c', - 'nm-device-ovs-interface.c', - 'nm-device-ovs-port.c', - 'nm-device-ovs-bridge.c', - 'nm-device-ppp.c', - 'nm-device-team.c', - 'nm-device-tun.c', - 'nm-device-vlan.c', - 'nm-device-vxlan.c', - 'nm-device-wifi.c', - 'nm-device-wimax.c', - 'nm-dhcp-config.c', - 'nm-dhcp4-config.c', - 'nm-dhcp6-config.c', - 'nm-dns-manager.c', - 'nm-ip-config.c', - 'nm-ip4-config.c', - 'nm-ip6-config.c', - 'nm-manager.c', - 'nm-object.c', - 'nm-remote-connection.c', - 'nm-remote-settings.c', - 'nm-secret-agent-old.c', - 'nm-vpn-connection.c', - 'nm-vpn-plugin-old.c', - 'nm-vpn-editor.c', - 'nm-vpn-service-plugin.c', - 'nm-wimax-nsp.c' -) - -deps = [ - dl_dep, - libudev_dep, - shared_dep, - uuid_dep -] - -linker_script = join_paths(meson.current_source_dir(), 'libnm.ver') - - -libnm = shared_library( - 'nm', - sources: libnm_sources + libnm_enum, - version: libnm_version, - include_directories: libnm_core_inc, - dependencies: deps, - c_args: cflags, - link_with: libnm_utils, - link_whole: libnm_core, - link_args: [ - '-Wl,--version-script,@0@'.format(linker_script), - ], - link_depends: linker_script, - install: true -) - -libnm_dep = declare_dependency( - sources: libnm_enum[1], - include_directories: libnm_inc, - link_with: libnm -) - -pkg.generate( - libraries: libnm, - version: nm_version, - name: libnm_name, - description: 'Convenience library for clients of NetworkManager', - filebase: libnm_name, - subdirs: libnm_name, - requires: 'gio-2.0', - variables: [ - 'exec_prefix=${prefix}', - 'vpnservicedir=' + join_paths(nm_pkglibdir, 'VPN') - ] -) - -run_target( - 'check-local-exports-' + libnm_name, - command: [check_exports, libnm.full_path(), linker_script], - depends: libnm -) - -if enable_introspection - gir_sources = libnm_core_enum + libnm_core_headers + libnm_core_sources + libnm_enum + libnm_headers + libnm_sources + [version_header] - - libnm_gir = gnome.generate_gir( - libnm, - sources: gir_sources, - nsversion: nm_gir_version, - namespace: 'NM', - identifier_prefix: nm_id_prefix, - symbol_prefix: nm_id_prefix.to_lower(), - export_packages: libnm_name, - includes: 'Gio-2.0', - extra_args: cflags, - header: 'NetworkManager.h', - install: true - ) - - generate_plugin_docs = join_paths(meson.current_source_dir(), 'generate-plugin-docs.pl') - - name = 'nm-settings-keyfile-docs.xml' - nm_settings_keyfile_docs = custom_target( - name, - input: libnm_core_settings_sources, - output: name, - command: [perl, generate_plugin_docs, 'keyfile', '@OUTPUT@', '@INPUT@'] - ) - - name = 'nm-settings-docs-overrides.xml' - nm_settings_docs_overrides = custom_target( - name, - input: libnm_core_settings_sources, - output: name, - command: [perl, generate_plugin_docs, 'dbus', '@OUTPUT@', '@INPUT@'] - ) - - if enable_ifcfg_rh - name = 'nm-settings-ifcfg-rh-docs.xml' - nm_settings_ifcfg_rh_docs = custom_target( - name, - input: libnm_core_settings_sources, - output: name, - command: [perl, generate_plugin_docs, 'ifcfg-rh', '@OUTPUT@', '@INPUT@'] - ) - endif - - generate_setting_docs = join_paths(meson.current_source_dir(), 'generate-setting-docs.py') - - name = 'nm-property-docs.xml' - nm_property_docs = custom_target( - name, - input: libnm_gir[0], - output: name, - command: [generate_setting_docs, '--lib-path', meson.current_build_dir(), '--gir', '@INPUT@', '--output', '@OUTPUT@'], - depends: libnm - ) - - name = 'nm-settings-docs.xml' - nm_settings_docs = custom_target( - name, - input: libnm_gir[0], - output: name, - command: [generate_setting_docs, '--lib-path', meson.current_build_dir(), '--gir', '@INPUT@', '--overrides', nm_settings_docs_overrides, '--output', '@OUTPUT@'], - depends: libnm - ) -endif - -if enable_tests - subdir('tests') -endif diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c index 2e6244c6..ed0135ba 100644 --- a/libnm/nm-access-point.c +++ b/libnm/nm-access-point.c @@ -588,7 +588,7 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - + /** * NMAccessPoint:mode: * diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c index 6560fb8e..a0ea8a25 100644 --- a/libnm/nm-active-connection.c +++ b/libnm/nm-active-connection.c @@ -661,9 +661,11 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class) G_PARAM_STATIC_STRINGS)); /** - * NMActiveConnection:devices: (type GPtrArray(NMDevice)) + * NMActiveConnection:devices: * * The devices of the active connection. + * + * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_DEVICES, diff --git a/libnm/nm-autoptr.h b/libnm/nm-autoptr.h deleted file mode 100644 index 6b2fd015..00000000 --- a/libnm/nm-autoptr.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA. - * - * Copyright 2018 Red Hat, Inc. - */ - -#ifndef __NM_AUTOPTR_H__ -#define __NM_AUTOPTR_H__ - -/* - * Note that you might use this header with older versions of libnm - * that do not yet ship this header. In that case, copy the header - * into your source tree. - */ - -#include -#include - -#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMClient, g_object_unref) - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMConnection, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSetting, g_object_unref) - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSetting8021x, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingAdsl, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingBluetooth, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingBond, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingBridge, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingBridgePort, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingCdma, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingConnection, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingDcb, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingDummy, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingGeneric, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingGsm, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingInfiniband, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingIP4Config, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingIP6Config, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingIPConfig, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingIPTunnel, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingMacsec, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingMacvlan, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOlpcMesh, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOvsBridge, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOvsInterface, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOvsPatch, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingOvsPort, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingPpp, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingPppoe, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingProxy, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingSerial, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingTCConfig, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingTeam, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingTeamPort, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingTun, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingUser, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingVlan, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingVpn, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingVxlan, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingWimax, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingWired, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingWireless, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMSettingWirelessSecurity, g_object_unref) - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (NMVpnPluginInfo, g_object_unref) - -#endif - -#endif /* __NM_AUTOPTR_H__ */ diff --git a/libnm/nm-checkpoint.c b/libnm/nm-checkpoint.c deleted file mode 100644 index 890e2f85..00000000 --- a/libnm/nm-checkpoint.c +++ /dev/null @@ -1,219 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program. If not, see - * . - * - * Copyright 2017 Red Hat, Inc. - */ - -#include "nm-default.h" - -#include "nm-checkpoint.h" -#include "nm-core-internal.h" -#include "nm-dbus-interface.h" -#include "nm-device.h" -#include "nm-object-private.h" - -typedef struct { - GPtrArray *devices; - gint64 created; - guint32 rollback_timeout; -} NMCheckpointPrivate; - -struct _NMCheckpoint { - NMObject parent; - NMCheckpointPrivate _priv; -}; - -struct _NMCheckpointClass { - NMObjectClass parent; -}; - -G_DEFINE_TYPE (NMCheckpoint, nm_checkpoint, NM_TYPE_OBJECT) - -#define NM_CHECKPOINT_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMCheckpoint, NM_IS_CHECKPOINT) - -enum { - PROP_0, - PROP_DEVICES, - PROP_CREATED, - PROP_ROLLBACK_TIMEOUT, - - LAST_PROP -}; - -/** - * nm_checkpoint_get_devices: - * @checkpoint: a #NMCheckpoint - * - * The devices that are part of this checkpoint. - * - * Returns: (element-type NMDevice): the devices list. - * - * Since: 1.12 - **/ -const GPtrArray * -nm_checkpoint_get_devices (NMCheckpoint *checkpoint) -{ - g_return_val_if_fail (NM_IS_CHECKPOINT (checkpoint), NULL); - - return NM_CHECKPOINT_GET_PRIVATE (checkpoint)->devices; -} - -/** - * nm_checkpoint_get_created: - * @checkpoint: a #NMCheckpoint - * - * Gets the timestamp (in CLOCK_BOOTTIME milliseconds) - * of checkpoint creation. - * - * Returns: the timestamp of checkpoint creation. - * - * Since: 1.12 - **/ -gint64 -nm_checkpoint_get_created (NMCheckpoint *checkpoint) -{ - g_return_val_if_fail (NM_IS_CHECKPOINT (checkpoint), 0); - - return NM_CHECKPOINT_GET_PRIVATE (checkpoint)->created; -} - -/** - * nm_checkpoint_get_rollback_timeout: - * @checkpoint: a #NMCheckpoint - * - * Gets the the timeout in seconds for automatic rollback. - * - * Returns: the rollback timeout. - * - * Since: 1.12 - **/ -guint32 -nm_checkpoint_get_rollback_timeout (NMCheckpoint *checkpoint) -{ - g_return_val_if_fail (NM_IS_CHECKPOINT (checkpoint), 0); - - return NM_CHECKPOINT_GET_PRIVATE (checkpoint)->rollback_timeout; -} - -/*****************************************************************************/ - -static void -nm_checkpoint_init (NMCheckpoint *checkpoint) -{ -} - -static void -finalize (GObject *object) -{ - NMCheckpointPrivate *priv = NM_CHECKPOINT_GET_PRIVATE (NM_CHECKPOINT (object)); - - g_ptr_array_unref (priv->devices); - - G_OBJECT_CLASS (nm_checkpoint_parent_class)->finalize (object); -} - -static void -get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - NMCheckpoint *checkpoint = NM_CHECKPOINT (object); - NMCheckpointPrivate *priv = NM_CHECKPOINT_GET_PRIVATE (checkpoint); - - switch (prop_id) { - case PROP_DEVICES: - g_value_take_boxed (value, _nm_utils_copy_object_array (priv->devices)); - break; - case PROP_CREATED: - g_value_set_int64 (value, priv->created); - break; - case PROP_ROLLBACK_TIMEOUT: - g_value_set_uint (value, priv->rollback_timeout); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -init_dbus (NMObject *object) -{ - NMCheckpointPrivate *priv = NM_CHECKPOINT_GET_PRIVATE (NM_CHECKPOINT (object)); - const NMPropertiesInfo property_info[] = { - { NM_CHECKPOINT_DEVICES, &priv->devices, NULL, NM_TYPE_DEVICE }, - { NM_CHECKPOINT_CREATED, &priv->created }, - { NM_CHECKPOINT_ROLLBACK_TIMEOUT, &priv->rollback_timeout }, - { NULL }, - }; - - NM_OBJECT_CLASS (nm_checkpoint_parent_class)->init_dbus (object); - - _nm_object_register_properties (object, - NM_DBUS_INTERFACE_CHECKPOINT, - property_info); -} - - -static void -nm_checkpoint_class_init (NMCheckpointClass *checkpoint_class) -{ - GObjectClass *object_class = G_OBJECT_CLASS (checkpoint_class); - NMObjectClass *nm_object_class = NM_OBJECT_CLASS (checkpoint_class); - - object_class->get_property = get_property; - object_class->finalize = finalize; - - nm_object_class->init_dbus = init_dbus; - - /** - * NMCheckpoint:devices: (type GPtrArray(NMDevice)) - * - * The devices that are part of this checkpoint. - * - * Since: 1.12 - **/ - g_object_class_install_property - (object_class, PROP_DEVICES, - g_param_spec_boxed (NM_CHECKPOINT_DEVICES, "", "", - G_TYPE_PTR_ARRAY, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); - - /** - * NMCheckpoint:created: - * - * The timestamp (in CLOCK_BOOTTIME milliseconds) of checkpoint creation. - * - * Since: 1.12 - **/ - g_object_class_install_property - (object_class, PROP_CREATED, - g_param_spec_int64 (NM_CHECKPOINT_CREATED, "", "", - G_MININT64, G_MAXINT64, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); - - /** - * NMCheckpoint:rollback-timeout: - * - * Timeout in seconds for automatic rollback, or zero. - * - * Since: 1.12 - **/ - g_object_class_install_property - (object_class, PROP_ROLLBACK_TIMEOUT, - g_param_spec_uint (NM_CHECKPOINT_ROLLBACK_TIMEOUT, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); -} diff --git a/libnm/nm-checkpoint.h b/libnm/nm-checkpoint.h deleted file mode 100644 index a0c9d722..00000000 --- a/libnm/nm-checkpoint.h +++ /dev/null @@ -1,53 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ -/* - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this program. If not, see - * . - * - * Copyright 2017 Red Hat, Inc. - */ - -#ifndef __NM_CHECKPOINT_H__ -#define __NM_CHECKPOINT_H__ - -#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION) -#error "Only can be included directly." -#endif - -#include "nm-object.h" - -G_BEGIN_DECLS - -#define NM_TYPE_CHECKPOINT (nm_checkpoint_get_type ()) -#define NM_CHECKPOINT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CHECKPOINT, NMCheckpoint)) -#define NM_CHECKPOINT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CHECKPOINT, NMCheckpointClass)) -#define NM_IS_CHECKPOINT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CHECKPOINT)) -#define NM_IS_CHECKPOINT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CHECKPOINT)) -#define NM_CHECKPOINT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CHECKPOINT, NMCheckpointClass)) - -#define NM_CHECKPOINT_DEVICES "devices" -#define NM_CHECKPOINT_CREATED "created" -#define NM_CHECKPOINT_ROLLBACK_TIMEOUT "rollback-timeout" - -/** - * NMCheckpoint: - */ -typedef struct _NMCheckpointClass NMCheckpointClass; - -GType nm_checkpoint_get_type (void); - -NM_AVAILABLE_IN_1_12 -const GPtrArray *nm_checkpoint_get_devices (NMCheckpoint *checkpoint); -NM_AVAILABLE_IN_1_12 -gint64 nm_checkpoint_get_created (NMCheckpoint *checkpoint); -NM_AVAILABLE_IN_1_12 -guint32 nm_checkpoint_get_rollback_timeout (NMCheckpoint *checkpoint); - -G_END_DECLS - -#endif /* __NM_CHECKPOINT_H__ */ diff --git a/libnm/nm-client.c b/libnm/nm-client.c index a31a0845..4653b272 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -50,7 +50,6 @@ #include "nm-access-point.h" #include "nm-active-connection.h" -#include "nm-checkpoint.h" #include "nm-device-adsl.h" #include "nm-device-bond.h" #include "nm-device-bridge.h" @@ -140,7 +139,6 @@ enum { PROP_DNS_MODE, PROP_DNS_RC_MANAGER, PROP_DNS_CONFIGURATION, - PROP_CHECKPOINTS, LAST_PROP }; @@ -2078,385 +2076,6 @@ dns_notify (GObject *object, } } -static void -checkpoint_create_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - GSimpleAsyncResult *simple = user_data; - NMCheckpoint *checkpoint; - GError *error = NULL; - - checkpoint = nm_manager_checkpoint_create_finish (NM_MANAGER (object), result, &error); - if (checkpoint) - g_simple_async_result_set_op_res_gpointer (simple, checkpoint, g_object_unref); - else - g_simple_async_result_take_error (simple, error); - - g_simple_async_result_complete (simple); - g_object_unref (simple); -} - -/** - * nm_client_get_checkpoints: - * @client: a #NMClient - * - * Gets all the active checkpoints. - * - * Returns: (transfer none) (element-type NMCheckpoint): a #GPtrArray - * containing all the #NMCheckpoint. The returned array is owned by the - * #NMClient object and should not be modified. - * - * Since: 1.12 - **/ -const GPtrArray * -nm_client_get_checkpoints (NMClient *client) -{ - g_return_val_if_fail (NM_IS_CLIENT (client), NULL); - - if (!nm_client_get_nm_running (client)) - return ∅ - - return nm_manager_get_checkpoints (NM_CLIENT_GET_PRIVATE (client)->manager); -} - -/** - * nm_client_checkpoint_create: - * @client: the %NMClient - * @devices: (element-type NMDevice): a list of devices for which a - * checkpoint should be created. - * @rollback_timeout: the rollback timeout in seconds - * @flags: creation flags - * @cancellable: a #GCancellable, or %NULL - * @callback: (scope async): callback to be called when the add operation completes - * @user_data: (closure): caller-specific data passed to @callback - * - * Creates a checkpoint of the current networking configuration - * for given interfaces. An empty @devices argument means all - * devices. If @rollback_timeout is not zero, a rollback is - * automatically performed after the given timeout. - * - * Since: 1.12 - **/ -void -nm_client_checkpoint_create (NMClient *client, - const GPtrArray *devices, - guint32 rollback_timeout, - NMCheckpointCreateFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - GError *error = NULL; - - g_return_if_fail (NM_IS_CLIENT (client)); - - if (!_nm_client_check_nm_running (client, &error)) { - g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error); - return; - } - - simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data, - nm_client_checkpoint_create); - if (cancellable) - g_simple_async_result_set_check_cancellable (simple, cancellable); - nm_manager_checkpoint_create (NM_CLIENT_GET_PRIVATE (client)->manager, - devices, rollback_timeout, flags, - cancellable, checkpoint_create_cb, simple); -} - -/** - * nm_client_checkpoint_create_finish: - * @client: the #NMClient - * @result: the result passed to the #GAsyncReadyCallback - * @error: location for a #GError, or %NULL - * - * Gets the result of a call to nm_client_checkpoint_create(). - * - * Returns: (transfer full): the new #NMCheckpoint on success, %NULL on - * failure, in which case @error will be set. - * - * Since: 1.12 - **/ -NMCheckpoint * -nm_client_checkpoint_create_finish (NMClient *client, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail (NM_IS_CLIENT (client), NULL); - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL); - - simple = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple, error)) - return NULL; - else - return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple)); -} - -static void -checkpoint_destroy_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - GSimpleAsyncResult *simple = user_data; - GError *error = NULL; - - if (nm_manager_checkpoint_destroy_finish (NM_MANAGER (object), result, &error)) - g_simple_async_result_set_op_res_gboolean (simple, TRUE); - else - g_simple_async_result_take_error (simple, error); - - g_simple_async_result_complete (simple); - g_object_unref (simple); -} - -/** - * nm_client_checkpoint_destroy: - * @client: the %NMClient - * @checkpoint_path: the D-Bus path for the checkpoint - * @cancellable: a #GCancellable, or %NULL - * @callback: (scope async): callback to be called when the add operation completes - * @user_data: (closure): caller-specific data passed to @callback - * - * Destroys an existing checkpoint without performing a rollback. - * - * Since: 1.12 - **/ -void -nm_client_checkpoint_destroy (NMClient *client, - const char *checkpoint_path, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - GError *error = NULL; - - g_return_if_fail (NM_IS_CLIENT (client)); - g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); - - if (!_nm_client_check_nm_running (client, &error)) { - g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error); - return; - } - - simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data, - nm_client_checkpoint_destroy); - if (cancellable) - g_simple_async_result_set_check_cancellable (simple, cancellable); - nm_manager_checkpoint_destroy (NM_CLIENT_GET_PRIVATE (client)->manager, - checkpoint_path, - cancellable, checkpoint_destroy_cb, simple); -} - -/** - * nm_client_checkpoint_destroy_finish: - * @client: an #NMClient - * @result: the result passed to the #GAsyncReadyCallback - * @error: location for a #GError, or %NULL - * - * Gets the result of a call to nm_client_checkpoint_destroy(). - * - * Returns: %TRUE on success or %FALSE on failure, in which case - * @error will be set. - * - * Since: 1.12 - **/ -gboolean -nm_client_checkpoint_destroy_finish (NMClient *client, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail (NM_IS_CLIENT (client), FALSE); - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE); - - simple = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple, error)) - return FALSE; - else - return g_simple_async_result_get_op_res_gboolean (simple); -} - -static void -checkpoint_rollback_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - GSimpleAsyncResult *simple = user_data; - GHashTable *hash; - GError *error = NULL; - - hash = nm_manager_checkpoint_rollback_finish (NM_MANAGER (object), result, &error); - if (hash) - g_simple_async_result_set_op_res_gpointer (simple, hash, (GDestroyNotify) g_hash_table_unref); - else - g_simple_async_result_take_error (simple, error); - - g_simple_async_result_complete (simple); - g_object_unref (simple); -} - -/** - * nm_client_checkpoint_rollback: - * @client: the %NMClient - * @checkpoint_path: the D-Bus path to the checkpoint - * @cancellable: a #GCancellable, or %NULL - * @callback: (scope async): callback to be called when the add operation completes - * @user_data: (closure): caller-specific data passed to @callback - * - * Performs the rollback of a checkpoint before the timeout is reached. - * - * Since: 1.12 - **/ -void -nm_client_checkpoint_rollback (NMClient *client, - const char *checkpoint_path, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - GError *error = NULL; - - g_return_if_fail (NM_IS_CLIENT (client)); - g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); - - if (!_nm_client_check_nm_running (client, &error)) { - g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error); - return; - } - - simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data, - nm_client_checkpoint_rollback); - if (cancellable) - g_simple_async_result_set_check_cancellable (simple, cancellable); - nm_manager_checkpoint_rollback (NM_CLIENT_GET_PRIVATE (client)->manager, - checkpoint_path, - cancellable, checkpoint_rollback_cb, simple); -} - -/** - * nm_client_checkpoint_rollback_finish: - * @client: an #NMClient - * @result: the result passed to the #GAsyncReadyCallback - * @error: location for a #GError, or %NULL - * - * Gets the result of a call to nm_client_checkpoint_rollback(). - * - * Returns: (transfer full) (element-type utf8 guint32): an hash table of - * devices and results. Devices are represented by their original - * D-Bus path; each result is a #NMRollbackResult. - * - * Since: 1.12 - **/ -GHashTable * -nm_client_checkpoint_rollback_finish (NMClient *client, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - GHashTable *hash; - - g_return_val_if_fail (NM_IS_CLIENT (client), NULL); - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL); - - simple = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple, error)) - return NULL; - else { - hash = g_simple_async_result_get_op_res_gpointer (simple); - return g_hash_table_ref (hash); - } -} - -static void -checkpoint_adjust_rollback_timeout_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - gs_unref_object GSimpleAsyncResult *simple = user_data; - GError *error = NULL; - - if (nm_manager_checkpoint_adjust_rollback_timeout_finish (NM_MANAGER (object), result, &error)) - g_simple_async_result_set_op_res_gboolean (simple, TRUE); - else - g_simple_async_result_take_error (simple, error); - - g_simple_async_result_complete (simple); -} - -/** - * nm_client_checkpoint_adjust_rollback_timeout: - * @client: the %NMClient - * @checkpoint_path: a D-Bus path to a checkpoint - * @add_timeout: the timeout in seconds counting from now. - * Set to zero, to disable the timeout. - * @cancellable: a #GCancellable, or %NULL - * @callback: (scope async): callback to be called when the add operation completes - * @user_data: (closure): caller-specific data passed to @callback - * - * Resets the timeout for the checkpoint with path @checkpoint_path - * to @timeout_add. - * - * Since: 1.12 - **/ -void -nm_client_checkpoint_adjust_rollback_timeout (NMClient *client, - const char *checkpoint_path, - guint32 add_timeout, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - GError *error = NULL; - - g_return_if_fail (NM_IS_CLIENT (client)); - g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); - - if (!_nm_client_check_nm_running (client, &error)) { - g_simple_async_report_take_gerror_in_idle (G_OBJECT (client), callback, user_data, error); - return; - } - - simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data, - nm_client_checkpoint_rollback); - if (cancellable) - g_simple_async_result_set_check_cancellable (simple, cancellable); - nm_manager_checkpoint_adjust_rollback_timeout (NM_CLIENT_GET_PRIVATE (client)->manager, - checkpoint_path, add_timeout, - cancellable, checkpoint_adjust_rollback_timeout_cb, simple); -} - -/** - * nm_client_checkpoint_adjust_rollback_timeout_finish: - * @client: an #NMClient - * @result: the result passed to the #GAsyncReadyCallback - * @error: location for a #GError, or %NULL - * - * Gets the result of a call to nm_client_checkpoint_adjust_rollback_timeout(). - * - * Returns: %TRUE on success or %FALSE on failure. - * - * Since: 1.12 - **/ -gboolean -nm_client_checkpoint_adjust_rollback_timeout_finish (NMClient *client, - GAsyncResult *result, - GError **error) -{ - g_return_val_if_fail (NM_IS_CLIENT (client), FALSE); - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), FALSE); - - return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), - error); -} - /****************************************************************/ /* Object Initialization */ /****************************************************************/ @@ -2587,8 +2206,6 @@ obj_nm_for_gdbus_object (NMClient *self, GDBusObject *object, GDBusObjectManager type = NM_TYPE_VPN_CONNECTION; else if (strcmp (ifname, NM_DBUS_INTERFACE_WIMAX_NSP) == 0) type = NM_TYPE_WIMAX_NSP; - else if (strcmp (ifname, NM_DBUS_INTERFACE_CHECKPOINT) == 0) - type = NM_TYPE_CHECKPOINT; if (type != G_TYPE_INVALID) break; @@ -3166,12 +2783,6 @@ get_property (GObject *object, guint prop_id, case PROP_ALL_DEVICES: g_value_take_boxed (value, _nm_utils_copy_object_array (nm_client_get_all_devices (self))); break; - case PROP_CHECKPOINTS: - if (priv->manager) - g_object_get_property (G_OBJECT (priv->manager), pspec->name, value); - else - g_value_take_boxed (value, g_ptr_array_new ()); - break; /* Settings properties. */ case PROP_CONNECTIONS: @@ -3365,9 +2976,11 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:active-connections: (type GPtrArray(NMActiveConnection)) + * NMClient:active-connections: * * The active connections. + * + * Element-type: NMActiveConnection **/ g_object_class_install_property (object_class, PROP_ACTIVE_CONNECTIONS, @@ -3444,9 +3057,11 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:devices: (type GPtrArray(NMDevice)) + * NMClient:devices: * * List of real network devices. Does not include placeholder devices. + * + * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_DEVICES, @@ -3456,9 +3071,11 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:all-devices: (type GPtrArray(NMDevice)) + * NMClient:all-devices: * * List of both real devices and device placeholders. + * + * Element-type: NMDevice * Since: 1.2 **/ g_object_class_install_property @@ -3469,12 +3086,14 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:connections: (type GPtrArray(NMRemoteConnection)) + * NMClient:connections: * * The list of configured connections that are available to the user. (Note * that this differs from the underlying D-Bus property, which may also * contain the object paths of connections that the user does not have * permission to read the details of.) + * + * Element-type: NMRemoteConnection */ g_object_class_install_property (object_class, PROP_CONNECTIONS, @@ -3551,7 +3170,7 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_STATIC_STRINGS)); /** - * NMClient:dns-configuration: (type GPtrArray(GVariant)) + * NMClient:dns-configuration: * * The current DNS configuration represented as an array of * dictionaries. Each dictionary has the "nameservers", @@ -3570,20 +3189,6 @@ nm_client_class_init (NMClientClass *client_class) G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - /** - * NMClient:checkpoints: (type GPtrArray(NMCheckpoint)) - * - * The list of active checkpoints. - * - * Since: 1.12 - */ - g_object_class_install_property - (object_class, PROP_CHECKPOINTS, - g_param_spec_boxed (NM_MANAGER_CHECKPOINTS, "", "", - G_TYPE_PTR_ARRAY, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); - /* signals */ /** diff --git a/libnm/nm-client.h b/libnm/nm-client.h index 6f4a86c9..3b37b55a 100644 --- a/libnm/nm-client.h +++ b/libnm/nm-client.h @@ -403,58 +403,6 @@ const char *nm_client_get_dns_rc_manager (NMClient *client); NM_AVAILABLE_IN_1_6 const GPtrArray *nm_client_get_dns_configuration (NMClient *client); - -NM_AVAILABLE_IN_1_12 -const GPtrArray *nm_client_get_checkpoints (NMClient *client); - -NM_AVAILABLE_IN_1_12 -void nm_client_checkpoint_create (NMClient *client, - const GPtrArray *devices, - guint32 rollback_timeout, - NMCheckpointCreateFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -NM_AVAILABLE_IN_1_12 -NMCheckpoint *nm_client_checkpoint_create_finish (NMClient *client, - GAsyncResult *result, - GError **error); - -NM_AVAILABLE_IN_1_12 -void nm_client_checkpoint_destroy (NMClient *client, - const char *checkpoint_path, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -NM_AVAILABLE_IN_1_12 -gboolean nm_client_checkpoint_destroy_finish (NMClient *client, - GAsyncResult *result, - GError **error); - -NM_AVAILABLE_IN_1_12 -void nm_client_checkpoint_rollback (NMClient *client, - const char *checkpoint_path, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -NM_AVAILABLE_IN_1_12 -GHashTable *nm_client_checkpoint_rollback_finish (NMClient *client, - GAsyncResult *result, - GError **error); - -NM_AVAILABLE_IN_1_12 -void nm_client_checkpoint_adjust_rollback_timeout (NMClient *client, - const char *checkpoint_path, - guint32 add_timeout, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -NM_AVAILABLE_IN_1_12 -gboolean nm_client_checkpoint_adjust_rollback_timeout_finish (NMClient *client, - GAsyncResult *result, - GError **error); - G_END_DECLS #endif /* __NM_CLIENT_H__ */ diff --git a/libnm/nm-dbus-helpers.h b/libnm/nm-dbus-helpers.h index 0f2cabe8..1847da1d 100644 --- a/libnm/nm-dbus-helpers.h +++ b/libnm/nm-dbus-helpers.h @@ -21,10 +21,6 @@ #ifndef __NM_DBUS_HELPERS_PRIVATE_H__ #define __NM_DBUS_HELPERS_PRIVATE_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #include "nm-dbus-compat.h" GBusType _nm_dbus_bus_type (void); diff --git a/libnm/nm-device-bond.c b/libnm/nm-device-bond.c index 9c43598f..96334840 100644 --- a/libnm/nm-device-bond.c +++ b/libnm/nm-device-bond.c @@ -248,9 +248,11 @@ nm_device_bond_class_init (NMDeviceBondClass *bond_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceBond:slaves: (type GPtrArray(NMDevice)) + * NMDeviceBond:slaves: * * The devices slaved to the bond device. + * + * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_SLAVES, diff --git a/libnm/nm-device-bridge.c b/libnm/nm-device-bridge.c index 76934daa..27f362b2 100644 --- a/libnm/nm-device-bridge.c +++ b/libnm/nm-device-bridge.c @@ -253,9 +253,11 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *bridge_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceBridge:slaves: (type GPtrArray(NMDevice)) + * NMDeviceBridge:slaves: * * The devices slaved to the bridge device. + * + * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_SLAVES, diff --git a/libnm/nm-device-ip-tunnel.c b/libnm/nm-device-ip-tunnel.c index 2f7efe9d..e0dfc0f4 100644 --- a/libnm/nm-device-ip-tunnel.c +++ b/libnm/nm-device-ip-tunnel.c @@ -46,7 +46,6 @@ typedef struct { char *output_key; guint8 encap_limit; guint32 flow_label; - guint32 flags; } NMDeviceIPTunnelPrivate; enum { @@ -62,7 +61,6 @@ enum { PROP_OUTPUT_KEY, PROP_ENCAPSULATION_LIMIT, PROP_FLOW_LABEL, - PROP_FLAGS, LAST_PROP }; @@ -244,22 +242,6 @@ nm_device_ip_tunnel_get_flow_label (NMDeviceIPTunnel *device) return NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->flow_label; } -/** - * nm_device_ip_tunnel_get_flags: - * @device: a #NMDeviceIPTunnel - * - * Returns: the tunnel flags - * - * Since: 1.12 - **/ -NMIPTunnelFlags -nm_device_ip_tunnel_get_flags (NMDeviceIPTunnel *device) -{ - g_return_val_if_fail (NM_IS_DEVICE_IP_TUNNEL (device), NM_IP_TUNNEL_FLAG_NONE); - - return NM_DEVICE_IP_TUNNEL_GET_PRIVATE (device)->flags; -} - static gboolean connection_compatible (NMDevice *device, NMConnection *connection, GError **error) { @@ -304,7 +286,6 @@ init_dbus (NMObject *object) { NM_DEVICE_IP_TUNNEL_OUTPUT_KEY, &priv->output_key }, { NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT, &priv->encap_limit }, { NM_DEVICE_IP_TUNNEL_FLOW_LABEL, &priv->flow_label }, - { NM_DEVICE_IP_TUNNEL_FLAGS, &priv->flags }, { NULL }, }; @@ -371,9 +352,6 @@ get_property (GObject *object, case PROP_FLOW_LABEL: g_value_set_uint (value, nm_device_ip_tunnel_get_flow_label (device)); break; - case PROP_FLAGS: - g_value_set_uint (value, nm_device_ip_tunnel_get_flags (device)); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -558,18 +536,4 @@ nm_device_ip_tunnel_class_init (NMDeviceIPTunnelClass *bond_class) 0, (1 << 20) - 1, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - - /** - * NMDeviceIPTunnel:flags: - * - * Tunnel flags. - * - * Since: 1.12 - **/ - g_object_class_install_property - (object_class, PROP_FLAGS, - g_param_spec_uint (NM_DEVICE_IP_TUNNEL_FLAGS, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); } diff --git a/libnm/nm-device-ip-tunnel.h b/libnm/nm-device-ip-tunnel.h index 92a83edc..6d748d96 100644 --- a/libnm/nm-device-ip-tunnel.h +++ b/libnm/nm-device-ip-tunnel.h @@ -26,7 +26,6 @@ #endif #include "nm-device.h" -#include "nm-setting-ip-tunnel.h" G_BEGIN_DECLS @@ -48,7 +47,6 @@ G_BEGIN_DECLS #define NM_DEVICE_IP_TUNNEL_OUTPUT_KEY "output-key" #define NM_DEVICE_IP_TUNNEL_ENCAPSULATION_LIMIT "encapsulation-limit" #define NM_DEVICE_IP_TUNNEL_FLOW_LABEL "flow-label" -#define NM_DEVICE_IP_TUNNEL_FLAGS "flags" /** * NMDeviceIPTunnel: @@ -89,8 +87,6 @@ NM_AVAILABLE_IN_1_2 guint8 nm_device_ip_tunnel_get_encapsulation_limit (NMDeviceIPTunnel *device); NM_AVAILABLE_IN_1_2 guint nm_device_ip_tunnel_get_flow_label (NMDeviceIPTunnel *device); -NM_AVAILABLE_IN_1_12 -NMIPTunnelFlags nm_device_ip_tunnel_get_flags (NMDeviceIPTunnel *device); G_END_DECLS diff --git a/libnm/nm-device-team.c b/libnm/nm-device-team.c index 101e3160..0b62b864 100644 --- a/libnm/nm-device-team.c +++ b/libnm/nm-device-team.c @@ -274,9 +274,11 @@ nm_device_team_class_init (NMDeviceTeamClass *team_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceTeam:slaves: (type GPtrArray(NMDevice)) + * NMDeviceTeam:slaves: * * The devices enslaved to the team device. + * + * Element-type: NMDevice **/ g_object_class_install_property (object_class, PROP_SLAVES, diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c index 1f2118fa..e4ea94e9 100644 --- a/libnm/nm-device-wifi.c +++ b/libnm/nm-device-wifi.c @@ -887,9 +887,11 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceWifi:access-points: (type GPtrArray(NMAccessPoint)) + * NMDeviceWifi:access-points: * * List of all Wi-Fi access points the device can see. + * + * Element-type: NMAccessPoint **/ g_object_class_install_property (object_class, PROP_ACCESS_POINTS, diff --git a/libnm/nm-device-wimax.c b/libnm/nm-device-wimax.c index 7134024f..fd0a2dc5 100644 --- a/libnm/nm-device-wimax.c +++ b/libnm/nm-device-wimax.c @@ -650,9 +650,11 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class) G_PARAM_STATIC_STRINGS)); /** - * NMDeviceWimax:nsps: (type GPtrArray(NMWimaxNsp)) + * NMDeviceWimax:nsps: * * List of all WiMAX Network Service Providers the device can see. + * + * Element-type: NMWimaxNsp **/ g_object_class_install_property (object_class, PROP_NSPS, diff --git a/libnm/nm-device.c b/libnm/nm-device.c index 9bb8f391..ffdfca9c 100644 --- a/libnm/nm-device.c +++ b/libnm/nm-device.c @@ -735,9 +735,11 @@ nm_device_class_init (NMDeviceClass *device_class) G_PARAM_STATIC_STRINGS)); /** - * NMDevice:available-connections: (type GPtrArray(NMRemoteConnection)) + * NMDevice:available-connections: * * The available connections of the device + * + * Element-type: NMRemoteConnection **/ g_object_class_install_property (object_class, PROP_AVAILABLE_CONNECTIONS, @@ -1295,136 +1297,6 @@ nm_device_get_available_connections (NMDevice *device) return NM_DEVICE_GET_PRIVATE (device)->available_connections; } -static const char * -get_type_name (NMDevice *device) -{ - switch (nm_device_get_device_type (device)) { - case NM_DEVICE_TYPE_ETHERNET: - return _("Ethernet"); - case NM_DEVICE_TYPE_WIFI: - return _("Wi-Fi"); - case NM_DEVICE_TYPE_BT: - return _("Bluetooth"); - case NM_DEVICE_TYPE_OLPC_MESH: - return _("OLPC Mesh"); - case NM_DEVICE_TYPE_OVS_INTERFACE: - return _("OpenVSwitch Interface"); - case NM_DEVICE_TYPE_OVS_PORT: - return _("OpenVSwitch Port"); - case NM_DEVICE_TYPE_OVS_BRIDGE: - return _("OpenVSwitch Bridge"); - case NM_DEVICE_TYPE_WIMAX: - return _("WiMAX"); - case NM_DEVICE_TYPE_MODEM: - return _("Mobile Broadband"); - case NM_DEVICE_TYPE_INFINIBAND: - return _("InfiniBand"); - case NM_DEVICE_TYPE_BOND: - return _("Bond"); - case NM_DEVICE_TYPE_TEAM: - return _("Team"); - case NM_DEVICE_TYPE_BRIDGE: - return _("Bridge"); - case NM_DEVICE_TYPE_VLAN: - return _("VLAN"); - case NM_DEVICE_TYPE_ADSL: - return _("ADSL"); - case NM_DEVICE_TYPE_MACVLAN: - return _("MACVLAN"); - case NM_DEVICE_TYPE_VXLAN: - return _("VXLAN"); - case NM_DEVICE_TYPE_IP_TUNNEL: - return _("IPTunnel"); - case NM_DEVICE_TYPE_TUN: - return _("Tun"); - case NM_DEVICE_TYPE_VETH: - return _("Veth"); - case NM_DEVICE_TYPE_MACSEC: - return _("MACsec"); - case NM_DEVICE_TYPE_DUMMY: - return _("Dummy"); - case NM_DEVICE_TYPE_PPP: - return _("PPP"); - case NM_DEVICE_TYPE_GENERIC: - case NM_DEVICE_TYPE_UNUSED1: - case NM_DEVICE_TYPE_UNUSED2: - case NM_DEVICE_TYPE_UNKNOWN: - break; - } - return _("Unknown"); -} - -static char * -get_device_type_name_with_iface (NMDevice *device) -{ - const char *type_name = get_type_name (device); - - switch (nm_device_get_device_type (device)) { - case NM_DEVICE_TYPE_BOND: - case NM_DEVICE_TYPE_TEAM: - case NM_DEVICE_TYPE_BRIDGE: - case NM_DEVICE_TYPE_VLAN: - return g_strdup_printf ("%s (%s)", type_name, nm_device_get_iface (device)); - default: - return g_strdup (type_name); - } -} - -static char * -get_device_generic_type_name_with_iface (NMDevice *device) -{ - switch (nm_device_get_device_type (device)) { - case NM_DEVICE_TYPE_ETHERNET: - case NM_DEVICE_TYPE_INFINIBAND: - return g_strdup (_("Wired")); - default: - return get_device_type_name_with_iface (device); - } -} - -static const char * -get_bus_name (NMDevice *device) -{ - NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device); - struct udev_device *udevice; - const char *ifname, *bus; - - if (priv->bus_name) - goto out; - - if (!priv->udev) - return NULL; - - ifname = nm_device_get_iface (device); - if (!ifname) - return NULL; - - udevice = udev_device_new_from_subsystem_sysname (priv->udev, "net", ifname); - if (!udevice) { - udevice = udev_device_new_from_subsystem_sysname (priv->udev, "tty", ifname); - if (!udevice) - return NULL; - } - bus = udev_device_get_property_value (udevice, "ID_BUS"); - if (!g_strcmp0 (bus, "pci")) - priv->bus_name = g_strdup (_("PCI")); - else if (!g_strcmp0 (bus, "usb")) - priv->bus_name = g_strdup (_("USB")); - else { - /* Use "" instead of NULL so we can tell later that we've - * already tried. - */ - priv->bus_name = g_strdup (""); - } - udev_device_unref (udevice); - -out: - if (*priv->bus_name) - return priv->bus_name; - else - return NULL; -} - void _nm_device_set_udev (NMDevice *device, struct udev *udev) { @@ -1478,14 +1350,15 @@ _get_udev_property (NMDevice *device, } udev_device_unref (udev_device); - /* Prefer the hwdata database value over what comes directly - * from the device. */ - if (db_value) { - g_free (enc_value); - return db_value; + /* Prefer the encoded value which comes directly from the device + * over the hwdata database value. + */ + if (enc_value) { + g_free (db_value); + return enc_value; } - return enc_value; + return db_value; } static char * @@ -1570,7 +1443,7 @@ ensure_description (NMDevice *device) GParamSpec *name_prop; gs_free char *short_product = NULL; - priv->short_vendor = nm_str_realloc (nm_utils_fixup_vendor_string (nm_device_get_vendor (device))); + priv->short_vendor = nm_str_realloc (nm_utils_fixup_desc_string (nm_device_get_vendor (device))); /* Grab device's preferred name, if any */ name_prop = g_object_class_find_property (G_OBJECT_GET_CLASS (G_OBJECT (device)), "name"); @@ -1581,15 +1454,12 @@ ensure_description (NMDevice *device) g_clear_pointer (&priv->description, g_free); } - if (!priv->short_vendor) { + if ( !priv->short_vendor + || !(short_product = nm_utils_fixup_desc_string (nm_device_get_product (device)))) { priv->description = g_strdup (nm_device_get_iface (device) ?: ""); return; } - short_product = nm_utils_fixup_product_string (nm_device_get_product (device)); - if (short_product == NULL) - short_product = g_strdup (get_type_name (device)); - /* Another quick hack; if all of the fixed up vendor string * is found in product, ignore the vendor. */ @@ -1643,6 +1513,136 @@ nm_device_get_description (NMDevice *device) return priv->description; } +static const char * +get_type_name (NMDevice *device) +{ + switch (nm_device_get_device_type (device)) { + case NM_DEVICE_TYPE_ETHERNET: + return _("Ethernet"); + case NM_DEVICE_TYPE_WIFI: + return _("Wi-Fi"); + case NM_DEVICE_TYPE_BT: + return _("Bluetooth"); + case NM_DEVICE_TYPE_OLPC_MESH: + return _("OLPC Mesh"); + case NM_DEVICE_TYPE_OVS_INTERFACE: + return _("OpenVSwitch Interface"); + case NM_DEVICE_TYPE_OVS_PORT: + return _("OpenVSwitch Port"); + case NM_DEVICE_TYPE_OVS_BRIDGE: + return _("OpenVSwitch Bridge"); + case NM_DEVICE_TYPE_WIMAX: + return _("WiMAX"); + case NM_DEVICE_TYPE_MODEM: + return _("Mobile Broadband"); + case NM_DEVICE_TYPE_INFINIBAND: + return _("InfiniBand"); + case NM_DEVICE_TYPE_BOND: + return _("Bond"); + case NM_DEVICE_TYPE_TEAM: + return _("Team"); + case NM_DEVICE_TYPE_BRIDGE: + return _("Bridge"); + case NM_DEVICE_TYPE_VLAN: + return _("VLAN"); + case NM_DEVICE_TYPE_ADSL: + return _("ADSL"); + case NM_DEVICE_TYPE_MACVLAN: + return _("MACVLAN"); + case NM_DEVICE_TYPE_VXLAN: + return _("VXLAN"); + case NM_DEVICE_TYPE_IP_TUNNEL: + return _("IPTunnel"); + case NM_DEVICE_TYPE_TUN: + return _("Tun"); + case NM_DEVICE_TYPE_VETH: + return _("Veth"); + case NM_DEVICE_TYPE_MACSEC: + return _("MACsec"); + case NM_DEVICE_TYPE_DUMMY: + return _("Dummy"); + case NM_DEVICE_TYPE_PPP: + return _("PPP"); + case NM_DEVICE_TYPE_GENERIC: + case NM_DEVICE_TYPE_UNUSED1: + case NM_DEVICE_TYPE_UNUSED2: + case NM_DEVICE_TYPE_UNKNOWN: + break; + } + return _("Unknown"); +} + +static char * +get_device_type_name_with_iface (NMDevice *device) +{ + const char *type_name = get_type_name (device); + + switch (nm_device_get_device_type (device)) { + case NM_DEVICE_TYPE_BOND: + case NM_DEVICE_TYPE_TEAM: + case NM_DEVICE_TYPE_BRIDGE: + case NM_DEVICE_TYPE_VLAN: + return g_strdup_printf ("%s (%s)", type_name, nm_device_get_iface (device)); + default: + return g_strdup (type_name); + } +} + +static char * +get_device_generic_type_name_with_iface (NMDevice *device) +{ + switch (nm_device_get_device_type (device)) { + case NM_DEVICE_TYPE_ETHERNET: + case NM_DEVICE_TYPE_INFINIBAND: + return g_strdup (_("Wired")); + default: + return get_device_type_name_with_iface (device); + } +} + +static const char * +get_bus_name (NMDevice *device) +{ + NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (device); + struct udev_device *udevice; + const char *ifname, *bus; + + if (priv->bus_name) + goto out; + + if (!priv->udev) + return NULL; + + ifname = nm_device_get_iface (device); + if (!ifname) + return NULL; + + udevice = udev_device_new_from_subsystem_sysname (priv->udev, "net", ifname); + if (!udevice) { + udevice = udev_device_new_from_subsystem_sysname (priv->udev, "tty", ifname); + if (!udevice) + return NULL; + } + bus = udev_device_get_property_value (udevice, "ID_BUS"); + if (!g_strcmp0 (bus, "pci")) + priv->bus_name = g_strdup (_("PCI")); + else if (!g_strcmp0 (bus, "usb")) + priv->bus_name = g_strdup (_("USB")); + else { + /* Use "" instead of NULL so we can tell later that we've + * already tried. + */ + priv->bus_name = g_strdup (""); + } + udev_device_unref (udevice); + +out: + if (*priv->bus_name) + return priv->bus_name; + else + return NULL; +} + static gboolean find_duplicates (char **names, gboolean *duplicates, @@ -1716,7 +1716,7 @@ nm_device_disambiguate_names (NMDevice **devices, g_free (names[i]); name = get_device_type_name_with_iface (devices[i]); - /* TRANSLATORS: the first %s is a bus name (eg, "USB") or + /* Translators: the first %s is a bus name (eg, "USB") or * product name, the second is a device type (eg, * "Ethernet"). You can change this to something like * "%2$s (%1$s)" if there's no grammatical way to combine @@ -2578,7 +2578,7 @@ nm_lldp_neighbor_new (void) neigh = g_new0 (NMLldpNeighbor, 1); neigh->refcount = 1; - neigh->attrs = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, + neigh->attrs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_variant_unref); return neigh; diff --git a/libnm/nm-dhcp-config.c b/libnm/nm-dhcp-config.c index 3f835670..3161e296 100644 --- a/libnm/nm-dhcp-config.c +++ b/libnm/nm-dhcp-config.c @@ -51,7 +51,7 @@ nm_dhcp_config_init (NMDhcpConfig *config) { NMDhcpConfigPrivate *priv = NM_DHCP_CONFIG_GET_PRIVATE (config); - priv->options = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_free); + priv->options = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); } static gboolean @@ -154,9 +154,11 @@ nm_dhcp_config_class_init (NMDhcpConfigClass *config_class) G_PARAM_STATIC_STRINGS)); /** - * NMDhcpConfig:options: (type GHashTable(utf8,utf8)): + * NMDhcpConfig:options: * * The #GHashTable containing options of the configuration. + * + * Type: GLib.HashTable(utf8,utf8) **/ g_object_class_install_property (object_class, PROP_OPTIONS, diff --git a/libnm/nm-dhcp4-config.h b/libnm/nm-dhcp4-config.h index 6669aa0e..2cbbdc9e 100644 --- a/libnm/nm-dhcp4-config.h +++ b/libnm/nm-dhcp4-config.h @@ -21,12 +21,10 @@ #ifndef __NM_DHCP4_CONFIG_H__ #define __NM_DHCP4_CONFIG_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #include "nm-dhcp-config.h" +G_BEGIN_DECLS + #define NM_TYPE_DHCP4_CONFIG (nm_dhcp4_config_get_type ()) #define NM_DHCP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP4_CONFIG, NMDhcp4Config)) #define NM_DHCP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigClass)) @@ -42,8 +40,13 @@ typedef struct { typedef struct { NMDhcpConfigClass parent; + + /*< private >*/ + gpointer padding[4]; } NMDhcp4ConfigClass; GType nm_dhcp4_config_get_type (void); +G_END_DECLS + #endif /* __NM_DHCP4_CONFIG_H__ */ diff --git a/libnm/nm-dhcp6-config.h b/libnm/nm-dhcp6-config.h index 3c18f5ec..2d6568e1 100644 --- a/libnm/nm-dhcp6-config.h +++ b/libnm/nm-dhcp6-config.h @@ -21,12 +21,10 @@ #ifndef __NM_DHCP6_CONFIG_H__ #define __NM_DHCP6_CONFIG_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #include "nm-dhcp-config.h" +G_BEGIN_DECLS + #define NM_TYPE_DHCP6_CONFIG (nm_dhcp6_config_get_type ()) #define NM_DHCP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DHCP6_CONFIG, NMDhcp6Config)) #define NM_DHCP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigClass)) @@ -42,8 +40,13 @@ typedef struct { typedef struct { NMDhcpConfigClass parent; + + /*< private >*/ + gpointer padding[4]; } NMDhcp6ConfigClass; GType nm_dhcp6_config_get_type (void); +G_END_DECLS + #endif /* __NM_DHCP6_CONFIG_H__ */ diff --git a/libnm/nm-dns-manager.h b/libnm/nm-dns-manager.h index b72aea7d..63989451 100644 --- a/libnm/nm-dns-manager.h +++ b/libnm/nm-dns-manager.h @@ -21,13 +21,11 @@ #ifndef __NM_DNS_MANAGER_H__ #define __NM_DNS_MANAGER_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #include "nm-object.h" #include "nm-client.h" +G_BEGIN_DECLS + #define NM_TYPE_DNS_MANAGER (nm_dns_manager_get_type ()) #define NM_DNS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DNS_MANAGER, NMDnsManager)) #define NM_DNS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DNS_MANAGER, NMDnsManagerClass)) @@ -51,8 +49,13 @@ struct _NMDnsManager { struct _NMDnsManagerClass { NMObjectClass parent; + + /*< private >*/ + gpointer padding[8]; }; +G_END_DECLS + GType nm_dns_manager_get_type (void); const char *nm_dns_manager_get_mode (NMDnsManager *manager); diff --git a/libnm/nm-enum-types.c.template b/libnm/nm-enum-types.c.template deleted file mode 100644 index 5abd5c79..00000000 --- a/libnm/nm-enum-types.c.template +++ /dev/null @@ -1,76 +0,0 @@ -/*** BEGIN file-header ***/ -#include "config.h" - -#include "nm-enum-types.h" -#include "nm-default.h" - -#include "nm-version-macros.h" -#include "NetworkManager.h" -#include "nm-access-point.h" -#include "nm-active-connection.h" -#include "nm-checkpoint.h" -#include "nm-client.h" -#include "nm-device-adsl.h" -#include "nm-device-bond.h" -#include "nm-device-bridge.h" -#include "nm-device-bt.h" -#include "nm-device-dummy.h" -#include "nm-device-ethernet.h" -#include "nm-device-generic.h" -#include "nm-device-infiniband.h" -#include "nm-device-ip-tunnel.h" -#include "nm-device-macsec.h" -#include "nm-device-macvlan.h" -#include "nm-device-modem.h" -#include "nm-device-olpc-mesh.h" -#include "nm-device-ovs-interface.h" -#include "nm-device-ovs-port.h" -#include "nm-device-ovs-bridge.h" -#include "nm-device-ppp.h" -#include "nm-device-team.h" -#include "nm-device-tun.h" -#include "nm-device-vlan.h" -#include "nm-device-vxlan.h" -#include "nm-device-wifi.h" -#include "nm-device-wimax.h" -#include "nm-device.h" -#include "nm-dhcp-config.h" -#include "nm-ip-config.h" -#include "nm-object.h" -#include "nm-remote-connection.h" -#include "nm-types.h" -#include "nm-vpn-connection.h" -#include "nm-vpn-editor.h" -#include "nm-wimax-nsp.h" -#include "nm-secret-agent-old.h" -#include "nm-vpn-plugin-old.h" -#include "nm-vpn-service-plugin.h" -/*** END file-header ***/ - -/*** BEGIN value-header ***/ -GType -@enum_name@_get_type (void) -{ - static volatile gsize g_define_type_id__volatile = 0; - - if (g_once_init_enter (&g_define_type_id__volatile)) - { - static const G@Type@Value values[] = { -/*** END value-header ***/ - -/*** BEGIN value-production ***/ - { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, -/*** END value-production ***/ - -/*** BEGIN value-tail ***/ - { 0, NULL, NULL } - }; - GType g_define_type_id = - g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); - g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); - } - - return g_define_type_id__volatile; -} - -/*** END value-tail ***/ diff --git a/libnm/nm-enum-types.h.template b/libnm/nm-enum-types.h.template deleted file mode 100644 index bd9ce40b..00000000 --- a/libnm/nm-enum-types.h.template +++ /dev/null @@ -1,22 +0,0 @@ -/*** BEGIN file-header ***/ -#ifndef __NM_ENUM_TYPES_H__ -#define __NM_ENUM_TYPES_H__ - -#include -#include - -G_BEGIN_DECLS - -/*** END file-header ***/ - -/*** BEGIN enumeration-production ***/ -GType @enum_name@_get_type (void) G_GNUC_CONST; -#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ()) - -/*** END enumeration-production ***/ - -/*** BEGIN file-tail ***/ -G_END_DECLS - -#endif /* __NM_ENUM_TYPES_H__ */ -/*** END file-tail ***/ diff --git a/libnm/nm-ip-config.c b/libnm/nm-ip-config.c index ca99b1d4..74db9994 100644 --- a/libnm/nm-ip-config.c +++ b/libnm/nm-ip-config.c @@ -304,7 +304,7 @@ nm_ip_config_class_init (NMIPConfigClass *config_class) G_PARAM_STATIC_STRINGS)); /** - * NMIPConfig:routes: (type GPtrArray(NMIPRoute)) + * NMIPConfig:routes: * * A #GPtrArray containing the routes (#NMIPRoute) of the configuration. **/ diff --git a/libnm/nm-ip4-config.h b/libnm/nm-ip4-config.h index 266e0bc5..d99b2113 100644 --- a/libnm/nm-ip4-config.h +++ b/libnm/nm-ip4-config.h @@ -22,12 +22,10 @@ #ifndef __NM_IP4_CONFIG_H__ #define __NM_IP4_CONFIG_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #include "nm-ip-config.h" +G_BEGIN_DECLS + #define NM_TYPE_IP4_CONFIG (nm_ip4_config_get_type ()) #define NM_IP4_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IP4_CONFIG, NMIP4Config)) #define NM_IP4_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IP4_CONFIG, NMIP4ConfigClass)) @@ -44,8 +42,13 @@ typedef struct { typedef struct { NMIPConfigClass parent; + + /*< private >*/ + gpointer padding[4]; } NMIP4ConfigClass; GType nm_ip4_config_get_type (void); +G_END_DECLS + #endif /* __NM_IP4_CONFIG_H__ */ diff --git a/libnm/nm-ip6-config.h b/libnm/nm-ip6-config.h index 1d21adb4..12e723b2 100644 --- a/libnm/nm-ip6-config.h +++ b/libnm/nm-ip6-config.h @@ -22,12 +22,10 @@ #ifndef __NM_IP6_CONFIG_H__ #define __NM_IP6_CONFIG_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #include "nm-ip-config.h" +G_BEGIN_DECLS + #define NM_TYPE_IP6_CONFIG (nm_ip6_config_get_type ()) #define NM_IP6_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_IP6_CONFIG, NMIP6Config)) #define NM_IP6_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_IP6_CONFIG, NMIP6ConfigClass)) @@ -44,8 +42,13 @@ typedef struct { typedef struct { NMIPConfigClass parent; + + /*< private >*/ + gpointer padding[4]; } NMIP6ConfigClass; GType nm_ip6_config_get_type (void); +G_END_DECLS + #endif /* __NM_IP6_CONFIG_H__ */ diff --git a/libnm/nm-libnm-utils.c b/libnm/nm-libnm-utils.c index 36219065..fbbfe2c5 100644 --- a/libnm/nm-libnm-utils.c +++ b/libnm/nm-libnm-utils.c @@ -16,7 +16,7 @@ * Boston, MA 02110-1301 USA. * * Copyright 2007 - 2008 Novell, Inc. - * Copyright 2007 - 2018 Red Hat, Inc. + * Copyright 2007 - 2017 Red Hat, Inc. */ #include "nm-default.h" @@ -25,14 +25,52 @@ /*****************************************************************************/ -static char * -_fixup_string (const char *desc, - const char *const *ignored_phrases, - const char *const *ignored_words, - gboolean square_brackets_sensible) +char * +nm_utils_fixup_desc_string (const char *desc) { + static const char *const IGNORED_PHRASES[] = { + "Multiprotocol MAC/baseband processor", + "Wireless LAN Controller", + "Wireless LAN Adapter", + "Wireless Adapter", + "Network Connection", + "Wireless Cardbus Adapter", + "Wireless CardBus Adapter", + "54 Mbps Wireless PC Card", + "Wireless PC Card", + "Wireless PC", + "PC Card with XJACK(r) Antenna", + "Wireless cardbus", + "Wireless LAN PC Card", + "Technology Group Ltd.", + "Communication S.p.A.", + "Business Mobile Networks BV", + "Mobile Broadband Minicard Composite Device", + "Mobile Communications AB", + "(PC-Suite Mode)", + }; + static const char *const IGNORED_WORDS[] = { + "Semiconductor", + "Components", + "Corporation", + "Communications", + "Company", + "Corp.", + "Corp", + "Co.", + "Inc.", + "Inc", + "Incorporated", + "Ltd.", + "Limited.", + "Intel?", + "chipset", + "adapter", + "[hex]", + "NDIS", + "Module", + }; char *desc_full; - gboolean in_paren = FALSE; char *p, *q; int i; @@ -50,23 +88,18 @@ _fixup_string (const char *desc, p = q + 1; } - /* replace '_', ',', ASCII control characters and parentheses, with space. */ + /* replace '_', ',', and ASCII controll characters with space. */ for (p = desc_full; p[0]; p++) { - if (*p == '(') - in_paren = TRUE; if ( NM_IN_SET (*p, '_', ',') - || *p < ' ' - || in_paren) + || *p < ' ') *p = ' '; - if (*p == ')') - in_paren = FALSE; } /* Attempt to shorten ID by ignoring certain phrases */ - for (i = 0; ignored_phrases[i]; i++) { - p = strstr (desc_full, ignored_phrases[i]); + for (i = 0; i < G_N_ELEMENTS (IGNORED_PHRASES); i++) { + p = strstr (desc_full, IGNORED_PHRASES[i]); if (p) { - const char *eow = &p[strlen (ignored_phrases[i])]; + const char *eow = &p[strlen (IGNORED_PHRASES[i])]; /* require that the phrase is delimited by space, or * at the beginning or end of the description. */ @@ -79,7 +112,7 @@ _fixup_string (const char *desc, /* Attempt to shorten ID by ignoring certain individual words. * - word-split the description at spaces * - coalesce multiple spaces - * - skip over ignored_words */ + * - skip over IGNORED_WORDS */ p = desc_full; q = desc_full; for (;;) { @@ -98,7 +131,9 @@ _fixup_string (const char *desc, if (eow) *eow = '\0'; - if (nm_utils_strv_find_first ((char **) ignored_words, -1, p) >= 0) + if (nm_utils_strv_find_first ((char **) IGNORED_WORDS, + G_N_ELEMENTS (IGNORED_WORDS), + p) >= 0) goto next; l = strlen (p); @@ -117,529 +152,11 @@ next: *q++ = '\0'; - p = strchr (desc_full, '['); - if (p == desc_full) { - /* All we're left with is in square brackets. - * Always prefer that to a blank string.*/ - square_brackets_sensible = TRUE; - } - if (square_brackets_sensible) { - /* If there's a [] that survived the substitution, then the string - * is a short form that is generally preferrable. */ - q = strchr (desc_full, ']'); - if (p && q > p) { - p++; - memmove (desc_full, p, q - p); - desc_full[q - p] = '\0'; - } - } else { - /* [] sometimes contains the preferred human-readable name, but - * mostly it's utterly useless. Sigh. Drop it. */ - if (p) { - if (p > desc_full && p[-1] == ' ') - p--; - *p = '\0'; - } - } - if (!desc_full[0]) { g_free (desc_full); return NULL; } - return desc_full; -} - -char * -nm_utils_fixup_vendor_string (const char *desc) -{ - static const char *const IGNORED_PHRASES[] = { - "Access Systems", - "Business Mobile Networks BV", - "Communications & Multimedia", - "Company of Japan", - "Computer Co.", - "Computer Corp.", - "Computer Corporation", - "Computer Inc.", - "Computer, Inc.", - "Information and Communication Products", - "Macao Commercial Offshore", - "Mobile Phones", - "(M) Son", - "Multimedia Internet Technology", - "Technology Group Ltd.", - "Wireless Networks", - "Wireless Solutions", - NULL, - }; - static const char *const IGNORED_WORDS[] = { - "AB", - "AG", - "A/S", - "ASA", - "B.V.", - "Chips", - "Co.", - "Co", - "Communications", - "Components", - "Computers", - "Computertechnik", - "corp.", - "Corp.", - "Corp", - "Corporation", - "Design", - "Electronics", - "Enterprise", - "Enterprises", - "Europe", - "GmbH", - "Hardware", - "[hex]", - "Holdings", - "Inc.", - "Inc", - "INC.", - "Incorporated", - "Instruments", - "International", - "Intl.", - "Labs", - "Limited.", - "Limited", - "Ltd.", - "Ltd", - "Microelectronics", - "Microsystems", - "MSM", - "Multimedia", - "Networks", - "Norway", - "Optical", - "PCS", - "Semiconductor", - "Systems", - "Systemtechnik", - "Techcenter", - "Technik", - "Technologies", - "Technology", - "TECHNOLOGY", - "Telephonics", - "USA", - "WCDMA", - NULL, - }; - char *desc_full; - char *p; - - desc_full = _fixup_string (desc, IGNORED_PHRASES, IGNORED_WORDS, TRUE); - if (!desc_full) - return NULL; - - /* Chop off everything after a slash. */ - for (p = desc_full; *p; p++) { - if ((p[0] == ' ' && p[1] == '/') || p[0] == '/') { - p[0] = '\0'; - break; - } - } - - nm_assert (g_utf8_validate (desc_full, -1, NULL)); - - return desc_full; -} - -char * -nm_utils_fixup_product_string (const char *desc) -{ - static const char *const IGNORED_PHRASES[] = { - "100/10 MBit", - "10/100 Mbps", - "1.0 GbE", - "10 GbE", - "10 Gigabit", - "10 Mbps", - "1/10 Gigabit", - "150 Mbps", - "2.5 GbE", - "54 Mbps", - "Attached Port", - "+ BT", - "\"CDC Subset\"", - "CE Media Processor", - "Controller Area Network", - "Converged Network", - "DEC-Tulip compatible", - "Dish Adapter", - "Double 108 Mbps", - "Dual Band", - "Dual Port", - "Embedded UTP", - "Ethernet Connection", - "Ethernet Pro 100", - "Express Module", - "Fabric Adapter", - "Fast Ethernet", - "for 10GBASE-T" , - "for 10GbE backplane" , - "for 10GbE QSFP+" , - "for 10GbE SFP+" , - "for 1GbE", - "for 20GbE backplane" , - "for 25GbE backplane" , - "for 25GbE SFP28" , - "for 40GbE backplane" , - "for 40GbE QSFP+" , - "G Adapter", - "Gigabit Desktop Network", - "Gigabit Ethernet", - "Gigabit or", - "Host Interface", - "Host Virtual Interface", - "IEEE 802.11a/b/g", - "IEEE 802.11g", - "IEEE 802.11G", - "IEEE 802.11n", - "MAC + PHY", - "Mini Card", - "Mini Wireless", - "multicore SoC", - "Multi Function", - "N Draft 11n Wireless", - "Network Connection", - "Network Everywhere", - "N Wireless", - "N+ Wireless", - "OCT To Fast Ethernet Converter", - "PC Card", - "PCI Express", - "Platform Controller Hub", - "Plus Bluetooth", - "Quad Gigabit", - "rev 1", - "rev 17", - "rev 2", - "rev A", - "rev B", - "rev F", - "TO Ethernet", - "Turbo Wireless Adapter", - "Unified Wire", - "USB 1.1", - "USB 2.0", - "Virtual media for", - "WiFi Link", - "+ WiMAX", - "WiMAX/WiFi Link", - "Wireless G", - "Wireless G+", - "Wireless Lan", - "Wireless Mini adapter", - "Wireless Mini Adapter", - "Wireless N", - "with 1000-BASE-T interface", - "with CX4 copper interface", - "with Range Amplifier", - "with SR-XFP optical interface", - "w/ Upgradable Antenna", - NULL, - }; - static const char *const IGNORED_WORDS[] = { - "1000BaseSX", - "1000BASE-T", - "1000Base-ZX", - "100/10M", - "100baseFx", - "100Base-MII", - "100Base-T", - "100BaseT4", - "100Base-TX", - "100BaseTX", - "100GbE", - "100Mbps", - "100MBps", - "10/100", - "10/100/1000", - "10/100/1000Base-T", - "10/100/1000BASE-T", - "10/100BaseT", - "10/100baseTX", - "10/100BaseTX", - "10/100/BNC", - "10/100M", - "10/20-Gigabit", - "10/25/40/50GbE", - "10/40G", - "10base-FL", - "10BaseT", - "10BASE-T", - "10G", - "10Gb", - "10Gb/25Gb", - "10Gb/25Gb/40Gb/50Gb", - "10Gbase-T", - "10GBase-T", - "10GBASE-T", - "10GbE", - "10Gbps", - "10-Giga", - "10-Gigabit", - "10mbps", - "10Mbps", - "1/10GbE", - "1/10-Gigabit", - "11b/g/n", - "11g", - "150Mbps", - "16Gbps/10Gbps", - "1GbE", - "1x2:2", - "20GbE", - "25Gb", - "25GbE", - "2-Port", - "2x3:3", - "3G", - "3G/4G", - "3x3:3", - "40GbE", - "4G", - "54g", - "54M", - "54Mbps", - "56k", - "5G", - "802.11", - "802.11a/b/g", - "802.11abg", - "802.11a/b/g/n", - "802.11abgn", - "802.11ac", - "802.11ad", - "802.11a/g", - "802.11b", - "802.11b/g", - "802.11bg", - "802.11b/g/n", - "802.11bgn", - "802.11b/g/n-draft", - "802.11g", - "802.11n", - "802.11N", - "802.11n/b/g", - "802.11ng", - "802AIN", - "802UIG-1", - "adapter", - "Adapter", - "adaptor", - "ADSL", - "Basic", - "CAN-Bus", - "card", - "Card", - "Cardbus", - "CardBus", - "CDMA", - "CNA", - "Composite", - "controller", - "Controller", - "Copper", - "DB", - "Desktop", - "device", - "Device", - "dongle", - "driver", - "Dual-band", - "Dual-Protocol", - "EISA", - "Enhanced", - "ethernet.", - "ethernet", - "Ethernet", - "Ethernet/RNDIS", - "ExpressModule", - "family", - "Family", - "Fast/Gigabit", - "Fiber", - "gigabit", - "Gigabit", - "G-NIC", - "Hi-Gain", - "Hi-Speed", - "HSDPA", - "HSUPA", - "integrated", - "Integrated", - "interface", - "LAN", - "LAN+Winmodem", - "Laptop", - "LTE", - "LTE/UMTS/GSM", - "MAC", - "Micro", - "Mini-Card", - "Mini-USB", - "misprogrammed", - "modem", - "Modem", - "Modem/Networkcard", - "Module", - "Multimode", - "Multithreaded", - "Name:", - "net", - "network", - "Network", - "n/g/b", - "NIC", - "Notebook", - "OEM", - "PCI", - "PCI64", - "PCIe", - "PCI-E", - "PCI-Express", - "PCI-X", - "PCMCIA", - "PDA", - "PnP", - "RDMA", - "RJ-45", - "Series", - "Server", - "SoC", - "Switch", - "Technologies", - "TOE", - "USB", - "USB2.0", - "USB/Ethernet", - "UTP", - "UTP/Coax", - "v1", - "v1.1", - "v2", - "V2.0", - "v3", - "v4", - "wifi", - "Wi-Fi", - "WiFi", - "wireless", - "Wireless", - "Wireless-150N", - "Wireless-300N", - "Wireless-G", - "Wireless-N", - "WLAN", - NULL, - }; - char *desc_full; - char *p; - - desc_full = _fixup_string (desc, IGNORED_PHRASES, IGNORED_WORDS, FALSE); - if (!desc_full) - return NULL; - - /* Chop off everything after a '-'. */ - for (p = desc_full; *p; p++) { - if (p[0] == ' ' && p[1] == '-' && p[2] == ' ') { - p[0] = '\0'; - break; - } - } - nm_assert (g_utf8_validate (desc_full, -1, NULL)); - return desc_full; } - -#if WITH_FAKE_TYPELIBS - -/* - * Here we register empty "NMClient" and "NetworkManager" GIR modules as soon - * as we are loaded (if gnome-introspection is being used). This prevents the - * real modules from being loaded because they would in turn load libnm-glib - * and abort() and crash. - * - * For the high level languages that utilize GIR the crash is highly inconvenient - * while the inability to resolve any methods and attributes is potentially - * recoverable. - */ - -#include - -GResource *typelibs_get_resource (void); -void typelibs_register_resource (void); - -static void __attribute__((constructor)) -_nm_libnm_utils_init (void) -{ - GITypelib *typelib; - GBytes *data; - const char *namespace; - GModule *self; - GITypelib *(*_g_typelib_new_from_const_memory) (const guint8 *memory, - gsize len, - GError **error) = NULL; - const char *(*_g_irepository_load_typelib) (GIRepository *repository, - GITypelib *typelib, - GIRepositoryLoadFlags flags, - GError **error) = NULL; - const char *names[] = { "/org/freedesktop/libnm/fake-typelib/NetworkManager.typelib", - "/org/freedesktop/libnm/fake-typelib/NMClient.typelib" }; - int i; - - self = g_module_open (NULL, 0); - if (!self) - return; - g_module_symbol (self, "g_typelib_new_from_const_memory", - (gpointer *) &_g_typelib_new_from_const_memory); - if (_g_typelib_new_from_const_memory) { - g_module_symbol (self, "g_irepository_load_typelib", - (gpointer *) &_g_irepository_load_typelib); - } - g_module_close (self); - - if (!_g_typelib_new_from_const_memory || !_g_irepository_load_typelib) - return; - - typelibs_register_resource (); - - for (i = 0; i < 2; i++) { - gs_free_error GError *error = NULL; - - data = g_resource_lookup_data (typelibs_get_resource (), - names[i], - G_RESOURCE_LOOKUP_FLAGS_NONE, - &error); - if (!data) { - g_warning ("Fake typelib %s could not be loaded: %s", names[i], error->message); - return; - } - - typelib = _g_typelib_new_from_const_memory (g_bytes_get_data (data, NULL), - g_bytes_get_size (data), - &error); - if (!typelib) { - g_warning ("Could not create fake typelib instance %s: %s", names[i], error->message); - return; - } - - namespace = _g_irepository_load_typelib (NULL, typelib, 0, &error); - if (!namespace) { - g_warning ("Could not load fake typelib %s: %s", names[i], error->message); - return; - } - } -} - -#endif /* WITH_FAKE_TYPELIBS */ diff --git a/libnm/nm-libnm-utils.h b/libnm/nm-libnm-utils.h index 9b48b0a7..4a5a361c 100644 --- a/libnm/nm-libnm-utils.h +++ b/libnm/nm-libnm-utils.h @@ -15,17 +15,12 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright 2017, 2018 Red Hat, Inc. + * Copyright 2017 Red Hat, Inc. */ #ifndef __NM_LIBNM_UTILS_H__ #define __NM_LIBNM_UTILS_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - -char *nm_utils_fixup_vendor_string (const char *desc); -char *nm_utils_fixup_product_string (const char *desc); +char *nm_utils_fixup_desc_string (const char *desc); #endif /* __NM_LIBNM_UTILS_H__ */ diff --git a/libnm/nm-manager.c b/libnm/nm-manager.c index 2b9e0d96..5eeed668 100644 --- a/libnm/nm-manager.c +++ b/libnm/nm-manager.c @@ -26,7 +26,6 @@ #include #include "nm-utils.h" -#include "nm-checkpoint.h" #include "nm-common-macros.h" #include "nm-device-ethernet.h" #include "nm-device-wifi.h" @@ -35,7 +34,7 @@ #include "nm-active-connection.h" #include "nm-vpn-connection.h" #include "nm-dbus-helpers.h" -#include "c-list/src/c-list.h" +#include "nm-utils/c-list.h" #include "introspection/org.freedesktop.NetworkManager.h" @@ -62,8 +61,6 @@ typedef struct { GPtrArray *devices; GPtrArray *all_devices; GPtrArray *active_connections; - GPtrArray *checkpoints; - GSList *added_checkpoints; NMConnectivityState connectivity; NMActiveConnection *primary_connection; NMActiveConnection *activating_connection; @@ -110,7 +107,6 @@ enum { PROP_PRIMARY_CONNECTION, PROP_ACTIVATING_CONNECTION, PROP_DEVICES, - PROP_CHECKPOINTS, PROP_METERED, PROP_ALL_DEVICES, @@ -124,8 +120,6 @@ enum { ANY_DEVICE_REMOVED, ACTIVE_CONNECTION_ADDED, ACTIVE_CONNECTION_REMOVED, - CHECKPOINT_ADDED, - CHECKPOINT_REMOVED, PERMISSION_CHANGED, LAST_SIGNAL @@ -135,53 +129,6 @@ static guint signals[LAST_SIGNAL] = { 0 }; /*****************************************************************************/ -typedef struct { - NMManager *manager; - GSimpleAsyncResult *simple; - char *path; -} CheckpointInfo; - -static CheckpointInfo * -find_checkpoint_info (NMManager *manager, const char *path) -{ - NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); - CheckpointInfo *info; - GSList *iter; - - for (iter = priv->added_checkpoints; iter; iter = g_slist_next (iter)) { - info = iter->data; - if (nm_streq0 (path, info->path)) - return info; - } - - return NULL; -} - -static void -checkpoint_info_complete (NMManager *self, - CheckpointInfo *info, - NMCheckpoint *checkpoint, - GError *error) -{ - NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); - - g_return_if_fail (info); - - if (checkpoint) { - g_simple_async_result_set_op_res_gpointer (info->simple, - g_object_ref (checkpoint), - g_object_unref); - } else - g_simple_async_result_set_from_error (info->simple, error); - g_simple_async_result_complete (info->simple); - - g_object_unref (info->simple); - priv->added_checkpoints = g_slist_remove (priv->added_checkpoints, info); - - g_free (info->path); - g_slice_free (CheckpointInfo, info); -} - static void nm_manager_init (NMManager *manager) { @@ -192,7 +139,7 @@ nm_manager_init (NMManager *manager) priv->state = NM_STATE_UNKNOWN; priv->connectivity = NM_CONNECTIVITY_UNKNOWN; - priv->permissions = g_hash_table_new (nm_direct_hash, NULL); + priv->permissions = g_hash_table_new (g_direct_hash, g_direct_equal); priv->devices = g_ptr_array_new (); priv->all_devices = g_ptr_array_new (); priv->active_connections = g_ptr_array_new (); @@ -242,7 +189,6 @@ init_dbus (NMObject *object) { NM_MANAGER_PRIMARY_CONNECTION, &priv->primary_connection, NULL, NM_TYPE_ACTIVE_CONNECTION }, { NM_MANAGER_ACTIVATING_CONNECTION, &priv->activating_connection, NULL, NM_TYPE_ACTIVE_CONNECTION }, { NM_MANAGER_DEVICES, &priv->devices, NULL, NM_TYPE_DEVICE, "device" }, - { NM_MANAGER_CHECKPOINTS, &priv->checkpoints, NULL, NM_TYPE_CHECKPOINT, "checkpoint" }, { NM_MANAGER_METERED, &priv->metered }, { NM_MANAGER_ALL_DEVICES, &priv->all_devices, NULL, NM_TYPE_DEVICE, "any-device" }, { NULL }, @@ -260,23 +206,6 @@ init_dbus (NMObject *object) G_CALLBACK (manager_recheck_permissions), object, 0); } -static void -object_creation_failed (NMObject *object, const char *failed_path) -{ - NMManager *self = NM_MANAGER (object); - CheckpointInfo *info; - GError *add_error; - - info = find_checkpoint_info (self, failed_path); - if (info) { - add_error = g_error_new_literal (NM_CLIENT_ERROR, - NM_CLIENT_ERROR_OBJECT_CREATION_FAILED, - _("Checkpoint was removed before it was initialized")); - checkpoint_info_complete (self, info, NULL, add_error); - g_error_free (add_error); - } -} - static NMClientPermission nm_permission_to_client (const char *nm) { @@ -790,7 +719,8 @@ NMDevice * nm_manager_get_device_by_path (NMManager *manager, const char *object_path) { const GPtrArray *devices; - guint i; + int i; + NMDevice *device = NULL; g_return_val_if_fail (NM_IS_MANAGER (manager), NULL); g_return_val_if_fail (object_path, NULL); @@ -799,25 +729,12 @@ nm_manager_get_device_by_path (NMManager *manager, const char *object_path) for (i = 0; i < devices->len; i++) { NMDevice *candidate = g_ptr_array_index (devices, i); if (!strcmp (nm_object_get_path (NM_OBJECT (candidate)), object_path)) { - return candidate; + device = candidate; + break; } } - return NULL; -} - -static NMCheckpoint * -get_checkpoint_by_path (NMManager *manager, const char *object_path) -{ - NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); - NMCheckpoint *candidate; - guint i; - for (i = 0; i < priv->checkpoints->len; i++) { - candidate = priv->checkpoints->pdata[i]; - if (nm_streq (nm_object_get_path (NM_OBJECT (candidate)), object_path)) - return candidate; - } - return NULL; + return device; } NMDevice * @@ -1198,16 +1115,6 @@ active_connection_removed (NMManager *self, NMActiveConnection *ac) recheck_pending_activations (self); } -static void -checkpoint_added (NMManager *manager, NMCheckpoint *checkpoint) -{ - CheckpointInfo *info; - - info = find_checkpoint_info (manager, nm_object_get_path (NM_OBJECT (checkpoint))); - if (info) - checkpoint_info_complete (manager, info, checkpoint, NULL); -} - gboolean nm_manager_deactivate_connection (NMManager *manager, NMActiveConnection *active, @@ -1309,300 +1216,6 @@ free_active_connections (NMManager *manager) /*****************************************************************************/ -static const char ** -get_device_paths (const GPtrArray *devices) -{ - const char **array; - guint i; - - array = g_new (const char *, devices->len + 1); - for (i = 0; i < devices->len; i++) - array[i] = nm_object_get_path (NM_OBJECT (devices->pdata[i])); - - array[i] = NULL; - - return array; -} - -const GPtrArray * -nm_manager_get_checkpoints (NMManager *manager) -{ - g_return_val_if_fail (NM_IS_MANAGER (manager), NULL); - - return NM_MANAGER_GET_PRIVATE (manager)->checkpoints; -} - -static void -checkpoint_created_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - CheckpointInfo *info = user_data; - NMManager *self = info->manager; - gs_free_error GError *error = NULL; - NMCheckpoint *checkpoint; - - nmdbus_manager_call_checkpoint_create_finish (NMDBUS_MANAGER (object), - &info->path, result, &error); - if (error) { - g_dbus_error_strip_remote_error (error); - checkpoint_info_complete (self, info, NULL, error); - return; - } - - checkpoint = get_checkpoint_by_path (self, info->path); - if (!checkpoint) { - /* this is really problematic. The async request returned, but - * we don't yet have a visible (fully initialized) NMCheckpoint instance - * to return. Wait longer for it to appear. However, it's ugly. */ - return; - } - - checkpoint_info_complete (self, info, checkpoint, NULL); -} - -void -nm_manager_checkpoint_create (NMManager *manager, - const GPtrArray *devices, - guint32 rollback_timeout, - NMCheckpointCreateFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); - gs_free const char **paths = NULL; - CheckpointInfo *info; - - g_return_if_fail (NM_IS_MANAGER (manager)); - - info = g_slice_new0 (CheckpointInfo); - info->manager = manager; - info->simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data, - nm_manager_checkpoint_create); - if (cancellable) - g_simple_async_result_set_check_cancellable (info->simple, cancellable); - paths = get_device_paths (devices); - nmdbus_manager_call_checkpoint_create (NM_MANAGER_GET_PRIVATE (manager)->proxy, - paths, - rollback_timeout, - flags, - cancellable, - checkpoint_created_cb, - info); - priv->added_checkpoints = g_slist_append (priv->added_checkpoints, info); -} - -NMCheckpoint * -nm_manager_checkpoint_create_finish (NMManager *manager, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail (NM_IS_MANAGER (manager), NULL); - g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL); - - simple = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple, error)) - return NULL; - else - return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple)); -} - -static void -checkpoint_destroy_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - GSimpleAsyncResult *simple = user_data; - GError *error = NULL; - - if (nmdbus_manager_call_checkpoint_destroy_finish (NMDBUS_MANAGER (object), - result, &error)) - g_simple_async_result_set_op_res_gboolean (simple, TRUE); - else { - g_dbus_error_strip_remote_error (error); - g_simple_async_result_take_error (simple, error); - } - g_simple_async_result_complete (simple); - g_object_unref (simple); -} - -void -nm_manager_checkpoint_destroy (NMManager *manager, - const char *checkpoint_path, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - - g_return_if_fail (NM_IS_MANAGER (manager)); - g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); - - simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data, - nm_manager_checkpoint_destroy); - if (cancellable) - g_simple_async_result_set_check_cancellable (simple, cancellable); - - nmdbus_manager_call_checkpoint_destroy (NM_MANAGER_GET_PRIVATE (manager)->proxy, - checkpoint_path, - cancellable, - checkpoint_destroy_cb, simple); -} - -gboolean -nm_manager_checkpoint_destroy_finish (NMManager *manager, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), - nm_manager_checkpoint_destroy), - FALSE); - - simple = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple, error)) - return FALSE; - else - return g_simple_async_result_get_op_res_gboolean (simple); -} - -static void -checkpoint_rollback_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - GSimpleAsyncResult *simple = user_data; - GError *error = NULL; - GVariant *variant = NULL; - GVariantIter iter; - GHashTable *hash; - const char *path; - guint r; - - if (nmdbus_manager_call_checkpoint_rollback_finish (NMDBUS_MANAGER (object), - &variant, - result, - &error)) { - hash = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, NULL); - g_variant_iter_init (&iter, variant); - while (g_variant_iter_next (&iter, "{&su}", &path, &r)) - g_hash_table_insert (hash, g_strdup (path), GUINT_TO_POINTER (r)); - g_simple_async_result_set_op_res_gpointer (simple, hash, (GDestroyNotify) g_hash_table_unref); - } else { - g_dbus_error_strip_remote_error (error); - g_simple_async_result_take_error (simple, error); - } - g_simple_async_result_complete (simple); - g_object_unref (simple); -} - -void -nm_manager_checkpoint_rollback (NMManager *manager, - const char *checkpoint_path, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - - g_return_if_fail (NM_IS_MANAGER (manager)); - g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); - - simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data, - nm_manager_checkpoint_rollback); - if (cancellable) - g_simple_async_result_set_check_cancellable (simple, cancellable); - - nmdbus_manager_call_checkpoint_rollback (NM_MANAGER_GET_PRIVATE (manager)->proxy, - checkpoint_path, - cancellable, - checkpoint_rollback_cb, simple); -} - -GHashTable * -nm_manager_checkpoint_rollback_finish (NMManager *manager, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), - nm_manager_checkpoint_rollback), - NULL); - - simple = G_SIMPLE_ASYNC_RESULT (result); - if (g_simple_async_result_propagate_error (simple, error)) - return NULL; - else - return g_simple_async_result_get_op_res_gpointer (simple); -} - -static void -checkpoint_adjust_rollback_timeout_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - gs_unref_object GSimpleAsyncResult *simple = user_data; - GError *error = NULL; - - if (nmdbus_manager_call_checkpoint_adjust_rollback_timeout_finish (NMDBUS_MANAGER (object), - result, - &error)) - g_simple_async_result_set_op_res_gboolean (simple, TRUE); - else { - g_dbus_error_strip_remote_error (error); - g_simple_async_result_take_error (simple, error); - } - g_simple_async_result_complete (simple); -} - -void -nm_manager_checkpoint_adjust_rollback_timeout (NMManager *manager, - const char *checkpoint_path, - guint32 add_timeout, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - - g_return_if_fail (NM_IS_MANAGER (manager)); - g_return_if_fail (checkpoint_path && checkpoint_path[0] == '/'); - - simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data, - nm_manager_checkpoint_adjust_rollback_timeout); - if (cancellable) - g_simple_async_result_set_check_cancellable (simple, cancellable); - - nmdbus_manager_call_checkpoint_adjust_rollback_timeout (NM_MANAGER_GET_PRIVATE (manager)->proxy, - checkpoint_path, - add_timeout, - cancellable, - checkpoint_adjust_rollback_timeout_cb, - simple); -} - -gboolean -nm_manager_checkpoint_adjust_rollback_timeout_finish (NMManager *manager, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (manager), - nm_manager_checkpoint_adjust_rollback_timeout), - FALSE); - - simple = G_SIMPLE_ASYNC_RESULT (result); - return !g_simple_async_result_propagate_error (simple, error); -} - -/*****************************************************************************/ - static void constructed (GObject *object) { @@ -1869,9 +1482,6 @@ get_property (GObject *object, case PROP_DEVICES: g_value_take_boxed (value, _nm_utils_copy_object_array (nm_manager_get_devices (self))); break; - case PROP_CHECKPOINTS: - g_value_take_boxed (value, _nm_utils_copy_object_array (nm_manager_get_checkpoints (self))); - break; case PROP_METERED: g_value_set_uint (value, priv->metered); break; @@ -1900,13 +1510,11 @@ nm_manager_class_init (NMManagerClass *manager_class) object_class->finalize = finalize; nm_object_class->init_dbus = init_dbus; - nm_object_class->object_creation_failed = object_creation_failed; manager_class->device_added = device_added; manager_class->device_removed = device_removed; manager_class->active_connection_added = active_connection_added; manager_class->active_connection_removed = active_connection_removed; - manager_class->checkpoint_added = checkpoint_added; /* properties */ @@ -2014,12 +1622,6 @@ nm_manager_class_init (NMManagerClass *manager_class) G_TYPE_PTR_ARRAY, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property - (object_class, PROP_CHECKPOINTS, - g_param_spec_boxed (NM_MANAGER_CHECKPOINTS, "", "", - G_TYPE_PTR_ARRAY, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); /** * NMManager:metered: * @@ -2091,23 +1693,6 @@ nm_manager_class_init (NMManagerClass *manager_class) NULL, NULL, NULL, G_TYPE_NONE, 1, G_TYPE_OBJECT); - signals[CHECKPOINT_ADDED] = - g_signal_new ("checkpoint-added", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (NMManagerClass, checkpoint_added), - NULL, NULL, NULL, - G_TYPE_NONE, 1, - G_TYPE_OBJECT); - signals[CHECKPOINT_REMOVED] = - g_signal_new ("checkpoint-removed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (NMManagerClass, checkpoint_removed), - NULL, NULL, NULL, - G_TYPE_NONE, 1, - G_TYPE_OBJECT); - signals[PERMISSION_CHANGED] = g_signal_new ("permission-changed", G_OBJECT_CLASS_TYPE (object_class), diff --git a/libnm/nm-manager.h b/libnm/nm-manager.h index 0a278aee..209a99a0 100644 --- a/libnm/nm-manager.h +++ b/libnm/nm-manager.h @@ -22,13 +22,11 @@ #ifndef __NM_MANAGER_H__ #define __NM_MANAGER_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #include "nm-object.h" #include "nm-client.h" +G_BEGIN_DECLS + #define NM_TYPE_MANAGER (nm_manager_get_type ()) #define NM_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_MANAGER, NMManager)) #define NM_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_MANAGER, NMManagerClass)) @@ -53,7 +51,6 @@ #define NM_MANAGER_PRIMARY_CONNECTION "primary-connection" #define NM_MANAGER_ACTIVATING_CONNECTION "activating-connection" #define NM_MANAGER_DEVICES "devices" -#define NM_MANAGER_CHECKPOINTS "checkpoints" #define NM_MANAGER_METERED "metered" #define NM_MANAGER_ALL_DEVICES "all-devices" @@ -72,11 +69,11 @@ typedef struct { void (*device_removed) (NMManager *manager, NMDevice *device); void (*active_connection_added) (NMManager *manager, NMActiveConnection *ac); void (*active_connection_removed) (NMManager *manager, NMActiveConnection *ac); - void (*checkpoint_added) (NMManager *manager, NMCheckpoint *checkpoint); - void (*checkpoint_removed) (NMManager *manager, NMCheckpoint *checkpoint); void (*permission_changed) (NMManager *manager, NMClientPermission permission, NMClientPermissionResult result); + + /* nm-manager.h is internal API. We can add more slots without breaking ABI. */ } NMManagerClass; GType nm_manager_get_type (void); @@ -102,10 +99,13 @@ gboolean nm_manager_wimax_get_enabled (NMManager *manager); void nm_manager_wimax_set_enabled (NMManager *manager, gboolean enabled); gboolean nm_manager_wimax_hardware_get_enabled (NMManager *manager); +NM_AVAILABLE_IN_1_10 gboolean nm_manager_connectivity_check_get_available (NMManager *manager); +NM_AVAILABLE_IN_1_10 gboolean nm_manager_connectivity_check_get_enabled (NMManager *manager); +NM_AVAILABLE_IN_1_10 void nm_manager_connectivity_check_set_enabled (NMManager *manager, gboolean enabled); @@ -137,6 +137,7 @@ NMConnectivityState nm_manager_check_connectivity_finish (NMManager *manager, /* Devices */ const GPtrArray *nm_manager_get_devices (NMManager *manager); +NM_AVAILABLE_IN_1_2 const GPtrArray *nm_manager_get_all_devices(NMManager *manager); NMDevice *nm_manager_get_device_by_path (NMManager *manager, const char *object_path); NMDevice *nm_manager_get_device_by_iface (NMManager *manager, const char *iface); @@ -183,41 +184,6 @@ gboolean nm_manager_deactivate_connection_finish (NMManager *manager, GAsyncResult *result, GError **error); -const GPtrArray *nm_manager_get_checkpoints (NMManager *manager); -void nm_manager_checkpoint_create (NMManager *manager, - const GPtrArray *devices, - guint32 rollback_timeout, - NMCheckpointCreateFlags flags, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -NMCheckpoint *nm_manager_checkpoint_create_finish (NMManager *manager, - GAsyncResult *result, - GError **error); -void nm_manager_checkpoint_destroy (NMManager *manager, - const char *checkpoint_path, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean nm_manager_checkpoint_destroy_finish (NMManager *manager, - GAsyncResult *result, - GError **error); -void nm_manager_checkpoint_rollback (NMManager *manager, - const char *checkpoint_path, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -GHashTable *nm_manager_checkpoint_rollback_finish (NMManager *manager, - GAsyncResult *result, - GError **error); -void nm_manager_checkpoint_adjust_rollback_timeout (NMManager *manager, - const char *checkpoint_path, - guint32 add_timeout, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -gboolean nm_manager_checkpoint_adjust_rollback_timeout_finish (NMManager *manager, - GAsyncResult *result, - GError **error); +G_END_DECLS #endif /* __NM_MANAGER_H__ */ diff --git a/libnm/nm-object-private.h b/libnm/nm-object-private.h index 1f6d54d3..8c2f3a9c 100644 --- a/libnm/nm-object-private.h +++ b/libnm/nm-object-private.h @@ -21,10 +21,6 @@ #ifndef __NM_OBJECT_PRIVATE_H__ #define __NM_OBJECT_PRIVATE_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #include "nm-object.h" typedef gboolean (*PropertyMarshalFunc) (NMObject *, GParamSpec *, GVariant *, gpointer); diff --git a/libnm/nm-object.c b/libnm/nm-object.c index 605da492..82e519e6 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -33,7 +33,7 @@ #include "nm-dbus-helpers.h" #include "nm-client.h" #include "nm-core-internal.h" -#include "c-list/src/c-list.h" +#include "nm-utils/c-list.h" static gboolean debug = FALSE; #define dbgmsg(f,...) if (G_UNLIKELY (debug)) { g_message (f, ## __VA_ARGS__ ); } @@ -608,9 +608,8 @@ handle_object_property (NMObject *self, const char *property_name, GVariant *val object = g_dbus_object_manager_get_object (priv->object_manager, path); if (!object) { /* This is a server bug -- a dangling object path for an object - * that does not exist. - * - * NOTE: We've ignored this before and the server hits the condition + * that does not exist. */ + /* XXX: We've ignored this before and the server hits the condition * more often that it should. Given we're able to recover from * ther error, let's lower the severity of the log message to * avoid unnecessarily bothering the user. This can be removed @@ -956,7 +955,7 @@ _nm_object_register_properties (NMObject *object, G_CALLBACK (properties_changed), object); g_ptr_array_add (priv->proxies, proxy); - instance = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_free); + instance = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); priv->property_tables = g_slist_prepend (priv->property_tables, instance); for (tmp = (NMPropertiesInfo *) info; tmp->name; tmp++) { diff --git a/libnm/nm-property-docs.xml b/libnm/nm-property-docs.xml index 029477d9..6c6491a0 100644 --- a/libnm/nm-property-docs.xml +++ b/libnm/nm-property-docs.xml @@ -5,23 +5,22 @@ - + - + - - + @@ -98,7 +97,7 @@ - + @@ -128,14 +127,14 @@ - - + + - + - - - + + + @@ -169,8 +168,8 @@ - - + + @@ -178,7 +177,7 @@ - + @@ -193,14 +192,14 @@ - + - + @@ -216,7 +215,6 @@ - @@ -448,7 +446,6 @@ - diff --git a/libnm/nm-remote-connection-private.h b/libnm/nm-remote-connection-private.h index 5ff282f4..e3f35428 100644 --- a/libnm/nm-remote-connection-private.h +++ b/libnm/nm-remote-connection-private.h @@ -21,10 +21,6 @@ #ifndef __NM_REMOTE_CONNECTION_PRIVATE_H__ #define __NM_REMOTE_CONNECTION_PRIVATE_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #define NM_REMOTE_CONNECTION_INIT_RESULT "init-result" typedef enum { diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index bd60c413..80bf179d 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -50,7 +50,6 @@ G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, NM_TYPE_OBJEC enum { PROP_0, PROP_UNSAVED, - PROP_FLAGS, PROP_VISIBLE, LAST_PROP @@ -60,7 +59,6 @@ typedef struct { NMDBusSettingsConnection *proxy; gboolean unsaved; - guint32 flags; gboolean visible; } NMRemoteConnectionPrivate; @@ -103,7 +101,7 @@ update2_cb (GObject *proxy, GAsyncResult *result, gpointer user_data) * * Asynchronously calls the Update2() D-Bus method. * - * Since: 1.12 + * Since: 1.10.2 **/ void nm_remote_connection_update2 (NMRemoteConnection *connection, @@ -653,22 +651,6 @@ nm_remote_connection_get_unsaved (NMRemoteConnection *connection) return NM_REMOTE_CONNECTION_GET_PRIVATE (connection)->unsaved; } -/** - * nm_remote_connection_get_flags: - * @connection: the #NMRemoteConnection - * - * Returns: the flags of the connection of type #NMSettingsConnectionFlags. - * - * Since: 1.12 - **/ -NMSettingsConnectionFlags -nm_remote_connection_get_flags (NMRemoteConnection *connection) -{ - g_return_val_if_fail (NM_IS_REMOTE_CONNECTION (connection), FALSE); - - return (NMSettingsConnectionFlags) NM_REMOTE_CONNECTION_GET_PRIVATE (connection)->flags; -} - /** * nm_remote_connection_get_visible: * @connection: the #NMRemoteConnection @@ -759,7 +741,6 @@ init_dbus (NMObject *object) NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object); const NMPropertiesInfo property_info[] = { { NM_REMOTE_CONNECTION_UNSAVED, &priv->unsaved }, - { NM_REMOTE_CONNECTION_FLAGS, &priv->flags }, { NULL }, }; @@ -890,9 +871,6 @@ get_property (GObject *object, guint prop_id, case PROP_UNSAVED: g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->unsaved); break; - case PROP_FLAGS: - g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->flags); - break; case PROP_VISIBLE: g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->visible); break; @@ -950,21 +928,6 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - /** - * NMRemoteConnection:flags: - * - * The flags of the connection as unsigned integer. The values - * correspond to the #NMSettingsConnectionFlags enum. - * - * Since: 1.12 - **/ - g_object_class_install_property - (object_class, PROP_FLAGS, - g_param_spec_uint (NM_REMOTE_CONNECTION_FLAGS, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); - /** * NMRemoteConnection:visible: * diff --git a/libnm/nm-remote-connection.h b/libnm/nm-remote-connection.h index a729f904..9fdcae89 100644 --- a/libnm/nm-remote-connection.h +++ b/libnm/nm-remote-connection.h @@ -42,7 +42,6 @@ G_BEGIN_DECLS #define NM_REMOTE_CONNECTION_DBUS_CONNECTION "dbus-connection" #define NM_REMOTE_CONNECTION_PATH "path" #define NM_REMOTE_CONNECTION_UNSAVED "unsaved" -#define NM_REMOTE_CONNECTION_FLAGS "flags" #define NM_REMOTE_CONNECTION_VISIBLE "visible" /** @@ -61,7 +60,7 @@ typedef struct { GType nm_remote_connection_get_type (void); -NM_AVAILABLE_IN_1_12 +NM_AVAILABLE_IN_1_10_2 void nm_remote_connection_update2 (NMRemoteConnection *connection, GVariant *settings, NMSettingsUpdate2Flags flags, @@ -69,7 +68,7 @@ void nm_remote_connection_update2 (NMRemoteConnection *connection, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); -NM_AVAILABLE_IN_1_12 +NM_AVAILABLE_IN_1_10_2 GVariant *nm_remote_connection_update2_finish (NMRemoteConnection *connection, GAsyncResult *result, GError **error); @@ -124,9 +123,6 @@ GVariant *nm_remote_connection_get_secrets_finish (NMRemoteConnection *connectio gboolean nm_remote_connection_get_unsaved (NMRemoteConnection *connection); -NM_AVAILABLE_IN_1_12 -NMSettingsConnectionFlags nm_remote_connection_get_flags (NMRemoteConnection *connection); - gboolean nm_remote_connection_get_visible (NMRemoteConnection *connection); G_END_DECLS diff --git a/libnm/nm-remote-settings.h b/libnm/nm-remote-settings.h index ee0e0f22..06d3ac0a 100644 --- a/libnm/nm-remote-settings.h +++ b/libnm/nm-remote-settings.h @@ -22,12 +22,10 @@ #ifndef __NM_REMOTE_SETTINGS_H__ #define __NM_REMOTE_SETTINGS_H__ -#if !((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE) -#error Cannot use this header. -#endif - #include "nm-object.h" +G_BEGIN_DECLS + #define NM_TYPE_REMOTE_SETTINGS (nm_remote_settings_get_type ()) #define NM_REMOTE_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettings)) #define NM_REMOTE_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_REMOTE_SETTINGS, NMRemoteSettingsClass)) @@ -55,10 +53,14 @@ struct _NMRemoteSettings { struct _NMRemoteSettingsClass { NMObjectClass parent; + /* Signals */ void (*connection_added) (NMRemoteSettings *settings, NMRemoteConnection *connection); void (*connection_removed) (NMRemoteSettings *settings, NMRemoteConnection *connection); + + /*< private >*/ + gpointer padding[8]; }; GType nm_remote_settings_get_type (void); @@ -123,4 +125,6 @@ gboolean nm_remote_settings_save_hostname_finish (NMRemoteSettings *settings, GAsyncResult *result, GError **error); +G_END_DECLS + #endif /* __NM_REMOTE_SETTINGS_H__ */ diff --git a/libnm/nm-secret-agent-old.c b/libnm/nm-secret-agent-old.c index 74914512..d5f6f174 100644 --- a/libnm/nm-secret-agent-old.c +++ b/libnm/nm-secret-agent-old.c @@ -603,10 +603,12 @@ reg_request_cb (GObject *proxy, { GSimpleAsyncResult *simple = user_data; NMSecretAgentOld *self; + NMSecretAgentOldPrivate *priv; GError *error = NULL; self = NM_SECRET_AGENT_OLD (g_async_result_get_source_object (G_ASYNC_RESULT (simple))); g_object_unref (self); /* drop extra ref added by get_source_object() */ + priv = NM_SECRET_AGENT_OLD_GET_PRIVATE (self); if (!nmdbus_agent_manager_call_register_finish (NMDBUS_AGENT_MANAGER (proxy), result, &error)) g_dbus_error_strip_remote_error (error); @@ -882,7 +884,7 @@ nm_secret_agent_old_get_registered (NMSecretAgentOld *self) /*****************************************************************************/ /** - * nm_secret_agent_old_get_secrets: (virtual get_secrets): + * nm_secret_agent_old_get_secrets: * @self: a #NMSecretAgentOld * @connection: the #NMConnection for which we're asked secrets * @setting_name: the name of the secret setting @@ -896,6 +898,8 @@ nm_secret_agent_old_get_registered (NMSecretAgentOld *self) * agent should use when performing the request, for example returning only * existing secrets without user interaction, or requesting entirely new * secrets from the user. + * + * Virtual: get_secrets */ void nm_secret_agent_old_get_secrets (NMSecretAgentOld *self, @@ -926,7 +930,7 @@ nm_secret_agent_old_get_secrets (NMSecretAgentOld *self, } /** - * nm_secret_agent_old_save_secrets: (virtual save_secrets): + * nm_secret_agent_old_save_secrets: * @self: a #NMSecretAgentOld * @connection: a #NMConnection * @callback: (scope async): a callback, to be invoked when the operation is done @@ -934,6 +938,8 @@ nm_secret_agent_old_get_secrets (NMSecretAgentOld *self, * * Asynchronously ensures that all secrets inside @connection are stored to * disk. + * + * Virtual: save_secrets */ void nm_secret_agent_old_save_secrets (NMSecretAgentOld *self, @@ -953,7 +959,7 @@ nm_secret_agent_old_save_secrets (NMSecretAgentOld *self, } /** - * nm_secret_agent_old_delete_secrets: (virtual delete_secrets): + * nm_secret_agent_old_delete_secrets: * @self: a #NMSecretAgentOld * @connection: a #NMConnection * @callback: (scope async): a callback, to be invoked when the operation is done @@ -961,6 +967,8 @@ nm_secret_agent_old_save_secrets (NMSecretAgentOld *self, * * Asynchronously asks the agent to delete all saved secrets belonging to * @connection. + * + * Virtual: delete_secrets */ void nm_secret_agent_old_delete_secrets (NMSecretAgentOld *self, diff --git a/libnm/nm-settings-docs.xml b/libnm/nm-settings-docs.xml index 4a505594..57553f8b 100644 --- a/libnm/nm-settings-docs.xml +++ b/libnm/nm-settings-docs.xml @@ -5,23 +5,22 @@ - + - + - - + @@ -100,7 +99,7 @@ - + @@ -130,14 +129,14 @@ - - + + - + - - - + + + @@ -172,8 +171,8 @@ - - + + @@ -181,7 +180,7 @@ - + @@ -198,14 +197,14 @@ - + - + @@ -222,7 +221,6 @@ - @@ -459,7 +457,6 @@ - diff --git a/libnm/nm-settings-ifcfg-rh-docs.xml b/libnm/nm-settings-ifcfg-rh-docs.xml index 03d935ea..4fa11864 100644 --- a/libnm/nm-settings-ifcfg-rh-docs.xml +++ b/libnm/nm-settings-ifcfg-rh-docs.xml @@ -109,7 +109,6 @@ pinging the gateway and waiting for the specified timeout (in seconds)."/> - @@ -179,11 +178,10 @@ If set to -1, a default metric based on the device type is used."/> - - + @@ -335,7 +333,6 @@ for WEP passphrases. KEY_TYPE specifies the key type and can be either - diff --git a/libnm/nm-types.h b/libnm/nm-types.h index dff8cb90..4310120f 100644 --- a/libnm/nm-types.h +++ b/libnm/nm-types.h @@ -28,7 +28,6 @@ typedef struct _NMAccessPoint NMAccessPoint; typedef struct _NMActiveConnection NMActiveConnection; -typedef struct _NMCheckpoint NMCheckpoint; typedef struct _NMClient NMClient; typedef struct _NMDevice NMDevice; typedef struct _NMDeviceAdsl NMDeviceAdsl; diff --git a/libnm/nm-vpn-editor.h b/libnm/nm-vpn-editor.h index 1b09c813..26e48662 100644 --- a/libnm/nm-vpn-editor.h +++ b/libnm/nm-vpn-editor.h @@ -83,4 +83,4 @@ gboolean nm_vpn_editor_update_connection (NMVpnEditor *editor, G_END_DECLS -#endif /* __NM_VPN_EDITOR_H__ */ +#endif /* __NM_VPN_EDITOR_H__ */ diff --git a/libnm/nm-vpn-plugin-old.c b/libnm/nm-vpn-plugin-old.c index c5fc615e..897f6d40 100644 --- a/libnm/nm-vpn-plugin-old.c +++ b/libnm/nm-vpn-plugin-old.c @@ -33,7 +33,6 @@ #include "nm-dbus-helpers.h" #include "nm-core-internal.h" #include "nm-simple-connection.h" -#include "nm-vpn-service-plugin.h" #include "introspection/org.freedesktop.NetworkManager.VPN.Plugin.h" @@ -684,6 +683,20 @@ nm_vpn_plugin_old_secrets_required (NMVpnPluginOld *plugin, /*****************************************************************************/ +#define DATA_KEY_TAG "DATA_KEY=" +#define DATA_VAL_TAG "DATA_VAL=" +#define SECRET_KEY_TAG "SECRET_KEY=" +#define SECRET_VAL_TAG "SECRET_VAL=" + +static void +free_secret (gpointer data) +{ + char *secret = data; + + memset (secret, 0, strlen (secret)); + g_free (secret); +} + /** * nm_vpn_plugin_old_read_vpn_details: * @fd: file descriptor to read from, usually stdin (0) @@ -704,7 +717,87 @@ nm_vpn_plugin_old_read_vpn_details (int fd, GHashTable **out_data, GHashTable **out_secrets) { - return nm_vpn_service_plugin_read_vpn_details (fd, out_data, out_secrets); + GHashTable *data, *secrets; + gboolean success = FALSE; + char *key = NULL, *val = NULL; + GString *line; + gchar c; + + if (out_data) + g_return_val_if_fail (*out_data == NULL, FALSE); + if (out_secrets) + g_return_val_if_fail (*out_secrets == NULL, FALSE); + + data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + secrets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_secret); + + line = g_string_new (NULL); + + /* Read stdin for data and secret items until we get a DONE */ + while (1) { + ssize_t nr; + GHashTable *hash = NULL; + + errno = 0; + nr = read (fd, &c, 1); + if (nr == -1) { + if (errno == EAGAIN) { + g_usleep (100); + continue; + } + break; + } + + if (c != '\n') { + g_string_append_c (line, c); + continue; + } + + /* Check for the finish marker */ + if (strcmp (line->str, "DONE") == 0) + break; + + /* Otherwise it's a data/secret item */ + if (strncmp (line->str, DATA_KEY_TAG, strlen (DATA_KEY_TAG)) == 0) { + hash = data; + key = g_strdup (line->str + strlen (DATA_KEY_TAG)); + } else if (strncmp (line->str, DATA_VAL_TAG, strlen (DATA_VAL_TAG)) == 0) { + hash = data; + val = g_strdup (line->str + strlen (DATA_VAL_TAG)); + } else if (strncmp (line->str, SECRET_KEY_TAG, strlen (SECRET_KEY_TAG)) == 0) { + hash = secrets; + key = g_strdup (line->str + strlen (SECRET_KEY_TAG)); + } else if (strncmp (line->str, SECRET_VAL_TAG, strlen (SECRET_VAL_TAG)) == 0) { + hash = secrets; + val = g_strdup (line->str + strlen (SECRET_VAL_TAG)); + } + g_string_truncate (line, 0); + + if (key && val && hash) { + g_hash_table_insert (hash, key, val); + key = NULL; + val = NULL; + success = TRUE; /* Got at least one value */ + } + } + + if (success) { + if (out_data) + *out_data = data; + else + g_hash_table_destroy (data); + + if (out_secrets) + *out_secrets = secrets; + else + g_hash_table_destroy (secrets); + } else { + g_hash_table_destroy (data); + g_hash_table_destroy (secrets); + } + + g_string_free (line, TRUE); + return success; } /** @@ -727,7 +820,31 @@ nm_vpn_plugin_old_get_secret_flags (GHashTable *data, const char *secret_name, NMSettingSecretFlags *out_flags) { - return nm_vpn_service_plugin_get_secret_flags (data, secret_name, out_flags); + char *flag_name; + const char *val; + unsigned long tmp; + gboolean success = FALSE; + + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (secret_name != NULL, FALSE); + g_return_val_if_fail (out_flags != NULL, FALSE); + g_return_val_if_fail (*out_flags == NM_SETTING_SECRET_FLAG_NONE, FALSE); + + flag_name = g_strdup_printf ("%s-flags", secret_name); + + /* Try new flags value first */ + val = g_hash_table_lookup (data, flag_name); + if (val) { + errno = 0; + tmp = strtoul (val, NULL, 10); + if (errno == 0 && tmp <= NM_SETTING_SECRET_FLAGS_ALL) { + *out_flags = (NMSettingSecretFlags) tmp; + success = TRUE; + } + } + + g_free (flag_name); + return success; } /*****************************************************************************/ diff --git a/libnm/nm-vpn-service-plugin.c b/libnm/nm-vpn-service-plugin.c index 901ffa98..bf289375 100644 --- a/libnm/nm-vpn-service-plugin.c +++ b/libnm/nm-vpn-service-plugin.c @@ -151,8 +151,7 @@ nm_vpn_service_plugin_set_state (NMVpnServicePlugin *plugin, if (priv->state != state) { priv->state = state; g_signal_emit (plugin, signals[STATE_CHANGED], 0, state); - if (priv->dbus_vpn_service_plugin) - nmdbus_vpn_plugin_emit_state_changed (priv->dbus_vpn_service_plugin, state); + nmdbus_vpn_plugin_emit_state_changed (priv->dbus_vpn_service_plugin, state); } } @@ -167,8 +166,7 @@ nm_vpn_service_plugin_set_login_banner (NMVpnServicePlugin *plugin, priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); g_signal_emit (plugin, signals[LOGIN_BANNER], 0, banner); - if (priv->dbus_vpn_service_plugin) - nmdbus_vpn_plugin_emit_login_banner (priv->dbus_vpn_service_plugin, banner); + nmdbus_vpn_plugin_emit_login_banner (priv->dbus_vpn_service_plugin, banner); } static void @@ -178,8 +176,7 @@ _emit_failure (NMVpnServicePlugin *plugin, NMVpnServicePluginPrivate *priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); g_signal_emit (plugin, signals[FAILURE], 0, reason); - if (priv->dbus_vpn_service_plugin) - nmdbus_vpn_plugin_emit_failure (priv->dbus_vpn_service_plugin, reason); + nmdbus_vpn_plugin_emit_failure (priv->dbus_vpn_service_plugin, reason); } void @@ -195,11 +192,13 @@ nm_vpn_service_plugin_failure (NMVpnServicePlugin *plugin, gboolean nm_vpn_service_plugin_disconnect (NMVpnServicePlugin *plugin, GError **err) { + NMVpnServicePluginPrivate *priv; gboolean ret = FALSE; NMVpnServiceState state; g_return_val_if_fail (NM_IS_VPN_SERVICE_PLUGIN (plugin), FALSE); + priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); state = nm_vpn_service_plugin_get_state (plugin); switch (state) { case NM_VPN_SERVICE_STATE_STOPPING: @@ -244,51 +243,6 @@ nm_vpn_service_plugin_emit_quit (NMVpnServicePlugin *plugin) g_signal_emit (plugin, signals[QUIT], 0); } -/** - * nm_vpn_service_plugin_shutdown: - * @plugin: the #NMVpnServicePlugin instance - * - * Shutdown the @plugin and disconnect from D-Bus. After this, - * the plugin instance is dead and should no longer be used. - * It ensures to get no more requests from D-Bus. In principle, - * you don't need to shutdown the plugin, disposing the instance - * has the same effect. However, this gives a way to deactivate - * the plugin before giving up the last reference. - * - * Since: 1.12 - */ -void -nm_vpn_service_plugin_shutdown (NMVpnServicePlugin *plugin) -{ - NMVpnServicePluginPrivate *priv; - NMVpnServiceState state; - GError *error = NULL; - - g_return_if_fail (NM_IS_VPN_SERVICE_PLUGIN (plugin)); - - priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); - - nm_clear_g_source (&priv->fail_stop_id); - nm_clear_g_source (&priv->quit_timer); - nm_clear_g_source (&priv->connect_timer); - - state = nm_vpn_service_plugin_get_state (plugin); - if (state == NM_VPN_SERVICE_STATE_STARTED || - state == NM_VPN_SERVICE_STATE_STARTING) { - nm_vpn_service_plugin_disconnect (plugin, &error); - - if (error) { - g_warning ("Error disconnecting VPN connection: %s", error->message); - g_error_free (error); - } - } - - if (priv->dbus_vpn_service_plugin) { - g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (priv->dbus_vpn_service_plugin)); - g_clear_object (&priv->dbus_vpn_service_plugin); - } -} - static gboolean connect_timer_expired (gpointer data) { @@ -384,8 +338,7 @@ nm_vpn_service_plugin_set_config (NMVpnServicePlugin *plugin, G_VARIANT_TYPE ("u")); g_signal_emit (plugin, signals[CONFIG], 0, config); - if (priv->dbus_vpn_service_plugin) - nmdbus_vpn_plugin_emit_config (priv->dbus_vpn_service_plugin, config); + nmdbus_vpn_plugin_emit_config (priv->dbus_vpn_service_plugin, config); } void @@ -436,8 +389,7 @@ nm_vpn_service_plugin_set_ip4_config (NMVpnServicePlugin *plugin, combined_config = g_variant_builder_end (&builder); g_variant_ref_sink (combined_config); g_signal_emit (plugin, signals[IP4_CONFIG], 0, combined_config); - if (priv->dbus_vpn_service_plugin) - nmdbus_vpn_plugin_emit_ip4_config (priv->dbus_vpn_service_plugin, combined_config); + nmdbus_vpn_plugin_emit_ip4_config (priv->dbus_vpn_service_plugin, combined_config); g_variant_unref (combined_config); if ( priv->has_ip4 == priv->got_ip4 @@ -458,8 +410,7 @@ nm_vpn_service_plugin_set_ip6_config (NMVpnServicePlugin *plugin, priv->got_ip6 = TRUE; g_signal_emit (plugin, signals[IP6_CONFIG], 0, ip6_config); - if (priv->dbus_vpn_service_plugin) - nmdbus_vpn_plugin_emit_ip6_config (priv->dbus_vpn_service_plugin, ip6_config); + nmdbus_vpn_plugin_emit_ip6_config (priv->dbus_vpn_service_plugin, ip6_config); g_variant_unref (ip6_config); @@ -749,8 +700,7 @@ nm_vpn_service_plugin_secrets_required (NMVpnServicePlugin *plugin, nm_clear_g_source (&priv->connect_timer); g_signal_emit (plugin, signals[SECRETS_REQUIRED], 0, message, hints); - if (priv->dbus_vpn_service_plugin) - nmdbus_vpn_plugin_emit_secrets_required (priv->dbus_vpn_service_plugin, message, hints); + nmdbus_vpn_plugin_emit_secrets_required (priv->dbus_vpn_service_plugin, message, hints); } /*****************************************************************************/ @@ -760,6 +710,15 @@ nm_vpn_service_plugin_secrets_required (NMVpnServicePlugin *plugin, #define SECRET_KEY_TAG "SECRET_KEY=" #define SECRET_VAL_TAG "SECRET_VAL=" +static void +free_secret (gpointer data) +{ + char *secret = data; + + memset (secret, 0, strlen (secret)); + g_free (secret); +} + /** * nm_vpn_service_plugin_read_vpn_details: * @fd: file descriptor to read from, usually stdin (0) @@ -780,11 +739,10 @@ nm_vpn_service_plugin_read_vpn_details (int fd, GHashTable **out_data, GHashTable **out_secrets) { - gs_unref_hashtable GHashTable *data = NULL; - gs_unref_hashtable GHashTable *secrets = NULL; + GHashTable *data, *secrets; gboolean success = FALSE; char *key = NULL, *val = NULL; - nm_auto_free_gstring GString *line = NULL; + GString *line; gchar c; if (out_data) @@ -792,8 +750,8 @@ nm_vpn_service_plugin_read_vpn_details (int fd, if (out_secrets) g_return_val_if_fail (*out_secrets == NULL, FALSE); - data = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, g_free); - secrets = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, (GDestroyNotify) nm_free_secret); + data = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + secrets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_secret); line = g_string_new (NULL); @@ -846,9 +804,21 @@ nm_vpn_service_plugin_read_vpn_details (int fd, } if (success) { - NM_SET_OUT (out_data, g_steal_pointer (&data)); - NM_SET_OUT (out_secrets, g_steal_pointer (&secrets)); + if (out_data) + *out_data = data; + else + g_hash_table_destroy (data); + + if (out_secrets) + *out_secrets = secrets; + else + g_hash_table_destroy (secrets); + } else { + g_hash_table_destroy (data); + g_hash_table_destroy (secrets); } + + g_string_free (line, TRUE); return success; } @@ -872,29 +842,31 @@ nm_vpn_service_plugin_get_secret_flags (GHashTable *data, const char *secret_name, NMSettingSecretFlags *out_flags) { - gs_free char *flag_name_free = NULL; - const char *s; - gint64 t1; - NMSettingSecretFlags t0; + char *flag_name; + const char *val; + unsigned long tmp; + gboolean success = FALSE; - g_return_val_if_fail (data, FALSE); - g_return_val_if_fail (out_flags && *out_flags == NM_SETTING_SECRET_FLAG_NONE, FALSE); - if (!secret_name || !*secret_name) - g_return_val_if_reached (FALSE); + g_return_val_if_fail (data != NULL, FALSE); + g_return_val_if_fail (secret_name != NULL, FALSE); + g_return_val_if_fail (out_flags != NULL, FALSE); + g_return_val_if_fail (*out_flags == NM_SETTING_SECRET_FLAG_NONE, FALSE); + flag_name = g_strdup_printf ("%s-flags", secret_name); - s = g_hash_table_lookup (data, - nm_construct_name_a ("%s-flags", secret_name, &flag_name_free)); - if (!s) - return FALSE; - t1 = _nm_utils_ascii_str_to_int64 (s, 10, 0, G_MAXINT64, -1); - if (t1 == -1) - return FALSE; - t0 = (NMSettingSecretFlags) t1; - if ((gint64) t0 != t1) - return FALSE; - NM_SET_OUT (out_flags, t0); - return TRUE; + /* Try new flags value first */ + val = g_hash_table_lookup (data, flag_name); + if (val) { + errno = 0; + tmp = strtoul (val, NULL, 10); + if (errno == 0 && tmp <= NM_SETTING_SECRET_FLAGS_ALL) { + *out_flags = (NMSettingSecretFlags) tmp; + success = TRUE; + } + } + + g_free (flag_name); + return success; } /*****************************************************************************/ @@ -1005,9 +977,10 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) { NMVpnServicePlugin *plugin = NM_VPN_SERVICE_PLUGIN (initable); NMVpnServicePluginPrivate *priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); - gs_unref_object GDBusConnection *connection = NULL; - gs_unref_object GDBusProxy *proxy = NULL; + GDBusConnection *connection = NULL; + GDBusProxy *proxy; GVariant *ret; + gboolean success = FALSE; if (!priv->dbus_service_name) { g_set_error_literal (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, @@ -1028,7 +1001,7 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) DBUS_INTERFACE_DBUS, cancellable, error); if (!proxy) - return FALSE; + goto out; priv->dbus_vpn_service_plugin = nmdbus_vpn_plugin_skeleton_new (); @@ -1049,7 +1022,7 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) connection, NM_VPN_DBUS_PLUGIN_PATH, error)) - return FALSE; + goto out; nm_vpn_service_plugin_set_connection (plugin, connection); nm_vpn_service_plugin_set_state (plugin, NM_VPN_SERVICE_STATE_INIT); @@ -1059,14 +1032,20 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) g_variant_new ("(su)", priv->dbus_service_name, 0), G_DBUS_CALL_FLAGS_NONE, -1, cancellable, error); + g_object_unref (proxy); if (!ret) { if (error && *error) g_dbus_error_strip_remote_error (*error); - return FALSE; + goto out; } g_variant_unref (ret); - return TRUE; + success = TRUE; + + out: + g_clear_object (&connection); + + return success; } static void @@ -1086,7 +1065,7 @@ set_property (GObject *object, guint prop_id, break; case PROP_STATE: nm_vpn_service_plugin_set_state (NM_VPN_SERVICE_PLUGIN (object), - (NMVpnServiceState) g_value_get_enum (value)); + (NMVpnServiceState) g_value_get_enum (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1119,7 +1098,31 @@ get_property (GObject *object, guint prop_id, static void dispose (GObject *object) { - nm_vpn_service_plugin_shutdown (NM_VPN_SERVICE_PLUGIN (object)); + NMVpnServicePlugin *plugin = NM_VPN_SERVICE_PLUGIN (object); + NMVpnServicePluginPrivate *priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE (plugin); + NMVpnServiceState state; + GError *err = NULL; + + nm_clear_g_source (&priv->fail_stop_id); + nm_clear_g_source (&priv->quit_timer); + nm_clear_g_source (&priv->connect_timer); + + state = nm_vpn_service_plugin_get_state (plugin); + + if (state == NM_VPN_SERVICE_STATE_STARTED || + state == NM_VPN_SERVICE_STATE_STARTING) + nm_vpn_service_plugin_disconnect (plugin, &err); + + if (err) { + g_warning ("Error disconnecting VPN connection: %s", err->message); + g_error_free (err); + } + + if (priv->dbus_vpn_service_plugin) { + g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (priv->dbus_vpn_service_plugin)); + g_clear_object (&priv->dbus_vpn_service_plugin); + } + G_OBJECT_CLASS (nm_vpn_service_plugin_parent_class)->dispose (object); } diff --git a/libnm/nm-vpn-service-plugin.h b/libnm/nm-vpn-service-plugin.h index 71e031b0..329345ea 100644 --- a/libnm/nm-vpn-service-plugin.h +++ b/libnm/nm-vpn-service-plugin.h @@ -150,9 +150,6 @@ NM_AVAILABLE_IN_1_2 gboolean nm_vpn_service_plugin_disconnect (NMVpnServicePlugin *plugin, GError **err); -NM_AVAILABLE_IN_1_12 -void nm_vpn_service_plugin_shutdown (NMVpnServicePlugin *plugin); - /* Utility functions */ NM_AVAILABLE_IN_1_2 diff --git a/libnm/tests/meson.build b/libnm/tests/meson.build deleted file mode 100644 index c47814b3..00000000 --- a/libnm/tests/meson.build +++ /dev/null @@ -1,42 +0,0 @@ -test_units = [ - ['test-general', shared_utils, [libnm_utils]], - ['test-nm-client', shared_test_utils, []], - ['test-remote-settings-client', shared_test_utils, []], - ['test-secret-agent', shared_test_utils, []] -] - -deps = [ - libnm_dep, - nm_core_dep -] - -cflags = [ - '-DNETWORKMANAGER_COMPILATION_TEST', - '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIBNM', - '-DTEST_NM_SERVICE="@0@"'.format(join_paths(meson.source_root(), 'tools', 'test-networkmanager-service.py')) -] - -foreach test_unit: test_units - exe = executable( - 'libnm-' + test_unit[0], - [test_unit[0] + '.c'] + test_unit[1], - dependencies: deps, - c_args: cflags, - link_with: test_unit[2] - ) - - test( - 'libnm/' + test_unit[0], - test_script, - args: test_args + [exe.full_path()] - ) -endforeach - -# just test, that we can build "nm-vpn-plugin-utils.c" -libnm_vpn_plugin_utils_test = static_library( - 'nm-vpn-plugin-utils-test', - sources: shared_vpn_plugin_utils + [libnm_enum[1]], - include_directories: libnm_inc, - dependencies: nm_core_dep, - c_args: cflags -) diff --git a/libnm/tests/test-general.c b/libnm/tests/test-general.c index 5959a4e6..7e0b7bb7 100644 --- a/libnm/tests/test-general.c +++ b/libnm/tests/test-general.c @@ -26,2134 +26,33 @@ /*****************************************************************************/ -typedef struct { - const char *desc; - const char *expected; - int line; -} TestFixupData; - static void -_test_fixup_string (const TestFixupData *data, - guint n_data, - char *(*func) (const char *)) +do_test_fixup_desc_string (const char *desc, const char *expected) { - guint i; - - g_assert (data); - g_assert (n_data > 0); - g_assert (func); - - for (i = 0; i < n_data; i++, data++) { - gs_free char *value = func (data->desc); + gs_free char *result = NULL; - if (!nm_streq0 (value, data->expected)) { - g_error ("Error comparing value: %s:%i: expected %s%s%s for %s%s%s, but got %s%s%s", - __FILE__, data->line, - NM_PRINT_FMT_QUOTE_STRING (data->expected), - NM_PRINT_FMT_QUOTE_STRING (data->desc), - NM_PRINT_FMT_QUOTE_STRING (value)); - } - } + result = nm_utils_fixup_desc_string (desc); + g_assert_cmpstr (result, ==, expected); } -#define T_DATA(_desc, _expected) \ - { \ - .desc = _desc, \ - .expected = _expected, \ - .line = __LINE__, \ - } +#define do_test_fixup_desc_string_same(desc) (do_test_fixup_desc_string (""desc"", ""desc"")) static void -test_fixup_vendor_string (void) +test_fixup_desc_string (void) { - static const TestFixupData data[] = { - T_DATA ("3Com", "3Com"), - T_DATA ("3Com Corp.", "3Com"), - T_DATA ("3Com Corporation", "3Com"), - T_DATA ("Abocom Systems Inc", "Abocom"), - T_DATA ("AboCom Systems Inc", "AboCom"), - T_DATA ("Accton Technology Corp.", "Accton"), - T_DATA ("Accton Technology Corporation", "Accton"), - T_DATA ("Acer Communications & Multimedia", "Acer"), - T_DATA ("Actiontec Electronics, Inc. [hex]", "Actiontec"), - T_DATA ("Adaptec", "Adaptec"), - T_DATA ("Addtron Technology Co, Inc.", "Addtron"), - T_DATA ("ADMtek", "ADMtek"), - T_DATA ("ADMtek, Inc.", "ADMtek"), - T_DATA ("ADS Technologies, Inc.", "ADS"), - T_DATA ("Advanced Micro Devices, Inc. [AMD]", "AMD"), - T_DATA ("Advance Multimedia Internet Technology Inc. (AMIT)", "Advance"), - T_DATA ("AEI", "AEI"), - T_DATA ("Airprime, Incorporated", "Airprime"), - T_DATA ("AirTies Wireless Networks", "AirTies"), - T_DATA ("AirVast", "AirVast"), - T_DATA ("Alcatel Telecom", "Alcatel Telecom"), - T_DATA ("ALi Corp.", "ALi"), - T_DATA ("Allied Telesis", "Allied Telesis"), - T_DATA ("Allied Telesyn International", "Allied Telesyn"), - T_DATA ("Alteon Networks Inc.", "Alteon"), - T_DATA ("Altima (nee Broadcom)", "Altima"), - T_DATA ("A-Max Technology Macao Commercial Offshore Co. Ltd.", "A-Max"), - T_DATA ("Amigo Technology Inc.", "Amigo"), - T_DATA ("AMIT Technology, Inc.", "AMIT"), - T_DATA ("Anchor Chips, Inc.", "Anchor"), - T_DATA ("AnyDATA Corporation", "AnyDATA"), - T_DATA ("Apple Inc.", "Apple"), - T_DATA ("Apple, Inc.", "Apple"), - T_DATA ("ARC International", "ARC"), - T_DATA ("ASIX Electronics Corp.", "ASIX"), - T_DATA ("Asix Electronics Corporation", "Asix"), - T_DATA ("Askey Computer Corp. [hex]", "Askey"), - T_DATA ("ASUSTek Computer, Inc.", "ASUSTek Computer"), - T_DATA ("ASUSTek Computer, Inc. (wrong ID)", "ASUSTek Computer"), - T_DATA ("ATEN International Co., Ltd", "ATEN"), - T_DATA ("Atheros Communications", "Atheros"), - T_DATA ("Atheros Communications, Inc.", "Atheros"), - T_DATA ("AVM GmbH", "AVM"), - T_DATA ("AzureWave", "AzureWave"), - T_DATA ("Belkin", "Belkin"), - T_DATA ("Belkin Components", "Belkin"), - T_DATA ("Billionton Systems, Inc.", "Billionton"), - T_DATA ("Broadcom Corp.", "Broadcom"), - T_DATA ("Broadcom Limited", "Broadcom"), - T_DATA ("Brocade Communications Systems, Inc.", "Brocade"), - T_DATA ("BUFFALO INC. (formerly MelCo., Inc.)", "BUFFALO"), - T_DATA ("CACE Technologies Inc.", "CACE"), - T_DATA ("Cadence Design Systems, Inc.", "Cadence"), - T_DATA ("Chelsio Communications Inc", "Chelsio"), - T_DATA ("Chicony Electronics Co., Ltd", "Chicony"), - T_DATA ("Chu Yuen Enterprise Co., Ltd", "Chu Yuen"), - T_DATA ("Cisco Systems Inc", "Cisco"), - T_DATA ("Cisco Systems, Inc.", "Cisco"), - T_DATA ("CMOTECH Co., Ltd.", "CMOTECH"), - T_DATA ("CNet Technology Inc.", "CNet"), - T_DATA ("CNet Technology Inc", "CNet"), - T_DATA ("Comneon", "Comneon"), - T_DATA ("Compaq Computer Corp.", "Compaq"), - T_DATA ("Compaq Computer Corporation", "Compaq"), - T_DATA ("Compex", "Compex"), - T_DATA ("Computer Access Technology Corp.", "Computer Access"), - T_DATA ("Conexant Systems, Inc.", "Conexant"), - T_DATA ("Conexant Systems (Rockwell), Inc.", "Conexant"), - T_DATA ("Corega K.K.", "Corega K.K."), - T_DATA ("Curitel Communications, Inc.", "Curitel"), - T_DATA ("CyberTAN Technology", "CyberTAN"), - T_DATA ("Cypress Semiconductor Corp.", "Cypress"), - T_DATA ("Davicom Semiconductor, Inc.", "Davicom"), - T_DATA ("Dell Computer Corp.", "Dell"), - T_DATA ("DELTA Electronics, Inc", "DELTA"), - T_DATA ("Digital Equipment Corporation", "Digital Equipment"), - T_DATA ("D-Link Corp.", "D-Link"), - T_DATA ("D-Link System", "D-Link System"), - T_DATA ("D-Link System Inc", "D-Link System"), - T_DATA ("DrayTek Corp.", "DrayTek"), - T_DATA ("d'TV", "d'TV"), - T_DATA ("DVICO", "DVICO"), - T_DATA ("Edimax Computer Co.", "Edimax"), - T_DATA ("Edimax Technology Co., Ltd", "Edimax"), - T_DATA ("Efar Microsystems", "Efar"), - T_DATA ("Efficient Networks, Inc.", "Efficient"), - T_DATA ("ELCON Systemtechnik", "ELCON"), - T_DATA ("Elecom Co., Ltd", "Elecom"), - T_DATA ("ELSA AG", "ELSA"), - T_DATA ("Emulex Corporation", "Emulex"), - T_DATA ("Encore Electronics Inc.", "Encore"), - T_DATA ("EndPoints, Inc.", "EndPoints"), - T_DATA ("Entrega [hex]", "Entrega"), - T_DATA ("Ericsson Business Mobile Networks BV", "Ericsson"), - T_DATA ("eTEK Labs", "eTEK"), - T_DATA ("Exar Corp.", "Exar"), - T_DATA ("Fiberline", "Fiberline"), - T_DATA ("Fujitsu Limited.", "Fujitsu"), - T_DATA ("Fujitsu Siemens Computers", "Fujitsu Siemens"), - T_DATA ("Gateway, Inc.", "Gateway"), - T_DATA ("Gemtek", "Gemtek"), - T_DATA ("Genesys Logic, Inc.", "Genesys Logic"), - T_DATA ("Global Sun Technology", "Global Sun"), - T_DATA ("Global Sun Technology, Inc.", "Global Sun"), - T_DATA ("GlobeSpan, Inc.", "GlobeSpan"), - T_DATA ("Gmate, Inc.", "Gmate"), - T_DATA ("Good Way Technology", "Good Way"), - T_DATA ("Guillemot Corp.", "Guillemot"), - T_DATA ("Hangzhou Silan Microelectronics Co., Ltd.", "Hangzhou Silan"), - T_DATA ("Hawking Technologies", "Hawking"), - T_DATA ("Hewlett-Packard", "Hewlett-Packard"), - T_DATA ("Hirose Electric", "Hirose Electric"), - T_DATA ("Holtek Microelectronics Inc", "Holtek"), - T_DATA ("Huawei-3Com", "Huawei-3Com"), - T_DATA ("Huawei Technologies Co., Ltd.", "Huawei"), - T_DATA ("ICS Advent", "ICS Advent"), - T_DATA ("IMC Networks", "IMC"), - T_DATA ("Intel Corp.", "Intel"), - T_DATA ("Intel Corporation", "Intel"), - T_DATA ("Intellon Corp.", "Intellon"), - T_DATA ("InterBiometrics", "InterBiometrics"), - T_DATA ("Intersil Corp.", "Intersil"), - T_DATA ("Intersil Corporation", "Intersil"), - T_DATA ("I-O Data Device, Inc.", "I-O Data Device"), - T_DATA ("Jaton Corp.", "Jaton"), - T_DATA ("JMicron Technology Corp.", "JMicron"), - T_DATA ("Kawasaki LSI", "Kawasaki LSI"), - T_DATA ("KC Technology, Inc.", "KC"), - T_DATA ("Kingston Technology", "Kingston"), - T_DATA ("KTI", "KTI"), - T_DATA ("Kvaser AB", "Kvaser"), - T_DATA ("LapLink, Inc.", "LapLink"), - T_DATA ("Lenovo", "Lenovo"), - T_DATA ("LevelOne", "LevelOne"), - T_DATA ("LG Electronics, Inc.", "LG"), - T_DATA ("LG Electronics USA, Inc.", "LG"), - T_DATA ("Linksys, Inc.", "Linksys"), - T_DATA ("Linksys (?)", "Linksys"), - T_DATA ("Linksys", "Linksys"), - T_DATA ("Lite-On Communications Inc", "Lite-On"), - T_DATA ("Lite-On Technology Corp.", "Lite-On"), - T_DATA ("Logitec Corp.", "Logitec"), - T_DATA ("Logitech, Inc.", "Logitech"), - T_DATA ("LSI Corporation", "LSI"), - T_DATA ("LSI Logic / Symbios Logic", "LSI Logic"), - T_DATA ("Macronix, Inc. [MXIC]", "MXIC"), - T_DATA ("Marvell Semiconductor, Inc.", "Marvell"), - T_DATA ("Marvell Technology Group Ltd.", "Marvell"), - T_DATA ("MediaTek Inc.", "MediaTek"), - T_DATA ("Mellanox Technologies", "Mellanox"), - T_DATA ("Memorex", "Memorex"), - T_DATA ("Micrel-Kendin", "Micrel-Kendin"), - T_DATA ("Microchip Technology, Inc.", "Microchip"), - T_DATA ("Microcomputer Systems (M) Son", "Microcomputer"), - T_DATA ("Microsoft Corp.", "Microsoft"), - T_DATA ("Microsoft Corporation", "Microsoft"), - T_DATA ("Micro-Star International Co., Ltd. [MSI]", "MSI"), - T_DATA ("Micro Star International", "Micro Star"), - T_DATA ("Mobility", "Mobility"), - T_DATA ("MosChip Semiconductor", "MosChip"), - T_DATA ("Motorola PCS", "Motorola"), - T_DATA ("MYRICOM Inc.", "MYRICOM"), - T_DATA ("MYSON Technology Inc", "MYSON"), - T_DATA ("National Instruments Corp.", "National"), - T_DATA ("National Semiconductor Corporation", "National"), - T_DATA ("NEC Corp.", "NEC"), - T_DATA ("Netchip Technology, Inc.", "Netchip"), - T_DATA ("Netgear, Inc", "Netgear"), - T_DATA ("NetGear, Inc.", "NetGear"), - T_DATA ("Netgear", "Netgear"), - T_DATA ("Netopia, Inc.", "Netopia"), - T_DATA ("Netronome Systems, Inc.", "Netronome"), - T_DATA ("NetVin", "NetVin"), - T_DATA ("NetXen Incorporated", "NetXen"), - T_DATA ("Nordic Semiconductor ASA", "Nordic"), - T_DATA ("Northern Telecom", "Northern Telecom"), - T_DATA ("NovaTech", "NovaTech"), - T_DATA ("Novatel Wireless", "Novatel Wireless"), - T_DATA ("NVIDIA Corp.", "NVIDIA"), - T_DATA ("NVIDIA Corporation", "NVIDIA"), - T_DATA ("Olicom", "Olicom"), - T_DATA ("Olivetti Techcenter", "Olivetti"), - T_DATA ("Olympus Optical Co., Ltd", "Olympus"), - T_DATA ("OMEGA TECHNOLOGY", "OMEGA"), - T_DATA ("Omnidirectional Control Technology, Inc.", "Omnidirectional Control"), - T_DATA ("OpenMoko, Inc.", "OpenMoko"), - T_DATA ("Option", "Option"), - T_DATA ("OQO", "OQO"), - T_DATA ("Oracle/SUN", "Oracle"), - T_DATA ("Ovislink Corp.", "Ovislink"), - T_DATA ("Packet Engines Inc.", "Packet Engines"), - T_DATA ("Panasonic (Matsushita)", "Panasonic"), - T_DATA ("PEAK System", "PEAK System"), - T_DATA ("PEAK-System Technik GmbH", "PEAK-System"), - T_DATA ("PEGATRON CORPORATION", "PEGATRON CORPORATION"), - T_DATA ("Peppercon AG", "Peppercon"), - T_DATA ("Peracom Networks, Inc.", "Peracom"), - T_DATA ("Philips (or NXP)", "Philips"), - T_DATA ("Planex Communications, Inc", "Planex"), - T_DATA ("Planex Communications", "Planex"), - T_DATA ("Planex", "Planex"), - T_DATA ("PLANEX", "PLANEX"), - T_DATA ("Portsmith", "Portsmith"), - T_DATA ("Prolific Technology, Inc.", "Prolific"), - T_DATA ("Qcom", "Qcom"), - T_DATA ("Qi Hardware", "Qi"), - T_DATA ("QinHeng Electronics", "QinHeng"), - T_DATA ("QLogic Corp.", "QLogic"), - T_DATA ("Qualcomm Atheros Communications", "Qualcomm Atheros"), - T_DATA ("Qualcomm Atheros", "Qualcomm Atheros"), - T_DATA ("Qualcomm, Inc.", "Qualcomm"), - T_DATA ("Qualcomm / Option", "Qualcomm"), - T_DATA ("Quanta Computer, Inc.", "Quanta Computer"), - T_DATA ("Quanta Microsystems, Inc.", "Quanta"), - T_DATA ("Quantenna Communications, Inc.", "Quantenna"), - T_DATA ("RadioShack Corp. (Tandy)", "RadioShack"), - T_DATA ("Ralink corp.", "Ralink"), - T_DATA ("Ralink Technology, Corp.", "Ralink"), - T_DATA ("RDC Semiconductor, Inc.", "RDC"), - T_DATA ("Realtek Semiconductor Co., Ltd.", "Realtek"), - T_DATA ("Realtek Semiconductor Corp.", "Realtek"), - T_DATA ("Red Hat, Inc.", "Red Hat"), - T_DATA ("SafeNet (wrong ID)", "SafeNet"), - T_DATA ("Sagem", "Sagem"), - T_DATA ("Samsung Electronics Co., Ltd", "Samsung"), - T_DATA ("Sega Enterprises Ltd", "Sega"), - T_DATA ("Senao", "Senao"), - T_DATA ("Shark Multimedia", "Shark"), - T_DATA ("Sharp Corp.", "Sharp"), - T_DATA ("Siemens Information and Communication Products", "Siemens"), - T_DATA ("Sierra Wireless, Inc.", "Sierra Wireless"), - T_DATA ("Silicom", "Silicom"), - T_DATA ("Silicon Graphics Intl. Corp.", "Silicon Graphics"), - T_DATA ("Silicon Integrated Systems [SiS]", "SiS"), - T_DATA ("Sitecom Europe B.V.", "Sitecom"), - T_DATA ("Sitecom", "Sitecom"), - T_DATA ("smartBridges, Inc.", "smartBridges"), - T_DATA ("SohoWare", "SohoWare"), - T_DATA ("Solarflare Communications", "Solarflare"), - T_DATA ("Sony Corp.", "Sony"), - T_DATA ("SpeedStream", "SpeedStream"), - T_DATA ("Sphairon Access Systems GmbH", "Sphairon"), - T_DATA ("Standard Microsystems Corp [SMC]", "SMC"), - T_DATA ("Standard Microsystems Corp.", "Standard"), - T_DATA ("STMicroelectronics", "STMicroelectronics"), - T_DATA ("Sundance Technology Inc / IC Plus Corp", "Sundance"), - T_DATA ("Surecom Technology Corp.", "Surecom"), - T_DATA ("Surecom Technology", "Surecom"), - T_DATA ("Sweex", "Sweex"), - T_DATA ("SysKonnect", "SysKonnect"), - T_DATA ("T & A Mobile Phones", "T & A"), - T_DATA ("TDK Semiconductor Corp.", "TDK"), - T_DATA ("Tehuti Networks Ltd.", "Tehuti"), - T_DATA ("Tekram Technology Co., Ltd", "Tekram"), - T_DATA ("Telit Wireless Solutions", "Telit"), - T_DATA ("Texas Instruments, Inc.", "Texas"), - T_DATA ("Thales Norway A/S", "Thales"), - T_DATA ("TMT Technology, Inc.", "TMT"), - T_DATA ("Toshiba Corp.", "Toshiba"), - T_DATA ("TRENDnet", "TRENDnet"), - T_DATA ("Trident Microsystems", "Trident"), - T_DATA ("Trust International B.V.", "Trust"), - T_DATA ("TTTech Computertechnik AG (Wrong ID)", "TTTech"), - T_DATA ("TwinMOS", "TwinMOS"), - T_DATA ("U-Blox AG", "U-Blox"), - T_DATA ("ULi Electronics Inc.", "ULi"), - T_DATA ("U.S. Robotics", "U.S. Robotics"), - T_DATA ("Vaillant", "Vaillant"), - T_DATA ("VIA Technologies, Inc.", "VIA"), - T_DATA ("Victor Company of Japan, Ltd", "Victor"), - T_DATA ("VMware", "VMware"), - T_DATA ("VTech Holdings, Ltd", "VTech"), - T_DATA ("Wavecom", "Wavecom"), - T_DATA ("Westell", "Westell"), - T_DATA ("Western Digital Technologies, Inc.", "Western Digital"), - T_DATA ("Wilocity Ltd.", "Wilocity"), - T_DATA ("Winbond Electronics Corp", "Winbond"), - T_DATA ("Winbond", "Winbond"), - T_DATA ("Wistron NeWeb", "Wistron NeWeb"), - T_DATA ("Xircom", "Xircom"), - T_DATA ("Z-Com", "Z-Com"), - T_DATA ("Zinwell", "Zinwell"), - T_DATA ("Zoom Telephonics, Inc.", "Zoom"), - T_DATA ("ZTE WCDMA Technologies MSM", "ZTE"), - T_DATA ("ZyDAS", "ZyDAS"), - T_DATA ("ZyXEL Communications Corp.", "ZyXEL"), - }; - - _test_fixup_string (data, G_N_ELEMENTS (data), nm_utils_fixup_vendor_string); -} - -static void -test_fixup_product_string (void) -{ - static const TestFixupData data[] = { - T_DATA ("10/100BaseTX [RTL81xx]", "RTL81xx"), - T_DATA ("10/100 Ethernet", NULL), - T_DATA ("10/100 Ethernet [pegasus]", "pegasus"), - T_DATA ("10/100 USB Ethernet", NULL), - T_DATA ("10/100 USB NIC", NULL), - T_DATA ("1010/1020/1007/1741 10Gbps CNA", "1010/1020/1007/1741"), - T_DATA ("1012 PCMCIA 10/100 Ethernet Card [RTL81xx]", "1012"), - T_DATA ("101 Ethernet [klsi]", "101"), - T_DATA ("10GbE Converged Network Adapter (TCP/IP Networking)", NULL), - T_DATA ("10GbE Ethernet Adapter", NULL), - T_DATA ("10 Gigabit BR KX4 Dual Port Network Connection", "BR KX4"), - T_DATA ("10-Giga TOE SmartNIC 2-Port", "SmartNIC"), - T_DATA ("10-Giga TOE SmartNIC", "SmartNIC"), - T_DATA ("10Mbps Ethernet [klsi]", "klsi"), - T_DATA ("1860 16Gbps/10Gbps Fabric Adapter", "1860"), - T_DATA ("190 Ethernet Adapter", "190"), - T_DATA ("191 Gigabit Ethernet Adapter", "191"), - T_DATA ("21145 Fast Ethernet", "21145"), - T_DATA ("21x4x DEC-Tulip compatible 10/100 Ethernet", "21x4x"), - T_DATA ("21x4x DEC-Tulip compatible Fast Ethernet", "21x4x"), - T_DATA ("2202 Ethernet [klsi]", "2202"), - T_DATA ("2202 Ethernet [pegasus]", "2202"), - T_DATA ("3C19250 Ethernet [klsi]", "3C19250"), - T_DATA ("3c450 HomePNA [Tornado]", "3c450 HomePNA"), - T_DATA ("3C460B 10/100 Ethernet Adapter", "3C460B"), - T_DATA ("3c555 Laptop Hurricane", "3c555 Hurricane"), - T_DATA ("3c556B CardBus [Tornado]", "3c556B"), - T_DATA ("3c556 Hurricane CardBus [Cyclone]", "3c556 Hurricane"), - T_DATA ("3c575 Megahertz 10/100 LAN CardBus [Boomerang]", "3c575 Megahertz"), - T_DATA ("3c590 10BaseT [Vortex]", "3c590"), - T_DATA ("3c592 EISA 10mbps Demon/Vortex", "3c592 Demon/Vortex"), - T_DATA ("3c595 100Base-MII [Vortex]", "3c595"), - T_DATA ("3c595 100BaseT4 [Vortex]", "3c595"), - T_DATA ("3c595 100BaseTX [Vortex]", "3c595"), - T_DATA ("3c595 Megahertz 10/100 LAN CardBus [Boomerang]", "3c595 Megahertz"), - T_DATA ("3c597 EISA Fast Demon/Vortex", "3c597 Fast Demon/Vortex"), - T_DATA ("3c900 10BaseT [Boomerang]", "3c900"), - T_DATA ("3c900 10Mbps Combo [Boomerang]", "3c900 Combo"), - T_DATA ("3c900B-Combo Etherlink XL [Cyclone]", "3c900B-Combo Etherlink XL"), - T_DATA ("3c900B-FL 10base-FL [Cyclone]", "3c900B-FL"), - T_DATA ("3c900B-TPC Etherlink XL [Cyclone]", "3c900B-TPC Etherlink XL"), - T_DATA ("3c900B-TPO Etherlink XL [Cyclone]", "3c900B-TPO Etherlink XL"), - T_DATA ("3c905 100BaseT4 [Boomerang]", "3c905"), - T_DATA ("3c905 100BaseTX [Boomerang]", "3c905"), - T_DATA ("3c905B 100BaseTX [Cyclone]", "3c905B"), - T_DATA ("3c905B Deluxe Etherlink 10/100/BNC [Cyclone]", "3c905B Deluxe Etherlink"), - T_DATA ("3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone]", "3c905B-FX Fast Etherlink XL FX"), - T_DATA ("3c905B-T4 Fast EtherLink XL [Cyclone]", "3c905B-T4 Fast EtherLink XL"), - T_DATA ("3C905B-TX Fast Etherlink XL PCI", "3C905B-TX Fast Etherlink XL"), - T_DATA ("3c905C-TX/TX-M [Tornado]", "3c905C-TX/TX-M"), - T_DATA ("3C920B-EMB Integrated Fast Ethernet Controller [Tornado]", "3C920B-EMB"), - T_DATA ("3C920B-EMB-WNM Integrated Fast Ethernet Controller", "3C920B-EMB-WNM"), - T_DATA ("3c940 10/100/1000Base-T [Marvell]", "3c940"), - T_DATA ("3c940B 10/100/1000Base-T", "3c940B"), - T_DATA ("3c980-C 10/100baseTX NIC [Python-T]", "3c980-C"), - T_DATA ("3c980-TX Fast Etherlink XL Server Adapter [Cyclone]", "3c980-TX Fast Etherlink XL"), - T_DATA ("3c982-TXM 10/100baseTX Dual Port A [Hydra]", "3c982-TXM A"), - T_DATA ("3c982-TXM 10/100baseTX Dual Port B [Hydra]", "3c982-TXM B"), - T_DATA ("3c985 1000BaseSX (SX/TX)", "3c985"), - T_DATA ("3C990B-TX-M/3C990BSVR [Typhoon2]", "3C990B-TX-M/3C990BSVR"), - T_DATA ("3C990SVR [Typhoon Server]", "3C990SVR"), - T_DATA ("3C990-TX [Typhoon]", "3C990-TX"), - T_DATA ("3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone]", "3cCFE575BT Megahertz"), - T_DATA ("3cCFE575CT CardBus [Cyclone]", "3cCFE575CT"), - T_DATA ("3cCFE656 CardBus [Cyclone]", "3cCFE656"), - T_DATA ("3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone]", "3cCFEM656B"), - T_DATA ("3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller", "3Com 3C920B-EMB-WNM"), - T_DATA ("3Com 3CRUSBN275 802.11abgn Wireless Adapter [Atheros AR9170]", "3Com 3CRUSBN275"), - T_DATA ("3com 3CRWE154G72 [Office Connect Wireless LAN Adapter]", "3com 3CRWE154G72"), - T_DATA ("3CR990-FX-95/97/95 [Typhon Fiber]", "3CR990-FX-95/97/95"), - T_DATA ("3CR990SVR95 [Typhoon Server 56-bit]", "3CR990SVR95"), - T_DATA ("3CR990SVR97 [Typhoon Server 168-bit]", "3CR990SVR97"), - T_DATA ("3CR990-TX-95 [Typhoon 56-bit]", "3CR990-TX-95"), - T_DATA ("3CR990-TX-97 [Typhoon 168-bit]", "3CR990-TX-97"), - T_DATA ("3CRPAG175 Wireless PC Card", "3CRPAG175"), - T_DATA ("3CRUSB10075 802.11bg [ZyDAS ZD1211]", "3CRUSB10075"), - T_DATA ("3CRWE254G72 802.11g Adapter", "3CRWE254G72"), - T_DATA ("3CSOHO100B-TX 910-A01 [tulip]", "3CSOHO100B-TX 910-A01"), - T_DATA ("3cSOHO100-TX Hurricane", "3cSOHO100-TX Hurricane"), - T_DATA ("3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado]", "3cXFEM656C"), - T_DATA ("4410a Wireless-G Adapter [Intersil ISL3887]", "4410a"), - T_DATA ("4DWave DX", "4DWave DX"), - T_DATA ("4G LTE adapter", NULL), - T_DATA ("54g USB Network Adapter", NULL), - T_DATA ("570x 10/100 Integrated Controller", "570x"), - T_DATA ("79c970 [PCnet32 LANCE]", "79c970"), - T_DATA ("79c978 [HomePNA]", "79c978"), - T_DATA ("80003ES2LAN Gigabit Ethernet Controller (Copper)", "80003ES2LAN"), - T_DATA ("80003ES2LAN Gigabit Ethernet Controller (Serdes)", "80003ES2LAN"), - T_DATA ("802.11a/b/g/n USB Wireless LAN Card", NULL), - T_DATA ("802.11 Adapter", NULL), - T_DATA ("802.11bgn 1T1R Mini Card Wireless Adapter", "1T1R"), - T_DATA ("802.11bg", NULL), - T_DATA ("802.11b/g/n USB Wireless LAN Card", NULL), - T_DATA ("802.11b/g/n USB Wireless Network Adapter", NULL), - T_DATA ("802.11b/g/n Wireless Network Adapter", NULL), - T_DATA ("802.11b/g Turbo Wireless Adapter", NULL), - T_DATA ("802.11b/g Wireless Network Adapter", NULL), - T_DATA ("802.11g Wireless Adapter [Intersil ISL3886]", "Intersil ISL3886"), - T_DATA ("802.11n adapter", NULL), - T_DATA ("802.11n/b/g Mini Wireless LAN USB2.0 Adapter", NULL), - T_DATA ("802.11n/b/g Wireless LAN USB2.0 Adapter", NULL), - T_DATA ("802.11 n/g/b Wireless LAN Adapter", NULL), - T_DATA ("802.11 n/g/b Wireless LAN USB Adapter", NULL), - T_DATA ("802.11 n/g/b Wireless LAN USB Mini-Card", NULL), - T_DATA ("802.11n Network Adapter", NULL), - T_DATA ("802.11n Network Adapter (wrong ID - swapped vendor and device)", NULL), - T_DATA ("802.11n USB Wireless Card", NULL), - T_DATA ("802.11n Wireless Adapter", NULL), - T_DATA ("802.11n Wireless LAN Card", NULL), - T_DATA ("802.11n Wireless USB Card", NULL), - T_DATA ("802AIN Wireless N Network Adapter [Atheros AR9170+AR9101]", "Atheros AR9170+AR9101"), - T_DATA ("802UIG-1 802.11g Wireless Mini Adapter [Intersil ISL3887]", "Intersil ISL3887"), - T_DATA ("82540EM Gigabit Ethernet Controller", "82540EM"), - T_DATA ("82540EM Gigabit Ethernet Controller (LOM)", "82540EM"), - T_DATA ("82540EP Gigabit Ethernet Controller", "82540EP"), - T_DATA ("82540EP Gigabit Ethernet Controller (Mobile)", "82540EP"), - T_DATA ("82541EI Gigabit Ethernet Controller", "82541EI"), - T_DATA ("82541ER Gigabit Ethernet Controller", "82541ER"), - T_DATA ("82541GI Gigabit Ethernet Controller", "82541GI"), - T_DATA ("82541PI Gigabit Ethernet Controller", "82541PI"), - T_DATA ("82542 Gigabit Ethernet Controller (Fiber)", "82542"), - T_DATA ("82543GC Gigabit Ethernet Controller (Copper)", "82543GC"), - T_DATA ("82543GC Gigabit Ethernet Controller (Fiber)", "82543GC"), - T_DATA ("82544EI Gigabit Ethernet Controller (Copper)", "82544EI"), - T_DATA ("82544EI Gigabit Ethernet Controller (Fiber)", "82544EI"), - T_DATA ("82544GC Gigabit Ethernet Controller (Copper)", "82544GC"), - T_DATA ("82544GC Gigabit Ethernet Controller (LOM)", "82544GC"), - T_DATA ("82545EM Gigabit Ethernet Controller (Copper)", "82545EM"), - T_DATA ("82545EM Gigabit Ethernet Controller (Fiber)", "82545EM"), - T_DATA ("82545GM Gigabit Ethernet Controller", "82545GM"), - T_DATA ("82546EB Gigabit Ethernet Controller", "82546EB"), - T_DATA ("82546EB Gigabit Ethernet Controller (Copper)", "82546EB"), - T_DATA ("82546EB Gigabit Ethernet Controller (Fiber)", "82546EB"), - T_DATA ("82546GB Gigabit Ethernet Controller", "82546GB"), - T_DATA ("82546GB Gigabit Ethernet Controller (Copper)", "82546GB"), - T_DATA ("82547EI Gigabit Ethernet Controller", "82547EI"), - T_DATA ("82547EI Gigabit Ethernet Controller (Mobile)", "82547EI"), - T_DATA ("82547GI Gigabit Ethernet Controller", "82547GI"), - T_DATA ("82551QM Ethernet Controller", "82551QM"), - T_DATA ("82552 10/100 Network Connection", "82552"), - T_DATA ("82557/8/9/0/1 Ethernet Pro 100", "82557/8/9/0/1"), - T_DATA ("82559 Ethernet Controller", "82559"), - T_DATA ("82559 InBusiness 10/100", "82559 InBusiness"), - T_DATA ("8255xER/82551IT Fast Ethernet Controller", "8255xER/82551IT"), - T_DATA ("82562 EM/EX/GX - PRO/100 VM Ethernet Controller", "82562 EM/EX/GX"), - T_DATA ("82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller", "82562 EM/EX/GX"), - T_DATA ("82562EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile", "82562EM/EX/GX"), - T_DATA ("82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller", "82562ET/EZ/GT/GZ"), - T_DATA ("82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller", "82562ET/EZ/GT/GZ"), - T_DATA ("82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile", "82562ET/EZ/GT/GZ"), - T_DATA ("82562EZ 10/100 Ethernet Controller", "82562EZ"), - T_DATA ("82562G 10/100 Network Connection", "82562G"), - T_DATA ("82562G-2 10/100 Network Connection", "82562G-2"), - T_DATA ("82562G - PRO/100 VE Ethernet Controller Mobile", "82562G"), - T_DATA ("82562G - PRO/100 VE (LOM) Ethernet Controller", "82562G"), - T_DATA ("82562GT 10/100 Network Connection", "82562GT"), - T_DATA ("82562GT-2 10/100 Network Connection", "82562GT-2"), - T_DATA ("82562V 10/100 Network Connection", "82562V"), - T_DATA ("82562V-2 10/100 Network Connection", "82562V-2"), - T_DATA ("82566DC-2 Gigabit Network Connection", "82566DC-2"), - T_DATA ("82566DC Gigabit Network Connection", "82566DC"), - T_DATA ("82566DM-2 Gigabit Network Connection", "82566DM-2"), - T_DATA ("82566DM Gigabit Network Connection", "82566DM"), - T_DATA ("82566MC Gigabit Network Connection", "82566MC"), - T_DATA ("82566MM Gigabit Network Connection", "82566MM"), - T_DATA ("82567LF-2 Gigabit Network Connection", "82567LF-2"), - T_DATA ("82567LF-3 Gigabit Network Connection", "82567LF-3"), - T_DATA ("82567LF Gigabit Network Connection", "82567LF"), - T_DATA ("82567LM-2 Gigabit Network Connection", "82567LM-2"), - T_DATA ("82567LM-3 Gigabit Network Connection", "82567LM-3"), - T_DATA ("82567LM-4 Gigabit Network Connection", "82567LM-4"), - T_DATA ("82567LM Gigabit Network Connection", "82567LM"), - T_DATA ("82567V-2 Gigabit Network Connection", "82567V-2"), - T_DATA ("82567V-3 Gigabit Network Connection", "82567V-3"), - T_DATA ("82567V-4 Gigabit Network Connection", "82567V-4"), - T_DATA ("82567V Gigabit Network Connection", "82567V"), - T_DATA ("82571EB Dual Port Gigabit Mezzanine Adapter", "82571EB Mezzanine"), - T_DATA ("82571EB Gigabit Ethernet Controller", "82571EB"), - T_DATA ("82571EB Gigabit Ethernet Controller (Copper)", "82571EB"), - T_DATA ("82571EB Gigabit Ethernet Controller (Fiber)", "82571EB"), - T_DATA ("82571EB Quad Port Gigabit Mezzanine Adapter", "82571EB Quad Port Mezzanine"), - T_DATA ("82571PT Gigabit PT Quad Port Server ExpressModule", "82571PT PT Quad Port"), - T_DATA ("82572EI Gigabit Ethernet Controller", "82572EI"), - T_DATA ("82572EI Gigabit Ethernet Controller (Copper)", "82572EI"), - T_DATA ("82572EI Gigabit Ethernet Controller (Fiber)", "82572EI"), - T_DATA ("82573E Gigabit Ethernet Controller (Copper)", "82573E"), - T_DATA ("82573L Gigabit Ethernet Controller", "82573L"), - T_DATA ("82573V Gigabit Ethernet Controller (Copper)", "82573V"), - T_DATA ("82574L Gigabit Network Connection", "82574L"), - T_DATA ("82575EB Gigabit Backplane Connection", "82575EB Backplane Connection"), - T_DATA ("82575EB Gigabit Network Connection", "82575EB"), - T_DATA ("82575GB Gigabit Network Connection", "82575GB"), - T_DATA ("82576 Gigabit Backplane Connection", "82576 Backplane Connection"), - T_DATA ("82576 Gigabit Network Connection", "82576"), - T_DATA ("82576NS Gigabit Network Connection", "82576NS"), - T_DATA ("82576NS SerDes Gigabit Network Connection", "82576NS SerDes"), - T_DATA ("82576 Virtual Function", "82576 Virtual Function"), - T_DATA ("82577LC Gigabit Network Connection", "82577LC"), - T_DATA ("82577LM Gigabit Network Connection", "82577LM"), - T_DATA ("82578DC Gigabit Network Connection", "82578DC"), - T_DATA ("82578DM Gigabit Network Connection", "82578DM"), - T_DATA ("82579LM Gigabit Network Connection (Lewisville)", "82579LM"), - T_DATA ("82579V Gigabit Network Connection", "82579V"), - T_DATA ("82580 Gigabit Backplane Connection", "82580 Backplane Connection"), - T_DATA ("82580 Gigabit Fiber Network Connection", "82580"), - T_DATA ("82580 Gigabit Network Connection", "82580"), - T_DATA ("82580 Gigabit SFP Connection", "82580 SFP Connection"), - T_DATA ("82583V Gigabit Network Connection", "82583V"), - T_DATA ("82597EX 10GbE Ethernet Controller", "82597EX"), - T_DATA ("82598 10GbE PCI-Express Ethernet Controller", "82598"), - T_DATA ("82598EB 10-Gigabit AF Dual Port Network Connection", "82598EB AF"), - T_DATA ("82598EB 10-Gigabit AF Network Connection", "82598EB AF"), - T_DATA ("82598EB 10-Gigabit AT2 Server Adapter", "82598EB AT2"), - T_DATA ("82598EB 10-Gigabit AT CX4 Network Connection", "82598EB AT CX4"), - T_DATA ("82598EB 10-Gigabit AT Network Connection", "82598EB AT"), - T_DATA ("82598EB 10-Gigabit Dual Port Network Connection", "82598EB"), - T_DATA ("82598EB Gigabit BX Network Connection", "82598EB BX"), - T_DATA ("82599 10 Gigabit Dual Port Backplane Connection", "82599 Backplane Connection"), - T_DATA ("82599 10 Gigabit Dual Port Backplane Connection with FCoE", "82599 Backplane Connection with FCoE"), - T_DATA ("82599 10 Gigabit Dual Port Network Connection", "82599"), - T_DATA ("82599 10 Gigabit Dual Port Network Connection with FCoE", "82599 with FCoE"), - T_DATA ("82599 10 Gigabit Network Connection", "82599"), - T_DATA ("82599 10 Gigabit TN Network Connection", "82599 TN"), - T_DATA ("82599ES 10 Gigabit Network Connection", "82599ES"), - T_DATA ("82599ES 10-Gigabit SFI/SFP+ Network Connection", "82599ES SFI/SFP+"), - T_DATA ("82599 Ethernet Controller Virtual Function", "82599 Virtual Function"), - T_DATA ("82599 Virtual Function", "82599 Virtual Function"), - T_DATA ("82801BA/BAM/CA/CAM Ethernet Controller", "82801BA/BAM/CA/CAM"), - T_DATA ("82801CAM (ICH3) PRO/100 VE Ethernet Controller", "82801CAM"), - T_DATA ("82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller", "82801CAM"), - T_DATA ("82801CAM (ICH3) PRO/100 VM Ethernet Controller", "82801CAM"), - T_DATA ("82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller", "82801CAM"), - T_DATA ("82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller", "82801CAM"), - T_DATA ("82801DB PRO/100 VE (CNR) Ethernet Controller", "82801DB PRO/100 VE"), - T_DATA ("82801DB PRO/100 VE (LOM) Ethernet Controller", "82801DB PRO/100 VE"), - T_DATA ("82801DB PRO/100 VE (MOB) Ethernet Controller", "82801DB PRO/100 VE"), - T_DATA ("82801DB PRO/100 VM (CNR) Ethernet Controller", "82801DB PRO/100 VM"), - T_DATA ("82801DB PRO/100 VM (LOM) Ethernet Controller", "82801DB PRO/100 VM"), - T_DATA ("82801DB PRO/100 VM (MOB) Ethernet Controller", "82801DB PRO/100 VM"), - T_DATA ("82801EB/ER (ICH5/ICH5R) integrated LAN Controller", "82801EB/ER"), - T_DATA ("82801E Ethernet Controller 0", "82801E 0"), - T_DATA ("82801E Ethernet Controller 1", "82801E 1"), - T_DATA ("83c170 EPIC/100 Fast Ethernet Adapter", "83c170 EPIC/100"), - T_DATA ("83c175 EPIC/100 Fast Ethernet Adapter", "83c175 EPIC/100"), - T_DATA ("83C885 NT50 DigitalScape Fast Ethernet", "83C885 NT50 DigitalScape"), - T_DATA ("88E8001 Gigabit Ethernet Controller", "88E8001"), - T_DATA ("88E8021 PCI-X IPMI Gigabit Ethernet Controller", "88E8021 IPMI"), - T_DATA ("88E8022 PCI-X IPMI Gigabit Ethernet Controller", "88E8022 IPMI"), - T_DATA ("88E8035 PCI-E Fast Ethernet Controller", "88E8035"), - T_DATA ("88E8036 PCI-E Fast Ethernet Controller", "88E8036"), - T_DATA ("88E8038 PCI-E Fast Ethernet Controller", "88E8038"), - T_DATA ("88E8039 PCI-E Fast Ethernet Controller", "88E8039"), - T_DATA ("88E8040 PCI-E Fast Ethernet Controller", "88E8040"), - T_DATA ("88E8040T PCI-E Fast Ethernet Controller", "88E8040T"), - T_DATA ("88E8042 PCI-E Fast Ethernet Controller", "88E8042"), - T_DATA ("88E8048 PCI-E Fast Ethernet Controller", "88E8048"), - T_DATA ("88E8050 PCI-E ASF Gigabit Ethernet Controller", "88E8050 ASF"), - T_DATA ("88E8052 PCI-E ASF Gigabit Ethernet Controller", "88E8052 ASF"), - T_DATA ("88E8053 PCI-E Gigabit Ethernet Controller", "88E8053"), - T_DATA ("88E8055 PCI-E Gigabit Ethernet Controller", "88E8055"), - T_DATA ("88E8056 PCI-E Gigabit Ethernet Controller", "88E8056"), - T_DATA ("88E8057 PCI-E Gigabit Ethernet Controller", "88E8057"), - T_DATA ("88E8058 PCI-E Gigabit Ethernet Controller", "88E8058"), - T_DATA ("88E8061 PCI-E IPMI Gigabit Ethernet Controller", "88E8061 IPMI"), - T_DATA ("88E8062 PCI-E IPMI Gigabit Ethernet Controller", "88E8062 IPMI"), - T_DATA ("88E8070 based Ethernet Controller", "88E8070 based"), - T_DATA ("88E8071 PCI-E Gigabit Ethernet Controller", "88E8071"), - T_DATA ("88E8072 PCI-E Gigabit Ethernet Controller", "88E8072"), - T_DATA ("88E8075 PCI-E Gigabit Ethernet Controller", "88E8075"), - T_DATA ("88EC032 Ethernet Controller", "88EC032"), - T_DATA ("88EC033 PCI-E Fast Ethernet Controller", "88EC033"), - T_DATA ("88EC034 Ethernet Controller", "88EC034"), - T_DATA ("88EC036 PCI-E Gigabit Ethernet Controller", "88EC036"), - T_DATA ("88EC042 Ethernet Controller", "88EC042"), - T_DATA ("88W8363 [TopDog] 802.11n Wireless", "88W8363"), - T_DATA ("88W8366 [TopDog] 802.11n Wireless", "88W8366"), - T_DATA ("88W8388 802.11a/b/g WLAN", "88W8388"), - T_DATA ("88W8687 [TopDog] 802.11b/g Wireless", "88W8687"), - T_DATA ("88W8764 [Avastar] 802.11n Wireless", "88W8764"), - T_DATA ("88W8897 [AVASTAR] 802.11ac Wireless", "88W8897"), - T_DATA ("A90-211WG-01 802.11g Adapter [Intersil ISL3887]", "A90-211WG-01"), - T_DATA ("A9T wireless 802.11bg", "A9T"), - T_DATA ("AboCom Systems Inc [WN2001 Prolink Wireless-N Nano Adapter]", "AboCom Systems Inc"), - T_DATA ("AC1000 Gigabit Ethernet", "AC1000"), - T_DATA ("AC1001 Gigabit Ethernet", "AC1001"), - T_DATA ("AC1003 Gigabit Ethernet", "AC1003"), - T_DATA ("AC9100 Gigabit Ethernet", "AC9100"), - T_DATA ("AceNIC Gigabit Ethernet", "AceNIC"), - T_DATA ("AceNIC Gigabit Ethernet (Copper)", "AceNIC"), - T_DATA ("Acer Gobi 2000 Wireless Modem", "Acer Gobi 2000"), - T_DATA ("Acer Gobi Wireless Modem", "Acer Gobi"), - T_DATA ("ADM8511 Pegasus II Ethernet", "ADM8511 Pegasus II"), - T_DATA ("ADMtek ADM8515 NIC", "ADMtek ADM8515"), - T_DATA ("ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter", "ADMtek Centaur-C"), - T_DATA ("ADSL Modem", NULL), - T_DATA ("AE1000 v1 802.11n [Ralink RT3572]", "AE1000"), - T_DATA ("AE1200 802.11bgn Wireless Adapter [Broadcom BCM43235]", "AE1200"), - T_DATA ("AE3000 802.11abgn (3x3) Wireless Adapter [Ralink RT3573]", "AE3000"), - T_DATA ("AG-225H 802.11bg", "AG-225H"), - T_DATA ("Air2210 54 Mbps Wireless Adapter", "Air2210"), - T_DATA ("Air2310 150 Mbps Wireless Adapter", "Air2310"), - T_DATA ("Airlink101 AWLL6070 802.11bgn Wireless Adapter [Ralink RT2770]", "Airlink101 AWLL6070"), - T_DATA ("Airlink101 AWLL6080 802.11bgn Wireless Adapter [Ralink RT2870]", "Airlink101 AWLL6080"), - T_DATA ("AirLive WL-1600USB 802.11g Adapter [Realtek RTL8187L]", "AirLive WL-1600USB"), - T_DATA ("AirLive WN-200USB wireless 11b/g/n dongle", "AirLive WN-200USB"), - T_DATA ("AirLive WN-360USB adapter", "AirLive WN-360USB"), - T_DATA ("AirLive X.USB 802.11abgn [Atheros AR9170+AR9104]", "AirLive X.USB"), - T_DATA ("AirPcap NX [Atheros AR9001U-(2)NG]", "AirPcap NX"), - T_DATA ("AirPlus G DWL-G120 Wireless Adapter(rev.C) [Intersil ISL3887]", "AirPlus G DWL-G120"), - T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.A1) [Intersil ISL3880]", "AirPlus G DWL-G122"), - T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.A2) [Intersil ISL3887]", "AirPlus G DWL-G122"), - T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.B1) [Ralink RT2571]", "AirPlus G DWL-G122"), - T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.C1) [Ralink RT2571W]", "AirPlus G DWL-G122"), - T_DATA ("AirPlus G DWL-G122 Wireless Adapter(rev.E1) [Ralink RT2070]", "AirPlus G DWL-G122"), - T_DATA ("Alcatel One Touch L100V / Telekom Speedstick LTE II", "Alcatel One Touch L100V / Telekom Speedstick II"), - T_DATA ("Allnet ALL0283 [AR5523]", "Allnet ALL0283"), - T_DATA ("Allnet ALL0283 [AR5523](no firmware)", "Allnet ALL0283"), - T_DATA ("Allnet ALL0298 v2 802.11bg", "Allnet ALL0298"), - T_DATA ("AM10 v1 802.11n [Ralink RT3072]", "AM10"), - T_DATA ("AMD-8111 Ethernet", "AMD-8111"), - T_DATA ("AN2720 USB-USB Bridge", "AN2720 USB-USB Bridge"), - T_DATA ("AN8513 Ethernet", "AN8513"), - T_DATA ("AN8515 Ethernet", "AN8515"), - T_DATA ("AN986A Ethernet", "AN986A"), - T_DATA ("AN986 Pegasus Ethernet", "AN986 Pegasus"), - T_DATA ("ANA620xx/ANA69011A", "ANA620xx/ANA69011A"), - T_DATA ("AN-WF500 802.11abgn + BT Wireless Adapter [Broadcom BCM43242]", "AN-WF500"), - T_DATA ("Aolynk WUB320g", "Aolynk WUB320g"), - T_DATA ("AR2413/AR2414 Wireless Network Adapter [AR5005G(S) 802.11bg]", "AR2413/AR2414"), - T_DATA ("AR2417 Wireless Network Adapter [AR5007G 802.11bg]", "AR2417"), - T_DATA ("AR2425 Wireless Network Adapter [AR5007EG 802.11bg]", "AR2425"), - T_DATA ("AR2427 802.11bg Wireless Network Adapter (PCI-Express)", "AR2427"), - T_DATA ("AR242x / AR542x Wireless Network Adapter (PCI-Express)", "AR242x / AR542x"), - T_DATA ("AR5210 Wireless Network Adapter [AR5000 802.11a]", "AR5210"), - T_DATA ("AR5211 Wireless Network Adapter [AR5001A 802.11a]", "AR5211"), - T_DATA ("AR5211 Wireless Network Adapter [AR5001X 802.11ab]", "AR5211"), - T_DATA ("AR5212/5213/2414 Wireless Network Adapter", "AR5212/5213/2414"), - T_DATA ("AR5212 802.11abg NIC (3CRDAG675)", "AR5212"), - T_DATA ("AR5212 802.11abg NIC", "AR5212"), - T_DATA ("AR5413/AR5414 Wireless Network Adapter [AR5006X(S) 802.11abg]", "AR5413/AR5414"), - T_DATA ("AR5416 Wireless Network Adapter [AR5008 802.11(a)bgn]", "AR5416"), - T_DATA ("AR5418 Wireless Network Adapter [AR5008E 802.11(a)bgn] (PCI-Express)", "AR5418"), - T_DATA ("AR5523", "AR5523"), - T_DATA ("AR5523 driver (no firmware)", "AR5523"), - T_DATA ("AR5523 (no firmware)", "AR5523"), - T_DATA ("AR7010 (no firmware)", "AR7010"), - T_DATA ("AR8121/AR8113/AR8114 Gigabit or Fast Ethernet", "AR8121/AR8113/AR8114"), - T_DATA ("AR8131 Gigabit Ethernet", "AR8131"), - T_DATA ("AR8132 Fast Ethernet", "AR8132"), - T_DATA ("AR8151 v1.0 Gigabit Ethernet", "AR8151 v1.0"), - T_DATA ("AR8151 v2.0 Gigabit Ethernet", "AR8151 v2.0"), - T_DATA ("AR8152 v1.1 Fast Ethernet", "AR8152"), - T_DATA ("AR8152 v2.0 Fast Ethernet", "AR8152 v2.0"), - T_DATA ("AR8161 Gigabit Ethernet", "AR8161"), - T_DATA ("AR8162 Fast Ethernet", "AR8162"), - T_DATA ("AR9160 Wireless Network Adapter [AR9001 802.11(a)bgn]", "AR9160"), - T_DATA ("AR9170 802.11n", "AR9170"), - T_DATA ("AR9170+AR9104 802.11abgn Wireless Adapter", "AR9170+AR9104"), - T_DATA ("AR9227 Wireless Network Adapter", "AR9227"), - T_DATA ("AR922X Wireless Network Adapter", "AR922X"), - T_DATA ("AR922X Wireless Network Adapter (Compex WLM200NX / Wistron DNMA-92)", "AR922X"), - T_DATA ("AR9271 802.11n", "AR9271"), - T_DATA ("AR9285 Wireless Network Adapter (PCI-Express)", "AR9285"), - T_DATA ("AR9285 Wireless Network Adapter (PCI-Express) (AW-NB037H 802.11bgn Wireless Half-size Mini PCIe Card [AR9002WB-1NGCD])", "AR9285"), - T_DATA ("AR9287 Wireless Network Adapter (PCI-Express)", "AR9287"), - T_DATA ("AR928X Wireless Network Adapter (PCI-Express)", "AR928X"), - T_DATA ("AR928X Wireless Network Adapter (PCI-Express) (EM306 802.11bgn Wireless Half-size Mini PCIe Card [AR9283])", "AR928X"), - T_DATA ("AR928X Wireless Network Adapter (PCI-Express) (T77H047.31 802.11bgn Wireless Half-size Mini PCIe Card [AR9283])", "AR928X"), - T_DATA ("AR93xx Wireless Network Adapter", "AR93xx"), - T_DATA ("AR93xx Wireless Network Adapter (Killer Wireless-N 1102 Half-size Mini PCIe Card [AR9382])", "AR93xx"), - T_DATA ("AR93xx Wireless Network Adapter (Killer Wireless-N 1103 Half-size Mini PCIe Card [AR9380])", "AR93xx"), - T_DATA ("AR9462 Wireless Network Adapter", "AR9462"), - T_DATA ("AR9462 Wireless Network Adapter (Wireless 1601 802.11abgn Adapter)", "AR9462"), - T_DATA ("AR9462 Wireless Network Adapter (Wireless 1802 802.11abgn Adapter)", "AR9462"), - T_DATA ("AR9485 Wireless Network Adapter", "AR9485"), - T_DATA ("AR9485 Wireless Network Adapter (AR9485WB-EG 802.11b/g/n mini-PCIe card on a series 3 laptop)", "AR9485"), - T_DATA ("AR9485 Wireless Network Adapter (AW-NE186H)", "AR9485"), - T_DATA ("AR958x 802.11abgn Wireless Network Adapter", "AR958x"), - T_DATA ("Arcadyan 802.11N Wireless Adapter", "Arcadyan"), - T_DATA ("Arcadyan WN4501 802.11b/g", "Arcadyan WN4501"), - T_DATA ("Arcadyan WN7512 802.11n", "Arcadyan WN7512"), - T_DATA ("Asus Gobi 2000 Wireless Modem", "Asus Gobi 2000"), - T_DATA ("Aterm PA-WL54GU", "Aterm PA-WL54GU"), - T_DATA ("Aterm WL300NU-AG", "Aterm WL300NU-AG"), - T_DATA ("Aterm WL300NU-G", "Aterm WL300NU-G"), - T_DATA ("Attansic L1 Gigabit Ethernet", "Attansic L1"), - T_DATA ("Attansic L2c Gigabit Ethernet", "Attansic L2c"), - T_DATA ("Attansic L2 Fast Ethernet", "Attansic L2"), - T_DATA ("AT-USB100", "AT-USB100"), - T_DATA ("AX88141 Fast Ethernet Controller", "AX88141"), - T_DATA ("AX88178", "AX88178"), - T_DATA ("AX88179 Gigabit Ethernet", "AX88179"), - T_DATA ("AX88179 Gigabit Ethernet [Sitecom]", "AX88179"), - T_DATA ("AX88179 Gigabit Ethernet [ThinkPad OneLink GigaLAN]", "AX88179"), - T_DATA ("AX88772A Fast Ethernet", "AX88772A"), - T_DATA ("AX88772", "AX88772"), - T_DATA ("AX88772B", "AX88772B"), - T_DATA ("AX88772B Fast Ethernet Controller", "AX88772B"), - T_DATA ("B404-BT Unified Wire Ethernet Controller", "B404-BT"), - T_DATA ("B404-BT Unified Wire Ethernet Controller [VF]", "B404-BT"), - T_DATA ("B420-SR Unified Wire Ethernet Controller", "B420-SR"), - T_DATA ("B420-SR Unified Wire Ethernet Controller [VF]", "B420-SR"), - T_DATA ("B504-BT Unified Wire Ethernet Controller", "B504-BT"), - T_DATA ("B504-BT Unified Wire Ethernet Controller [VF]", "B504-BT"), - T_DATA ("B520-SR Unified Wire Ethernet Controller", "B520-SR"), - T_DATA ("B520-SR Unified Wire Ethernet Controller [VF]", "B520-SR"), - T_DATA ("BCM43142 802.11b/g/n", "BCM43142"), - T_DATA ("BCM43143 802.11bgn (1x1) Wireless Adapter", "BCM43143"), - T_DATA ("BCM43143 WLAN card", "BCM43143"), - T_DATA ("BCM43236 802.11abgn Wireless Adapter", "BCM43236"), - T_DATA ("BCM43241 WLAN card", "BCM43241"), - T_DATA ("BCM43242 802.11abgn Wireless Adapter", "BCM43242"), - T_DATA ("BCM4329 WLAN card", "BCM4329"), - T_DATA ("BCM4330 WLAN card", "BCM4330"), - T_DATA ("BCM43340 WLAN card", "BCM43340"), - T_DATA ("BCM43341 WLAN card", "BCM43341"), - T_DATA ("BCM4334 WLAN card", "BCM4334"), - T_DATA ("BCM4335/BCM4339 WLAN card", "BCM4335/BCM4339"), - T_DATA ("BCM43362 WLAN card", "BCM43362"), - T_DATA ("BCM4350 802.11ac Wireless Network Adapter", "BCM4350"), - T_DATA ("BCM4354 WLAN card", "BCM4354"), - T_DATA ("BCM43567 802.11ac Wireless Network Adapter", "BCM43567"), - T_DATA ("BCM4356 802.11ac Wireless Network Adapter", "BCM4356"), - T_DATA ("BCM43570 802.11ac Wireless Network Adapter", "BCM43570"), - T_DATA ("BCM4358 802.11ac Wireless LAN SoC", "BCM4358"), - T_DATA ("BCM43602 802.11ac Wireless LAN SoC", "BCM43602"), - T_DATA ("BCM4401 100Base-T", "BCM4401"), - T_DATA ("BCM4401-B0 100Base-TX", "BCM4401-B0"), - T_DATA ("BCM4402 Integrated 10/100BaseT", "BCM4402"), - T_DATA ("BCM57301 NetXtreme-C 10Gb Ethernet Controller", "BCM57301 NetXtreme-C"), - T_DATA ("BCM57302 NetXtreme-C 10Gb/25Gb Ethernet Controller", "BCM57302 NetXtreme-C"), - T_DATA ("BCM57304 NetXtreme-C 10Gb/25Gb/40Gb/50Gb Ethernet Controller", "BCM57304 NetXtreme-C"), - T_DATA ("BCM57311 NetXtreme-C 10Gb RDMA Ethernet Controller", "BCM57311 NetXtreme-C"), - T_DATA ("BCM57312 NetXtreme-C 10Gb/25Gb RDMA Ethernet Controller", "BCM57312 NetXtreme-C"), - T_DATA ("BCM57314 NetXtreme-C 10Gb/25Gb/40Gb/50Gb RDMA Ethernet Controller", "BCM57314 NetXtreme-C"), - T_DATA ("BCM57402 NetXtreme-E 10Gb Ethernet Controller", "BCM57402 NetXtreme-E"), - T_DATA ("BCM57402 NetXtreme-E Ethernet Partition", "BCM57402 NetXtreme-E Partition"), - T_DATA ("BCM57404 NetXtreme-E 10Gb/25Gb Ethernet Controller", "BCM57404 NetXtreme-E"), - T_DATA ("BCM57404 NetXtreme-E Ethernet Partition", "BCM57404 NetXtreme-E Partition"), - T_DATA ("BCM57406 NetXtreme-E 10GBASE-T Ethernet Controller", "BCM57406 NetXtreme-E"), - T_DATA ("BCM57406 NetXtreme-E Ethernet Partition", "BCM57406 NetXtreme-E Partition"), - T_DATA ("BCM57407 NetXtreme-E 10GBase-T Ethernet Controller", "BCM57407 NetXtreme-E"), - T_DATA ("BCM57407 NetXtreme-E 25Gb Ethernet Controller", "BCM57407 NetXtreme-E"), - T_DATA ("BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller", "BCM57412 NetXtreme-E"), - T_DATA ("BCM57412 NetXtreme-E Ethernet Partition", "BCM57412 NetXtreme-E Partition"), - T_DATA ("BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller", "BCM57414 NetXtreme-E"), - T_DATA ("BCM57414 NetXtreme-E Ethernet Partition", "BCM57414 NetXtreme-E Partition"), - T_DATA ("BCM57414 NetXtreme-E RDMA Partition", "BCM57414 NetXtreme-E Partition"), - T_DATA ("BCM57416 NetXtreme-E 10GBase-T RDMA Ethernet Controller", "BCM57416 NetXtreme-E"), - T_DATA ("BCM57416 NetXtreme-E 10Gb RDMA Ethernet Controller", "BCM57416 NetXtreme-E"), - T_DATA ("BCM57416 NetXtreme-E Ethernet Partition", "BCM57416 NetXtreme-E Partition"), - T_DATA ("BCM57416 NetXtreme-E RDMA Partition", "BCM57416 NetXtreme-E Partition"), - T_DATA ("BCM57417 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller", "BCM57417 NetXtreme-E"), - T_DATA ("BCM57417 NetXtreme-E 10GBASE-T RDMA Ethernet Controller", "BCM57417 NetXtreme-E"), - T_DATA ("BCM57417 NetXtreme-E Ethernet Partition", "BCM57417 NetXtreme-E Partition"), - T_DATA ("BCM57840 NetXtreme II 10/20-Gigabit Ethernet", "BCM57840 NetXtreme II"), - T_DATA ("BCM57840 NetXtreme II 10 Gigabit Ethernet", "BCM57840 NetXtreme II"), - T_DATA ("BCM57840 NetXtreme II Ethernet Multi Function", "BCM57840 NetXtreme II"), - T_DATA ("Belkin F5D5005 Gigabit Desktop Network PCI Card", "Belkin F5D5005"), - T_DATA ("ben-wpan, AT86RF230-based", "ben-wpan AT86RF230-based"), - T_DATA ("BladeCenter-H 10-Gigabit Ethernet High Speed Daughter Card", "BladeCenter-H High Speed Daughter"), - T_DATA ("BladeEngine2 10Gb Gen2 PCIe Network Adapter", "BladeEngine2 Gen2"), - T_DATA ("BladeEngine3 10Gb Gen2 PCIe Network Adapter", "BladeEngine3 Gen2"), - T_DATA ("BLOB boot loader firmware", "BLOB boot loader firmware"), - T_DATA ("Broadcom NetXtreme BCM5701 Gigabit Ethernet", "Broadcom NetXtreme BCM5701"), - T_DATA ("BWIFI-USB54AR 802.11bg", "BWIFI-USB54AR"), - T_DATA ("Cardbus Ethernet 10/100", NULL), - T_DATA ("Cassini 10/100/1000", "Cassini"), - T_DATA ("CE Media Processor Gigabit Ethernet Controller", NULL), - T_DATA ("Centrino Advanced-N 6200", "Centrino Advanced-N 6200"), - T_DATA ("Centrino Advanced-N 6205 [Taylor Peak]", "Centrino Advanced-N 6205"), - T_DATA ("Centrino Advanced-N 6230 [Rainbow Peak]", "Centrino Advanced-N 6230"), - T_DATA ("Centrino Advanced-N 6235", "Centrino Advanced-N 6235"), - T_DATA ("Centrino Advanced-N + WiMAX 6250 [Kilmer Peak]", "Centrino Advanced-N 6250"), - T_DATA ("Centrino Ultimate-N 6300", "Centrino Ultimate-N 6300"), - T_DATA ("Centrino Wireless-N 1000 [Condor Peak]", "Centrino 1000"), - T_DATA ("Centrino Wireless-N 100", "Centrino 100"), - T_DATA ("Centrino Wireless-N 1030 [Rainbow Peak]", "Centrino 1030"), - T_DATA ("Centrino Wireless-N 105", "Centrino 105"), - T_DATA ("Centrino Wireless-N 130", "Centrino 130"), - T_DATA ("Centrino Wireless-N 135", "Centrino 135"), - T_DATA ("Centrino Wireless-N 2200", "Centrino 2200"), - T_DATA ("Centrino Wireless-N 2230", "Centrino 2230"), - T_DATA ("Centrino Wireless-N + WiMAX 6150", "Centrino 6150"), - T_DATA ("CG-WLUSB10 Corega Wireless USB Adapter", "CG-WLUSB10 Corega"), - T_DATA ("CG-WLUSB2GNL", "CG-WLUSB2GNL"), - T_DATA ("CG-WLUSB2GNR Corega Wireless USB Adapter", "CG-WLUSB2GNR Corega"), - T_DATA ("CG-WLUSB2GO", "CG-WLUSB2GO"), - T_DATA ("CG-WLUSB2GPX [Ralink RT2571W]", "CG-WLUSB2GPX"), - T_DATA ("CG-WLUSB2GT 802.11g Wireless Adapter [Intersil ISL3880]", "CG-WLUSB2GT"), - T_DATA ("CG-WLUSB2GTST 802.11g Wireless Adapter [Intersil ISL3887]", "CG-WLUSB2GTST"), - T_DATA ("CG-WLUSB300AGN", "CG-WLUSB300AGN"), - T_DATA ("CG-WLUSB300GNM", "CG-WLUSB300GNM"), - T_DATA ("CG-WLUSB300GNS", "CG-WLUSB300GNS"), - T_DATA ("CK804 Ethernet Controller", "CK804"), - T_DATA ("CK8S Ethernet Controller", "CK8S"), - T_DATA ("cLOM8214 1/10GbE Controller", "cLOM8214"), - T_DATA ("CMOTECH CDMA Technologies modem", "CMOTECH"), - T_DATA ("Cohiba 802.11g Wireless Mini adapter [Intersil ISL3887]", "Cohiba"), - T_DATA ("Conceptronic C300RU v1 802.11bgn Wireless Adapter [Ralink RT2870]", "Conceptronic C300RU"), - T_DATA ("Conceptronic C300RU v2 802.11bgn Wireless Adapter [Ralink RT2770]", "Conceptronic C300RU"), - T_DATA ("Conceptronic C54RU v2 802.11bg Wireless Adapter [Ralink RT2571]", "Conceptronic C54RU"), - T_DATA ("Conceptronic C54RU v3 802.11bg Wireless Adapter [Ralink RT2571W]", "Conceptronic C54RU"), - T_DATA ("Connect2Air E-5400 802.11g Wireless Adapter", "Connect2Air E-5400"), - T_DATA ("Connect2Air E-5400 D1700 802.11g Wireless Adapter [Intersil ISL3887]", "Connect2Air E-5400 D1700"), - T_DATA ("CPWUE001 USB/Ethernet Adapter", "CPWUE001"), - T_DATA ("CWD-854 rev F", "CWD-854"), - T_DATA ("CWD-854 [RT2573]", "CWD-854"), - T_DATA ("CWD-854 Wireless 802.11g 54Mbps Network Adapter [RTL8187]", "CWD-854"), - T_DATA ("DECchip 21040 [Tulip]", "DECchip 21040"), - T_DATA ("DECchip 21041 [Tulip Pass 3]", "DECchip 21041"), - T_DATA ("DECchip 21140 [FasterNet]", "DECchip 21140"), - T_DATA ("DECchip 21142/43", "DECchip 21142/43"), - T_DATA ("DFE-680TXD CardBus PC Card", "DFE-680TXD"), - T_DATA ("DFE-690TXD CardBus PC Card", "DFE-690TXD"), - T_DATA ("DGE-528T Gigabit Ethernet Adapter", "DGE-528T"), - T_DATA ("DGE-528T Gigabit Ethernet Adapter (DGE-560T PCI Express (x1) Gigabit Ethernet Adapter)", "DGE-528T"), - T_DATA ("DGE-530T Gigabit Ethernet Adapter (rev 11)", "DGE-530T"), - T_DATA ("DGE-530T Gigabit Ethernet Adapter (rev.C1) [Realtek RTL8169]", "DGE-530T"), - T_DATA ("DGE-550SX PCI-X Gigabit Ethernet Adapter", "DGE-550SX"), - T_DATA ("DGE-550T Gigabit Ethernet Adapter V.B1", "DGE-550T V.B1"), - T_DATA ("DGE-560SX PCI Express Gigabit Ethernet Adapter", "DGE-560SX"), - T_DATA ("DGE-560T PCI Express Gigabit Ethernet Adapter", "DGE-560T"), - T_DATA ("DH8900CC Series Gigabit Backplane Network Connection", "DH8900CC Backplane"), - T_DATA ("DH8900CC Series Gigabit Fiber Network Connection", "DH8900CC"), - T_DATA ("DH8900CC Series Gigabit Network Connection", "DH8900CC"), - T_DATA ("DH8900CC Series Gigabit SFP Network Connection", "DH8900CC SFP"), - T_DATA ("Direct Connect", "Direct Connect"), - T_DATA ("DL10050 Sundance Ethernet (DFE-550TX/FX)", "DL10050 Sundance"), - T_DATA ("DL10050 Sundance Ethernet (DFE-580TX)", "DL10050 Sundance"), - T_DATA ("DL10050 Sundance Ethernet", "DL10050 Sundance"), - T_DATA ("DL2000-based Gigabit Ethernet", "DL2000-based"), - T_DATA ("DM9000E Fast Ethernet Adapter", "DM9000E"), - T_DATA ("DM9601 Fast Ethernet Adapter", "DM9601"), - T_DATA ("DP83065 [Saturn] 10/100/1000 Ethernet Controller", "DP83065"), - T_DATA ("DP83815 (MacPhyter) Ethernet Controller (Aculab E1/T1 PMXc cPCI carrier card)", "DP83815"), - T_DATA ("DP83815 (MacPhyter) Ethernet Controller", "DP83815"), - T_DATA ("DP83820 10/100/1000 Ethernet Controller", "DP83820"), - T_DATA ("DrayTek Vigor N61 802.11bgn Wireless Adapter [Ralink RT2870]", "DrayTek Vigor N61"), - T_DATA ("DRP-32TXD Cardbus PC Card", "DRP-32TXD"), - T_DATA ("DSB-650 10Mbps Ethernet [klsi]", "DSB-650"), - T_DATA ("DSB-650C Ethernet [klsi]", "DSB-650C"), - T_DATA ("DSB-650 Ethernet [pegasus]", "DSB-650"), - T_DATA ("DSB-650TX Ethernet [pegasus]", "DSB-650TX"), - T_DATA ("DSB-650TX-PNA Ethernet [pegasus]", "DSB-650TX-PNA"), - T_DATA ("Dual Band Wireless-AC 3165 Plus Bluetooth", "Wireless-AC 3165"), - T_DATA ("DUB-E100 Fast Ethernet Adapter(rev.A) [ASIX AX88172]", "DUB-E100"), - T_DATA ("DUB-E100 Fast Ethernet Adapter(rev.B1) [ASIX AX88772]", "DUB-E100"), - T_DATA ("DUB-E100 Fast Ethernet Adapter(rev.C1) [ASIX AX88772]", "DUB-E100"), - T_DATA ("DU-E100 Ethernet [pegasus]", "DU-E100"), - T_DATA ("DU-E10 Ethernet [klsi]", "DU-E10"), - T_DATA ("DU-E10 Ethernet [pegasus]", "DU-E10"), - T_DATA ("DWA-110 Wireless G Adapter(rev.A1) [Ralink RT2571W]", "DWA-110"), - T_DATA ("DWA-110 Wireless G Adapter(rev.B) [Ralink RT2870]", "DWA-110"), - T_DATA ("DWA-111 802.11bg Wireless Adapter [Ralink RT2571W]", "DWA-111"), - T_DATA ("DWA-121 802.11n Wireless N 150 Pico Adapter [Realtek RTL8188CUS]", "DWA-121 150 Pico"), - T_DATA ("DWA-123 Wireless N 150 Adapter(rev.A1) [Ralink RT3370]", "DWA-123 150"), - T_DATA ("DWA-125 Wireless N 150 Adapter(rev.A1) [Ralink RT3070]", "DWA-125 150"), - T_DATA ("DWA-125 Wireless N 150 Adapter(rev.A2) [Ralink RT3070]", "DWA-125 150"), - T_DATA ("DWA-125 Wireless N 150 Adapter(rev.A3) [Ralink RT5370]", "DWA-125 150"), - T_DATA ("DWA-126 802.11n Wireless Adapter [Atheros AR9271]", "DWA-126"), - T_DATA ("DWA-127 Wireless N 150 High-Gain Adapter(rev.A1) [Ralink RT3070]", "DWA-127 150 High-Gain"), - T_DATA ("DWA-130 802.11n Wireless N Adapter(rev.B) [Ralink RT2870]", "DWA-130"), - T_DATA ("DWA-130 802.11n Wireless N Adapter(rev.D) [Atheros AR9170+AR9102]", "DWA-130"), - T_DATA ("DWA-133 802.11n Wireless N Adapter [Realtek RTL8192CU]", "DWA-133"), - T_DATA ("DWA-135 802.11n Wireless N Adapter(rev.A1) [Realtek RTL8192CU]", "DWA-135"), - T_DATA ("DWA-140 RangeBooster N Adapter(rev.B1) [Ralink RT2870]", "DWA-140 RangeBooster N"), - T_DATA ("DWA-140 RangeBooster N Adapter(rev.B2) [Ralink RT3072]", "DWA-140 RangeBooster N"), - T_DATA ("DWA-140 RangeBooster N Adapter(rev.B3) [Ralink RT2870]", "DWA-140 RangeBooster N"), - T_DATA ("DWA-140 RangeBooster N Adapter(rev.B3) [Ralink RT5372]", "DWA-140 RangeBooster N"), - T_DATA ("DWA-160 802.11abgn Xtreme N Dual Band Adapter(rev.A1) [Atheros AR9170+AR9104]", "DWA-160 Xtreme N"), - T_DATA ("DWA-160 802.11abgn Xtreme N Dual Band Adapter(rev.A2) [Atheros AR9170+AR9104]", "DWA-160 Xtreme N"), - T_DATA ("DWA-160 802.11abgn Xtreme N Dual Band Adapter(rev.B2) [Ralink RT5572]", "DWA-160 Xtreme N"), - T_DATA ("DWA-160 Xtreme N Dual Band USB Adapter(rev.B) [Ralink RT2870]", "DWA-160 Xtreme N"), - T_DATA ("DWL-510 / DWL-610 802.11b [Realtek RTL8180L]", "DWL-510 / DWL-610"), - T_DATA ("DWL-AG122 [Atheros AR5523]", "DWL-AG122"), - T_DATA ("DWL-AG122 (no firmware) [Atheros AR5523]", "DWL-AG122"), - T_DATA ("DWL-AG132 [Atheros AR5523]", "DWL-AG132"), - T_DATA ("DWL-AG132 (no firmware) [Atheros AR5523]", "DWL-AG132"), - T_DATA ("DWL-G120 Spinnaker 802.11g [Intersil ISL3886]", "DWL-G120 Spinnaker"), - T_DATA ("DWL-G132 [Atheros AR5523]", "DWL-G132"), - T_DATA ("DWL-G132 (no firmware) [Atheros AR5523]", "DWL-G132"), - T_DATA ("DY-WL10 802.11abgn Adapter [Broadcom BCM4323]", "DY-WL10"), - T_DATA ("E180v", "E180v"), - T_DATA ("E45 Ethernet [klsi]", "E45"), - T_DATA ("E815", "E815"), - T_DATA ("EA101 10 Mbps 10BASE-T Ethernet [Kawasaki LSI KL5KLUSB101B]", "EA101"), - T_DATA ("EasiDock Ethernet", "EasiDock"), - T_DATA ("EH103 Wireless G Adapter", "EH103"), - T_DATA ("Eminent EM4045 [Broadcom 4320 USB]", "Eminent EM4045"), - T_DATA ("EN-1216 Ethernet Adapter", "EN-1216"), - T_DATA ("EN-1217 Ethernet Adapter", "EN-1217"), - T_DATA ("Enet2 Ethernet [klsi]", "Enet2"), - T_DATA ("Enet Ethernet [klsi]", "Enet"), - T_DATA ("EnGenius 802.11n Wireless USB Adapter", "EnGenius"), - T_DATA ("ENUWI-N3 [802.11n Wireless N150 Adapter]", "ENUWI-N3"), - T_DATA ("EP-1427X-2 Ethernet Adapter [Acer]", "EP-1427X-2"), - T_DATA ("EP-9001-g 802.11g 54M WLAN Adapter", "EP-9001-g"), - T_DATA ("ET-131x PCI-E Ethernet Controller", "ET-131x"), - T_DATA ("ET32P2", "ET32P2"), - T_DATA ("ETG-US2", "ETG-US2"), - T_DATA ("Ethernet 100/10 MBit", NULL), - T_DATA ("Ethernet 10G 2P X520 Adapter", "2P X520"), - T_DATA ("Ethernet Adapter [A1277]", "A1277"), - T_DATA ("Ethernet Adapter", NULL), - T_DATA ("Ethernet adapter [U2L 100P-Y1]", "U2L 100P-Y1"), - T_DATA ("Ethernet Adaptive Virtual Function", "Adaptive Virtual Function"), - T_DATA ("Ethernet Connection (2) I218-LM", NULL), - T_DATA ("Ethernet Connection (2) I218-V", NULL), - T_DATA ("Ethernet Connection (2) I219-LM", NULL), - T_DATA ("Ethernet Connection (2) I219-V", NULL), - T_DATA ("Ethernet Connection (3) I218-LM", NULL), - T_DATA ("Ethernet Connection (3) I218-V", NULL), - T_DATA ("Ethernet Connection (3) I219-LM", NULL), - T_DATA ("Ethernet Connection (4) I219-LM", NULL), - T_DATA ("Ethernet Connection (4) I219-V", NULL), - T_DATA ("Ethernet Connection (5) I219-LM", NULL), - T_DATA ("Ethernet Connection (5) I219-V", NULL), - T_DATA ("Ethernet Connection (6) I219-LM", NULL), - T_DATA ("Ethernet Connection (6) I219-V", NULL), - T_DATA ("Ethernet Connection (7) I219-LM", NULL), - T_DATA ("Ethernet Connection (7) I219-V", NULL), - T_DATA ("Ethernet Connection (8) I219-LM", NULL), - T_DATA ("Ethernet Connection (8) I219-V", NULL), - T_DATA ("Ethernet Connection (9) I219-LM", NULL), - T_DATA ("Ethernet Connection (9) I219-V", NULL), - T_DATA ("Ethernet Connection I217-LM", "I217-LM"), - T_DATA ("Ethernet Connection I217-V", "I217-V"), - T_DATA ("Ethernet Connection I218-LM", "I218-LM"), - T_DATA ("Ethernet Connection I218-V", "I218-V"), - T_DATA ("Ethernet Connection I219-LM", "I219-LM"), - T_DATA ("Ethernet Connection I219-V", "I219-V"), - T_DATA ("Ethernet Connection I354 1.0 GbE Backplane", "I354 Backplane"), - T_DATA ("Ethernet Connection I354 2.5 GbE Backplane", "I354 Backplane"), - T_DATA ("Ethernet Connection I354", "I354"), - T_DATA ("Ethernet Connection X552 1000BASE-T", "X552"), - T_DATA ("Ethernet Connection X552 10 GbE Backplane", "X552 Backplane"), - T_DATA ("Ethernet Connection X552 10 GbE SFP+", "X552 SFP+"), - T_DATA ("Ethernet Connection X552 Backplane", "X552 Backplane"), - T_DATA ("Ethernet Connection X552 Virtual Function", "X552 Virtual Function"), - T_DATA ("Ethernet Connection X552/X557-AT 10GBASE-T", "X552/X557-AT"), - T_DATA ("Ethernet Connection X553 10 GbE SFP+", "X553 SFP+"), - T_DATA ("Ethernet Connection X553 1GbE", "X553"), - T_DATA ("Ethernet Connection X553 Backplane", "X553 Backplane"), - T_DATA ("Ethernet Connection X553/X557-AT 10GBASE-T", "X553/X557-AT"), - T_DATA ("Ethernet Connection X722 for 10GBASE-T", "X722"), - T_DATA ("Ethernet Connection X722 for 10GbE backplane", "X722"), - T_DATA ("Ethernet Connection X722 for 10GbE QSFP+", "X722"), - T_DATA ("Ethernet Connection X722 for 10GbE SFP+", "X722"), - T_DATA ("Ethernet Connection X722 for 1GbE", "X722"), - T_DATA ("Ethernet Controller 10-Gigabit X540-AT2", "X540-AT2"), - T_DATA ("Ethernet Controller 10G X550T", "X550T"), - T_DATA ("Ethernet Controller X540", "X540"), - T_DATA ("Ethernet Controller X710 for 10GBASE-T", "X710"), - T_DATA ("Ethernet Controller X710 for 10GbE backplane", "X710"), - T_DATA ("Ethernet Controller X710 for 10GbE QSFP+", "X710"), - T_DATA ("Ethernet Controller X710 for 10GbE SFP+", "X710"), - T_DATA ("Ethernet Controller X710/X557-AT 10GBASE-T", "X710/X557-AT"), - T_DATA ("Ethernet Controller XL710 for 20GbE backplane", "XL710"), - T_DATA ("Ethernet Controller XL710 for 40GbE backplane", "XL710"), - T_DATA ("Ethernet Controller XL710 for 40GbE QSFP+", "XL710"), - T_DATA ("Ethernet Controller XXV710 for 25GbE backplane", "XXV710"), - T_DATA ("Ethernet Controller XXV710 for 25GbE SFP28", "XXV710"), - T_DATA ("Ethernet Converged Network Adapter X520-Q1", "X520-Q1"), - T_DATA ("Ethernet Express Module X520-P2", "X520-P2"), - T_DATA ("Ethernet HN210E", "HN210E"), - T_DATA ("Ethernet", NULL), - T_DATA ("Ethernet Server Adapter X520-4", "X520-4"), - T_DATA ("Ethernet Switch FM10000 Host Interface", "FM10000"), - T_DATA ("Ethernet Switch FM10000 Host Virtual Interface", "FM10000"), - T_DATA ("Ethernet X520 10GbE Dual Port KX4 Mezz", "X520 KX4 Mezz"), - T_DATA ("Ether USB-T Ethernet [klsi]", "Ether USB-T"), - T_DATA ("ET/TX Ethernet [pegasus]", "ET/TX"), - T_DATA ("ET/TX-S Ethernet [pegasus2]", "ET/TX-S"), - T_DATA ("EUB-3701 EXT 802.11g Wireless Adapter [Ralink RT2571W]", "EUB-3701 EXT"), - T_DATA ("EUB600v1 802.11abgn Wireless Adapter [Ralink RT3572]", "EUB600v1"), - T_DATA ("EUB9706 802.11n Wireless Adapter [Ralink RT3072]", "EUB9706"), - T_DATA ("EUB9801 802.11abgn Wireless Adapter [Ralink RT3572]", "EUB9801"), - T_DATA ("EW-7711UTn nLite Wireless Adapter [Ralink RT2870]", "EW-7711UTn nLite"), - T_DATA ("EW-7717UN 802.11n Wireless Adapter [Ralink RT2870]", "EW-7717UN"), - T_DATA ("EW-7718UN 802.11n Wireless Adapter [Ralink RT2870]", "EW-7718UN"), - T_DATA ("EW-7722UTn 802.11n Wireless Adapter [Ralink RT307x]", "EW-7722UTn"), - T_DATA ("EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]", "EW-7811Un"), - T_DATA ("Expedite E362", "Expedite E362"), - T_DATA ("Express Ethernet", "Express"), - T_DATA ("EZ Connect USB Ethernet", "EZ Connect"), - T_DATA ("F5D5050 100Mbps Ethernet", "F5D5050"), - T_DATA ("F5D5055 Gigabit Network Adapter [AX88xxx]", "F5D5055"), - T_DATA ("F5D6001 Wireless PCI Card [Realtek RTL8180]", "F5D6001"), - T_DATA ("F5D6020 v3000 Wireless PCMCIA Card [Realtek RTL8180]", "F5D6020 v3000"), - T_DATA ("F5D7000 v7000 Wireless G Desktop Card [Realtek RTL8185]", "F5D7000 v7000"), - T_DATA ("F5D7010 v7000 Wireless G Notebook Card [Realtek RTL8185]", "F5D7010 v7000"), - T_DATA ("F5D7050 Wireless G Adapter v1000/v2000 [Intersil ISL3887]", "F5D7050 v1000/v2000"), - T_DATA ("F5D7050 Wireless G Adapter v3000 [Ralink RT2571W]", "F5D7050 v3000"), - T_DATA ("F5D7050 Wireless G Adapter v4000 [Zydas ZD1211B]", "F5D7050 v4000"), - T_DATA ("F5D7050 Wireless G Adapter v5000 [Realtek RTL8187B]", "F5D7050 v5000"), - T_DATA ("F5D7051 802.11g Adapter v1000 [Broadcom 4320 USB]", "F5D7051 v1000"), - T_DATA ("F5D8053 N Wireless Adapter v3000 [Ralink RT2870]", "F5D8053 v3000"), - T_DATA ("F5D8053 N Wireless USB Adapter v1000/v4000 [Ralink RT2870]", "F5D8053 v1000/v4000"), - T_DATA ("F5D8053 N Wireless USB Adapter v3000 [Ralink RT2870]", "F5D8053 v3000"), - T_DATA ("F5D8055 N+ Wireless Adapter v1000 [Ralink RT2870]", "F5D8055 v1000"), - T_DATA ("F5D8055 N+ Wireless Adapter v2000 [Ralink RT3072]", "F5D8055 v2000"), - T_DATA ("F5D9050 Wireless G+ MIMO Network Adapter v3000 [Ralink RT2573]", "F5D9050 MIMO v3000"), - T_DATA ("F5D9050 Wireless G+ MIMO Network Adapter v4000 [Ralink RT2573]", "F5D9050 MIMO v4000"), - T_DATA ("F5U258 Host to Host cable", "F5U258 Host to Host cable"), - T_DATA ("F6D4050 N150 Enhanced Wireless Network Adapter v1000 [Ralink RT3070]", "F6D4050 N150 v1000"), - T_DATA ("F6D4050 N150 Enhanced Wireless Network Adapter v2000 [Ralink RT3070]", "F6D4050 N150 v2000"), - T_DATA ("F7D1101 v2 Basic Wireless Adapter [Ralink RT3370]", "F7D1101"), - T_DATA ("F7D1102 N150/Surf Micro Wireless Adapter v1000 [Realtek RTL8188CUS]", "F7D1102 N150/Surf v1000"), - T_DATA ("F7D2102 802.11n N300 Micro Wireless Adapter v3000 [Realtek RTL8192CU]", "F7D2102 N300 v3000"), - T_DATA ("F9L1004 802.11n Surf N300 XR Wireless Adapter [Realtek RTL8192CU]", "F9L1004 Surf N300 XR"), - T_DATA ("F9L1103 N750 DB 802.11abgn 2x3:3 [Ralink RT3573]", "F9L1103 N750"), - T_DATA ("FA101 Fast Ethernet USB 1.1", "FA101"), - T_DATA ("FA120 Fast Ethernet USB 2.0 [Asix AX88172 / AX8817x]", "FA120"), - T_DATA ("Farallon PN9000SX Gigabit Ethernet", "Farallon PN9000SX"), - T_DATA ("Farallon PN9100-T Gigabit Ethernet", "Farallon PN9100-T"), - T_DATA ("Fast Ethernet", NULL), - T_DATA ("FastLinQ QL41000 Series 10/25/40/50GbE Controller", "FastLinQ QL41000"), - T_DATA ("FastLinQ QL41000 Series Gigabit Ethernet Controller (SR-IOV VF)", "FastLinQ QL41000"), - T_DATA ("FastLinQ QL45000 Series 100GbE Controller", "FastLinQ QL45000"), - T_DATA ("FastLinQ QL45000 Series 25GbE Controller", "FastLinQ QL45000"), - T_DATA ("FastLinQ QL45000 Series 40GbE Controller", "FastLinQ QL45000"), - T_DATA ("FastLinQ QL45000 Series Gigabit Ethernet Controller (SR-IOV VF)", "FastLinQ QL45000"), - T_DATA ("FEther USB2-TX", "FEther USB2-TX"), - T_DATA ("FEther USB-TXC", "FEther USB-TXC"), - T_DATA ("FEther USB-TX Ethernet [pegasus]", "FEther USB-TX"), - T_DATA ("FEther USB-TXS", "FEther USB-TXS"), - T_DATA ("FNW-3602-TX CardBus Fast Ethernet", "FNW-3602-TX"), - T_DATA ("FNW-3603-TX CardBus Fast Ethernet", "FNW-3603-TX"), - T_DATA ("FPC-0106TX misprogrammed [RTL81xx]", "FPC-0106TX"), - T_DATA ("Fritz!WLAN N 2.4 [Atheros AR9001U]", "Fritz!WLAN N 2.4"), - T_DATA ("Fritz!WLAN N [Atheros AR9001U]", "Fritz!WLAN N"), - T_DATA ("Fritz!WLAN N v2 [Atheros AR9271]", "Fritz!WLAN N"), - T_DATA ("FRITZ WLAN N v2 [RT5572/rt2870.bin]", "FRITZ N"), - T_DATA ("G-200 v2 802.11bg", "G-200"), - T_DATA ("G-210H 802.11g Wireless Adapter", "G-210H"), - T_DATA ("G-220 v2 802.11bg", "G-220"), - T_DATA ("G240 802.11bg", "G240"), - T_DATA ("GA620 Gigabit Ethernet", "GA620"), - T_DATA ("GA630 Gigabit Ethernet", "GA630"), - T_DATA ("GEM 10/100/1000 Ethernet [ge]", "GEM"), - T_DATA ("Gigabit Ethernet Adapter", NULL), - T_DATA ("Gigabit Network Adapter", NULL), - T_DATA ("GigaCard Network Adapter", "GigaCard"), - T_DATA ("Gigaset USB Adapter 300", "Gigaset 300"), - T_DATA ("GL620USB-A GeneLink USB-USB Bridge", "GL620USB-A GeneLink USB-USB Bridge"), - T_DATA ("GlobeTrotter Express 7.2 v2", "GlobeTrotter Express 7.2"), - T_DATA ("Globetrotter GI0505 [iCON 505]", "Globetrotter GI0505"), - T_DATA ("Globetrotter HSDPA Modem", "Globetrotter"), - T_DATA ("Globetrotter HSUPA Modem (aka icon 451)", "Globetrotter"), - T_DATA ("Globetrotter HSUPA Modem (aka iCON HSUPA E)", "Globetrotter"), - T_DATA ("Globetrotter HSUPA Modem (icon 411 aka \"Vodafone K3760\")", "Globetrotter"), - T_DATA ("Globetrotter MO40x 3G Modem (GTM 382)", "Globetrotter MO40x"), - T_DATA ("GN-54G", "GN-54G"), - T_DATA ("GN-BR402W", "GN-BR402W"), - T_DATA ("GNIC-II PCI Gigabit Ethernet [Hamachi]", "GNIC-II"), - T_DATA ("GN-WB01GS", "GN-WB01GS"), - T_DATA ("GN-WB30N 802.11n WLAN Card", "GN-WB30N"), - T_DATA ("GN-WB31N 802.11n USB WLAN Card", "GN-WB31N"), - T_DATA ("GN-WB32L 802.11n USB WLAN Card", "GN-WB32L"), - T_DATA ("GN-WBKG", "GN-WBKG"), - T_DATA ("GN-WI05GS", "GN-WI05GS"), - T_DATA ("Gobi 2000", "Gobi 2000"), - T_DATA ("Gobi 2000 Wireless Modem", "Gobi 2000"), - T_DATA ("Gobi 3000 HSPA+ Modem", "Gobi 3000 HSPA+"), - T_DATA ("Gobi 9x15 Multimode 3G/4G LTE Modem (IP passthrough mode)", "Gobi 9x15"), - T_DATA ("Gobi 9x15 Multimode 3G/4G LTE Modem (NAT mode)", "Gobi 9x15"), - T_DATA ("Gobi Wireless Modem", "Gobi"), - T_DATA ("Goldpfeil P-LAN", "Goldpfeil P-LAN"), - T_DATA ("GT-B3730 Composite LTE device (Commercial)", "GT-B3730"), - T_DATA ("GU-1000T", "GU-1000T"), - T_DATA ("GWUS300 802.11n", "GWUS300"), - T_DATA ("GW-US300MiniS", "GW-US300MiniS"), - T_DATA ("GW-US300MiniW 802.11bgn Wireless Adapter", "GW-US300MiniW"), - T_DATA ("GW-US54GXS 802.11bg", "GW-US54GXS"), - T_DATA ("GW-US54GZ", "GW-US54GZ"), - T_DATA ("GW-US54HP", "GW-US54HP"), - T_DATA ("GW-US54Mini2", "GW-US54Mini2"), - T_DATA ("GW-US54Mini 802.11bg", "GW-US54Mini"), - T_DATA ("GW-US54ZGL 802.11bg", "GW-US54ZGL"), - T_DATA ("GWUSB2E", "GWUSB2E"), - T_DATA ("GW-USEco300 802.11bgn Wireless Adapter [Realtek RTL8192CU]", "GW-USEco300"), - T_DATA ("GW-USMicro300", "GW-USMicro300"), - T_DATA ("GW-USMini2N 802.11n Wireless Adapter [Ralink RT2870]", "GW-USMini2N"), - T_DATA ("GW-USNano2 802.11n Wireless Adapter [Realtek RTL8188CUS]", "GW-USNano2"), - T_DATA ("GW-USValue-EZ 802.11n Wireless Adapter [Realtek RTL8188CUS]", "GW-USValue-EZ"), - T_DATA ("Happy Meal 10/100 Ethernet [hme]", "Happy Meal"), - T_DATA ("Harmony 900/1100 Remote", "Harmony 900/1100 Remote"), - T_DATA ("HAWNU1 Hi-Gain Wireless-150N Network Adapter with Range Amplifier [Ralink RT3070]", "HAWNU1"), - T_DATA ("HCF 56k Modem", "HCF"), - T_DATA ("Hercules HWNUp-150 802.11n Wireless N Pico [Realtek RTL8188CUS]", "Hercules HWNUp-150 Pico"), - T_DATA ("HNE-300 (RealTek RTL8139c) [iPaq Networking]", "HNE-300"), - T_DATA ("HomeConnect 3C460", "HomeConnect 3C460"), - T_DATA ("@Home Networks Ethernet [klsi]", "@Home Networks"), - T_DATA ("HU200TS Wireless Adapter", "HU200TS"), - T_DATA ("HWDN1 Hi-Gain Wireless-300N Dish Adapter [Ralink RT2870]", "HWDN1"), - T_DATA ("HWDN2 Hi-Gain Wireless-150N Dish Adapter [Ralink RT2770]", "HWDN2"), - T_DATA ("HWGUSB2-54-LB", "HWGUSB2-54-LB"), - T_DATA ("HWGUSB2-54V2-AP", "HWGUSB2-54V2-AP"), - T_DATA ("HWGUSB2-54 WLAN", "HWGUSB2-54"), - T_DATA ("HWU54DM", "HWU54DM"), - T_DATA ("HWUN1 Hi-Gain Wireless-300N Adapter w/ Upgradable Antenna [Ralink RT2870]", "HWUN1"), - T_DATA ("HWUN2 Hi-Gain Wireless-150N Adapter w/ Upgradable Antenna [Ralink RT2770]", "HWUN2"), - T_DATA ("HWUN3 Hi-Gain Wireless-N Adapter [Ralink RT3070]", "HWUN3"), - T_DATA ("I210 Gigabit Backplane Connection", "I210 Backplane Connection"), - T_DATA ("I210 Gigabit Fiber Network Connection", "I210"), - T_DATA ("I210 Gigabit Network Connection", "I210"), - T_DATA ("I211 Gigabit Network Connection", "I211"), - T_DATA ("I350 Ethernet Controller Virtual Function", "I350 Virtual Function"), - T_DATA ("I350 Gigabit Backplane Connection", "I350 Backplane Connection"), - T_DATA ("I350 Gigabit Connection", "I350 Connection"), - T_DATA ("I350 Gigabit Fiber Network Connection", "I350"), - T_DATA ("I350 Gigabit Network Connection", "I350"), - T_DATA ("IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY", "IC Plus IP100A"), - T_DATA ("IEEE 802.11g Wireless Network Adapter", NULL), - T_DATA ("IFU-WLM2 USB Wireless LAN Module (Wireless Mode)", "IFU-WLM2"), - T_DATA ("Integrated NetFlex-3/P", "NetFlex-3/P"), - T_DATA ("Intrepid2 GMAC (Sun GEM)", "Intrepid2 GMAC"), - T_DATA ("IOGear GWU513 v2 802.11bg Wireless Adapter [Intersil ISL3887]", "IOGear GWU513"), - T_DATA ("IP1000 Family Gigabit Ethernet", "IP1000"), - T_DATA ("iPad 2 (3G; 64GB)", "iPad 2"), - T_DATA ("iPad 3 (3G, 16 GB)", "iPad 3"), - T_DATA ("iPad 4/Mini1", "iPad 4/Mini1"), - T_DATA ("iPad", "iPad"), - T_DATA ("iPAQ Networking 10/100 Ethernet [pegasus2]", "iPAQ Networking"), - T_DATA ("iPhone 3G", "iPhone"), - T_DATA ("iPhone 3GS", "iPhone 3GS"), - T_DATA ("iPhone 4(CDMA)", "iPhone 4"), - T_DATA ("iPhone 4", "iPhone 4"), - T_DATA ("iPhone 4S", "iPhone 4S"), - T_DATA ("iPhone5/5C/5S/6", "iPhone5/5C/5S/6"), - T_DATA ("iPhone", "iPhone"), - T_DATA ("iRex Technologies Gobi 2000 Wireless Modem", "iRex Gobi 2000"), - T_DATA ("ISL3877 [Prism Indigo]", "ISL3877"), - T_DATA ("ISL3886IK", "ISL3886IK"), - T_DATA ("ISL3886 [Prism Javelin/Prism Xbow]", "ISL3886"), - T_DATA ("ISL3890 [Prism GT/Prism Duette]/ISL3886 [Prism Javelin/Prism Xbow]", "ISL3890"), - T_DATA ("ISP4022-based Ethernet NIC", "ISP4022-based"), - T_DATA ("ISP4032-based Ethernet IPv6 NIC", "ISP4032-based IPv6"), - T_DATA ("ISP8324 1/10GbE Converged Network Controller", "ISP8324"), - T_DATA ("ISP8324 1/10GbE Converged Network Controller (NIC VF)", "ISP8324"), - T_DATA ("ISY Wireless Micro Adapter IWL 2000 [RTL8188CUS]", "ISY IWL 2000"), - T_DATA ("JMC250 PCI Express Gigabit Ethernet Controller", "JMC250"), - T_DATA ("JMC260 PCI Express Fast Ethernet Controller", "JMC260"), - T_DATA ("K2 GMAC (Sun GEM)", "K2 GMAC"), - T_DATA ("K3565-Z HSDPA", "K3565-Z"), - T_DATA ("K3570-Z", "K3570-Z"), - T_DATA ("K3571-Z", "K3571-Z"), - T_DATA ("K4505-Z", "K4505-Z"), - T_DATA ("K5006-Z vodafone LTE/UMTS/GSM Modem/Networkcard", "K5006-Z vodafone"), - T_DATA ("KC2190 USB Host-to-Host cable", "KC2190 Host-to-Host cable"), - T_DATA ("Keebox W150NU 802.11bgn Wireless Adapter [Ralink RT3070]", "Keebox W150NU"), - T_DATA ("Killer E220x Gigabit Ethernet Controller", "Killer E220x"), - T_DATA ("Killer E2400 Gigabit Ethernet Controller", "Killer E2400"), - T_DATA ("KL5KUSB101B Ethernet [klsi]", "KL5KUSB101B"), - T_DATA ("KNU101TX 100baseTX Ethernet", "KNU101TX 100baseTX"), - T_DATA ("KSZ8842-PMQL 2-Port Ethernet Switch", "KSZ8842-PMQL"), - T_DATA ("KwikLink Host-Host Connector", "KwikLink Host-Host Connector"), - T_DATA ("LAN7500 Ethernet 10/100/1000 Adapter", "LAN7500"), - T_DATA ("LAN9420/LAN9420i", "LAN9420/LAN9420i"), - T_DATA ("LAN9512/LAN9514 Ethernet 10/100 Adapter (SAL10)", "LAN9512/LAN9514"), - T_DATA ("Laneed 100Mbps Ethernet LD-USB/TX [pegasus]", "Laneed LD-USB/TX"), - T_DATA ("LAN-GTJ/U2A", "LAN-GTJ/U2A"), - T_DATA ("LAN-W150N/U2 Wireless LAN Adapter", "LAN-W150N/U2"), - T_DATA ("LAN-W150/U2M Wireless LAN Adapter", "LAN-W150/U2M"), - T_DATA ("LAN-W300AN/U2 Wireless LAN Adapter", "LAN-W300AN/U2"), - T_DATA ("LAN-W300N/U2 Wireless LAN Adapter", "LAN-W300N/U2"), - T_DATA ("LAN-WN12/U2 Wireless LAN Adapter", "LAN-WN12/U2"), - T_DATA ("LAN-WN22/U2 Wireless LAN Adapter", "LAN-WN22/U2"), - T_DATA ("LapLink Gold USB-USB Bridge [net1080]", "LapLink Gold USB-USB Bridge"), - T_DATA ("LD-USB20", "LD-USB20"), - T_DATA ("LD-USBL/TX", "LD-USBL/TX"), - T_DATA ("LD-USB/TX", "LD-USB/TX"), - T_DATA ("LE920", "LE920"), - T_DATA ("Leaf Light HS", "Leaf Light HS"), - T_DATA ("Leaf SemiPro HS", "Leaf SemiPro HS"), - T_DATA ("LevelOne WUA-0605 N_Max Wireless USB Adapter", "LevelOne WUA-0605 N Max"), - T_DATA ("LevelOne WUA-0615 N_Max Wireless USB Adapter", "LevelOne WUA-0615 N Max"), - T_DATA ("Libertas", "Libertas"), - T_DATA ("Linksys WUSB54GP v1 OEM 802.11g Adapter [Intersil ISL3886]", "Linksys WUSB54GP"), - T_DATA ("Linksys WUSB54G v1 OEM 802.11g Adapter [Intersil ISL3886]", "Linksys WUSB54G"), - T_DATA ("Linux-USB \"CDC Subset\" Device, or Itsy (experimental)", "Linux-USB or Itsy"), - T_DATA ("Linux-USB Ethernet/RNDIS Gadget", "Linux-USB Gadget"), - T_DATA ("LN-028 Network USB 2.0 Adapter", "LN-028"), - T_DATA ("LN-031 10/100/1000 Ethernet Adapter", "LN-031"), - T_DATA ("LNE100TX [Linksys EtherFast 10/100]", "LNE100TX"), - T_DATA ("LNE100TX", "LNE100TX"), - T_DATA ("lt4112 Gobi 4G Module Network Device", "lt4112 Gobi"), - T_DATA ("LTE4G O2 ZTE MF821D LTE/UMTS/GSM Modem/Networkcard", "LTE4G O2 ZTE MF821D"), - T_DATA ("LTE Storage Driver [CMC2xx]", "Storage Driver"), - T_DATA ("LUA2-TX Ethernet", "LUA2-TX"), - T_DATA ("LUA-KTX Ethernet", "LUA-KTX"), - T_DATA ("LUA-TX Ethernet", "LUA-TX"), - T_DATA ("LUA-TX Ethernet [pegasus]", "LUA-TX"), - T_DATA ("LUA-U2-GT 10/100/1000 Ethernet Adapter", "LUA-U2-GT"), - T_DATA ("LUA-U2-KTX Ethernet", "LUA-U2-KTX"), - T_DATA ("LW153 802.11n Adapter [ralink rt3070]", "LW153"), - T_DATA ("LW313 802.11n Adapter [ralink rt2770 + rt2720]", "LW313"), - T_DATA ("M-202 802.11bg", "M-202"), - T_DATA ("M5261 Ethernet Controller", "M5261"), - T_DATA ("M5632 Host-to-Host Link", "M5632 Host-to-Host Link"), - T_DATA ("Marvell 88W8388 802.11a/b/g WLAN", "Marvell 88W8388"), - T_DATA ("MC8700 Modem", "MC8700"), - T_DATA ("MCP04 Ethernet Controller", "MCP04"), - T_DATA ("MCP2A Ethernet Controller", "MCP2A"), - T_DATA ("MCP51 Ethernet Controller", "MCP51"), - T_DATA ("MCP55 Ethernet", "MCP55"), - T_DATA ("MCP61 Ethernet", "MCP61"), - T_DATA ("MCP65 Ethernet", "MCP65"), - T_DATA ("MCP67 Ethernet", "MCP67"), - T_DATA ("MCP73 Ethernet", "MCP73"), - T_DATA ("MCP77 Ethernet", "MCP77"), - T_DATA ("MCP79 Ethernet", "MCP79"), - T_DATA ("MCP89 Ethernet", "MCP89"), - T_DATA ("MCS7730 10/100 Mbps Ethernet adapter", "MCS7730"), - T_DATA ("MCS7830 10/100 Mbps Ethernet adapter", "MCS7830"), - T_DATA ("MCS7832 10/100 Mbps Ethernet adapter", "MCS7832"), - T_DATA ("Metronic 495257 wifi 802.11ng", "Metronic 495257"), - T_DATA ("MF110/MF627/MF636", "MF110/MF627/MF636"), - T_DATA ("MF632/ONDA ET502HS/MT505UP", "MF632/ONDA ET502HS/MT505UP"), - T_DATA ("MF820 4G LTE", "MF820"), - T_DATA ("Micolink USB2Ethernet [pegasus]", "Micolink USB2Ethernet"), - T_DATA ("MicroLink dLAN", "MicroLink dLAN"), - T_DATA ("MN-120 (ADMtek Centaur-C based)", "MN-120"), - T_DATA ("MN-130 (ADMtek Centaur-P based)", "MN-130"), - T_DATA ("MN-710 802.11g Wireless Adapter [Intersil ISL3886]", "MN-710"), - T_DATA ("model 01 Ethernet interface", "model 01"), - T_DATA ("model 01+ Ethernet", "model 01+"), - T_DATA ("Motorola 802.11n 5G USB Wireless Adapter", "Motorola"), - T_DATA ("Motorola 802.11n Dualband USB Wireless Adapter", "Motorola Dualband"), - T_DATA ("MP-PRX1 Ethernet", "MP-PRX1"), - T_DATA ("MS-3870 802.11bgn Wireless Module [Ralink RT3070]", "MS-3870"), - T_DATA ("MS-3871 802.11bgn Wireless Module [Ralink RT8070]", "MS-3871"), - T_DATA ("MSI-6861 802.11g WiFi adapter", "MSI-6861"), - T_DATA ("MT25400 Family [ConnectX-2 Virtual Function]", "MT25400"), - T_DATA ("MT25408 [ConnectX EN 10GigE 10GBaseT, PCIe 2.0 2.5GT/s]", "MT25408"), - T_DATA ("MT25408 [ConnectX EN 10GigE 10GBaseT, PCIe Gen2 5GT/s]", "MT25408"), - T_DATA ("MT25408 [ConnectX VPI - IB SDR / 10GigE]", "MT25408"), - T_DATA ("MT25418 [ConnectX VPI PCIe 2.0 2.5GT/s - IB DDR / 10GigE]", "MT25418"), - T_DATA ("MT25448 [ConnectX EN 10GigE, PCIe 2.0 2.5GT/s]", "MT25448"), - T_DATA ("MT26418 [ConnectX VPI PCIe 2.0 5GT/s - IB DDR / 10GigE]", "MT26418"), - T_DATA ("MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE]", "MT26428"), - T_DATA ("MT26438 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE Virtualization+]", "MT26438"), - T_DATA ("MT26448 [ConnectX EN 10GigE, PCIe 2.0 5GT/s]", "MT26448"), - T_DATA ("MT26468 [ConnectX EN 10GigE, PCIe 2.0 5GT/s Virtualization+]", "MT26468"), - T_DATA ("MT26478 [ConnectX EN 40GigE, PCIe 2.0 5GT/s]", "MT26478"), - T_DATA ("MT27500 Family [ConnectX-3]", "MT27500"), - T_DATA ("MT27500/MT27520 Family [ConnectX-3/ConnectX-3 Pro Virtual Function]", "MT27500/MT27520"), - T_DATA ("MT27510 Family", "MT27510"), - T_DATA ("MT27511 Family", "MT27511"), - T_DATA ("MT27520 Family [ConnectX-3 Pro]", "MT27520"), - T_DATA ("MT27530 Family", "MT27530"), - T_DATA ("MT27531 Family", "MT27531"), - T_DATA ("MT27540 Family", "MT27540"), - T_DATA ("MT27541 Family", "MT27541"), - T_DATA ("MT27550 Family", "MT27550"), - T_DATA ("MT27551 Family", "MT27551"), - T_DATA ("MT27560 Family", "MT27560"), - T_DATA ("MT27561 Family", "MT27561"), - T_DATA ("MT27600 [Connect-IB]", "MT27600"), - T_DATA ("MT27600 Family [Connect-IB Virtual Function]", "MT27600"), - T_DATA ("MT27700 Family [ConnectX-4]", "MT27700"), - T_DATA ("MT27700 Family [ConnectX-4 Virtual Function]", "MT27700"), - T_DATA ("MT27710 Family [ConnectX-4 Lx]", "MT27710"), - T_DATA ("MT27710 Family [ConnectX-4 Lx Virtual Function]", "MT27710"), - T_DATA ("MT27800 Family [ConnectX-5]", "MT27800"), - T_DATA ("MT27800 Family [ConnectX-5 Virtual Function]", "MT27800"), - T_DATA ("MT28800 Family [ConnectX-5 Ex]", "MT28800"), - T_DATA ("MT28800 Family [ConnectX-5 Ex Virtual Function]", "MT28800"), - T_DATA ("MT28908 Family [ConnectX-6]", "MT28908"), - T_DATA ("MT28908 Family [ConnectX-6 Virtual Function]", "MT28908"), - T_DATA ("MT416842 BlueField integrated ConnectX-5 network controller", "MT416842 BlueField ConnectX-5"), - T_DATA ("MT416842 BlueField multicore SoC family VF", "MT416842 BlueField VF"), - T_DATA ("MT51136", "MT51136"), - T_DATA ("MT52100", "MT52100"), - T_DATA ("MT53236", "MT53236"), - T_DATA ("MT7601U Wireless Adapter", "MT7601U"), - T_DATA ("MTD-8xx 100/10M Ethernet PCI Adapter", "MTD-8xx"), - T_DATA ("Multithreaded 10-Gigabit Ethernet Network Controller", NULL), - T_DATA ("MX98713", "MX98713"), - T_DATA ("MX987x5", "MX987x5"), - T_DATA ("Myri-10G Dual-Protocol NIC", "Myri-10G"), - T_DATA ("N10 Nano 802.11n Network Adapter [Realtek RTL8192CU]", "N10 Nano"), - T_DATA ("N220 802.11bgn Wireless Adapter", "N220"), - T_DATA ("N320-G2-CR 10GbE Dual Port Adapter", "N320-G2-CR"), - T_DATA ("N5HBZ0000055 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]", "N5HBZ0000055"), - T_DATA ("Name: Voyager 1055 Laptop 802.11g Adapter [Broadcom 4320]", "Voyager 1055"), - T_DATA ("NC100 Network Everywhere Fast Ethernet 10/100", "NC100"), - T_DATA ("NE-34", "NE-34"), - T_DATA ("NET1080 USB-USB Bridge", "NET1080 USB-USB Bridge"), - T_DATA ("Netelligent 10/100 TX Embedded UTP", "Netelligent TX"), - T_DATA ("Netelligent 10/100 TX PCI UTP", "Netelligent TX"), - T_DATA ("Netelligent 10/100 TX UTP", "Netelligent TX"), - T_DATA ("Netelligent 10 T/2 PCI UTP/Coax", "Netelligent 10 T/2"), - T_DATA ("Netelligent 10 T PCI UTP", "Netelligent 10 T"), - T_DATA ("Netelligent Dual 10/100 TX PCI UTP", "Netelligent Dual TX"), - T_DATA ("Netelligent Integrated 10/100 TX UTP", "Netelligent TX"), - T_DATA ("NetFlex-3/P ThunderLAN 1.0", "NetFlex-3/P ThunderLAN 1.0"), - T_DATA ("NetFlex-3/P ThunderLAN 2.3", "NetFlex-3/P ThunderLAN 2.3"), - T_DATA ("NetLink BCM57780 Gigabit Ethernet PCIe", "NetLink BCM57780"), - T_DATA ("NetLink BCM57781 Gigabit Ethernet PCIe", "NetLink BCM57781"), - T_DATA ("NetLink BCM57785 Gigabit Ethernet PCIe", "NetLink BCM57785"), - T_DATA ("NetLink BCM57788 Gigabit Ethernet PCIe", "NetLink BCM57788"), - T_DATA ("NetLink BCM57790 Gigabit Ethernet PCIe", "NetLink BCM57790"), - T_DATA ("NetLink BCM57791 Gigabit Ethernet PCIe", "NetLink BCM57791"), - T_DATA ("NetLink BCM57795 Gigabit Ethernet PCIe", "NetLink BCM57795"), - T_DATA ("NetLink BCM5781 Gigabit Ethernet PCI Express", "NetLink BCM5781"), - T_DATA ("NetLink BCM5784M Gigabit Ethernet PCIe", "NetLink BCM5784M"), - T_DATA ("NetLink BCM5785 Fast Ethernet", "NetLink BCM5785"), - T_DATA ("NetLink BCM5785 Gigabit Ethernet", "NetLink BCM5785"), - T_DATA ("NetLink BCM5786 Gigabit Ethernet PCI Express", "NetLink BCM5786"), - T_DATA ("NetLink BCM5787F Fast Ethernet PCI Express", "NetLink BCM5787F"), - T_DATA ("NetLink BCM5787 Gigabit Ethernet PCI Express", "NetLink BCM5787"), - T_DATA ("NetLink BCM5787M Gigabit Ethernet PCI Express", "NetLink BCM5787M"), - T_DATA ("NetLink BCM5789 Gigabit Ethernet PCI Express", "NetLink BCM5789"), - T_DATA ("NetLink BCM5906 Fast Ethernet PCI Express", "NetLink BCM5906"), - T_DATA ("NetLink BCM5906M Fast Ethernet PCI Express", "NetLink BCM5906M"), - T_DATA ("NetMate2 Ethernet", "NetMate2"), - T_DATA ("NetMate Ethernet", "NetMate"), - T_DATA ("NetXen Dual Port 10GbE Multifunction Adapter for c-Class", "NetXen Multifunction for c-Class"), - T_DATA ("NetXtreme 5714S Gigabit Ethernet", "NetXtreme 5714S"), - T_DATA ("NetXtreme BCM5700 Gigabit Ethernet", "NetXtreme BCM5700"), - T_DATA ("NetXtreme BCM5701 Gigabit Ethernet", "NetXtreme BCM5701"), - T_DATA ("NetXtreme BCM5702A3 Gigabit Ethernet", "NetXtreme BCM5702A3"), - T_DATA ("NetXtreme BCM5702FE Gigabit Ethernet", "NetXtreme BCM5702FE"), - T_DATA ("NetXtreme BCM5702 Gigabit Ethernet", "NetXtreme BCM5702"), - T_DATA ("NetXtreme BCM5702X Gigabit Ethernet", "NetXtreme BCM5702X"), - T_DATA ("NetXtreme BCM5703 Gigabit Ethernet", "NetXtreme BCM5703"), - T_DATA ("NetXtreme BCM5703X Gigabit Ethernet", "NetXtreme BCM5703X"), - T_DATA ("NetXtreme BCM5704 Gigabit Ethernet", "NetXtreme BCM5704"), - T_DATA ("NetXtreme BCM5704S_2 Gigabit Ethernet", "NetXtreme BCM5704S 2"), - T_DATA ("NetXtreme BCM5704S Gigabit Ethernet", "NetXtreme BCM5704S"), - T_DATA ("NetXtreme BCM5705_2 Gigabit Ethernet", "NetXtreme BCM5705 2"), - T_DATA ("NetXtreme BCM5705 Gigabit Ethernet", "NetXtreme BCM5705"), - T_DATA ("NetXtreme BCM5705M_2 Gigabit Ethernet", "NetXtreme BCM5705M 2"), - T_DATA ("NetXtreme BCM5705M Gigabit Ethernet", "NetXtreme BCM5705M"), - T_DATA ("NetXtreme BCM5714 Gigabit Ethernet", "NetXtreme BCM5714"), - T_DATA ("NetXtreme BCM5715 Gigabit Ethernet", "NetXtreme BCM5715"), - T_DATA ("NetXtreme BCM5715S Gigabit Ethernet", "NetXtreme BCM5715S"), - T_DATA ("NetXtreme BCM5717 Gigabit Ethernet PCIe", "NetXtreme BCM5717"), - T_DATA ("NetXtreme BCM5718 Gigabit Ethernet PCIe", "NetXtreme BCM5718"), - T_DATA ("NetXtreme BCM5719 Gigabit Ethernet PCIe", "NetXtreme BCM5719"), - T_DATA ("NetXtreme BCM5720 Gigabit Ethernet PCIe", "NetXtreme BCM5720"), - T_DATA ("NetXtreme BCM5721 Gigabit Ethernet PCI Express", "NetXtreme BCM5721"), - T_DATA ("NetXtreme BCM5722 Gigabit Ethernet PCI Express", "NetXtreme BCM5722"), - T_DATA ("NetXtreme BCM5723 Gigabit Ethernet PCIe", "NetXtreme BCM5723"), - T_DATA ("NetXtreme BCM5725 Gigabit Ethernet PCIe", "NetXtreme BCM5725"), - T_DATA ("NetXtreme BCM5727 Gigabit Ethernet PCIe", "NetXtreme BCM5727"), - T_DATA ("NetXtreme BCM5751F Fast Ethernet PCI Express", "NetXtreme BCM5751F"), - T_DATA ("NetXtreme BCM5751 Gigabit Ethernet PCI Express", "NetXtreme BCM5751"), - T_DATA ("NetXtreme BCM5751M Gigabit Ethernet PCI Express", "NetXtreme BCM5751M"), - T_DATA ("NetXtreme BCM5752 Gigabit Ethernet PCI Express", "NetXtreme BCM5752"), - T_DATA ("NetXtreme BCM5752M Gigabit Ethernet PCI Express", "NetXtreme BCM5752M"), - T_DATA ("NetXtreme BCM5753F Fast Ethernet PCI Express", "NetXtreme BCM5753F"), - T_DATA ("NetXtreme BCM5753 Gigabit Ethernet PCI Express", "NetXtreme BCM5753"), - T_DATA ("NetXtreme BCM5753M Gigabit Ethernet PCI Express", "NetXtreme BCM5753M"), - T_DATA ("NetXtreme BCM5754 Gigabit Ethernet PCI Express", "NetXtreme BCM5754"), - T_DATA ("NetXtreme BCM5754M Gigabit Ethernet PCI Express", "NetXtreme BCM5754M"), - T_DATA ("NetXtreme BCM5755 Gigabit Ethernet PCI Express", "NetXtreme BCM5755"), - T_DATA ("NetXtreme BCM5755M Gigabit Ethernet PCI Express", "NetXtreme BCM5755M"), - T_DATA ("NetXtreme BCM5756ME Gigabit Ethernet PCI Express", "NetXtreme BCM5756ME"), - T_DATA ("NetXtreme BCM5761 10/100/1000BASE-T Ethernet", "NetXtreme BCM5761"), - T_DATA ("NetXtreme BCM5761e Gigabit Ethernet PCIe", "NetXtreme BCM5761e"), - T_DATA ("NetXtreme BCM5761 Gigabit Ethernet PCIe", "NetXtreme BCM5761"), - T_DATA ("NetXtreme BCM5762 Gigabit Ethernet PCIe", "NetXtreme BCM5762"), - T_DATA ("NetXtreme BCM5764M Gigabit Ethernet PCIe", "NetXtreme BCM5764M"), - T_DATA ("NetXtreme BCM57760 Gigabit Ethernet PCIe", "NetXtreme BCM57760"), - T_DATA ("NetXtreme BCM57761 Gigabit Ethernet PCIe", "NetXtreme BCM57761"), - T_DATA ("NetXtreme BCM57762 Gigabit Ethernet PCIe", "NetXtreme BCM57762"), - T_DATA ("NetXtreme BCM57764 Gigabit Ethernet PCIe", "NetXtreme BCM57764"), - T_DATA ("NetXtreme BCM57765 Gigabit Ethernet PCIe", "NetXtreme BCM57765"), - T_DATA ("NetXtreme BCM57766 Gigabit Ethernet PCIe", "NetXtreme BCM57766"), - T_DATA ("NetXtreme BCM57767 Gigabit Ethernet PCIe", "NetXtreme BCM57767"), - T_DATA ("NetXtreme BCM57782 Gigabit Ethernet PCIe", "NetXtreme BCM57782"), - T_DATA ("NetXtreme BCM57786 Gigabit Ethernet PCIe", "NetXtreme BCM57786"), - T_DATA ("NetXtreme BCM57787 Gigabit Ethernet PCIe", "NetXtreme BCM57787"), - T_DATA ("NetXtreme BCM5780 Gigabit Ethernet", "NetXtreme BCM5780"), - T_DATA ("NetXtreme BCM5780S Gigabit Ethernet", "NetXtreme BCM5780S"), - T_DATA ("NetXtreme BCM5782 Gigabit Ethernet", "NetXtreme BCM5782"), - T_DATA ("NetXtreme BCM5788 Gigabit Ethernet", "NetXtreme BCM5788"), - T_DATA ("NetXtreme BCM5901 100Base-TX", "NetXtreme BCM5901"), - T_DATA ("NetXtreme-C Ethernet Virtual Function", "NetXtreme-C Virtual Function"), - T_DATA ("NetXtreme-C RDMA Virtual Function", "NetXtreme-C Virtual Function"), - T_DATA ("NetXtreme-E Ethernet Virtual Function", "NetXtreme-E Virtual Function"), - T_DATA ("NetXtreme-E RDMA Virtual Function", "NetXtreme-E Virtual Function"), - T_DATA ("NetXtreme II BCM5706 Gigabit Ethernet (NC370i Multifunction Gigabit Server Adapter)", "NetXtreme II BCM5706"), - T_DATA ("NetXtreme II BCM5706 Gigabit Ethernet (NC370T MultifuNCtion Gigabit Server Adapter)", "NetXtreme II BCM5706"), - T_DATA ("NetXtreme II BCM5706 Gigabit Ethernet", "NetXtreme II BCM5706"), - T_DATA ("NetXtreme II BCM5706S Gigabit Ethernet (NC370F MultifuNCtion Gigabit Server Adapter)", "NetXtreme II BCM5706S"), - T_DATA ("NetXtreme II BCM5706S Gigabit Ethernet", "NetXtreme II BCM5706S"), - T_DATA ("NetXtreme II BCM5708 Gigabit Ethernet", "NetXtreme II BCM5708"), - T_DATA ("NetXtreme II BCM5708S Gigabit Ethernet", "NetXtreme II BCM5708S"), - T_DATA ("NetXtreme II BCM5709 Gigabit Ethernet", "NetXtreme II BCM5709"), - T_DATA ("NetXtreme II BCM5709S Gigabit Ethernet", "NetXtreme II BCM5709S"), - T_DATA ("NetXtreme II BCM5716 Gigabit Ethernet", "NetXtreme II BCM5716"), - T_DATA ("NetXtreme II BCM5716S Gigabit Ethernet", "NetXtreme II BCM5716S"), - T_DATA ("NetXtreme II BCM57710 10-Gigabit PCIe [Everest]", "NetXtreme II BCM57710"), - T_DATA ("NetXtreme II BCM57711 10-Gigabit PCIe", "NetXtreme II BCM57711"), - T_DATA ("NetXtreme II BCM57711E 10-Gigabit PCIe", "NetXtreme II BCM57711E"), - T_DATA ("NetXtreme II BCM57712 10 Gigabit Ethernet Multi Function", "NetXtreme II BCM57712"), - T_DATA ("NetXtreme II BCM57712 10 Gigabit Ethernet", "NetXtreme II BCM57712"), - T_DATA ("NetXtreme II BCM57712 10 Gigabit Ethernet Virtual Function", "NetXtreme II BCM57712 Virtual Function"), - T_DATA ("NetXtreme II BCM57800 1/10 Gigabit Ethernet Multi Function", "NetXtreme II BCM57800"), - T_DATA ("NetXtreme II BCM57800 1/10 Gigabit Ethernet", "NetXtreme II BCM57800"), - T_DATA ("NetXtreme II BCM57800 1/10 Gigabit Ethernet Virtual Function", "NetXtreme II BCM57800 Virtual Function"), - T_DATA ("NetXtreme II BCM57810 10 Gigabit Ethernet Multi Function", "NetXtreme II BCM57810"), - T_DATA ("NetXtreme II BCM57810 10 Gigabit Ethernet", "NetXtreme II BCM57810"), - T_DATA ("NetXtreme II BCM57810 10 Gigabit Ethernet Virtual Function", "NetXtreme II BCM57810 Virtual Function"), - T_DATA ("NetXtreme II BCM57811 10 Gigabit Ethernet Multi Function", "NetXtreme II BCM57811"), - T_DATA ("NetXtreme II BCM57811 10-Gigabit Ethernet", "NetXtreme II BCM57811"), - T_DATA ("NetXtreme II BCM57811 10-Gigabit Ethernet Virtual Function", "NetXtreme II BCM57811 Virtual Function"), - T_DATA ("NetXtreme II BCM57840 10/20 Gigabit Ethernet Multi Function", "NetXtreme II BCM57840 10/20"), - T_DATA ("NetXtreme II BCM57840 10/20 Gigabit Ethernet", "NetXtreme II BCM57840 10/20"), - T_DATA ("NetXtreme II BCM57840 10/20 Gigabit Ethernet Virtual Function", "NetXtreme II BCM57840 10/20 Virtual Function"), - T_DATA ("nForce2 Ethernet Controller", "nForce2"), - T_DATA ("nForce3 Ethernet", "nForce3"), - T_DATA ("nForce Ethernet Controller", "nForce"), - T_DATA ("Nintendo Wi-Fi", "Nintendo"), - T_DATA ("NM10/ICH7 Family LAN Controller", "NM10/ICH7"), - T_DATA ("NovaTech NV-902W", "NovaTech NV-902W"), - T_DATA ("NUB100 Ethernet [pegasus]", "NUB100"), - T_DATA ("NUB-350 802.11g Wireless Adapter [Intersil ISL3887]", "NUB-350"), - T_DATA ("NUB-8301 802.11bg", "NUB-8301"), - T_DATA ("NV5000SC", "NV5000SC"), - T_DATA ("NW-3100 802.11b/g 54Mbps Wireless Network Adapter [zd1211]", "NW-3100"), - T_DATA ("NWD2105 802.11bgn Wireless Adapter [Ralink RT3070]", "NWD2105"), - T_DATA ("NWD-210N 802.11b/g/n-draft wireless adapter", "NWD-210N"), - T_DATA ("NWD211AN 802.11abgn Wireless Adapter [Ralink RT2870]", "NWD211AN"), - T_DATA ("NWD2205 802.11n Wireless N Adapter [Realtek RTL8192CU]", "NWD2205"), - T_DATA ("NWD-270N Wireless N-lite USB Adapter", "NWD-270N N-lite"), - T_DATA ("NWD271N 802.11n Wireless Adapter [Atheros AR9001U-(2)NG]", "NWD271N"), - T_DATA ("NX3031 Multifunction 1/10-Gigabit Server Adapter", "NX3031 Multifunction"), - T_DATA ("NXB-10GCX4 10-Gigabit Ethernet PCIe Adapter with CX4 copper interface", "NXB-10GCX4"), - T_DATA ("NXB-10GXSR 10-Gigabit Ethernet PCIe Adapter with SR-XFP optical interface", "NXB-10GXSR"), - T_DATA ("NXB-4GCU Quad Gigabit Ethernet PCIe Adapter with 1000-BASE-T interface", "NXB-4GCU Quad"), - T_DATA ("OC-2183/2185", "OC-2183/2185"), - T_DATA ("OC-2325", "OC-2325"), - T_DATA ("OC-2326", "OC-2326"), - T_DATA ("OCT To Fast Ethernet Converter", "OCT To Converter"), - T_DATA ("Olicard 100", "Olicard 100"), - T_DATA ("OneConnect 10Gb NIC (be3)", "OneConnect"), - T_DATA ("OneConnect NIC (Lancer)", "OneConnect"), - T_DATA ("OneConnect NIC (Skyhawk)", "OneConnect"), - T_DATA ("OneConnect NIC (Skyhawk-VF)", "OneConnect"), - T_DATA ("OneConnect OCe10100/OCe10102 Series 10 GbE", "OneConnect OCe10100/OCe10102"), - T_DATA ("On Networks N300MA 802.11bgn [Realtek RTL8192CU]", "On Networks N300MA"), - T_DATA ("Ovation MC551", "Ovation MC551"), - T_DATA ("PCAN-PCI CAN-Bus controller", "PCAN-PCI"), - T_DATA ("PCAN Pro", "PCAN Pro"), - T_DATA ("PCAN-USB", "PCAN-USB"), - T_DATA ("PCI NE2K Ethernet", "NE2K"), - T_DATA ("PCI Rocker Ethernet switch device", "Rocker switch"), - T_DATA ("PL2301 USB-USB Bridge", "PL2301 USB-USB Bridge"), - T_DATA ("PL2302 USB-USB Bridge", "PL2302 USB-USB Bridge"), - T_DATA ("PL25A1 Host-Host Bridge", "PL25A1 Host-Host Bridge"), - T_DATA ("Platform Controller Hub EG20T Controller Area Network (CAN) Controller", "EG20T"), - T_DATA ("PN672TX 10/100 Ethernet", "PN672TX"), - T_DATA ("Pocket Ethernet [klsi]", "Pocket"), - T_DATA ("Prism GT 802.11b/g Adapter", "Prism GT"), - T_DATA ("PRO/100 VE Network Connection", "PRO/100 VE"), - T_DATA ("PRO/100 VM Network Connection", "PRO/100 VM"), - T_DATA ("PRO/Wireless 2200BG [Calexico2] Network Connection", "PRO/Wireless 2200BG"), - T_DATA ("PRO/Wireless 2915ABG [Calexico2] Network Connection", "PRO/Wireless 2915ABG"), - T_DATA ("PRO/Wireless 3945ABG [Golan] Network Connection", "PRO/Wireless 3945ABG"), - T_DATA ("PRO/Wireless 4965 AG or AGN [Kedron] Network Connection", "PRO/Wireless 4965 AG or AGN"), - T_DATA ("PRO/Wireless 5100 AGN [Shiloh] Network Connection", "PRO/Wireless 5100 AGN"), - T_DATA ("PRO/Wireless 5350 AGN [Echo Peak] Network Connection", "PRO/Wireless 5350 AGN"), - T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter (Dell Latitude D800)", "PRO/Wireless 2100 3B Mini"), - T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter (MIM2000/Centrino)", "PRO/Wireless 2100 3B Mini"), - T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter", "PRO/Wireless 2100 3B Mini"), - T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter (Samsung X10/P30 integrated WLAN)", "PRO/Wireless 2100 3B Mini"), - T_DATA ("PRO/Wireless LAN 2100 3B Mini PCI Adapter (Toshiba Satellite M10)", "PRO/Wireless 2100 3B Mini"), - T_DATA ("Psion Gold Port Ethernet", "Psion Gold Port"), - T_DATA ("PTA01 Wireless Adapter", "PTA01"), - T_DATA ("QCA6164 802.11ac Wireless Network Adapter", "QCA6164"), - T_DATA ("QCA6174 802.11ac Wireless Network Adapter", "QCA6174"), - T_DATA ("QCA8171 Gigabit Ethernet", "QCA8171"), - T_DATA ("QCA8172 Fast Ethernet", "QCA8172"), - T_DATA ("QCA9377 802.11ac Wireless Network Adapter", "QCA9377"), - T_DATA ("QCA9565 / AR9565 Wireless Network Adapter", "QCA9565 / AR9565"), - T_DATA ("QCA986x/988x 802.11ac Wireless Network Adapter", "QCA986x/988x"), - T_DATA ("QCA9887 802.11ac Wireless Network Adapter", "QCA9887"), - T_DATA ("QCA9980/9990 802.11ac Wireless Network Adapter", "QCA9980/9990"), - T_DATA ("Qualcomm HSUSB Device", "Qualcomm HSUSB"), - T_DATA ("Quectel UC20", "Quectel UC20"), - T_DATA ("QuickWLAN 802.11bg", "QuickWLAN"), - T_DATA ("R6040 MAC Controller", "R6040"), - T_DATA ("Ralink RT2770/2720 802.11b/g/n Wireless LAN Mini-USB Device", "Ralink RT2770/2720"), - T_DATA ("Ralink RT3070 802.11b/g/n Wireless Lan USB Device", "Ralink RT3070"), - T_DATA ("ReadyLink 2000", "ReadyLink 2000"), - T_DATA ("Realtek RTL8187 Wireless 802.11g 54Mbps Network Adapter", "Realtek RTL8187"), - T_DATA ("RIO 10/100 Ethernet [eri]", "RIO"), - T_DATA ("RL100-ATX 10/100", "RL100-ATX"), - T_DATA ("RL100TX Fast Ethernet", "RL100TX"), - T_DATA ("ROL/F-100 Fast Ethernet Adapter with ROL", "ROL/F-100 with ROL"), - T_DATA ("RT2070 Wireless Adapter", "RT2070"), - T_DATA ("RT2500USB Wireless Adapter", "RT2500USB"), - T_DATA ("RT2500 Wireless 802.11bg", "RT2500"), - T_DATA ("RT2501/RT2573 Wireless Adapter", "RT2501/RT2573"), - T_DATA ("RT2501USB Wireless Adapter", "RT2501USB"), - T_DATA ("RT2561/RT61 802.11g PCI", "RT2561/RT61"), - T_DATA ("RT2561/RT61 rev B 802.11g", "RT2561/RT61"), - T_DATA ("RT2570", "RT2570"), - T_DATA ("RT2570 Wireless Adapter", "RT2570"), - T_DATA ("RT2573", "RT2573"), - T_DATA ("RT2600 802.11 MIMO", "RT2600 MIMO"), - T_DATA ("RT2601/RT2671 Wireless Adapter", "RT2601/RT2671"), - T_DATA ("RT2760 Wireless 802.11n 1T/2R", "RT2760 1T/2R"), - T_DATA ("RT2770 Wireless Adapter", "RT2770"), - T_DATA ("RT2790 Wireless 802.11n 1T/2R PCIe", "RT2790 1T/2R"), - T_DATA ("RT2800 802.11n PCI", "RT2800"), - T_DATA ("RT2870/RT3070 Wireless Adapter", "RT2870/RT3070"), - T_DATA ("RT2870 Wireless Adapter", "RT2870"), - T_DATA ("RT2890 Wireless 802.11n PCIe", "RT2890"), - T_DATA ("RT3060 Wireless 802.11n 1T/1R", "RT3060 1T/1R"), - T_DATA ("RT3062 Wireless 802.11n 2T/2R", "RT3062 2T/2R"), - T_DATA ("RT3071 Wireless Adapter", "RT3071"), - T_DATA ("RT3072 Wireless Adapter", "RT3072"), - T_DATA ("RT3090 Wireless 802.11n 1T/1R PCIe", "RT3090 1T/1R"), - T_DATA ("RT3091 Wireless 802.11n 1T/2R PCIe", "RT3091 1T/2R"), - T_DATA ("RT3092 Wireless 802.11n 2T/2R PCIe", "RT3092 2T/2R"), - T_DATA ("RT3290 Wireless 802.11n 1T/1R PCIe", "RT3290 1T/1R"), - T_DATA ("RT3370 Wireless Adapter", "RT3370"), - T_DATA ("RT3572 Wireless Adapter", "RT3572"), - T_DATA ("RT3573 Wireless Adapter", "RT3573"), - T_DATA ("RT3592 PCIe Wireless Network Adapter", "RT3592"), - T_DATA ("RT3592 Wireless 802.11abgn 2T/2R PCIe", "RT3592 2T/2R"), - T_DATA ("RT5360 Wireless 802.11n 1T/1R", "RT5360 1T/1R"), - T_DATA ("RT5362 PCI 802.11n Wireless Network Adapter", "RT5362"), - T_DATA ("RT5370 Wireless Adapter", "RT5370"), - T_DATA ("RT5372 Wireless Adapter", "RT5372"), - T_DATA ("RT5390 [802.11 b/g/n 1T1R G-band PCI Express Single Chip]", "RT5390"), - T_DATA ("RT5390R 802.11bgn PCIe Wireless Network Adapter", "RT5390R"), - T_DATA ("RT5390 Wireless 802.11n 1T/1R PCIe", "RT5390 1T/1R"), - T_DATA ("RT5392 PCIe Wireless Network Adapter", "RT5392"), - T_DATA ("RT5572 Wireless Adapter", "RT5572"), - T_DATA ("RT8139 (B/C) Cardbus Fast Ethernet Adapter", "RT8139"), - T_DATA ("RTL-8029(AS)", "RTL-8029"), - T_DATA ("RTL-8100/8101L/8139 PCI Fast Ethernet Adapter", "RTL-8100/8101L/8139"), - T_DATA ("RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller", "RTL8101/2/6E"), - T_DATA ("RTL-8110SC/8169SC Gigabit Ethernet", "RTL-8110SC/8169SC"), - T_DATA ("RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", "RTL8111/8168/8411"), - T_DATA ("RTL-8129", "RTL-8129"), - T_DATA ("RTL8139D [Realtek] PCI 10/100BaseTX ethernet adaptor", "RTL8139D"), - T_DATA ("RTL8139 Ethernet", "RTL8139"), - T_DATA ("RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter", "RTL8139"), - T_DATA ("RTL8150 Fast Ethernet Adapter", "RTL8150"), - T_DATA ("RTL8151", "RTL8151"), - T_DATA ("RTL8152 Fast Ethernet Adapter", "RTL8152"), - T_DATA ("RTL8153 Gigabit Ethernet Adapter", "RTL8153"), - T_DATA ("RTL8169 PCI Gigabit Ethernet Controller", "RTL8169"), - T_DATA ("RTL8180L 802.11b MAC", "RTL8180L"), - T_DATA ("RTL-8185 IEEE 802.11a/b/g Wireless LAN Controller", "RTL-8185"), - T_DATA ("RTL8187B Wireless 802.11g 54Mbps Network Adapter", "RTL8187B"), - T_DATA ("RTL8187B Wireless Adapter", "RTL8187B"), - T_DATA ("RTL8187SE Wireless LAN Controller", "RTL8187SE"), - T_DATA ("RTL8187 Wireless Adapter", "RTL8187"), - T_DATA ("RTL8188CE 802.11b/g/n WiFi Adapter", "RTL8188CE"), - T_DATA ("RTL8188CUS 802.11n WLAN Adapter", "RTL8188CUS"), - T_DATA ("RTL8188EE Wireless Network Adapter", "RTL8188EE"), - T_DATA ("RTL8188RU 802.11n WLAN Adapter", "RTL8188RU"), - T_DATA ("RTL8191CE PCIe Wireless Network Adapter", "RTL8191CE"), - T_DATA ("RTL8191SEvA Wireless LAN Controller", "RTL8191SEvA"), - T_DATA ("RTL8191SEvB Wireless LAN Controller", "RTL8191SEvB"), - T_DATA ("RTL8192CE PCIe Wireless Network Adapter", "RTL8192CE"), - T_DATA ("RTL8192CU 802.11n WLAN Adapter", "RTL8192CU"), - T_DATA ("RTL8192DE Wireless LAN Controller", "RTL8192DE"), - T_DATA ("RTL8192EE PCIe Wireless Network Adapter", "RTL8192EE"), - T_DATA ("RTL8192E/RTL8192SE Wireless LAN Controller", "RTL8192E/RTL8192SE"), - T_DATA ("RTL8192EU 802.11b/g/n WLAN Adapter", "RTL8192EU"), - T_DATA ("RTL8192SE Wireless LAN Controller", "RTL8192SE"), - T_DATA ("RTL81xx Fast Ethernet", "RTL81xx"), - T_DATA ("RTL81xx RealTek Ethernet", "RTL81xx RealTek"), - T_DATA ("RTL8723AE PCIe Wireless Network Adapter", "RTL8723AE"), - T_DATA ("RTL8723AU 802.11n WLAN Adapter", "RTL8723AU"), - T_DATA ("RTL8723BE PCIe Wireless Network Adapter", "RTL8723BE"), - T_DATA ("RTL8812AE 802.11ac PCIe Wireless Network Adapter", "RTL8812AE"), - T_DATA ("RTL8821AE 802.11ac PCIe Wireless Network Adapter", "RTL8821AE"), - T_DATA ("S310-CR 10GbE Single Port Adapter", "S310-CR Single Port"), - T_DATA ("S320-LP-CR 10GbE Dual Port Adapter", "S320-LP-CR"), - T_DATA ("Samsung Gobi 2000 Wireless Modem", "Samsung Gobi 2000"), - T_DATA ("SC92031 PCI Fast Ethernet Adapter", "SC92031"), - T_DATA ("SD8688 WLAN", "SD8688"), - T_DATA ("SD8786 WLAN", "SD8786"), - T_DATA ("SD8787 WLAN", "SD8787"), - T_DATA ("SD8797 WLAN", "SD8797"), - T_DATA ("SD8897 WLAN", "SD8897"), - T_DATA ("SFC4000 rev A net [Solarstorm]", "SFC4000"), - T_DATA ("SFC4000 rev B [Solarstorm]", "SFC4000"), - T_DATA ("SFC9020 10G Ethernet Controller", "SFC9020"), - T_DATA ("SFC9120 10G Ethernet Controller", "SFC9120"), - T_DATA ("SFC9120 10G Ethernet Controller (Virtual Function)", "SFC9120"), - T_DATA ("SFC9140 10/40G Ethernet Controller", "SFC9140"), - T_DATA ("SFC9140 10/40G Ethernet Controller (Virtual Function)", "SFC9140"), - T_DATA ("SFC9220 10/40G Ethernet Controller", "SFC9220"), - T_DATA ("SFC9220 10/40G Ethernet Controller (Virtual Function)", "SFC9220"), - T_DATA ("SFL9021 10GBASE-T Ethernet Controller", "SFL9021"), - T_DATA ("Shasta (Sun GEM)", "Shasta"), - T_DATA ("Siemens S30853-S1016-R107 802.11g Wireless Adapter [Intersil ISL3886]", "Siemens S30853-S1016-R107"), - T_DATA ("Siemens S30853-S1031-R351 802.11g Wireless Adapter [Atheros AR5523]", "Siemens S30853-S1031-R351"), - T_DATA ("Siemens S30853-S1038-R351 802.11g Wireless Adapter [Atheros AR5523]", "Siemens S30853-S1038-R351"), - T_DATA ("Siemens S30863-S1016-R107-2 802.11g Wireless Adapter [Intersil ISL3887]", "Siemens S30863-S1016-R107-2"), - T_DATA ("Siemens SpeedStream 100MBps Ethernet", "Siemens SpeedStream"), - T_DATA ("Sierra Wireless Gobi 3000 Modem device (MC8355)", "Sierra Gobi 3000"), - T_DATA ("SIMCom SIM5218 modem", "SIMCom SIM5218"), - T_DATA ("SiS7016 PCI Fast Ethernet Adapter", "SiS7016"), - T_DATA ("SiS900 PCI Fast Ethernet", "SiS900"), - T_DATA ("SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter, PCI64, Fiber ZX/SC", "SK-9871 ZX/SC"), - T_DATA ("SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link)", "SK-9872"), - T_DATA ("SK-9Dxx Gigabit Ethernet Adapter", "SK-9Dxx"), - T_DATA ("SK-9E21D 10/100/1000Base-T Adapter, Copper RJ-45", "SK-9E21D"), - T_DATA ("SK-9E21M 10/100/1000Base-T Adapter", "SK-9E21M"), - T_DATA ("SK-9Mxx Gigabit Ethernet Adapter", "SK-9Mxx"), - T_DATA ("SK-9S21 10/100/1000Base-T Server Adapter, PCI-X, Copper RJ-45", "SK-9S21"), - T_DATA ("smartNIC 2 PnP Ethernet", "smartNIC 2"), - T_DATA ("smartNIC Ethernet [catc]", "smartNIC"), - T_DATA ("SMC2-1211TX", "SMC2-1211TX"), - T_DATA ("SMC2862W-G v1 EZ Connect 802.11g Adapter [Intersil ISL3886]", "SMC2862W-G EZ Connect"), - T_DATA ("SMC2862W-G v2 EZ Connect 802.11g Adapter [Intersil ISL3887]", "SMC2862W-G EZ Connect"), - T_DATA ("SMC2862W-G v3 EZ Connect 802.11g Adapter [Intersil ISL3887]", "SMC2862W-G EZ Connect"), - T_DATA ("SMC SMCWUSB-N 802.11bgn 2x2:2 Wireless Adapter [Ralink RT2870]", "SMC SMCWUSB-N 2x2:2"), - T_DATA ("SMCWUSB-G 802.11bg", "SMCWUSB-G"), - T_DATA ("SMCWUSBS-N2 EZ Connect N Wireless Adapter [Ralink RT2870]", "SMCWUSBS-N2 EZ Connect"), - T_DATA ("SMCWUSBS-N3 EZ Connect N Wireless Adapter [Ralink RT3070]", "SMCWUSBS-N3 EZ Connect"), - T_DATA ("SMCWUSBS-N EZ Connect N Draft 11n Wireless Adapter [Ralink RT2870]", "SMCWUSBS-N EZ Connect"), - T_DATA ("SMCWUSBT-G (no firmware)", "SMCWUSBT-G"), - T_DATA ("SMCWUSBT-G", "SMCWUSBT-G"), - T_DATA ("SMSC9512/9514 Fast Ethernet Adapter", "SMSC9512/9514"), - T_DATA ("SNU5600 802.11bg", "SNU5600"), - T_DATA ("SoftGate 802.11 Adapter", "SoftGate"), - T_DATA ("Sony 10Mbps Ethernet [pegasus]", "Sony"), - T_DATA ("Sony Gobi 2000 Wireless Modem", "Sony Gobi 2000"), - T_DATA ("Sony UWA-BR100 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]", "Sony UWA-BR100"), - T_DATA ("SparkLAN WL-682 802.11bg Wireless Adapter [Intersil ISL3887]", "SparkLAN WL-682"), - T_DATA ("Speedport W 102 Stick IEEE 802.11n USB 2.0 Adapter", "Speedport W 102 Stick"), - T_DATA ("SpeedStream 10/100 Ethernet [pegasus]", "SpeedStream"), - T_DATA ("SpeedTouch 120g 802.11g Wireless Adapter [Intersil ISL3886]", "SpeedTouch 120g"), - T_DATA ("SpeedTouch 121g Wireless Dongle", "SpeedTouch 121g Dongle"), - T_DATA ("Sphairon Homelink 1202 802.11n Wireless Adapter [Atheros AR9170]", "Sphairon Homelink 1202"), - T_DATA ("ST201 Sundance Ethernet", "ST201 Sundance"), - T_DATA ("ST268", "ST268"), - T_DATA ("SURECOM EP-320X-S 100/10M Ethernet PCI Adapter", "SURECOM EP-320X-S"), - T_DATA ("T210 Protocol Engine", "T210 Protocol Engine"), - T_DATA ("T302 1GbE Dual Port Adapter", "T302"), - T_DATA ("T310 10GbE Single Port Adapter", "T310 Single Port"), - T_DATA ("T320 10GbE Dual Port Adapter", "T320"), - T_DATA ("T404-BT Unified Wire Ethernet Controller", "T404-BT"), - T_DATA ("T404-BT Unified Wire Ethernet Controller [VF]", "T404-BT"), - T_DATA ("T420-4082 Unified Wire Ethernet Controller", "T420-4082"), - T_DATA ("T420-4082 Unified Wire Ethernet Controller [VF]", "T420-4082"), - T_DATA ("T420-4085 SFP+ Unified Wire Ethernet Controller", "T420-4085 SFP+"), - T_DATA ("T420-4085 SFP+ Unified Wire Ethernet Controller [VF]", "T420-4085 SFP+"), - T_DATA ("T420-BCH Unified Wire Ethernet Controller", "T420-BCH"), - T_DATA ("T420-BCH Unified Wire Ethernet Controller [VF]", "T420-BCH"), - T_DATA ("T420-BT Unified Wire Ethernet Controller", "T420-BT"), - T_DATA ("T420-BT Unified Wire Ethernet Controller [VF]", "T420-BT"), - T_DATA ("T420-CR Unified Wire Ethernet Controller", "T420-CR"), - T_DATA ("T420-CR Unified Wire Ethernet Controller [VF]", "T420-CR"), - T_DATA ("T420-CX Unified Wire Ethernet Controller", "T420-CX"), - T_DATA ("T420-CX Unified Wire Ethernet Controller [VF]", "T420-CX"), - T_DATA ("T420-SO Unified Wire Ethernet Controller", "T420-SO"), - T_DATA ("T420-SO Unified Wire Ethernet Controller [VF]", "T420-SO"), - T_DATA ("T420X-4083 Unified Wire Ethernet Controller", "T420X-4083"), - T_DATA ("T420X-4083 Unified Wire Ethernet Controller [VF]", "T420X-4083"), - T_DATA ("T422-CR Unified Wire Ethernet Controller", "T422-CR"), - T_DATA ("T422-CR Unified Wire Ethernet Controller [VF]", "T422-CR"), - T_DATA ("T440-4084 Unified Wire Ethernet Controller", "T440-4084"), - T_DATA ("T440-4084 Unified Wire Ethernet Controller [VF]", "T440-4084"), - T_DATA ("T440-4086 10Gbase-T Unified Wire Ethernet Controller", "T440-4086"), - T_DATA ("T440-4086 10Gbase-T Unified Wire Ethernet Controller [VF]", "T440-4086"), - T_DATA ("T440-4088 Unified Wire Ethernet Controller", "T440-4088"), - T_DATA ("T440-4088 Unified Wire Ethernet Controller [VF]", "T440-4088"), - T_DATA ("T440-BCH Unified Wire Ethernet Controller", "T440-BCH"), - T_DATA ("T440-BCH Unified Wire Ethernet Controller [VF]", "T440-BCH"), - T_DATA ("T440-CH Unified Wire Ethernet Controller", "T440-CH"), - T_DATA ("T440-CH Unified Wire Ethernet Controller [VF]", "T440-CH"), - T_DATA ("T440-CR Unified Wire Ethernet Controller", "T440-CR"), - T_DATA ("T440-CR Unified Wire Ethernet Controller [VF]", "T440-CR"), - T_DATA ("T440F-4081 T440-FCoE Unified Wire Ethernet Controller", "T440F-4081 T440-FCoE"), - T_DATA ("T440F-4081 T440-FCoE Unified Wire Ethernet Controller [VF]", "T440F-4081 T440-FCoE"), - T_DATA ("T440-LP-CR Unified Wire Ethernet Controller", "T440-LP-CR"), - T_DATA ("T440-LP-CR Unified Wire Ethernet Controller [VF]", "T440-LP-CR"), - T_DATA ("T440T-4087 Unified Wire Ethernet Controller", "T440T-4087"), - T_DATA ("T440T-4087 Unified Wire Ethernet Controller [VF]", "T440T-4087"), - T_DATA ("T480-4080 T480 Unified Wire Ethernet Controller", "T480-4080 T480"), - T_DATA ("T480-4080 T480 Unified Wire Ethernet Controller [VF]", "T480-4080 T480"), - T_DATA ("T480 Unified Wire Ethernet Controller", "T480"), - T_DATA ("T480 Unified Wire Ethernet Controller [VF]", "T480"), - T_DATA ("T502-BT Unified Wire Ethernet Controller", "T502-BT"), - T_DATA ("T502-BT Unified Wire Ethernet Controller [VF]", "T502-BT"), - T_DATA ("T504-5082 Unified Wire Ethernet Controller", "T504-5082"), - T_DATA ("T504-5082 Unified Wire Ethernet Controller [VF]", "T504-5082"), - T_DATA ("T504-BT Unified Wire Ethernet Controller", "T504-BT"), - T_DATA ("T504-BT Unified Wire Ethernet Controller [VF]", "T504-BT"), - T_DATA ("T520-5089 Unified Wire Ethernet Controller", "T520-5089"), - T_DATA ("T520-5089 Unified Wire Ethernet Controller [VF]", "T520-5089"), - T_DATA ("T520-5092 Unified Wire Ethernet Controller", "T520-5092"), - T_DATA ("T520-5092 Unified Wire Ethernet Controller [VF]", "T520-5092"), - T_DATA ("T520-5097 Unified Wire Ethernet Controller", "T520-5097"), - T_DATA ("T520-5097 Unified Wire Ethernet Controller [VF]", "T520-5097"), - T_DATA ("T520-509A Unified Wire Ethernet Controller", "T520-509A"), - T_DATA ("T520-509A Unified Wire Ethernet Controller [VF]", "T520-509A"), - T_DATA ("T520-509C Unified Wire Ethernet Controller", "T520-509C"), - T_DATA ("T520-509C Unified Wire Ethernet Controller [VF]", "T520-509C"), - T_DATA ("T520-509E Unified Wire Ethernet Controller", "T520-509E"), - T_DATA ("T520-509E Unified Wire Ethernet Controller [VF]", "T520-509E"), - T_DATA ("T520-BCH Unified Wire Ethernet Controller", "T520-BCH"), - T_DATA ("T520-BCH Unified Wire Ethernet Controller [VF]", "T520-BCH"), - T_DATA ("T520-BT Unified Wire Ethernet Controller", "T520-BT"), - T_DATA ("T520-BT Unified Wire Ethernet Controller [VF]", "T520-BT"), - T_DATA ("T520-CR Unified Wire Ethernet Controller", "T520-CR"), - T_DATA ("T520-CR Unified Wire Ethernet Controller [VF]", "T520-CR"), - T_DATA ("T520-CX Unified Wire Ethernet Controller", "T520-CX"), - T_DATA ("T520-CX Unified Wire Ethernet Controller [VF]", "T520-CX"), - T_DATA ("T520-LL-CR Unified Wire Ethernet Controller", "T520-LL-CR"), - T_DATA ("T520-LL-CR Unified Wire Ethernet Controller [VF]", "T520-LL-CR"), - T_DATA ("T520-OCP-SO Unified Wire Ethernet Controller", "T520-OCP-SO"), - T_DATA ("T520-OCP-SO Unified Wire Ethernet Controller [VF]", "T520-OCP-SO"), - T_DATA ("T520-SO Unified Wire Ethernet Controller", "T520-SO"), - T_DATA ("T520-SO Unified Wire Ethernet Controller [VF]", "T520-SO"), - T_DATA ("T522-5091 Unified Wire Ethernet Controller", "T522-5091"), - T_DATA ("T522-5091 Unified Wire Ethernet Controller [VF]", "T522-5091"), - T_DATA ("T522-CR Unified Wire Ethernet Controller", "T522-CR"), - T_DATA ("T522-CR Unified Wire Ethernet Controller [VF]", "T522-CR"), - T_DATA ("T540-5080 Unified Wire Ethernet Controller", "T540-5080"), - T_DATA ("T540-5080 Unified Wire Ethernet Controller [VF]", "T540-5080"), - T_DATA ("T540-5081 Unified Wire Ethernet Controller", "T540-5081"), - T_DATA ("T540-5081 Unified Wire Ethernet Controller [VF]", "T540-5081"), - T_DATA ("T540-5083 Unified Wire Ethernet Controller", "T540-5083"), - T_DATA ("T540-5083 Unified Wire Ethernet Controller [VF]", "T540-5083"), - T_DATA ("T540-5084 Unified Wire Ethernet Controller", "T540-5084"), - T_DATA ("T540-5084 Unified Wire Ethernet Controller [VF]", "T540-5084"), - T_DATA ("T540-5090 Unified Wire Ethernet Controller", "T540-5090"), - T_DATA ("T540-5090 Unified Wire Ethernet Controller [VF]", "T540-5090"), - T_DATA ("T540-5094 Unified Wire Ethernet Controller", "T540-5094"), - T_DATA ("T540-5094 Unified Wire Ethernet Controller [VF]", "T540-5094"), - T_DATA ("T540-5095 Unified Wire Ethernet Controller", "T540-5095"), - T_DATA ("T540-5095 Unified Wire Ethernet Controller [VF]", "T540-5095"), - T_DATA ("T540-509B Unified Wire Ethernet Controller", "T540-509B"), - T_DATA ("T540-509B Unified Wire Ethernet Controller [VF]", "T540-509B"), - T_DATA ("T540-509D Unified Wire Ethernet Controller", "T540-509D"), - T_DATA ("T540-509D Unified Wire Ethernet Controller [VF]", "T540-509D"), - T_DATA ("T540-509F Unified Wire Ethernet Controller", "T540-509F"), - T_DATA ("T540-509F Unified Wire Ethernet Controller [VF]", "T540-509F"), - T_DATA ("T540-50A0 Unified Wire Ethernet Controller", "T540-50A0"), - T_DATA ("T540-50A0 Unified Wire Ethernet Controller [VF]", "T540-50A0"), - T_DATA ("T540-50A1 Unified Wire Ethernet Controller", "T540-50A1"), - T_DATA ("T540-50A1 Unified Wire Ethernet Controller [VF]", "T540-50A1"), - T_DATA ("T540-BCH Unified Wire Ethernet Controller", "T540-BCH"), - T_DATA ("T540-BCH Unified Wire Ethernet Controller [VF]", "T540-BCH"), - T_DATA ("T540-BT Unified Wire Ethernet Controller", "T540-BT"), - T_DATA ("T540-BT Unified Wire Ethernet Controller [VF]", "T540-BT"), - T_DATA ("T540-CH Unified Wire Ethernet Controller", "T540-CH"), - T_DATA ("T540-CH Unified Wire Ethernet Controller [VF]", "T540-CH"), - T_DATA ("T540-CR Unified Wire Ethernet Controller", "T540-CR"), - T_DATA ("T540-CR Unified Wire Ethernet Controller [VF]", "T540-CR"), - T_DATA ("T540-LP-CR Unified Wire Ethernet Controller", "T540-LP-CR"), - T_DATA ("T540-LP-CR Unified Wire Ethernet Controller [VF]", "T540-LP-CR"), - T_DATA ("T560-CR Unified Wire Ethernet Controller", "T560-CR"), - T_DATA ("T560-CR Unified Wire Ethernet Controller [VF]", "T560-CR"), - T_DATA ("T570-5088 Unified Wire Ethernet Controller", "T570-5088"), - T_DATA ("T570-5088 Unified Wire Ethernet Controller [VF]", "T570-5088"), - T_DATA ("T580-5085 Unified Wire Ethernet Controller", "T580-5085"), - T_DATA ("T580-5085 Unified Wire Ethernet Controller [VF]", "T580-5085"), - T_DATA ("T580-5086 Unified Wire Ethernet Controller", "T580-5086"), - T_DATA ("T580-5086 Unified Wire Ethernet Controller [VF]", "T580-5086"), - T_DATA ("T580-5087 Unified Wire Ethernet Controller", "T580-5087"), - T_DATA ("T580-5087 Unified Wire Ethernet Controller [VF]", "T580-5087"), - T_DATA ("T580-5093 Unified Wire Ethernet Controller", "T580-5093"), - T_DATA ("T580-5093 Unified Wire Ethernet Controller [VF]", "T580-5093"), - T_DATA ("T580-5096 Unified Wire Ethernet Controller", "T580-5096"), - T_DATA ("T580-5096 Unified Wire Ethernet Controller [VF]", "T580-5096"), - T_DATA ("T580-5098 Unified Wire Ethernet Controller", "T580-5098"), - T_DATA ("T580-5098 Unified Wire Ethernet Controller [VF]", "T580-5098"), - T_DATA ("T580-5099 Unified Wire Ethernet Controller", "T580-5099"), - T_DATA ("T580-5099 Unified Wire Ethernet Controller [VF]", "T580-5099"), - T_DATA ("T580-50A2 Unified Wire Ethernet Controller", "T580-50A2"), - T_DATA ("T580-50A2 Unified Wire Ethernet Controller [VF]", "T580-50A2"), - T_DATA ("T580-CHR Unified Wire Ethernet Controller", "T580-CHR"), - T_DATA ("T580-CHR Unified Wire Ethernet Controller [VF]", "T580-CHR"), - T_DATA ("T580-CR Unified Wire Ethernet Controller", "T580-CR"), - T_DATA ("T580-CR Unified Wire Ethernet Controller [VF]", "T580-CR"), - T_DATA ("T580-LP-CR Unified Wire Ethernet Controller", "T580-LP-CR"), - T_DATA ("T580-LP-CR Unified Wire Ethernet Controller [VF]", "T580-LP-CR"), - T_DATA ("T580-OCP-SO Unified Wire Ethernet Controller", "T580-OCP-SO"), - T_DATA ("T580-OCP-SO Unified Wire Ethernet Controller [VF]", "T580-OCP-SO"), - T_DATA ("T580-SO-CR Unified Wire Ethernet Controller", "T580-SO-CR"), - T_DATA ("T580-SO-CR Unified Wire Ethernet Controller [VF]", "T580-SO-CR"), - T_DATA ("T61100-OCP-SO Unified Wire Ethernet Controller", "T61100-OCP-SO"), - T_DATA ("T61100-OCP-SO Unified Wire Ethernet Controller [VF]", "T61100-OCP-SO"), - T_DATA ("T6201-BT Unified Wire Ethernet Controller", "T6201-BT"), - T_DATA ("T6201-BT Unified Wire Ethernet Controller [VF]", "T6201-BT"), - T_DATA ("T62100-6081 Unified Wire Ethernet Controller", "T62100-6081"), - T_DATA ("T62100-6081 Unified Wire Ethernet Controller [VF]", "T62100-6081"), - T_DATA ("T62100-6083 Unified Wire Ethernet Controller", "T62100-6083"), - T_DATA ("T62100-6083 Unified Wire Ethernet Controller [VF]", "T62100-6083"), - T_DATA ("T62100-CR Unified Wire Ethernet Controller", "T62100-CR"), - T_DATA ("T62100-CR Unified Wire Ethernet Controller [VF]", "T62100-CR"), - T_DATA ("T62100-LP-CR Unified Wire Ethernet Controller", "T62100-LP-CR"), - T_DATA ("T62100-LP-CR Unified Wire Ethernet Controller [VF]", "T62100-LP-CR"), - T_DATA ("T62100-OCP-SO Unified Wire Ethernet Controller", "T62100-OCP-SO"), - T_DATA ("T62100-OCP-SO Unified Wire Ethernet Controller [VF]", "T62100-OCP-SO"), - T_DATA ("T62100-SO-CR Unified Wire Ethernet Controller", "T62100-SO-CR"), - T_DATA ("T62100-SO-CR Unified Wire Ethernet Controller [VF]", "T62100-SO-CR"), - T_DATA ("T6210-BT Unified Wire Ethernet Controller", "T6210-BT"), - T_DATA ("T6210-BT Unified Wire Ethernet Controller [VF]", "T6210-BT"), - T_DATA ("T6225-6080 Unified Wire Ethernet Controller", "T6225-6080"), - T_DATA ("T6225-6080 Unified Wire Ethernet Controller [VF]", "T6225-6080"), - T_DATA ("T6225-6082 Unified Wire Ethernet Controller", "T6225-6082"), - T_DATA ("T6225-6082 Unified Wire Ethernet Controller [VF]", "T6225-6082"), - T_DATA ("T6225-CR Unified Wire Ethernet Controller", "T6225-CR"), - T_DATA ("T6225-CR Unified Wire Ethernet Controller [VF]", "T6225-CR"), - T_DATA ("T6225-LL-CR Unified Wire Ethernet Controller", "T6225-LL-CR"), - T_DATA ("T6225-LL-CR Unified Wire Ethernet Controller [VF]", "T6225-LL-CR"), - T_DATA ("T6225-OCP-SO Unified Wire Ethernet Controller", "T6225-OCP-SO"), - T_DATA ("T6225-OCP-SO Unified Wire Ethernet Controller [VF]", "T6225-OCP-SO"), - T_DATA ("T6225-SO-CR Unified Wire Ethernet Controller", "T6225-SO-CR"), - T_DATA ("T6225-SO-CR Unified Wire Ethernet Controller [VF]", "T6225-SO-CR"), - T_DATA ("T64100-6084 Unified Wire Ethernet Controller", "T64100-6084"), - T_DATA ("T64100-6084 Unified Wire Ethernet Controller [VF]", "T64100-6084"), - T_DATA ("T6425-CR Unified Wire Ethernet Controller", "T6425-CR"), - T_DATA ("T6425-CR Unified Wire Ethernet Controller [VF]", "T6425-CR"), - T_DATA ("T6425-SO-CR Unified Wire Ethernet Controller", "T6425-SO-CR"), - T_DATA ("T6425-SO-CR Unified Wire Ethernet Controller [VF]", "T6425-SO-CR"), - T_DATA ("TalkTalk SNU5630NS/05 802.11bg", "TalkTalk SNU5630NS/05"), - T_DATA ("TC902x Gigabit Ethernet", "TC902x"), - T_DATA ("T-Com Sinus 154 data II [Intersil ISL3887]", "T-Com Sinus 154 data II"), - T_DATA ("TEW-429UB 802.11bg", "TEW-429UB"), - T_DATA ("TEW-429UB C1 802.11bg", "TEW-429UB C1"), - T_DATA ("TEW-444UB EU (no firmware)", "TEW-444UB EU"), - T_DATA ("TEW-444UB EU [TRENDnet]", "TEW-444UB EU"), - T_DATA ("TEW-509UB A1 802.11abg Wireless Adapter [ZyDAS ZD1211]", "TEW-509UB A1"), - T_DATA ("TEW-645UB 802.11bgn 1x2:2 Wireless Adapter [Ralink RT2770]", "TEW-645UB"), - T_DATA ("TEW-648UBM 802.11n 150Mbps Micro Wireless N Adapter [Realtek RTL8188CUS]", "TEW-648UBM"), - T_DATA ("TG54USB 802.11bg", "TG54USB"), - T_DATA ("Thomson TG121N [Atheros AR9001U-(2)NG]", "Thomson TG121N"), - T_DATA ("Top Global Gobi 2000 Wireless Modem", "Top Global Gobi 2000"), - T_DATA ("TP-Link TL-WN322G v3 / TL-WN422G v2 802.11g [Atheros AR9271]", "TP-Link TL-WN322G / TL-WN422G"), - T_DATA ("TP-Link TL-WN821N v2 / TL-WN822N v1 802.11n [Atheros AR9170]", "TP-Link TL-WN821N / TL-WN822N"), - T_DATA ("TP-Link TL-WN821N v3 / TL-WN822N v2 802.11n [Atheros AR7010+AR9287]", "TP-Link TL-WN821N / TL-WN822N"), - T_DATA ("TrueMobile 1300 802.11g Wireless Adapter [Intersil ISL3880]", "TrueMobile 1300"), - T_DATA ("T-Sinus 154data", "T-Sinus 154data"), - T_DATA ("TTP-Monitoring Card V2.0", "TTP-Monitoring"), - T_DATA ("Turbolink UB801RE Wireless 802.11g 54Mbps Network Adapter [RTL8187]", "Turbolink UB801RE"), - T_DATA ("Turbolink UB801R WLAN Adapter", "Turbolink UB801R"), - T_DATA ("U2E", "U2E"), - T_DATA ("U5 802.11g Adapter", "U5"), - T_DATA ("UB81 802.11bgn", "UB81"), - T_DATA ("UB82 802.11abgn", "UB82"), - T_DATA ("Ubiquiti WiFiStation 802.11n [Atheros AR9271]", "Ubiquiti WiFiStation"), - T_DATA ("Ubiquiti WiFiStationEXT 802.11n [Atheros AR9271]", "Ubiquiti WiFiStationEXT"), - T_DATA ("UBS-10BT Ethernet [klsi]", "UBS-10BT"), - T_DATA ("UBS-10BT Ethernet", "UBS-10BT"), - T_DATA ("UC-110T 100Mbps Ethernet [pegasus]", "UC-110T"), - T_DATA ("UC-210T Ethernet", "UC-210T"), - T_DATA ("UF100 Ethernet [pegasus2]", "UF100"), - T_DATA ("UF200 Ethernet", "UF200"), - T_DATA ("ULi 1689,1573 integrated ethernet.", "ULi 1689 1573"), - T_DATA ("Ultimate N WiFi Link 5300", "Ultimate N 5300"), - T_DATA ("un2400 Gobi Wireless Modem", "un2400 Gobi"), - T_DATA ("UniNorth 2 GMAC (Sun GEM)", "UniNorth 2 GMAC"), - T_DATA ("UniNorth GMAC (Sun GEM)", "UniNorth GMAC"), - T_DATA ("UniNorth/Pangea GMAC (Sun GEM)", "UniNorth/Pangea GMAC"), - T_DATA ("UR054g 802.11g Wireless Adapter [Intersil ISL3887]", "UR054g"), - T_DATA ("UR055G 802.11bg", "UR055G"), - T_DATA ("USB1000 Gigabit Notebook Adapter", "USB1000"), - T_DATA ("USB-100N Ethernet [pegasus]", "USB-100N"), - T_DATA ("USB100TX Ethernet [pegasus]", "USB100TX"), - T_DATA ("USB100TX HomePNA Ethernet [pegasus]", "USB100TX HomePNA"), - T_DATA ("USB10TX Ethernet [pegasus]", "USB10TX"), - T_DATA ("USB10TX", "USB10TX"), - T_DATA ("USB 1.1 10/100M Fast Ethernet Adapter", NULL), - T_DATA ("USB200M 100baseTX Adapter", "USB200M 100baseTX"), - T_DATA ("USB200M 10/100 Ethernet Adapter", "USB200M"), - T_DATA ("USB 2.0 Ethernet", NULL), - T_DATA ("USB2AR Ethernet", "USB2AR"), - T_DATA ("USBcan II", "USBcan II"), - T_DATA ("USBE-100 Ethernet [pegasus2]", "USBE-100"), - T_DATA ("USBEL-100 Ethernet [pegasus]", "USBEL-100"), - T_DATA ("USB Ethernet [pegasus]", "pegasus"), - T_DATA ("USB ETT", "ETT"), - T_DATA ("USBLAN", "USBLAN"), - T_DATA ("USBLP-100 HomePNA Ethernet [pegasus]", "USBLP-100 HomePNA"), - T_DATA ("USB-N10 v2 802.11b/g/n Wireless Adapter [MediaTek MT7601U]", "USB-N10"), - T_DATA ("USB-N11 802.11n Network Adapter [Ralink RT2870]", "USB-N11"), - T_DATA ("USB-N13 802.11n Network Adapter (rev. A1) [Ralink RT3072]", "USB-N13"), - T_DATA ("USB-N13 802.11n Network Adapter (rev. B1) [Realtek RTL8192CU]", "USB-N13"), - T_DATA ("USB-N14 802.11b/g/n (2x2) Wireless Adapter [Ralink RT5372]", "USB-N14"), - T_DATA ("USB-N53 802.11abgn Network Adapter [Ralink RT3572]", "USB-N53"), - T_DATA ("USB TO Ethernet", NULL), - T_DATA ("USR5420 802.11g Adapter [Broadcom 4320 USB]", "USR5420"), - T_DATA ("USR5423 802.11bg Wireless Adapter [ZyDAS ZD1211B]", "USR5423"), - T_DATA ("USR997902 10/100/1000 Mbps PCI Network Card", "USR997902 Mbps"), - T_DATA ("VIC Ethernet NIC Dynamic", "VIC Dynamic"), - T_DATA ("VIC Ethernet NIC", "VIC"), - T_DATA ("VIC SR-IOV VF", "VIC SR-IOV VF"), - T_DATA ("Vigor530 IEEE 802.11G Adapter (ISL3880+NET2280)", "Vigor530"), - T_DATA ("Virtual media for 802.11bg", NULL), - T_DATA ("VMXNET3 Ethernet Controller", "VMXNET3"), - T_DATA ("VT6102/VT6103 [Rhine-II]", "VT6102/VT6103"), - T_DATA ("VT6105M [Rhine-III]", "VT6105M"), - T_DATA ("VT6105/VT6106S [Rhine-III]", "VT6105/VT6106S"), - T_DATA ("VT6120/VT6121/VT6122 Gigabit Ethernet Adapter", "VT6120/VT6121/VT6122"), - T_DATA ("VT82C926 [Amazon]", "VT82C926"), - T_DATA ("VT86C100A [Rhine]", "VT86C100A"), - T_DATA ("W89C840", "W89C840"), - T_DATA ("W89C940F", "W89C940F"), - T_DATA ("W89C940 misprogrammed [ne2k]", "W89C940"), - T_DATA ("W89C940", "W89C940"), - T_DATA ("WG111T (no firmware)", "WG111T"), - T_DATA ("WG111T", "WG111T"), - T_DATA ("WG111U Double 108 Mbps Wireless [Atheros AR5004X / AR5005UX]", "WG111U"), - T_DATA ("WG111U (no firmware) Double 108 Mbps Wireless [Atheros AR5004X / AR5005UX]", "WG111U"), - T_DATA ("WG111(v1) 54 Mbps Wireless [Intersil ISL3886]", "WG111"), - T_DATA ("WG111(v1) rev 2 54 Mbps Wireless [Intersil ISL3887]", "WG111"), - T_DATA ("WG111v2 54 Mbps Wireless [RealTek RTL8187L]", "WG111v2"), - T_DATA ("WG111v3 54 Mbps Wireless [realtek RTL8187B]", "WG111v3"), - T_DATA ("WG121(v1) 54 Mbps Wireless [Intersil ISL3886]", "WG121"), - T_DATA ("WG121(v2) 54 Mbps Wireless [Intersil ISL3886]", "WG121"), - T_DATA ("WGU-210 802.11g Adapter [Intersil ISL3886]", "WGU-210"), - T_DATA ("WHG-AGDN/US Wireless LAN Adapter", "WHG-AGDN/US"), - T_DATA ("Wi-Fi 11g adapter", NULL), - T_DATA ("WiFi Link 5100", "5100"), - T_DATA ("Wil6200 802.11ad Wireless Network Adapter", "Wil6200"), - T_DATA ("WiMAX/WiFi Link 5150", "5150"), - T_DATA ("Wireless 11n USB Adapter", "11n"), - T_DATA ("Wireless 1450 Dual-band (802.11a/b/g) Adapter [Intersil ISL3887]", "1450"), - T_DATA ("Wireless 3160", "3160"), - T_DATA ("Wireless 3165", "3165"), - T_DATA ("Wireless 7260", "7260"), - T_DATA ("Wireless 7265", "7265"), - T_DATA ("Wireless 802.11g 54Mbps Network Adapter [RTL8187]", "RTL8187"), - T_DATA ("Wireless 8260", "8260"), - T_DATA ("Wireless 8265 / 8275", "8265 / 8275"), - T_DATA ("Wireless Adapter 11g", NULL), - T_DATA ("Wireless LAN USB Mini-Card", NULL), - T_DATA ("Wireless MAXg Adapter [Broadcom 4320]", "MAXg"), - T_DATA ("Wireless Network Adapter", NULL), - T_DATA ("Wireless-N Network Adapter [Ralink RT2870]", "Ralink RT2870"), - T_DATA ("Wireless PCI Adapter RT2400 / RT2460", "RT2400 / RT2460"), - T_DATA ("WIS09ABGN LinkStick Wireless LAN Adapter", "WIS09ABGN LinkStick"), - T_DATA ("WL-113 rev 1 Wireless Network USB Adapter", "WL-113"), - T_DATA ("WL-113 rev 2 Wireless Network USB Adapter", "WL-113"), - T_DATA ("WL-117 Hi-Speed USB Adapter", "WL-117"), - T_DATA ("WL1271", "WL1271"), - T_DATA ("WL-159g 802.11bg [ZyDAS ZD1211B+AL2230]", "WL-159g"), - T_DATA ("WL-167G v1 802.11g Adapter [Ralink RT2571]", "WL-167G"), - T_DATA ("WL-167G v2 802.11g Adapter [Ralink RT2571W]", "WL-167G"), - T_DATA ("WL-168 Wireless Network Adapter 54g", "WL-168"), - T_DATA ("WL169gE 802.11g Adapter [Broadcom 4320 USB]", "WL169gE"), - T_DATA ("WL-172 Wireless Network USB Adapter 54g Turbo", "WL-172 Turbo"), - T_DATA ("WL-182 Wireless-N Network USB Card", "WL-182"), - T_DATA ("WL-188 Wireless Network 300N USB Adapter", "WL-188 300N"), - T_DATA ("WL-301 Wireless Network 300N USB Adapter", "WL-301 300N"), - T_DATA ("WL-302 Wireless Network 300N USB dongle", "WL-302 300N"), - T_DATA ("WL-315 Wireless-N USB Adapter", "WL-315"), - T_DATA ("WL-321 Wireless USB Gaming Adapter 300N", "WL-321 Gaming 300N"), - T_DATA ("WL-323 Wireless-N USB Adapter", "WL-323"), - T_DATA ("WL-324 Wireless USB Adapter 300N", "WL-324 300N"), - T_DATA ("WL-329 Wireless Dualband USB adapter 300N", "WL-329 Dualband 300N"), - T_DATA ("WL-343 Wireless USB Adapter 150N X1", "WL-343 150N X1"), - T_DATA ("WL-344 Wireless Adapter 300N X2 [Ralink RT3071]", "WL-344 300N X2"), - T_DATA ("WL-345 Wireless USB adapter 300N X3", "WL-345 300N X3"), - T_DATA ("WL-349v1 Wireless Adapter 150N 002 [Ralink RT3070]", "WL-349v1 150N 002"), - T_DATA ("WL-349v4 Wireless Micro Adapter 150N X1 [Ralink RT3370]", "WL-349v4 150N X1"), - T_DATA ("WL-352v1 Wireless USB Adapter 300N 002", "WL-352v1 300N 002"), - T_DATA ("WL-358v1 Wireless Micro USB Adapter 300N X3 002", "WL-358v1 300N X3 002"), - T_DATA ("WL-430U 802.11bg", "WL-430U"), - T_DATA ("WL532U 802.11g Adapter", "WL532U"), - T_DATA ("WL-603 Wireless Adapter", "WL-603"), - T_DATA ("WL-608 Wireless USB Adapter 54g", "WL-608"), - T_DATA ("WLA3310 Wireless Adapter [Intersil ISL3887]", "WLA3310"), - T_DATA ("WLA-4000 802.11bgn [Ralink RT3072]", "WLA-4000"), - T_DATA ("WLA-5000 802.11abgn [Ralink RT3572]", "WLA-5000"), - T_DATA ("WLA-5100", "WLA-5100"), - T_DATA ("WLI2-USB2-G54 Wireless LAN Adapter", "WLI2-USB2-G54"), - T_DATA ("WLI-U2-G54HP", "WLI-U2-G54HP"), - T_DATA ("WLI-U2-KG125S 802.11g Adapter [Broadcom 4320 USB]", "WLI-U2-KG125S"), - T_DATA ("WLI-U2-KG54-AI WLAN", "WLI-U2-KG54-AI"), - T_DATA ("WLI-U2-KG54-BB", "WLI-U2-KG54-BB"), - T_DATA ("WLI-U2-KG54L 802.11bg [ZyDAS ZD1211B]", "WLI-U2-KG54L"), - T_DATA ("WLI-U2-KG54 WLAN", "WLI-U2-KG54"), - T_DATA ("WLI-U2-KG54-YB WLAN", "WLI-U2-KG54-YB"), - T_DATA ("WLI-U2-SG54HP", "WLI-U2-SG54HP"), - T_DATA ("WLI-UC-AG300N Wireless LAN Adapter", "WLI-UC-AG300N"), - T_DATA ("WLI-UC-G300HP Wireless LAN Adapter", "WLI-UC-G300HP"), - T_DATA ("WLI-UC-G300N Wireless LAN Adapter [Ralink RT2870]", "WLI-UC-G300N"), - T_DATA ("WLI-UC-G301N Wireless LAN Adapter [Ralink RT3072]", "WLI-UC-G301N"), - T_DATA ("WLI-UC-G450 Wireless LAN Adapter", "WLI-UC-G450"), - T_DATA ("WLI-UC-GNHP Wireless LAN Adapter", "WLI-UC-GNHP"), - T_DATA ("WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]", "WLI-UC-GNM2"), - T_DATA ("WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]", "WLI-UC-GNM"), - T_DATA ("WLI-UC-GN Wireless LAN Adapter [Ralink RT3070]", "WLI-UC-GN"), - T_DATA ("WLI-USB-G54 802.11g Adapter [Broadcom 4320 USB]", "WLI-USB-G54"), - T_DATA ("WLM-10U1 802.11abgn Wireless Adapter [Ralink RT3572]", "WLM-10U1"), - T_DATA ("WLM-20U2/GN-1080 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]", "WLM-20U2/GN-1080"), - T_DATA ("WLP-UC-AG300 Wireless LAN Adapter", "WLP-UC-AG300"), - T_DATA ("WM168g 802.11bg Wireless Adapter [Intersil ISL3886]", "WM168g"), - T_DATA ("WN111(v2) RangeMax Next Wireless [Atheros AR9170+AR9101]", "WN111"), - T_DATA ("WNA1000M 802.11bgn [Realtek RTL8188CUS]", "WNA1000M"), - T_DATA ("WNA1000Mv2 802.11bgn [Realtek RTL8188CUS?]", "WNA1000Mv2"), - T_DATA ("WNA1000 Wireless-N 150 [Atheros AR9170+AR9101]", "WNA1000 150"), - T_DATA ("WNA1100 Wireless-N 150 [Atheros AR9271]", "WNA1100 150"), - T_DATA ("WNA3100M(v1) Wireless-N 300 [Realtek RTL8192CU]", "WNA3100M"), - T_DATA ("WNDA3100v1 802.11abgn [Atheros AR9170+AR9104]", "WNDA3100v1"), - T_DATA ("WNDA3200 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]", "WNDA3200"), - T_DATA ("WNDA4100 802.11abgn 3x3:3 [Ralink RT3573]", "WNDA4100"), - T_DATA ("WN-G150U Wireless LAN Adapter", "WN-G150U"), - T_DATA ("WN-G300U Wireless LAN Adapter", "WN-G300U"), - T_DATA ("WNGDNUS2 802.11n", "WNGDNUS2"), - T_DATA ("WN-GDN/US3 Wireless LAN Adapter", "WN-GDN/US3"), - T_DATA ("WPN111 802.11g Wireless Adapter [Atheros AR5523]", "WPN111"), - T_DATA ("WPN111 (no firmware)", "WPN111"), - T_DATA ("WPN111 RangeMax(TM) Wireless USB 2.0 Adapter", "WPN111 RangeMax"), - T_DATA ("WUA-1340", "WUA-1340"), - T_DATA ("WUA-2340 RangeBooster G Adapter(rev.A) [Atheros AR5523]", "WUA-2340 RangeBooster"), - T_DATA ("WUA-2340 RangeBooster G Adapter(rev.A) (no firmware) [Atheros AR5523]", "WUA-2340 RangeBooster"), - T_DATA ("WUA-2340 RangeBooster G Adapter(rev.B) [Ralink RT2070]", "WUA-2340 RangeBooster"), - T_DATA ("WUBR-177G [Ralink RT2571W]", "WUBR-177G"), - T_DATA ("WUBR-208N 802.11abgn Wireless Adapter [Ralink RT2870]", "WUBR-208N"), - T_DATA ("WUG2690 802.11bg Wireless Module [ZyDAS ZD1211+AL2230]", "WUG2690"), - T_DATA ("WUG2700", "WUG2700"), - T_DATA ("WUS-201 802.11bg", "WUS-201"), - T_DATA ("WUSB100 v1 RangePlus Wireless Network Adapter [Ralink RT2870]", "WUSB100 RangePlus"), - T_DATA ("WUSB100 v2 RangePlus Wireless Network Adapter [Ralink RT3070]", "WUSB100 RangePlus"), - T_DATA ("WUSB200 802.11g Adapter [Ralink RT2671]", "WUSB200"), - T_DATA ("WUSB54AG 802.11a/g Adapter [Intersil ISL3887]", "WUSB54AG"), - T_DATA ("WUSB54GC v1 802.11g Adapter [Ralink RT73]", "WUSB54GC"), - T_DATA ("WUSB54GC v2 802.11g Adapter [Realtek RTL8187B]", "WUSB54GC"), - T_DATA ("WUSB54GC v3 802.11g Adapter [Ralink RT2070L]", "WUSB54GC"), - T_DATA ("WUSB54GP v1 802.11g Adapter [Intersil ISL3886]", "WUSB54GP"), - T_DATA ("WUSB54GP v4.0 802.11g Adapter [Ralink RT2500USB]", "WUSB54GP v4.0"), - T_DATA ("WUSB54GR", "WUSB54GR"), - T_DATA ("WUSB54GSC v1 802.11g Adapter [Broadcom 4320 USB]", "WUSB54GSC"), - T_DATA ("WUSB54GS v1 802.11g Adapter [Broadcom 4320 USB]", "WUSB54GS"), - T_DATA ("WUSB54GS v2 802.11g Adapter [Broadcom 4320 USB]", "WUSB54GS"), - T_DATA ("WUSB54G v1 802.11g Adapter [Intersil ISL3886]", "WUSB54G"), - T_DATA ("WUSB54G v2 802.11g Adapter [Intersil ISL3887]", "WUSB54G"), - T_DATA ("WUSB54G v4 802.11g Adapter [Ralink RT2500USB]", "WUSB54G"), - T_DATA ("WUSB600N v1 Dual-Band Wireless-N Network Adapter [Ralink RT2870]", "WUSB600N Dual-Band"), - T_DATA ("WUSB600N v2 Dual-Band Wireless-N Network Adapter [Ralink RT3572]", "WUSB600N Dual-Band"), - T_DATA ("WUSBF54G 802.11bg", "WUSBF54G"), - T_DATA ("WUSBF54G v1.1 802.11bg", "WUSBF54G"), - T_DATA ("X3100 Series 10 Gigabit Ethernet PCIe", "X3100"), - T_DATA ("X540 Ethernet Controller Virtual Function", "X540 Virtual Function"), - T_DATA ("X540 Virtual Function", "X540 Virtual Function"), - T_DATA ("X550 Virtual Function", "X550 Virtual Function"), - T_DATA ("X552 Virtual Function", "X552 Virtual Function"), - T_DATA ("X553 Virtual Function", "X553 Virtual Function"), - T_DATA ("X722 Virtual Function", "X722 Virtual Function"), - T_DATA ("Xframe 10-Gigabit Ethernet PCI-X", "Xframe"), - T_DATA ("Xframe II 10-Gigabit Ethernet PCI-X 2.0", "Xframe II 2.0"), - T_DATA ("XG-300 802.11b Adapter", "XG-300"), - T_DATA ("XG-703A 802.11g Wireless Adapter [Intersil ISL3887]", "XG-703A"), - T_DATA ("XG-705A 802.11g Wireless Adapter [Intersil ISL3887]", "XG-705A"), - T_DATA ("XG-760A 802.11bg", "XG-760A"), - T_DATA ("XG-76NA 802.11bg", "XG-76NA"), - T_DATA ("XG Mgmt", "XG Mgmt"), - T_DATA ("Xircom PGUNET USB-USB Bridge", "Xircom PGUNET USB-USB Bridge"), - T_DATA ("XL710/X710 Virtual Function", "XL710/X710 Virtual Function"), - T_DATA ("XX1", "XX1"), - T_DATA ("XX2", "XX2"), - T_DATA ("XX4", "XX4"), - T_DATA ("XX5", "XX5"), - T_DATA ("XX6", "XX6"), - T_DATA ("XX7", "XX7"), - T_DATA ("XX9", "XX9"), - T_DATA ("Yellowfin G-NIC gigabit ethernet", "Yellowfin"), - T_DATA ("YP3X00 PDA", "YP3X00"), - T_DATA ("Yukon Optima 88E8059 [PCIe Gigabit Ethernet Controller with AVB]", "Yukon Optima 88E8059"), - T_DATA ("Zaurus A-300", "Zaurus A-300"), - T_DATA ("Zaurus C-700 PDA", "Zaurus C-700"), - T_DATA ("Zaurus C-750/C-760/C-860/SL-C3000 PDA", "Zaurus C-750/C-760/C-860/SL-C3000"), - T_DATA ("Zaurus C-860 PDA", "Zaurus C-860"), - T_DATA ("Zaurus SL-5000D/SL-5500 PDA", "Zaurus SL-5000D/SL-5500"), - T_DATA ("Zaurus SL-6000", "Zaurus SL-6000"), - T_DATA ("Zaurus SL-B500/SL-5600 PDA", "Zaurus SL-B500/SL-5600"), - T_DATA ("ZD1211 802.11b/g Wireless Adapter", "ZD1211"), - T_DATA ("ZD1211 802.11g", "ZD1211"), - T_DATA ("ZD1211B 802.11g", "ZD1211B"), - T_DATA ("ZD1211B", "ZD1211B"), - T_DATA ("ZD1221 802.11n", "ZD1221"), - T_DATA ("Zoom 4410 Wireless-G [Intersil ISL3887]", "Zoom 4410"), - T_DATA ("ZT6688 Fast Ethernet Adapter", "ZT6688"), - T_DATA ("ZyAIR AG-225H v2 802.11bg", "ZyAIR AG-225H"), - T_DATA ("ZyAIR G-202 802.11bg", "ZyAIR G-202"), - T_DATA ("ZyAIR G-220 802.11bg", "ZyAIR G-220"), - T_DATA ("ZyAIR G-220F 802.11bg", "ZyAIR G-220F"), - }; - - _test_fixup_string (data, G_N_ELEMENTS (data), nm_utils_fixup_product_string); + do_test_fixup_desc_string (NULL, NULL); + do_test_fixup_desc_string ("", NULL); + do_test_fixup_desc_string_same ("a"); + do_test_fixup_desc_string_same ("a b"); + do_test_fixup_desc_string ("a b ", "a b"); + do_test_fixup_desc_string (" a bbc ", "a bbc"); + do_test_fixup_desc_string (" a \xcc bbc ", "a bbc"); + do_test_fixup_desc_string (" a\xcc bbc ", "a bbc"); + do_test_fixup_desc_string (" a\xcc""bbc Wireless PC", "a bbc"); + do_test_fixup_desc_string (" a\xcc""bbc Wireless PC ", "a bbc"); + do_test_fixup_desc_string (" a\xcc""bbcWireless PC ", "a bbcWireless PC"); + do_test_fixup_desc_string (" a\xcc""bbc Wireless PCx", "a bbc Wireless PCx"); + do_test_fixup_desc_string (" a\xcc""bbc Inc Wireless PC ", "a bbc"); } /*****************************************************************************/ @@ -2164,8 +63,7 @@ int main (int argc, char **argv) { nmtst_init (&argc, &argv, TRUE); - g_test_add_func ("/libnm/general/fixup_product_string", test_fixup_product_string); - g_test_add_func ("/libnm/general/fixup_vendor_string", test_fixup_vendor_string); + g_test_add_func ("/libnm/general/fixup_desc_string", test_fixup_desc_string); return g_test_run (); } diff --git a/libnm/tests/test-secret-agent.c b/libnm/tests/test-secret-agent.c index 25752e9a..77f972f5 100644 --- a/libnm/tests/test-secret-agent.c +++ b/libnm/tests/test-secret-agent.c @@ -349,9 +349,10 @@ connection_activated_none_cb (GObject *c, gpointer user_data) { TestSecretAgentData *sadata = user_data; + NMActiveConnection *ac; gs_free_error GError *error = NULL; - nm_client_activate_connection_finish (sadata->client, result, &error); + ac = nm_client_activate_connection_finish (sadata->client, result, &error); g_assert_error (error, NM_AGENT_MANAGER_ERROR, NM_AGENT_MANAGER_ERROR_NO_SECRETS); g_main_loop_quit (sadata->loop); -- cgit 1.3.0-6-gf8a5